f7cloud_client/apps/contacts/js/contacts-main.mjs.map
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

1 line
1.9 MiB
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"mappings":"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","names":["_sfc_main","_createBlock","_component_RouterView","_hoisted_1","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","NcActionSeparator","_export_sfc","defineComponent","__props","renderSlot","normalizeClass","NcAppContentList","_hoisted_2","_hoisted_3","_hoisted_4","props","slots","useSlots","registerSection","unregisterSection","useAppSettingsDialog","legacy","inject","APP_SETTINGS_LEGACY_DESIGN_KEY","htmlId","computed","watch","logger","newId","newName","newOrder","oldId","onMounted","onBeforeUnmount","unref","createElementVNode","toDisplayString","NcAppSettingsSection","humanizedCount","getCanonicalLocale","originalCountAsTitleIfNeeded","countAsString","NcCounterBubble","style","useCssModule","provide","NC_FORM_BOX_CONTEXT_KEY","ncFormBox","ncFormBox_row","ncFormBox__item","ncFormBox_col","style0","cssModules","NcFormBox","formBoxItemClass","useNcFormBox","descriptionId","createElementId","hasDescription","isLegacy","createBlock","resolveDynamicComponent","mergeProps","$event","withCtx","createTextVNode","createCommentVNode","formBoxItem","formBoxItem_legacy","formBoxItem_inverted","formBoxItem__element","formBoxItem__description","formBoxItem__content","formBoxItem__icon","NcFormBoxItem","mergeModels","__emit","modelValue","useModel","emit","inputId","createSlots","withDirectives","vModelCheckbox","createVNode","NcIconToggleSwitch","formBoxSwitch__input","NcFormBoxSwitch","NcActions","_sfc_main$1","value","newValue","event","navigate","routerLinkHref","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_component_NcCounterBubble","resolveComponent","_component_NcActions","normalizeProps","guardReactiveProps","isActive","args","withKeys","vShow","NcListItem","margin","defaultSize","NcAvatar","NcIconSvgWrapper","userStatus","margin2","EMAIL_NOTATION","match","_component_NcAvatar","_component_NcHighlight","_component_NcIconSvgWrapper","normalizeStyle","NcListItemIcon","search","ref","clickableArea","gridBaseLine","avatarSize","filterBy","option","label","search2","subname","NcSelect","selectedOption","NcSelectUsers","NcUserBubbleDiv","isOpen","isAvatarUrl","isCustomAvatar","avatarStyle","hasUrl","warn","href","contentComponent","RouterLink","contentStyle","NcPopover","attrs","NcUserBubble","cumsum","values","valueof","sum","index","v","max","min","noop","dispatch","i","n","_","t","Dispatch","parseTypenames","typenames","types","name","typename","callback","T","get","set","copy","type","that","c","xhtml","namespaces","namespace","prefix","creatorInherit","document","uri","creatorFixed","fullname","creator","none","selector","selection_select","select","groups","m","subgroups","j","group","subgroup","node","subnode","Selection","array","x","empty","selectorAll","arrayAll","selection_selectAll","parents","matcher","childMatcher","find","childFind","childFirst","selection_selectChild","filter","children","childrenFilter","selection_selectChildren","selection_filter","sparse","update","selection_enter","EnterNode","parent","datum","child","next","constant$3","bindIndex","enter","exit","data","groupLength","dataLength","bindKey","key","nodeByKeyValue","keyValues","keyValue","selection_data","bind","constant","arraylike","enterGroup","updateGroup","exitGroup","i0","i1","previous","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","context","selection","groups0","groups1","m0","m1","merges","group0","group1","merge","selection_order","selection_sort","compare","ascending","compareNode","a","b","sortgroups","sortgroup","selection_call","selection_nodes","selection_node","selection_size","size","selection_empty","selection_each","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","selection_attr","defaultView","styleRemove","styleConstant","priority","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","string","classList","ClassList","classedAdd","names","list","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","lower","selection_lower","selection_append","create","constantNull","selection_insert","before","remove","selection_remove","selection_cloneShallow","clone","selection_cloneDeep","selection_clone","deep","selection_datum","contextListener","listener","onRemove","on","o","onAdd","options","selection_on","dispatchEvent","params","window","dispatchConstant","dispatchFunction","selection_dispatch","selection_iterator","root","selection_selection","sourceEvent","pointer","svg","point","rect","nonpassivecapture","noevent$1","dragDisable","view","noevent","yesdrag","noclick","define","constructor","factory","prototype","extend","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","format","l","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","rgb","opacity","k","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","h","s","Hsl","hsl","m2","hsl2rgb","clamph","clampt","constant$2","linear","d","exponential","y","gamma","nogamma","interpolateRgb","rgbGamma","start","end","colorRgb","interpolateNumber","reA","reB","zero","one","interpolateString","bi","am","bm","bs","q","number","degrees","identity","decompose","e","f","scaleX","scaleY","skewX","svgNode","parseCss","parseSvg","interpolateTransform","parse","pxComma","pxParen","degParen","pop","translate","xa","ya","xb","yb","rotate","scale","interpolateTransformCss","interpolateTransformSvg","epsilon2","cosh","sinh","tanh","interpolateZoom","zoomRho","rho","rho2","rho4","zoom","p0","p1","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","S","d1","b0","b1","r0","r1","coshr0","u","_1","_2","_4","frame","timeout","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","now","clearNow","Timer","timer","delay","time","sleep","timerFlush","wake","nap","poke","t0","t1","t2","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedule","id","timing","schedules","init","self","tween","stop","tick","interrupt","active","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","tweenValue","transition","interpolate","value1","string00","string1","interpolate0","string0","string10","transition_attr","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","easeVarying","transition_easeVarying","transition_filter","Transition","transition_merge","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","transition_selectAll","inherit","transition_selection","styleNull","styleMaybeRemove","listener0","transition_style","styleInterpolate","styleTween","transition_styleTween","transition_text","textInterpolate","textTween","transition_textTween","transition_transition","id0","id1","transition_end","resolve","reject","cancel","selection_prototype","cubicInOut","defaultTiming","easeCubicInOut","selection_transition","pi","tau","epsilon","tauEpsilon","Path","path","x1","y1","x2","y2","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","a0","a1","ccw","cw","da","w","count","node_count$1","node_each$1","node_eachBefore$1","nodes","node_eachAfter$1","node_find","node_sum$1","node_sort$1","node_path$1","ancestor","leastCommonAncestor","aNodes","bNodes","node_ancestors$1","node_descendants$1","node_leaves$1","leaves","node_links$1","links","node_iterator","current","hierarchy","mapChildren","objectChildren","Node","childs","computeHeight","node_copy","copyData","height","node_count","node_each","node_eachAfter","node_eachBefore","node_sum","node_sort","node_path","node_ancestors","node_descendants","node_leaves","node_links","optional","required","preroot","ambiguous","imputed","defaultId","defaultParentId","stratify","parentId","currentId","currentParentId","nodeId","nodeKey","nodeByKey","I","normalize","P","parentof","slash","defaultSeparation","nextLeft","nextRight","moveSubtree","wm","wp","shift","change","executeShifts","nextAncestor","vim","TreeNode","treeRoot","tree","separation","nodeSize","firstWalk","secondWalk","sizeNode","left","right","bottom","tx","kx","ky","siblings","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","constant$1","slice","p","Bump","bumpX","linkSource","linkTarget","link","curve","source","target","pointX","pointY","output","buffer","argv","linkHorizontal","ZoomEvent","transform","Transform","location","nopropagation","defaultFilter","defaultExtent","defaultTransform","defaultWheelDelta","defaultTouchable","defaultConstrain","extent","translateExtent","dx0","dx1","dy0","dy1","constrain","wheelDelta","touchable","scaleExtent","duration","listeners","touchstarting","touchfirst","touchending","touchDelay","wheelDelay","clickDistance2","tapDistance","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","collection","gesture","k0","k1","centroid","clean","Gesture","wheelidled","currentTarget","mousemoved","mouseupped","dragEnable","touches","started","l0","l1","dp","dl","valued","defaultChildren","version","packageInfo","defaults","flextree","opts","accessor","opt","layout","wtree","wrap","getWrapper","getFlexNode","spacing","FlexNode","oNode","ancs","acc","kid","e0","e1","layoutChildren","resolveX","FlexClass","treeData","_wrap","kidsData","kd","hl","arg","kids","_dump","i2","kdumps","lastLows","lowY","separate","lows","updateLows","shiftChange","positionRoot","prevSum","parentX","lastShiftSum","lastChangeSum","shiftSum","changeSum","lSib","curSubtree","rContour","rSumMods","lContour","lSumMods","isFirst","dist","distributeExtra","rightBottom","leftBottom","nextRContour","nextLContour","setLThr","setRThr","subtree","distance","curSubtreeI","leftSibI","delta","firstChild","lExt","diff","rExt","kf","prelim","d3","zoomIdentity","OrgChart$1","d3Node","n1","n2","state","arr","step","currentIndex","ex","ey","mx","my","xrvs","yrvs","rdef","offsets","visibleConnections","conn","labelWidth","rootMargin","centerY","centerX","width","siblingsMargin","childrenMargin","compactViewIndex","chartHeight","chartWidth","container","elementTag","_children","nodeStore","zoomLevel","containerRect","calc","behaviors","nodeA","nodeB","chart","obj","descendants","nodeFound","aggegator","grouped","item","compactChildren","evenMaxColumnDimension","oddMaxColumnDimension","columnSize","rowsMapNew","reducedGroup","rowSize","fch","offsetX","cumSum","connections","allNodesMap","visibleNodesMap","connection","defsString","existingString","linkSelection","linkUpdate","xo","yo","connectionsSel","connUpdate","xs","ys","xt","yt","nodesSelection","nodeEnter","xj","yj","nodeUpdate","nodeButtonGroups","nodeExitTransition","maxDepthNode","centeredNode","centeredNodes","spread","flag","ch","expandNodesFirst","descendantsBefore","hiddenNodesMap","localNode","_hierarchyHeight","centerG","zoomBehavior","lastTransform","scaleVal","animate","onCompleted","minX","maxX","minY","maxY","newPagingIndex","expandedFlag","elem","el","url","xhr","reader","full","onLoad","save","backgroundColor","svgImg","total","exportImage","dataUrl","imageName","allNodes","isSvg","onAlreadySerialized","saveAs","filename","serializeString","xmlns","xlinkns","svgns","fragment","walker","attr","quality","image","canvas","dt","text","fontSize","fontWeight","defaultFont","ctx","Avatar","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_router_link","_component_Avatar","_toDisplayString","head","getLocale","inputProps","OrgChart","containerHTMLElement","app","createApp","ChartTemplate","uid","router","LegacyGlobalMixin","$el","d3.select","dRect","_component_NcSelect","AppContent","contactsByUid","contacts","addressbook","Buffer","headManagers","tempContacts","contact","prev","transformNode","manager","charts","managerNode","getChart","_component_AppContent","_component_OrgChart","_mergeProps","ENFORCE_PASSWORD_PROTECTION","USE_UNIQUE_PASSWORD","UNIQUE_PASSWORD","CheckboxRadioSwitch","NcButton","_component_CheckboxRadioSwitch","_Fragment","_component_NcButton","_renderSlot","_sfc_main$17","ContentHeading","CirclePasswordSettings","IconDelete","IconLogout","NcCheckboxRadioSwitch","PUBLIC_CIRCLE_CONFIG","config","checked","prevConfig","circleData","editCircle","CircleEdit","error","showError","_renderList","configs","title","_component_ContentHeading","_withCtx","_createTextVNode","_component_NcCheckboxRadioSwitch","_component_CirclePasswordSettings","_component_IconLogout","_component_IconDelete","NcNoteCard","NcTextField","CloseOutlineIcon","CheckOutlineIcon","shown","actualValue","_component_NcPopover","_component_NcTextField","_component_CloseOutlineIcon","_component_CheckOutlineIcon","_component_NcNoteCard","z","$","O","N","B","M","E","R","A","C","H","UserBubble","_component_UserBubble","_normalizeClass","_withModifiers","EmptyContent","EntityBubble","IconAccountPlusOutline","IconSearch","IconLoading","Modal","VList","EntitySearchResult","invalidTypes","entity","dataSet","dataList","subscribe","debounce","_component_Modal","_component_IconAccountPlusOutline","_component_EmptyContent","_component_IconLoading","_TransitionGroup","_component_EntityBubble","_component_IconSearch","_component_VList","_component_EntitySearchResult","RouterMixin","IconAccountGroupOutline","NcActionButton","NcActionText","IconDeleteOutline","IconExitToApp","IconShieldCheckOutline","IconCheckOutline","IconCloseOutline","MemberLevels","levels","MemberStatus","CIRCLES_MEMBER_LEVELS","level","DialogBuilder","changeMemberLevel","_component_IconAccountGroupOutline","_component_IconCheckOutline","_component_IconCloseOutline","_component_NcActionText","_component_IconShieldCheckOutline","_component_NcActionButton","_component_NcActionSeparator","_component_IconExitToApp","_component_IconDeleteOutline","shareType","SHARES_TYPES_MEMBER_MAP","maxAutocompleteResults","getSuggestions","request","axios","generateOcsUrl","exact","rawExactSuggestions","rawSuggestions","exactSuggestions","result","share","formatResults","suggestions","allSuggestions","nameCounts","finalResults","getRecommendations","_sfc_main$X","EntityPicker","IconContact","MemberGridItem","NcEmptyContent","IsMobileMixin","CIRCLES_MEMBER_GROUPING","userType","member","teams","users","circleId","results","term","entry","showWarning","guest","_component_NcEmptyContent","_component_MemberGridItem","_component_IconContact","_component_EntityPicker","_createCommentVNode","CopyToClipboardMixin","showSuccess","CircleActionsMixin","Circle","route","confirm","initiator","joinCircle","Member","AccountPlusIcon","ListItem","CogIcon","CopyIcon","IconAccountGroup","FileDocumentOutline","LoginIcon","LogoutIcon","MemberList","CircleSettings","TeamResourceButton","NcLoadingIcon","PencilIcon","NcTextArea","FolderIcon","MessageIcon","CalendarIcon","ViewDashboardIcon","BookOpenPageVariantIcon","CheckIcon","avatarList","useElementSize","reactive","avatarWidth","maxMembers","resource","providerId","res","enabledApps","resourceId","resourceType","folderPath","getCurrentUser","talkUrl","collectiveName","collectiveUrl","DavClient","__vite_default__","generateRemoteUrl","__vitePreload","client","calendarHome","davCalendar","calendarName","shareUrl","participantUrl","circleUri","response","errors","errorFields","generateUrl","_hoisted_11","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_17","_hoisted_18","_hoisted_21","_hoisted_22","_hoisted_23","_component_NcLoadingIcon","_component_NcTextArea","_component_PencilIcon","_component_CopyIcon","_component_CogIcon","_component_CircleSettings","_component_LoginIcon","_component_LogoutIcon","_hoisted_12","_component_CheckIcon","_component_TeamResourceButton","_resolveDynamicComponent","_hoisted_16","_component_ListItem","_component_FileDocumentOutline","_component_AccountPlusIcon","_component_MemberList","_component_IconAccountGroup","user","UserGroup","ROUTE_USER_GROUP","UserGroupMember","_component_UserGroupMember","getUserGroups","userId","getUserGroupMembers","groupId","useUserGroupStore","defineStore","userGroups","newUserGroup","members","CircleDetails","AccountGroup","UserGroupDetails","mapStores","newCircle","userGroupId","_component_AccountGroup","_component_UserGroupDetails","_component_CircleDetails","zeroFillFinders","matrix","zeroPixel","clearMatrixCenter","widthPct","heightPct","mW","cW","mH","cH","clearStartX","clearStartY","enc","dec","encode","inData","parse_url","str","encode_numeric","encode_alphanum","encode_url","encode_8bit","pushBits","bit","len","bits","ALPHANUM","path_res","calculateEC","msg","ec_len","poly","generatorPolynomial","log_k","log","exp","GF256_BASE","EXP_TABLE","LOG_TABLE","POLYNOMIALS","num","fillFinders","pixel","fillAlignAndTiming","fillStub","fillReserved","FORMATS","VERSIONS","gf15","gf18","formats_mask","EC_LEVELS","ec_level","mask","F","V","fillData","MASK_FUNCTIONS","row","col","dir","mask_fn","put","byte","calculatePenalty","penalty","J","numDark","getMatrix","bestMask","cell","getTemplate","message","mappedVersions","deepCopy","fillTemplate","template","blocks","messageUpdated","pad","offset","QR","versions","length","num_template","block","colorName","isArrayish","require$$0","concat","swizzle","simpleSwizzleModule","fn","colorNames","require$$1","hasOwnProperty","reverseNames","cs","colorStringModule","val","model","abbr","per","keyword","hexAlpha","clamp","alpha","hwb","hexDouble","hwba","getOptions","inOptions","BITMAP_OPTIONS","VECTOR_OPTIONS","colorToHex","colorString","svgMove","top","svgReturn","svgDeltaArc","borderRadius","sweep","svgVerticalDeltaLite","svgHorizontalDeltaLine","getFindersSVGPath","matrixSize","finderEnd","sides","rectangles","side","xSign","ySign","sidePoint","xCorner","yCorner","xDelta","yDelta","rectangle","getDotsSVGPath","column","leftX","topY","commonOptions","VERSION","_hasBuffer","_TD","_TE","b64ch","b64chs","b64tab","tab","b64re","_fromCC","_U8Afrom","it","_mkUriSafe","src","_tidyB64","btoaPolyfill","bin","u32","c0","c1","c2","asc","_btoa","_fromUint8Array","u8a","strs","fromUint8Array","urlsafe","cb_utob","cc","re_utob","utob","_encode","encodeURI","re_btou","cb_btou","cccc","cp","btou","atobPolyfill","u24","r2","_atob","_toUint8Array","toUint8Array","_unURI","_decode","decode","isValid","_noEnum","extendString","_add","body","extendUint8Array","extendBuiltins","gBase64","getSVG","createSVG","te","logo","logoWidth","logoHeight","bgColor","imageWidth","imageHeight","actualBlockSize","matrixSizePx","marginPx","imageSizePx","imageWidthStr","imageHeightStr","xmlTag","svgOpeningTag","svgBody","getSVGBody","svgEndTag","logoImage","getLogoImage","dotsPath","outerFindersPath","imageBase64","Base64","logoWidthPx","logoHeightPx","IconAdd","PropertyTitleIcon","Actions","ActionButton","ChevronLeft","DotsHorizontalIcon","OrgChartsMixin","Contact","rfcProps","prop","others","defaultjCal","property","ICAL","defaultData","defaultValue","_component_Actions","_component_IconAdd","_component_ActionButton","_component_PropertyTitleIcon","_component_DotsHorizontalIcon","_component_ChevronLeft","FRAGMENT","TELEPORT","SUSPENSE","KEEP_ALIVE","BASE_TRANSITION","OPEN_BLOCK","CREATE_BLOCK","CREATE_ELEMENT_BLOCK","CREATE_VNODE","CREATE_ELEMENT_VNODE","CREATE_COMMENT","CREATE_TEXT","CREATE_STATIC","RESOLVE_COMPONENT","RESOLVE_DYNAMIC_COMPONENT","RESOLVE_DIRECTIVE","RESOLVE_FILTER","WITH_DIRECTIVES","RENDER_LIST","RENDER_SLOT","CREATE_SLOTS","TO_DISPLAY_STRING","MERGE_PROPS","NORMALIZE_CLASS","NORMALIZE_STYLE","NORMALIZE_PROPS","GUARD_REACTIVE_PROPS","TO_HANDLERS","CAMELIZE","CAPITALIZE","TO_HANDLER_KEY","SET_BLOCK_TRACKING","PUSH_SCOPE_ID","POP_SCOPE_ID","WITH_CTX","UNREF","IS_REF","WITH_MEMO","IS_MEMO_SAME","helperNameMap","registerRuntimeHelpers","helpers","Namespaces","NodeTypes","ElementTypes","ConstantTypes","locStub","createRoot","createVNodeCall","tag","patchFlag","dynamicProps","directives","isBlock","disableTracking","isComponent","loc","getVNodeBlockHelper","getVNodeHelper","createArrayExpression","elements","createObjectExpression","properties","createObjectProperty","isString","createSimpleExpression","content","isStatic","constType","createInterpolation","createCompoundExpression","createCallExpression","callee","createFunctionExpression","returns","newline","isSlot","createConditionalExpression","test","consequent","alternate","createCacheExpression","needPauseTracking","inVOnce","createBlockStatement","createTemplateLiteral","createIfStatement","createAssignmentExpression","createSequenceExpression","expressions","createReturnStatement","ssr","convertToBlock","helper","removeHelper","inSSR","defaultDelimitersOpen","defaultDelimitersClose","isTagStartChar","isWhitespace","isEndOfTagSection","toCharCodes","ret","Sequences","Tokenizer","stack","cbs","line","isEnd","endOfText","actualIndex","sequence","quote","input","endIndex","consumed","CompilerDeprecationTypes","deprecationData","getCompatValue","compatConfig","isCompatEnabled","mode","checkCompatEnabled","warnDeprecation","err","defaultOnError","defaultOnWarn","createCompilerError","code","messages","additionalMessage","ErrorCodes","errorMessages","walkIdentifiers","onIdentifier","includeAll","parentStack","knownIds","isReferencedIdentifier","isInDestructureAssignment","isInNewExpression","walkFunctionParams","onIdent","extractIdentifiers","walkBlockDeclarations","stmt","decl","isForStatement","walkForStatement","walkSwitchStatement","isVar","variable","stmt2","param","object","element","isFunctionType","isStaticProperty","isStaticPropertyKey","TS_NODE_TYPES","unwrapTSNode","isStaticExp","isCoreComponent","nonIdentifierRE","isSimpleIdentifier","validFirstIdentCharRE","validIdentCharRE","whitespaceRE","getExpSource","isMemberExpressionBrowser","stateStack","currentOpenBracketCount","currentOpenParensCount","currentStringType","char","isMemberExpressionNode","NOOP","isMemberExpression","fnExpRE","isFnExpressionBrowser","isFnExpressionNode","isFnExpression","advancePositionWithClone","pos","numberOfCharacters","advancePositionWithMutation","linesCount","lastNewLinePos","assert","condition","findDir","allowEmpty","findProp","dynamicOnly","isStaticArgOf","hasDynamicKeyVBind","isText$1","isVPre","isVSlot","isTemplateNode","isSlotOutlet","propsHelperSet","getUnnormalizedProps","callPath","injectProp","propsWithInjection","parentCall","first","hasProp","propKeyName","toValidAssetId","searchValue","replaceValue","hasScopeRef","ids","isObject","getMemoedVNodeCall","forAliasRE","isAllWhitespace","isWhitespaceText","isCommentOrWhitespace","defaultParserOptions","NO","currentOptions","currentRoot","currentInput","currentOpenTag","currentProp","currentAttrValue","currentAttrStartIndex","currentAttrEndIndex","inPre","inVPre","currentVPreBoundary","tokenizer","emitError","onText","getSlice","innerStart","innerEnd","addNode","createExp","getLoc","endOpenTag","found","onCloseTag","backTrack","raw","dirToAttr","setLocEnd","mod","condense","expParseMode","parseForExpression","syncIndex","forIteratorRE","stripParensRE","inMatch","LHS","RHS","createAliasExpression","asParam","valueContent","trimmedOffset","iteratorMatch","keyContent","keyOffset","indexContent","ns","lastNode","isImplied","lookAhead","isFragmentTemplate","condenseWhitespace","inlineTemplateProp","specialTemplateDir","isUpperCase","windowsNewlineRE","shouldCondense","removedWhitespace","hasNewlineChar","prevCharIsWhitespace","cloneLoc","parseMode","reset","baseParse","delimiters","cacheStatic","walk","getSingleElementRoot","doNotHoistNode","inFor","toCache","constantType","getConstantType","codegenNode","getGeneratedPropsConstantType","getNodeProps","cachedAsArray","isArray","getCacheExpression","slot","getSlotNode","slotName","node2","constantCache","cached","returnType2","generatedPropsType","childType","expType","returnType","isSymbol","allowHoistedHelperSet","getConstantTypeOfHelperCall","keyType","valueType","createTransformContext","prefixIdentifiers","hoistStatic","hmr","cacheHandlers","nodeTransforms","directiveTransforms","transformHoist","isBuiltInComponent","isCustomElement","expressionPlugins","scopeId","slotted","ssrCssVars","bindingMetadata","EMPTY_OBJ","inline","isTS","onError","onWarn","nameMatch","capitalize","camelize","currentCount","removalIndex","identifier","isVNode","cacheExp","traverseNode","createRootCodegen","singleElementRootChild","traverseChildren","nodeRemoved","exitFns","onExit","createStructuralDirectiveTransform","matches","PURE_ANNOTATION","aliasHelper","createCodegenContext","ast","sourceMap","optimizeImports","runtimeGlobalName","runtimeModuleName","ssrRuntimeModuleName","newlineIndex","withoutNewLine","generate","push","indent","deindent","hasHelpers","useWithBlock","genFunctionPreamble","functionName","signature","genAssets","genNode","VueBinding","staticHelpers","genHoists","assets","resolver","maybeSelfReference","hoists","genNodeListAsArray","multilines","genNodeList","comma","genText","genExpression","genInterpolation","genCompoundExpression","genComment","genVNodeCall","genCallExpression","genObjectExpression","genArrayExpression","genFunctionExpression","genConditionalExpression","genCacheExpression","pure","genExpressionAsPropertyKey","patchFlagString","callHelper","genNullableArgs","needNewline","needsParens","isNested","needArraySpread","transformExpression","processExpression","memo","asParams","asRawStatements","localVars","stringifyExpression","transformIf","processIf","ifNode","branch","isRoot","sibling","createCodegenNodeForBranch","parentCondition","getParentCondition","processCodegen","createIfBranch","isTemplateIf","keyIndex","createChildrenCodegenNode","keyProperty","vnodeCall","transformFor","processFor","forNode","renderExp","isTemplate","keyProp","keyExp","isStableFragment","fragmentFlag","childBlock","needFragmentWrapper","slotOutlet","loop","createForLoopParams","parseResult","finalizeForParseResult","addIdentifiers","removeIdentifiers","scopes","memoArgs","createParamsList","defaultFallback","trackSlotScopes","vSlot","trackVForSlotScopes","vFor","buildClientSlotFn","_vForExp","buildSlots","buildSlotFn","slotsProperties","dynamicSlots","hasDynamicSlots","onComponentSlot","hasTemplateSlots","hasNamedDefaultSlot","implicitDefaultChildren","seenSlotNames","conditionalBranchIndex","slotElement","slotDir","slotChildren","slotLoc","slotProps","dirLoc","staticSlotName","slotFunction","vIf","vElse","buildDynamicSlot","conditional","buildDefaultSlotProperty","children2","slotFlag","hasForwardedSlots","directiveImportMap","transformElement","vnodeTag","resolveComponentType","isDynamicComponent","vnodeProps","vnodeChildren","vnodeDynamicProps","dynamicPropNames","vnodeDirectives","shouldUseBlock","propsBuildResult","buildProps","buildDirectiveArgs","hasDynamicTextChild","stringifyDynamicPropNames","isExplicitDynamic","isComponentTag","isProp","builtIn","elementLoc","mergeArgs","runtimeDirectives","hasChildren","hasRef","hasClassBinding","hasStyleBinding","hasHydrationEventBinding","hasDynamicKeys","hasVnodeHook","pushMergeArg","dedupeProperties","pushRefVForMarker","analyzePatchFlag","isEventHandler","isOn","isReservedProp","nameLoc","modifiers","isVBind","isVOn","directiveTransform","props2","needRuntime","isBuiltInDirective","propsExpression","classKeyIndex","styleKeyIndex","hasDynamicKey","classProp","styleProp","knownProps","deduped","existing","mergeAsArray","incoming","dirArgs","runtime","trueExpression","modifier","propsNamesString","transformSlotOutlet","processSlotOutlet","slotArgs","expectedLen","nonNameProps","transformOn","augmentor","eventName","rawName","eventString","toHandlerKey","shouldCache","isMemberExp","isInlineStatement","hasMultipleStatements","transformBind","_node","injectPrefix","transformText","currentContainer","hasText","callArgs","seen$1","transformOnce","cur","transformModel","createTransformProps","rawExp","expString","bindingType","propName","assignmentExp","eventArg","modifiersKey","validDivisionCharRE","transformFilter","rewriteFilter","parseFilter","inSingle","inDouble","inTemplateString","inRegex","curly","square","paren","lastFilterIndex","expression","filters","pushFilter","wrapFilter","seen","transformMemo","transformVBindShorthand","getBaseTransformPreset","baseCompile","isModuleMode","resolvedOptions","BindingTypes","noopDirectiveTransform","V_MODEL_RADIO","V_MODEL_CHECKBOX","V_MODEL_TEXT","V_MODEL_SELECT","V_MODEL_DYNAMIC","V_ON_WITH_MODIFIERS","V_ON_WITH_KEYS","V_SHOW","TRANSITION","TRANSITION_GROUP","decoder","decodeHtmlBrowser","asAttr","parserOptions","isVoidTag","isHTMLTag","isSVGTag","isMathMLTag","rootNamespace","transformStyle","parseInlineCSS","cssText","normalized","parseStringStyle","createDOMCompilerError","DOMErrorCodes","DOMErrorMessages","transformVHtml","transformVText","baseResult","transformModel$1","directiveToUse","isInvalidType","isEventOptionModifier","isNonKeyModifier","makeMap","maybeKeyModifier","isKeyboardEvent","resolveModifiers","keyModifiers","nonKeyModifiers","eventOptionModifiers","transformClick","transformOn$1","handlerExp","modifierPostfix","transformShow","ignoreSideEffectTags","DOMNodeTransforms","DOMDirectiveTransforms","compile","exports","compilerDom","runtimeDom","shared","require$$2","_interopNamespaceDefault","runtimeDom__namespace","compileCache","compileToFunction","render","vueModule","global","module","this","ownKeys","_objectSpread2","_defineProperty","_toPrimitive","_toPropertyKey","_typeof","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_createClass","protoProps","staticProps","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","arr2","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","TEMPLATE","isNaN","isNumber","isPositiveNumber","isUndefined","isPlainObject","_constructor","isFunction","toArray","forEach","assign","_len","_key","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","styles","hasClass","addClass","className","removeClass","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","setData","removeData","REGEXP_SPACES","onceSupported","supported","once","removeListener","handler","addListener","_handler","_element$listeners","_len2","_key2","getOffset","box","REGEXP_ORIGINS","isCrossOriginURL","parts","addTimestamp","timestamp","getTransforms","_ref","translateX","translateY","getMaxZoomRatio","pointers","pointers2","maxRatio","pointerId","pointer2","z1","z2","ratio","getPointer","_ref2","endOnly","pageX","pageY","getPointersCenter","_ref3","startX","startY","getAdjustedSizes","_ref4","aspectRatio","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","sinArc","cosArc","newWidth","newHeight","getSourceCanvas","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","naturalWidth","naturalHeight","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","maxSizes","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","fromCharCode","getStringFromCharCode","dataView","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","arrayBuffer","uint8","arrayBufferToDataURL","mimeType","chunks","chunkSize","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","cropper","containerData","imageData","viewMode","rotated","canvasWidth","canvasHeight","canvasData","sizeLimited","positionLimited","cropBoxData","cropped","minCanvasWidth","minCanvasHeight","_getAdjustedSizes","newCanvasLeft","newCanvasTop","changed","transformed","_getRotatedSizes","autoCropArea","limited","minCropBoxWidth","minCropBoxHeight","maxCropBoxWidth","maxCropBoxHeight","preview","crossOrigin","alt","previews","img","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","events","handlers","ratioX","ratioY","_this","buttons","button","action","touch","minLeft","minTop","renderable","range","check","methods","hasSameSize","offsetY","_this$canvasData","_originalEvent","pivot","center","_scaleX","_scaleY","rounded","widthChanged","heightChanged","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","sourceWidth","sourceHeight","srcX","srcY","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","dragBox","face","croppable","movable","AnotherCropper","Cropper","tagName","_parseOrientation","crossOriginUrl","_this2","isIOSWebKit","done","sizingImage","cropBox","parentNode","VueCropper","_vue","_cropperjs","_cropperjs2","_interopRequireDefault","_objectWithoutProperties","keys","previewPropType","crossorigin","_$options$props","onlyColorChanged","supportedNetworks","loadState","ActionLink","IconCloudDownload","IconDownload","IconUpload","IconFolder","IconImage","NcModal","emails","availableSocial","availableMessenger","available","imageSvg","sanitizeSVG","ccc","file","word","uint","bytes","nextcloudMajorVersion","photo","photoUrl","blob","base64data","getFilePickerBuilder","network","showInfo","_component_NcModal","_component_VueCropper","_component_IconImage","_component_IconUpload","_component_IconFolder","_component_IconCloudDownload","_component_ActionLink","_component_IconDownload","defaultAlphabetIndexMap","isNumberCode","naturalCompare","lengthA","lengthB","indexA","indexB","alphabetIndexMap","firstDifferenceInLeadingZeros","buildAlphabetIndexMap","charCodeA","charCodeB","numStartA","numStartB","numEndA","numEndB","difference","alphabetIndexMapCache","alphabet","existingMap","indexMap","maxCharCode","maxCode","naturalCompare_1","PropertyTitle","_component_PropertyTitle","_withDirectives","moment","toRaw","isTalkEnabled","profileEnabled","browserStorage","getBuilder","AddNewProp","AppContentDetails","ContactAvatar","ContactDetailsProperty","DetailsHeader","IconMail","IconMessage","IconCall","IconAccount","IconQr","CakeIcon","IconCopy","PropertyGroups","PropertyRev","PropertySelect","NcRelatedResourcesPanel","FolderMultipleImage","mitt","EyeCircleIcon","nameA","nameB","organization","escape","tel","address","newContact","oldContact","jCal","svgBytes","svgString","addressbookId","localContact","validate","propModel","propType","lastUsed","newAddressBook","lastUsedAddressBook","_component_AppContentDetails","_component_DetailsHeader","_component_ContactAvatar","_vModelText","_component_IconAccount","emailAddress","_component_IconMail","phoneNumber","_component_IconCall","_component_IconCopy","_component_IconQr","_component_CakeIcon","_component_ContactDetailsProperty","_component_PropertySelect","_component_PropertyGroups","_component_NcRelatedResourcesPanel","_component_FolderMultipleImage","_component_AddNewProp","_component_PropertyRev","IconCancelRaw","IconDeleteRaw","evt","newState","appendContactToGroup","groupName","ContactsListItem","IconPlus","IconAccountPlus","IconBookArrow","ab","allGroups","selectedGroup","movePromises","_component_ContactsListItem","_component_IconPlus","_component_IconAccountPlus","_component_IconBookArrow","IconCheckCircleOutline","IconCloseCircleOutline","IconSetMerge","IconDomain","IconBadgeAccount","contactA","contactB","sortedA","sortedB","groupedA","groupedB","allKeys","map","valA","valB","conflictInformation","currentVersions","resolutions","sortedProperties","conflictsCount","aType","bType","contactToSave","finalProperties","resolvedVersion","resolvedVersions","_component_IconCloseCircleOutline","_component_IconCheckCircleOutline","singleProperty","propertyIndex","_component_IconSetMerge","AppContentList","IconSelect","IconAccountMultiple","IconBookAccount","NcDialog","Merging","Batch","contactsList","old","oldIndex","scroller","scrollerBoundingRect","itemBoundingRect","itemHeight","isRange","lastToggledIndex","selected","newSelection","mergedContact","_component_AppContentList","_component_NcDialog","_component_Merging","_component_Batch","_Transition","_component_IconSelect","_component_IconAccountMultiple","_component_IconBookAccount","ContactDetails","ContactsList","_component_ContactsList","_component_ContactDetails","CIRCLE_DESC","getCapabilities","ActionText","AppNavigationItem","ExitToApp","IconCog","LocationEnter","AccountStar","AccountGroupOutline","_component_AppNavigationItem","_component_AccountStar","_component_AccountGroupOutline","_component_ActionText","_component_IconCog","_component_ExitToApp","_component_LocationEnter","IconGroup","IconUser","_component_IconGroup","_component_IconUser","isGroupSharingEnabled","urldecode","AddressBookSharee","displayName","isGroup","query","allowedCalendarUserTypes","_component_NcSelectUsers","sharee","_component_AddressBookSharee","ActionCheckbox","ActionInput","IconRename","IconContactPlus","IconShare","ShareAddressBook","usePrincipalsStore","_component_IconContactPlus","_component_IconShare","_component_ActionCheckbox","_component_ActionInput","_component_IconRename","_component_ShareAddressBook","CancelToken","picker","IconError","encodePath","_component_IconError","NcInputField","_component_NcInputField","_component_NcFormBox","AppSettingsDialog","AppSettingsSection","SettingsAddressbook","SettingsNewAddressbook","SettingsImportContacts","SettingsSortContacts","setting","_component_AppSettingsDialog","_component_AppSettingsSection","_component_SettingsSortContacts","_component_NcFormBoxSwitch","_component_SettingsImportContacts","_component_SettingsAddressbook","_component_SettingsNewAddressbook","download","strFileName","strMimeType","defaultMime","payload","anchor","toString","myBlob","fileName","ajax","dataUrlToBlob","saver","tempUiArr","strUrl","binData","uiArr","winMode","hookCallback","hooks","setHookCallback","hasOwnProp","isObjectEmpty","isDate","arrLen","createUTC","locale","strict","createLocalOrUTC","defaultParsingFlags","getParsingFlags","some","fun","flags","parsedParts","isNowValid","createInvalid","momentProperties","updateInProgress","copyConfig","to","from","momentPropertiesLen","Moment","isMoment","deprecate","firstTime","argLen","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","calendar","mom","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","longDateFormat","formatUpper","tok","defaultInvalidDate","invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","defaultRelativeTime","relativeTime","withoutSuffix","isFuture","pastFuture","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedInput","normalizedProp","priorities","getPrioritizedUnits","unitsObj","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","regexes","addRegexToken","regex","strictRegex","isStrict","localeData","getParseRegexForToken","unescapeFormat","regexEscape","matched","p2","p3","p4","absFloor","toInt","argumentForCoercion","coercedNumber","tokens","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","isLeapYear","year","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","getSetYear","makeGetSet","getIsLeapYear","unit","keepTime","set$1","isUTC","month","date","stringGet","stringSet","prioritized","prioritizedLen","indexOf","daysInMonth","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","localeMonthsShort","handleStrictParse","monthName","ii","llc","localeMonthsParse","setMonth","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","shortP","longP","createDate","ms","createUTCDate","firstWeekOffset","dow","doy","fwd","fwdlw","dayOfYearFromWeeks","week","weekday","localWeekday","weekOffset","dayOfYear","resYear","resDayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","weekdays","localeWeekdaysShort","localeWeekdaysMin","handleStrictParse$1","weekdayName","localeWeekdaysParse","getSetDayOfWeek","day","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","weekdaysShortRegex","weekdaysMinRegex","minPieces","minp","shortp","longp","hFormat","kFormat","meridiem","lowercase","matchMeridiem","kInput","pos1","pos2","localeIsPM","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","hours","minutes","isLower","baseConfig","locales","localeFamilies","globalLocale","commonPrefix","arr1","minl","normalizeLocale","chooseLocale","split","loadLocale","isLocaleNameSane","oldLocale","aliasedRequire","getSetGlobalLocale","defineLocale","updateLocale","tmpLocale","listLocales","checkOverflow","overflow","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","rfc2822","obsOffsets","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","currentDateArray","nowValue","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","weekYear","temp","weekdayOverflow","curWeek","createLocal","skipped","stringLength","totalParsedInputLength","era","meridiemFixWrap","hour","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","configFromObject","dayOrDate","createFromConfig","prepareConfig","configFromInput","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","years","quarters","months","weeks","days","seconds","milliseconds","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","separator","offsetFromString","chunkOffset","chunk","cloneWithOffset","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","createAdder","direction","period","dur","tmp","isAdding","updateOffset","add","subtract","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","isAfter","localInput","isBefore","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","wholeMonthDiff","anchor2","adjust","toISOString","keepOffset","utc","inspect","zone","datetime","suffix","inputString","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOf","startOfDate","endOf","valueOf","unix","toDate","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","localeEras","eras","localeErasParse","eraName","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","erasAbbrRegex","erasNarrowRegex","abbrPieces","namePieces","narrowPieces","erasName","erasAbbr","erasNarrow","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetSecond","getSetMillisecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","preParsePostFormat","proto$1","get$1","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","abs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","round","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","humanize","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","proto$2","removeContactFromGroup","currentGroups","renameContactFromGroup","oldGroupName","newGroupName","foundGroups","IconEmail","IconContactFilled","contactFromDropData","contactFromStore","groupedContacts","vcardPromise","email","_component_IconContactFilled","_component_IconEmail","isContactsInteractionEnabled","AppNavigation","AppNavigationCaption","CircleNavigationItem","Cog","ContactsSettings","GroupNavigationItem","IconUserFilled","IconRecentlyContacted","NewCircleIntro","CONTACTS_SETTINGS","ELLIPSIS_COUNT","GROUP_ALL_CONTACTS","CHART_ALL_CONTACTS","GROUP_NO_GROUP_CONTACTS","GROUP_RECENTLY_CONTACTED","isCirclesEnabled","menu","recentlyIndex","circleName","isPersonal","circle","_component_AppNavigation","_component_IconUserFilled","_component_IconRecentlyContacted","_component_AppNavigationCaption","_component_GroupNavigationItem","_component_NewCircleIntro","_component_CircleNavigationItem","_component_Cog","_component_ContactsSettings","ProcessingScreen","_component_ProcessingScreen","AddToGroupView","pLimit","requests","_component_AddToGroupView","CircleContent","ChartContent","ContactsContent","ContactsPicker","Content","ImportView","RootNavigation","appName","ROUTE_CIRCLE","addressbooks","userGroupStore","appVersion","orderKey","inList","_component_Content","_component_RootNavigation","_component_UserGroupContent","_component_CircleContent","_component_ChartContent","_component_ContactsContent","_component_ImportView","_component_ContactsPicker","routerHistory","createWebHistory","createRouter","Contacts","ROUTE_CHART","App","vm","info","pinia","createPinia","store"],"ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,154,155,156,157,158,159,160,161,162,163,164,165,169,171,172,176,177,178,179,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,213,214,215,216,217,218,219,220,221,224,229,230,231,232,233,234,235,239,240,241,242,246,247,248,251,252,254,261,265,266,267],"sources":["../src/ContactsRoot.vue","../node_modules/@nextcloud/vue/dist/chunks/NcActionSeparator-Doekl1NX.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppContentDetails.vue_vue_type_script_setup_true_lang-Dnf4r_Ng.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppContentList-DYFsuDKh.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSettingsSection-B2pFK0UK.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcCounterBubble-CxxHHh8i.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFormBox-CkgY7Tif.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFormBoxItem-vnU0KmUL.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFormBoxSwitch-DGcRJH9Q.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcListItem-Bx93C7tP.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcListItemIcon-DVy6eGJx.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSelectUsers-DlUM6S6l.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcUserBubble-Cs84CNHz.mjs","../node_modules/d3-array/src/cumsum.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/min.js","../node_modules/d3-array/src/sum.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-selection/src/pointer.js","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-path/src/path.js","../node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-hierarchy/src/hierarchy/find.js","../node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-hierarchy/src/accessors.js","../node_modules/d3-hierarchy/src/stratify.js","../node_modules/d3-hierarchy/src/tree.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/curve/bump.js","../node_modules/d3-shape/src/link.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-flextree/node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-flextree/src/flextree.js","../node_modules/d3-org-chart/src/d3-org-chart.js","../src/components/ChartTemplate.vue","../src/components/OrgChart.vue","../src/components/AppContent/ChartContent.vue","../node_modules/vue-material-design-icons/AccountGroupOutline.vue","../node_modules/vue-material-design-icons/AccountPlusOutline.vue","../node_modules/vue-material-design-icons/BookOpenPageVariant.vue","../node_modules/vue-material-design-icons/CalendarOutline.vue","../node_modules/vue-material-design-icons/Check.vue","../node_modules/vue-material-design-icons/CogOutline.vue","../node_modules/vue-material-design-icons/FileDocumentOutline.vue","../node_modules/vue-material-design-icons/FolderOutline.vue","../node_modules/vue-material-design-icons/Login.vue","../node_modules/vue-material-design-icons/Logout.vue","../node_modules/vue-material-design-icons/MessageOutline.vue","../node_modules/vue-material-design-icons/ViewDashboard.vue","../src/components/CircleDetails/CirclePasswordSettings.vue","../src/components/CircleDetails/ContentHeading.vue","../src/components/CircleDetails/CircleSettings.vue","../node_modules/vue-material-design-icons/Close.vue","../src/components/CircleDetails/TeamResourceButton.vue","../node_modules/virtua/lib/vue/index.js","../node_modules/vue-material-design-icons/Magnify.vue","../src/components/EntityPicker/EntityBubble.vue","../src/components/EntityPicker/EntitySearchResult.vue","../src/components/EntityPicker/EntityPicker.vue","../node_modules/vue-material-design-icons/CheckOutline.vue","../node_modules/vue-material-design-icons/CloseOutline.vue","../node_modules/vue-material-design-icons/ExitToApp.vue","../node_modules/vue-material-design-icons/ShieldCheckOutline.vue","../src/mixins/RouterMixin.js","../src/components/MemberList/MemberGridItem.vue","../src/services/collaborationAutocompletion.js","../src/components/MemberList/MemberList.vue","../src/mixins/CopyToClipboardMixin.js","../src/mixins/CircleActionsMixin.js","../src/components/CircleDetails.vue","../src/components/UserGroupDetails/UserGroupMember.vue","../src/models/userGroup.ts","../src/components/UserGroupDetails.vue","../src/services/userGroup.ts","../src/store/userGroup.ts","../src/components/AppContent/CircleContent.vue","../node_modules/qreator/lib/bitMatrix.js","../node_modules/qreator/lib/encode.js","../node_modules/qreator/lib/errorcode.js","../node_modules/qreator/lib/matrix.js","../node_modules/qreator/lib/qr-base.js","../node_modules/color-name/index.js","../node_modules/simple-swizzle/node_modules/is-arrayish/index.js","../node_modules/simple-swizzle/index.js","../node_modules/color-string/index.js","../node_modules/qreator/lib/utils.js","../node_modules/js-base64/base64.mjs","../node_modules/qreator/lib/svg.js","../node_modules/vue-material-design-icons/Cake.vue","../node_modules/vue-material-design-icons/EyeCircleOutline.vue","../node_modules/vue-material-design-icons/FolderMultipleImage.vue","../node_modules/vue-material-design-icons/Qrcode.vue","../node_modules/vue-material-design-icons/TrayArrowDown.vue","../node_modules/vue-material-design-icons/ChevronLeft.vue","../node_modules/vue-material-design-icons/DotsHorizontal.vue","../src/components/ContactDetails/ContactDetailsAddNewProp.vue","../node_modules/@vue/compiler-core/dist/compiler-core.esm-bundler.js","../node_modules/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js","../node_modules/vue/dist/vue.cjs.prod.js","../node_modules/vue/index.js","../node_modules/cropperjs/dist/cropper.js","../node_modules/vue-cropperjs/dist/VueCropper.js","../node_modules/vue-material-design-icons/CloudDownloadOutline.vue","../node_modules/vue-material-design-icons/ImageOutline.vue","../node_modules/vue-material-design-icons/UploadOutline.vue","../src/components/ContactDetails/ContactDetailsAvatar.vue","../src/components/DetailsHeader.vue","../node_modules/string-natural-compare/natural-compare.js","../src/components/Properties/PropertyGroups.vue","../src/components/Properties/PropertyRev.vue","../src/services/isTalkEnabled.js","../src/components/ContactDetails.vue","../node_modules/@mdi/svg/svg/cancel.svg?raw","../node_modules/@mdi/svg/svg/delete-outline.svg","../node_modules/vue-material-design-icons/BookAccountOutline.vue","../node_modules/vue-material-design-icons/CloseThick.vue","../node_modules/vue-material-design-icons/SetMerge.vue","../node_modules/vue-material-design-icons/AccountMultiplePlusOutline.vue","../node_modules/vue-material-design-icons/BookArrowRightOutline.vue","../src/components/ContactsList/ContactsListItem.vue","../src/services/appendContactToGroup.js","../src/components/ContactsList/Batch.vue","../node_modules/vue-material-design-icons/BadgeAccountOutline.vue","../node_modules/vue-material-design-icons/CheckCircleOutline.vue","../node_modules/vue-material-design-icons/CloseCircleOutline.vue","../node_modules/vue-material-design-icons/Domain.vue","../src/components/ContactsList/Merging.vue","../src/components/ContactsList.vue","../src/components/AppContent/ContactsContent.vue","../node_modules/vue-material-design-icons/Account.vue","../node_modules/vue-material-design-icons/AccountMultiple.vue","../node_modules/vue-material-design-icons/AlertCircleOutline.vue","../src/components/EntityPicker/NewCircleIntro.vue","../src/components/Icons/IconRecentlyContacted.vue","../node_modules/vue-material-design-icons/AccountStarOutline.vue","../node_modules/vue-material-design-icons/LocationEnter.vue","../src/components/AppNavigation/CircleNavigationItem.vue","../node_modules/vue-material-design-icons/ShareVariantOutline.vue","../src/components/AppNavigation/Settings/SettingsAddressbookSharee.vue","../src/services/isGroupSharingEnabled.js","../src/utils/url.js","../src/components/AppNavigation/Settings/SettingsAddressbookShare.vue","../src/components/AppNavigation/Settings/SettingsAddressbook.vue","../src/components/AppNavigation/Settings/SettingsImportContacts.vue","../node_modules/vue-material-design-icons/Loading.vue","../src/components/AppNavigation/Settings/SettingsNewAddressbook.vue","../src/components/AppNavigation/Settings/SettingsSortContacts.vue","../src/components/AppNavigation/ContactsSettings.vue","../node_modules/downloadjs/download.js","../node_modules/moment/dist/moment.js","../node_modules/vue-material-design-icons/FolderEditOutline.vue","../src/services/removeContactFromGroup.js","../src/services/renameContactFromGroup.js","../src/components/AppNavigation/GroupNavigationItem.vue","../src/services/isContactsInteractionEnabled.js","../src/components/AppNavigation/RootNavigation.vue","../src/components/ProcessingScreen.vue","../src/views/Processing/AddToGroupView.vue","../src/components/EntityPicker/ContactsPicker.vue","../src/views/Processing/ImportView.vue","../src/views/Contacts.vue","../src/router/index.js","../src/main.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<RouterView />\n</template>\n\n<script>\nexport default {\n\tname: 'ContactsRoot',\n}\n</script>\n","import '../assets/NcActionSeparator-Ct2RnclR.css';\nimport { createElementBlock, openBlock } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcActionSeparator\"\n};\nconst _hoisted_1 = {\n class: \"action action-separator action--disabled\",\n role: \"separator\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"li\", _hoisted_1);\n}\nconst NcActionSeparator = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-3e2324b7\"]]);\nexport {\n NcActionSeparator as N\n};\n//# sourceMappingURL=NcActionSeparator-Doekl1NX.mjs.map\n","import { defineComponent, createElementBlock, openBlock, renderSlot } from \"vue\";\nconst _hoisted_1 = { class: \"app-content-details\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppContentDetails\",\n setup(__props) {\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", _hoisted_1, [\n renderSlot(_ctx.$slots, \"default\")\n ]);\n };\n }\n});\nexport {\n _sfc_main as _\n};\n//# sourceMappingURL=NcAppContentDetails.vue_vue_type_script_setup_true_lang-Dnf4r_Ng.mjs.map\n","import { createElementBlock, openBlock, normalizeClass, renderSlot } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcAppContentList\",\n props: {\n /**\n * Is the list selected\n */\n selection: {\n type: Boolean,\n default: false\n },\n /**\n * Is the details pane shown\n */\n showDetails: {\n type: Boolean,\n default: false\n }\n }\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"app-content-list\", { selection: $props.selection, showdetails: $props.showDetails }])\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2);\n}\nconst NcAppContentList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport {\n NcAppContentList as N\n};\n//# sourceMappingURL=NcAppContentList-DYFsuDKh.mjs.map\n","import '../assets/NcAppSettingsSection-ObwpPdgW.css';\nimport { defineComponent, useSlots, inject, computed, watch, onMounted, onBeforeUnmount, createElementBlock, openBlock, normalizeClass, unref, createElementVNode, toDisplayString, renderSlot } from \"vue\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { u as useAppSettingsDialog, A as APP_SETTINGS_LEGACY_DESIGN_KEY } from \"./useAppSettingsDialog-C73Wx6iQ.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"id\", \"aria-labelledby\"];\nconst _hoisted_2 = [\"id\"];\nconst _hoisted_3 = { class: \"app-settings-section__description\" };\nconst _hoisted_4 = { class: \"app-settings-section__content\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsSection\",\n props: {\n name: {},\n description: {},\n id: {},\n order: {}\n },\n setup(__props) {\n const props = __props;\n const slots = useSlots();\n const { registerSection, unregisterSection } = useAppSettingsDialog();\n const legacy = inject(APP_SETTINGS_LEGACY_DESIGN_KEY);\n const htmlId = computed(() => \"settings-section_\" + props.id);\n watch(() => props.id, () => {\n if (!/^[a-z0-9\\-_]+$/.test(props.id)) {\n logger.warn(`Invalid id prop: ${props.id}. Only alphanumeric, dash and underscore are allowed.`);\n }\n }, { immediate: true });\n watch([() => props.id, () => props.name, () => props.order], ([newId, newName, newOrder], [oldId, ,]) => {\n unregisterSection(oldId);\n registerSection(newId, newName, newOrder, slots?.icon?.());\n });\n onMounted(() => {\n registerSection(props.id, props.name, props.order, slots?.icon?.());\n });\n onBeforeUnmount(() => {\n unregisterSection(props.id);\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"section\", {\n id: htmlId.value,\n \"aria-labelledby\": `${htmlId.value}--label`,\n class: normalizeClass([\"app-settings-section\", { \"app-settings-section__legacy\": unref(legacy) }])\n }, [\n createElementVNode(\"h3\", {\n id: `${htmlId.value}--label`,\n class: \"app-settings-section__name\"\n }, toDisplayString(_ctx.name), 9, _hoisted_2),\n createElementVNode(\"div\", _hoisted_3, toDisplayString(_ctx.description), 1),\n createElementVNode(\"div\", _hoisted_4, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ])\n ], 10, _hoisted_1);\n };\n }\n});\nconst NcAppSettingsSection = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-4095bb7f\"]]);\nexport {\n NcAppSettingsSection as N\n};\n//# sourceMappingURL=NcAppSettingsSection-B2pFK0UK.mjs.map\n","import '../assets/NcCounterBubble-ZnteskDR.css';\nimport { defineComponent, computed, createElementBlock, openBlock, normalizeClass, toDisplayString } from \"vue\";\nimport { getCanonicalLocale } from \"@nextcloud/l10n\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"title\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcCounterBubble\",\n props: {\n count: {},\n active: { type: Boolean },\n type: { default: \"\" },\n raw: { type: Boolean }\n },\n setup(__props) {\n const props = __props;\n const humanizedCount = computed(() => {\n if (props.raw) {\n return props.count.toString();\n }\n const formatter = new Intl.NumberFormat(getCanonicalLocale(), {\n notation: \"compact\",\n compactDisplay: \"short\"\n });\n return formatter.format(props.count);\n });\n const originalCountAsTitleIfNeeded = computed(() => {\n if (props.raw) {\n return;\n }\n const countAsString = props.count.toString();\n if (countAsString === humanizedCount.value) {\n return;\n }\n return countAsString;\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"counter-bubble__counter\", {\n active: _ctx.active,\n \"counter-bubble__counter--highlighted\": _ctx.type === \"highlighted\",\n \"counter-bubble__counter--outlined\": _ctx.type === \"outlined\"\n }]),\n title: originalCountAsTitleIfNeeded.value\n }, toDisplayString(humanizedCount.value), 11, _hoisted_1);\n };\n }\n});\nconst NcCounterBubble = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-36ffc13f\"]]);\nexport {\n NcCounterBubble as N\n};\n//# sourceMappingURL=NcCounterBubble-CxxHHh8i.mjs.map\n","import '../assets/NcFormBox-D-kcijXp.css';\nimport { defineComponent, useCssModule, provide, createElementBlock, openBlock, normalizeClass, renderSlot } from \"vue\";\nimport { N as NC_FORM_BOX_CONTEXT_KEY } from \"./useNcFormBox-Djlh582y.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcFormBox\",\n props: {\n row: { type: Boolean }\n },\n setup(__props) {\n const style = useCssModule();\n provide(NC_FORM_BOX_CONTEXT_KEY, {\n isInFormBox: true,\n formBoxItemClass: style.ncFormBox__item\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([_ctx.$style.ncFormBox, _ctx.row ? _ctx.$style.ncFormBox_row : _ctx.$style.ncFormBox_col])\n }, [\n renderSlot(_ctx.$slots, \"default\", {\n itemClass: _ctx.$style.ncFormBox__item\n })\n ], 2);\n };\n }\n});\nconst ncFormBox = \"_ncFormBox_1u9di_20\";\nconst ncFormBox_row = \"_ncFormBox_row_1u9di_25\";\nconst ncFormBox__item = \"_ncFormBox__item_1u9di_29\";\nconst ncFormBox_col = \"_ncFormBox_col_1u9di_33\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_1u9di_12\",\n ncFormBox,\n ncFormBox_row,\n ncFormBox__item,\n ncFormBox_col\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcFormBox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcFormBox as N\n};\n//# sourceMappingURL=NcFormBox-CkgY7Tif.mjs.map\n","import '../assets/NcFormBoxItem-BfXKp9xJ.css';\nimport { defineComponent, useSlots, createElementBlock, openBlock, normalizeClass, unref, createElementVNode, createBlock, createCommentVNode, resolveDynamicComponent, mergeProps, withCtx, renderSlot, createTextVNode, toDisplayString } from \"vue\";\nimport { u as useNcFormBox } from \"./useNcFormBox-Djlh582y.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { i as isLegacy } from \"./legacy-DcjXBL_t.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"id\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...{ inheritAttrs: false },\n __name: \"NcFormBoxItem\",\n props: {\n tag: {},\n label: { default: () => void 0 },\n description: { default: () => void 0 },\n invertedAccent: { type: Boolean, default: false },\n class: { default: () => void 0 },\n itemClasses: { default: () => void 0 }\n },\n emits: [\"click\"],\n setup(__props) {\n const slots = useSlots();\n const { formBoxItemClass } = useNcFormBox();\n const descriptionId = createElementId();\n const hasDescription = () => !!__props.description || !!slots.description;\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\n __props.class,\n _ctx.$style.formBoxItem,\n unref(formBoxItemClass),\n {\n [_ctx.$style.formBoxItem_inverted]: _ctx.invertedAccent && hasDescription(),\n [_ctx.$style.formBoxItem_legacy]: unref(isLegacy)\n }\n ])\n }, [\n createElementVNode(\"span\", {\n class: normalizeClass(_ctx.$style.formBoxItem__content)\n }, [\n (openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), mergeProps({\n class: [_ctx.$style.formBoxItem__element, _ctx.itemClasses]\n }, _ctx.$attrs, {\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\", { descriptionId: unref(descriptionId) }, () => [\n createTextVNode(toDisplayString(_ctx.label || \"⚠️ Label is missing\"), 1)\n ])\n ]),\n _: 3\n }, 16, [\"class\"])),\n hasDescription() ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n id: unref(descriptionId),\n class: normalizeClass(_ctx.$style.formBoxItem__description)\n }, [\n renderSlot(_ctx.$slots, \"description\", {}, () => [\n createTextVNode(toDisplayString(_ctx.description), 1)\n ])\n ], 10, _hoisted_1)) : createCommentVNode(\"\", true)\n ], 2),\n createElementVNode(\"span\", {\n class: normalizeClass(_ctx.$style.formBoxItem__icon)\n }, [\n renderSlot(_ctx.$slots, \"icon\", { descriptionId: unref(descriptionId) }, () => [\n _cache[1] || (_cache[1] = createTextVNode(\" ⚠️ Icon is missing \", -1))\n ])\n ], 2)\n ], 2);\n };\n }\n});\nconst formBoxItem = \"_formBoxItem_v5un7_20\";\nconst formBoxItem_legacy = \"_formBoxItem_legacy_v5un7_60\";\nconst formBoxItem_inverted = \"_formBoxItem_inverted_v5un7_64\";\nconst formBoxItem__element = \"_formBoxItem__element_v5un7_64\";\nconst formBoxItem__description = \"_formBoxItem__description_v5un7_67\";\nconst formBoxItem__content = \"_formBoxItem__content_v5un7_71\";\nconst formBoxItem__icon = \"_formBoxItem__icon_v5un7_89\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_v5un7_12\",\n formBoxItem,\n formBoxItem_legacy,\n formBoxItem_inverted,\n formBoxItem__element,\n formBoxItem__description,\n formBoxItem__content,\n formBoxItem__icon\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcFormBoxItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcFormBoxItem as N\n};\n//# sourceMappingURL=NcFormBoxItem-vnU0KmUL.mjs.map\n","import '../assets/NcFormBoxSwitch-DScgbxtv.css';\nimport { defineComponent, mergeModels, useModel, watch, createBlock, openBlock, unref, createSlots, withCtx, withDirectives, createVNode, createElementVNode, normalizeClass, vModelCheckbox, renderSlot, createTextVNode, toDisplayString } from \"vue\";\nimport { N as NcFormBoxItem } from \"./NcFormBoxItem-vnU0KmUL.mjs\";\nimport { N as NcIconToggleSwitch } from \"./NcIconToggleSwitch-DNEYngCw.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"id\", \"aria-describedby\", \"disabled\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcFormBoxSwitch\",\n props: /* @__PURE__ */ mergeModels({\n label: { default: () => void 0 },\n description: { default: () => void 0 },\n disabled: { type: Boolean, default: false }\n }, {\n \"modelValue\": { type: Boolean, ...{ required: true } },\n \"modelModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"enable\", \"disable\"], [\"update:modelValue\"]),\n setup(__props, { emit: __emit }) {\n const modelValue = useModel(__props, \"modelValue\");\n const emit = __emit;\n const inputId = createElementId();\n watch(modelValue, () => {\n if (modelValue.value) {\n emit(\"enable\");\n } else {\n emit(\"disable\");\n }\n }, {\n // defineModel emits update:modelValue synchronously\n // Watching it synchronously to emit the enable/disable events together with the update:modelValue event\n flush: \"sync\"\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(NcFormBoxItem, {\n tag: \"label\",\n for: unref(inputId)\n }, createSlots({\n icon: withCtx(({ descriptionId }) => [\n withDirectives(createElementVNode(\"input\", {\n id: unref(inputId),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),\n class: normalizeClass(_ctx.$style.formBoxSwitch__input),\n type: \"checkbox\",\n role: \"switch\",\n \"aria-describedby\": descriptionId,\n disabled: _ctx.disabled\n }, null, 10, _hoisted_1), [\n [vModelCheckbox, modelValue.value]\n ]),\n createVNode(NcIconToggleSwitch, {\n checked: modelValue.value,\n inline: \"\"\n }, null, 8, [\"checked\"])\n ]),\n _: 2\n }, [\n _ctx.$slots.default || _ctx.label ? {\n name: \"default\",\n fn: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n createTextVNode(toDisplayString(_ctx.label), 1)\n ])\n ]),\n key: \"0\"\n } : void 0,\n _ctx.$slots.description || _ctx.description ? {\n name: \"description\",\n fn: withCtx(() => [\n renderSlot(_ctx.$slots, \"description\", {}, () => [\n createTextVNode(toDisplayString(_ctx.description), 1)\n ])\n ]),\n key: \"1\"\n } : void 0\n ]), 1032, [\"for\"]);\n };\n }\n});\nconst formBoxSwitch__input = \"_formBoxSwitch__input_njiy8_20\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_njiy8_12\",\n formBoxSwitch__input\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcFormBoxSwitch = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcFormBoxSwitch as N\n};\n//# sourceMappingURL=NcFormBoxSwitch-DGcRJH9Q.mjs.map\n","import '../assets/NcListItem-CZnKmy9X.css';\nimport { N as NcActions } from \"./NcActions-4R7icatI.mjs\";\nimport { N as NcCounterBubble } from \"./NcCounterBubble-CxxHHh8i.mjs\";\nimport { _ as _sfc_main$1 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nimport { resolveComponent, createBlock, openBlock, resolveDynamicComponent, normalizeProps, guardReactiveProps, withCtx, createElementVNode, mergeProps, normalizeClass, createElementBlock, createCommentVNode, withKeys, renderSlot, createTextVNode, toDisplayString, withDirectives, vShow, createVNode, createSlots } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcListItem\",\n components: {\n NcActions,\n NcCounterBubble,\n NcVNodes: _sfc_main$1\n },\n inheritAttrs: false,\n props: {\n /**\n * The details text displayed in the upper right part of the component\n */\n details: {\n type: String,\n default: \"\"\n },\n /**\n * Name (first line of text)\n */\n name: {\n type: String,\n default: void 0\n },\n /**\n * The route for the router link.\n */\n to: {\n type: [String, Object],\n default: null\n },\n /**\n * The value for the external link\n */\n href: {\n type: String,\n default: \"#\"\n },\n /**\n * The HTML target attribute used for the link\n */\n target: {\n type: String,\n default: \"\"\n },\n /**\n * Id for the `<a>` element\n */\n anchorId: {\n type: String,\n default: \"\"\n },\n /**\n * Make subname bold\n */\n bold: {\n type: Boolean,\n default: false\n },\n /**\n * Show the NcListItem in compact design\n */\n compact: {\n type: Boolean,\n default: false\n },\n /**\n * Toggle the active state of the component\n */\n active: {\n type: Boolean,\n default: void 0\n },\n /**\n * Aria label for the wrapper element\n */\n linkAriaLabel: {\n type: String,\n default: \"\"\n },\n /**\n * Aria label for the actions toggle\n */\n actionsAriaLabel: {\n type: String,\n default: void 0\n },\n /**\n * If different from 0 this component will display the\n * NcCounterBubble component\n */\n counterNumber: {\n type: [Number, String],\n default: 0\n },\n /**\n * Outlined or highlighted state of the counter\n */\n counterType: {\n type: String,\n default: \"\",\n validator(value) {\n return [\"highlighted\", \"outlined\", \"\"].indexOf(value) !== -1;\n }\n },\n /**\n * To be used only when the elements in the actions menu are very important\n */\n forceDisplayActions: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * Show the list component layout\n */\n oneLine: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"click\",\n \"update:menuOpen\"\n ],\n data() {\n return {\n hovered: false,\n hasActions: false,\n hasSubname: false,\n displayActionsOnHoverFocus: false,\n menuOpen: false,\n hasIndicator: false,\n hasDetails: false\n };\n },\n computed: {\n showAdditionalElements() {\n return !this.displayActionsOnHoverFocus || this.forceDisplayActions;\n },\n showDetails() {\n return (this.details !== \"\" || this.hasDetails) && (!this.displayActionsOnHoverFocus || this.forceDisplayActions);\n }\n },\n watch: {\n menuOpen(newValue) {\n if (!newValue && !this.hovered) {\n this.displayActionsOnHoverFocus = false;\n }\n }\n },\n mounted() {\n this.checkSlots();\n },\n updated() {\n this.checkSlots();\n },\n methods: {\n /**\n * Handle link click\n *\n * @param {MouseEvent|KeyboardEvent} event - Native click or keydown event\n * @param {Function} [navigate] - VueRouter link's navigate if any\n * @param {string} [routerLinkHref] - VueRouter link's href\n */\n onClick(event, navigate, routerLinkHref) {\n this.$emit(\"click\", event);\n if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n if (routerLinkHref) {\n navigate?.(event);\n event.preventDefault();\n }\n },\n showActions() {\n if (this.hasActions) {\n this.displayActionsOnHoverFocus = true;\n }\n this.hovered = false;\n },\n hideActions() {\n this.displayActionsOnHoverFocus = false;\n },\n /**\n * @param {FocusEvent} event UI event\n */\n handleBlur(event) {\n if (this.menuOpen) {\n return;\n }\n if (this.$refs[\"list-item\"]?.contains(event.relatedTarget)) {\n return;\n }\n this.hideActions();\n },\n /**\n * Hide the actions on mouseleave unless the menu is open\n */\n handleMouseleave() {\n if (!this.menuOpen) {\n this.displayActionsOnHoverFocus = false;\n }\n this.hovered = false;\n },\n handleMouseover() {\n this.showActions();\n this.hovered = true;\n },\n handleActionsUpdateOpen(e) {\n this.menuOpen = e;\n this.$emit(\"update:menuOpen\", e);\n },\n // Check if subname and actions slots are populated\n checkSlots() {\n if (this.hasActions !== !!this.$slots.actions) {\n this.hasActions = !!this.$slots.actions;\n }\n if (this.hasSubname !== !!this.$slots.subname) {\n this.hasSubname = !!this.$slots.subname;\n }\n if (this.hasIndicator !== !!this.$slots.indicator) {\n this.hasIndicator = !!this.$slots.indicator;\n }\n if (this.hasDetails !== !!this.$slots.details) {\n this.hasDetails = !!this.$slots.details;\n }\n }\n }\n};\nconst _hoisted_1 = [\"id\", \"aria-label\", \"href\", \"target\", \"rel\", \"onClick\"];\nconst _hoisted_2 = { class: \"list-item-content\" };\nconst _hoisted_3 = { class: \"list-item-content__main\" };\nconst _hoisted_4 = { class: \"list-item-content__name\" };\nconst _hoisted_5 = { class: \"list-item-content__details\" };\nconst _hoisted_6 = {\n key: 0,\n class: \"list-item-details__details\"\n};\nconst _hoisted_7 = {\n key: 1,\n class: \"list-item-details__extra\"\n};\nconst _hoisted_8 = {\n key: 1,\n class: \"list-item-details__indicator\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"list-item-content__extra-actions\"\n};\nconst _hoisted_10 = {\n key: 2,\n class: \"list-item__extra\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcCounterBubble = resolveComponent(\"NcCounterBubble\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n return openBlock(), createBlock(resolveDynamicComponent($props.to ? \"router-link\" : \"NcVNodes\"), normalizeProps(guardReactiveProps({ ...$props.to && { custom: true, to: $props.to } })), {\n default: withCtx(({ href: routerLinkHref, navigate, isActive }) => [\n createElementVNode(\"li\", mergeProps({\n class: [\"list-item__wrapper\", { \"list-item__wrapper--active\": $props.active ?? isActive }]\n }, _ctx.$attrs), [\n createElementVNode(\"div\", {\n ref: \"list-item\",\n class: normalizeClass([\"list-item\", {\n \"list-item--compact\": $props.compact,\n \"list-item--one-line\": $props.oneLine\n }]),\n onMouseover: _cache[4] || (_cache[4] = (...args) => $options.handleMouseover && $options.handleMouseover(...args)),\n onMouseleave: _cache[5] || (_cache[5] = (...args) => $options.handleMouseleave && $options.handleMouseleave(...args))\n }, [\n createElementVNode(\"a\", {\n id: $props.anchorId || void 0,\n \"aria-label\": $props.linkAriaLabel,\n class: \"list-item__anchor\",\n href: routerLinkHref || $props.href,\n target: $props.target || ($props.href === \"#\" ? void 0 : \"_blank\"),\n rel: $props.href === \"#\" ? void 0 : \"noopener noreferrer\",\n onFocus: _cache[0] || (_cache[0] = (...args) => $options.showActions && $options.showActions(...args)),\n onFocusout: _cache[1] || (_cache[1] = (...args) => $options.handleBlur && $options.handleBlur(...args)),\n onClick: ($event) => $options.onClick($event, navigate, routerLinkHref),\n onKeydown: _cache[2] || (_cache[2] = withKeys((...args) => $options.hideActions && $options.hideActions(...args), [\"esc\"]))\n }, [\n renderSlot(_ctx.$slots, \"icon\", {}, void 0, true),\n createElementVNode(\"div\", _hoisted_2, [\n createElementVNode(\"div\", _hoisted_3, [\n createElementVNode(\"div\", _hoisted_4, [\n renderSlot(_ctx.$slots, \"name\", {}, () => [\n createTextVNode(toDisplayString($props.name), 1)\n ], true)\n ]),\n $data.hasSubname ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([\"list-item-content__subname\", { \"list-item-content__subname--bold\": $props.bold }])\n }, [\n renderSlot(_ctx.$slots, \"subname\", {}, void 0, true)\n ], 2)) : createCommentVNode(\"\", true)\n ]),\n createElementVNode(\"div\", _hoisted_5, [\n $options.showDetails ? (openBlock(), createElementBlock(\"div\", _hoisted_6, [\n renderSlot(_ctx.$slots, \"details\", {}, () => [\n createTextVNode(toDisplayString($props.details), 1)\n ], true)\n ])) : createCommentVNode(\"\", true),\n $props.counterNumber !== 0 || $data.hasIndicator ? withDirectives((openBlock(), createElementBlock(\"div\", _hoisted_7, [\n $props.counterNumber !== 0 ? (openBlock(), createBlock(_component_NcCounterBubble, {\n key: 0,\n count: $props.counterNumber,\n active: $props.active ?? isActive,\n class: \"list-item-details__counter\",\n type: $props.counterType\n }, null, 8, [\"count\", \"active\", \"type\"])) : createCommentVNode(\"\", true),\n $data.hasIndicator ? (openBlock(), createElementBlock(\"span\", _hoisted_8, [\n renderSlot(_ctx.$slots, \"indicator\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 512)), [\n [vShow, $options.showAdditionalElements]\n ]) : createCommentVNode(\"\", true)\n ])\n ])\n ], 40, _hoisted_1),\n _ctx.$slots[\"extra-actions\"] ? (openBlock(), createElementBlock(\"div\", _hoisted_9, [\n renderSlot(_ctx.$slots, \"extra-actions\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true),\n $props.forceDisplayActions || $data.displayActionsOnHoverFocus ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n class: \"list-item-content__actions\",\n onFocusout: _cache[3] || (_cache[3] = (...args) => $options.handleBlur && $options.handleBlur(...args))\n }, [\n createVNode(_component_NcActions, {\n ref: \"actions\",\n primary: $props.active ?? isActive,\n \"force-menu\": $props.forceMenu,\n \"aria-label\": $props.actionsAriaLabel,\n \"onUpdate:open\": $options.handleActionsUpdateOpen\n }, createSlots({\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ]),\n _: 2\n }, [\n _ctx.$slots[\"actions-icon\"] ? {\n name: \"icon\",\n fn: withCtx(() => [\n renderSlot(_ctx.$slots, \"actions-icon\", {}, void 0, true)\n ]),\n key: \"0\"\n } : void 0\n ]), 1032, [\"primary\", \"force-menu\", \"aria-label\", \"onUpdate:open\"])\n ], 32)) : createCommentVNode(\"\", true),\n _ctx.$slots.extra ? (openBlock(), createElementBlock(\"div\", _hoisted_10, [\n renderSlot(_ctx.$slots, \"extra\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 34)\n ], 16)\n ]),\n _: 3\n }, 16);\n}\nconst NcListItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-532f3807\"]]);\nexport {\n NcListItem as N\n};\n//# sourceMappingURL=NcListItem-Bx93C7tP.mjs.map\n","import '../assets/NcListItemIcon-aquns6B7.css';\nimport \"escape-html\";\nimport \"striptags\";\nimport { resolveComponent, createElementBlock, openBlock, normalizeStyle, normalizeClass, createVNode, createElementVNode, renderSlot, mergeProps, createBlock, createCommentVNode, toDisplayString } from \"vue\";\nimport \"../composables/useIsDarkTheme/index.mjs\";\nimport \"@nextcloud/router\";\nimport \"../functions/isDarkTheme/index.mjs\";\nimport \"./NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-D6LzDiYf.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { u as userStatus, N as NcAvatar } from \"./NcAvatar-CK_dTsmT.mjs\";\nimport { _ as _sfc_main$1 } from \"./NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-BvLanNaW.mjs\";\nconst margin = 8;\nconst defaultSize = 32;\nconst _sfc_main = {\n name: \"NcListItemIcon\",\n components: {\n NcAvatar,\n NcHighlight: _sfc_main$1,\n NcIconSvgWrapper\n },\n mixins: [\n userStatus\n ],\n props: {\n /**\n * Default first line text\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Secondary optional line\n * Only visible on size of 32 and above\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Icon class to be displayed at the end of the component\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * SVG icon to be displayed at the end of the component\n */\n iconSvg: {\n type: String,\n default: \"\"\n },\n /**\n * Descriptive name for the icon\n */\n iconName: {\n type: String,\n default: \"\"\n },\n /**\n * Search within the highlight of name/subname\n */\n search: {\n type: String,\n default: \"\"\n },\n /**\n * Set a size in px that will define the avatar height/width\n * and therefore, the height of the component\n */\n avatarSize: {\n type: Number,\n default: defaultSize\n },\n /**\n * Disable the margins of this component.\n * Useful for integration in `NcSelect` for example\n */\n noMargin: {\n type: Boolean,\n default: false\n },\n /**\n * See the [Avatar](#Avatar) displayName prop\n * Fallback to name\n */\n displayName: {\n type: String,\n default: null\n },\n /**\n * See the [Avatar](#Avatar) isNoUser prop\n * Enable/disable the UserStatus fetching\n */\n isNoUser: {\n type: Boolean,\n default: false\n },\n /**\n * Unique list item ID\n */\n id: {\n type: String,\n default: null\n }\n },\n setup() {\n return {\n margin,\n defaultSize\n };\n },\n computed: {\n hasIcon() {\n return this.icon !== \"\";\n },\n hasIconSvg() {\n return this.iconSvg !== \"\";\n },\n isValidSubname() {\n return this.subname?.trim?.() !== \"\";\n },\n isSizeBigEnough() {\n return this.avatarSize >= 26;\n },\n cssVars() {\n const margin2 = this.noMargin ? 0 : this.margin;\n return {\n \"--height\": this.avatarSize + 2 * margin2 + \"px\",\n \"--margin\": this.margin + \"px\"\n };\n },\n /**\n * Separates the search property into two parts, the first one is the search part on the name, the second on the subname.\n *\n * @return {[string, string]}\n */\n searchParts() {\n const EMAIL_NOTATION = /^([^<]*)<([^>]+)>?$/;\n const match = this.search.match(EMAIL_NOTATION);\n if (this.isNoUser || !match) {\n return [this.search, this.search];\n }\n return [match[1].trim(), match[2]];\n }\n },\n beforeMount() {\n if (!this.isNoUser && !this.subname) {\n this.fetchUserStatus(this.user);\n }\n }\n};\nconst _hoisted_1 = [\"id\"];\nconst _hoisted_2 = { class: \"option__details\" };\nconst _hoisted_3 = { key: 1 };\nconst _hoisted_4 = [\"aria-label\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcHighlight = resolveComponent(\"NcHighlight\");\n const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n return openBlock(), createElementBlock(\"span\", {\n id: $props.id,\n class: normalizeClass([\"option\", { \"option--compact\": $props.avatarSize < $setup.defaultSize }]),\n style: normalizeStyle($options.cssVars)\n }, [\n createVNode(_component_NcAvatar, mergeProps(_ctx.$attrs, {\n \"disable-menu\": true,\n \"disable-tooltip\": true,\n \"display-name\": $props.displayName || $props.name,\n \"is-no-user\": $props.isNoUser,\n size: $props.avatarSize,\n class: \"option__avatar\"\n }), null, 16, [\"display-name\", \"is-no-user\", \"size\"]),\n createElementVNode(\"div\", _hoisted_2, [\n createVNode(_component_NcHighlight, {\n class: \"option__lineone\",\n text: $props.name,\n search: $options.searchParts[0]\n }, null, 8, [\"text\", \"search\"]),\n $options.isValidSubname && $options.isSizeBigEnough ? (openBlock(), createBlock(_component_NcHighlight, {\n key: 0,\n class: \"option__linetwo\",\n text: $props.subname,\n search: $options.searchParts[1]\n }, null, 8, [\"text\", \"search\"])) : _ctx.hasStatus ? (openBlock(), createElementBlock(\"span\", _hoisted_3, [\n createElementVNode(\"span\", null, toDisplayString(_ctx.userStatus.icon), 1),\n createElementVNode(\"span\", null, toDisplayString(_ctx.userStatus.message), 1)\n ])) : createCommentVNode(\"\", true)\n ]),\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n $options.hasIconSvg ? (openBlock(), createBlock(_component_NcIconSvgWrapper, {\n key: 0,\n class: \"option__icon\",\n svg: $props.iconSvg,\n name: $props.iconName\n }, null, 8, [\"svg\", \"name\"])) : $options.hasIcon ? (openBlock(), createElementBlock(\"span\", {\n key: 1,\n class: normalizeClass([\"icon option__icon\", $props.icon]),\n \"aria-label\": $props.iconName\n }, null, 10, _hoisted_4)) : createCommentVNode(\"\", true)\n ], true)\n ], 14, _hoisted_1);\n}\nconst NcListItemIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-60a83836\"]]);\nexport {\n NcListItemIcon as N\n};\n//# sourceMappingURL=NcListItemIcon-DVy6eGJx.mjs.map\n","import '../assets/NcSelectUsers-BWhtNRbI.css';\nimport { defineComponent, mergeModels, useModel, ref, watch, createBlock, openBlock, unref, mergeProps, withCtx, createVNode } from \"vue\";\nimport { N as NcListItemIcon } from \"./NcListItemIcon-DVy6eGJx.mjs\";\nimport { N as NcSelect } from \"./NcSelect-Cc9_a8nG.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcSelectUsers\",\n props: /* @__PURE__ */ mergeModels({\n ariaLabelClearSelected: {},\n ariaLabelListbox: {},\n ariaLabelDeselectOption: { type: Function },\n disabled: { type: Boolean },\n inputId: {},\n inputLabel: {},\n labelOutside: { type: Boolean },\n keepOpen: { type: Boolean },\n loading: { type: Boolean },\n multiple: { type: Boolean },\n noWrap: { type: Boolean },\n options: {},\n placeholder: {},\n required: { type: Boolean }\n }, {\n \"modelValue\": {},\n \"modelModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"search\"], [\"update:modelValue\"]),\n setup(__props, { emit: __emit }) {\n const modelValue = useModel(__props, \"modelValue\");\n const emit = __emit;\n const search = ref(\"\");\n watch(search, () => emit(\"search\", search.value));\n const clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-clickable-area\"));\n const gridBaseLine = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-grid-baseline\"));\n const avatarSize = clickableArea - 2 * gridBaseLine;\n function filterBy(option, label, search2) {\n const EMAIL_NOTATION = /[^<]*<([^>]+)/;\n const match = search2.match(EMAIL_NOTATION);\n const subname = option.subname?.toLocaleLowerCase() ?? \"\";\n return match && subname.indexOf(match[1].toLocaleLowerCase()) > -1 || `${label} ${option.subname}`.toLocaleLowerCase().indexOf(search2.toLocaleLowerCase()) > -1;\n }\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(NcSelect), mergeProps({\n modelValue: modelValue.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),\n class: \"nc-select-users\"\n }, _ctx.$props, {\n \"filter-by\": filterBy,\n label: \"displayName\",\n onSearch: _cache[1] || (_cache[1] = ($event) => search.value = $event)\n }), {\n option: withCtx((option) => [\n createVNode(unref(NcListItemIcon), mergeProps(option, {\n \"avatar-size\": 32,\n name: option.displayName,\n search: search.value\n }), null, 16, [\"name\", \"search\"])\n ]),\n \"selected-option\": withCtx((selectedOption) => [\n createVNode(unref(NcListItemIcon), mergeProps(selectedOption, {\n \"avatar-size\": avatarSize,\n name: selectedOption.displayName,\n \"no-margin\": \"\",\n search: search.value\n }), null, 16, [\"name\", \"search\"])\n ]),\n _: 1\n }, 16, [\"modelValue\"]);\n };\n }\n});\nconst NcSelectUsers = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-4fbb6472\"]]);\nexport {\n NcSelectUsers as N\n};\n//# sourceMappingURL=NcSelectUsers-DlUM6S6l.mjs.map\n","import '../assets/NcUserBubble-B3Jad98g.css';\nimport { createElementBlock, openBlock, renderSlot, defineComponent, mergeModels, useModel, computed, warn, watch, createBlock, resolveDynamicComponent, withCtx, mergeProps, createVNode, createElementVNode, createCommentVNode, normalizeStyle, toDisplayString } from \"vue\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcAvatar } from \"./NcAvatar-CK_dTsmT.mjs\";\nimport { N as NcPopover } from \"./NcPopover-C-MTaPCs.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main$1 = {};\nfunction _sfc_render(_ctx, _cache) {\n return openBlock(), createElementBlock(\"div\", null, [\n renderSlot(_ctx.$slots, \"trigger\")\n ]);\n}\nconst NcUserBubbleDiv = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render]]);\nconst _hoisted_1 = { class: \"user-bubble__name\" };\nconst _hoisted_2 = {\n key: 0,\n class: \"user-bubble__secondary\"\n};\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcUserBubble\",\n props: /* @__PURE__ */ mergeModels({\n avatarImage: { default: void 0 },\n user: { default: void 0 },\n displayName: { default: void 0 },\n showUserStatus: { type: Boolean },\n url: { default: void 0 },\n to: { default: void 0 },\n primary: { type: Boolean },\n size: { default: 20 },\n margin: { default: 2 }\n }, {\n \"open\": { type: Boolean },\n \"openModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"click\"], [\"update:open\"]),\n setup(__props, { emit: __emit }) {\n const isOpen = useModel(__props, \"open\");\n const props = __props;\n const emit = __emit;\n const isAvatarUrl = computed(() => {\n if (!props.avatarImage) {\n return false;\n }\n try {\n const url = new URL(props.avatarImage);\n return !!url;\n } catch {\n return false;\n }\n });\n const isCustomAvatar = computed(() => !!props.avatarImage);\n const avatarStyle = computed(() => ({\n marginInlineStart: `${props.margin}px`\n }));\n const hasUrl = computed(() => {\n if (!props.url || props.url.trim() === \"\") {\n return false;\n }\n try {\n const url = new URL(props.url, props.url?.startsWith?.(\"/\") ? window.location.href : void 0);\n return !!url;\n } catch {\n warn(\"[NcUserBubble] Invalid URL passed\", { url: props.url });\n return false;\n }\n });\n const href = computed(() => hasUrl.value ? props.url : void 0);\n const contentComponent = computed(() => {\n if (hasUrl.value) {\n return \"a\";\n } else if (props.to) {\n return RouterLink;\n } else {\n return \"div\";\n }\n });\n const contentStyle = computed(() => ({\n height: `${props.size}px`,\n lineHeight: `${props.size}px`,\n borderRadius: `${props.size / 2}px`\n }));\n watch([() => props.displayName, () => props.user], () => {\n if (!props.displayName && !props.user) {\n warn(\"[NcUserBubble] At least `displayName` or `user` property should be set.\");\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(resolveDynamicComponent(!!_ctx.$slots.default ? NcPopover : NcUserBubbleDiv), {\n shown: isOpen.value,\n \"onUpdate:shown\": _cache[1] || (_cache[1] = ($event) => isOpen.value = $event),\n class: \"user-bubble__wrapper\",\n trigger: \"hover focus\"\n }, {\n trigger: withCtx(({ attrs }) => [\n (openBlock(), createBlock(resolveDynamicComponent(contentComponent.value), mergeProps({\n class: [\"user-bubble__content\", { \"user-bubble__content--primary\": _ctx.primary }],\n style: contentStyle.value,\n to: _ctx.to,\n href: href.value\n }, attrs, {\n onClick: _cache[0] || (_cache[0] = ($event) => emit(\"click\", $event))\n }), {\n default: withCtx(() => [\n createVNode(NcAvatar, {\n url: isCustomAvatar.value && isAvatarUrl.value ? _ctx.avatarImage : void 0,\n \"icon-class\": isCustomAvatar.value && !isAvatarUrl.value ? _ctx.avatarImage : void 0,\n user: _ctx.user,\n \"display-name\": _ctx.displayName,\n size: _ctx.size - _ctx.margin * 2,\n style: normalizeStyle(avatarStyle.value),\n \"disable-tooltip\": true,\n \"disable-menu\": true,\n \"hide-status\": !_ctx.showUserStatus,\n class: \"user-bubble__avatar\"\n }, null, 8, [\"url\", \"icon-class\", \"user\", \"display-name\", \"size\", \"style\", \"hide-status\"]),\n createElementVNode(\"span\", _hoisted_1, toDisplayString(_ctx.displayName || _ctx.user), 1),\n !!_ctx.$slots.name ? (openBlock(), createElementBlock(\"span\", _hoisted_2, [\n renderSlot(_ctx.$slots, \"name\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ]),\n _: 2\n }, 1040, [\"class\", \"style\", \"to\", \"href\"]))\n ]),\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ]),\n _: 3\n }, 40, [\"shown\"]);\n };\n }\n});\nconst NcUserBubble = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-ad356e41\"]]);\nexport {\n NcUserBubble as N\n};\n//# sourceMappingURL=NcUserBubble-Cs84CNHz.mjs.map\n","export default function cumsum(values, valueof) {\n var sum = 0, index = 0;\n return Float64Array.from(values, valueof === undefined\n ? v => (sum += +v || 0)\n : v => (sum += +valueof(v, index++, values) || 0));\n}","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we dont ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that dont fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isnt worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// dont; wed rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend weve set an alarm, if we havent already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and were done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and were done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and were done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and were done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and were done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? Were done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Dont include the roots parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-s ancestor is a sibling of v, returns vi-s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n constructor(context, x) {\n this._context = context;\n this._x = x;\n }\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n }\n point(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: {\n this._point = 1;\n if (this._line) this._context.lineTo(x, y);\n else this._context.moveTo(x, y);\n break;\n }\n case 1: this._point = 2; // falls through\n default: {\n if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n break;\n }\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nclass BumpRadial {\n constructor(context) {\n this._context = context;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {}\n point(x, y) {\n x = +x, y = +y;\n if (this._point++ === 0) {\n this._x0 = x, this._y0 = y;\n } else {\n const p0 = pointRadial(this._x0, this._y0);\n const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n const p2 = pointRadial(x, this._y0);\n const p3 = pointRadial(x, y);\n this._context.moveTo(...p0);\n this._context.bezierCurveTo(...p1, ...p2, ...p3);\n }\n }\n}\n\nexport function bumpX(context) {\n return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n return new BumpRadial(context);\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport {bumpX, bumpY, bumpRadial} from \"./curve/bump.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nexport function link(curve) {\n let source = linkSource;\n let target = linkTarget;\n let x = pointX;\n let y = pointY;\n let context = null;\n let output = null;\n\n function link() {\n let buffer;\n const argv = slice.call(arguments);\n const s = source.apply(this, argv);\n const t = target.apply(this, argv);\n if (context == null) output = curve(buffer = path());\n output.lineStart();\n argv[0] = s, output.point(+x.apply(this, argv), +y.apply(this, argv));\n argv[0] = t, output.point(+x.apply(this, argv), +y.apply(this, argv));\n output.lineEnd();\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;\n };\n\n return link;\n}\n\nexport function linkHorizontal() {\n return link(bumpX);\n}\n\nexport function linkVertical() {\n return link(bumpY);\n}\n\nexport function linkRadial() {\n const l = link(bumpRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event wont trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Dont include the roots parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","import {hierarchy} from 'd3-hierarchy';\nimport packageInfo from '../package.json';\n\nconst {version} = packageInfo;\nconst defaults = Object.freeze({\n children: data => data.children,\n nodeSize: node => node.data.size,\n spacing: 0,\n});\n\n// Create a layout function with customizable options. Per D3-style, the\n// options can be set at any time using setter methods. The layout function\n// will compute the tree node positions based on the options in effect at the\n// time it is called.\nexport default function flextree(options) {\n const opts = Object.assign({}, defaults, options);\n function accessor(name) {\n const opt = opts[name];\n return typeof opt === 'function' ? opt : () => opt;\n }\n\n function layout(tree) {\n const wtree = wrap(getWrapper(), tree, node=>node.children);\n wtree.update();\n return wtree.data;\n }\n\n function getFlexNode() {\n const nodeSize = accessor('nodeSize');\n const spacing = accessor('spacing');\n return class FlexNode extends hierarchy.prototype.constructor {\n constructor(data) {\n super(data);\n }\n copy() {\n const c = wrap(this.constructor, this, node=>node.children);\n c.each(node => node.data = node.data.data);\n return c;\n }\n get size() { return nodeSize(this); }\n spacing(oNode) { return spacing(this, oNode); }\n get nodes() { return this.descendants(); }\n get xSize() { return this.size[0]; }\n get ySize() { return this.size[1]; }\n get top() { return this.y; }\n get bottom() { return this.y + this.ySize; }\n get left() { return this.x - this.xSize / 2; }\n get right() { return this.x + this.xSize / 2; }\n get root() {\n const ancs = this.ancestors();\n return ancs[ancs.length - 1];\n }\n get numChildren() {\n return this.hasChildren ? this.children.length : 0;\n }\n get hasChildren() { return !this.noChildren; }\n get noChildren() { return this.children === null; }\n get firstChild() {\n return this.hasChildren ? this.children[0] : null;\n }\n get lastChild() {\n return this.hasChildren ? this.children[this.numChildren - 1] : null;\n }\n get extents() {\n return (this.children || []).reduce(\n (acc, kid) => FlexNode.maxExtents(acc, kid.extents),\n this.nodeExtents);\n }\n get nodeExtents() {\n return {\n top: this.top,\n bottom: this.bottom,\n left: this.left,\n right: this.right,\n };\n }\n static maxExtents(e0, e1) {\n return {\n top: Math.min(e0.top, e1.top),\n bottom: Math.max(e0.bottom, e1.bottom),\n left: Math.min(e0.left, e1.left),\n right: Math.max(e0.right, e1.right),\n };\n }\n };\n }\n\n function getWrapper() {\n const FlexNode = getFlexNode();\n const nodeSize = accessor('nodeSize');\n const spacing = accessor('spacing');\n return class extends FlexNode {\n constructor(data) {\n super(data);\n Object.assign(this, {\n x: 0, y: 0,\n relX: 0, prelim: 0, shift: 0, change: 0,\n lExt: this, lExtRelX: 0, lThr: null,\n rExt: this, rExtRelX: 0, rThr: null,\n });\n }\n get size() { return nodeSize(this.data); }\n spacing(oNode) { return spacing(this.data, oNode.data); }\n get x() { return this.data.x; }\n set x(v) { this.data.x = v; }\n get y() { return this.data.y; }\n set y(v) { this.data.y = v; }\n update() {\n layoutChildren(this);\n resolveX(this);\n return this;\n }\n };\n }\n\n function wrap(FlexClass, treeData, children) {\n const _wrap = (data, parent) => {\n const node = new FlexClass(data);\n Object.assign(node, {\n parent,\n depth: parent === null ? 0 : parent.depth + 1,\n height: 0,\n length: 1,\n });\n const kidsData = children(data) || [];\n node.children = kidsData.length === 0 ? null\n : kidsData.map(kd => _wrap(kd, node));\n if (node.children) {\n Object.assign(node, node.children.reduce(\n (hl, kid) => ({\n height: Math.max(hl.height, kid.height + 1),\n length: hl.length + kid.length,\n }), node\n ));\n }\n return node;\n };\n return _wrap(treeData, null);\n }\n\n\n Object.assign(layout, {\n nodeSize(arg) {\n return arguments.length ? (opts.nodeSize = arg, layout) : opts.nodeSize;\n },\n spacing(arg) {\n return arguments.length ? (opts.spacing = arg, layout) : opts.spacing;\n },\n children(arg) {\n return arguments.length ? (opts.children = arg, layout) : opts.children;\n },\n hierarchy(treeData, children) {\n const kids = typeof children === 'undefined' ? opts.children : children;\n return wrap(getFlexNode(), treeData, kids);\n },\n dump(tree) {\n const nodeSize = accessor('nodeSize');\n const _dump = i0 => node => {\n const i1 = i0 + ' ';\n const i2 = i0 + ' ';\n const {x, y} = node;\n const size = nodeSize(node);\n const kids = (node.children || []);\n const kdumps = (kids.length === 0) ? ' ' :\n `,${i1}children: [${i2}${kids.map(_dump(i2)).join(i2)}${i1}],${i0}`;\n return `{ size: [${size.join(', ')}],${i1}x: ${x}, y: ${y}${kdumps}},`;\n };\n return _dump('\\n')(tree);\n },\n });\n return layout;\n}\nflextree.version = version;\n\nconst layoutChildren = (w, y = 0) => {\n w.y = y;\n (w.children || []).reduce((acc, kid) => {\n const [i, lastLows] = acc;\n layoutChildren(kid, w.y + w.ySize);\n // The lowest vertical coordinate while extreme nodes still point\n // in current subtree.\n const lowY = (i === 0 ? kid.lExt : kid.rExt).bottom;\n if (i !== 0) separate(w, i, lastLows);\n const lows = updateLows(lowY, i, lastLows);\n return [i + 1, lows];\n }, [0, null]);\n shiftChange(w);\n positionRoot(w);\n return w;\n};\n\n// Resolves the relative coordinate properties - relX and prelim --\n// to set the final, absolute x coordinate for each node. This also sets\n// `prelim` to 0, so that `relX` for each node is its x-coordinate relative\n// to its parent.\nconst resolveX = (w, prevSum, parentX) => {\n // A call to resolveX without arguments is assumed to be for the root of\n // the tree. This will set the root's x-coord to zero.\n if (typeof prevSum === 'undefined') {\n prevSum = -w.relX - w.prelim;\n parentX = 0;\n }\n const sum = prevSum + w.relX;\n w.relX = sum + w.prelim - parentX;\n w.prelim = 0;\n w.x = parentX + w.relX;\n (w.children || []).forEach(k => resolveX(k, sum, w.x));\n return w;\n};\n\n// Process shift and change for all children, to add intermediate spacing to\n// each child's modifier.\nconst shiftChange = w => {\n (w.children || []).reduce((acc, child) => {\n const [lastShiftSum, lastChangeSum] = acc;\n const shiftSum = lastShiftSum + child.shift;\n const changeSum = lastChangeSum + shiftSum + child.change;\n child.relX += changeSum;\n return [shiftSum, changeSum];\n }, [0, 0]);\n};\n\n// Separates the latest child from its previous sibling\n/* eslint-disable complexity */\nconst separate = (w, i, lows) => {\n const lSib = w.children[i - 1];\n const curSubtree = w.children[i];\n let rContour = lSib;\n let rSumMods = lSib.relX;\n let lContour = curSubtree;\n let lSumMods = curSubtree.relX;\n let isFirst = true;\n while (rContour && lContour) {\n if (rContour.bottom > lows.lowY) lows = lows.next;\n // How far to the left of the right side of rContour is the left side\n // of lContour? First compute the center-to-center distance, then add\n // the \"spacing\"\n const dist =\n (rSumMods + rContour.prelim) - (lSumMods + lContour.prelim) +\n rContour.xSize / 2 + lContour.xSize / 2 +\n rContour.spacing(lContour);\n if (dist > 0 || (dist < 0 && isFirst)) {\n lSumMods += dist;\n // Move subtree by changing relX.\n moveSubtree(curSubtree, dist);\n distributeExtra(w, i, lows.index, dist);\n }\n isFirst = false;\n // Advance highest node(s) and sum(s) of modifiers\n const rightBottom = rContour.bottom;\n const leftBottom = lContour.bottom;\n if (rightBottom <= leftBottom) {\n rContour = nextRContour(rContour);\n if (rContour) rSumMods += rContour.relX;\n }\n if (rightBottom >= leftBottom) {\n lContour = nextLContour(lContour);\n if (lContour) lSumMods += lContour.relX;\n }\n }\n // Set threads and update extreme nodes. In the first case, the\n // current subtree is taller than the left siblings.\n if (!rContour && lContour) setLThr(w, i, lContour, lSumMods);\n // In the next case, the left siblings are taller than the current subtree\n else if (rContour && !lContour) setRThr(w, i, rContour, rSumMods);\n};\n/* eslint-enable complexity */\n\n// Move subtree by changing relX.\nconst moveSubtree = (subtree, distance) => {\n subtree.relX += distance;\n subtree.lExtRelX += distance;\n subtree.rExtRelX += distance;\n};\n\nconst distributeExtra = (w, curSubtreeI, leftSibI, dist) => {\n const curSubtree = w.children[curSubtreeI];\n const n = curSubtreeI - leftSibI;\n // Are there intermediate children?\n if (n > 1) {\n const delta = dist / n;\n w.children[leftSibI + 1].shift += delta;\n curSubtree.shift -= delta;\n curSubtree.change -= dist - delta;\n }\n};\n\nconst nextLContour = w => {\n return w.hasChildren ? w.firstChild : w.lThr;\n};\n\nconst nextRContour = w => {\n return w.hasChildren ? w.lastChild : w.rThr;\n};\n\nconst setLThr = (w, i, lContour, lSumMods) => {\n const firstChild = w.firstChild;\n const lExt = firstChild.lExt;\n const curSubtree = w.children[i];\n lExt.lThr = lContour;\n // Change relX so that the sum of modifier after following thread is correct.\n const diff = lSumMods - lContour.relX - firstChild.lExtRelX;\n lExt.relX += diff;\n // Change preliminary x coordinate so that the node does not move.\n lExt.prelim -= diff;\n // Update extreme node and its sum of modifiers.\n firstChild.lExt = curSubtree.lExt;\n firstChild.lExtRelX = curSubtree.lExtRelX;\n};\n\n// Mirror image of setLThr.\nconst setRThr = (w, i, rContour, rSumMods) => {\n const curSubtree = w.children[i];\n const rExt = curSubtree.rExt;\n const lSib = w.children[i - 1];\n rExt.rThr = rContour;\n const diff = rSumMods - rContour.relX - curSubtree.rExtRelX;\n rExt.relX += diff;\n rExt.prelim -= diff;\n curSubtree.rExt = lSib.rExt;\n curSubtree.rExtRelX = lSib.rExtRelX;\n};\n\n// Position root between children, taking into account their modifiers\nconst positionRoot = w => {\n if (w.hasChildren) {\n const k0 = w.firstChild;\n const kf = w.lastChild;\n const prelim = (k0.prelim + k0.relX - k0.xSize / 2 +\n kf.relX + kf.prelim + kf.xSize / 2 ) / 2;\n Object.assign(w, {\n prelim,\n lExt: k0.lExt, lExtRelX: k0.lExtRelX,\n rExt: kf.rExt, rExtRelX: kf.rExtRelX,\n });\n }\n};\n\n// Make/maintain a linked list of the indexes of left siblings and their\n// lowest vertical coordinate.\nconst updateLows = (lowY, index, lastLows) => {\n // Remove siblings that are hidden by the new subtree.\n while (lastLows !== null && lowY >= lastLows.lowY)\n lastLows = lastLows.next;\n // Prepend the new subtree.\n return {\n lowY,\n index,\n next: lastLows,\n };\n};\n","import { selection, select } from \"d3-selection\";\nimport { max, min, sum, cumsum } from \"d3-array\";\nimport { tree, stratify } from \"d3-hierarchy\";\nimport { zoom, zoomIdentity } from \"d3-zoom\";\nimport { flextree } from 'd3-flextree';\nimport { linkHorizontal } from 'd3-shape';\n\nconst d3 = {\n selection,\n select,\n max,\n min,\n sum,\n cumsum,\n tree,\n stratify,\n zoom,\n zoomIdentity,\n linkHorizontal,\n flextree\n}\n\nexport class OrgChart {\n constructor() {\n\n // Exposed variables test test\n const attrs = {\n\n /* NOT INTENDED FOR PUBLIC OVERRIDE */\n\n id: `ID${Math.floor(Math.random() * 1000000)}`, // Id for event handlings\n firstDraw: true, // Whether chart is drawn for the first time\n ctx: document.createElement('canvas').getContext('2d'),\n initialExpandLevel: 1,\n nodeDefaultBackground: 'none',\n lastTransform: { x: 0, y: 0, k: 1 }, // Panning and zooming values\n allowedNodesCount: {},\n zoomBehavior: null,\n generateRoot: null,\n\n /* INTENDED FOR PUBLIC OVERRIDE */\n\n svgWidth: 800, // Configure svg width\n svgHeight: window.innerHeight - 100, // Configure svg height\n container: \"body\", // Set parent container, either CSS style selector or DOM element\n data: null, // Set data, it must be an array of objects, where hierarchy is clearly defined via id and parent ID (property names are configurable)\n connections: [], // Sets connection data, array of objects, SAMPLE: [{from:\"145\",to:\"201\",label:\"Conflicts of interest\"}]\n defaultFont: \"Helvetica\", // Set default font\n nodeId: d => d.nodeId || d.id, // Configure accessor for node id, default is either odeId or id\n parentNodeId: d => d.parentNodeId || d.parentId, // Configure accessor for parent node id, default is either parentNodeId or parentId\n rootMargin: 40, // Configure how much root node is offset from top\n nodeWidth: d3Node => 250, // Configure each node width, use with caution, it is better to have the same value set for all nodes\n nodeHeight: d => 150, // Configure each node height, use with caution, it is better to have the same value set for all nodes\n neighbourMargin: (n1, n2) => 80, // Configure margin between two nodes, use with caution, it is better to have the same value set for all nodes\n siblingsMargin: d3Node => 20, // Configure margin between two siblings, use with caution, it is better to have the same value set for all nodes\n childrenMargin: d => 60, // Configure margin between parent and children, use with caution, it is better to have the same value set for all nodes\n compactMarginPair: d => 100, // Configure margin between two nodes in compact mode, use with caution, it is better to have the same value set for all nodes\n compactMarginBetween: (d3Node => 20), // Configure margin between two nodes in compact mode, use with caution, it is better to have the same value set for all nodes\n nodeButtonWidth: d => 40, // Configure expand & collapse button width\n nodeButtonHeight: d => 40, // Configure expand & collapse button height\n nodeButtonX: d => -20, // Configure expand & collapse button x position\n nodeButtonY: d => -20, // Configure expand & collapse button y position\n linkYOffset: 30, // When correcting links which is not working for safari\n pagingStep: d => 5, // Configure how many nodes to show when making new nodes appear\n minPagingVisibleNodes: d => 2000, // Configure minimum number of visible nodes , after which paging button appears\n scaleExtent: [0.001, 20], // Configure zoom scale extent , if you don't want any kind of zooming, set it to [1,1]\n duration: 400, // Configure duration of transitions\n imageName: 'Chart', // Configure exported PNG and SVG image name\n setActiveNodeCentered: true, // Configure if active node should be centered when expanded and collapsed\n layout: \"top\",// Configure layout direction , possible values are \"top\", \"left\", \"right\", \"bottom\"\n compact: true, // Configure if compact mode is enabled , when enabled, nodes are shown in compact positions, instead of horizontal spread\n createZoom: d => d3.zoom(),\n onZoomStart: e => { }, // Callback for zoom & panning start\n onZoom: e => { }, // Callback for zoom & panning \n onZoomEnd: e => { }, // Callback for zoom & panning end\n onNodeClick: (d) => d, // Callback for node click\n onExpandOrCollapse: (d) => d, // Callback for node expand or collapse\n\n /*\n * Node HTML content generation , remember that you can access some helper methods:\n\n * node=> node.data - to access node's original data\n * node=> node.leaves() - to access node's leaves\n * node=> node.descendants() - to access node's descendants\n * node=> node.children - to access node's children\n * node=> node.parent - to access node's parent\n * node=> node.depth - to access node's depth\n * node=> node.hierarchyHeight - to access node's hierarchy height ( Height, which d3 assigns to hierarchy nodes)\n * node=> node.height - to access node's height\n * node=> node.width - to access node's width\n * \n * You can also access additional properties to style your node:\n * \n * d=>d.data._centeredWithDescendants - when node is centered with descendants\n * d=>d.data._directSubordinatesPaging - subordinates count in paging mode\n * d=>d.data._directSubordinates - subordinates count\n * d=>d.data._totalSubordinates - total subordinates count\n * d=>d._highlighted - when node is highlighted\n * d=>d._upToTheRootHighlighted - when node is highlighted up to the root\n * d=>d._expanded - when node is expanded\n * d=>d.data._centered - when node is centered\n */\n nodeContent: d => `<div style=\"padding:5px;font-size:10px;\">Sample Node(id=${d.id}), override using <br/> \n <code>chart.nodeContent({data}=>{ <br/>\n &nbsp;&nbsp;&nbsp;&nbsp;return '' // Custom HTML <br/>\n })</code>\n <br/> \n Or check different <a href=\"https://github.com/bumbeishvili/org-chart#jump-to-examples\" target=\"_blank\">layout examples</a>\n </div>`,\n\n /* Node expand & collapse button content and styling. You can access same helper methods as above */\n buttonContent: ({ node, state }) => {\n const icons = {\n \"left\": d => d ?\n `<div style=\"display:flex;\"><span style=\"align-items:center;display:flex;\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.283 3.50094L6.51 11.4749C6.37348 11.615 6.29707 11.8029 6.29707 11.9984C6.29707 12.194 6.37348 12.3819 6.51 12.5219L14.283 20.4989C14.3466 20.5643 14.4226 20.6162 14.5066 20.6516C14.5906 20.6871 14.6808 20.7053 14.772 20.7053C14.8632 20.7053 14.9534 20.6871 15.0374 20.6516C15.1214 20.6162 15.1974 20.5643 15.261 20.4989C15.3918 20.365 15.4651 20.1852 15.4651 19.9979C15.4651 19.8107 15.3918 19.6309 15.261 19.4969L7.9515 11.9984L15.261 4.50144C15.3914 4.36756 15.4643 4.18807 15.4643 4.00119C15.4643 3.81431 15.3914 3.63482 15.261 3.50094C15.1974 3.43563 15.1214 3.38371 15.0374 3.34827C14.9534 3.31282 14.8632 3.29456 14.772 3.29456C14.6808 3.29456 14.5906 3.31282 14.5066 3.34827C14.4226 3.38371 14.3466 3.43563 14.283 3.50094V3.50094Z\" fill=\"#716E7B\" stroke=\"#716E7B\"/>\n </svg></span><span style=\"color:#716E7B\">${node.data._directSubordinatesPaging} </span></div>` :\n `<div style=\"display:flex;\"><span style=\"align-items:center;display:flex;\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.989 3.49944C7.85817 3.63339 7.78492 3.8132 7.78492 4.00044C7.78492 4.18768 7.85817 4.36749 7.989 4.50144L15.2985 11.9999L7.989 19.4969C7.85817 19.6309 7.78492 19.8107 7.78492 19.9979C7.78492 20.1852 7.85817 20.365 7.989 20.4989C8.05259 20.5643 8.12863 20.6162 8.21261 20.6516C8.2966 20.6871 8.38684 20.7053 8.478 20.7053C8.56916 20.7053 8.6594 20.6871 8.74338 20.6516C8.82737 20.6162 8.90341 20.5643 8.967 20.4989L16.74 12.5234C16.8765 12.3834 16.9529 12.1955 16.9529 11.9999C16.9529 11.8044 16.8765 11.6165 16.74 11.4764L8.967 3.50094C8.90341 3.43563 8.82737 3.38371 8.74338 3.34827C8.6594 3.31282 8.56916 3.29456 8.478 3.29456C8.38684 3.29456 8.2966 3.31282 8.21261 3.34827C8.12863 3.38371 8.05259 3.43563 7.989 3.50094V3.49944Z\" fill=\"#716E7B\" stroke=\"#716E7B\"/>\n </svg></span><span style=\"color:#716E7B\">${node.data._directSubordinatesPaging} </span></div>`\n ,\n \"bottom\": d => d ? `<div style=\"display:flex;\"><span style=\"align-items:center;display:flex;\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19.497 7.98903L12 15.297L4.503 7.98903C4.36905 7.85819 4.18924 7.78495 4.002 7.78495C3.81476 7.78495 3.63495 7.85819 3.501 7.98903C3.43614 8.05257 3.38462 8.12842 3.34944 8.21213C3.31427 8.29584 3.29615 8.38573 3.29615 8.47653C3.29615 8.56733 3.31427 8.65721 3.34944 8.74092C3.38462 8.82463 3.43614 8.90048 3.501 8.96403L11.4765 16.74C11.6166 16.8765 11.8044 16.953 12 16.953C12.1956 16.953 12.3834 16.8765 12.5235 16.74L20.499 8.96553C20.5643 8.90193 20.6162 8.8259 20.6517 8.74191C20.6871 8.65792 20.7054 8.56769 20.7054 8.47653C20.7054 8.38537 20.6871 8.29513 20.6517 8.21114C20.6162 8.12715 20.5643 8.05112 20.499 7.98753C20.3651 7.85669 20.1852 7.78345 19.998 7.78345C19.8108 7.78345 19.6309 7.85669 19.497 7.98753V7.98903Z\" fill=\"#716E7B\" stroke=\"#716E7B\"/>\n </svg></span><span style=\"margin-left:1px;color:#716E7B\" >${node.data._directSubordinatesPaging} </span></div>\n ` : `<div style=\"display:flex;\"><span style=\"align-items:center;display:flex;\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.457 8.07005L3.49199 16.4296C3.35903 16.569 3.28485 16.7543 3.28485 16.9471C3.28485 17.1398 3.35903 17.3251 3.49199 17.4646L3.50099 17.4736C3.56545 17.5414 3.64304 17.5954 3.72904 17.6324C3.81504 17.6693 3.90765 17.6883 4.00124 17.6883C4.09483 17.6883 4.18745 17.6693 4.27344 17.6324C4.35944 17.5954 4.43703 17.5414 4.50149 17.4736L12.0015 9.60155L19.4985 17.4736C19.563 17.5414 19.6405 17.5954 19.7265 17.6324C19.8125 17.6693 19.9052 17.6883 19.9987 17.6883C20.0923 17.6883 20.1849 17.6693 20.2709 17.6324C20.3569 17.5954 20.4345 17.5414 20.499 17.4736L20.508 17.4646C20.641 17.3251 20.7151 17.1398 20.7151 16.9471C20.7151 16.7543 20.641 16.569 20.508 16.4296L12.543 8.07005C12.4729 7.99653 12.3887 7.93801 12.2954 7.89801C12.202 7.85802 12.1015 7.8374 12 7.8374C11.8984 7.8374 11.798 7.85802 11.7046 7.89801C11.6113 7.93801 11.527 7.99653 11.457 8.07005Z\" fill=\"#716E7B\" stroke=\"#716E7B\"/>\n </svg></span><span style=\"margin-left:1px;color:#716E7B\" >${node.data._directSubordinatesPaging} </span></div>\n `,\n \"right\": d => d ? `<div style=\"display:flex;\"><span style=\"align-items:center;display:flex;\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.989 3.49944C7.85817 3.63339 7.78492 3.8132 7.78492 4.00044C7.78492 4.18768 7.85817 4.36749 7.989 4.50144L15.2985 11.9999L7.989 19.4969C7.85817 19.6309 7.78492 19.8107 7.78492 19.9979C7.78492 20.1852 7.85817 20.365 7.989 20.4989C8.05259 20.5643 8.12863 20.6162 8.21261 20.6516C8.2966 20.6871 8.38684 20.7053 8.478 20.7053C8.56916 20.7053 8.6594 20.6871 8.74338 20.6516C8.82737 20.6162 8.90341 20.5643 8.967 20.4989L16.74 12.5234C16.8765 12.3834 16.9529 12.1955 16.9529 11.9999C16.9529 11.8044 16.8765 11.6165 16.74 11.4764L8.967 3.50094C8.90341 3.43563 8.82737 3.38371 8.74338 3.34827C8.6594 3.31282 8.56916 3.29456 8.478 3.29456C8.38684 3.29456 8.2966 3.31282 8.21261 3.34827C8.12863 3.38371 8.05259 3.43563 7.989 3.50094V3.49944Z\" fill=\"#716E7B\" stroke=\"#716E7B\"/>\n </svg></span><span style=\"color:#716E7B\">${node.data._directSubordinatesPaging} </span></div>` :\n `<div style=\"display:flex;\"><span style=\"align-items:center;display:flex;\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.283 3.50094L6.51 11.4749C6.37348 11.615 6.29707 11.8029 6.29707 11.9984C6.29707 12.194 6.37348 12.3819 6.51 12.5219L14.283 20.4989C14.3466 20.5643 14.4226 20.6162 14.5066 20.6516C14.5906 20.6871 14.6808 20.7053 14.772 20.7053C14.8632 20.7053 14.9534 20.6871 15.0374 20.6516C15.1214 20.6162 15.1974 20.5643 15.261 20.4989C15.3918 20.365 15.4651 20.1852 15.4651 19.9979C15.4651 19.8107 15.3918 19.6309 15.261 19.4969L7.9515 11.9984L15.261 4.50144C15.3914 4.36756 15.4643 4.18807 15.4643 4.00119C15.4643 3.81431 15.3914 3.63482 15.261 3.50094C15.1974 3.43563 15.1214 3.38371 15.0374 3.34827C14.9534 3.31282 14.8632 3.29456 14.772 3.29456C14.6808 3.29456 14.5906 3.31282 14.5066 3.34827C14.4226 3.38371 14.3466 3.43563 14.283 3.50094V3.50094Z\" fill=\"#716E7B\" stroke=\"#716E7B\"/>\n </svg></span><span style=\"color:#716E7B\">${node.data._directSubordinatesPaging} </span></div>`,\n \"top\": d => d ? `<div style=\"display:flex;\"><span style=\"align-items:center;display:flex;\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.457 8.07005L3.49199 16.4296C3.35903 16.569 3.28485 16.7543 3.28485 16.9471C3.28485 17.1398 3.35903 17.3251 3.49199 17.4646L3.50099 17.4736C3.56545 17.5414 3.64304 17.5954 3.72904 17.6324C3.81504 17.6693 3.90765 17.6883 4.00124 17.6883C4.09483 17.6883 4.18745 17.6693 4.27344 17.6324C4.35944 17.5954 4.43703 17.5414 4.50149 17.4736L12.0015 9.60155L19.4985 17.4736C19.563 17.5414 19.6405 17.5954 19.7265 17.6324C19.8125 17.6693 19.9052 17.6883 19.9987 17.6883C20.0923 17.6883 20.1849 17.6693 20.2709 17.6324C20.3569 17.5954 20.4345 17.5414 20.499 17.4736L20.508 17.4646C20.641 17.3251 20.7151 17.1398 20.7151 16.9471C20.7151 16.7543 20.641 16.569 20.508 16.4296L12.543 8.07005C12.4729 7.99653 12.3887 7.93801 12.2954 7.89801C12.202 7.85802 12.1015 7.8374 12 7.8374C11.8984 7.8374 11.798 7.85802 11.7046 7.89801C11.6113 7.93801 11.527 7.99653 11.457 8.07005Z\" fill=\"#716E7B\" stroke=\"#716E7B\"/>\n </svg></span><span style=\"margin-left:1px;color:#716E7B\">${node.data._directSubordinatesPaging} </span></div>\n ` : `<div style=\"display:flex;\"><span style=\"align-items:center;display:flex;\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19.497 7.98903L12 15.297L4.503 7.98903C4.36905 7.85819 4.18924 7.78495 4.002 7.78495C3.81476 7.78495 3.63495 7.85819 3.501 7.98903C3.43614 8.05257 3.38462 8.12842 3.34944 8.21213C3.31427 8.29584 3.29615 8.38573 3.29615 8.47653C3.29615 8.56733 3.31427 8.65721 3.34944 8.74092C3.38462 8.82463 3.43614 8.90048 3.501 8.96403L11.4765 16.74C11.6166 16.8765 11.8044 16.953 12 16.953C12.1956 16.953 12.3834 16.8765 12.5235 16.74L20.499 8.96553C20.5643 8.90193 20.6162 8.8259 20.6517 8.74191C20.6871 8.65792 20.7054 8.56769 20.7054 8.47653C20.7054 8.38537 20.6871 8.29513 20.6517 8.21114C20.6162 8.12715 20.5643 8.05112 20.499 7.98753C20.3651 7.85669 20.1852 7.78345 19.998 7.78345C19.8108 7.78345 19.6309 7.85669 19.497 7.98753V7.98903Z\" fill=\"#716E7B\" stroke=\"#716E7B\"/>\n </svg></span><span style=\"margin-left:1px;color:#716E7B\">${node.data._directSubordinatesPaging} </span></div>\n `,\n }\n return `<div style=\"border:1px solid #E4E2E9;border-radius:3px;padding:3px;font-size:9px;margin:auto auto;background-color:white\"> ${icons[state.layout](node.children)} </div>`\n },\n /* Node paging button content and styling. You can access same helper methods as above. */\n pagingButton: (d, i, arr, state) => {\n const step = state.pagingStep(d.parent);\n const currentIndex = d.parent.data._pagingStep;\n const diff = d.parent.data._directSubordinatesPaging - currentIndex;\n const min = Math.min(diff, step);\n return `\n <div style=\"margin-top:90px;\">\n <div style=\"display:flex;width:170px;border-radius:20px;padding:5px 15px; padding-bottom:4px;;background-color:#E5E9F2\">\n <div><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.59 7.41L10.18 12L5.59 16.59L7 18L13 12L7 6L5.59 7.41ZM16 6H18V18H16V6Z\" fill=\"#716E7B\" stroke=\"#716E7B\"/>\n </svg>\n </div><div style=\"line-height:2\"> Show next ${min} nodes </div></div>\n </div>\n `\n },\n /* You can access and modify actual node DOM element in runtime using this method. */\n nodeUpdate: function (d, i, arr) {\n d3.select(this)\n .select('.node-rect')\n .attr(\"stroke\", d => d.data._highlighted || d.data._upToTheRootHighlighted ? '#E27396' : 'none')\n .attr(\"stroke-width\", d.data._highlighted || d.data._upToTheRootHighlighted ? 10 : 1)\n },\n nodeEnter: (d) => d, // Custom handling of node update\n nodeExit: (d) => d, // Custom handling of exit node\n /* You can access and modify actual link DOM element in runtime using this method. */\n linkUpdate: function (d, i, arr) {\n d3.select(this)\n .attr(\"stroke\", d => d.data._upToTheRootHighlighted ? '#E27396' : '#E4E2E9')\n .attr(\"stroke-width\", d => d.data._upToTheRootHighlighted ? 5 : 1)\n\n if (d.data._upToTheRootHighlighted) {\n d3.select(this).raise()\n }\n },\n /* Horizontal diagonal generation algorithm - https://observablehq.com/@bumbeishvili/curved-edges-compact-horizontal */\n hdiagonal: function (s, t, m) {\n // Define source and target x,y coordinates\n const x = s.x;\n const y = s.y;\n const ex = t.x;\n const ey = t.y;\n\n let mx = m && m.x != null ? m.x : x; // This is a changed line\n let my = m && m.y != null ? m.y : y; // This also is a changed line\n\n // Values in case of top reversed and left reversed diagonals\n let xrvs = ex - x < 0 ? -1 : 1;\n let yrvs = ey - y < 0 ? -1 : 1;\n\n // Define preferred curve radius\n let rdef = 35;\n\n // Reduce curve radius, if source-target x space is smaller\n let r = Math.abs(ex - x) / 2 < rdef ? Math.abs(ex - x) / 2 : rdef;\n\n // Further reduce curve radius, is y space is more small\n r = Math.abs(ey - y) / 2 < r ? Math.abs(ey - y) / 2 : r;\n\n // Defin width and height of link, excluding radius\n let h = Math.abs(ey - y) / 2 - r;\n let w = Math.abs(ex - x) / 2 - r;\n\n // Build and return custom arc command\n return `\n M ${mx} ${my}\n L ${mx} ${y}\n L ${x} ${y}\n L ${x + w * xrvs} ${y}\n C ${x + w * xrvs + r * xrvs} ${y} \n ${x + w * xrvs + r * xrvs} ${y} \n ${x + w * xrvs + r * xrvs} ${y + r * yrvs}\n L ${x + w * xrvs + r * xrvs} ${ey - r * yrvs} \n C ${x + w * xrvs + r * xrvs} ${ey} \n ${x + w * xrvs + r * xrvs} ${ey} \n ${ex - w * xrvs} ${ey}\n L ${ex} ${ey}\n `;\n },\n /* Vertical diagonal generation algorithm - https://observablehq.com/@bumbeishvili/curved-edges-compacty-vertical */\n diagonal: function (s, t, m, offsets = { sy: 0, }) {\n const x = s.x;\n let y = s.y;\n\n const ex = t.x;\n const ey = t.y;\n\n let mx = m && m.x != null ? m.x : x; // This is a changed line\n let my = m && m.y != null ? m.y : y; // This also is a changed line\n\n let xrvs = ex - x < 0 ? -1 : 1;\n let yrvs = ey - y < 0 ? -1 : 1;\n\n y += offsets.sy;\n\n\n let rdef = 35;\n let r = Math.abs(ex - x) / 2 < rdef ? Math.abs(ex - x) / 2 : rdef;\n\n r = Math.abs(ey - y) / 2 < r ? Math.abs(ey - y) / 2 : r;\n\n let h = Math.abs(ey - y) / 2 - r;\n let w = Math.abs(ex - x) - r * 2;\n //w=0;\n const path = `\n M ${mx} ${my}\n L ${x} ${my}\n L ${x} ${y}\n L ${x} ${y + h * yrvs}\n C ${x} ${y + h * yrvs + r * yrvs} ${x} ${y + h * yrvs + r * yrvs\n } ${x + r * xrvs} ${y + h * yrvs + r * yrvs}\n L ${x + w * xrvs + r * xrvs} ${y + h * yrvs + r * yrvs}\n C ${ex} ${y + h * yrvs + r * yrvs} ${ex} ${y + h * yrvs + r * yrvs\n } ${ex} ${ey - h * yrvs}\n L ${ex} ${ey}\n `;\n return path;\n },\n // Defining arrows with markers for connections\n defs: function (state, visibleConnections) {\n return `<defs>\n ${visibleConnections.map(conn => {\n const labelWidth = this.getTextWidth(conn.label, { ctx: state.ctx, fontSize: 2, defaultFont: state.defaultFont });\n return `\n <marker id=\"${conn.from + \"_\" + conn.to}\" refX=\"${conn._source.x < conn._target.x ? -7 : 7}\" refY=\"5\" markerWidth=\"500\" markerHeight=\"500\" orient=\"${conn._source.x < conn._target.x ? \"auto\" : \"auto-start-reverse\"}\" >\n <rect rx=0.5 width=${conn.label ? labelWidth + 3 : 0} height=3 y=1 fill=\"#E27396\"></rect>\n <text font-size=\"2px\" x=1 fill=\"white\" y=3>${conn.label || ''}</text>\n </marker>\n\n <marker id=\"arrow-${conn.from + \"_\" + conn.to}\" markerWidth=\"500\" markerHeight=\"500\" refY=\"2\" refX=\"1\" orient=\"${conn._source.x < conn._target.x ? \"auto\" : \"auto-start-reverse\"}\" >\n <path transform=\"translate(0)\" d='M0,0 V4 L2,2 Z' fill='#E27396' />\n </marker>\n `}).join(\"\")}\n </defs>\n `},\n /* You can update connections with custom styling using this function */\n connectionsUpdate: function (d, i, arr) {\n d3.select(this)\n .attr(\"stroke\", d => '#E27396')\n .attr('stroke-linecap', 'round')\n .attr(\"stroke-width\", d => '5')\n .attr('pointer-events', 'none')\n .attr(\"marker-start\", d => `url(#${d.from + \"_\" + d.to})`)\n .attr(\"marker-end\", d => `url(#arrow-${d.from + \"_\" + d.to})`)\n },\n // Link generator for connections\n linkGroupArc: d3.linkHorizontal().x(d => d.x).y(d => d.y),\n\n /*\n * You can customize/offset positions for each node and link by overriding these functions\n * For example, suppose you want to move link y position 30 px bellow in top layout. You can do it like this:\n * ```javascript\n * const layout = chart.layoutBindings();\n * layout.top.linkY = node => node.y + 30;\n * chart.layoutBindings(layout);\n * ```\n */\n layoutBindings: {\n \"left\": {\n \"nodeLeftX\": node => 0,\n \"nodeRightX\": node => node.width,\n \"nodeTopY\": node => - node.height / 2,\n \"nodeBottomY\": node => node.height / 2,\n \"nodeJoinX\": node => node.x + node.width,\n \"nodeJoinY\": node => node.y - node.height / 2,\n \"linkJoinX\": node => node.x + node.width,\n \"linkJoinY\": node => node.y,\n \"linkX\": node => node.x,\n \"linkY\": node => node.y,\n \"linkCompactXStart\": node => node.x + node.width / 2,//node.x + (node.compactEven ? node.width / 2 : -node.width / 2),\n \"linkCompactYStart\": node => node.y + (node.compactEven ? node.height / 2 : -node.height / 2),\n \"compactLinkMidX\": (node, state) => node.firstCompactNode.x,// node.firstCompactNode.x + node.firstCompactNode.flexCompactDim[0] / 4 + state.compactMarginPair(node) / 4,\n \"compactLinkMidY\": (node, state) => node.firstCompactNode.y + node.firstCompactNode.flexCompactDim[0] / 4 + state.compactMarginPair(node) / 4,\n \"linkParentX\": node => node.parent.x + node.parent.width,\n \"linkParentY\": node => node.parent.y,\n \"buttonX\": node => node.width,\n \"buttonY\": node => node.height / 2,\n \"centerTransform\": ({ root, rootMargin, centerY, scale, centerX }) => `translate(${rootMargin},${centerY}) scale(${scale})`,\n \"compactDimension\": {\n sizeColumn: node => node.height,\n sizeRow: node => node.width,\n reverse: arr => arr.slice().reverse()\n },\n \"nodeFlexSize\": ({ height, width, siblingsMargin, childrenMargin, state, node }) => {\n if (state.compact && node.flexCompactDim) {\n const result = [node.flexCompactDim[0], node.flexCompactDim[1]]\n return result;\n };\n return [height + siblingsMargin, width + childrenMargin]\n },\n \"zoomTransform\": ({ centerY, scale }) => `translate(${0},${centerY}) scale(${scale})`,\n \"diagonal\": this.hdiagonal.bind(this),\n \"swap\": d => { const x = d.x; d.x = d.y; d.y = x; },\n \"nodeUpdateTransform\": ({ x, y, width, height }) => `translate(${x},${y - height / 2})`,\n },\n \"top\": {\n \"nodeLeftX\": node => -node.width / 2,\n \"nodeRightX\": node => node.width / 2,\n \"nodeTopY\": node => 0,\n \"nodeBottomY\": node => node.height,\n \"nodeJoinX\": node => node.x - node.width / 2,\n \"nodeJoinY\": node => node.y + node.height,\n \"linkJoinX\": node => node.x,\n \"linkJoinY\": node => node.y + node.height,\n \"linkCompactXStart\": node => node.x + (node.compactEven ? node.width / 2 : -node.width / 2),\n \"linkCompactYStart\": node => node.y + node.height / 2,\n \"compactLinkMidX\": (node, state) => node.firstCompactNode.x + node.firstCompactNode.flexCompactDim[0] / 4 + state.compactMarginPair(node) / 4,\n \"compactLinkMidY\": node => node.firstCompactNode.y,\n \"compactDimension\": {\n sizeColumn: node => node.width,\n sizeRow: node => node.height,\n reverse: arr => arr,\n },\n \"linkX\": node => node.x,\n \"linkY\": node => node.y,\n \"linkParentX\": node => node.parent.x,\n \"linkParentY\": node => node.parent.y + node.parent.height,\n \"buttonX\": node => node.width / 2,\n \"buttonY\": node => node.height,\n \"centerTransform\": ({ root, rootMargin, centerY, scale, centerX }) => `translate(${centerX},${rootMargin}) scale(${scale})`,\n \"nodeFlexSize\": ({ height, width, siblingsMargin, childrenMargin, state, node, compactViewIndex }) => {\n if (state.compact && node.flexCompactDim) {\n const result = [node.flexCompactDim[0], node.flexCompactDim[1]]\n return result;\n };\n return [width + siblingsMargin, height + childrenMargin];\n },\n \"zoomTransform\": ({ centerX, scale }) => `translate(${centerX},0}) scale(${scale})`,\n \"diagonal\": this.diagonal.bind(this),\n \"swap\": d => { },\n \"nodeUpdateTransform\": ({ x, y, width, height }) => `translate(${x - width / 2},${y})`,\n\n },\n \"bottom\": {\n \"nodeLeftX\": node => -node.width / 2,\n \"nodeRightX\": node => node.width / 2,\n \"nodeTopY\": node => -node.height,\n \"nodeBottomY\": node => 0,\n \"nodeJoinX\": node => node.x - node.width / 2,\n \"nodeJoinY\": node => node.y - node.height - node.height,\n \"linkJoinX\": node => node.x,\n \"linkJoinY\": node => node.y - node.height,\n \"linkCompactXStart\": node => node.x + (node.compactEven ? node.width / 2 : -node.width / 2),\n \"linkCompactYStart\": node => node.y - node.height / 2,\n \"compactLinkMidX\": (node, state) => node.firstCompactNode.x + node.firstCompactNode.flexCompactDim[0] / 4 + state.compactMarginPair(node) / 4,\n \"compactLinkMidY\": node => node.firstCompactNode.y,\n \"linkX\": node => node.x,\n \"linkY\": node => node.y,\n \"compactDimension\": {\n sizeColumn: node => node.width,\n sizeRow: node => node.height,\n reverse: arr => arr,\n },\n \"linkParentX\": node => node.parent.x,\n \"linkParentY\": node => node.parent.y - node.parent.height,\n \"buttonX\": node => node.width / 2,\n \"buttonY\": node => 0,\n \"centerTransform\": ({ root, rootMargin, centerY, scale, centerX, chartHeight }) => `translate(${centerX},${chartHeight - rootMargin}) scale(${scale})`,\n \"nodeFlexSize\": ({ height, width, siblingsMargin, childrenMargin, state, node }) => {\n if (state.compact && node.flexCompactDim) {\n const result = [node.flexCompactDim[0], node.flexCompactDim[1]]\n return result;\n };\n return [width + siblingsMargin, height + childrenMargin]\n },\n \"zoomTransform\": ({ centerX, scale }) => `translate(${centerX},0}) scale(${scale})`,\n \"diagonal\": this.diagonal.bind(this),\n \"swap\": d => { d.y = -d.y; },\n \"nodeUpdateTransform\": ({ x, y, width, height }) => `translate(${x - width / 2},${y - height})`,\n },\n \"right\": {\n \"nodeLeftX\": node => -node.width,\n \"nodeRightX\": node => 0,\n \"nodeTopY\": node => - node.height / 2,\n \"nodeBottomY\": node => node.height / 2,\n \"nodeJoinX\": node => node.x - node.width - node.width,\n \"nodeJoinY\": node => node.y - node.height / 2,\n \"linkJoinX\": node => node.x - node.width,\n \"linkJoinY\": node => node.y,\n \"linkX\": node => node.x,\n \"linkY\": node => node.y,\n \"linkParentX\": node => node.parent.x - node.parent.width,\n \"linkParentY\": node => node.parent.y,\n \"buttonX\": node => 0,\n \"buttonY\": node => node.height / 2,\n \"linkCompactXStart\": node => node.x - node.width / 2,//node.x + (node.compactEven ? node.width / 2 : -node.width / 2),\n \"linkCompactYStart\": node => node.y + (node.compactEven ? node.height / 2 : -node.height / 2),\n \"compactLinkMidX\": (node, state) => node.firstCompactNode.x,// node.firstCompactNode.x + node.firstCompactNode.flexCompactDim[0] / 4 + state.compactMarginPair(node) / 4,\n \"compactLinkMidY\": (node, state) => node.firstCompactNode.y + node.firstCompactNode.flexCompactDim[0] / 4 + state.compactMarginPair(node) / 4,\n \"centerTransform\": ({ root, rootMargin, centerY, scale, centerX, chartWidth }) => `translate(${chartWidth - rootMargin},${centerY}) scale(${scale})`,\n \"nodeFlexSize\": ({ height, width, siblingsMargin, childrenMargin, state, node }) => {\n if (state.compact && node.flexCompactDim) {\n const result = [node.flexCompactDim[0], node.flexCompactDim[1]]\n return result;\n };\n return [height + siblingsMargin, width + childrenMargin]\n },\n \"compactDimension\": {\n sizeColumn: node => node.height,\n sizeRow: node => node.width,\n reverse: arr => arr.slice().reverse()\n },\n \"zoomTransform\": ({ centerY, scale }) => `translate(${0},${centerY}) scale(${scale})`,\n \"diagonal\": this.hdiagonal.bind(this),\n \"swap\": d => { const x = d.x; d.x = -d.y; d.y = x; },\n \"nodeUpdateTransform\": ({ x, y, width, height }) => `translate(${x - width},${y - height / 2})`,\n },\n }\n\n };\n\n this.getChartState = () => attrs;\n\n // Dynamically set getter and setter functions for Chart class\n Object.keys(attrs).forEach((key) => {\n //@ts-ignore\n this[key] = function (_) {\n if (!arguments.length) {\n return attrs[key];\n } else {\n attrs[key] = _;\n }\n return this;\n };\n });\n\n this.initializeEnterExitUpdatePattern();\n }\n\n initializeEnterExitUpdatePattern() {\n d3.selection.prototype.patternify = function (params) {\n var container = this;\n var selector = params.selector;\n var elementTag = params.tag;\n var data = params.data || [selector];\n\n // Pattern in action\n var selection = container.selectAll(\".\" + selector).data(data, (d, i) => {\n if (typeof d === \"object\") {\n if (d.id) { return d.id; }\n }\n return i;\n });\n selection.exit().remove();\n selection = selection.enter().append(elementTag).merge(selection);\n selection.attr(\"class\", selector);\n return selection;\n };\n }\n\n // This method retrieves passed node's children IDs (including node)\n getNodeChildren({ data, children, _children }, nodeStore) {\n // Store current node ID\n nodeStore.push(data);\n\n // Loop over children and recursively store descendants id (expanded nodes)\n if (children) {\n children.forEach((d) => {\n this.getNodeChildren(d, nodeStore);\n });\n }\n\n // Loop over _children and recursively store descendants id (collapsed nodes)\n if (_children) {\n _children.forEach((d) => {\n this.getNodeChildren(d, nodeStore);\n });\n }\n\n // Return result\n return nodeStore;\n }\n\n // This method can be invoked via chart.setZoomFactor API, it zooms to particulat scale\n initialZoom(zoomLevel) {\n const attrs = this.getChartState();\n attrs.lastTransform.k = zoomLevel;\n return this;\n }\n\n render() {\n //InnerFunctions which will update visuals\n const attrs = this.getChartState();\n if (!attrs.data || attrs.data.length == 0) {\n console.log('ORG CHART - Data is empty');\n if (attrs.container) {\n select(attrs.container).select('.nodes-wrapper').remove();\n select(attrs.container).select('.links-wrapper').remove();\n select(attrs.container).select('.connections-wrapper').remove();\n }\n return this;\n }\n\n //Drawing containers\n const container = d3.select(attrs.container);\n const containerRect = container.node().getBoundingClientRect();\n if (containerRect.width > 0) attrs.svgWidth = containerRect.width;\n\n //Calculated properties\n const calc = {\n id: `ID${Math.floor(Math.random() * 1000000)}`, // id for event handlings,\n chartWidth: attrs.svgWidth,\n chartHeight: attrs.svgHeight\n };\n attrs.calc = calc;\n\n // Calculate max node depth (it's needed for layout heights calculation)\n calc.centerX = calc.chartWidth / 2;\n calc.centerY = calc.chartHeight / 2;\n\n // ******************* BEHAVIORS **********************\n if (attrs.firstDraw) {\n const behaviors = {\n zoom: null\n };\n\n // Get zooming function\n behaviors.zoom = attrs.createZoom()\n .clickDistance(10)\n .on('start', (event, d) => attrs.onZoomStart(event))\n .on('end', (event, d) => attrs.onZoomEnd(event))\n .on(\"zoom\", (event, d) => {\n attrs.onZoom(event);\n this.zoomed(event, d);\n })\n .scaleExtent(attrs.scaleExtent)\n attrs.zoomBehavior = behaviors.zoom;\n }\n\n //****************** ROOT node work ************************\n\n attrs.flexTreeLayout = flextree({\n nodeSize: node => {\n const width = attrs.nodeWidth(node);;\n const height = attrs.nodeHeight(node);\n const siblingsMargin = attrs.siblingsMargin(node)\n const childrenMargin = attrs.childrenMargin(node);\n return attrs.layoutBindings[attrs.layout].nodeFlexSize({\n state: attrs,\n node: node,\n width,\n height,\n siblingsMargin,\n childrenMargin\n });\n }\n })\n .spacing((nodeA, nodeB) => nodeA.parent == nodeB.parent ? 0 : attrs.neighbourMargin(nodeA, nodeB));\n\n this.setLayouts({ expandNodesFirst: false });\n\n // ************************* DRAWING **************************\n //Add svg\n const svg = container\n .patternify({\n tag: \"svg\",\n selector: \"svg-chart-container\"\n })\n .attr(\"width\", attrs.svgWidth)\n .attr(\"height\", attrs.svgHeight)\n .attr(\"font-family\", attrs.defaultFont)\n\n if (attrs.firstDraw) {\n svg.call(attrs.zoomBehavior)\n .on(\"dblclick.zoom\", null)\n .attr(\"cursor\", \"move\")\n }\n\n attrs.svg = svg;\n\n //Add container g element\n const chart = svg\n .patternify({\n tag: \"g\",\n selector: \"chart\"\n })\n\n // Add one more container g element, for better positioning controls\n attrs.centerG = chart\n .patternify({\n tag: \"g\",\n selector: \"center-group\"\n })\n\n attrs.linksWrapper = attrs.centerG.patternify({\n tag: \"g\",\n selector: \"links-wrapper\"\n })\n\n attrs.nodesWrapper = attrs.centerG.patternify({\n tag: \"g\",\n selector: \"nodes-wrapper\"\n })\n\n attrs.connectionsWrapper = attrs.centerG.patternify({\n tag: \"g\",\n selector: \"connections-wrapper\"\n })\n\n attrs.defsWrapper = svg.patternify({\n tag: \"g\",\n selector: \"defs-wrapper\"\n })\n\n if (attrs.firstDraw) {\n attrs.centerG.attr(\"transform\", () => {\n return attrs.layoutBindings[attrs.layout].centerTransform({\n centerX: calc.centerX,\n centerY: calc.centerY,\n scale: attrs.lastTransform.k,\n rootMargin: attrs.rootMargin,\n root: attrs.root,\n chartHeight: calc.chartHeight,\n chartWidth: calc.chartWidth\n })\n });\n }\n\n attrs.chart = chart;\n\n // Display tree contenrs\n this.update(attrs.root);\n\n\n //######################################### UTIL FUNCS ##################################\n // This function restyles foreign object elements ()\n\n d3.select(window).on(`resize.${attrs.id}`, () => {\n const containerRect = d3.select(attrs.container).node().getBoundingClientRect();\n attrs.svg.attr('width', containerRect.width)\n });\n\n if (attrs.firstDraw) {\n attrs.firstDraw = false;\n }\n\n return this;\n }\n\n // This function can be invoked via chart.addNode API, and it adds node in tree at runtime\n addNode(obj) {\n const attrs = this.getChartState();\n if (obj && (attrs.parentNodeId(obj) == null || attrs.parentNodeId(obj) == attrs.nodeId(obj)) && attrs.data.length == 0) {\n attrs.data.push(obj);\n this.render()\n return this;\n }\n const root = attrs.generateRoot(attrs.data)\n const descendants = root.descendants();\n const nodeFound = descendants.filter(({ data }) => attrs.nodeId(data).toString() === attrs.nodeId(obj).toString())[0];\n const parentFound = descendants.filter(({ data }) => attrs.nodeId(data).toString() === attrs.parentNodeId(obj).toString())[0];\n if (nodeFound) {\n console.log(`ORG CHART - ADD - Node with id \"${attrs.nodeId(obj)}\" already exists in tree`)\n return this;\n }\n\n if (obj._centered && !obj._expanded) obj._expanded = true;\n attrs.data.push(obj);\n\n // Update state of nodes and redraw graph\n this.updateNodesState();\n\n return this;\n }\n\n // This function can be invoked via chart.removeNode API, and it removes node from tree at runtime\n removeNode(nodeId) {\n const attrs = this.getChartState();\n const root = attrs.generateRoot(attrs.data)\n const descendants = root.descendants();\n const node = descendants.filter(({ data }) => attrs.nodeId(data) == nodeId)[0];\n\n if (!node) {\n console.log(`ORG CHART - REMOVE - Node with id \"${nodeId}\" not found in the tree`);\n return this;\n }\n\n // Get all node descendants\n const nodeDescendants = node.descendants()\n\n // Mark all node children and node itself for removal\n nodeDescendants\n .forEach(d => d.data._filteredOut = true)\n\n // Filter out retrieved nodes and reassign data\n attrs.data = attrs.data.filter(d => !d._filteredOut);\n\n if (attrs.data.length == 0) {\n this.render();\n } else {\n const updateNodesState = this.updateNodesState.bind(this);\n // Update state of nodes and redraw graph\n updateNodesState();\n }\n return this;\n }\n\n groupBy(array, accessor, aggegator) {\n const grouped = {}\n array.forEach(item => {\n const key = accessor(item)\n if (!grouped[key]) {\n grouped[key] = []\n }\n grouped[key].push(item)\n })\n\n Object.keys(grouped).forEach(key => {\n grouped[key] = aggegator(grouped[key])\n })\n return Object.entries(grouped);\n }\n calculateCompactFlexDimensions(root) {\n const attrs = this.getChartState();\n root.eachBefore(node => {\n node.firstCompact = null;\n node.compactEven = null;\n node.flexCompactDim = null;\n node.firstCompactNode = null;\n })\n root.eachBefore(node => {\n if (node.children && node.children.length > 1) {\n const compactChildren = node.children\n .filter(d => !d.children)\n\n if (compactChildren.length < 2) return;\n compactChildren.forEach((child, i) => {\n if (!i) child.firstCompact = true;\n if (i % 2) child.compactEven = false;\n else child.compactEven = true;\n child.row = Math.floor(i / 2);\n })\n const evenMaxColumnDimension = d3.max(compactChildren.filter(d => d.compactEven), attrs.layoutBindings[attrs.layout].compactDimension.sizeColumn);\n const oddMaxColumnDimension = d3.max(compactChildren.filter(d => !d.compactEven), attrs.layoutBindings[attrs.layout].compactDimension.sizeColumn);\n const columnSize = Math.max(evenMaxColumnDimension, oddMaxColumnDimension) * 2;\n const rowsMapNew = this.groupBy(compactChildren, d => d.row, reducedGroup => d3.max(reducedGroup, d => attrs.layoutBindings[attrs.layout].compactDimension.sizeRow(d) + attrs.compactMarginBetween(d)));\n const rowSize = d3.sum(rowsMapNew.map(v => v[1]))\n compactChildren.forEach(node => {\n node.firstCompactNode = compactChildren[0];\n if (node.firstCompact) {\n node.flexCompactDim = [\n columnSize + attrs.compactMarginPair(node),\n rowSize - attrs.compactMarginBetween(node)\n ];\n } else {\n node.flexCompactDim = [0, 0];\n }\n })\n node.flexCompactDim = null;\n }\n })\n }\n\n calculateCompactFlexPositions(root) {\n const attrs = this.getChartState();\n root.eachBefore(node => {\n if (node.children) {\n const compactChildren = node.children.filter(d => d.flexCompactDim);\n const fch = compactChildren[0];\n if (!fch) return;\n compactChildren.forEach((child, i, arr) => {\n if (i == 0) fch.x -= fch.flexCompactDim[0] / 2;\n if (i & i % 2 - 1) child.x = fch.x + fch.flexCompactDim[0] * 0.25 - attrs.compactMarginPair(child) / 4;\n else if (i) child.x = fch.x + fch.flexCompactDim[0] * 0.75 + attrs.compactMarginPair(child) / 4;\n })\n const centerX = fch.x + fch.flexCompactDim[0] * 0.5;\n fch.x = fch.x + fch.flexCompactDim[0] * 0.25 - attrs.compactMarginPair(fch) / 4;\n const offsetX = node.x - centerX;\n if (Math.abs(offsetX) < 10) {\n compactChildren.forEach(d => d.x += offsetX);\n }\n\n const rowsMapNew = this.groupBy(compactChildren, d => d.row, reducedGroup => d3.max(reducedGroup, d => attrs.layoutBindings[attrs.layout].compactDimension.sizeRow(d)));\n const cumSum = d3.cumsum(rowsMapNew.map(d => d[1] + attrs.compactMarginBetween(d)));\n compactChildren\n .forEach((node, i) => {\n if (node.row) {\n node.y = fch.y + cumSum[node.row - 1]\n } else {\n node.y = fch.y;\n }\n })\n\n }\n })\n }\n\n // This function basically redraws visible graph, based on nodes state\n update({ x0, y0, x = 0, y = 0, width, height }) {\n const attrs = this.getChartState();\n const calc = attrs.calc;\n\n // Paging\n if (attrs.compact) {\n this.calculateCompactFlexDimensions(attrs.root);\n }\n\n // Assigns the x and y position for the nodes\n const treeData = attrs.flexTreeLayout(attrs.root);\n\n // Reassigns the x and y position for the based on the compact layout\n if (attrs.compact) {\n this.calculateCompactFlexPositions(attrs.root);\n }\n\n const nodes = treeData.descendants();\n\n // console.table(nodes.map(d => ({ x: d.x, y: d.y, width: d.width, height: d.height, flexCompactDim: d.flexCompactDim + \"\" })))\n\n // Get all links\n const links = treeData.descendants().slice(1);\n nodes.forEach(attrs.layoutBindings[attrs.layout].swap)\n\n // Connections\n const connections = attrs.connections;\n const allNodesMap = {};\n attrs.allNodes.forEach(d => allNodesMap[attrs.nodeId(d.data)] = d);\n\n const visibleNodesMap = {}\n nodes.forEach(d => visibleNodesMap[attrs.nodeId(d.data)] = d);\n\n connections.forEach(connection => {\n const source = allNodesMap[connection.from];\n const target = allNodesMap[connection.to];\n connection._source = source;\n connection._target = target;\n })\n const visibleConnections = connections.filter(d => visibleNodesMap[d.from] && visibleNodesMap[d.to]);\n const defsString = attrs.defs.bind(this)(attrs, visibleConnections);\n const existingString = attrs.defsWrapper.html();\n if (defsString !== existingString) {\n attrs.defsWrapper.html(defsString)\n }\n\n // -------------------------- LINKS ----------------------\n // Get links selection\n const linkSelection = attrs.linksWrapper\n .selectAll(\"path.link\")\n .data(links, (d) => attrs.nodeId(d.data));\n\n // Enter any new links at the parent's previous position.\n const linkEnter = linkSelection\n .enter()\n .insert(\"path\", \"g\")\n .attr(\"class\", \"link\")\n .attr(\"d\", (d) => {\n const xo = attrs.layoutBindings[attrs.layout].linkJoinX({ x: x0, y: y0, width, height });\n const yo = attrs.layoutBindings[attrs.layout].linkJoinY({ x: x0, y: y0, width, height });\n const o = { x: xo, y: yo };\n return attrs.layoutBindings[attrs.layout].diagonal(o, o, o);\n });\n\n // Get links update selection\n const linkUpdate = linkEnter.merge(linkSelection);\n\n // Styling links\n linkUpdate\n .attr(\"fill\", \"none\")\n\n\n if (this.isEdge()) {\n linkUpdate\n .style('display', d => {\n const display = d.data._pagingButton ? 'none' : 'auto'\n return display;\n })\n } else {\n linkUpdate\n .attr('display', d => {\n const display = d.data._pagingButton ? 'none' : 'auto'\n return display;\n })\n }\n\n // Allow external modifications\n linkUpdate.each(attrs.linkUpdate);\n\n // Transition back to the parent element position\n linkUpdate\n .transition()\n .duration(attrs.duration)\n .attr(\"d\", (d) => {\n const n = attrs.compact && d.flexCompactDim ?\n {\n x: attrs.layoutBindings[attrs.layout].compactLinkMidX(d, attrs),\n y: attrs.layoutBindings[attrs.layout].compactLinkMidY(d, attrs)\n } :\n {\n x: attrs.layoutBindings[attrs.layout].linkX(d),\n y: attrs.layoutBindings[attrs.layout].linkY(d)\n };\n\n const p = {\n x: attrs.layoutBindings[attrs.layout].linkParentX(d),\n y: attrs.layoutBindings[attrs.layout].linkParentY(d),\n };\n\n const m = attrs.compact && d.flexCompactDim ? {\n x: attrs.layoutBindings[attrs.layout].linkCompactXStart(d),\n y: attrs.layoutBindings[attrs.layout].linkCompactYStart(d),\n } : n;\n return attrs.layoutBindings[attrs.layout].diagonal(n, p, m, { sy: attrs.linkYOffset });\n });\n\n // Remove any links which is exiting after animation\n const linkExit = linkSelection\n .exit()\n .transition()\n .duration(attrs.duration)\n .attr(\"d\", (d) => {\n const xo = attrs.layoutBindings[attrs.layout].linkJoinX({ x, y, width, height });\n const yo = attrs.layoutBindings[attrs.layout].linkJoinY({ x, y, width, height });\n const o = { x: xo, y: yo };\n return attrs.layoutBindings[attrs.layout].diagonal(o, o, null, { sy: attrs.linkYOffset });\n })\n .remove();\n\n\n // -------------------------- CONNECTIONS ----------------------\n\n const connectionsSel = attrs.connectionsWrapper\n .selectAll(\"path.connection\")\n .data(visibleConnections)\n\n // Enter any new connections at the parent's previous position.\n const connEnter = connectionsSel\n .enter()\n .insert(\"path\", \"g\")\n .attr(\"class\", \"connection\")\n .attr(\"d\", (d) => {\n const xo = attrs.layoutBindings[attrs.layout].linkJoinX({ x: x0, y: y0, width, height });\n const yo = attrs.layoutBindings[attrs.layout].linkJoinY({ x: x0, y: y0, width, height });\n const o = { x: xo, y: yo };\n return attrs.layoutBindings[attrs.layout].diagonal(o, o, null, { sy: attrs.linkYOffset });\n });\n\n\n // Get connections update selection\n const connUpdate = connEnter.merge(connectionsSel);\n\n // Styling connections\n connUpdate.attr(\"fill\", \"none\")\n\n // Transition back to the parent element position\n connUpdate\n .transition()\n .duration(attrs.duration)\n .attr('d', (d) => {\n const xs = attrs.layoutBindings[attrs.layout].linkX({ x: d._source.x, y: d._source.y, width: d._source.width, height: d._source.height });\n const ys = attrs.layoutBindings[attrs.layout].linkY({ x: d._source.x, y: d._source.y, width: d._source.width, height: d._source.height });\n const xt = attrs.layoutBindings[attrs.layout].linkJoinX({ x: d._target.x, y: d._target.y, width: d._target.width, height: d._target.height });\n const yt = attrs.layoutBindings[attrs.layout].linkJoinY({ x: d._target.x, y: d._target.y, width: d._target.width, height: d._target.height });\n return attrs.linkGroupArc({ source: { x: xs, y: ys }, target: { x: xt, y: yt } })\n })\n\n // Allow external modifications\n connUpdate.each(attrs.connectionsUpdate);\n\n // Remove any links which is exiting after animation\n const connExit = connectionsSel\n .exit()\n .transition()\n .duration(attrs.duration)\n .attr('opacity', 0)\n .remove();\n\n // -------------------------- NODES ----------------------\n // Get nodes selection\n const nodesSelection = attrs.nodesWrapper\n .selectAll(\"g.node\")\n .data(nodes, ({ data }) => attrs.nodeId(data));\n\n // Enter any new nodes at the parent's previous position.\n const nodeEnter = nodesSelection\n .enter()\n .append(\"g\")\n .attr(\"class\", \"node\")\n .attr(\"transform\", (d) => {\n if (d == attrs.root) return `translate(${x0},${y0})`\n const xj = attrs.layoutBindings[attrs.layout].nodeJoinX({ x: x0, y: y0, width, height });\n const yj = attrs.layoutBindings[attrs.layout].nodeJoinY({ x: x0, y: y0, width, height });\n return `translate(${xj},${yj})`\n })\n .attr(\"cursor\", \"pointer\")\n .on(\"click.node\", (event, node) => {\n const { data } = node;\n if ([...event.srcElement.classList].includes(\"node-button-foreign-object\")) {\n return;\n }\n if ([...event.srcElement.classList].includes(\"paging-button-wrapper\")) {\n this.loadPagingNodes(node);\n return;\n }\n if (!data._pagingButton) {\n attrs.onNodeClick(node);\n return;\n }\n console.log('event fired, no handlers')\n })\n // Event handler to the expand button\n .on(\"keydown.node\", (event, node) => {\n const { data } = node;\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {\n if ([...event.srcElement.classList].includes(\"node-button-foreign-object\")) {\n return;\n }\n if ([...event.srcElement.classList].includes(\"paging-button-wrapper\")) {\n this.loadPagingNodes(node);\n return;\n }\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {\n this.onButtonClick(event, node)\n }\n }\n });\n nodeEnter.each(attrs.nodeEnter)\n\n // Add background rectangle for the nodes\n nodeEnter\n .patternify({\n tag: \"rect\",\n selector: \"node-rect\",\n data: (d) => [d]\n })\n\n // Node update styles\n const nodeUpdate = nodeEnter\n .merge(nodesSelection)\n .style(\"font\", \"12px sans-serif\");\n\n // Add foreignObject element inside rectangle\n const fo = nodeUpdate.patternify({\n tag: \"foreignObject\",\n selector: \"node-foreign-object\",\n data: (d) => [d]\n })\n .style('overflow', 'visible')\n\n // Add foreign object\n fo.patternify({\n tag: \"xhtml:div\",\n selector: \"node-foreign-object-div\",\n data: (d) => [d]\n })\n\n this.restyleForeignObjectElements();\n\n // Add Node button circle's group (expand-collapse button)\n const nodeButtonGroups = nodeEnter\n .patternify({\n tag: \"g\",\n selector: \"node-button-g\",\n data: (d) => [d]\n })\n .on(\"click\", (event, d) => this.onButtonClick(event, d))\n .on(\"keydown\", (event, d) => {\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {\n this.onButtonClick(event, d)\n }\n });\n\n nodeButtonGroups.patternify({\n tag: 'rect',\n selector: 'node-button-rect',\n data: (d) => [d]\n })\n .attr('opacity', 0)\n .attr('pointer-events', 'all')\n .attr('width', d => attrs.nodeButtonWidth(d))\n .attr('height', d => attrs.nodeButtonHeight(d))\n .attr('x', d => attrs.nodeButtonX(d))\n .attr('y', d => attrs.nodeButtonY(d))\n\n // Add expand collapse button content\n const nodeFo = nodeButtonGroups\n .patternify({\n tag: \"foreignObject\",\n selector: \"node-button-foreign-object\",\n data: (d) => [d]\n })\n .attr('width', d => attrs.nodeButtonWidth(d))\n .attr('height', d => attrs.nodeButtonHeight(d))\n .attr('x', d => attrs.nodeButtonX(d))\n .attr('y', d => attrs.nodeButtonY(d))\n .style('overflow', 'visible')\n .patternify({\n tag: \"xhtml:div\",\n selector: \"node-button-div\",\n data: (d) => [d]\n })\n .style('pointer-events', 'none')\n .style('display', 'flex')\n .style('width', '100%')\n .style('height', '100%')\n\n\n\n // Transition to the proper position for the node\n nodeUpdate\n .transition()\n .attr(\"opacity\", 0)\n .duration(attrs.duration)\n .attr(\"transform\", ({ x, y, width, height }) => {\n return attrs.layoutBindings[attrs.layout].nodeUpdateTransform({ x, y, width, height });\n\n })\n .attr(\"opacity\", 1);\n\n // Style node rectangles\n nodeUpdate\n .select(\".node-rect\")\n .attr(\"width\", ({ width }) => width)\n .attr(\"height\", ({ height }) => height)\n .attr(\"x\", ({ width }) => 0)\n .attr(\"y\", ({ height }) => 0)\n .attr(\"cursor\", \"pointer\")\n .attr('rx', 3)\n .attr(\"fill\", attrs.nodeDefaultBackground)\n\n\n nodeUpdate.select(\".node-button-g\").attr(\"transform\", ({ data, width, height }) => {\n const x = attrs.layoutBindings[attrs.layout].buttonX({ width, height });\n const y = attrs.layoutBindings[attrs.layout].buttonY({ width, height });\n return `translate(${x},${y})`\n })\n .attr(\"display\", ({ data }) => {\n return data._directSubordinates > 0 ? null : 'none';\n })\n .attr(\"opacity\", ({ data, children, _children }) => {\n if (data._pagingButton) {\n return 0;\n }\n if (children || _children) {\n return 1;\n }\n return 0;\n });\n\n // Restyle node button circle\n nodeUpdate\n .select(\".node-button-foreign-object .node-button-div\")\n .html((node) => {\n return attrs.buttonContent({ node, state: attrs })\n })\n\n // Restyle button texts\n nodeUpdate\n .select(\".node-button-text\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"alignment-baseline\", \"middle\")\n .attr(\"font-size\", ({ children }) => {\n if (children) return 40;\n return 26;\n })\n .text(({ children }) => {\n if (children) return \"-\";\n return \"+\";\n })\n .attr(\"y\", this.isEdge() ? 10 : 0);\n\n nodeUpdate.each(attrs.nodeUpdate)\n\n // Remove any exiting nodes after transition\n const nodeExitTransition = nodesSelection\n .exit()\n nodeExitTransition.each(attrs.nodeExit)\n\n const maxDepthNode = nodeExitTransition.data().reduce((a, b) => a.depth < b.depth ? a : b, { depth: Infinity });\n\n nodeExitTransition.attr(\"opacity\", 1)\n .transition()\n .duration(attrs.duration)\n .attr(\"transform\", (d) => {\n\n let { x, y, width, height } = maxDepthNode.parent || {};\n const ex = attrs.layoutBindings[attrs.layout].nodeJoinX({ x, y, width, height });\n const ey = attrs.layoutBindings[attrs.layout].nodeJoinY({ x, y, width, height });\n return `translate(${ex},${ey})`\n })\n .on(\"end\", function () {\n d3.select(this).remove();\n })\n .attr(\"opacity\", 0);\n\n // Store the old positions for transition.\n nodes.forEach((d) => {\n d.x0 = d.x;\n d.y0 = d.y;\n });\n\n // CHECK FOR CENTERING\n const centeredNode = attrs.allNodes.filter(d => d.data._centered)[0]\n if (centeredNode) {\n let centeredNodes = [centeredNode]\n if (centeredNode.data._centeredWithDescendants) {\n if (attrs.compact) {\n centeredNodes = centeredNode.descendants().filter((d, i) => i < 7);\n } else {\n centeredNodes = centeredNode.descendants().filter((d, i, arr) => {\n const h = Math.round(arr.length / 2);\n const spread = 2;\n if (arr.length % 2) {\n return i > h - spread && i < h + spread - 1;\n }\n\n return i > h - spread && i < h + spread;\n });\n }\n\n }\n centeredNode.data._centeredWithDescendants = null;\n centeredNode.data._centered = null;\n this.fit({\n animate: true,\n scale: false,\n nodes: centeredNodes\n })\n }\n\n }\n\n // This function detects whether current browser is edge\n isEdge() {\n return window.navigator.userAgent.includes(\"Edge\");\n }\n\n // Generate horizontal diagonal - play with it here - https://observablehq.com/@bumbeishvili/curved-edges-horizontal-d3-v3-v4-v5-v6\n hdiagonal(s, t, m, offsets) {\n const state = this.getChartState();\n return state.hdiagonal(s, t, m, offsets);\n }\n\n // Generate custom diagonal - play with it here - https://observablehq.com/@bumbeishvili/curved-edges\n diagonal(s, t, m, offsets) {\n const state = this.getChartState();\n return state.diagonal(s, t, m, offsets);\n }\n\n restyleForeignObjectElements() {\n const attrs = this.getChartState();\n\n attrs.svg\n .selectAll(\".node-foreign-object\")\n .attr(\"width\", ({ width }) => width)\n .attr(\"height\", ({ height }) => height)\n .attr(\"x\", ({ width }) => 0)\n .attr(\"y\", ({ height }) => 0);\n attrs.svg\n .selectAll(\".node-foreign-object-div\")\n .style(\"width\", ({ width }) => `${width}px`)\n .style(\"height\", ({ height }) => `${height}px`)\n .html(function (d, i, arr) {\n if (d.data._pagingButton) {\n return `<div class=\"paging-button-wrapper\"><div style=\"pointer-events:none\">${attrs.pagingButton(d, i, arr, attrs)}</div></div>`;\n }\n return attrs.nodeContent.bind(this)(d, i, arr, attrs)\n })\n }\n\n // Toggle children on click.\n onButtonClick(event, d) {\n const attrs = this.getChartState();\n if (d.data._pagingButton) {\n return;\n }\n if (attrs.setActiveNodeCentered) {\n d.data._centered = true;\n d.data._centeredWithDescendants = true;\n }\n\n // If childrens are expanded\n if (d.children) {\n //Collapse them\n d._children = d.children;\n d.children = null;\n\n // Set descendants expanded property to false\n this.setExpansionFlagToChildren(d, false);\n } else {\n // Expand children\n d.children = d._children;\n d._children = null;\n\n // Set each children as expanded\n if (d.children) {\n d.children.forEach(({ data }) => (data._expanded = true));\n }\n }\n\n // Redraw Graph\n this.update(d);\n event.stopPropagation();\n\n // Trigger callback\n attrs.onExpandOrCollapse(d);\n\n }\n\n // This function changes `expanded` property to descendants\n setExpansionFlagToChildren({ data, children, _children }, flag) {\n // Set flag to the current property\n data._expanded = flag;\n\n // Loop over and recursively update expanded children's descendants\n if (children) {\n children.forEach((d) => {\n this.setExpansionFlagToChildren(d, flag);\n });\n }\n\n // Loop over and recursively update collapsed children's descendants\n if (_children) {\n _children.forEach((d) => {\n this.setExpansionFlagToChildren(d, flag);\n });\n }\n }\n\n\n // Method which only expands nodes, which have property set \"expanded=true\"\n expandSomeNodes(d) {\n // If node has expanded property set\n if (d.data._expanded) {\n // Retrieve node's parent\n let parent = d.parent;\n\n // While we can go up\n while (parent && parent._children) {\n // Expand all current parent's children\n parent.children = parent._children;\n parent._children = null;\n // Replace current parent holding object\n parent = parent.parent;\n }\n }\n\n // Recursively do the same for collapsed nodes\n if (d._children) {\n d._children.forEach((ch) => this.expandSomeNodes(ch));\n }\n\n // Recursively do the same for expanded nodes\n if (d.children) {\n d.children.forEach((ch) => this.expandSomeNodes(ch));\n }\n }\n\n // This function updates nodes state and redraws graph, usually after data change\n updateNodesState() {\n const attrs = this.getChartState();\n\n\n this.setLayouts({ expandNodesFirst: true });\n\n // Redraw Graphs\n this.update(attrs.root);\n }\n\n setLayouts({ expandNodesFirst = true }) {\n const attrs = this.getChartState();\n // Store new root by converting flat data to hierarchy\n\n attrs.generateRoot = d3\n .stratify()\n .id((d) => attrs.nodeId(d))\n .parentId(d => attrs.parentNodeId(d))\n attrs.root = attrs.generateRoot(attrs.data);\n\n const descendantsBefore = attrs.root.descendants();\n if (attrs.initialExpandLevel > 1 && descendantsBefore.length > 0) {\n descendantsBefore.forEach((d) => {\n if (d.depth <= attrs.initialExpandLevel) {\n d.data._expanded = true;\n }\n })\n attrs.initialExpandLevel = 1;\n }\n\n\n const hiddenNodesMap = {};\n attrs.root.descendants()\n .filter(node => node.children)\n .filter(node => !node.data._pagingStep)\n .forEach(node => {\n node.data._pagingStep = attrs.minPagingVisibleNodes(node);\n })\n\n\n\n attrs.root.eachBefore((node, i) => {\n node.data._directSubordinatesPaging = node.children ? node.children.length : 0;\n if (node.children) {\n node.children.forEach((child, j) => {\n child.data._pagingButton = false;\n if (j > node.data._pagingStep) {\n hiddenNodesMap[child.id] = true;\n }\n if (j === node.data._pagingStep && (node.children.length - 1) > node.data._pagingStep) {\n child.data._pagingButton = true;\n }\n if (hiddenNodesMap[child.parent.id]) {\n hiddenNodesMap[child.id] = true;\n }\n if (child.data._expanded || child.data._centered || child.data._highlighted || child.data._upToTheRootHighlighted) {\n let localNode = child;\n while (localNode && (hiddenNodesMap[localNode.id] || localNode.data._pagingButton)) {\n hiddenNodesMap[localNode.id] = false;\n if (localNode.data._pagingButton) {\n localNode.data._pagingButton = false;\n localNode.parent.children.forEach(ch => {\n ch.data._expanded = true;\n hiddenNodesMap[ch.id] = false;\n })\n }\n localNode = localNode.parent;\n }\n }\n })\n }\n })\n\n\n attrs.root = d3\n .stratify()\n .id((d) => attrs.nodeId(d))\n .parentId(d => attrs.parentNodeId(d))(attrs.data.filter(d => hiddenNodesMap[d.id] !== true));\n\n attrs.root.each((node, i, arr) => {\n let _hierarchyHeight = node._hierarchyHeight || node.height\n let width = attrs.nodeWidth(node);\n let height = attrs.nodeHeight(node);\n Object.assign(node, { width, height, _hierarchyHeight })\n })\n\n // Store positions, where children appear during their enter animation\n attrs.root.x0 = 0;\n attrs.root.y0 = 0;\n attrs.allNodes = attrs.root.descendants();\n\n // Store direct and total descendants count\n attrs.allNodes.forEach((d) => {\n Object.assign(d.data, {\n _directSubordinates: d.children ? d.children.length : 0,\n _totalSubordinates: d.descendants().length - 1\n });\n });\n\n if (attrs.root.children) {\n if (expandNodesFirst) {\n // Expand all nodes first\n attrs.root.children.forEach(this.expand);\n }\n // Then collapse them all\n attrs.root.children.forEach((d) => this.collapse(d));\n\n // Collapse root if level is 0\n if (attrs.initialExpandLevel == 0) {\n attrs.root._children = attrs.root.children;\n attrs.root.children = null;\n }\n\n // Then only expand nodes, which have expanded property set to true\n [attrs.root].forEach((ch) => this.expandSomeNodes(ch));\n }\n }\n\n // Function which collapses passed node and it's descendants\n collapse(d) {\n if (d.children) {\n d._children = d.children;\n d._children.forEach((ch) => this.collapse(ch));\n d.children = null;\n }\n }\n\n // Function which expands passed node and it's descendants\n expand(d) {\n if (d._children) {\n d.children = d._children;\n d.children.forEach((ch) => this.expand(ch));\n d._children = null;\n }\n }\n\n // Zoom handler function\n zoomed(event, d) {\n const attrs = this.getChartState();\n const chart = attrs.chart;\n\n // Get d3 event's transform object\n const transform = event.transform;\n\n // Store it\n attrs.lastTransform = transform;\n\n // Reposition and rescale chart accordingly\n chart.attr(\"transform\", transform);\n\n // Apply new styles to the foreign object element\n if (this.isEdge()) {\n this.restyleForeignObjectElements();\n }\n }\n\n zoomTreeBounds({ x0, x1, y0, y1, params = { animate: true, scale: true, onCompleted: () => { } } }) {\n const { centerG, svgWidth: w, svgHeight: h, svg, zoomBehavior, duration, lastTransform } = this.getChartState()\n let scaleVal = Math.min(8, 0.9 / Math.max((x1 - x0) / w, (y1 - y0) / h));\n let identity = d3.zoomIdentity.translate(w / 2, h / 2)\n identity = identity.scale(params.scale ? scaleVal : lastTransform.k)\n\n identity = identity.translate(-(x0 + x1) / 2, -(y0 + y1) / 2);\n // Transition zoom wrapper component into specified bounds\n svg.transition().duration(params.animate ? duration : 0).call(zoomBehavior.transform, identity);\n centerG.transition().duration(params.animate ? duration : 0).attr('transform', 'translate(0,0)')\n .on('end', function () {\n if (params.onCompleted) {\n params.onCompleted()\n }\n })\n }\n\n fit({ animate = true, nodes, scale = true, onCompleted = () => { } } = {}) {\n const attrs = this.getChartState();\n const { root } = attrs;\n let descendants = nodes ? nodes : root.descendants();\n const minX = d3.min(descendants, d => d.x + attrs.layoutBindings[attrs.layout].nodeLeftX(d))\n const maxX = d3.max(descendants, d => d.x + attrs.layoutBindings[attrs.layout].nodeRightX(d))\n const minY = d3.min(descendants, d => d.y + attrs.layoutBindings[attrs.layout].nodeTopY(d))\n const maxY = d3.max(descendants, d => d.y + attrs.layoutBindings[attrs.layout].nodeBottomY(d))\n\n this.zoomTreeBounds({\n params: { animate: animate, scale, onCompleted },\n x0: minX - 50,\n x1: maxX + 50,\n y0: minY - 50,\n y1: maxY + 50,\n\n });\n return this;\n }\n\n // Load Paging Nodes\n loadPagingNodes(node) {\n const attrs = this.getChartState();\n node.data._pagingButton = false;\n const current = node.parent.data._pagingStep;\n const step = attrs.pagingStep(node.parent)\n const newPagingIndex = current + step;\n node.parent.data._pagingStep = newPagingIndex;\n this.updateNodesState();\n }\n\n // This function can be invoked via chart.setExpanded API, it expands or collapses particular node\n setExpanded(id, expandedFlag = true) {\n\n const attrs = this.getChartState();\n // Retrieve node by node Id\n const node = attrs.allNodes.filter(({ data }) => attrs.nodeId(data) == id)[0];\n\n if (!node) {\n console.log(`ORG CHART - ${expandedFlag ? \"EXPAND\" : \"COLLAPSE\"} - Node with id (${id}) not found in the tree`)\n return this;\n }\n node.data._expanded = expandedFlag;\n if (expandedFlag == false) {\n const parent = node.parent || { descendants: () => [] };\n const descendants = parent.descendants().filter(d => d != parent);\n descendants.forEach(d => d.data._expanded = false)\n }\n\n\n return this;\n }\n\n setCentered(nodeId) {\n const attrs = this.getChartState();\n // this.setExpanded(nodeId)\n const root = attrs.generateRoot(attrs.data)\n const descendants = root.descendants();\n const node = descendants.filter(({ data }) => attrs.nodeId(data).toString() == nodeId.toString())[0];\n if (!node) {\n console.log(`ORG CHART - CENTER - Node with id (${nodeId}) not found in the tree`)\n return this;\n }\n const ancestors = node.ancestors();\n ancestors.forEach(d => d.data._expanded = true)\n node.data._centered = true;\n node.data._expanded = true;\n return this;\n }\n\n setHighlighted(nodeId) {\n const attrs = this.getChartState();\n const root = attrs.generateRoot(attrs.data)\n const descendants = root.descendants();\n const node = descendants.filter(d => attrs.nodeId(d.data).toString() === nodeId.toString())[0];\n if (!node) {\n console.log(`ORG CHART - HIGHLIGHT - Node with id (${nodeId}) not found in the tree`);\n return this\n }\n const ancestors = node.ancestors();\n ancestors.forEach(d => d.data._expanded = true)\n node.data._highlighted = true;\n node.data._expanded = true;\n node.data._centered = true;\n return this;\n }\n\n setUpToTheRootHighlighted(nodeId) {\n const attrs = this.getChartState();\n const root = attrs.generateRoot(attrs.data)\n const descendants = root.descendants();\n const node = descendants.filter(d => attrs.nodeId(d.data).toString() === nodeId.toString())[0];\n if (!node) {\n console.log(`ORG CHART - HIGHLIGHTROOT - Node with id (${nodeId}) not found in the tree`)\n return this;\n }\n const ancestors = node.ancestors();\n ancestors.forEach(d => d.data._expanded = true)\n node.data._upToTheRootHighlighted = true;\n node.data._expanded = true;\n node.ancestors().forEach(d => d.data._upToTheRootHighlighted = true)\n return this;\n }\n\n clearHighlighting() {\n const attrs = this.getChartState();\n attrs.allNodes.forEach(d => {\n d.data._highlighted = false;\n d.data._upToTheRootHighlighted = false;\n })\n this.update(attrs.root);\n return this;\n }\n\n // It can take selector which would go fullscreen\n fullscreen(elem) {\n const attrs = this.getChartState();\n const el = d3.select(elem || attrs.container).node();\n\n d3.select(document).on('fullscreenchange.' + attrs.id, function (d) {\n const fsElement = document.fullscreenElement || document.mozFullscreenElement || document.webkitFullscreenElement;\n if (fsElement == el) {\n setTimeout(d => {\n attrs.svg.attr('height', window.innerHeight - 40);\n }, 500)\n } else {\n attrs.svg.attr('height', attrs.svgHeight)\n }\n })\n\n if (el.requestFullscreen) {\n el.requestFullscreen();\n } else if (el.mozRequestFullScreen) {\n el.mozRequestFullScreen();\n } else if (el.webkitRequestFullscreen) {\n el.webkitRequestFullscreen();\n } else if (el.msRequestFullscreen) {\n el.msRequestFullscreen();\n }\n }\n\n // Zoom in exposed method\n zoomIn() {\n const { svg, zoomBehavior } = this.getChartState();\n svg.transition().call(zoomBehavior.scaleBy, 1.3);\n }\n\n // Zoom out exposed method\n zoomOut() {\n const { svg, zoomBehavior } = this.getChartState();\n svg.transition().call(zoomBehavior.scaleBy, 0.78);\n }\n\n toDataURL(url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.onload = function () {\n var reader = new FileReader();\n reader.onloadend = function () {\n callback(reader.result);\n }\n reader.readAsDataURL(xhr.response);\n };\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.send();\n }\n\n exportImg({ full = false, scale = 3, onLoad = d => d, save = true, backgroundColor = \"#FAFAFA\" } = {}) {\n const that = this;\n const attrs = this.getChartState();\n const { svg: svgImg, root } = attrs\n let count = 0;\n const selection = svgImg.selectAll('img')\n let total = selection.size()\n\n const exportImage = () => {\n const transform = JSON.parse(JSON.stringify(that.lastTransform()));\n const duration = that.duration();\n if (full) {\n that.fit();\n }\n const { svg } = that.getChartState()\n\n setTimeout(d => {\n that.downloadImage({\n node: svg.node(), scale,\n isSvg: false,\n backgroundColor,\n onAlreadySerialized: d => {\n that.update(root)\n },\n imageName: attrs.imageName,\n onLoad: onLoad,\n save\n })\n }, full ? duration + 10 : 0)\n }\n\n if (total > 0) {\n selection\n .each(function () {\n that.toDataURL(this.src, (dataUrl) => {\n this.src = dataUrl;\n if (++count == total) {\n exportImage();\n }\n })\n })\n } else {\n exportImage();\n }\n\n\n }\n\n\n\n exportSvg() {\n const { svg, imageName } = this.getChartState();\n this.downloadImage({ imageName: imageName, node: svg.node(), scale: 3, isSvg: true })\n return this;\n }\n\n expandAll() {\n const { allNodes, root, data } = this.getChartState();\n data.forEach(d => d._expanded = true)\n // allNodes.forEach(d => d.data._expanded = true);\n this.render()\n return this;\n }\n\n collapseAll() {\n const { allNodes, root } = this.getChartState();\n allNodes.forEach(d => d.data._expanded = false);\n this.initialExpandLevel(0)\n this.render();\n return this;\n }\n\n downloadImage({ node, scale = 2, imageName = 'graph', isSvg = false, save = true, backgroundColor = \"#FAFAFA\", onAlreadySerialized = d => { }, onLoad = d => { } }) {\n // Retrieve svg node\n const svgNode = node;\n\n function saveAs(uri, filename) {\n // create link\n var link = document.createElement('a');\n if (typeof link.download === 'string') {\n document.body.appendChild(link); // Firefox requires the link to be in the body\n link.download = filename;\n link.href = uri;\n link.click();\n document.body.removeChild(link); // remove the link when done\n } else {\n location.replace(uri);\n }\n }\n // This function serializes SVG and sets all necessary attributes\n function serializeString(svg) {\n const xmlns = 'http://www.w3.org/2000/xmlns/';\n const xlinkns = 'http://www.w3.org/1999/xlink';\n const svgns = 'http://www.w3.org/2000/svg';\n svg = svg.cloneNode(true);\n const fragment = window.location.href + '#';\n const walker = document.createTreeWalker(svg, NodeFilter.SHOW_ELEMENT, null, false);\n while (walker.nextNode()) {\n for (const attr of walker.currentNode.attributes) {\n if (attr.value.includes(fragment)) {\n attr.value = attr.value.replace(fragment, '#');\n }\n }\n }\n svg.setAttributeNS(xmlns, 'xmlns', svgns);\n svg.setAttributeNS(xmlns, 'xmlns:xlink', xlinkns);\n const serializer = new XMLSerializer();\n const string = serializer.serializeToString(svg);\n return string;\n }\n\n if (isSvg) {\n let source = serializeString(svgNode);\n //add xml declaration\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n //convert svg source to URI data scheme.\n var url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n saveAs(url, imageName + \".svg\");\n onAlreadySerialized()\n return;\n }\n // Get image quality index (basically, index you can zoom in)\n const quality = scale\n // Create image\n const image = document.createElement('img');\n image.onload = function () {\n // Create image canvas\n const canvas = document.createElement('canvas');\n // Set width and height based on SVG node\n const rect = svgNode.getBoundingClientRect();\n canvas.width = rect.width * quality;\n canvas.height = rect.height * quality;\n // Draw background\n const context = canvas.getContext('2d');\n context.fillStyle = backgroundColor;;\n context.fillRect(0, 0, rect.width * quality, rect.height * quality);\n context.drawImage(image, 0, 0, rect.width * quality, rect.height * quality);\n // Set some image metadata\n let dt = canvas.toDataURL('image/png');\n if (onLoad) {\n onLoad(dt)\n }\n if (save) {\n // Invoke saving function\n saveAs(dt, imageName + '.png');\n }\n\n };\n\n var url = 'data:image/svg+xml; charset=utf8, ' + encodeURIComponent(serializeString(svgNode));\n\n onAlreadySerialized()\n\n image.src = url// URL.createObjectURL(blob);\n // This function invokes save window\n\n }\n\n // Calculate what size text will take\n getTextWidth(text, {\n fontSize = 14,\n fontWeight = 400,\n defaultFont = \"Helvetice\",\n ctx\n } = {}) {\n ctx.font = `${fontWeight || ''} ${fontSize}px ${defaultFont} `\n const measurement = ctx.measureText(text);\n return measurement.width;\n }\n\n // Clear after moving off from the page\n clear() {\n const attrs = this.getChartState();\n d3.select(window).on(`resize.${attrs.id}`, null);\n attrs.svg && attrs.svg.selectAll(\"*\").remove();\n }\n}","<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div class=\"org-chart-node\">\n\t\t<div class=\"inner-box\">\n\t\t\t<router-link\n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'contact',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tselectedGroup: selectedChart,\n\t\t\t\t\t\tselectedContact: chartData.key,\n\t\t\t\t\t},\n\t\t\t\t}\">\n\t\t\t\t<Avatar\n\t\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t\t:display-name=\"chartData.fullName\"\n\t\t\t\t\t:is-no-user=\"true\"\n\t\t\t\t\t:size=\"60\"\n\t\t\t\t\t:url=\"chartData.photoUrl\"\n\t\t\t\t\tclass=\"org-chart-node__avatar\" />\n\t\t\t</router-link>\n\t\t\t<div class=\"panel\" />\n\t\t\t<div class=\"main-container\">\n\t\t\t\t<h3 class=\"fullName\">\n\t\t\t\t\t{{ chartData.fullName }}\n\t\t\t\t</h3>\n\t\t\t\t<h4 class=\"title\">\n\t\t\t\t\t{{ chartData.title }}\n\t\t\t\t</h4>\n\t\t\t</div>\n\t\t\t<div class=\"description\">\n\t\t\t\t<p v-if=\"chartData._directSubordinates\">\n\t\t\t\t\t{{ t('contacts', 'Manages') }}: {{ chartData._directSubordinates }}\n\t\t\t\t</p>\n\t\t\t\t<p v-if=\"chartData._totalSubordinates\">\n\t\t\t\t\t{{ t('contacts', 'Oversees') }}: {{ chartData._totalSubordinates }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { NcAvatar as Avatar } from '@nextcloud/vue'\n\nexport default {\n\tname: 'ChartTemplate',\n\tcomponents: {\n\t\tAvatar,\n\t},\n\n\tprops: {\n\t\tchartData: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t},\n\n\t\tonAvatarClick: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => {},\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tselectedChart() {\n\t\t\treturn this.$route.params.selectedChart\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.org-chart-node {\n\tbackground-color: var(--color-main-background);\n\theight: 175px;\n\tborder-radius: var(--border-radius-large);\n\toverflow: visible;\n\n\t&__avatar {\n\t\tmargin-top: -30px;\n\t\tborder: 1px solid var(--color-border);\n\t}\n\n\t.inner-box {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\theight: 175px;\n\t\tpadding-top: 0;\n\t\tmargin-top: 30px;\n\t\tborder: 1px solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-main-background);\n\n\t\t.main-container {\n\t\t\tpadding: 20px;\n\t\t\ttext-align: center;\n\t\t\tflex: 1;\n\n\t\t\t.fullName {\n\t\t\t\tcolor: var(--color-primary-element);\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\n\t\t\t.title {\n\t\t\t\tmargin-top: 4px;\n\t\t\t}\n\t\t}\n\n\t\t.description {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\twidth: 100%;\n\t\t\tpadding: 15px;\n\t\t}\n\t}\n\n\t.inner-box-highlight {\n\t\tborder: 2px solid var(--color-primary-element) !important;\n\t}\n\n\t.panel {\n\t\twidth: 100%;\n\t\tmargin: -34px -1px 0 -1px;\n\t\tbackground-color: var(--color-primary-element);\n\t\theight: 15px;\n\t\tborder-start-start-radius: var(--border-radius-large);\n\t\tborder-start-end-radius: var(--border-radius-large);\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div class=\"org-chart\">\n\t\t<div v-if=\"data.length > 1\" class=\"org-chart__menu\">\n\t\t\t<h3>\n\t\t\t\t{{ t('contacts', 'Chart') }}:\n\t\t\t</h3>\n\t\t\t<NcSelect\n\t\t\t\tv-model=\"chart\"\n\t\t\t\tclass=\"chart-selection\"\n\t\t\t\t:disabled=\"data.length === 1\"\n\t\t\t\t:options=\"charts\"\n\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t:searchable=\"false\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\tinput-id=\"select-chart-input\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\t@update:model-value=\"chartChanged\" />\n\t\t</div>\n\t\t<div ref=\"svgElementContainer\" class=\"org-chart__container\" />\n\t</div>\n</template>\n\n<script>\nimport { getLocale } from '@nextcloud/l10n'\nimport { NcSelect } from '@nextcloud/vue'\nimport * as d3 from 'd3'\nimport { OrgChart } from 'd3-org-chart'\nimport { createApp } from 'vue'\nimport ChartTemplate from './ChartTemplate.vue'\nimport LegacyGlobalMixin from '../mixins/LegacyGlobalMixin.js'\nimport router from './../router/index.js'\n\nexport default {\n\tname: 'OrgChart',\n\tcomponents: {\n\t\tNcSelect,\n\t},\n\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tchartReference: null,\n\t\t\tchart: 0,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcharts() {\n\t\t\treturn this.data.map((nodes, index) => {\n\t\t\t\tconst head = nodes.find((node) => node.parentNodeId === null)\n\t\t\t\treturn {\n\t\t\t\t\tid: index,\n\t\t\t\t\tlabel: head.org ? `${head.org} (${head.fullName})` : head.fullName,\n\t\t\t\t}\n\t\t\t}).sort((a, b) => {\n\t\t\t\treturn a.label.localeCompare(\n\t\t\t\t\tb.label,\n\t\t\t\t\tgetLocale().replace('_', '-'),\n\t\t\t\t\t{ sensitivity: 'base' },\n\t\t\t\t)\n\t\t\t})\n\t\t},\n\n\t\tplaceholder() {\n\t\t\treturn t('contacts', 'Select chart …')\n\t\t},\n\t},\n\n\twatch: {\n\t\tdata() {\n\t\t\tif (this.data[this.chart]?.length) {\n\t\t\t\tthis.renderChart(this.data[this.chart])\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (this.data[this.chart]?.length) {\n\t\t\tthis.renderChart(this.data[this.chart])\n\t\t}\n\t},\n\n\tmethods: {\n\t\tchartChanged(inputProps) {\n\t\t\tthis.renderChart(this.data[inputProps.id])\n\t\t},\n\n\t\tgoToContact(key) {\n\t\t\tthis.$router.push({\n\t\t\t\tname: 'contact',\n\t\t\t\tparams: {\n\t\t\t\t\tselectedGroup: this.$route.params.selectedChart,\n\t\t\t\t\tselectedContact: key,\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\n\t\trenderChart(data) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias\n\t\t\tconst that = this\n\t\t\tif (!this.chartReference) {\n\t\t\t\tthis.chartReference = new OrgChart()\n\t\t\t}\n\n\t\t\tthis.chartReference\n\t\t\t\t.container(this.$refs.svgElementContainer) // node or css selector\n\t\t\t\t.data(data)\n\t\t\t\t.nodeWidth(() => 250)\n\t\t\t\t.initialZoom(1)\n\t\t\t\t.nodeHeight(() => 200)\n\t\t\t\t.childrenMargin(() => 70)\n\t\t\t\t.compactMarginBetween(() => 15)\n\t\t\t\t.compactMarginPair(() => 80)\n\t\t\t\t.nodeContent(() => {\n\t\t\t\t\treturn ''\n\t\t\t\t})\n\t\t\t\t.nodeUpdate(function(d) {\n\t\t\t\t\t// Render vue component node template for each node\n\t\t\t\t\tconst containerHTMLElement = this.querySelector('.node-foreign-object-div')\n\t\t\t\t\tif (containerHTMLElement) {\n\t\t\t\t\t\t// Avoid re-render if already we have rendered component\n\t\t\t\t\t\tif (d.data.rendered) {\n\t\t\t\t\t\t\tcontainerHTMLElement.appendChild(d.data.rendered)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst app = createApp(ChartTemplate, {\n\t\t\t\t\t\t\t\tchartData: d.data,\n\t\t\t\t\t\t\t\tonAvatarClick: (uid) => that.goToContact(uid),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tapp.use(router)\n\t\t\t\t\t\t\tapp.mixin(LegacyGlobalMixin)\n\t\t\t\t\t\t\tconst $el = document.createElement('div')\n\t\t\t\t\t\t\tapp.mount($el)\n\t\t\t\t\t\t\td.data.rendered = $el\n\t\t\t\t\t\t\tcontainerHTMLElement.appendChild($el)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.select('.inner-box')\n\t\t\t\t\t\t.attr('class', (dRect) => dRect.data._highlighted || dRect.data._upToTheRootHighlighted ? 'inner-box inner-box-highlight' : 'inner-box')\n\t\t\t\t})\n\t\t\t\t.linkUpdate(function(d) {\n\t\t\t\t\td3.select(this)\n\t\t\t\t\t\t.attr('stroke', () => 'var(--color-primary-element)')\n\t\t\t\t\t\t.attr('stroke-width', (dRect) => dRect.data._upToTheRootHighlighted ? 2 : 1)\n\n\t\t\t\t\tif (d.data._upToTheRootHighlighted) {\n\t\t\t\t\t\td3.select(this).raise()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.onNodeClick((d) => {\n\t\t\t\t\tif (!this.chartReference.data().filter((item) => item.nodeId === d.id)[0]?._upToTheRootHighlighted) {\n\t\t\t\t\t\tthis.chartReference.clearHighlighting()\n\t\t\t\t\t\tthis.chartReference.setUpToTheRootHighlighted(d.id).render()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.chartReference.clearHighlighting()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.render()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n.org-chart {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n\n\t&__menu {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: flex-start;\n\t\tborder: 1px solid var(--color-border);\n\n\t\th3 {\n\t\t\tpadding-inline: 50px 10px;\n\t\t\tmargin: 9px 0;\n\t\t}\n\t}\n\n\t&__container {\n\t\tdisplay: flex;\n\t\tbackground-color: var(--color-main-background);\n\t\theight: 100%;\n\n\t\tsvg {\n\t\t\theight: 100%;\n\t\t}\n\t}\n\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<AppContent>\n\t\t<OrgChart :data=\"transformData\" />\n\t</AppContent>\n</template>\n\n<script>\nimport { NcAppContent as AppContent } from '@nextcloud/vue'\nimport OrgChart from '../OrgChart.vue'\nimport { getChart, transformNode } from '../../utils/chartUtils.js'\n\nexport default {\n\tname: 'ChartContent',\n\tcomponents: {\n\t\tAppContent,\n\t\tOrgChart,\n\t},\n\n\tprops: {\n\t\tcontactsList: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdata: [],\n\t\t\tsearchQuery: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\ttransformData() {\n\t\t\tconst contactsByUid = {}\n\t\t\tconst contacts = Object.keys(this.contactsList).map((key) => {\n\t\t\t\tconst [uid, addressbook] = Buffer.from(key, 'base64').toString('utf-8').split('~')\n\t\t\t\tif (!contactsByUid[addressbook]) {\n\t\t\t\t\tcontactsByUid[addressbook] = {}\n\t\t\t\t}\n\t\t\t\treturn (contactsByUid[addressbook][uid] = this.contactsList[key])\n\t\t\t})\n\n\t\t\tconst headManagers = []\n\t\t\tconst tempContacts = contacts.filter((contact) => contact.managersName).reduce((prev, contact) => {\n\t\t\t\tprev.push(transformNode(contact))\n\n\t\t\t\tconst manager = contactsByUid[contact.addressbook.id][contact.managersName]\n\t\t\t\tif (manager && !manager.managersName && !headManagers.some((m) => m.nodeId === manager.uid)) {\n\t\t\t\t\tprev.push(transformNode(manager))\n\t\t\t\t\theadManagers.push(transformNode(manager))\n\t\t\t\t}\n\t\t\t\treturn prev\n\t\t\t}, [])\n\n\t\t\tconst charts = headManagers.map((managerNode) => getChart(tempContacts, managerNode))\n\t\t\t// Debugging logs to figure out why a graph might not show. Leave this in place until the logic is bulletproof\n\t\t\tconsole.debug('Org charts', charts.map((nodes, index) => nodes.map((n) => `list ${index} ${n.nodeId} (${n.fullName}) -> ${n.parentNodeId}`)))\n\t\t\treturn charts\n\t\t},\n\t},\n}\n</script>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon account-group-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,5A3.5,3.5 0 0,0 8.5,8.5A3.5,3.5 0 0,0 12,12A3.5,3.5 0 0,0 15.5,8.5A3.5,3.5 0 0,0 12,5M12,7A1.5,1.5 0 0,1 13.5,8.5A1.5,1.5 0 0,1 12,10A1.5,1.5 0 0,1 10.5,8.5A1.5,1.5 0 0,1 12,7M5.5,8A2.5,2.5 0 0,0 3,10.5C3,11.44 3.53,12.25 4.29,12.68C4.65,12.88 5.06,13 5.5,13C5.94,13 6.35,12.88 6.71,12.68C7.08,12.47 7.39,12.17 7.62,11.81C6.89,10.86 6.5,9.7 6.5,8.5C6.5,8.41 6.5,8.31 6.5,8.22C6.2,8.08 5.86,8 5.5,8M18.5,8C18.14,8 17.8,8.08 17.5,8.22C17.5,8.31 17.5,8.41 17.5,8.5C17.5,9.7 17.11,10.86 16.38,11.81C16.5,12 16.63,12.15 16.78,12.3C16.94,12.45 17.1,12.58 17.29,12.68C17.65,12.88 18.06,13 18.5,13C18.94,13 19.35,12.88 19.71,12.68C20.47,12.25 21,11.44 21,10.5A2.5,2.5 0 0,0 18.5,8M12,14C9.66,14 5,15.17 5,17.5V19H19V17.5C19,15.17 14.34,14 12,14M4.71,14.55C2.78,14.78 0,15.76 0,17.5V19H3V17.07C3,16.06 3.69,15.22 4.71,14.55M19.29,14.55C20.31,15.22 21,16.06 21,17.07V19H24V17.5C24,15.76 21.22,14.78 19.29,14.55M12,16C13.53,16 15.24,16.5 16.23,17H7.77C8.76,16.5 10.47,16 12,16Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AccountGroupOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon account-plus-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M15,4A4,4 0 0,0 11,8A4,4 0 0,0 15,12A4,4 0 0,0 19,8A4,4 0 0,0 15,4M15,5.9C16.16,5.9 17.1,6.84 17.1,8C17.1,9.16 16.16,10.1 15,10.1A2.1,2.1 0 0,1 12.9,8A2.1,2.1 0 0,1 15,5.9M4,7V10H1V12H4V15H6V12H9V10H6V7H4M15,13C12.33,13 7,14.33 7,17V20H23V17C23,14.33 17.67,13 15,13M15,14.9C17.97,14.9 21.1,16.36 21.1,17V18.1H8.9V17C8.9,16.36 12,14.9 15,14.9Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AccountPlusOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon book-open-page-variant-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19 2L14 6.5V17.5L19 13V2M6.5 5C4.55 5 2.45 5.4 1 6.5V21.16C1 21.41 1.25 21.66 1.5 21.66C1.6 21.66 1.65 21.59 1.75 21.59C3.1 20.94 5.05 20.5 6.5 20.5C8.45 20.5 10.55 20.9 12 22C13.35 21.15 15.8 20.5 17.5 20.5C19.15 20.5 20.85 20.81 22.25 21.56C22.35 21.61 22.4 21.59 22.5 21.59C22.75 21.59 23 21.34 23 21.09V6.5C22.4 6.05 21.75 5.75 21 5.5V19C19.9 18.65 18.7 18.5 17.5 18.5C15.8 18.5 13.35 19.15 12 20V6.5C10.55 5.4 8.45 5 6.5 5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"BookOpenPageVariantIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon calendar-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12 12H17V17H12V12M19 3H18V1H16V3H8V1H6V3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3M19 5V7H5V5H19M5 19V9H19V19H5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CalendarOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon check-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CheckIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon cog-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,8A4,4 0 0,1 16,12A4,4 0 0,1 12,16A4,4 0 0,1 8,12A4,4 0 0,1 12,8M12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12A2,2 0 0,0 12,10M10,22C9.75,22 9.54,21.82 9.5,21.58L9.13,18.93C8.5,18.68 7.96,18.34 7.44,17.94L4.95,18.95C4.73,19.03 4.46,18.95 4.34,18.73L2.34,15.27C2.21,15.05 2.27,14.78 2.46,14.63L4.57,12.97L4.5,12L4.57,11L2.46,9.37C2.27,9.22 2.21,8.95 2.34,8.73L4.34,5.27C4.46,5.05 4.73,4.96 4.95,5.05L7.44,6.05C7.96,5.66 8.5,5.32 9.13,5.07L9.5,2.42C9.54,2.18 9.75,2 10,2H14C14.25,2 14.46,2.18 14.5,2.42L14.87,5.07C15.5,5.32 16.04,5.66 16.56,6.05L19.05,5.05C19.27,4.96 19.54,5.05 19.66,5.27L21.66,8.73C21.79,8.95 21.73,9.22 21.54,9.37L19.43,11L19.5,12L19.43,13L21.54,14.63C21.73,14.78 21.79,15.05 21.66,15.27L19.66,18.73C19.54,18.95 19.27,19.04 19.05,18.95L16.56,17.95C16.04,18.34 15.5,18.68 14.87,18.93L14.5,21.58C14.46,21.82 14.25,22 14,22H10M11.25,4L10.88,6.61C9.68,6.86 8.62,7.5 7.85,8.39L5.44,7.35L4.69,8.65L6.8,10.2C6.4,11.37 6.4,12.64 6.8,13.8L4.68,15.36L5.43,16.66L7.86,15.62C8.63,16.5 9.68,17.14 10.87,17.38L11.24,20H12.76L13.13,17.39C14.32,17.14 15.37,16.5 16.14,15.62L18.57,16.66L19.32,15.36L17.2,13.81C17.6,12.64 17.6,11.37 17.2,10.2L19.31,8.65L18.56,7.35L16.15,8.39C15.38,7.5 14.32,6.86 13.12,6.62L12.75,4H11.25Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CogOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon file-document-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M6,2A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6M6,4H13V9H18V20H6V4M8,12V14H16V12H8M8,16V18H13V16H8Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FileDocumentOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon folder-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M20,18H4V8H20M20,6H12L10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FolderOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon login-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M11 7L9.6 8.4L12.2 11H2V13H12.2L9.6 15.6L11 17L16 12L11 7M20 19H12V21H20C21.1 21 22 20.1 22 19V5C22 3.9 21.1 3 20 3H12V5H20V19Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"LoginIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon logout-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M17 7L15.59 8.41L18.17 11H8V13H18.17L15.59 15.58L17 17L22 12M4 5H12V3H4C2.9 3 2 3.9 2 5V19C2 20.1 2.9 21 4 21H12V19H4V5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"LogoutIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon message-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M20 2H4C2.9 2 2 2.9 2 4V22L6 18H20C21.1 18 22 17.1 22 16V4C22 2.9 21.1 2 20 2M20 16H5.2L4 17.2V4H20V16Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"MessageOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon view-dashboard-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M13,3V9H21V3M13,21H21V11H13M3,21H11V15H3M3,13H11V3H3V13Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ViewDashboardIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<ul>\n\t\t<li class=\"circle-config\">\n\t\t\t<ul class=\"circle-config__list\">\n\t\t\t\t<CheckboxRadioSwitch\n\t\t\t\t\t:model-value=\"enforcePasswordProtection\"\n\t\t\t\t\t:loading=\"loading.includes(ENFORCE_PASSWORD_PROTECTION)\"\n\t\t\t\t\t:disabled=\"loading.length > 0\"\n\t\t\t\t\twrapper-element=\"li\"\n\t\t\t\t\t@update:model-value=\"changePasswordProtection\">\n\t\t\t\t\t{{ t('contacts', 'Enforce password protection on files shared to this team') }}\n\t\t\t\t</CheckboxRadioSwitch>\n\n\t\t\t\t<CheckboxRadioSwitch\n\t\t\t\t\tv-if=\"enforcePasswordProtection\"\n\t\t\t\t\t:model-value=\"useUniquePassword || showUniquePasswordInput\"\n\t\t\t\t\t:loading=\"loading.includes(USE_UNIQUE_PASSWORD)\"\n\t\t\t\t\t:disabled=\"loading.length > 0\"\n\t\t\t\t\twrapper-element=\"li\"\n\t\t\t\t\t@update:model-value=\"changeUseUniquePassword\">\n\t\t\t\t\t{{ t('contacts', 'Use a unique password for all shares to this team') }}\n\t\t\t\t</CheckboxRadioSwitch>\n\n\t\t\t\t<li class=\"unique-password\">\n\t\t\t\t\t<template v-if=\"showUniquePasswordInput\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tv-model=\"uniquePassword\"\n\t\t\t\t\t\t\t:disabled=\"loading.length > 0\"\n\t\t\t\t\t\t\t:placeholder=\"t('contacts', 'Unique password …')\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t@keyup.enter=\"saveUniquePassword\">\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t\t\t\t\t:disabled=\"loading.length > 0 || uniquePassword.length === 0\"\n\t\t\t\t\t\t\t@click=\"saveUniquePassword\">\n\t\t\t\t\t\t\t{{ t('contacts', 'Save') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-else-if=\"useUniquePassword\"\n\t\t\t\t\t\tclass=\"change-unique-password\"\n\t\t\t\t\t\t@click=\"onClickChangePassword\">\n\t\t\t\t\t\t{{ t('contacts', 'Change unique password') }}\n\t\t\t\t\t</NcButton>\n\n\t\t\t\t\t<div v-if=\"uniquePasswordError\" class=\"unique-password-error\">\n\t\t\t\t\t\t{{ t('contacts', 'Failed to save password. Please try again later.') }}\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</li>\n\t</ul>\n</template>\n\n<script>\nimport {\n\tNcCheckboxRadioSwitch as CheckboxRadioSwitch,\n\tNcButton,\n} from '@nextcloud/vue'\n\n// Circle setting keys\nconst ENFORCE_PASSWORD_PROTECTION = 'enforce_password'\nconst USE_UNIQUE_PASSWORD = 'password_single_enabled'\nconst UNIQUE_PASSWORD = 'password_single'\n\nexport default {\n\tname: 'CirclePasswordSettings',\n\tcomponents: {\n\t\tCheckboxRadioSwitch,\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\tcircle: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tENFORCE_PASSWORD_PROTECTION,\n\t\t\tUSE_UNIQUE_PASSWORD,\n\t\t\tUNIQUE_PASSWORD,\n\n\t\t\tloading: [],\n\n\t\t\tuniquePassword: '',\n\t\t\tuniquePasswordError: false,\n\t\t\tshowUniquePasswordInput: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * @return {string}\n\t\t */\n\t\tcircleId() {\n\t\t\treturn this.circle._data.id\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\tenforcePasswordProtection() {\n\t\t\tconst value = this.circle._data.settings[ENFORCE_PASSWORD_PROTECTION]\n\t\t\treturn value === '1' || value === 'true'\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\tuseUniquePassword() {\n\t\t\tconst value = this.circle._data.settings[USE_UNIQUE_PASSWORD]\n\t\t\treturn value === '1' || value === 'true'\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Change handler for enforcePasswordProtection checkbox.\n\t\t */\n\t\tasync changePasswordProtection() {\n\t\t\tthis.loading.push(ENFORCE_PASSWORD_PROTECTION)\n\t\t\ttry {\n\t\t\t\tconst newValue = !this.enforcePasswordProtection\n\n\t\t\t\t// Also disable unique password setting\n\t\t\t\tif (!newValue && this.useUniquePassword) {\n\t\t\t\t\tawait this.saveUseUniquePassword(false)\n\t\t\t\t}\n\n\t\t\t\t// Also hide password input\n\t\t\t\tif (!newValue && this.showUniquePasswordInput) {\n\t\t\t\t\tthis.showUniquePasswordInput = false\n\t\t\t\t}\n\n\t\t\t\tawait this.$store.dispatch('editCircleSetting', {\n\t\t\t\t\tcircleId: this.circleId,\n\t\t\t\t\tsetting: {\n\t\t\t\t\t\tsetting: ENFORCE_PASSWORD_PROTECTION,\n\t\t\t\t\t\tvalue: newValue.toString(),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} finally {\n\t\t\t\tthis.loading = this.loading.filter((item) => item !== ENFORCE_PASSWORD_PROTECTION)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Change handler for useUniquePassword checkbox.\n\t\t */\n\t\tasync changeUseUniquePassword() {\n\t\t\t// Only update backend if the user disables the setting.\n\t\t\t// It will be enabled once a unique password has been set.\n\t\t\tif (!this.useUniquePassword) {\n\t\t\t\tthis.showUniquePasswordInput = !this.showUniquePasswordInput\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait this.saveUseUniquePassword(!this.useUniquePassword)\n\t\t},\n\n\t\t/**\n\t\t * Update backend with given value for useUniquePassword.\n\t\t *\n\t\t * @param {boolean} value New value\n\t\t */\n\t\tasync saveUseUniquePassword(value) {\n\t\t\tthis.loading.push(USE_UNIQUE_PASSWORD)\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('editCircleSetting', {\n\t\t\t\t\tcircleId: this.circleId,\n\t\t\t\t\tsetting: {\n\t\t\t\t\t\tsetting: USE_UNIQUE_PASSWORD,\n\t\t\t\t\t\tvalue: value.toString(),\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\t// Reset unique password input state if disabled\n\t\t\t\tif (!value) {\n\t\t\t\t\tthis.uniquePassword = ''\n\t\t\t\t\tthis.showUniquePasswordInput = false\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loading = this.loading.filter((item) => item !== USE_UNIQUE_PASSWORD)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Persist uniquePassword to backend.\n\t\t */\n\t\tasync saveUniquePassword() {\n\t\t\tif (this.uniquePassword.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loading.push(UNIQUE_PASSWORD)\n\t\t\tthis.uniquePasswordError = false\n\t\t\ttry {\n\t\t\t\tif (!this.useUniquePassword) {\n\t\t\t\t\tawait this.saveUseUniquePassword(true)\n\t\t\t\t}\n\n\t\t\t\tawait this.$store.dispatch('editCircleSetting', {\n\t\t\t\t\tcircleId: this.circleId,\n\t\t\t\t\tsetting: {\n\t\t\t\t\t\tsetting: UNIQUE_PASSWORD,\n\t\t\t\t\t\tvalue: this.uniquePassword,\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\t// Show change NcButton after saving the password\n\t\t\t\tthis.showUniquePasswordInput = false\n\t\t\t\tthis.uniquePassword = ''\n\t\t\t} catch {\n\t\t\t\tthis.uniquePasswordError = true\n\t\t\t} finally {\n\t\t\t\tthis.loading = this.loading.filter((item) => item !== UNIQUE_PASSWORD)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Click handler for the NcButton to show the uniquePassword input.\n\t\t */\n\t\tonClickChangePassword() {\n\t\t\tthis.showUniquePasswordInput = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nul {\n\tmargin-top: -12px; // Merge with privacy settings list\n}\n\n.unique-password {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: wrap;\n\twidth: 100%;\n\n\tinput {\n\t\tflex: 1 auto;\n\t\tmax-width: 200px;\n\t}\n\n\t.change-unique-password {\n\t\tmargin-top: 5px;\n\t}\n\n\t// Force wrap error into a new line\n\t.unique-password-error {\n\t\tflex: 1 100%;\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<h3 class=\"app-content-heading\">\n\t\t<slot />\n\t\t<div v-if=\"loading\" class=\"app-content-heading__loader icon-loading-small\" />\n\t</h3>\n</template>\n\n<script>\nexport default {\n\tname: 'ContentHeading',\n\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-content-heading {\n\tfont-weight: bold;\n\tdisplay: flex;\n\tline-height: 0;\n\tfont-size: 1.2rem;\n\tmargin-bottom: 16px;\n\n\t&__loader {\n\t\tmargin-inline-start: 8px;\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"circle-settings\">\n\t\t<ul>\n\t\t\t<li v-for=\"(configs, title) in PUBLIC_CIRCLE_CONFIG\" :key=\"title\" class=\"circle-config\">\n\t\t\t\t<ContentHeading class=\"circle-config__title\">\n\t\t\t\t\t{{ title }}\n\t\t\t\t</ContentHeading>\n\n\t\t\t\t<ul class=\"circle-config__list\">\n\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\tv-for=\"(label, config) in configs\"\n\t\t\t\t\t\t:key=\"'circle-config' + config\"\n\t\t\t\t\t\t:model-value=\"isChecked(config)\"\n\t\t\t\t\t\t:loading=\"loading === config\"\n\t\t\t\t\t\t:disabled=\"loading !== false\"\n\t\t\t\t\t\twrapper-element=\"li\"\n\t\t\t\t\t\t@update:model-value=\"onChange(config, $event)\">\n\t\t\t\t\t\t{{ label }}\n\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<CirclePasswordSettings :circle=\"circle\" />\n\n\t\t<!-- leave circle -->\n\t\t<NcButton\n\t\t\tv-if=\"circle.canLeave\"\n\t\t\tvariant=\"warning\"\n\t\t\t@click=\"$emit('leave')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconLogout :size=\"16\" />\n\t\t\t</template>\n\t\t\t{{ t('contacts', 'Leave team') }}\n\t\t</NcButton>\n\n\t\t<!-- delete circle -->\n\t\t<NcButton\n\t\t\tv-if=\"circle.canDelete\"\n\t\t\tvariant=\"error\"\n\t\t\thref=\"#\"\n\t\t\t@click.prevent.stop=\"$emit('delete')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t</template>\n\t\t\t{{ t('contacts', 'Delete team') }}\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { showError } from '@nextcloud/dialogs'\nimport { t } from '@nextcloud/l10n'\nimport { defineComponent } from 'vue'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport IconLogout from 'vue-material-design-icons/Logout.vue'\nimport IconDelete from 'vue-material-design-icons/TrashCanOutline.vue'\nimport CirclePasswordSettings from './CirclePasswordSettings.vue'\nimport ContentHeading from './ContentHeading.vue'\nimport { PUBLIC_CIRCLE_CONFIG } from '../../models/constants.ts'\nimport { CircleEdit, editCircle } from '../../services/circles.ts'\n\nexport default defineComponent({\n\tname: 'CircleSettings',\n\tcomponents: {\n\t\tContentHeading,\n\t\tCirclePasswordSettings,\n\t\tIconDelete,\n\t\tIconLogout,\n\t\tNcButton,\n\t\tNcCheckboxRadioSwitch,\n\t},\n\n\tprops: {\n\t\tcircle: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\temits: ['leave', 'delete'],\n\tsetup() {\n\t\treturn { t }\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tPUBLIC_CIRCLE_CONFIG,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\tisChecked(config) {\n\t\t\treturn (this.circle.config & config) !== 0\n\t\t},\n\n\t\t/**\n\t\t * On toggle, add or remove the config bitwise\n\t\t *\n\t\t * @param config - The circle config to manage\n\t\t * @param checked - Checked or not\n\t\t */\n\t\tasync onChange(config: number, checked: boolean) {\n\t\t\tthis.logger.debug(`Circle config ${config} is set to ${checked}`)\n\n\t\t\tthis.loading = config\n\t\t\tconst prevConfig = this.circle.config\n\t\t\tif (checked) {\n\t\t\t\tconfig = prevConfig | config\n\t\t\t} else {\n\t\t\t\tconfig = prevConfig & ~config\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst circleData = await editCircle(this.circle.id, CircleEdit.Config, config)\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\tthis.circle.config = circleData.config\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Unable to edit circle config', { prevConfig, config, error })\n\t\t\t\tshowError(t('contacts', 'An error happened during the config change'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.circle-settings {\n\tpadding: 16px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 16px;\n\tmax-width: 320px;\n}\n\n.circle-config {\n\t&__title {\n\t\tuser-select: none;\n\t\tmargin-top: 22px;\n\t}\n}\n</style>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon close-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CloseIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcPopover\n\t\t:shown=\"isPopoverOpen\"\n\t\tpopup-role=\"dialog\"\n\t\t@update:shown=\"handlePopoverToggle\">\n\t\t<template #trigger>\n\t\t\t<NcButton\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:aria-describedby=\"`tooltip-${resourceType.id}`\"\n\t\t\t\t@click=\"openPopover\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<slot name=\"icon\" />\n\t\t\t\t</template>\n\t\t\t\t{{ resourceType.label }}\n\t\t\t</NcButton>\n\t\t</template>\n\t\t<div v-if=\"!resourceType.noInput\" class=\"resource-creation-popover\">\n\t\t\t<div class=\"popover-content\">\n\t\t\t\t<NcTextField\n\t\t\t\t\t:model-value=\"inputValue\"\n\t\t\t\t\t:placeholder=\"resourceType.placeholder\"\n\t\t\t\t\t:label=\"resourceType.inputLabel\"\n\t\t\t\t\t@update:value=\"updateInput\"\n\t\t\t\t\t@input=\"updateInput\" />\n\t\t\t\t<div class=\"popover-actions\">\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t:aria-label=\"t('contacts', 'Close')\"\n\t\t\t\t\t\t@click=\"closePopover\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<CloseOutlineIcon :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t:aria-label=\"t('contacts', 'Save')\"\n\t\t\t\t\t\t:disabled=\"!canCreate\"\n\t\t\t\t\t\t@click=\"createResource\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<CheckOutlineIcon :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if=\"resourceType.helperText\" class=\"popover-helper-text\">\n\t\t\t\t<NcNoteCard type=\"info\">\n\t\t\t\t\t{{ resourceType.helperText }}\n\t\t\t\t</NcNoteCard>\n\t\t\t</div>\n\t\t</div>\n\t</NcPopover>\n</template>\n\n<script>\nimport { NcButton, NcNoteCard, NcPopover, NcTextField } from '@nextcloud/vue'\nimport CheckOutlineIcon from 'vue-material-design-icons/Check.vue'\nimport CloseOutlineIcon from 'vue-material-design-icons/Close.vue'\n\nexport default {\n\tname: 'TeamResourceButton',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcNoteCard,\n\t\tNcPopover,\n\t\tNcTextField,\n\t\tCloseOutlineIcon,\n\t\tCheckOutlineIcon,\n\t},\n\n\tprops: {\n\t\tresourceType: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\tisOpen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\temits: ['update:value', 'update:isOpen', 'create'],\n\n\tcomputed: {\n\t\tinputValue() {\n\t\t\treturn this.value\n\t\t},\n\n\t\tisPopoverOpen: {\n\t\t\tget() {\n\t\t\t\treturn this.isOpen\n\t\t\t},\n\n\t\t\tset(value) {\n\t\t\t\tthis.$emit('update:isOpen', value)\n\t\t\t},\n\t\t},\n\n\t\tcanCreate() {\n\t\t\tif (this.resourceType.noInput) {\n\t\t\t\treturn this.resourceType.enabled !== false\n\t\t\t}\n\t\t\tconst value = this.inputValue\n\t\t\tconst hasValue = typeof value === 'string' && value.trim().length > 0\n\t\t\treturn hasValue && this.resourceType.enabled !== false\n\t\t},\n\t},\n\n\tmethods: {\n\t\topenPopover() {\n\t\t\tif (this.resourceType.noInput) {\n\t\t\t\tthis.createResource()\n\t\t\t} else {\n\t\t\t\tthis.isPopoverOpen = true\n\t\t\t}\n\t\t},\n\n\t\tclosePopover() {\n\t\t\tthis.isPopoverOpen = false\n\t\t},\n\n\t\thandlePopoverToggle(shown) {\n\t\t\tthis.isPopoverOpen = shown\n\t\t},\n\n\t\tupdateInput(value) {\n\t\t\tconst actualValue = typeof value === 'string' ? value : value?.target?.value || value?.value || ''\n\t\t\tthis.$emit('update:value', actualValue)\n\t\t},\n\n\t\tcreateResource() {\n\t\t\tif (this.canCreate) {\n\t\t\t\tif (this.resourceType.noInput) {\n\t\t\t\t\tthis.$emit('create', {\n\t\t\t\t\t\tresourceType: this.resourceType,\n\t\t\t\t\t\tname: '',\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tconst value = this.inputValue\n\t\t\t\t\tconst name = typeof value === 'string' ? value.trim() : ''\n\t\t\t\t\tif (name) {\n\t\t\t\t\t\tthis.$emit('create', {\n\t\t\t\t\t\t\tresourceType: this.resourceType,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.resource-creation-popover {\n\tpadding: calc(var(--default-grid-baseline) * 4);\n\tmin-width: 320px;\n\n\t.popover-content {\n\t\tdisplay: flex;\n\t\talign-items: flex-end;\n\t\tgap: calc(var(--default-grid-baseline) * 2);\n\n\t\t:deep(.input-field__main-wrapper) {\n\t\t\tflex: 1;\n\t\t}\n\n\t\t.popover-actions {\n\t\t\tdisplay: flex;\n\t\t\tgap: var(--default-grid-baseline);\n\t\t\talign-items: center;\n\t\t}\n\t}\n\n\t.popover-helper-text {\n\t\tmargin-top: calc(var(--default-grid-baseline) * 4);\n\t\tmargin-bottom: 0;\n\t\twidth: 0;\n\t\tmin-width: 100%;\n\n\t\t:deep(.notecard) {\n\t\t\ttext-align: start;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n}\n</style>\n","import{defineComponent as e,ref as t,computed as r,watch as o,createVNode as n,mergeProps as s,isVNode as i,onMounted as l,onUnmounted as c}from\"vue\";const a=null,{min:u,max:f,abs:d,floor:p}=Math,h=(e,t,r)=>u(r,f(t,e)),m=e=>[...e].sort(((e,t)=>e-t)),_=\"function\"==typeof queueMicrotask?queueMicrotask:e=>{Promise.resolve().then(e)},b=()=>{let e;return[new Promise((t=>{e=t})),e]},v=e=>{let t;return()=>(e&&(t=e(),e=void 0),t)},g=(e,t,r)=>{const o=r?\"unshift\":\"push\";for(let r=0;r<t;r++)e[o](-1);return e},y=(e,t)=>{const r=e.t[t];return-1===r?e.o:r},S=(e,t,r)=>{const o=-1===e.t[t];return e.t[t]=r,e.i=u(t,e.i),o},z=(e,t)=>{if(!e.l)return 0;if(e.i>=t)return e.u[t];e.i<0&&(e.u[0]=0,e.i=0);let r=e.i,o=e.u[r];for(;r<t;)o+=y(e,r),e.u[++r]=o;return e.i=t,o},x=(e,t,r=0,o=e.l-1)=>{let n=r;for(;r<=o;){const s=p((r+o)/2);z(e,s)<=t?(n=s,r=s+1):o=s-1}return h(n,0,e.l-1)},$=(e,t,r)=>{const o=t-e.l;return e.i=r?-1:u(t-1,e.i),e.l=t,o>0?(g(e.u,o),g(e.t,o,r),e.o*o):(e.u.splice(o),(r?e.t.splice(0,-o):e.t.splice(o)).reduce(((t,r)=>t-(-1===r?e.o:r)),0))},w=e=>e.documentElement,I=e=>e.ownerDocument,O=e=>e.defaultView,k=/*#__PURE__*/v((()=>!!/iP(hone|od|ad)/.test(navigator.userAgent)||\"MacIntel\"===navigator.platform&&navigator.maxTouchPoints>0)),j=/*#__PURE__*/v((()=>\"scrollBehavior\"in w(document).style)),N=(e,t=40,r=0,o,n=!1)=>{let s=!!r,i=1,l=0,c=0,p=0,h=0,_=0,b=0,v=0,w=0,I=a,O=[0,s?f(r-1,0):-1],j=0,N=!1;const B=((e,t,r)=>({o:t,t:r?g(r.slice(0,u(e,r.length)),f(0,e-r.length)):g([],e),l:e,i:-1,u:g([],e+1)}))(e,o?o[1]:t,o&&o[0]),T=new Set,q=()=>p-c,M=()=>q()+_+h,E=(e,t)=>((e,t,r,o)=>{if(o=u(o,e.l-1),z(e,o)<=t){const n=x(e,r,o);return[x(e,t,o,n),n]}{const n=x(e,t,void 0,o);return[n,x(e,r,n)]}})(B,e,t,O[0]),P=()=>z(B,B.l),R=(e,t)=>{const r=z(B,e)-_;return t?P()-r-A(e):r},A=e=>y(B,e),C=(e,t=-1)=>B.t[e]===t,H=e=>{e&&(k()&&0!==v||I&&1===w?_+=e:h+=e)};return{p:()=>{T.clear()},h:()=>i,m:()=>(e=>[e.t.slice(),e.o])(B),v:(e=200)=>{if(!N||s)return O;let t,r;if(b)[t,r]=O;else{let o=f(0,M()),s=o+l;n||(e=f(0,e),1!==v&&(o-=e),2!==v&&(s+=e)),[t,r]=O=E(f(0,o),f(0,s)),I&&(t=u(t,I[0]),r=f(r,I[1]))}return[f(t,0),u(r,B.l-1)]},S:e=>x(B,e-c),I:C,O:R,k:A,j:()=>B.l,N:()=>p,B:()=>0!==v,T:()=>l,q:()=>c,M:P,P:()=>(b=h,h=0,[b,2===w]),R:(e,t)=>{const r=[e,t];return T.add(r),()=>{T.delete(r)}},A:(e,t)=>{let r,o,u=0;switch(e){case 1:{if(t===p&&0===w)break;const e=b;b=0;const r=t-p,n=d(r);e&&n<d(e)+1||0!==w||(v=r<0?2:1),s&&(s=!1),p=t,u=4;const i=q();i>=-l&&i<=P()&&(u+=1,o=n>l);break}case 2:u=8,0!==v&&(r=!0,u+=1),v=0,w=0,I=a;break;case 3:{const e=t.filter((([e,t])=>!C(e,t)));if(!e.length)break;H(e.reduce(((e,[t,r])=>((2===w||(I&&1===w?t<I[0]:R(t+(0===v&&0===w?1:0))<q()))&&(e+=r-A(t)),e)),0));for(const[t,r]of e){const e=A(t),o=S(B,t,r);n&&(j+=o?r:r-e)}n&&l&&j>l&&(H(((e,t)=>{let r=0;const o=[];e.t.forEach(((e,n)=>{-1!==e&&(o.push(e),n<t&&r++)})),e.i=-1;const n=m(o),s=n.length,i=s/2|0,l=s%2==0?(n[i-1]+n[i])/2:n[i],c=e.o;return((e.o=l)-c)*f(t-r,0)})(B,x(B,M()))),n=!1),u=3,o=!0;break}case 4:l!==t&&(l||(N=o=!0),l=t,u=3);break;case 5:t[1]?(H($(B,t[0],!0)),w=2,u=1):($(B,t[0]),u=1);break;case 6:c=t;break;case 7:w=1;break;case 8:I=E(t,t+l),u=1}u&&(i=1+(2147483647&i),r&&_&&(h+=_,_=0),T.forEach((([e,t])=>{u&e&&t(o)})))}}},B=setTimeout,T=(e,t)=>t?-e:e,q=(e,t,r,o,n,s)=>{const i=Date.now;let l=0,c=!1,u=!1,f=!1,d=!1;const p=(()=>{let t;const r=()=>{t!=a&&clearTimeout(t)},o=()=>{r(),t=B((()=>{t=a,(()=>{if(c||u)return c=!1,void p();f=!1,e.A(2)})()}),150)};return o.C=r,o})(),h=()=>{l=i(),f&&(d=!0),s&&e.A(6,s()),e.A(1,o()),p()},m=t=>{if(c||!e.B()||t.ctrlKey)return;const o=i()-l;150>o&&50<o&&(r?t.deltaX:t.deltaY)&&(c=!0)},_=()=>{u=!0,f=d=!1},b=()=>{u=!1,k()&&(f=!0)};return t.addEventListener(\"scroll\",h),t.addEventListener(\"wheel\",m,{passive:!0}),t.addEventListener(\"touchstart\",_,{passive:!0}),t.addEventListener(\"touchend\",b,{passive:!0}),{H:()=>{t.removeEventListener(\"scroll\",h),t.removeEventListener(\"wheel\",m),t.removeEventListener(\"touchstart\",_),t.removeEventListener(\"touchend\",b),p.C()},V:()=>{const[t,r]=e.P();t&&(n(t,r,d),d=!1,r&&e.T()>e.M()&&e.A(1,o()))}}},M=(e,t,r)=>{let o;return[async(n,s)=>{if(!await t())return;o&&o();const i=()=>{const[t,r]=b();return o=()=>{r(!1)},e.T()&&B(o,150),[t,e.R(2,(()=>{r(!0)}))]};if(s&&j())e.A(8,n()),_((async()=>{for(;;){let t=!0;for(let[r,o]=e.v();r<=o;r++)if(e.I(r)){t=!1;break}if(t)break;const[r,o]=i();try{if(!await r)return}finally{o()}}e.A(7),r(n(),s)}));else for(;;){const[t,o]=i();try{if(e.A(7),r(n()),!await t)return}finally{o()}}},()=>{o&&o()}]},E=e=>{let t;return{F(r){(t||(t=new(O(I(r)).ResizeObserver)(e))).observe(r)},J(e){t.unobserve(e)},H(){t&&t.disconnect()}}},P=/*#__PURE__*/e({props:{L:{type:Object,required:!0},W:{type:Object,required:!0},X:{type:Object,required:!0},Y:{type:Function,required:!0},D:{type:Number,required:!0},U:{type:Boolean},G:{type:Boolean},K:{type:Boolean},Z:{type:String,required:!0},ee:Object},setup(e){const l=t(),c=r((()=>e.L.value&&e.W.O(e.D,e.K))),a=r((()=>e.L.value&&e.W.I(e.D)));return o((()=>l.value&&e.D),((t,r,o)=>{o(e.Y(l.value,e.D))}),{flush:\"post\"}),()=>{var t;const{X:r,U:o,G:u,Z:f}=e,d=a.value,{style:p,...h}=null!==(t=e.ee)&&void 0!==t?t:{},m={contain:\"layout style\",position:d&&u?void 0:\"absolute\",[o?\"height\":\"width\"]:\"100%\",[o?\"top\":\"left\"]:\"0px\",[o?\"left\":\"top\"]:c.value+\"px\",visibility:!d||u?void 0:\"hidden\",...p};return o&&(m.display=\"inline-flex\"),n(f,s({ref:l,style:m},h),\"function\"==typeof(_=r)||\"[object Object]\"===Object.prototype.toString.call(_)&&!i(_)?r:{default:()=>[r],_:2},16,[\"style\"]);var _}}}),R=(e,t)=>{const r=e.key;return null!=r?r:\"_\"+t},A=(e,t)=>e[0]===t[0]&&e[1]===t[1],C=/*#__PURE__*/e({props:{data:{type:Array,required:!0},bufferSize:Number,itemSize:Number,shift:Boolean,horizontal:Boolean,startMargin:{type:Number,default:0},ssrCount:Number,scrollRef:Object,as:{type:String,default:\"div\"},item:{type:String,default:\"div\"},itemProps:Function,keepMounted:Array,cache:Object},emits:[\"scroll\",\"scrollEnd\"],setup(e,{emit:s,expose:u,slots:d}){let p=!!e.ssrCount;const _=e.horizontal,v=t(),g=N(e.data.length,e.itemSize,e.ssrCount,e.cache,!e.itemSize),y=((e,t)=>{let r;const o=t?\"width\":\"height\",n=new WeakMap,s=E((t=>{const s=[];for(const{target:i,contentRect:l}of t)if(i.offsetParent)if(i===r)e.A(4,l[o]);else{const e=n.get(i);e!=a&&s.push([e,l[o]])}s.length&&e.A(3,s)}));return{te(e){s.F(r=e)},re:(e,t)=>(n.set(e,t),s.F(e),()=>{n.delete(e),s.J(e)}),p:s.H}})(g,_),S=((e,t)=>{let r,o,n=b(),s=!1;const i=t?\"scrollLeft\":\"scrollTop\",l=t?\"overflowX\":\"overflowY\",[c,a]=M(e,(()=>n[0]),((e,o)=>{e=T(e,s),o?r.scrollTo({[t?\"left\":\"top\"]:e,behavior:\"smooth\"}):r[i]=e}));return{oe(c){r=c,t&&(s=\"rtl\"===getComputedStyle(c).direction),o=q(e,c,t,(()=>T(c[i],s)),((t,r,o)=>{if(o){const e=c.style,t=e[l];e[l]=\"hidden\",B((()=>{e[l]=t}))}c[i]=T(e.N()+t,s),r&&a()})),n[1](!0)},p(){o&&o.H(),n[1](!1),n=b()},ne:()=>s,se(e){c((()=>e))},ie(t){t+=e.N(),c((()=>t))},le(t,{align:r,smooth:o,offset:n=0}={}){if(t=h(t,0,e.j()-1),\"nearest\"===r){const o=e.O(t),n=e.N();if(o<n)r=\"start\";else{if(!(o+e.k(t)>n+e.T()))return;r=\"end\"}}c((()=>n+e.q()+e.O(t)+(\"end\"===r?e.k(t)-e.T():\"center\"===r?(e.k(t)-e.T())/2:0)),o)},ce:()=>{o&&o.V()}}})(g,_),z=t(g.h());g.R(1,(()=>{z.value=g.h()})),g.R(4,(()=>{s(\"scroll\",g.N())})),g.R(8,(()=>{s(\"scrollEnd\")}));const x=r((t=>{z.value;const r=g.v(e.bufferSize);return t&&A(t,r)?t:r})),$=r((()=>z.value&&g.B())),w=r((()=>z.value&&g.M()));return l((()=>{p=!1;const t=requestAnimationFrame((()=>{const t=e=>{y.te(e),S.oe(e)};e.scrollRef?t(e.scrollRef):t(v.value.parentElement)}));c((()=>{cancelAnimationFrame(t)}))})),c((()=>{g.p(),y.p(),S.p()})),o((()=>e.data.length),(t=>{g.A(5,[t,e.shift])})),o((()=>e.startMargin),(e=>{g.A(6,e)}),{immediate:!0}),o([z],(()=>{S.ce()}),{flush:\"post\"}),u({get cache(){return g.m()},get scrollOffset(){return g.N()},get scrollSize(){return(e=>f(e.M(),e.T()))(g)},get viewportSize(){return g.T()},findItemIndex:g.S,getItemOffset:g.O,getItemSize:g.k,scrollToIndex:S.le,scrollTo:S.se,scrollBy:S.ie}),()=>{const t=e.as,r=e.item,o=w.value,s=S.ne(),l=!_&&s?\"unshift\":\"push\",c=[],a=t=>{var o;const i=d.default({item:e.data[t],index:t})[0];return n(P,{key:R(i,t),L:z,W:g,Y:y.re,D:t,X:i,U:_,K:s,G:p,Z:r,ee:null===(o=e.itemProps)||void 0===o?void 0:o.call(e,{item:e.data[t],index:t})},null,8,[\"L\",\"W\",\"Y\",\"D\",\"X\",\"U\",\"K\",\"G\",\"Z\",\"ee\"])};if(e.keepMounted){const t=new Set(e.keepMounted);for(let[e,r]=x.value;e<=r;e++)t.add(e);m([...t]).forEach((e=>{c[l](a(e))}))}else for(let[e,t]=x.value;e<=t;e++)c[l](a(e));return n(t,{ref:v,style:{contain:\"size style\",overflowAnchor:\"none\",flex:\"none\",position:\"relative\",width:_?o+\"px\":\"100%\",height:_?\"100%\":o+\"px\",pointerEvents:$.value?\"none\":void 0}},\"function\"==typeof(u=c)||\"[object Object]\"===Object.prototype.toString.call(u)&&!i(u)?c:{default:()=>[c],_:2},8,[\"style\"]);var u}}}),H=/*#__PURE__*/e({props:{data:{type:Array,required:!0},bufferSize:Number,itemSize:Number,shift:Boolean,horizontal:Boolean,ssrCount:Number,itemProps:Function,keepMounted:Array,cache:Object},emits:[\"scroll\",\"scrollEnd\"],setup(e,{emit:r,expose:o,slots:s}){const l=e.horizontal,c=e=>{r(\"scroll\",e)},a=()=>{r(\"scrollEnd\")},u=t();return o({get cache(){return u.value.cache},get scrollOffset(){return u.value.scrollOffset},get scrollSize(){return u.value.scrollSize},get viewportSize(){return u.value.viewportSize},findItemIndex:(...e)=>u.value.findItemIndex(...e),getItemOffset:(...e)=>u.value.getItemOffset(...e),getItemSize:(...e)=>u.value.getItemSize(...e),scrollToIndex:(...e)=>u.value.scrollToIndex(...e),scrollTo:(...e)=>u.value.scrollTo(...e),scrollBy:(...e)=>u.value.scrollBy(...e)}),()=>{return n(\"div\",{style:{display:l?\"inline-block\":\"block\",[l?\"overflowX\":\"overflowY\"]:\"auto\",contain:\"strict\",width:\"100%\",height:\"100%\"}},[n(C,{ref:u,data:e.data,bufferSize:e.bufferSize,itemSize:e.itemSize,itemProps:e.itemProps,shift:e.shift,ssrCount:e.ssrCount,horizontal:l,keepMounted:e.keepMounted,cache:e.cache,onScroll:c,onScrollEnd:a},(t=s,\"function\"==typeof t||\"[object Object]\"===Object.prototype.toString.call(t)&&!i(t)?s:{default:()=>[s],_:2}),8,[\"data\",\"bufferSize\",\"itemSize\",\"itemProps\",\"shift\",\"ssrCount\",\"horizontal\",\"keepMounted\",\"cache\",\"onScroll\",\"onScrollEnd\"])],4);var t}}}),V=/*#__PURE__*/e({props:{data:{type:Array,required:!0},bufferSize:Number,itemSize:Number,shift:Boolean,horizontal:Boolean,as:{type:String,default:\"div\"},item:{type:String,default:\"div\"},cache:Object},emits:[\"scroll\",\"scrollEnd\"],setup(e,{emit:s,slots:u,expose:f}){const d=e.horizontal,p=t(),m=N(e.data.length,e.itemSize,void 0,e.cache,!e.itemSize),v=((e,t)=>{const r=t?\"width\":\"height\",o=t?\"innerWidth\":\"innerHeight\",n=new WeakMap,s=E((t=>{const o=[];for(const{target:e,contentRect:s}of t){if(!e.offsetParent)continue;const t=n.get(e);t!=a&&o.push([t,s[r]])}o.length&&e.A(3,o)}));let i;return{te(t){const r=O(I(t)),n=()=>{e.A(4,r[o])};r.addEventListener(\"resize\",n),_(n),i=()=>{r.removeEventListener(\"resize\",n)}},re:(e,t)=>(n.set(e,t),s.F(e),()=>{n.delete(e),s.J(e)}),p(){i&&i(),s.H()}}})(m,d),g=((e,t)=>{let r,o,n=b(),s=!1;const i=t?\"left\":\"top\",[l]=M(e,(()=>n[0]),((e,t)=>{e=T(e,s);const o=O(I(r));t?o.scroll({[i]:e,behavior:\"smooth\"}):o.scroll({[i]:e})})),c=(e,t,r,o,n=0)=>{const i=o?\"offsetLeft\":\"offsetTop\",l=n+(o&&s?r.innerWidth-e[i]-e.offsetWidth:e[i]),a=e.offsetParent;return e!==t&&a?c(a,t,r,o,l):l};return{oe(l){r=l;const a=t?\"scrollX\":\"scrollY\",u=I(l),f=O(u);t&&(s=\"rtl\"===getComputedStyle(w(u)).direction),o=q(e,f,t,(()=>T(f[a],s)),((t,r)=>{r?f.scroll({[i]:T(e.N()+t,s)}):f.scrollBy({[i]:T(t,s)})}),(()=>c(l,u.body,f,t))),n[1](!0)},p(){o&&o.H(),r=void 0,n[1](!1),n=b()},ne:()=>s,ce:()=>{o&&o.V()},le(o,{align:n,smooth:s,offset:i=0}={}){if(!r)return;if(o=h(o,0,e.j()-1),\"nearest\"===n){const t=e.O(o),r=e.N();if(t<r)n=\"start\";else{if(!(t+e.k(o)>r+e.T()))return;n=\"end\"}}const a=I(r),u=O(a),f=w(a),d=()=>e.T()-(t?f.clientWidth:f.clientHeight);l((()=>i+c(r,a.body,u,t)+e.O(o)+(\"end\"===n?e.k(o)-(e.T()-d()):\"center\"===n?(e.k(o)-(e.T()-d()))/2:0)),s)}}})(m,d),y=t(m.h());m.R(1,(()=>{y.value=m.h()})),m.R(4,(()=>{s(\"scroll\")})),m.R(8,(()=>{s(\"scrollEnd\")}));const S=r((t=>{y.value;const r=m.v(e.bufferSize);return t&&A(t,r)?t:r})),z=r((()=>y.value&&m.B())),x=r((()=>y.value&&m.M()));return l((()=>{const e=p.value;e&&(v.te(e),g.oe(e))})),c((()=>{m.p(),v.p(),g.p()})),o((()=>e.data.length),(t=>{m.A(5,[t,e.shift])})),o([y],(()=>{g.ce()}),{flush:\"post\"}),f({get cache(){return m.m()},get scrollOffset(){return m.N()},get viewportSize(){return m.T()},findItemIndex:m.S,getItemOffset:m.O,getItemSize:m.k,scrollToIndex:g.le}),()=>{const t=e.as,r=e.item,o=x.value,s=g.ne(),l=!d&&s?\"unshift\":\"push\",c=[];for(let[t,o]=S.value;t<=o;t++){const o=u.default({item:e.data[t],index:t})[0];c[l](n(P,{key:R(o,t),L:y,W:m,Y:v.re,D:t,X:o,U:d,K:s,Z:r},null,8,[\"L\",\"W\",\"Y\",\"D\",\"X\",\"U\",\"K\",\"Z\"]))}return n(t,{ref:p,style:{contain:\"size style\",overflowAnchor:\"none\",flex:\"none\",position:\"relative\",width:d?o+\"px\":\"100%\",height:d?\"100%\":o+\"px\",pointerEvents:z.value?\"none\":void 0}},\"function\"==typeof(a=c)||\"[object Object]\"===Object.prototype.toString.call(a)&&!i(a)?c:{default:()=>[c],_:2},8,[\"style\"]);var a}}});export{H as VList,C as Virtualizer,V as WindowVirtualizer};\n//# sourceMappingURL=index.js.map\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon magnify-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"MagnifyIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<UserBubble\n\t\tclass=\"entity-picker__bubble\"\n\t\t:margin=\"0\"\n\t\t:size=\"22\"\n\t\t:display-name=\"label\">\n\t\t<template #name>\n\t\t\t<a\n\t\t\t\thref=\"#\"\n\t\t\t\t:title=\"t('contacts', 'Remove {type}', { type })\"\n\t\t\t\tclass=\"entity-picker__bubble-delete icon-close\"\n\t\t\t\t@click=\"onDelete\" />\n\t\t</template>\n\t</UserBubble>\n</template>\n\n<script>\nimport { NcUserBubble as UserBubble } from '@nextcloud/vue'\n\nexport default {\n\tname: 'EntityBubble',\n\n\tcomponents: {\n\t\tUserBubble,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Unique id of the entity\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Label of the entity\n\t\t */\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Type of the entity. e.g user, circle, group...\n\t\t */\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonDelete() {\n\t\t\t// Emit delete. Be aware it might be unique\n\t\t\t// amongst their types, but not unique amongst\n\t\t\t// the whole selection all. Make sure to\n\t\t\t// properly compare all necessary data.\n\t\t\tthis.$emit('delete', {\n\t\t\t\tid: this.id,\n\t\t\t\ttype: this.type,\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// better visual with light default tint\n:deep(.user-bubble__content) {\n\tbackground-color: var(--color-pirimary-light);\n}\n\n.entity-picker__bubble {\n\tdisplay: flex;\n\n\t&-delete {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t\t// squeeze in the border radius\n\t\tmargin-inline-end: -4px;\n\t\topacity: .7;\n\n\t\t&:hover,\n\t\t&:active,\n\t\t&:focus {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<h4 v-if=\"source.heading\" :key=\"source.id\" class=\"entity-picker__option-caption\">\n\t\t{{ t('contacts', 'Add {type}', { type: source.label.toLowerCase() }) }}\n\t</h4>\n\n\t<UserBubble\n\t\tv-else\n\t\tclass=\"entity-picker__bubble\"\n\t\t:class=\"{ 'entity-picker__bubble--selected': isSelected }\"\n\t\t:display-name=\"source.label\"\n\t\t:user=\"source.user\"\n\t\t:margin=\"6\"\n\t\t:size=\"44\"\n\t\turl=\"#\"\n\t\t@click.stop.prevent=\"onClick(source)\">\n\t\t<template #title>\n\t\t\t<span class=\"entity-picker__bubble-checkmark icon-checkmark\" />\n\t\t</template>\n\t</UserBubble>\n</template>\n\n<script>\nimport { NcUserBubble as UserBubble } from '@nextcloud/vue'\n\nexport default {\n\tname: 'EntitySearchResult',\n\n\tcomponents: {\n\t\tUserBubble,\n\t},\n\n\tprops: {\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t},\n\t\t},\n\n\t\tonClick: {\n\t\t\ttype: Function,\n\t\t\tdefault() {},\n\t\t},\n\n\t\tselection: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tisSelected() {\n\t\t\treturn this.source.id in this.selection\n\t\t},\n\t},\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n@use 'sass:math';\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: math.div($clickable-area - $icon-size, 2);\n\n.entity-picker {\n\t&__option {\n\t\t&-caption {\n\t\t\tlist-style-type: none;\n\t\t\tuser-select: none;\n\t\t\twhite-space: nowrap;\n\t\t\ttext-overflow: ellipsis;\n\t\t\tpointer-events: none;\n\t\t\tbox-shadow: none !important;\n\t\t\tline-height: $clickable-area;\n\n\t\t\t&:not(:first-child) {\n\t\t\t\tmargin-top: math.div($clickable-area, 2);\n\t\t\t}\n\t\t}\n\t}\n\n\t&__bubble {\n\t\tdisplay: flex;\n\t\tmargin-bottom: 4px;\n\n\t\t&-checkmark {\n\t\t\tdisplay: block;\n\t\t\topacity: 0;\n\t\t}\n\n\t\t// Show checkmark on selected\n\t\t&--selected .entity-picker__bubble-checkmark {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t// Show primary bg on hovering entities\n\t\t&--selected,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\t:deep(.user-bubble__content) {\n\t\t\t\t// better visual with light default tint\n\t\t\t\tbackground-color: var(--color-primary-element-light);\n\t\t\t}\n\t\t}\n\t}\n}\n\n:deep(.user-bubble__content){\n\t// Take full width\n\twidth: 100%;\n\t// Override default styling\n\tbackground: none;\n\t.user-bubble__secondary {\n\t\t// Force show checkmark\n\t\tdisplay: inline-flex;\n\t\tmargin-inline: auto 4px;\n\t}\n\t&, * {\n\t\t// the whole row is clickable,let's force the proper cursor\n\t\tcursor: pointer;\n\t\tuser-select: none;\n\t\t-webkit-user-drag: none;\n\t\t-khtml-user-drag: none;\n\t\t-moz-user-drag: none;\n\t\t-o-user-drag: none;\n\t}\n}\n\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Modal\n\t\tsize=\"normal\"\n\t\t@close=\"onCancel\">\n\t\t<!-- Wrapper for content & navigation -->\n\t\t<div class=\"entity-picker\">\n\t\t\t<!-- Search -->\n\t\t\t<div class=\"entity-picker__heading\">\n\t\t\t\t<h3 class=\"entity-picker__title\">\n\t\t\t\t\t{{ titleLabel }}\n\t\t\t\t</h3>\n\t\t\t</div>\n\t\t\t<div class=\"entity-picker__search-container\">\n\t\t\t\t<div class=\"entity-picker__search\">\n\t\t\t\t\t<div class=\"entity-picker__search-icon icon-search\" />\n\t\t\t\t\t<input\n\t\t\t\t\t\tref=\"input\"\n\t\t\t\t\t\tv-model=\"searchQuery\"\n\t\t\t\t\t\t:placeholder=\"t('contacts', 'Search {types}', { types: searchPlaceholderTypes })\"\n\t\t\t\t\t\tclass=\"entity-picker__search-input\"\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\t@input=\"onSearch\">\n\t\t\t\t</div>\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"canInviteGuests\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t\t\t:title=\"t('contacts', 'Add guest')\"\n\t\t\t\t\t:aria-label=\"t('contacts', 'Add guest')\"\n\t\t\t\t\t@click=\"onGuestButtonClick\">\n\t\t\t\t\t<IconAccountPlusOutline :size=\"20\" />\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\n\t\t\t<!-- Loading -->\n\t\t\t<EmptyContent v-if=\"loading\" :name=\"t('contacts', 'Loading …')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconLoading :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</EmptyContent>\n\n\t\t\t<template v-else>\n\t\t\t\t<!-- Picked entities -->\n\t\t\t\t<transition-group\n\t\t\t\t\tv-if=\"Object.keys(selectionSet).length > 0\"\n\t\t\t\t\tname=\"zoom\"\n\t\t\t\t\ttag=\"ul\"\n\t\t\t\t\tclass=\"entity-picker__selection\">\n\t\t\t\t\t<EntityBubble\n\t\t\t\t\t\tv-for=\"entity in selectionSet\"\n\t\t\t\t\t\t:key=\"entity.key || `entity-${entity.type}-${entity.id}`\"\n\t\t\t\t\t\tv-bind=\"entity\"\n\t\t\t\t\t\t@delete=\"onDelete(entity)\" />\n\t\t\t\t</transition-group>\n\n\t\t\t\t<!-- No recommendations -->\n\t\t\t\t<EmptyContent\n\t\t\t\t\tv-if=\"dataSet.length === 0\"\n\t\t\t\t\t:name=\"t('contacts', 'Search for people to add')\"\n\t\t\t\t\t:description=\"emptyDataSetDescription\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconSearch :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</EmptyContent>\n\n\t\t\t\t<!-- Searched & picked entities -->\n\t\t\t\t<VList\n\t\t\t\t\tv-else-if=\"searchSet.length > 0 && availableEntities.length > 0\"\n\t\t\t\t\tv-slot=\"{ item }\"\n\t\t\t\t\tclass=\"entity-picker__options\"\n\t\t\t\t\t:data=\"availableEntities\">\n\t\t\t\t\t<EntitySearchResult\n\t\t\t\t\t\t:key=\"item.id\"\n\t\t\t\t\t\t:source=\"item\"\n\t\t\t\t\t\t:selection=\"selectionSet\"\n\t\t\t\t\t\t:on-click=\"onClick\" />\n\t\t\t\t</VList>\n\n\t\t\t\t<EmptyContent v-else-if=\"searchQuery\" :name=\"t('contacts', 'No results')\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconSearch :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</EmptyContent>\n\n\t\t\t\t<div class=\"entity-picker__navigation\">\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\t\tclass=\"navigation__button-left\"\n\t\t\t\t\t\t@click=\"onCancel\">\n\t\t\t\t\t\t{{ t('contacts', 'Cancel') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\t:disabled=\"isEmptySelection || loading\"\n\t\t\t\t\t\tclass=\"navigation__button-right primary\"\n\t\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t\t{{ confirmLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t</modal>\n</template>\n\n<script>\nimport { subscribe } from '@nextcloud/event-bus'\nimport {\n\tNcEmptyContent as EmptyContent,\n\tNcLoadingIcon as IconLoading,\n\tNcModal as Modal,\n\tNcButton,\n} from '@nextcloud/vue'\nimport debounce from 'debounce'\nimport { VList } from 'virtua/vue'\nimport IconAccountPlusOutline from 'vue-material-design-icons/AccountPlusOutline.vue'\nimport IconSearch from 'vue-material-design-icons/Magnify.vue'\nimport EntityBubble from './EntityBubble.vue'\nimport EntitySearchResult from './EntitySearchResult.vue'\n\nexport default {\n\tname: 'EntityPicker',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tEmptyContent,\n\t\tEntityBubble,\n\t\tIconAccountPlusOutline,\n\t\tIconSearch,\n\t\tIconLoading,\n\t\tModal,\n\t\tVList,\n\t\tEntitySearchResult,\n\t},\n\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The types of data within dataSet\n\t\t * Array of objects. id must match dataSet entity type\n\t\t */\n\t\tdataTypes: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator: (types) => {\n\t\t\t\tconst invalidTypes = types.filter((type) => !type.id && !type.label)\n\t\t\t\tif (invalidTypes.length > 0) {\n\t\t\t\t\tconsole.error('The following types MUST have a proper id and label key', invalidTypes)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * The data to be used\n\t\t */\n\t\tdataSet: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator: (data) => {\n\t\t\t\tdata.forEach((source) => {\n\t\t\t\t\tif (!source.id || !source.label) {\n\t\t\t\t\t\tconsole.error('The following source MUST have a proper id and label key', source)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\treturn true\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * The sorting key for the dataSet\n\t\t */\n\t\tsort: {\n\t\t\ttype: String,\n\t\t\tdefault: 'label',\n\t\t},\n\n\t\t/**\n\t\t * Confirm button text\n\t\t */\n\t\tconfirmLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: t('contacts', 'Add to group'),\n\t\t},\n\n\t\t/**\n\t\t * Title text\n\t\t */\n\t\ttitleLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: t('contacts', 'Add members to group'),\n\t\t},\n\n\t\t/**\n\t\t * The input will also filter the dataSet based on the label.\n\t\t * If you are using the search event to inject a different dataSet, you can disable this\n\t\t */\n\t\tinternalSearch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Override the local management of selection\n\t\t * You MUST use a sync modifier or the selection will be locked\n\t\t */\n\t\tselection: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\temptyDataSetDescription: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcanInviteGuests: !!window?.OCA?.Guests?.openGuestDialog,\n\t\t\tsearchQuery: '',\n\t\t\tlocalSelection: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * If the selection is set externally, let's use it\n\t\t */\n\t\tselectionSet: {\n\t\t\tget() {\n\t\t\t\tif (this.selection !== null) {\n\t\t\t\t\treturn this.selection\n\t\t\t\t}\n\t\t\t\treturn this.localSelection\n\t\t\t},\n\n\t\t\tset(selection) {\n\t\t\t\tif (this.selection !== null) {\n\t\t\t\t\tthis.$emit('update:selection', selection)\n\t\t\t\t}\n\t\t\t\tthis.localSelection = selection\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Are we handling a single entity type ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisSingleType() {\n\t\t\treturn !(this.dataTypes.length > 1)\n\t\t},\n\n\t\t/**\n\t\t * Is the current selection empty\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEmptySelection() {\n\t\t\treturn Object.keys(this.selectionSet).length === 0\n\t\t},\n\n\t\t/**\n\t\t * Formatted search input placeholder based on\n\t\t * available types\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsearchPlaceholderTypes() {\n\t\t\tconst types = this.dataTypes\n\t\t\t\t.map((type) => type.label)\n\t\t\t\t.join(', ')\n\t\t\treturn `${types}…`\n\t\t},\n\n\t\t/**\n\t\t * Available data based on current search if query\n\t\t * is valid, returns default full data et otherwise\n\t\t *\n\t\t * @return {object[]}\n\t\t */\n\t\tsearchSet() {\n\t\t\t// If internal search is enabled and we have a search query, filter data set\n\t\t\tif (this.internalSearch && this.searchQuery && this.searchQuery.trim !== '') {\n\t\t\t\treturn this.dataSet.filter((entity) => {\n\t\t\t\t\treturn entity.label.toLowerCase().indexOf(this.searchQuery.toLowerCase()) > -1\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn this.dataSet\n\t\t},\n\n\t\t/**\n\t\t * Returns available entities grouped by type(s) if any\n\t\t *\n\t\t * @return {object[]}\n\t\t */\n\t\tavailableEntities() {\n\t\t\t// If only one type, return the full set directly\n\t\t\tif (this.isSingleType) {\n\t\t\t\treturn this.searchSet\n\t\t\t}\n\n\t\t\t// Else group by types\n\t\t\treturn this.dataTypes.map((type) => {\n\t\t\t\tconst dataSet = this.searchSet.filter((entity) => entity.type === type.id)\n\t\t\t\tconst dataList = [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: type.id,\n\t\t\t\t\t\tlabel: type.label,\n\t\t\t\t\t\theading: true,\n\t\t\t\t\t},\n\t\t\t\t\t...dataSet,\n\t\t\t\t]\n\n\t\t\t\t// If no results, hide the type\n\t\t\t\tif (dataSet.length === 0) {\n\t\t\t\t\treturn []\n\t\t\t\t}\n\n\t\t\t\treturn dataList\n\t\t\t}).flat()\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.$nextTick(() => {\n\t\t\tthis.$refs.input.focus()\n\t\t\tthis.$refs.input.select()\n\t\t})\n\n\t\tif (this.canInviteGuests) {\n\t\t\tsubscribe('guests:user:created', this.addGuest)\n\t\t}\n\t},\n\n\tmethods: {\n\t\tonCancel() {\n\t\t\t/**\n\t\t\t * Emitted when the user closed or cancelled\n\t\t\t */\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tonSubmit() {\n\t\t\t/**\n\t\t\t * Emitted when user submit the form\n\t\t\t *\n\t\t\t * @type {Array} the selected entities\n\t\t\t */\n\t\t\tthis.$emit('submit', Object.values(this.selectionSet))\n\t\t},\n\n\t\tonSearch: debounce(function() {\n\t\t\t/**\n\t\t\t * Emitted when search change\n\t\t\t *\n\t\t\t * @type {string} the search query\n\t\t\t */\n\t\t\tthis.$emit('search', this.searchQuery)\n\t\t}, 200),\n\n\t\t/**\n\t\t * Remove entity from selection\n\t\t *\n\t\t * @param {object} entity the entity to remove\n\t\t */\n\t\tonDelete(entity) {\n\t\t\tdelete this.selectionSet[entity.id]\n\t\t\tconsole.debug('Removing entity from selection', entity)\n\t\t},\n\n\t\t/**\n\t\t * Add/remove entity from selection\n\t\t *\n\t\t * @param {object} entity the entity to add\n\t\t */\n\t\tonClick(entity) {\n\t\t\tif (entity.id in this.selectionSet) {\n\t\t\t\tdelete this.selectionSet[entity.id]\n\t\t\t\tconsole.debug('Removed entity to selection', entity)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.selectionSet[entity.id] = entity\n\t\t\tconsole.debug('Added entity to selection', entity)\n\t\t},\n\n\t\t/**\n\t\t * Toggle entity from selection\n\t\t *\n\t\t * @param {object} entity the entity to add/remove\n\t\t */\n\t\tonToggle(entity) {\n\t\t\tif (entity.id in this.selectionSet) {\n\t\t\t\tthis.onDelete(entity)\n\t\t\t} else {\n\t\t\t\tthis.onPick(entity)\n\t\t\t}\n\t\t},\n\n\t\tonGuestButtonClick() {\n\t\t\tif (this.canInviteGuests) {\n\t\t\t\twindow?.OCA?.Guests?.openGuestDialog('contacts')\n\t\t\t}\n\t\t},\n\t},\n\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n@use 'sass:math';\n\n// Dialog variables\n$dialog-padding: 20px;\n$dialog-height: 480px;\n$entity-spacing: 4px;\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: math.div($clickable-area - $icon-size, 2);\n\n.entity-picker {\n\tposition: relative;\n\tdisplay: flex;\n\tflex-direction: column;\n\tmin-height: $dialog-height;\n\theight: 100%;\n\tpadding: $dialog-padding;\n\tpadding-top: 10px;\n\tbox-sizing: border-box;\n\n\t&__title {\n\t\tmargin-top: 0px;\n\t}\n\n\t&__search {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\twidth: 95%;\n\n\t\t&-container {\n\t\t\tdisplay: flex;\n\t\t\tflex-flow: row nowrap;\n\t\t\tcolumn-gap: 12px;\n\t\t}\n\n\t\t&-input {\n\t\t\twidth: 100%;\n\t\t\theight: $clickable-area - $entity-spacing !important;\n\t\t\tmargin: $entity-spacing 0;\n\t\t\tpadding-inline-start: $clickable-area !important;\n\t\t\tfont-size: 16px;\n\t\t\tline-height: $clickable-area - $entity-spacing;\n\t\t}\n\t\t&-icon {\n\t\t\tposition: absolute;\n\t\t\twidth: $clickable-area;\n\t\t\theight: $clickable-area;\n\t\t}\n\t}\n\n\t&__selection {\n\t\tdisplay: flex;\n\t\toverflow-y: auto;\n\t\talign-content: flex-start;\n\t\tflex-wrap: wrap;\n\t\tjustify-content: flex-start;\n\t\t// half a line height to know there is more lines\n\t\tmax-height: 6.5em;\n\t\tpadding: $entity-spacing 0;\n\t\tborder-bottom: 1px solid var(--color-background-darker);\n\t\tbackground: var(--color-main-background);\n\n\t\t// Allows 2 per line\n\t\t.entity-picker__bubble {\n\t\t\tmax-width: calc(50% - #{$entity-spacing});\n\t\t\tmargin-inline-end: $entity-spacing;\n\t\t\tmargin-bottom: $entity-spacing;\n\t\t}\n\t}\n\n\t&__options {\n\t\toverflow-y: auto;\n\t\tflex: 1 1 auto;\n\t\tmargin: $entity-spacing 0;\n\t}\n\n\t&__navigation {\n\t\tz-index: 1;\n\t\tdisplay: flex;\n\t\t// define our base width, no shrinkage\n\t\tflex: 0 0;\n\t\tjustify-content: space-between;\n\t\t// Same as above\n\t\twidth: 100%;\n\t\tbox-shadow: 0 -10px 5px var(--color-main-background);\n\t\t&__button-right {\n\t\t\tmargin-inline-start: auto;\n\t\t}\n\t}\n}\n\n// Properly center Entity Picker empty content\n:deep(.empty-content) {\n\tmargin: auto 0 !important;\n}\n\n/** Size full in the modal component doesn't have border radius, this adds\nit back */\n:deep(.modal-container) {\n\tborder-radius: var(--border-radius-large) !important;\n}\n\n:deep(.modal-container__close) {\n\tmargin-top: 10px;\n}\n\n</style>\n\n<style lang=\"scss\" scoped>\n.zoom-enter-active {\n\tanimation: zoom-in var(--animation-quick);\n}\n\n.zoom-leave-active {\n\tanimation: zoom-in var(--animation-quick) reverse;\n\n\twill-change: transform;\n}\n\n@keyframes zoom-in {\n\t0% {\n\t\ttransform: scale(0);\n\t}\n\t100% {\n\t\ttransform: scale(1);\n\t}\n}\n\n</style>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon check-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19.78,2.2L24,6.42L8.44,22L0,13.55L4.22,9.33L8.44,13.55L19.78,2.2M19.78,5L8.44,16.36L4.22,12.19L2.81,13.55L8.44,19.17L21.19,6.42L19.78,5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CheckOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon close-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M3,16.74L7.76,12L3,7.26L7.26,3L12,7.76L16.74,3L21,7.26L16.24,12L21,16.74L16.74,21L12,16.24L7.26,21L3,16.74M12,13.41L16.74,18.16L18.16,16.74L13.41,12L18.16,7.26L16.74,5.84L12,10.59L7.26,5.84L5.84,7.26L10.59,12L5.84,16.74L7.26,18.16L12,13.41Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CloseOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon exit-to-app-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19,3H5C3.89,3 3,3.89 3,5V9H5V5H19V19H5V15H3V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M10.08,15.58L11.5,17L16.5,12L11.5,7L10.08,8.41L12.67,11H3V13H12.67L10.08,15.58Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ExitToAppIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon shield-check-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M21,11C21,16.55 17.16,21.74 12,23C6.84,21.74 3,16.55 3,11V5L12,1L21,5V11M12,21C15.75,20 19,15.54 19,11.22V6.3L12,3.18L5,6.3V11.22C5,15.54 8.25,20 12,21M10,17L6,13L7.41,11.59L10,14.17L16.59,7.58L18,9\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ShieldCheckOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nexport default {\n\tcomputed: {\n\t\t// router variables\n\t\tselectedContact() {\n\t\t\treturn this.$route.params.selectedContact\n\t\t},\n\t\tselectedGroup() {\n\t\t\treturn this.$route.params.selectedGroup\n\t\t},\n\t\tselectedCircle() {\n\t\t\treturn this.$route.params.selectedCircle\n\t\t},\n\t\tselectedUserGroup() {\n\t\t\treturn this.$route.params.selectedUserGroup\n\t\t},\n\t\tselectedChart() {\n\t\t\treturn this.$route.params.selectedChart\n\t\t},\n\t},\n}\n","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"member-grid-item\">\n\t\t<NcAvatar\n\t\t\tv-if=\"isTeam\"\n\t\t\t:display-name=\"member.displayName\"\n\t\t\t:is-no-user=\"true\"\n\t\t\t:size=\"32\">\n\t\t\t<template #icon>\n\t\t\t\t<IconAccountGroupOutline :size=\"20\" />\n\t\t\t</template>\n\t\t</NcAvatar>\n\t\t<NcAvatar\n\t\t\tv-else\n\t\t\t:user=\"member.userId\"\n\t\t\t:display-name=\"member.displayName\"\n\t\t\t:size=\"32\" />\n\t\t<div class=\"member-info\">\n\t\t\t<span class=\"member-name\">{{ member.displayName }}</span>\n\t\t\t<span v-if=\"memberRole\" class=\"member-role\">{{ memberRole }}</span>\n\t\t</div>\n\n\t\t<!-- Accept invite -->\n\t\t<div v-if=\"!loading && isPendingApproval && circle.canManageMembers\" class=\"member-grid-item__actions\">\n\t\t\t<NcButton :aria-label=\"t('contacts', 'Accept membership request')\" @click=\"acceptMember\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconCheckOutline :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton :aria-label=\"t('contacts', 'Reject membership request')\" @click=\"deleteMember\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconCloseOutline :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<NcActions v-else>\n\t\t\t<NcActionText v-if=\"loading\" icon=\"icon-loading-small\">\n\t\t\t\t{{ t('contacts', 'Loading …') }}\n\t\t\t</NcActionText>\n\n\t\t\t<template v-else>\n\t\t\t\t<template v-if=\"canChangeLevel\">\n\t\t\t\t\t<NcActionText>\n\t\t\t\t\t\t{{ t('contacts', 'Manage level') }}\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconShieldCheckOutline :size=\"16\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcActionText>\n\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\tv-for=\"level in availableLevelsChange\"\n\t\t\t\t\t\t:key=\"level\"\n\t\t\t\t\t\ticon=\"\"\n\t\t\t\t\t\t@click=\"changeLevel(level)\">\n\t\t\t\t\t\t{{ levelChangeLabel(level) }}\n\t\t\t\t\t</NcActionButton>\n\n\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t</template>\n\n\t\t\t\t<NcActionButton v-if=\"isCurrentUser && !circle.isOwner\" @click=\"deleteMember\">\n\t\t\t\t\t{{ t('contacts', 'Leave team') }}\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconExitToApp :size=\"16\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionButton v-else-if=\"canDelete\" @click=\"deleteMember\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconDeleteOutline :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Remove member') }}\n\t\t\t\t</NcActionButton>\n\t\t\t</template>\n\t\t</NcActions>\n\t</div>\n</template>\n\n<script>\nimport { DialogBuilder, showError } from '@nextcloud/dialogs'\nimport { NcActionButton, NcActions, NcActionSeparator, NcActionText, NcAvatar, NcButton } from '@nextcloud/vue'\nimport IconAccountGroupOutline from 'vue-material-design-icons/AccountGroupOutline.vue'\nimport IconCheckOutline from 'vue-material-design-icons/CheckOutline.vue'\nimport IconCloseOutline from 'vue-material-design-icons/CloseOutline.vue'\nimport IconExitToApp from 'vue-material-design-icons/ExitToApp.vue'\nimport IconShieldCheckOutline from 'vue-material-design-icons/ShieldCheckOutline.vue'\nimport IconDeleteOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport RouterMixin from '../../mixins/RouterMixin.js'\nimport Circle from '../../models/circle.ts'\nimport { CIRCLES_MEMBER_LEVELS, MemberLevels, MemberStatus } from '../../models/constants.ts'\nimport { changeMemberLevel } from '../../services/circles.ts'\n\nexport default {\n\tname: 'MemberGridItem',\n\tcomponents: {\n\t\tNcAvatar,\n\t\tIconAccountGroupOutline,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionSeparator,\n\t\tNcActionText,\n\t\tIconDeleteOutline,\n\t\tIconExitToApp,\n\t\tIconShieldCheckOutline,\n\t\tIconCheckOutline,\n\t\tIconCloseOutline,\n\t\tNcButton,\n\t},\n\n\tmixins: [RouterMixin],\n\tprops: {\n\t\tmember: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tisTeam: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Return the current circle\n\t\t *\n\t\t * @return {Circle}\n\t\t */\n\t\tcircle() {\n\t\t\treturn this.$store.getters.getCircle(this.selectedCircle)\n\t\t},\n\n\t\t/**\n\t\t * Current user member level\n\t\t *\n\t\t * @return {number}\n\t\t */\n\t\tcurrentUserLevel() {\n\t\t\treturn this.circle?.initiator?.level || MemberLevels.MEMBER\n\t\t},\n\n\t\t/**\n\t\t * Current user member level\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tcurrentUserId() {\n\t\t\treturn this.circle?.initiator?.singleId\n\t\t},\n\n\t\t/**\n\t\t * Available levels change to the current user\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\tavailableLevelsChange() {\n\t\t\tconst levels = []\n\t\t\t// Can't change level of owner\n\t\t\tif (this.member.level === MemberLevels.OWNER) {\n\t\t\t\treturn levels\n\t\t\t}\n\n\t\t\t// Can't change level of yourself\n\t\t\tif (this.isCurrentUser) {\n\t\t\t\treturn levels\n\t\t\t}\n\n\t\t\t// From MODERATOR, you can set ADMIN\n\t\t\tif (this.currentUserLevel >= MemberLevels.MODERATOR && this.member.level !== MemberLevels.ADMIN) {\n\t\t\t\tlevels.push(MemberLevels.ADMIN)\n\t\t\t}\n\n\t\t\t// From ADMIN, you can set MODERATOR and MEMBER\n\t\t\tif (this.currentUserLevel >= MemberLevels.ADMIN) {\n\t\t\t\tif (this.member.level !== MemberLevels.MODERATOR) {\n\t\t\t\t\tlevels.push(MemberLevels.MODERATOR)\n\t\t\t\t}\n\t\t\t\tif (this.member.level !== MemberLevels.MEMBER) {\n\t\t\t\t\tlevels.push(MemberLevels.MEMBER)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Owners can transfer ownership to another member\n\t\t\tif (this.circle.isOwner) {\n\t\t\t\tlevels.push(MemberLevels.OWNER)\n\t\t\t}\n\n\t\t\treturn levels\n\t\t},\n\n\t\t/**\n\t\t * Is the current member the current user?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisCurrentUser() {\n\t\t\treturn this.member.id === this.currentUserId\n\t\t},\n\n\t\t/**\n\t\t * Is the current member pending moderator approval?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPendingApproval() {\n\t\t\treturn this.member.level === MemberLevels.NONE\n\t\t\t\t&& this.member.status === MemberStatus.PENDING\n\t\t},\n\n\t\t/**\n\t\t * Can the current user change the level of others?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanChangeLevel() {\n\t\t\treturn this.circle.canManageMembers\n\t\t\t\t&& this.availableLevelsChange.length > 0\n\t\t\t\t&& !this.isCurrentUser\n\t\t},\n\n\t\t/**\n\t\t * Can the current user delete members or?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanDelete() {\n\t\t\treturn this.circle.canManageMembers\n\t\t\t\t&& this.member.level <= this.currentUserLevel\n\t\t\t\t&& !this.isCurrentUser\n\t\t},\n\n\t\t/**\n\t\t * Get the member role name\n\t\t *\n\t\t * @return {string|null}\n\t\t */\n\t\tmemberRole() {\n\t\t\tif (!this.member.level || this.member.level === MemberLevels.NONE) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn CIRCLES_MEMBER_LEVELS[this.member.level] || null\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Return the promote/demote member action label\n\t\t *\n\t\t * @param {MemberLevel} level the member level\n\t\t * @return {string}\n\t\t */\n\t\tlevelChangeLabel(level) {\n\t\t\tif (level === MemberLevels.OWNER) {\n\t\t\t\treturn t('contacts', 'Promote as sole owner')\n\t\t\t}\n\n\t\t\tif (this.member.level < level) {\n\t\t\t\treturn t('contacts', 'Promote to {level}', { level: CIRCLES_MEMBER_LEVELS[level] })\n\t\t\t}\n\t\t\treturn t('contacts', 'Demote to {level}', { level: CIRCLES_MEMBER_LEVELS[level] })\n\t\t},\n\n\t\t/**\n\t\t * Delete the current member\n\t\t */\n\t\tasync deleteMember() {\n\t\t\tif (!this.isCurrentUser) {\n\t\t\t\tawait this.doDeleteMember()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst dialog = new DialogBuilder()\n\t\t\t\t\t.setName(t('contacts', 'Leave team'))\n\t\t\t\t\t.setText(t('contacts', 'Are you sure you want to leave this team? This action cannot be undone.'))\n\t\t\t\t\t.setButtons([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('contacts', 'Cancel'),\n\t\t\t\t\t\t\ttype: 'secondary',\n\t\t\t\t\t\t\tcallback: () => { /* do nothing, just close */ },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: t('contacts', 'Leave team'),\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\tcallback: async () => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait this.doDeleteMember()\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tthis.logger.error('Error in delete member callback', { e })\n\t\t\t\t\t\t\t\t\tshowError(t('contacts', 'Leave team failed.'))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t\t.build()\n\n\t\t\t\tawait dialog.show()\n\t\t\t} catch (error) {\n\t\t\t\t// User cancelled the dialog - no action needed\n\t\t\t}\n\t\t},\n\n\t\tasync doDeleteMember() {\n\t\t\tthis.loading = true\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteMemberFromCircle', {\n\t\t\t\t\tmember: this.member,\n\t\t\t\t\tleave: this.isCurrentUser,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tif (error?.response?.status === 404) {\n\t\t\t\t\tthis.logger.debug('Member is not in circle')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.logger.error('Could not delete the member', { member: this.member, error })\n\t\t\t\tshowError(t('contacts', 'Could not delete the member {displayName}', this.member))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\tasync changeLevel(level) {\n\t\t\tthis.loading = true\n\n\t\t\ttry {\n\t\t\t\tawait changeMemberLevel(this.circle.id, this.member.id, level)\n\t\t\t\tthis.showLevelMenu = false\n\n\t\t\t\t// If we changed an owner, let's refresh the whole dataset to update all ownership & memberships\n\t\t\t\tif (level === MemberLevels.OWNER) {\n\t\t\t\t\tawait this.$store.dispatch('getCircle', this.circle.id)\n\t\t\t\t\tawait this.$store.dispatch('getCircleMembers', this.circle.id)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// this.member is a class. We're modifying the class setter, not the prop itself\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\tthis.member.level = level\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Could not change the member level', { level: CIRCLES_MEMBER_LEVELS[level], error })\n\t\t\t\tshowError(t('contacts', 'Could not change the member level to {level}', {\n\t\t\t\t\tlevel: CIRCLES_MEMBER_LEVELS[level],\n\t\t\t\t}))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\tasync acceptMember() {\n\t\t\tthis.loading = true\n\n\t\t\ttry {\n\t\t\t\tawait await this.$store.dispatch('acceptCircleMember', {\n\t\t\t\t\tcircleId: this.circle.id,\n\t\t\t\t\tmemberId: this.member.id,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Could not accept membership request', { member: this.member, error })\n\t\t\t\tshowError(t('contacts', 'Could not accept membership request'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.member-grid-item {\n\t&__actions {\n\t\tdisplay: flex;\n\t\tgap: 8px;\n\t}\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 8px;\n\tborder-radius: var(--border-radius);\n\tbackground-color: var(--color-background-soft);\n\n\t.member-info {\n\t\tflex-grow: 1;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow: hidden;\n\t}\n\n\t.member-name {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\n\t.member-role {\n\t\tfont-size: 0.75rem;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { SHARES_TYPES_MEMBER_MAP } from '../models/constants.ts'\n\n// generate allowed shareType from SHARES_TYPES_MEMBER_MAP\nconst shareType = Object.keys(SHARES_TYPES_MEMBER_MAP)\nconst maxAutocompleteResults = parseInt(window.OC.config['sharing.maxAutocompleteResults'], 10) || 25\n\n/**\n * Get suggestions\n *\n * @param {string} search the search query\n */\nexport async function getSuggestions(search) {\n\tconst request = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees'), {\n\t\tparams: {\n\t\t\tformat: 'json',\n\t\t\titemType: 'contacts',\n\t\t\tsearch,\n\t\t\tperPage: maxAutocompleteResults,\n\t\t\tshareType,\n\t\t\tlookup: false,\n\t\t},\n\t})\n\n\tconst data = request.data.ocs.data\n\tconst exact = request.data.ocs.data.exact\n\tdata.exact = [] // removing exact from general results\n\n\t// flatten array of arrays\n\tconst rawExactSuggestions = Object.values(exact).reduce((arr, elem) => arr.concat(elem), [])\n\tconst rawSuggestions = Object.values(data).reduce((arr, elem) => arr.concat(elem), [])\n\n\t// remove invalid data and format to user-select layout\n\tconst exactSuggestions = rawExactSuggestions\n\t\t.filter((result) => typeof result === 'object')\n\t\t.map((share) => formatResults(share))\n\t\t// sort by type so we can get user&groups first...\n\t\t.sort((a, b) => a.shareType - b.shareType)\n\tconst suggestions = rawSuggestions\n\t\t.filter((result) => typeof result === 'object')\n\t\t.map((share) => formatResults(share))\n\t\t// sort by type so we can get user&groups first...\n\t\t.sort((a, b) => a.shareType - b.shareType)\n\n\tconst allSuggestions = exactSuggestions.concat(suggestions)\n\n\t// Count occurances of display names in order to provide a distinguishable description if needed\n\tconst nameCounts = allSuggestions.reduce((nameCounts, result) => {\n\t\tif (!result.displayName) {\n\t\t\treturn nameCounts\n\t\t}\n\t\tif (!nameCounts[result.displayName]) {\n\t\t\tnameCounts[result.displayName] = 0\n\t\t}\n\t\tnameCounts[result.displayName]++\n\t\treturn nameCounts\n\t}, {})\n\n\tconst finalResults = allSuggestions.map((item) => {\n\t\t// Make sure that items with duplicate displayName get the shareWith applied as a description\n\t\tif (nameCounts[item.displayName] > 1 && !item.desc) {\n\t\t\treturn { ...item, desc: item.shareWithDisplayNameUnique }\n\t\t}\n\t\treturn item\n\t})\n\n\tconsole.info('suggestions', finalResults)\n\n\treturn finalResults\n}\n\n/**\n * Get the sharing recommendations\n */\nexport async function getRecommendations() {\n\tconst request = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees_recommended'), {\n\t\tparams: {\n\t\t\tformat: 'json',\n\t\t\titemType: 'contacts',\n\t\t\tshareType,\n\t\t},\n\t})\n\n\t// flatten array of arrays\n\tconst exact = request.data.ocs.data.exact\n\tconst recommendations = Object.values(exact).reduce((arr, elem) => arr.concat(elem), [])\n\n\t// remove invalid data and format to user-select layout\n\tconst finalResults = recommendations\n\t\t.map((share) => formatResults(share))\n\n\tconsole.info('recommendations', finalResults)\n\n\treturn finalResults\n}\n\nfunction formatResults(result) {\n\tconst type = `picker-${result.value.shareType}`\n\treturn {\n\t\tlabel: result.label,\n\t\tid: `${type}-${result.value.shareWith}`,\n\t\t// If this is a user, set as user for avatar display by UserBubble\n\t\tuser: [window.OC.Share.SHARE_TYPE_USER, window.OC.Share.SHARE_TYPE_REMOTE].indexOf(result.value.shareType) > -1\n\t\t\t? result.value.shareWith\n\t\t\t: null,\n\t\ttype,\n\t\t...result.value,\n\t}\n}\n","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<section class=\"member-list\">\n\t\t<NcEmptyContent v-if=\"loading\" class=\"empty-content\" :name=\"t('contacts', 'Loading members list …')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconLoading :size=\"20\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<NcEmptyContent\n\t\t\tv-else-if=\"!circle.isMember\"\n\t\t\tclass=\"empty-content\"\n\t\t\t:name=\"t('contacts', 'The list of members is only visible to members of this team')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconContact :size=\"20\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<NcEmptyContent\n\t\t\tv-else-if=\"!hasMembers\"\n\t\t\tclass=\"empty-content\"\n\t\t\t:name=\"t('contacts', 'You currently have no access to the member list')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconContact :size=\"20\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<div v-else class=\"member-grid\">\n\t\t\t<MemberGridItem\n\t\t\t\tv-for=\"member in flatList\"\n\t\t\t\t:key=\"`member-grid-item-${member.id}`\"\n\t\t\t\t:member=\"member\"\n\t\t\t\t:is-team=\"!member.isUser\" />\n\t\t</div>\n\n\t\t<!-- member picker -->\n\t\t<EntityPicker\n\t\t\tv-if=\"showPicker\"\n\t\t\tref=\"entityPicker\"\n\t\t\tv-model:selection=\"pickerSelection\"\n\t\t\t:confirm-label=\"t('contacts', 'Add to {team}', { team: circle.displayName })\"\n\t\t\t:title-label=\"t('contacts', 'Invite members to {team}', { team: circle.displayName })\"\n\t\t\t:data-types=\"pickerTypes\"\n\t\t\t:data-set=\"filteredPickerData\"\n\t\t\t:internal-search=\"false\"\n\t\t\t:loading=\"pickerLoading\"\n\t\t\t@close=\"resetPicker\"\n\t\t\t@search=\"onSearch\"\n\t\t\t@submit=\"onPickerPick\" />\n\t</section>\n</template>\n\n<script lang=\"ts\">\nimport { showError, showWarning } from '@nextcloud/dialogs'\nimport { subscribe } from '@nextcloud/event-bus'\nimport { t } from '@nextcloud/l10n'\nimport { NcEmptyContent } from '@nextcloud/vue'\nimport { defineComponent } from 'vue'\nimport IconContact from 'vue-material-design-icons/AccountMultipleOutline.vue'\nimport EntityPicker from '../EntityPicker/EntityPicker.vue'\nimport MemberGridItem from './MemberGridItem.vue'\nimport IsMobileMixin from '../../mixins/IsMobileMixin.ts'\nimport RouterMixin from '../../mixins/RouterMixin.js'\nimport { CIRCLES_MEMBER_GROUPING, SHARES_TYPES_MEMBER_MAP } from '../../models/constants.ts'\nimport { getRecommendations, getSuggestions } from '../../services/collaborationAutocompletion.js'\n\nexport default defineComponent({\n\tname: 'MemberList',\n\n\tcomponents: {\n\t\tEntityPicker,\n\t\tIconContact,\n\t\tMemberGridItem,\n\t\tNcEmptyContent,\n\t},\n\n\tmixins: [IsMobileMixin, RouterMixin],\n\n\tprops: {\n\t\tlist: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpickerLoading: false,\n\t\t\tshowPicker: false,\n\t\t\tshowPickerIntro: true,\n\n\t\t\trecommendations: [],\n\t\t\tpickerCircle: null,\n\t\t\tpickerData: [],\n\t\t\tpickerSelection: {},\n\t\t\tpickerTypes: CIRCLES_MEMBER_GROUPING,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Return the current circle\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tcircle() {\n\t\t\treturn this.$store.getters.getCircle(this.selectedCircle)\n\t\t},\n\n\t\tfilteredPickerData() {\n\t\t\treturn this.pickerData.filter((entity) => {\n\t\t\t\tconst type = SHARES_TYPES_MEMBER_MAP[entity.shareType]\n\t\t\t\tconst list = this.list.filter(({ userType }) => userType === type)\n\t\t\t\tif (list) {\n\t\t\t\t\treturn list.find((member) => member.userId === entity.shareWith) === undefined\n\t\t\t\t}\n\t\t\t\t// If the type doesn't exists, there is no member of this type\n\t\t\t\treturn true\n\t\t\t})\n\t\t},\n\n\t\tflatList() {\n\t\t\tconst teams = this.list.filter((member) => !member.isUser)\n\t\t\tconst users = this.list.filter((member) => member.isUser)\n\t\t\treturn [...teams, ...users]\n\t\t},\n\n\t\thasMembers() {\n\t\t\treturn this.flatList.length > 0\n\t\t},\n\t},\n\n\tmounted() {\n\t\tsubscribe('contacts:circles:append', this.onShowPicker)\n\t\tsubscribe('guests:user:created', this.onGuestCreated)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Show picker and fetch for recommendations\n\t\t * Cache the circleId in case the url change or something\n\t\t * and make sure we add them to the desired circle.\n\t\t *\n\t\t * @param {string} circleId the circle id to add members to\n\t\t */\n\t\tasync onShowPicker(circleId) {\n\t\t\tthis.showPicker = true\n\t\t\tthis.pickerLoading = true\n\t\t\tthis.pickerCircle = circleId\n\n\t\t\ttry {\n\t\t\t\tconst results = await getRecommendations()\n\t\t\t\t// cache recommendations\n\t\t\t\tthis.recommendations = results\n\t\t\t\tthis.pickerData = results\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Unable to get the recommendations list', error)\n\t\t\t\t// Do not show the error, let the user search\n\t\t\t\t// showError(t('contacts', 'Unable to get the recommendations list'))\n\t\t\t} finally {\n\t\t\t\tthis.pickerLoading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * On EntityPicker search.\n\t\t * Returns recommendations if empty\n\t\t *\n\t\t * @param {string} term the searched term\n\t\t */\n\t\tasync onSearch(term) {\n\t\t\tif (term.trim() === '') {\n\t\t\t\tthis.pickerData = this.recommendations\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.pickerLoading = true\n\n\t\t\ttry {\n\t\t\t\tconst results = await getSuggestions(term)\n\t\t\t\tthis.pickerData = results\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Unable to get the results', error)\n\t\t\t\tshowError(t('contacts', 'Unable to get the results'))\n\t\t\t} finally {\n\t\t\t\tthis.pickerLoading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * On picker submit\n\t\t *\n\t\t * @param {Array} selection the selection to add to the circle\n\t\t */\n\t\tasync onPickerPick(selection) {\n\t\t\tthis.logger.info('Adding selection to circle', { selection, pickerCircle: this.pickerCircle })\n\n\t\t\tthis.pickerLoading = true\n\n\t\t\tselection = selection.map((entry) => ({\n\t\t\t\tid: entry.shareWith,\n\t\t\t\ttype: SHARES_TYPES_MEMBER_MAP[entry.shareType],\n\t\t\t}))\n\n\t\t\ttry {\n\t\t\t\tconst members = await this.$store.dispatch('addMembersToCircle', { circleId: this.pickerCircle, selection })\n\n\t\t\t\tif (members.length < selection.length) {\n\t\t\t\t\tshowWarning(t('contacts', 'Some members could not be added'))\n\t\t\t\t\t// TODO filter successful members and edit selection\n\t\t\t\t\tthis.pickerSelection = {}\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tthis.resetPicker()\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('contacts', 'There was an issue adding members to the team'))\n\t\t\t\tconsole.error('There was an issue adding members to the circle', this.pickerCircle, error)\n\t\t\t} finally {\n\t\t\t\tthis.pickerLoading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset picker related variables\n\t\t */\n\t\tresetPicker() {\n\t\t\tthis.showPicker = false\n\t\t\tthis.pickerCircle = null\n\t\t\tthis.pickerData = []\n\t\t\tthis.pickerSelection = {}\n\t\t},\n\n\t\tasync onGuestCreated(guest) {\n\t\t\tconst results = await getSuggestions(guest.username)\n\t\t\tthis.$refs.entityPicker.onClick(results[0])\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.member-list {\n\t// Make virtual scroller scrollable\n\tmax-height: 100%;\n\tmax-width: 900px;\n\toverflow: auto;\n\n\t:deep(.empty-content) {\n\t\tmargin: auto;\n\t}\n}\n\n.member-grid {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(2, 1fr);\n\tgap: 8px;\n\n\t@media (max-width: 768px) {\n\t\tgrid-template-columns: 1fr;\n\t}\n\n\t@media (min-width: 1200px) {\n\t\tgrid-template-columns: repeat(3, 1fr);\n\t}\n}\n\n.empty-content {\n\theight: 100%;\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { showError, showSuccess } from '@nextcloud/dialogs'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tcopied: false,\n\t\t\tcopyLoading: false,\n\t\t\tcopySuccess: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyLinkIcon() {\n\t\t\tif (this.copySuccess) {\n\t\t\t\treturn 'icon-checkmark'\n\t\t\t}\n\t\t\tif (this.copyLoading) {\n\t\t\t\treturn 'icon-loading-small'\n\t\t\t}\n\t\t\treturn 'icon-public'\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync copyToClipboard(url) {\n\t\t\t// change to loading status\n\t\t\tthis.copyLoading = true\n\n\t\t\t// copy link to clipboard\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(url)\n\t\t\t\tthis.copySuccess = true\n\t\t\t\tthis.copied = true\n\n\t\t\t\t// Notify success\n\t\t\t\tshowSuccess(t('contacts', 'Link copied to the clipboard'))\n\t\t\t} catch (error) {\n\t\t\t\tthis.copySuccess = false\n\t\t\t\tthis.copied = true\n\t\t\t\tshowError(t('contacts', 'Could not copy link to the clipboard.'))\n\t\t\t} finally {\n\t\t\t\tthis.copyLoading = false\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t// stop loading status regardless of outcome\n\t\t\t\t\tthis.copied = false\n\t\t\t\t\tthis.copySuccess = false\n\t\t\t\t}, 2000)\n\t\t\t}\n\t\t},\n\t},\n}\n","import { showError } from '@nextcloud/dialogs'\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { emit } from '@nextcloud/event-bus'\nimport Circle from '../models/circle.ts'\nimport Member from '../models/member.ts'\nimport { joinCircle } from '../services/circles.ts'\nimport CopyToClipboardMixin from './CopyToClipboardMixin.js'\n\nexport default {\n\n\tprops: {\n\t\tcircle: {\n\t\t\ttype: Circle,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmixins: [CopyToClipboardMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingAction: false,\n\t\t\tloadingJoin: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcopyButtonText() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn this.copySuccess\n\t\t\t\t\t? t('contacts', 'Copied')\n\t\t\t\t\t: t('contacts', 'Could not copy')\n\t\t\t}\n\t\t\treturn t('contacts', 'Copy link')\n\t\t},\n\n\t\tcircleUrl() {\n\t\t\tconst route = this.$router.resolve(this.circle.router)\n\t\t\treturn window.location.origin + route.href\n\t\t},\n\n\t\tjoinButtonTitle() {\n\t\t\tif (this.circle.requireJoinAccept) {\n\t\t\t\treturn t('contacts', 'Request to join')\n\t\t\t}\n\t\t\treturn t('contacts', 'Join team')\n\t\t},\n\t},\n\n\tmethods: {\n\t\tconfirmLeaveCircle() {\n\t\t\twindow.OC.dialogs.confirmDestructive(\n\t\t\t\tt('contacts', 'You are about to leave {circle}.\\nAre you sure?', {\n\t\t\t\t\tcircle: this.circle.displayName,\n\t\t\t\t}),\n\t\t\t\tt('contacts', 'Please confirm team leave'),\n\t\t\t\twindow.OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\tthis.leaveCircle,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\t\tasync leaveCircle(confirm) {\n\t\t\tif (!confirm) {\n\t\t\t\tthis.logger.debug('Circle leave cancelled')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingAction = true\n\t\t\tconst member = this.circle.initiator\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteMemberFromCircle', {\n\t\t\t\t\tmember,\n\t\t\t\t\tleave: true,\n\t\t\t\t})\n\n\t\t\t\t// Reset initiator\n\t\t\t\tthis.circle.initiator = null\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Could not leave the circle', member, error)\n\t\t\t\tshowError(t('contacts', 'Could not leave the team {displayName}', this.circle))\n\t\t\t} finally {\n\t\t\t\tthis.loadingAction = false\n\t\t\t}\n\t\t},\n\n\t\tasync joinCircle() {\n\t\t\tthis.loadingJoin = true\n\t\t\ttry {\n\t\t\t\tconst initiator = await joinCircle(this.circle.id)\n\t\t\t\tconst member = new Member(initiator, this.circle)\n\n\t\t\t\t// Update initiator with newest membership values\n\t\t\t\tthis.circle.initiator = member\n\n\t\t\t\t// Append new member\n\t\t\t\tmember.circle.addMember(member)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('contacts', 'Unable to join the team'))\n\t\t\t\tconsole.error('Unable to join the circle', error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingJoin = false\n\t\t\t}\n\t\t},\n\n\t\tconfirmDeleteCircle() {\n\t\t\twindow.OC.dialogs.confirmDestructive(\n\t\t\t\tt('contacts', 'You are about to delete {circle}.\\nAre you sure?', {\n\t\t\t\t\tcircle: this.circle.displayName,\n\t\t\t\t}),\n\t\t\t\tt('contacts', 'Please confirm team deletion'),\n\t\t\t\twindow.OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\tthis.deleteCircle,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\t\tasync deleteCircle(confirm) {\n\t\t\tif (!confirm) {\n\t\t\t\tthis.logger.debug('Circle deletion cancelled')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingAction = true\n\n\t\t\ttry {\n\t\t\t\tthis.$store.dispatch('deleteCircle', this.circle.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('contacts', 'Unable to delete the team'))\n\t\t\t} finally {\n\t\t\t\tthis.loadingAction = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Trigger the entity picker view\n\t\t */\n\t\tasync addMemberToCircle() {\n\t\t\ttry {\n\t\t\t\t// Avoid VueRouter NavigationDuplicated\n\t\t\t\tawait this.$router.push(this.circle.router)\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Could not open circle member picker', error)\n\t\t\t}\n\t\t\temit('contacts:circles:append', this.circle.id)\n\t\t},\n\t},\n}\n","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"circle-details-container\">\n\t\t<div class=\"circle-details-grid\" :class=\"{ 'is-editing': isEditing }\">\n\t\t\t<div class=\"circle-details__header-wrapper\">\n\t\t\t\t<div class=\"circle-details-grid__avatar\">\n\t\t\t\t\t<Avatar\n\t\t\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t\t\t:display-name=\"circle.displayName\"\n\t\t\t\t\t\t:is-no-user=\"true\"\n\t\t\t\t\t\t:size=\"75\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"circle-details__header\">\n\t\t\t\t\t<div class=\"circle-name-wrapper\">\n\t\t\t\t\t\t<h2 v-if=\"!isEditing\" class=\"circle-name\">\n\t\t\t\t\t\t\t<span :title=\"circle.displayName\">{{ circle.displayName }}</span>\n\t\t\t\t\t\t\t<NcLoadingIcon v-if=\"loadingName\" :size=\"24\" />\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t<NcTextField\n\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\tv-model=\"circle.displayName\"\n\t\t\t\t\t\t\t:placeholder=\"t('contacts', 'Team name')\"\n\t\t\t\t\t\t\tlabel=\"Team name\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-if=\"!isEditing\" class=\"subtitle\">\n\t\t\t\t\t\t<span>{{ t('files', 'Team owner') }}</span> <UserBubble\n\t\t\t\t\t\t\t:user=\"circle.owner.userId\"\n\t\t\t\t\t\t\t:display-name=\"circle.isOwner ? 'you' : circle.owner.displayName\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-if=\"showDescription\" class=\"circle-description-wrapper\">\n\t\t\t\t\t\t<div v-if=\"!isEditing\" class=\"circle-description\">\n\t\t\t\t\t\t\t{{ circle.description }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<NcTextArea\n\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\tv-model=\"circle.description\"\n\t\t\t\t\t\t\t:placeholder=\"descriptionPlaceholder\"\n\t\t\t\t\t\t\tlabel=\"Description\"\n\t\t\t\t\t\t\t:maxlength=\"1024\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t\t<template v-if=\"!isEditing\">\n\t\t\t\t\t\t\t<NcButton v-if=\"canManageTeam\" variant=\"primary\" @click=\"startEditing\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<PencilIcon :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t{{ t('contacts', 'Edit') }}\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t:href=\"circleUrl\"\n\t\t\t\t\t\t\t\t@click.stop.prevent=\"copyToClipboard(circleUrl)\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<CopyIcon :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t{{ t('contacts', 'Copy link') }}\n\t\t\t\t\t\t\t</NcButton>\n\n\t\t\t\t\t\t\t<!-- Team settings popover -->\n\t\t\t\t\t\t\t<NcPopover\n\t\t\t\t\t\t\t\tv-if=\"canManageTeam\"\n\t\t\t\t\t\t\t\t:shown=\"isSettingsPopoverShown\"\n\t\t\t\t\t\t\t\tpopup-role=\"dialog\"\n\t\t\t\t\t\t\t\t@update:shown=\"isSettingsPopoverShown = $event\">\n\t\t\t\t\t\t\t\t<template #trigger>\n\t\t\t\t\t\t\t\t\t<NcButton @click=\"isSettingsPopoverShown = true\">\n\t\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t\t<CogIcon :size=\"20\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t<CircleSettings :circle=\"circle\" @leave=\"onLeave\" @delete=\"onDelete\" />\n\t\t\t\t\t\t\t</NcPopover>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t\t<NcButton variant=\"secondary\" @click=\"cancelEditing\">\n\t\t\t\t\t\t\t\t{{ t('contacts', 'Cancel') }}\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t<NcButton variant=\"primary\" @click=\"saveChanges\">\n\t\t\t\t\t\t\t\t{{ t('contacts', 'Save') }}\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tv-if=\"!circle.isPendingMember && !circle.isMember && circle.canJoin\"\n\t\t\t\t\t\t\t:disabled=\"loadingJoin\"\n\t\t\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t\t\t@click=\"joinCircle\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<LoginIcon :size=\"16\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('contacts', 'Request to join') }}\n\t\t\t\t\t\t</NcButton>\n\n\t\t\t\t\t\t<!-- Leave team Ncbutton -->\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tv-if=\"circle.isMember && circle.canLeave\"\n\t\t\t\t\t\t\t:disabled=\"loadingLeave\"\n\t\t\t\t\t\t\tvariant=\"warning\"\n\t\t\t\t\t\t\t@click=\"confirmLeaveCircle\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<LogoutIcon :size=\"16\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('contacts', 'Leave team') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Team resource creation shortcuts -->\n\t\t\t\t\t<div v-if=\"circle.isMember\" class=\"resource-shortcuts\">\n\t\t\t\t\t\t<h3 class=\"resource-shortcuts__title\">\n\t\t\t\t\t\t\t{{ t('contacts', 'Create') }}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<div class=\"resource-shortcuts__buttons\">\n\t\t\t\t\t\t\t<template v-for=\"resourceType in resourceTypes\" :key=\"resourceType.id\">\n\t\t\t\t\t\t\t\t<!-- Show success button for calendar if notification is active -->\n\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\tv-if=\"resourceType.id === 'calendar' && showCalendarSuccessNotification\"\n\t\t\t\t\t\t\t\t\tvariant=\"success\"\n\t\t\t\t\t\t\t\t\t@click=\"openCalendarApp\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<CheckIcon :size=\"20\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t{{ t('contacts', 'Show in Calendar') }}\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t\t<!-- Show normal resource button otherwise -->\n\t\t\t\t\t\t\t\t<TeamResourceButton\n\t\t\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t\t\t:resource-type=\"resourceType\"\n\t\t\t\t\t\t\t\t\t:value=\"resourceInputs[resourceType.id] || ''\"\n\t\t\t\t\t\t\t\t\t:is-open=\"activePopover === resourceType.id\"\n\t\t\t\t\t\t\t\t\t:helper-text=\"resourceType.helperText\"\n\t\t\t\t\t\t\t\t\t@update:value=\"updateResourceInput(resourceType.id, $event)\"\n\t\t\t\t\t\t\t\t\t@update:is-open=\"setActivePopover(resourceType.id, $event)\"\n\t\t\t\t\t\t\t\t\t@create=\"handleResourceCreation\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<component :is=\"resourceType.icon\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t</TeamResourceButton>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- Main content now a direct child of the grid -->\n\t\t\t<div class=\"circle-details__main-content\">\n\t\t\t\t<!-- not a member -->\n\t\t\t\t<template v-if=\"!circle.isMember\">\n\t\t\t\t\t<!-- Pending request validation -->\n\t\t\t\t\t<NcEmptyContent\n\t\t\t\t\t\tv-if=\"circle.isPendingMember\"\n\t\t\t\t\t\t:name=\"t('contacts', 'Your request to join this team is pending approval')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcLoadingIcon :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcEmptyContent>\n\n\t\t\t\t\t<NcEmptyContent\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\t:name=\"t('contacts', 'You are not a member of {circle}', { circle: circle.displayName })\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconAccountGroup :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcEmptyContent>\n\t\t\t\t</template>\n\n\t\t\t\t<section v-else>\n\t\t\t\t\t<div v-for=\"(group, providerId) in groupedResources\" :key=\"providerId\" class=\"circle-details-section\">\n\t\t\t\t\t\t<div class=\"section-header\">\n\t\t\t\t\t\t\t<ContentHeading>{{ group.name }}</ContentHeading>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ul class=\"item-list\">\n\t\t\t\t\t\t\t<ListItem\n\t\t\t\t\t\t\t\tv-for=\"resource in group.resources\"\n\t\t\t\t\t\t\t\t:key=\"resource.id\"\n\t\t\t\t\t\t\t\t:href=\"resource.url\"\n\t\t\t\t\t\t\t\t:name=\"resource.label\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t\t\t\t\t\t<div v-if=\"resource.iconSvg\" class=\"resource__icon\" v-html=\"resource.iconSvg\" />\n\t\t\t\t\t\t\t\t\t<img v-else-if=\"resource.iconURL\" :src=\"resource.iconURL\" class=\"resource__icon\">\n\t\t\t\t\t\t\t\t\t<FileDocumentOutline v-else :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Members Section -->\n\t\t\t\t\t<div class=\"circle-details-section\">\n\t\t\t\t\t\t<div class=\"member-section-layout\">\n\t\t\t\t\t\t\t<div class=\"section-header\">\n\t\t\t\t\t\t\t\t<ContentHeading>{{ t('contacts', 'Members') }}</ContentHeading>\n\t\t\t\t\t\t\t\t<NcButton v-if=\"circle.canManageMembers\" variant=\"tertiary\" @click=\"addMembers\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<AccountPlusIcon :size=\"20\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t{{ t('contacts', 'Add') }}\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<MemberList ref=\"memberList\" :list=\"members\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport axios from '@nextcloud/axios'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { generateOcsUrl, generateUrl } from '@nextcloud/router'\nimport {\n\tNcAvatar as Avatar,\n\tNcListItem as ListItem,\n\tNcActionButton,\n\tNcActions,\n\tNcButton,\n\tNcEmptyContent,\n\tNcLoadingIcon,\n\tNcPopover,\n\tNcTextArea,\n\tNcTextField,\n\tNcUserBubble as UserBubble,\n} from '@nextcloud/vue'\nimport { useElementSize } from '@vueuse/core'\nimport { reactive, ref } from 'vue'\nimport IconAccountGroup from 'vue-material-design-icons/AccountGroupOutline.vue'\nimport AccountPlusIcon from 'vue-material-design-icons/AccountPlusOutline.vue'\nimport BookOpenPageVariantIcon from 'vue-material-design-icons/BookOpenPageVariant.vue'\nimport CalendarIcon from 'vue-material-design-icons/CalendarOutline.vue'\nimport CheckIcon from 'vue-material-design-icons/Check.vue'\nimport CogIcon from 'vue-material-design-icons/CogOutline.vue'\nimport CopyIcon from 'vue-material-design-icons/ContentCopy.vue'\nimport FileDocumentOutline from 'vue-material-design-icons/FileDocumentOutline.vue'\nimport FolderIcon from 'vue-material-design-icons/FolderOutline.vue'\nimport LoginIcon from 'vue-material-design-icons/Login.vue'\nimport LogoutIcon from 'vue-material-design-icons/Logout.vue'\nimport MessageIcon from 'vue-material-design-icons/MessageOutline.vue'\nimport PencilIcon from 'vue-material-design-icons/PencilOutline.vue'\nimport ViewDashboardIcon from 'vue-material-design-icons/ViewDashboard.vue'\nimport CircleSettings from './CircleDetails/CircleSettings.vue'\nimport ContentHeading from './CircleDetails/ContentHeading.vue'\nimport TeamResourceButton from './CircleDetails/TeamResourceButton.vue'\nimport MemberList from './MemberList/MemberList.vue'\nimport CircleActionsMixin from '../mixins/CircleActionsMixin.js'\nimport { CircleEdit, editCircle } from '../services/circles.ts'\n\nexport default {\n\tname: 'CircleDetails',\n\n\tcomponents: {\n\t\tAccountPlusIcon,\n\t\tAvatar,\n\t\tNcButton,\n\t\tContentHeading,\n\t\tListItem,\n\t\tCogIcon,\n\t\tCopyIcon,\n\t\tIconAccountGroup,\n\t\tFileDocumentOutline,\n\t\tLoginIcon,\n\t\tLogoutIcon,\n\t\tMemberList,\n\t\tCircleSettings,\n\t\tTeamResourceButton,\n\t\tNcEmptyContent,\n\t\tNcLoadingIcon,\n\t\tNcPopover,\n\t\tPencilIcon,\n\t\tUserBubble,\n\t\tNcTextField,\n\t\tNcTextArea,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tFolderIcon,\n\t\tMessageIcon,\n\t\tCalendarIcon,\n\t\tViewDashboardIcon,\n\t\tBookOpenPageVariantIcon,\n\t\tCheckIcon,\n\t},\n\n\tmixins: [CircleActionsMixin],\n\n\tsetup() {\n\t\tconst avatarList = ref()\n\t\tconst { width } = useElementSize(avatarList)\n\t\treturn { avatarList, width }\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tactive: false,\n\t\t\tisEditing: false,\n\t\t\tshowMembersModal: false,\n\t\t\tloading: false,\n\t\t\tloadingJoin: false,\n\t\t\tloadingLeave: false,\n\t\t\tloadingName: false,\n\t\t\tloadingDescription: false,\n\t\t\tisSettingsPopoverShown: false,\n\n\t\t\tresources: [],\n\t\t\toriginalDisplayName: '',\n\t\t\toriginalDescription: '',\n\n\t\t\t// Resource creation\n\t\t\tactivePopover: null,\n\t\t\tresourceInputs: reactive({}),\n\t\t\tpopoverBoundary: null,\n\t\t\tcreatedCalendar: null,\n\t\t\tshowCalendarSuccessNotification: false,\n\t\t\tcreatedCalendarName: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tdescriptionPlaceholder() {\n\t\t\tif (this.circle.description.trim() === '') {\n\t\t\t\treturn t('contacts', 'There is no description for this team')\n\t\t\t}\n\t\t\treturn t('contacts', 'Enter a description for the team')\n\t\t},\n\n\t\tisEmptyDescription() {\n\t\t\treturn this.circle.description.trim() === ''\n\t\t},\n\n\t\tshowDescription() {\n\t\t\tif (this.circle.isOwner) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn !this.isEmptyDescription\n\t\t},\n\n\t\tmembers() {\n\t\t\treturn Object.values(this.$store.getters.getCircle(this.circle.id)?.members || [])\n\t\t},\n\n\t\tcircleUrl() {\n\t\t\treturn window.location.href\n\t\t},\n\n\t\tcanManageTeam() {\n\t\t\treturn (this.circle.isOwner || this.circle.isAdmin) && !this.circle.isPersonal\n\t\t},\n\n\t\tteamHasCollective() {\n\t\t\treturn this.resourcesForProvider('collectives').length > 0\n\t\t},\n\n\t\tmaxMembers() {\n\t\t\t// How many avatars (default-clickable-area + 12px gap) fit?\n\t\t\tconst avatarWidth = parseInt(window.getComputedStyle(document.body).getPropertyValue('--default-clickable-area')) + 12\n\t\t\tconst maxMembers = Math.floor(this.width / avatarWidth)\n\t\t\treturn (this.members.length > maxMembers)\n\t\t\t\t? maxMembers - 1\n\t\t\t\t: maxMembers\n\t\t},\n\n\t\tmemberLimit() {\n\t\t\treturn Math.min(this.members.length, this.maxMembers)\n\t\t},\n\n\t\tmembersLimited() {\n\t\t\treturn this.members.slice(0, this.memberLimit)\n\t\t},\n\n\t\thasExtraMembers() {\n\t\t\treturn this.members.length > this.maxMembers\n\t\t},\n\n\t\tgroupedResources() {\n\t\t\treturn this.resources.reduce((acc, resource) => {\n\t\t\t\tconst providerId = resource.provider.id\n\t\t\t\tif (!acc[providerId]) {\n\t\t\t\t\tacc[providerId] = {\n\t\t\t\t\t\tname: resource.provider.name,\n\t\t\t\t\t\tresources: [],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tacc[providerId].resources.push(resource)\n\t\t\t\treturn acc\n\t\t\t}, {})\n\t\t},\n\n\t\tresourcesForProvider() {\n\t\t\treturn (providerId) => {\n\t\t\t\treturn this.resources?.filter((res) => res.provider.id === providerId) ?? []\n\t\t\t}\n\t\t},\n\n\t\tresourceTypes() {\n\t\t\tconst enabledApps = window.OC?.appswebroots || {}\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: 'folder',\n\t\t\t\t\tlabel: t('contacts', 'Folder'),\n\t\t\t\t\tinputLabel: t('contacts', 'New folder'),\n\t\t\t\t\tplaceholder: t('contacts', 'Folder name'),\n\t\t\t\t\thelperText: t('contacts', 'This will create a regular folder shared with the team. To create a Team Folder, please contact your {productName} administrator', { productName: OC.theme.name }),\n\t\t\t\t\ticon: 'FolderIcon',\n\t\t\t\t\tapiPath: 'files',\n\t\t\t\t\tenabled: enabledApps.files !== undefined,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'talk',\n\t\t\t\t\tlabel: t('contacts', 'Talk conversation'),\n\t\t\t\t\tinputLabel: t('contacts', 'New Talk conversation'),\n\t\t\t\t\tplaceholder: t('contacts', 'Conversation name'),\n\t\t\t\t\ticon: 'MessageIcon',\n\t\t\t\t\tapiPath: 'spreed',\n\t\t\t\t\tenabled: enabledApps.spreed !== undefined,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'collective',\n\t\t\t\t\tlabel: t('contacts', 'Collective'),\n\t\t\t\t\tinputLabel: null,\n\t\t\t\t\tplaceholder: null,\n\t\t\t\t\ticon: 'BookOpenPageVariantIcon',\n\t\t\t\t\tapiPath: 'collectives',\n\t\t\t\t\tenabled: enabledApps.collectives !== undefined && !this.teamHasCollective,\n\t\t\t\t\tnoInput: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'calendar',\n\t\t\t\t\tlabel: t('contacts', 'Calendar'),\n\t\t\t\t\tinputLabel: t('contacts', 'New calendar'),\n\t\t\t\t\tplaceholder: t('contacts', 'Calendar name'),\n\t\t\t\t\ticon: 'CalendarIcon',\n\t\t\t\t\tapiPath: 'calendar',\n\t\t\t\t\tenabled: enabledApps.calendar !== undefined,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'deck',\n\t\t\t\t\tlabel: t('contacts', 'Deck board'),\n\t\t\t\t\tinputLabel: t('contacts', 'New Deck board'),\n\t\t\t\t\tplaceholder: t('contacts', 'Board name'),\n\t\t\t\t\ticon: 'ViewDashboardIcon',\n\t\t\t\t\tapiPath: 'deck',\n\t\t\t\t\tenabled: enabledApps.deck !== undefined,\n\t\t\t\t},\n\t\t\t].filter((resource) => resource.enabled)\n\t\t},\n\t},\n\n\twatch: {\n\t\t'circle.id': {\n\t\t\thandler() {\n\t\t\t\tthis.fetchTeamResources()\n\t\t\t},\n\n\t\t\timmediate: true,\n\t\t},\n\t},\n\n\tmethods: {\n\t\taddMembers() {\n\t\t\tthis.$refs.memberList.onShowPicker(this.circle.id)\n\t\t},\n\n\t\tsetActivePopover(resourceId, isOpen) {\n\t\t\tthis.activePopover = isOpen ? resourceId : null\n\t\t},\n\n\t\tupdateResourceInput(resourceId, value) {\n\t\t\tthis.resourceInputs[resourceId] = value\n\t\t},\n\n\t\tasync handleResourceCreation({ resourceType, name }) {\n\t\t\ttry {\n\t\t\t\tlet resourceId\n\n\t\t\t\tswitch (resourceType.id) {\n\t\t\t\t\tcase 'folder': {\n\t\t\t\t\t\tconst folderPath = `/remote.php/dav/files/${getCurrentUser().uid}/${name}`\n\t\t\t\t\t\tawait axios.request({\n\t\t\t\t\t\t\tmethod: 'MKCOL',\n\t\t\t\t\t\t\turl: folderPath,\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Content-Type': 'application/xml',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t\tresourceId = name\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'talk': {\n\t\t\t\t\t\tconst talkUrl = generateOcsUrl('/apps/spreed/api/v4/room')\n\t\t\t\t\t\tconst talkResponse = await axios.post(talkUrl, {\n\t\t\t\t\t\t\troomName: name,\n\t\t\t\t\t\t\troomType: 2,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tresourceId = talkResponse.data.ocs.data.token\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'collective': {\n\t\t\t\t\t\tconst collectiveName = this.circle.sanitizedName || this.circle.name || this.circle.displayName\n\n\t\t\t\t\t\tif (!collectiveName) {\n\t\t\t\t\t\t\tthrow new Error('Cannot create collective: team has no valid name')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst collectiveUrl = generateOcsUrl('/apps/collectives/api/v1.0/collectives')\n\t\t\t\t\t\tconst collectiveResponse = await axios.post(collectiveUrl, {\n\t\t\t\t\t\t\tname: collectiveName,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tresourceId = collectiveResponse.data.ocs.data.collective.id\n\n\t\t\t\t\t\tif (!resourceId) {\n\t\t\t\t\t\t\tthrow new Error('Failed to get collective ID from creation response')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'calendar': {\n\t\t\t\t\t\tconst DavClient = (await import('@nextcloud/cdav-library')).default\n\t\t\t\t\t\tconst { generateRemoteUrl } = await import('@nextcloud/router')\n\n\t\t\t\t\t\tconst client = new DavClient({\n\t\t\t\t\t\t\trootUrl: generateRemoteUrl('dav'),\n\t\t\t\t\t\t\tdefaultHeaders: {\n\t\t\t\t\t\t\t\t'X-NC-CalDAV-Webcal-Caching': 'On',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t\tawait client.connect({ enableCalDAV: true })\n\n\t\t\t\t\t\tconst calendarHome = client.calendarHomes[0]\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst davCalendar = await calendarHome.createCalendarCollection(name, '#0082c9', ['VEVENT', 'VTODO'], 0)\n\t\t\t\t\t\t\tthis.createdCalendar = davCalendar\n\t\t\t\t\t\t\tresourceId = davCalendar.url\n\t\t\t\t\t\t} catch (calendarError) {\n\t\t\t\t\t\t\t// Since cdav-library doesn't expose HTTP status properly,\n\t\t\t\t\t\t\t// assume MKCOL errors on calendar paths are name conflicts (405)\n\t\t\t\t\t\t\tconsole.error('Calendar creation failed for name:', name)\n\t\t\t\t\t\t\tthrow new Error(`CALENDAR_EXISTS:${name}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'deck': {\n\t\t\t\t\t\tshowError(t('contacts', 'Deck app is not installed. Please install it to create team boards.'))\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tshowError(t('contacts', 'Unknown resource type'))\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait this.shareResourceWithTeam(resourceType, resourceId)\n\n\t\t\t\tthis.resourceInputs[resourceType.id] = ''\n\t\t\t\tthis.activePopover = null\n\t\t\t\tif (resourceType.id === 'calendar') {\n\t\t\t\t\tthis.createdCalendar = null\n\t\t\t\t\tshowSuccess(t('contacts', 'Team calendar \"{resourceName}\" created and shared with team', {\n\t\t\t\t\t\tresourceName: name,\n\t\t\t\t\t}))\n\t\t\t\t\tthis.createdCalendarName = name\n\t\t\t\t\tthis.showCalendarSuccessNotification = true\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.showCalendarSuccessNotification = false\n\t\t\t\t\t}, 10000)\n\t\t\t\t} else {\n\t\t\t\t\tshowSuccess(t('contacts', '{resourceType} \"{resourceName}\" created and shared with team', {\n\t\t\t\t\t\tresourceType: resourceType.label,\n\t\t\t\t\t\tresourceName: name,\n\t\t\t\t\t}))\n\t\t\t\t\tthis.fetchTeamResources()\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Failed to create resource:', error)\n\n\t\t\t\t// Check for calendar exists error\n\t\t\t\tif (error.message && error.message.startsWith('CALENDAR_EXISTS:')) {\n\t\t\t\t\tconst calendarName = error.message.replace('CALENDAR_EXISTS:', '')\n\t\t\t\t\tshowError(t('contacts', 'A calendar named \"{name}\" already exists. Please choose a different name.', {\n\t\t\t\t\t\tname: calendarName,\n\t\t\t\t\t}))\n\t\t\t\t} else {\n\t\t\t\t\tshowError(t('contacts', 'Failed to create {resourceType}: {error}', {\n\t\t\t\t\t\tresourceType: resourceType.label.toLowerCase(),\n\t\t\t\t\t\terror: error.response?.data?.ocs?.data?.message || error.response?.data?.message || error.message,\n\t\t\t\t\t}))\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tasync shareResourceWithTeam(resourceType, resourceId) {\n\t\t\tswitch (resourceType.id) {\n\t\t\t\tcase 'folder': {\n\t\t\t\t\tconst shareUrl = generateOcsUrl('/apps/files_sharing/api/v1/shares')\n\t\t\t\t\tawait axios.post(shareUrl, {\n\t\t\t\t\t\tpath: `/${resourceId}`,\n\t\t\t\t\t\tshareType: 7,\n\t\t\t\t\t\tshareWith: this.circle.id,\n\t\t\t\t\t\tpermissions: 31,\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase 'talk': {\n\t\t\t\t\tconst participantUrl = generateOcsUrl(`/apps/spreed/api/v4/room/${resourceId}/participants`)\n\t\t\t\t\tawait axios.post(participantUrl, {\n\t\t\t\t\t\tsource: 'circles',\n\t\t\t\t\t\tnewParticipant: this.circle.id,\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase 'collective': {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase 'calendar': {\n\t\t\t\t\tif (!this.createdCalendar || !this.createdCalendar.share) {\n\t\t\t\t\t\tthrow new Error('No calendar object available for sharing')\n\t\t\t\t\t}\n\n\t\t\t\t\tconst circleUri = `principal:principals/circles/${this.circle.id}`\n\t\t\t\t\tawait this.createdCalendar.share(circleUri)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tonLeave() {\n\t\t\tthis.isSettingsPopoverShown = false\n\t\t\tthis.confirmLeaveCircle()\n\t\t},\n\n\t\tonDelete() {\n\t\t\tthis.isSettingsPopoverShown = false\n\t\t\tthis.confirmDeleteCircle()\n\t\t},\n\n\t\tstartEditing() {\n\t\t\tthis.originalDisplayName = this.circle.displayName\n\t\t\tthis.originalDescription = this.circle.description\n\t\t\tthis.isEditing = true\n\t\t},\n\n\t\tcancelEditing() {\n\t\t\tthis.circle.displayName = this.originalDisplayName\n\t\t\tthis.circle.description = this.originalDescription\n\t\t\tthis.isEditing = false\n\t\t},\n\n\t\tasync fetchTeamResources() {\n\t\t\tconst response = await axios.get(generateOcsUrl(`/teams/${this.circle.id}/resources`))\n\t\t\tthis.resources = response.data.ocs.data.resources\n\t\t\tconsole.debug('Team resources', this.resources)\n\t\t},\n\n\t\t/**\n\t\t * Autocomplete @mentions on the description\n\t\t *\n\t\t * @param {string} search the search term\n\t\t * @param {Function} callback callback to be called with results array\n\t\t */\n\t\tonAutocomplete(search, callback) {\n\t\t\t// TODO: implement autocompletion. Disabled for now\n\n\t\t\tcallback([])\n\t\t},\n\n\t\tasync saveChanges() {\n\t\t\tconst errors = []\n\n\t\t\t// Save name and description sequentially to avoid race conditions\n\t\t\t// Save name if changed\n\t\t\tif (this.circle.displayName !== this.originalDisplayName) {\n\t\t\t\tthis.loadingName = true\n\t\t\t\ttry {\n\t\t\t\t\tawait editCircle(this.circle.id, CircleEdit.Name, this.circle.displayName)\n\t\t\t\t\tthis.originalDisplayName = this.circle.displayName\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Unable to edit name', this.circle.displayName, error)\n\t\t\t\t\terrors.push('name')\n\t\t\t\t\tthis.circle.displayName = this.originalDisplayName\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingName = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Save description if changed\n\t\t\tif (this.circle.description !== this.originalDescription) {\n\t\t\t\tthis.loadingDescription = true\n\t\t\t\ttry {\n\t\t\t\t\tawait editCircle(this.circle.id, CircleEdit.Description, this.circle.description)\n\t\t\t\t\tthis.originalDescription = this.circle.description\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Unable to edit team description', this.circle.description, error)\n\t\t\t\t\terrors.push('description')\n\t\t\t\t\tthis.circle.description = this.originalDescription\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingDescription = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Show error if any saves failed\n\t\t\tif (errors.length > 0) {\n\t\t\t\tconst errorFields = errors.join(' and ')\n\t\t\t\tshowError(t('contacts', 'An error happened while saving {fields}', { fields: errorFields }))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Only exit editing mode if all saves succeeded\n\t\t\tthis.isEditing = false\n\t\t},\n\n\t\topenCalendarApp() {\n\t\t\twindow.open(generateUrl('/apps/calendar/'), '_blank')\n\t\t\tthis.showCalendarSuccessNotification = false\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.circle-details-container {\n\tpadding-inline: 20px;\n\tmargin-top: 1rem;\n\n\t.circle-details-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr;\n\t\tgap: 36px;\n\t\tmax-width: 800px;\n\t\tmargin-inline: auto;\n\n\t\t&.is-editing {\n\t\t\t.circle-name-wrapper,\n\t\t\t.circle-description-wrapper {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n\t\t.circle-details__header-wrapper {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: auto 1fr;\n\t\t\talign-items: center;\n\t\t\tgap: 24px;\n\t\t}\n\n\t\t.circle-details__main-content {\n\t\t\tmargin-inline-start: 99px;\n\n\t\t\t@media (max-width: 768px) {\n\t\t\t\tmargin-inline-start: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t.circle-details__header {\n\t\tbackground-color: transparent;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: flex-start;\n\t\tgap: 2px;\n\t\twidth: 100%;\n\n\t\t.circle-description-wrapper {\n\t\t\tmargin-bottom: 4px;\n\t\t}\n\n\t\t.circle-name {\n\t\t\tfont-size: 1.5rem;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: 0;\n\t\t\tmargin-bottom: 2px;\n\t\t}\n\n\t\t.subtitle {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\n\t\t.actions {\n\t\t\tdisplay: flex;\n\t\t\tgap: 8px;\n\t\t}\n\t}\n\n\t.circle-details-section {\n\t\tmargin-bottom: 2rem;\n\t\tmax-width: 500px;\n\n\t\t.member-section-layout {\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 100%;\n\t\t\tmax-width: 500px; // Adjust this value to match the grid width if necessary\n\t\t}\n\n\t\t.section-header {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t\twidth: 100%;\n\t\t\tmargin-bottom: 4px;\n\n\t\t\t:deep(h2),\n\t\t\t:deep(h3) {\n\t\t\t\tline-height: 2px;\n\t\t\t\tmargin: 4px 0 8px 0;\n\t\t\t}\n\t\t}\n\n\t\t.item-list {\n\t\t\tlist-style: none;\n\t\t\tpadding: 0;\n\t\t\tmargin: 0;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px;\n\t\t\tmax-height: 300px;\n\t\t\toverflow-y: auto;\n\n\t\t\t// Remove left padding added in ListItem (external component)\n\t\t\t:deep(.list-item__wrapper) {\n\t\t\t\tpadding-inline-start: 0;\n\t\t\t}\n\n\t\t\t:deep(.resource__icon) {\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\ttext-align: center;\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\tsvg {\n\t\t\t\t\twidth: 20px;\n\t\t\t\t\theight: 20px;\n\t\t\t\t\tfill: currentColor;\n\t\t\t\t\tpath, rect, circle, polygon, polyline, ellipse, line {\n\t\t\t\t\t\tfill: currentColor;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t\twidth: 32px;\n\t\t\t\t\theight: 32px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.avatar-list {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tflex-grow: 1;\n\t\t\tgap: 12px;\n\t\t}\n\n\t\t:deep(.app-content-list) {\n\t\t\tmax-width: 100%;\n\t\t\tborder: 0;\n\t\t}\n\t}\n\n\t.resource-shortcuts {\n\t\tmargin-top: calc(var(--default-grid-baseline) * 3);\n\n\t\t&__title {\n\t\t\tfont-size: 1.3rem;\n\t\t\tfont-weight: 600;\n\t\t\tmargin: 0 0 calc(var(--default-grid-baseline) * 2) 0;\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t&__buttons {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: nowrap;\n\t\t\tgap: calc(var(--default-grid-baseline) * 2);\n\t\t\talign-items: center;\n\t\t\toverflow-x: auto;\n\t\t}\n\t}\n\n}\n\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"usergroup-member__container\">\n\t\t<NcAvatar :user=\"member\" :size=\"32\" />\n\t\t<div class=\"usergroup-member__info\">\n\t\t\t<div v-if=\"!loading\" class=\"usergroup-member__name\">\n\t\t\t\t{{ displayName }}\n\t\t\t</div>\n\t\t\t<div class=\"usergroup-member__role\">\n\t\t\t\t{{ t('contacts', 'Member') }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { NcAvatar } from '@nextcloud/vue'\n\nexport default {\n\tname: 'UserGroupMember',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t},\n\n\tprops: {\n\t\tmember: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: true,\n\t\t\tdisplayName: '',\n\t\t}\n\t},\n\n\tmounted() {\n\t\tthis.fetchMemberInfo()\n\t},\n\n\tmethods: {\n\t\tasync fetchMemberInfo() {\n\t\t\tconst user = encodeURIComponent(this.member)\n\t\t\tconst { data } = await axios.post(generateUrl('contactsmenu/findOne'), `shareType=0&shareWith=${user}`)\n\t\t\tthis.displayName = data.fullName\n\t\t\tthis.loading = false\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.usergroup-member {\n\t&__container {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 8px;\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-color: var(--color-background-soft);\n\t}\n\n\t&__info {\n\t\tflex-grow: 1;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow: hidden;\n\t}\n\n\t&__name {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\n\t&__role {\n\t\tfont-size: 0.75rem;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { ROUTE_USER_GROUP } from './constants.ts'\n\nexport default class UserGroup {\n\tprivate _data: object\n\tprivate _members: string[]\n\n\tconstructor(group: object) {\n\t\tthis._data = group\n\t\tthis._members = []\n\t}\n\n\taddMember(member: object) {\n\t\tif (!this._members.includes(member)) {\n\t\t\tthis._members.push(member)\n\t\t}\n\t}\n\n\tget id(): string {\n\t\treturn this._data.id\n\t}\n\n\tget displayName(): string {\n\t\treturn this._data.displayname\n\t}\n\n\tget population(): number {\n\t\treturn this._data.usercount\n\t}\n\n\tget canLeave(): boolean {\n\t\t// users can't leave groups\n\t\treturn false\n\t}\n\n\tget isOwner(): boolean {\n\t\treturn false\n\t}\n\n\tget isMember(): boolean {\n\t\t// Only the groups that a user has been added to will be visible to them\n\t\treturn true\n\t}\n\n\tget canManageMembers(): boolean {\n\t\treturn false\n\t}\n\n\tget canJoin(): boolean {\n\t\treturn false\n\t}\n\n\tget members(): string[] {\n\t\treturn this._members\n\t}\n\n\tget router(): object {\n\t\treturn {\n\t\t\tname: 'user_group',\n\t\t\tparams: { selectedUserGroup: this.id, selectedGroup: ROUTE_USER_GROUP },\n\t\t}\n\t}\n\n\ttoString(): string {\n\t\treturn this.displayName\n\t}\n}\n","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"usergroup-details-container\">\n\t\t<div class=\"usergroup-details-grid\">\n\t\t\t<div class=\"usergroup-details__header-wrapper\">\n\t\t\t\t<div class=\"usergroup-details-grid__avatar\">\n\t\t\t\t\t<NcAvatar\n\t\t\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t\t\t:display-name=\"userGroup.displayName\"\n\t\t\t\t\t\t:is-no-user=\"true\"\n\t\t\t\t\t\t:size=\"75\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"usergroup-details__header\">\n\t\t\t\t\t<div class=\"usergroup-name-wrapper\">\n\t\t\t\t\t\t<h2 class=\"usergroup-name\">\n\t\t\t\t\t\t\t<span :title=\"userGroup.displayName\">{{ userGroup.displayName }}</span>\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t<div class=\"usergroup-details__subtitle\">\n\t\t\t\t\t\t\t{{ t('contacts', 'This is a read-only group managed by administrators. Group members can only view this group.') }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t\t<NcButton variant=\"secondary\" @click.stop.prevent=\"copyToClipboard(userGroupUrl)\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<CopyIcon :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('contacts', 'Copy link') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"usergroup-details__main-content\">\n\t\t\t\t<h3 class=\"usergroup-details__content-heading\">\n\t\t\t\t\t{{ t('contacts', 'Members') }}\n\t\t\t\t</h3>\n\t\t\t\t<div class=\"usergroup-details__member-grid\">\n\t\t\t\t\t<UserGroupMember\n\t\t\t\t\t\tv-for=\"member in userGroup.members\"\n\t\t\t\t\t\t:key=\"`user-group-member-${member}`\"\n\t\t\t\t\t\t:member=\"member\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { NcAvatar, NcButton } from '@nextcloud/vue'\nimport CopyIcon from 'vue-material-design-icons/ContentCopy.vue'\nimport UserGroupMember from './UserGroupDetails/UserGroupMember.vue'\nimport CopyToClipboardMixin from '../mixins/CopyToClipboardMixin.js'\nimport UserGroup from '../models/userGroup.ts'\n\nexport default {\n\tname: 'UserGroupDetails',\n\n\tcomponents: {\n\t\tCopyIcon,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tUserGroupMember,\n\t},\n\n\tmixins: [CopyToClipboardMixin],\n\n\tprops: {\n\t\tuserGroup: {\n\t\t\ttype: UserGroup,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tuserGroupUrl() {\n\t\t\treturn window.location.href\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.usergroup-details {\n\t&-container {\n\t\tpadding-inline: 20px;\n\t\tmargin-top: 1rem;\n\t}\n\n\t&-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr;\n\t\tgap: 36px;\n\t\tmax-width: 800px;\n\t\tmargin-inline: auto;\n\n\t\t.usergroup-name-wrapper {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t&__header-wrapper {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: auto 1fr;\n\t\talign-items: center;\n\t\tgap: 24px;\n\t}\n\n\t&__header {\n\t\tbackground-color: transparent;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: flex-start;\n\t\tgap: 2px;\n\t\twidth: 100%;\n\n\t\t.usergroup-name {\n\t\t\tfont-size: 1.5rem;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: 0px;\n\t\t\tmargin-bottom: 2px;\n\t\t}\n\t}\n\n\t&__subtitle {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-bottom: 8px;\n\t}\n\n\t&__main-content {\n\t\tmargin-inline-start: 99px;\n\n\t\t@media (max-width: 768px) {\n\t\t\tmargin-inline-start: 0px;\n\t\t}\n\t}\n\n\t&__content-heading {\n\t\tfont-weight: bold;\n\t\tfont-size: 1.2rem;\n\t\tline-height: 0px;\n\t\tmargin-top: 4px;\n\t\tmargin-bottom: 8px;\n\t}\n\n\t&__member-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(2, 1fr);\n\t\tgap: 8px;\n\t\tmax-width: 500px;\n\n\t\t@media (max-width: 768px) {\n\t\t\tgrid-template-columns: 1fr;\n\t\t}\n\n\t\t@media (min-width: 1200px) {\n\t\t\tgrid-template-columns: repeat(3, 1fr);\n\t\t}\n\t}\n\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nexport async function getUserGroups(userId: string): string[] {\n\tconst response = await axios.get(generateOcsUrl('/cloud/users/{userId}/groups/details', { userId }))\n\treturn response.data.ocs.data.groups\n}\n\nexport async function getUserGroupMembers(groupId: string): string[] {\n\tconst response = await axios.get(generateOcsUrl('/cloud/groups/{groupId}/users', { groupId }))\n\treturn response.data.ocs.data.users\n}\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { defineStore } from 'pinia'\nimport UserGroup from '../models/userGroup.ts'\nimport logger from '../services/logger.js'\nimport { getUserGroupMembers, getUserGroups } from '../services/userGroup.ts'\n\nexport default defineStore('userGroup', {\n\tstate: () => ({\n\t\tuserGroups: {},\n\t}),\n\n\tgetters: {\n\t\tuserGroupList: (state) => Object.values(state.userGroups),\n\t\tgetUserGroup: (state) => (groupId: string) => state.userGroups[groupId],\n\t},\n\n\tactions: {\n\t\tasync getUserGroups(userId: string): Promise<object[]> {\n\t\t\tconst userGroups = await getUserGroups(userId)\n\n\t\t\tuserGroups.forEach((group) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst newUserGroup = new UserGroup(group)\n\t\t\t\t\tthis.userGroups[newUserGroup.id] = newUserGroup\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error('Failed to add group', { group, error })\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn userGroups\n\t\t},\n\t\tasync getUserGroupMembers(groupId: string): Promise<string[]> {\n\t\t\tconst members = await getUserGroupMembers(groupId)\n\n\t\t\tmembers.forEach((member) => {\n\t\t\t\tthis.getUserGroup(groupId).addMember(member)\n\t\t\t})\n\n\t\t\treturn members\n\t\t},\n\t},\n})\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<AppContent>\n\t\t<EmptyContent v-if=\"!circle && !userGroup\" :name=\"t('contacts', 'Please select a team')\">\n\t\t\t<template #icon>\n\t\t\t\t<AccountGroup :size=\"20\" />\n\t\t\t</template>\n\t\t</EmptyContent>\n\n\t\t<EmptyContent v-else-if=\"loading\" class=\"empty-content\" :name=\"t('contacts', 'Loading team…')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconLoading :size=\"20\" />\n\t\t\t</template>\n\t\t</EmptyContent>\n\n\t\t<UserGroupDetails v-else-if=\"userGroup\" :user-group=\"userGroup\" />\n\t\t<CircleDetails v-else :circle=\"circle\" />\n\t</AppContent>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport {\n\tNcAppContent as AppContent,\n\tNcEmptyContent as EmptyContent,\n\tNcLoadingIcon as IconLoading,\n} from '@nextcloud/vue'\nimport { mapStores } from 'pinia'\nimport AccountGroup from 'vue-material-design-icons/AccountGroupOutline.vue'\nimport CircleDetails from '../CircleDetails.vue'\nimport UserGroupDetails from '../UserGroupDetails.vue'\nimport IsMobileMixin from '../../mixins/IsMobileMixin.ts'\nimport RouterMixin from '../../mixins/RouterMixin.js'\nimport useUserGroupStore from '../../store/userGroup.ts'\n\nexport default {\n\tname: 'CircleContent',\n\n\tcomponents: {\n\t\tAppContent,\n\t\tCircleDetails,\n\t\tEmptyContent,\n\t\tAccountGroup,\n\t\tIconLoading,\n\t\tUserGroupDetails,\n\t},\n\n\tmixins: [IsMobileMixin, RouterMixin],\n\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingList: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// store variables\n\t\tcircles() {\n\t\t\treturn this.$store.getters.getCircles\n\t\t},\n\n\t\tcircle() {\n\t\t\treturn this.$store.getters.getCircle(this.selectedCircle)\n\t\t},\n\n\t\tuserGroup() {\n\t\t\treturn this.userGroupStore.getUserGroup(this.selectedUserGroup)\n\t\t},\n\n\t\tmembers() {\n\t\t\treturn Object.values(this.circle?.members || [])\n\t\t},\n\n\t\t/**\n\t\t * Is the current circle empty\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEmptyCircle() {\n\t\t\treturn this.members.length === 0\n\t\t},\n\n\t\t...mapStores(useUserGroupStore),\n\t},\n\n\twatch: {\n\t\tcircle(newCircle) {\n\t\t\tif (newCircle?.id) {\n\t\t\t\tthis.fetchCircleMembers(newCircle.id)\n\t\t\t}\n\t\t},\n\n\t\tuserGroup(newUserGroup) {\n\t\t\tif (newUserGroup?.id) {\n\t\t\t\tthis.fetchUserGroupMembers(newUserGroup.id)\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.circle?.id) {\n\t\t\tthis.fetchCircleMembers(this.circle.id)\n\t\t}\n\n\t\tif (this.userGroup?.id) {\n\t\t\tthis.fetchUserGroupMembers(this.userGroup.id)\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync fetchCircleMembers(circleId) {\n\t\t\tthis.loadingList = true\n\t\t\tthis.logger.debug('Fetching members for', { circleId })\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('getCircleMembers', circleId)\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(t('contacts', 'There was an error fetching the member list'))\n\t\t\t} finally {\n\t\t\t\tthis.loadingList = false\n\t\t\t}\n\t\t},\n\n\t\tasync fetchUserGroupMembers(userGroupId) {\n\t\t\tthis.loadingList = true\n\n\t\t\ttry {\n\t\t\t\tawait this.userGroupStore.getUserGroupMembers(userGroupId)\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(t('contacts', 'There was an error fetching the member list'))\n\t\t\t} finally {\n\t\t\t\tthis.loadingList = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// TODO: replace my button component when available\nbutton {\n\theight: 44px;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tspan {\n\t\tmargin-inline-end: 10px;\n\t}\n}\n\n.empty-content {\n\theight: 100%;\n}\n</style>\n","export function zeroFillFinders(matrix) {\n matrix = structuredClone(matrix);\n const N = matrix.length;\n const zeroPixel = 0;\n for (let i = -3; i <= 3; i++) {\n for (let j = -3; j <= 3; j++) {\n matrix[3 + i][3 + j] = zeroPixel;\n matrix[3 + i][N - 4 + j] = zeroPixel;\n matrix[N - 4 + i][3 + j] = zeroPixel;\n }\n }\n for (let i = 0; i < 8; i++) {\n matrix[7][i] =\n matrix[i][7] =\n matrix[7][N - i - 1] =\n matrix[i][N - 8] =\n matrix[N - 8][i] =\n matrix[N - 1 - i][7] =\n zeroPixel;\n }\n return matrix;\n}\nexport function clearMatrixCenter(matrix, widthPct, heightPct) {\n matrix = structuredClone(matrix);\n const mW = matrix.length;\n const cW = Math.ceil(((mW * widthPct) / 100 + (mW % 2)) / 2) * 2 - (mW % 2);\n const mH = matrix[0]?.length ?? 0;\n const cH = Math.ceil(((mH * heightPct) / 100 + (mH % 2)) / 2) * 2 - (mH % 2);\n const clearStartX = Math.round((mW - cW) / 2);\n const clearStartY = Math.round((mH - cH) / 2);\n for (let x = clearStartX; x < clearStartX + cW; x += 1) {\n for (let y = clearStartY; y < clearStartY + cH; y += 1) {\n matrix[x][y] = 0;\n }\n }\n return matrix;\n}\n//# sourceMappingURL=bitMatrix.js.map","const enc = new TextEncoder();\nconst dec = new TextDecoder();\nexport function encode(inData, parse_url) {\n let str;\n let data;\n if (typeof inData === \"string\" || typeof inData === \"number\") {\n str = `${inData}`;\n data = enc.encode(str);\n }\n else if (Array.isArray(inData)) {\n data = new Uint8Array(inData);\n str = dec.decode(inData);\n }\n else {\n throw new Error(\"Bad data: \" + typeof inData);\n }\n if (/^[0-9]+$/.test(str)) {\n if (data.byteLength > 7089) {\n throw new Error(\"Too much data\");\n }\n return encode_numeric(str);\n }\n if (/^[0-9A-Z \\$%\\*\\+\\.\\/\\:\\-]+$/.test(str)) {\n if (data.byteLength > 4296) {\n throw new Error(\"Too much data\");\n }\n return encode_alphanum(str);\n }\n if (parse_url && /^https?:/i.test(str)) {\n return encode_url(str);\n }\n if (data.byteLength > 2953) {\n throw new Error(\"Too much data\");\n }\n return encode_8bit(new Uint8Array(data));\n}\nfunction pushBits(arr, n, value) {\n for (let bit = 1 << (n - 1); bit; bit >>>= 1) {\n arr.push(bit & value ? 1 : 0);\n }\n}\nfunction encode_8bit(data) {\n const len = data.byteLength;\n const bits = [];\n for (let i = 0; i < len; i++) {\n pushBits(bits, 8, data[i]);\n }\n const res = {};\n let d = [0, 1, 0, 0];\n pushBits(d, 16, len);\n res.data10 = res.data27 = d.concat(bits);\n if (len < 256) {\n let d = [0, 1, 0, 0];\n pushBits(d, 8, len);\n res.data1 = d.concat(bits);\n }\n return res;\n}\nconst ALPHANUM = (function (s) {\n const res = {};\n for (let i = 0; i < s.length; i++) {\n res[s[i]] = i;\n }\n return res;\n})(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\");\nfunction encode_alphanum(str) {\n const len = str.length;\n const bits = [];\n for (let i = 0; i < len; i += 2) {\n let b = 6;\n let n = ALPHANUM[str[i]];\n if (str[i + 1]) {\n b = 11;\n n = n * 45 + ALPHANUM[str[i + 1]];\n }\n pushBits(bits, b, n);\n }\n const res = {};\n let d = [0, 0, 1, 0];\n pushBits(d, 13, len);\n res.data27 = d.concat(bits);\n if (len < 2048) {\n let d = [0, 0, 1, 0];\n pushBits(d, 11, len);\n res.data10 = d.concat(bits);\n }\n if (len < 512) {\n let d = [0, 0, 1, 0];\n pushBits(d, 9, len);\n res.data1 = d.concat(bits);\n }\n return res;\n}\nfunction encode_numeric(str) {\n const len = str.length;\n const bits = [];\n for (let i = 0; i < len; i += 3) {\n const s = str.substr(i, 3);\n const b = Math.ceil((s.length * 10) / 3);\n pushBits(bits, b, parseInt(s, 10));\n }\n const res = {};\n let d = [0, 0, 0, 1];\n pushBits(d, 14, len);\n res.data27 = d.concat(bits);\n if (len < 4096) {\n let d = [0, 0, 0, 1];\n pushBits(d, 12, len);\n res.data10 = d.concat(bits);\n }\n if (len < 1024) {\n let d = [0, 0, 0, 1];\n pushBits(d, 10, len);\n res.data1 = d.concat(bits);\n }\n return res;\n}\nfunction encode_url(str) {\n const slash = str.indexOf(\"/\", 8) + 1 || str.length;\n const res = encode(str.slice(0, slash).toUpperCase(), false);\n if (slash >= str.length) {\n return res;\n }\n const path_res = encode(str.slice(slash), false);\n res.data27 = res.data27.concat(path_res.data27);\n if (res.data10 && path_res.data10) {\n res.data10 = res.data10.concat(path_res.data10);\n }\n if (res.data1 && path_res.data1) {\n res.data1 = res.data1.concat(path_res.data1);\n }\n return res;\n}\n//# sourceMappingURL=encode.js.map","export function calculateEC(msg, ec_len) {\n msg = [].slice.call(msg);\n const poly = generatorPolynomial(ec_len);\n for (let i = 0; i < ec_len; i++)\n msg.push(0);\n while (msg.length > ec_len) {\n if (!msg[0]) {\n msg.shift();\n continue;\n }\n const log_k = log(msg[0]);\n for (let i = 0; i <= ec_len; i++) {\n msg[i] = msg[i] ^ exp(poly[i] + log_k);\n }\n msg.shift();\n }\n return new Uint8Array(msg);\n}\nconst GF256_BASE = 285;\nconst EXP_TABLE = [1];\nconst LOG_TABLE = [];\nfor (let i = 1; i < 256; i++) {\n let n = EXP_TABLE[i - 1] << 1;\n if (n > 255)\n n ^= GF256_BASE;\n EXP_TABLE[i] = n;\n}\nfor (let i = 0; i < 255; i++) {\n LOG_TABLE[EXP_TABLE[i]] = i;\n}\nfunction exp(k) {\n while (k < 0)\n k += 255;\n while (k > 255)\n k -= 255;\n return EXP_TABLE[k];\n}\nfunction log(k) {\n if (k < 1 || k > 255) {\n throw Error(`Bad log(${k})`);\n }\n return LOG_TABLE[k];\n}\nconst POLYNOMIALS = [\n [0],\n [0, 0],\n [0, 25, 1],\n];\nfunction generatorPolynomial(num) {\n if (POLYNOMIALS[num]) {\n return POLYNOMIALS[num];\n }\n const prev = generatorPolynomial(num - 1);\n const res = [];\n res[0] = prev[0];\n for (let i = 1; i <= num; i++) {\n res[i] = log(exp(prev[i]) ^ exp(prev[i - 1] + num - 1));\n }\n POLYNOMIALS[num] = res;\n return res;\n}\n//# sourceMappingURL=errorcode.js.map","export function init(version) {\n const N = (version << 2) + 0b10001;\n return Array(N).fill(null).map(() => Array(N).fill(0));\n}\nexport function fillFinders(matrix) {\n const N = matrix.length;\n for (let i = -3; i <= 3; i++) {\n for (let j = -3; j <= 3; j++) {\n const max = Math.max(i, j);\n const min = Math.min(i, j);\n const pixel = (max == 2 && min >= -2) || (min == -2 && max <= 2)\n ? 128\n : 129;\n matrix[3 + i][3 + j] = pixel;\n matrix[3 + i][N - 4 + j] = pixel;\n matrix[N - 4 + i][3 + j] = pixel;\n }\n }\n for (let i = 0; i < 8; i++) {\n matrix[7][i] =\n matrix[i][7] =\n matrix[7][N - i - 1] =\n matrix[i][N - 8] =\n matrix[N - 8][i] =\n matrix[N - 1 - i][7] =\n 128;\n }\n}\nexport function fillAlignAndTiming(matrix) {\n const N = matrix.length;\n if (N > 21) {\n const len = N - 13;\n let delta = Math.round(len / Math.ceil(len / 28));\n if (delta % 2)\n delta++;\n const res = [];\n for (let p = len + 6; p > 10; p -= delta) {\n res.unshift(p);\n }\n res.unshift(6);\n for (var i = 0; i < res.length; i++) {\n for (let j = 0; j < res.length; j++) {\n const x = res[i];\n const y = res[j];\n if (matrix[x][y])\n continue;\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n const max = Math.max(r, c);\n const min = Math.min(r, c);\n const pixel = (max == 1 && min >= -1) || (min == -1 && max <= 1)\n ? 0x80\n : 0x81;\n matrix[x + r][y + c] = pixel;\n }\n }\n }\n }\n }\n for (var i = 8; i < N - 8; i++) {\n matrix[6][i] = matrix[i][6] = i % 2 ? 0x80 : 0x81;\n }\n}\nexport function fillStub(matrix) {\n const N = matrix.length;\n for (var i = 0; i < 8; i++) {\n if (i != 6) {\n matrix[8][i] = matrix[i][8] = 0x80;\n }\n matrix[8][N - 1 - i] = 0x80;\n matrix[N - 1 - i][8] = 0x80;\n }\n matrix[8][8] = 0x80;\n matrix[N - 8][8] = 0x81;\n if (N < 45)\n return;\n for (var i = N - 11; i < N - 8; i++) {\n for (let j = 0; j < 6; j++) {\n matrix[i][j] = matrix[j][i] = 0x80;\n }\n }\n}\nexport const fillReserved = (function () {\n const FORMATS = Array(32);\n const VERSIONS = Array(40);\n const gf15 = 0x0537;\n const gf18 = 0x1f25;\n const formats_mask = 0x5412;\n for (let format = 0; format < 32; format++) {\n let res = format << 10;\n for (let i = 5; i > 0; i--) {\n if (res >>> (9 + i)) {\n res ^= gf15 << (i - 1);\n }\n }\n FORMATS[format] = (res | (format << 10)) ^ formats_mask;\n }\n for (let version = 7; version <= 40; version++) {\n let res = version << 12;\n for (let i = 6; i > 0; i--) {\n if (res >>> (11 + i)) {\n res ^= gf18 << (i - 1);\n }\n }\n VERSIONS[version] = res | (version << 12);\n }\n const EC_LEVELS = {\n L: 1,\n M: 0,\n Q: 3,\n H: 2,\n };\n return function fillReserved(matrix, ec_level, mask) {\n const N = matrix.length;\n const format = FORMATS[(EC_LEVELS[ec_level] << 3) | mask];\n function F(k) {\n return (format >> k) & 1 ? 0x81 : 0x80;\n }\n for (var i = 0; i < 8; i++) {\n matrix[8][N - 1 - i] = F(i);\n if (i < 6)\n matrix[i][8] = F(i);\n }\n for (var i = 8; i < 15; i++) {\n matrix[N - 15 + i][8] = F(i);\n if (i > 8)\n matrix[8][14 - i] = F(i);\n }\n matrix[7][8] = F(6);\n matrix[8][8] = F(7);\n matrix[8][7] = F(8);\n const version = VERSIONS[(N - 17) / 4];\n if (!version) {\n return;\n }\n function V(k) {\n return (version >> k) & 1 ? 0x81 : 0x80;\n }\n for (var i = 0; i < 6; i++) {\n for (let j = 0; j < 3; j++) {\n matrix[N - 11 + j][i] = matrix[i][N - 11 + j] = V(i * 3 + j);\n }\n }\n };\n})();\nexport const fillData = (function () {\n const MASK_FUNCTIONS = [\n (i, j) => (i + j) % 2 == 0,\n (i, j) => i % 2 == 0,\n (i, j) => j % 3 == 0,\n (i, j) => (i + j) % 3 == 0,\n (i, j) => (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0,\n (i, j) => ((i * j) % 2) + ((i * j) % 3) == 0,\n (i, j) => (((i * j) % 2) + ((i * j) % 3)) % 2 == 0,\n (i, j) => (((i * j) % 3) + ((i + j) % 2)) % 2 == 0,\n ];\n return function fillData(matrix, data, mask) {\n const N = matrix.length;\n let row;\n let col;\n let dir = -1;\n row = col = N - 1;\n const mask_fn = MASK_FUNCTIONS[mask];\n let len = data.blocks[data.blocks.length - 1].length;\n for (var i = 0; i < len; i++) {\n for (var b = 0; b < data.blocks.length; b++) {\n if (data.blocks[b].length <= i) {\n continue;\n }\n put(data.blocks[b][i]);\n }\n }\n len = data.ec_len;\n for (var i = 0; i < len; i++) {\n for (var b = 0; b < data.ec.length; b++) {\n put(data.ec[b][i]);\n }\n }\n if (col > -1) {\n do {\n matrix[row][col] = mask_fn(row, col) ? 1 : 0;\n } while (next());\n }\n function put(byte) {\n for (let mask = 0x80; mask; mask >>= 1) {\n let pixel = !!(mask & byte);\n if (mask_fn(row, col))\n pixel = !pixel;\n matrix[row][col] = pixel ? 1 : 0;\n next();\n }\n }\n function next() {\n do {\n if (col % 2 ^ Number(col < 6)) {\n if ((dir < 0 && row == 0) || (dir > 0 && row == N - 1)) {\n col--;\n dir = -dir;\n }\n else {\n col++;\n row += dir;\n }\n }\n else {\n col--;\n }\n if (col == 6) {\n col--;\n }\n if (col < 0) {\n return false;\n }\n } while (matrix[row][col] & 0xf0);\n return true;\n }\n };\n})();\nexport function calculatePenalty(matrix) {\n const N = matrix.length;\n let penalty = 0;\n for (var i = 0; i < N; i++) {\n var pixel = matrix[i][0] & 1;\n var len = 1;\n for (var j = 1; j < N; j++) {\n var p = matrix[i][j] & 1;\n if (p == pixel) {\n len++;\n continue;\n }\n if (len >= 5) {\n penalty += len - 2;\n }\n pixel = p;\n len = 1;\n }\n if (len >= 5) {\n penalty += len - 2;\n }\n }\n for (var j = 0; j < N; j++) {\n var pixel = matrix[0][j] & 1;\n var len = 1;\n for (var i = 1; i < N; i++) {\n var p = matrix[i][j] & 1;\n if (p == pixel) {\n len++;\n continue;\n }\n if (len >= 5) {\n penalty += len - 2;\n }\n pixel = p;\n len = 1;\n }\n if (len >= 5) {\n penalty += len - 2;\n }\n }\n for (var i = 0; i < N - 1; i++) {\n for (var j = 0; j < N - 1; j++) {\n const s = (matrix[i][j] +\n matrix[i][j + 1] +\n matrix[i + 1][j] +\n matrix[i + 1][j + 1]) &\n 7;\n if (s == 0 || s == 4) {\n penalty += 3;\n }\n }\n }\n function I(k) {\n return matrix[i][j + k] & 1;\n }\n function J(k) {\n return matrix[i + k][j] & 1;\n }\n for (var i = 0; i < N; i++) {\n for (var j = 0; j < N; j++) {\n if (j < N - 6 &&\n I(0) &&\n !I(1) &&\n I(2) &&\n I(3) &&\n I(4) &&\n !I(5) &&\n I(6)) {\n if (j >= 4 && !(I(-4) || I(-3) || I(-2) || I(-1))) {\n penalty += 40;\n }\n if (j < N - 10 && !(I(7) || I(8) || I(9) || I(10))) {\n penalty += 40;\n }\n }\n if (i < N - 6 &&\n J(0) &&\n !J(1) &&\n J(2) &&\n J(3) &&\n J(4) &&\n !J(5) &&\n J(6)) {\n if (i >= 4 && !(J(-4) || J(-3) || J(-2) || J(-1))) {\n penalty += 40;\n }\n if (i < N - 10 && !(J(7) || J(8) || J(9) || J(10))) {\n penalty += 40;\n }\n }\n }\n }\n let numDark = 0;\n for (var i = 0; i < N; i++) {\n for (var j = 0; j < N; j++) {\n if (matrix[i][j] & 1)\n numDark++;\n }\n }\n penalty += 10 * Math.floor(Math.abs(10 - (20 * numDark) / (N * N)));\n return penalty;\n}\nexport function getMatrix(data) {\n const matrix = init(data.version);\n fillFinders(matrix);\n fillAlignAndTiming(matrix);\n fillStub(matrix);\n let penalty = Infinity;\n let bestMask = 0;\n for (let mask = 0; mask < 8; mask++) {\n fillData(matrix, data, mask);\n fillReserved(matrix, data.ec_level, mask);\n const p = calculatePenalty(matrix);\n if (p < penalty) {\n penalty = p;\n bestMask = mask;\n }\n }\n fillData(matrix, data, bestMask);\n fillReserved(matrix, data.ec_level, bestMask);\n return matrix.map((row) => row.map((cell) => (cell & 1)));\n}\n//# sourceMappingURL=matrix.js.map","import { encode } from \"./encode.js\";\nimport { calculateEC } from \"./errorcode.js\";\nimport { getMatrix } from \"./matrix.js\";\nconst EC_LEVELS = [\"L\", \"M\", \"Q\", \"H\"];\nexport function getTemplate(message, ec_level) {\n let i = 1;\n let len;\n if (message.data1) {\n len = Math.ceil(message.data1.length / 8);\n }\n else {\n i = 10;\n }\n for (; i < 10; i++) {\n let version = mappedVersions[i][ec_level];\n if (version.data_len >= len) {\n return deepCopy(version);\n }\n }\n if (message.data10) {\n len = Math.ceil(message.data10.length / 8);\n }\n else {\n i = 27;\n }\n for (; i < 27; i++) {\n let version = mappedVersions[i][ec_level];\n if (version.data_len >= len) {\n return deepCopy(version);\n }\n }\n len = Math.ceil(message.data27.length / 8);\n for (; i < 41; i++) {\n let version = mappedVersions[i][ec_level];\n if (version.data_len >= len) {\n return deepCopy(version);\n }\n }\n throw new Error(\"Too much data\");\n}\nexport function fillTemplate(message, template) {\n const blocks = new Uint8ClampedArray(template.data_len);\n let messageUpdated;\n if (template.version < 10) {\n messageUpdated = message.data1;\n }\n else if (template.version < 27) {\n messageUpdated = message.data10;\n }\n else {\n messageUpdated = message.data27;\n }\n const len = messageUpdated.length;\n for (let i = 0; i < len; i += 8) {\n let b = 0;\n for (let j = 0; j < 8; j++) {\n b = (b << 1) | (messageUpdated[i + j] ? 1 : 0);\n }\n blocks[i / 8] = b;\n }\n let pad = 236;\n for (let i = Math.ceil((len + 4) / 8); i < blocks.length; i++) {\n blocks[i] = pad;\n pad = pad == 236 ? 17 : 236;\n }\n let offset = 0;\n template.blocks = template.blocks.map((n) => {\n const b = blocks.slice(offset, offset + n);\n offset += n;\n template.ec.push(calculateEC(b, template.ec_len));\n return b;\n });\n return template;\n}\nexport function QR(text, ec_level, parse_url) {\n ec_level = EC_LEVELS.includes(ec_level) ? ec_level : \"M\";\n const message = encode(text, parse_url);\n const data = fillTemplate(message, getTemplate(message, ec_level));\n return getMatrix(data);\n}\nconst deepCopy = typeof structuredClone !== \"undefined\" ? structuredClone : ((obj) => JSON.parse(JSON.stringify(obj)));\nconst versions = [\n [],\n [26, 7, 1, 10, 1, 13, 1, 17, 1],\n [44, 10, 1, 16, 1, 22, 1, 28, 1],\n [70, 15, 1, 26, 1, 36, 2, 44, 2],\n [100, 20, 1, 36, 2, 52, 2, 64, 4],\n [134, 26, 1, 48, 2, 72, 4, 88, 4],\n [172, 36, 2, 64, 4, 96, 4, 112, 4],\n [196, 40, 2, 72, 4, 108, 6, 130, 5],\n [242, 48, 2, 88, 4, 132, 6, 156, 6],\n [292, 60, 2, 110, 5, 160, 8, 192, 8],\n [346, 72, 4, 130, 5, 192, 8, 224, 8],\n [404, 80, 4, 150, 5, 224, 8, 264, 11],\n [466, 96, 4, 176, 8, 260, 10, 308, 11],\n [532, 104, 4, 198, 9, 288, 12, 352, 16],\n [581, 120, 4, 216, 9, 320, 16, 384, 16],\n [655, 132, 6, 240, 10, 360, 12, 432, 18],\n [733, 144, 6, 280, 10, 408, 17, 480, 16],\n [815, 168, 6, 308, 11, 448, 16, 532, 19],\n [901, 180, 6, 338, 13, 504, 18, 588, 21],\n [991, 196, 7, 364, 14, 546, 21, 650, 25],\n [1085, 224, 8, 416, 16, 600, 20, 700, 25],\n [1156, 224, 8, 442, 17, 644, 23, 750, 25],\n [1258, 252, 9, 476, 17, 690, 23, 816, 34],\n [1364, 270, 9, 504, 18, 750, 25, 900, 30],\n [1474, 300, 10, 560, 20, 810, 27, 960, 32],\n [1588, 312, 12, 588, 21, 870, 29, 1050, 35],\n [1706, 336, 12, 644, 23, 952, 34, 1110, 37],\n [1828, 360, 12, 700, 25, 1020, 34, 1200, 40],\n [1921, 390, 13, 728, 26, 1050, 35, 1260, 42],\n [2051, 420, 14, 784, 28, 1140, 38, 1350, 45],\n [2185, 450, 15, 812, 29, 1200, 40, 1440, 48],\n [2323, 480, 16, 868, 31, 1290, 43, 1530, 51],\n [2465, 510, 17, 924, 33, 1350, 45, 1620, 54],\n [2611, 540, 18, 980, 35, 1440, 48, 1710, 57],\n [2761, 570, 19, 1036, 37, 1530, 51, 1800, 60],\n [2876, 570, 19, 1064, 38, 1590, 53, 1890, 63],\n [3034, 600, 20, 1120, 40, 1680, 56, 1980, 66],\n [3196, 630, 21, 1204, 43, 1770, 59, 2100, 70],\n [3362, 660, 22, 1260, 45, 1860, 62, 2220, 74],\n [3532, 720, 24, 1316, 47, 1950, 65, 2310, 77],\n [3706, 750, 25, 1372, 49, 2040, 68, 2430, 81],\n];\nconst mappedVersions = versions.map((el, index) => {\n if (!index) {\n return Object.create(null);\n }\n const res = Object.create(null);\n for (let i = 1; i < 8; i += 2) {\n const length = el[0] - el[i];\n const num_template = el[i + 1];\n const ec_level = EC_LEVELS[(i / 2) | 0];\n const level = {\n version: index,\n ec_level,\n data_len: length,\n ec_len: el[i] / num_template,\n blocks: [],\n ec: [],\n };\n for (let k = num_template, n = length; k > 0; k--) {\n const block = (n / k) | 0;\n level.blocks.push(block);\n n -= block;\n }\n res[ec_level] = level;\n }\n return res;\n});\n//# sourceMappingURL=qr-base.js.map","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","import colorString from \"color-string\";\nexport function getOptions(inOptions) {\n const type = inOptions?.type ?? \"png\";\n const defaults = type === \"png\" ? BITMAP_OPTIONS : VECTOR_OPTIONS;\n return { ...defaults, ...inOptions };\n}\nexport function colorToHex(color) {\n if (typeof color === \"string\") {\n return colorString.to.hex(colorString.get.rgb(color));\n }\n return `#${(color >>> 8).toString(16).padStart(6, \"0\")}`;\n}\nconst svgMove = (left, top) => ['M', left, top];\nconst svgReturn = () => ['z'];\nconst svgDeltaArc = (borderRadius, dx, dy, sweep = 0) => borderRadius > 0 ? ['a', borderRadius, borderRadius, 0, 0, sweep, dx, dy] : [];\nconst svgVerticalDeltaLite = (dy) => ['v', dy];\nconst svgHorizontalDeltaLine = (dx) => ['h', dx];\nexport function getFindersSVGPath(matrix, size = 0, margin = 0, borderRadius = 0) {\n const matrixSize = matrix.length * size + margin * 2;\n let finderSize = 8;\n let finderEnd = finderSize - 1;\n const sides = [[0, 0], [1, 0], [0, 1]];\n const rectangles = [];\n for (const side of sides) {\n const [xSign, ySign] = side.map(sidePoint => sidePoint == 0 ? 1 : -1);\n for (const offset of [0, 1, 2]) {\n let xCorner = matrixSize * side[0] + xSign * (margin + size * offset);\n let yCorner = matrixSize * side[1] + ySign * (margin + size * offset);\n const xDelta = xSign * (size * (finderEnd - 2 * offset) - 2 * borderRadius);\n const yDelta = ySign * (size * (finderEnd - 2 * offset) - 2 * borderRadius);\n let rectangle = [\n svgMove(xCorner, yCorner + borderRadius * ySign),\n svgVerticalDeltaLite(yDelta),\n svgDeltaArc(borderRadius, borderRadius * xSign, borderRadius * ySign, side[1] | side[0]),\n svgHorizontalDeltaLine(xDelta),\n svgDeltaArc(borderRadius, borderRadius * xSign, -borderRadius * ySign, (side[1] | side[0])),\n svgVerticalDeltaLite(-yDelta),\n svgDeltaArc(borderRadius, -borderRadius * xSign, -borderRadius * ySign, (side[1] | side[0])),\n svgHorizontalDeltaLine(-xDelta),\n svgDeltaArc(borderRadius, -borderRadius * xSign, borderRadius * ySign, (side[1] | side[0])),\n svgReturn(),\n ];\n rectangles.push(...rectangle.flat());\n }\n }\n return rectangles.join(\" \");\n}\nexport function getDotsSVGPath(matrix, size, margin = 0, borderRadius = 0) {\n let rectangles = [];\n for (let x = 0; x < matrix.length; x++) {\n const column = matrix[x];\n for (let y = 0; y < column.length; y++) {\n if (column[y]) {\n const leftX = x * size + margin;\n const topY = y * size + margin;\n const delta = size - 2 * borderRadius;\n const rectangle = [\n svgMove(leftX, topY + borderRadius),\n svgVerticalDeltaLite(delta),\n svgDeltaArc(borderRadius, borderRadius, borderRadius),\n svgHorizontalDeltaLine(delta),\n svgDeltaArc(borderRadius, borderRadius, -borderRadius),\n svgVerticalDeltaLite(-delta),\n svgDeltaArc(borderRadius, -borderRadius, -borderRadius),\n svgHorizontalDeltaLine(-delta),\n svgDeltaArc(borderRadius, -borderRadius, borderRadius),\n svgReturn(),\n ];\n rectangles.push(...rectangle.flat());\n }\n }\n }\n return rectangles.join(\" \");\n}\nconst commonOptions = {\n type: \"png\",\n parse_url: false,\n ec_level: \"M\",\n logo: undefined,\n logoWidth: 20,\n logoHeight: 20,\n bgColor: 0xffffffff,\n color: 0x000000ff,\n};\nconst BITMAP_OPTIONS = {\n ...commonOptions,\n margin: 1,\n size: 5,\n};\nconst VECTOR_OPTIONS = {\n ...commonOptions,\n margin: 1,\n size: 0,\n};\n//# sourceMappingURL=utils.js.map","/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.7';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, bin = '', r1, r2;\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n bin += r1 === 64 ? _fromCC(u24 >> 16 & 255)\n : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255)\n : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);\n }\n return bin;\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","import { clearMatrixCenter, zeroFillFinders } from \"./bitMatrix.js\";\nimport { QR } from \"./qr-base.js\";\nimport { colorToHex, getOptions, getDotsSVGPath, getFindersSVGPath } from \"./utils.js\";\nimport { Base64 } from \"js-base64\";\nexport function getSVG(text, inOptions = {}) {\n const options = getOptions({ ...inOptions, type: \"svg\" });\n let matrix = QR(text, options.ec_level, options.parse_url);\n matrix = zeroFillFinders(matrix);\n if (options.logo && options.logoWidth && options.logoHeight && !options.noExcavate) {\n matrix = clearMatrixCenter(matrix, options.logoWidth, options.logoHeight);\n }\n return createSVG({ matrix, ...options });\n}\nconst te = new TextEncoder();\nexport function createSVG({ matrix, margin, size, logo, logoWidth, logoHeight, color, bgColor, imageWidth, imageHeight, borderRadius, }) {\n const actualBlockSize = size || 9;\n const matrixSizePx = matrix.length * actualBlockSize;\n const marginPx = margin * actualBlockSize;\n const imageSizePx = matrixSizePx + 2 * marginPx;\n const imageWidthStr = imageWidth ? ` width=\"${imageWidth}\"` : \"\";\n const imageHeightStr = imageHeight ? ` height=\"${imageWidth}\"` : \"\";\n const xmlTag = `<?xml version=\"1.0\" encoding=\"utf-8\"?>`;\n const svgOpeningTag = `<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"${imageWidthStr}${imageHeightStr} viewBox=\"0 0 ${imageSizePx} ${imageSizePx}\">`;\n const svgBody = getSVGBody(matrix, {\n color,\n bgColor,\n size: imageSizePx,\n margin,\n blockSize: actualBlockSize,\n borderRadius,\n });\n const svgEndTag = \"</svg>\";\n const logoImage = logo ? getLogoImage(logo, marginPx, matrixSizePx, logoWidth, logoHeight) : \"\";\n return te.encode(xmlTag + svgOpeningTag + svgBody + logoImage + svgEndTag);\n}\nfunction getSVGBody(matrix, options) {\n const dotsPath = getDotsSVGPath(matrix, options.blockSize, options.margin * options.blockSize, options.borderRadius);\n const outerFindersPath = getFindersSVGPath(matrix, options.blockSize, options.margin * options.blockSize, options.borderRadius);\n let svgBody = `<rect width=\"${options.size}\" height=\"${options.size}\" fill=\"${colorToHex(options.bgColor)}\"></rect>`;\n svgBody += `<path shape-rendering=\"geometricPrecision\" d=\"${outerFindersPath}\" fill-rule=\"evenodd\" fill=\"${colorToHex(options.color)}\"/>`;\n svgBody += `<path shape-rendering=\"geometricPrecision\" d=\"${dotsPath}\" fill=\"${colorToHex(options.color)}\"/>`;\n return svgBody;\n}\nfunction getLogoImage(logo, marginPx, matrixSizePx, logoWidth, logoHeight) {\n const imageBase64 = `data:image/png;base64,${Base64.fromUint8Array(new Uint8Array(logo))}`;\n const logoWidthPx = (logoWidth / 100) * matrixSizePx;\n const logoHeightPx = (logoHeight / 100) * matrixSizePx;\n return (`<image ` +\n `width=\"${logoWidthPx}\" ` +\n `height=\"${logoHeightPx}\" ` +\n `xlink:href=\"${imageBase64}\" ` +\n `x=\"${marginPx + (matrixSizePx - logoWidthPx) / 2}\" ` +\n `y=\"${marginPx + (matrixSizePx - logoHeightPx) / 2}\">` +\n `</image>`);\n}\n//# sourceMappingURL=svg.js.map","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon cake-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M11.5,0.5C12,0.75 13,2.4 13,3.5C13,4.6 12.33,5 11.5,5C10.67,5 10,4.85 10,3.75C10,2.65 11,2 11.5,0.5M18.5,9C21,9 23,11 23,13.5C23,15.06 22.21,16.43 21,17.24V23H12L3,23V17.24C1.79,16.43 1,15.06 1,13.5C1,11 3,9 5.5,9H10V6H13V9H18.5M12,16A2.5,2.5 0 0,0 14.5,13.5H16A2.5,2.5 0 0,0 18.5,16A2.5,2.5 0 0,0 21,13.5A2.5,2.5 0 0,0 18.5,11H5.5A2.5,2.5 0 0,0 3,13.5A2.5,2.5 0 0,0 5.5,16A2.5,2.5 0 0,0 8,13.5H9.5A2.5,2.5 0 0,0 12,16Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CakeIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon eye-circle-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,11A1,1 0 0,1 13,12A1,1 0 0,1 12,13A1,1 0 0,1 11,12A1,1 0 0,1 12,11M12,8C14.63,8 17,9.57 18,12C16.62,15.31 12.81,16.88 9.5,15.5C7.92,14.84 6.66,13.58 6,12C7,9.57 9.37,8 12,8M12,9.5A2.5,2.5 0 0,0 9.5,12A2.5,2.5 0 0,0 12,14.5A2.5,2.5 0 0,0 14.5,12A2.5,2.5 0 0,0 12,9.5\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"EyeCircleOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon folder-multiple-image-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M7,15L11.5,9L15,13.5L17.5,10.5L21,15M22,4H14L12,2H6A2,2 0 0,0 4,4V16A2,2 0 0,0 6,18H22A2,2 0 0,0 24,16V6A2,2 0 0,0 22,4M2,6H0V11H0V20A2,2 0 0,0 2,22H20V20H2V6Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FolderMultipleImageIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon qrcode-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M3,11H5V13H3V11M11,5H13V9H11V5M9,11H13V15H11V13H9V11M15,11H17V13H19V11H21V13H19V15H21V19H19V21H17V19H13V21H11V17H15V15H17V13H15V11M19,19V15H17V19H19M15,3H21V9H15V3M17,5V7H19V5H17M3,3H9V9H3V3M5,5V7H7V5H5M3,15H9V21H3V15M5,17V19H7V17H5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"QrcodeIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon tray-arrow-down-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M2 12H4V17H20V12H22V17C22 18.11 21.11 19 20 19H4C2.9 19 2 18.11 2 17V12M12 15L17.55 9.54L16.13 8.13L13 11.25V2H11V11.25L7.88 8.13L6.46 9.55L12 15Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"TrayArrowDownIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon chevron-left-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ChevronLeftIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon dots-horizontal-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"DotsHorizontalIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"property__row\">\n\t\t<!-- Dummy label to keep the layout -->\n\t\t<div class=\"property__label\" />\n\n\t\t<!-- Extra div container to fix the poper position -->\n\t\t<div class=\"property__value\">\n\t\t\t<Actions\n\t\t\t\tmenu-align=\"right\"\n\t\t\t\tevent=\"\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:menu-name=\"t('contacts', 'Add more info')\"\n\t\t\t\t@click.prevent>\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconAdd :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t<template v-if=\"!moreActionsOpen\">\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\tv-for=\"option in availablePrimaryProperties\"\n\t\t\t\t\t\t:key=\"option.id\"\n\t\t\t\t\t\tclass=\"action--primary\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t@click.prevent=\"addProp(option.id)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<PropertyTitleIcon :icon=\"option.icon\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ option.name }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\t:close-after-click=\"false\"\n\t\t\t\t\t\t@click=\"moreActionsOpen = true\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<DotsHorizontalIcon\n\t\t\t\t\t\t\t\t:title=\"t('contacts', 'More fields')\"\n\t\t\t\t\t\t\t\t:size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('contacts', 'More fields') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</template>\n\t\t\t\t<template v-if=\"moreActionsOpen\">\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\t:close-after-click=\"false\"\n\t\t\t\t\t\t@click=\"moreActionsOpen = false\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<ChevronLeft\n\t\t\t\t\t\t\t\t:title=\"t('contacts', 'More fields')\"\n\t\t\t\t\t\t\t\t:size=\"20\" />\n\t\t\t\t\t\t\t{{ t('contacts', 'More fields') }}\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\tv-for=\"option in availableSecondaryProperties\"\n\t\t\t\t\t\t:key=\"option.id\"\n\t\t\t\t\t\tclass=\"action--primary\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t@click.prevent=\"addProp(option.id)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<PropertyTitleIcon :icon=\"option.icon\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ option.name }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</template>\n\t\t\t</Actions>\n\t\t</div>\n\n\t\t<!-- Dummy actions to keep the layout -->\n\t\t<div class=\"property__actions\" />\n\t</div>\n</template>\n\n<script>\nimport { NcActionButton as ActionButton, NcActions as Actions } from '@nextcloud/vue'\nimport ICAL from 'ical.js'\nimport ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue'\nimport DotsHorizontalIcon from 'vue-material-design-icons/DotsHorizontal.vue'\nimport IconAdd from 'vue-material-design-icons/Plus.vue'\nimport PropertyTitleIcon from '../Properties/PropertyTitleIcon.vue'\nimport OrgChartsMixin from '../../mixins/OrgChartsMixin.js'\nimport Contact from '../../models/contact.js'\nimport rfcProps from '../../models/rfcProps.js'\n\nexport default {\n\tname: 'ContactDetailsAddNewProp',\n\n\tcomponents: {\n\t\tIconAdd,\n\t\tPropertyTitleIcon,\n\t\tActions,\n\t\tActionButton,\n\t\tChevronLeft,\n\t\tDotsHorizontalIcon,\n\t},\n\n\tmixins: [\n\t\tOrgChartsMixin,\n\t],\n\n\tprops: {\n\t\tcontact: {\n\t\t\ttype: Contact,\n\t\t\tdefault: null,\n\t\t},\n\n\t\tbus: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tmoreActionsOpen: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Rfc props\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tproperties() {\n\t\t\treturn rfcProps.properties\n\t\t},\n\n\t\t/**\n\t\t * Rfc props\n\t\t *\n\t\t * @return string[]\n\t\t */\n\t\tpropertiesOrder() {\n\t\t\treturn rfcProps.fieldOrder\n\t\t},\n\n\t\t/**\n\t\t * List of properties that the contact already have\n\t\t *\n\t\t * @return {string[]}\n\t\t */\n\t\tusedProperties() {\n\t\t\treturn this.contact.jCal[1].map((prop) => prop[0])\n\t\t},\n\n\t\t/**\n\t\t * List of every primary properties you are allowed to add\n\t\t * on this contact\n\t\t *\n\t\t * @return {object[]}\n\t\t */\n\t\tavailablePrimaryProperties() {\n\t\t\treturn Object.keys(this.properties)\n\t\t\t\t// show primary or secondary props\n\t\t\t\t.filter((key) => this.properties[key].primary)\n\t\t\t\t// usable array of objects\n\t\t\t\t.map((key) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: key,\n\t\t\t\t\t\tname: this.properties[key].readableName,\n\t\t\t\t\t\ticon: this.properties[key].icon,\n\t\t\t\t\t}\n\t\t\t\t}).sort((a, b) => this.propertiesOrder.indexOf(a.id) - this.propertiesOrder.indexOf(b.id))\n\t\t},\n\n\t\t/**\n\t\t * List of every secondary properties you are allowed to add\n\t\t * on this contact\n\t\t *\n\t\t * @return {object[]}\n\t\t */\n\t\tavailableSecondaryProperties() {\n\t\t\treturn Object.keys(this.properties)\n\t\t\t\t// show primary or secondary props\n\t\t\t\t.filter((key) => !this.properties[key].primary)\n\t\t\t\t// usable array of objects\n\t\t\t\t.map((key) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: key,\n\t\t\t\t\t\tname: this.properties[key].readableName,\n\t\t\t\t\t\ticon: this.properties[key].icon,\n\t\t\t\t\t}\n\t\t\t\t}).sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t},\n\n\tcreated() {\n\t\tthis.bus.on('add-prop', this.addProp)\n\t},\n\n\tunmounted() {\n\t\tthis.bus.off('add-prop', this.addProp)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Add a new prop to the contact\n\t\t *\n\t\t * @param {string} id the id of the property. e.g fn\n\t\t */\n\t\tasync addProp(id) {\n\t\t\tif (this.usedProperties.includes(id) && !this.properties[id].multiple) {\n\t\t\t\tthis.bus.emit('focus-prop', id)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (id === 'x-managersname') {\n\t\t\t\tconst others = this.otherContacts(this.contact)\n\t\t\t\tif (others.length === 1) {\n\t\t\t\t\t// Pick the first and only other contact\n\t\t\t\t\tawait this.contact.vCard.addPropertyWithValue(id, others[0].key)\n\t\t\t\t\tawait this.$store.dispatch('updateContact', this.contact)\n\t\t\t\t} else {\n\t\t\t\t\tawait this.contact.vCard.addPropertyWithValue(id, '')\n\t\t\t\t}\n\t\t\t} else if (this.properties[id] && this.properties[id].defaultjCal\n\t\t\t\t&& this.properties[id].defaultjCal[this.contact.version]) {\n\t\t\t\tconst defaultjCal = this.properties[id].defaultjCal[this.contact.version]\n\t\t\t\tconst property = new ICAL.Property([id, ...defaultjCal])\n\t\t\t\tawait this.contact.vCard.addProperty(property)\n\t\t\t} else {\n\t\t\t\tconst defaultData = this.properties[id].defaultValue\n\t\t\t\tlet defaultValue = defaultData ? defaultData.value : ''\n\t\t\t\tif (Array.isArray(defaultValue)) {\n\t\t\t\t\tdefaultValue = [...defaultValue]\n\t\t\t\t}\n\t\t\t\tconst property = await this.contact.vCard.addPropertyWithValue(id, defaultValue)\n\t\t\t\tif (defaultData && defaultData.type) {\n\t\t\t\t\tproperty.setParameter('type', defaultData.type)\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.moreActionsOpen = false\n\t\t\tthis.bus.emit('focus-prop', id)\n\t\t},\n\t},\n}\n</script>\n","/**\n* @vue/compiler-core v3.5.26\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { isString, NOOP, isObject, extend, NO, isSymbol, PatchFlagNames, isArray, capitalize, camelize, EMPTY_OBJ, slotFlagsText, isOn, isBuiltInDirective, isReservedProp, toHandlerKey } from '@vue/shared';\nexport { generateCodeFrame } from '@vue/shared';\n\nconst FRAGMENT = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Fragment` : ``);\nconst TELEPORT = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Teleport` : ``);\nconst SUSPENSE = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Suspense` : ``);\nconst KEEP_ALIVE = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `KeepAlive` : ``);\nconst BASE_TRANSITION = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `BaseTransition` : ``\n);\nconst OPEN_BLOCK = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `openBlock` : ``);\nconst CREATE_BLOCK = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `createBlock` : ``);\nconst CREATE_ELEMENT_BLOCK = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createElementBlock` : ``\n);\nconst CREATE_VNODE = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `createVNode` : ``);\nconst CREATE_ELEMENT_VNODE = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createElementVNode` : ``\n);\nconst CREATE_COMMENT = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createCommentVNode` : ``\n);\nconst CREATE_TEXT = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createTextVNode` : ``\n);\nconst CREATE_STATIC = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createStaticVNode` : ``\n);\nconst RESOLVE_COMPONENT = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveComponent` : ``\n);\nconst RESOLVE_DYNAMIC_COMPONENT = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveDynamicComponent` : ``\n);\nconst RESOLVE_DIRECTIVE = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveDirective` : ``\n);\nconst RESOLVE_FILTER = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveFilter` : ``\n);\nconst WITH_DIRECTIVES = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `withDirectives` : ``\n);\nconst RENDER_LIST = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `renderList` : ``);\nconst RENDER_SLOT = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `renderSlot` : ``);\nconst CREATE_SLOTS = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `createSlots` : ``);\nconst TO_DISPLAY_STRING = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `toDisplayString` : ``\n);\nconst MERGE_PROPS = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `mergeProps` : ``);\nconst NORMALIZE_CLASS = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `normalizeClass` : ``\n);\nconst NORMALIZE_STYLE = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `normalizeStyle` : ``\n);\nconst NORMALIZE_PROPS = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `normalizeProps` : ``\n);\nconst GUARD_REACTIVE_PROPS = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `guardReactiveProps` : ``\n);\nconst TO_HANDLERS = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `toHandlers` : ``);\nconst CAMELIZE = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `camelize` : ``);\nconst CAPITALIZE = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `capitalize` : ``);\nconst TO_HANDLER_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `toHandlerKey` : ``\n);\nconst SET_BLOCK_TRACKING = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `setBlockTracking` : ``\n);\nconst PUSH_SCOPE_ID = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `pushScopeId` : ``);\nconst POP_SCOPE_ID = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `popScopeId` : ``);\nconst WITH_CTX = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `withCtx` : ``);\nconst UNREF = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `unref` : ``);\nconst IS_REF = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `isRef` : ``);\nconst WITH_MEMO = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `withMemo` : ``);\nconst IS_MEMO_SAME = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `isMemoSame` : ``);\nconst helperNameMap = {\n [FRAGMENT]: `Fragment`,\n [TELEPORT]: `Teleport`,\n [SUSPENSE]: `Suspense`,\n [KEEP_ALIVE]: `KeepAlive`,\n [BASE_TRANSITION]: `BaseTransition`,\n [OPEN_BLOCK]: `openBlock`,\n [CREATE_BLOCK]: `createBlock`,\n [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\n [CREATE_VNODE]: `createVNode`,\n [CREATE_ELEMENT_VNODE]: `createElementVNode`,\n [CREATE_COMMENT]: `createCommentVNode`,\n [CREATE_TEXT]: `createTextVNode`,\n [CREATE_STATIC]: `createStaticVNode`,\n [RESOLVE_COMPONENT]: `resolveComponent`,\n [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\n [RESOLVE_DIRECTIVE]: `resolveDirective`,\n [RESOLVE_FILTER]: `resolveFilter`,\n [WITH_DIRECTIVES]: `withDirectives`,\n [RENDER_LIST]: `renderList`,\n [RENDER_SLOT]: `renderSlot`,\n [CREATE_SLOTS]: `createSlots`,\n [TO_DISPLAY_STRING]: `toDisplayString`,\n [MERGE_PROPS]: `mergeProps`,\n [NORMALIZE_CLASS]: `normalizeClass`,\n [NORMALIZE_STYLE]: `normalizeStyle`,\n [NORMALIZE_PROPS]: `normalizeProps`,\n [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\n [TO_HANDLERS]: `toHandlers`,\n [CAMELIZE]: `camelize`,\n [CAPITALIZE]: `capitalize`,\n [TO_HANDLER_KEY]: `toHandlerKey`,\n [SET_BLOCK_TRACKING]: `setBlockTracking`,\n [PUSH_SCOPE_ID]: `pushScopeId`,\n [POP_SCOPE_ID]: `popScopeId`,\n [WITH_CTX]: `withCtx`,\n [UNREF]: `unref`,\n [IS_REF]: `isRef`,\n [WITH_MEMO]: `withMemo`,\n [IS_MEMO_SAME]: `isMemoSame`\n};\nfunction registerRuntimeHelpers(helpers) {\n Object.getOwnPropertySymbols(helpers).forEach((s) => {\n helperNameMap[s] = helpers[s];\n });\n}\n\nconst Namespaces = {\n \"HTML\": 0,\n \"0\": \"HTML\",\n \"SVG\": 1,\n \"1\": \"SVG\",\n \"MATH_ML\": 2,\n \"2\": \"MATH_ML\"\n};\nconst NodeTypes = {\n \"ROOT\": 0,\n \"0\": \"ROOT\",\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"TEXT\": 2,\n \"2\": \"TEXT\",\n \"COMMENT\": 3,\n \"3\": \"COMMENT\",\n \"SIMPLE_EXPRESSION\": 4,\n \"4\": \"SIMPLE_EXPRESSION\",\n \"INTERPOLATION\": 5,\n \"5\": \"INTERPOLATION\",\n \"ATTRIBUTE\": 6,\n \"6\": \"ATTRIBUTE\",\n \"DIRECTIVE\": 7,\n \"7\": \"DIRECTIVE\",\n \"COMPOUND_EXPRESSION\": 8,\n \"8\": \"COMPOUND_EXPRESSION\",\n \"IF\": 9,\n \"9\": \"IF\",\n \"IF_BRANCH\": 10,\n \"10\": \"IF_BRANCH\",\n \"FOR\": 11,\n \"11\": \"FOR\",\n \"TEXT_CALL\": 12,\n \"12\": \"TEXT_CALL\",\n \"VNODE_CALL\": 13,\n \"13\": \"VNODE_CALL\",\n \"JS_CALL_EXPRESSION\": 14,\n \"14\": \"JS_CALL_EXPRESSION\",\n \"JS_OBJECT_EXPRESSION\": 15,\n \"15\": \"JS_OBJECT_EXPRESSION\",\n \"JS_PROPERTY\": 16,\n \"16\": \"JS_PROPERTY\",\n \"JS_ARRAY_EXPRESSION\": 17,\n \"17\": \"JS_ARRAY_EXPRESSION\",\n \"JS_FUNCTION_EXPRESSION\": 18,\n \"18\": \"JS_FUNCTION_EXPRESSION\",\n \"JS_CONDITIONAL_EXPRESSION\": 19,\n \"19\": \"JS_CONDITIONAL_EXPRESSION\",\n \"JS_CACHE_EXPRESSION\": 20,\n \"20\": \"JS_CACHE_EXPRESSION\",\n \"JS_BLOCK_STATEMENT\": 21,\n \"21\": \"JS_BLOCK_STATEMENT\",\n \"JS_TEMPLATE_LITERAL\": 22,\n \"22\": \"JS_TEMPLATE_LITERAL\",\n \"JS_IF_STATEMENT\": 23,\n \"23\": \"JS_IF_STATEMENT\",\n \"JS_ASSIGNMENT_EXPRESSION\": 24,\n \"24\": \"JS_ASSIGNMENT_EXPRESSION\",\n \"JS_SEQUENCE_EXPRESSION\": 25,\n \"25\": \"JS_SEQUENCE_EXPRESSION\",\n \"JS_RETURN_STATEMENT\": 26,\n \"26\": \"JS_RETURN_STATEMENT\"\n};\nconst ElementTypes = {\n \"ELEMENT\": 0,\n \"0\": \"ELEMENT\",\n \"COMPONENT\": 1,\n \"1\": \"COMPONENT\",\n \"SLOT\": 2,\n \"2\": \"SLOT\",\n \"TEMPLATE\": 3,\n \"3\": \"TEMPLATE\"\n};\nconst ConstantTypes = {\n \"NOT_CONSTANT\": 0,\n \"0\": \"NOT_CONSTANT\",\n \"CAN_SKIP_PATCH\": 1,\n \"1\": \"CAN_SKIP_PATCH\",\n \"CAN_CACHE\": 2,\n \"2\": \"CAN_CACHE\",\n \"CAN_STRINGIFY\": 3,\n \"3\": \"CAN_STRINGIFY\"\n};\nconst locStub = {\n start: { line: 1, column: 1, offset: 0 },\n end: { line: 1, column: 1, offset: 0 },\n source: \"\"\n};\nfunction createRoot(children, source = \"\") {\n return {\n type: 0,\n source,\n children,\n helpers: /* @__PURE__ */ new Set(),\n components: [],\n directives: [],\n hoists: [],\n imports: [],\n cached: [],\n temps: 0,\n codegenNode: void 0,\n loc: locStub\n };\n}\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\n if (context) {\n if (isBlock) {\n context.helper(OPEN_BLOCK);\n context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\n } else {\n context.helper(getVNodeHelper(context.inSSR, isComponent));\n }\n if (directives) {\n context.helper(WITH_DIRECTIVES);\n }\n }\n return {\n type: 13,\n tag,\n props,\n children,\n patchFlag,\n dynamicProps,\n directives,\n isBlock,\n disableTracking,\n isComponent,\n loc\n };\n}\nfunction createArrayExpression(elements, loc = locStub) {\n return {\n type: 17,\n loc,\n elements\n };\n}\nfunction createObjectExpression(properties, loc = locStub) {\n return {\n type: 15,\n loc,\n properties\n };\n}\nfunction createObjectProperty(key, value) {\n return {\n type: 16,\n loc: locStub,\n key: isString(key) ? createSimpleExpression(key, true) : key,\n value\n };\n}\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0) {\n return {\n type: 4,\n loc,\n content,\n isStatic,\n constType: isStatic ? 3 : constType\n };\n}\nfunction createInterpolation(content, loc) {\n return {\n type: 5,\n loc,\n content: isString(content) ? createSimpleExpression(content, false, loc) : content\n };\n}\nfunction createCompoundExpression(children, loc = locStub) {\n return {\n type: 8,\n loc,\n children\n };\n}\nfunction createCallExpression(callee, args = [], loc = locStub) {\n return {\n type: 14,\n loc,\n callee,\n arguments: args\n };\n}\nfunction createFunctionExpression(params, returns = void 0, newline = false, isSlot = false, loc = locStub) {\n return {\n type: 18,\n params,\n returns,\n newline,\n isSlot,\n loc\n };\n}\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\n return {\n type: 19,\n test,\n consequent,\n alternate,\n newline,\n loc: locStub\n };\n}\nfunction createCacheExpression(index, value, needPauseTracking = false, inVOnce = false) {\n return {\n type: 20,\n index,\n value,\n needPauseTracking,\n inVOnce,\n needArraySpread: false,\n loc: locStub\n };\n}\nfunction createBlockStatement(body) {\n return {\n type: 21,\n body,\n loc: locStub\n };\n}\nfunction createTemplateLiteral(elements) {\n return {\n type: 22,\n elements,\n loc: locStub\n };\n}\nfunction createIfStatement(test, consequent, alternate) {\n return {\n type: 23,\n test,\n consequent,\n alternate,\n loc: locStub\n };\n}\nfunction createAssignmentExpression(left, right) {\n return {\n type: 24,\n left,\n right,\n loc: locStub\n };\n}\nfunction createSequenceExpression(expressions) {\n return {\n type: 25,\n expressions,\n loc: locStub\n };\n}\nfunction createReturnStatement(returns) {\n return {\n type: 26,\n returns,\n loc: locStub\n };\n}\nfunction getVNodeHelper(ssr, isComponent) {\n return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\n}\nfunction getVNodeBlockHelper(ssr, isComponent) {\n return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\n}\nfunction convertToBlock(node, { helper, removeHelper, inSSR }) {\n if (!node.isBlock) {\n node.isBlock = true;\n removeHelper(getVNodeHelper(inSSR, node.isComponent));\n helper(OPEN_BLOCK);\n helper(getVNodeBlockHelper(inSSR, node.isComponent));\n }\n}\n\nconst defaultDelimitersOpen = new Uint8Array([123, 123]);\nconst defaultDelimitersClose = new Uint8Array([125, 125]);\nfunction isTagStartChar(c) {\n return c >= 97 && c <= 122 || c >= 65 && c <= 90;\n}\nfunction isWhitespace(c) {\n return c === 32 || c === 10 || c === 9 || c === 12 || c === 13;\n}\nfunction isEndOfTagSection(c) {\n return c === 47 || c === 62 || isWhitespace(c);\n}\nfunction toCharCodes(str) {\n const ret = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n ret[i] = str.charCodeAt(i);\n }\n return ret;\n}\nconst Sequences = {\n Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),\n // CDATA[\n CdataEnd: new Uint8Array([93, 93, 62]),\n // ]]>\n CommentEnd: new Uint8Array([45, 45, 62]),\n // `-->`\n ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),\n // `<\\/script`\n StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),\n // `</style`\n TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),\n // `</title`\n TextareaEnd: new Uint8Array([\n 60,\n 47,\n 116,\n 101,\n 120,\n 116,\n 97,\n 114,\n 101,\n 97\n ])\n // `</textarea\n};\nclass Tokenizer {\n constructor(stack, cbs) {\n this.stack = stack;\n this.cbs = cbs;\n /** The current state the tokenizer is in. */\n this.state = 1;\n /** The read buffer. */\n this.buffer = \"\";\n /** The beginning of the section that is currently being read. */\n this.sectionStart = 0;\n /** The index within the buffer that we are currently looking at. */\n this.index = 0;\n /** The start of the last entity. */\n this.entityStart = 0;\n /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n this.baseState = 1;\n /** For special parsing behavior inside of script and style tags. */\n this.inRCDATA = false;\n /** For disabling RCDATA tags handling */\n this.inXML = false;\n /** For disabling interpolation parsing in v-pre */\n this.inVPre = false;\n /** Record newline positions for fast line / column calculation */\n this.newlines = [];\n this.mode = 0;\n this.delimiterOpen = defaultDelimitersOpen;\n this.delimiterClose = defaultDelimitersClose;\n this.delimiterIndex = -1;\n this.currentSequence = void 0;\n this.sequenceIndex = 0;\n }\n get inSFCRoot() {\n return this.mode === 2 && this.stack.length === 0;\n }\n reset() {\n this.state = 1;\n this.mode = 0;\n this.buffer = \"\";\n this.sectionStart = 0;\n this.index = 0;\n this.baseState = 1;\n this.inRCDATA = false;\n this.currentSequence = void 0;\n this.newlines.length = 0;\n this.delimiterOpen = defaultDelimitersOpen;\n this.delimiterClose = defaultDelimitersClose;\n }\n /**\n * Generate Position object with line / column information using recorded\n * newline positions. We know the index is always going to be an already\n * processed index, so all the newlines up to this index should have been\n * recorded.\n */\n getPos(index) {\n let line = 1;\n let column = index + 1;\n const length = this.newlines.length;\n let j = -1;\n if (length > 100) {\n let l = -1;\n let r = length;\n while (l + 1 < r) {\n const m = l + r >>> 1;\n this.newlines[m] < index ? l = m : r = m;\n }\n j = l;\n } else {\n for (let i = length - 1; i >= 0; i--) {\n if (index > this.newlines[i]) {\n j = i;\n break;\n }\n }\n }\n if (j >= 0) {\n line = j + 2;\n column = index - this.newlines[j];\n }\n return {\n column,\n line,\n offset: index\n };\n }\n peek() {\n return this.buffer.charCodeAt(this.index + 1);\n }\n stateText(c) {\n if (c === 60) {\n if (this.index > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, this.index);\n }\n this.state = 5;\n this.sectionStart = this.index;\n } else if (!this.inVPre && c === this.delimiterOpen[0]) {\n this.state = 2;\n this.delimiterIndex = 0;\n this.stateInterpolationOpen(c);\n }\n }\n stateInterpolationOpen(c) {\n if (c === this.delimiterOpen[this.delimiterIndex]) {\n if (this.delimiterIndex === this.delimiterOpen.length - 1) {\n const start = this.index + 1 - this.delimiterOpen.length;\n if (start > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, start);\n }\n this.state = 3;\n this.sectionStart = start;\n } else {\n this.delimiterIndex++;\n }\n } else if (this.inRCDATA) {\n this.state = 32;\n this.stateInRCDATA(c);\n } else {\n this.state = 1;\n this.stateText(c);\n }\n }\n stateInterpolation(c) {\n if (c === this.delimiterClose[0]) {\n this.state = 4;\n this.delimiterIndex = 0;\n this.stateInterpolationClose(c);\n }\n }\n stateInterpolationClose(c) {\n if (c === this.delimiterClose[this.delimiterIndex]) {\n if (this.delimiterIndex === this.delimiterClose.length - 1) {\n this.cbs.oninterpolation(this.sectionStart, this.index + 1);\n if (this.inRCDATA) {\n this.state = 32;\n } else {\n this.state = 1;\n }\n this.sectionStart = this.index + 1;\n } else {\n this.delimiterIndex++;\n }\n } else {\n this.state = 3;\n this.stateInterpolation(c);\n }\n }\n stateSpecialStartSequence(c) {\n const isEnd = this.sequenceIndex === this.currentSequence.length;\n const isMatch = isEnd ? (\n // If we are at the end of the sequence, make sure the tag name has ended\n isEndOfTagSection(c)\n ) : (\n // Otherwise, do a case-insensitive comparison\n (c | 32) === this.currentSequence[this.sequenceIndex]\n );\n if (!isMatch) {\n this.inRCDATA = false;\n } else if (!isEnd) {\n this.sequenceIndex++;\n return;\n }\n this.sequenceIndex = 0;\n this.state = 6;\n this.stateInTagName(c);\n }\n /** Look for an end tag. For <title> and <textarea>, also decode entities. */\n stateInRCDATA(c) {\n if (this.sequenceIndex === this.currentSequence.length) {\n if (c === 62 || isWhitespace(c)) {\n const endOfText = this.index - this.currentSequence.length;\n if (this.sectionStart < endOfText) {\n const actualIndex = this.index;\n this.index = endOfText;\n this.cbs.ontext(this.sectionStart, endOfText);\n this.index = actualIndex;\n }\n this.sectionStart = endOfText + 2;\n this.stateInClosingTagName(c);\n this.inRCDATA = false;\n return;\n }\n this.sequenceIndex = 0;\n }\n if ((c | 32) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n } else if (this.sequenceIndex === 0) {\n if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd && !this.inSFCRoot) {\n if (!this.inVPre && c === this.delimiterOpen[0]) {\n this.state = 2;\n this.delimiterIndex = 0;\n this.stateInterpolationOpen(c);\n }\n } else if (this.fastForwardTo(60)) {\n this.sequenceIndex = 1;\n }\n } else {\n this.sequenceIndex = Number(c === 60);\n }\n }\n stateCDATASequence(c) {\n if (c === Sequences.Cdata[this.sequenceIndex]) {\n if (++this.sequenceIndex === Sequences.Cdata.length) {\n this.state = 28;\n this.currentSequence = Sequences.CdataEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n }\n } else {\n this.sequenceIndex = 0;\n this.state = 23;\n this.stateInDeclaration(c);\n }\n }\n /**\n * When we wait for one specific character, we can speed things up\n * by skipping through the buffer until we find it.\n *\n * @returns Whether the character was found.\n */\n fastForwardTo(c) {\n while (++this.index < this.buffer.length) {\n const cc = this.buffer.charCodeAt(this.index);\n if (cc === 10) {\n this.newlines.push(this.index);\n }\n if (cc === c) {\n return true;\n }\n }\n this.index = this.buffer.length - 1;\n return false;\n }\n /**\n * Comments and CDATA end with `-->` and `]]>`.\n *\n * Their common qualities are:\n * - Their end sequences have a distinct character they start with.\n * - That character is then repeated, so we have to check multiple repeats.\n * - All characters but the start character of the sequence can be skipped.\n */\n stateInCommentLike(c) {\n if (c === this.currentSequence[this.sequenceIndex]) {\n if (++this.sequenceIndex === this.currentSequence.length) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, this.index - 2);\n } else {\n this.cbs.oncomment(this.sectionStart, this.index - 2);\n }\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = 1;\n }\n } else if (this.sequenceIndex === 0) {\n if (this.fastForwardTo(this.currentSequence[0])) {\n this.sequenceIndex = 1;\n }\n } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n this.sequenceIndex = 0;\n }\n }\n startSpecial(sequence, offset) {\n this.enterRCDATA(sequence, offset);\n this.state = 31;\n }\n enterRCDATA(sequence, offset) {\n this.inRCDATA = true;\n this.currentSequence = sequence;\n this.sequenceIndex = offset;\n }\n stateBeforeTagName(c) {\n if (c === 33) {\n this.state = 22;\n this.sectionStart = this.index + 1;\n } else if (c === 63) {\n this.state = 24;\n this.sectionStart = this.index + 1;\n } else if (isTagStartChar(c)) {\n this.sectionStart = this.index;\n if (this.mode === 0) {\n this.state = 6;\n } else if (this.inSFCRoot) {\n this.state = 34;\n } else if (!this.inXML) {\n if (c === 116) {\n this.state = 30;\n } else {\n this.state = c === 115 ? 29 : 6;\n }\n } else {\n this.state = 6;\n }\n } else if (c === 47) {\n this.state = 8;\n } else {\n this.state = 1;\n this.stateText(c);\n }\n }\n stateInTagName(c) {\n if (isEndOfTagSection(c)) {\n this.handleTagName(c);\n }\n }\n stateInSFCRootTagName(c) {\n if (isEndOfTagSection(c)) {\n const tag = this.buffer.slice(this.sectionStart, this.index);\n if (tag !== \"template\") {\n this.enterRCDATA(toCharCodes(`</` + tag), 0);\n }\n this.handleTagName(c);\n }\n }\n handleTagName(c) {\n this.cbs.onopentagname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = 11;\n this.stateBeforeAttrName(c);\n }\n stateBeforeClosingTagName(c) {\n if (isWhitespace(c)) ; else if (c === 62) {\n if (!!(process.env.NODE_ENV !== \"production\") || false) {\n this.cbs.onerr(14, this.index);\n }\n this.state = 1;\n this.sectionStart = this.index + 1;\n } else {\n this.state = isTagStartChar(c) ? 9 : 27;\n this.sectionStart = this.index;\n }\n }\n stateInClosingTagName(c) {\n if (c === 62 || isWhitespace(c)) {\n this.cbs.onclosetag(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = 10;\n this.stateAfterClosingTagName(c);\n }\n }\n stateAfterClosingTagName(c) {\n if (c === 62) {\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeAttrName(c) {\n if (c === 62) {\n this.cbs.onopentagend(this.index);\n if (this.inRCDATA) {\n this.state = 32;\n } else {\n this.state = 1;\n }\n this.sectionStart = this.index + 1;\n } else if (c === 47) {\n this.state = 7;\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && this.peek() !== 62) {\n this.cbs.onerr(22, this.index);\n }\n } else if (c === 60 && this.peek() === 47) {\n this.cbs.onopentagend(this.index);\n this.state = 5;\n this.sectionStart = this.index;\n } else if (!isWhitespace(c)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && c === 61) {\n this.cbs.onerr(\n 19,\n this.index\n );\n }\n this.handleAttrStart(c);\n }\n }\n handleAttrStart(c) {\n if (c === 118 && this.peek() === 45) {\n this.state = 13;\n this.sectionStart = this.index;\n } else if (c === 46 || c === 58 || c === 64 || c === 35) {\n this.cbs.ondirname(this.index, this.index + 1);\n this.state = 14;\n this.sectionStart = this.index + 1;\n } else {\n this.state = 12;\n this.sectionStart = this.index;\n }\n }\n stateInSelfClosingTag(c) {\n if (c === 62) {\n this.cbs.onselfclosingtag(this.index);\n this.state = 1;\n this.sectionStart = this.index + 1;\n this.inRCDATA = false;\n } else if (!isWhitespace(c)) {\n this.state = 11;\n this.stateBeforeAttrName(c);\n }\n }\n stateInAttrName(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.onattribname(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if ((!!(process.env.NODE_ENV !== \"production\") || false) && (c === 34 || c === 39 || c === 60)) {\n this.cbs.onerr(\n 17,\n this.index\n );\n }\n }\n stateInDirName(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirname(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if (c === 58) {\n this.cbs.ondirname(this.sectionStart, this.index);\n this.state = 14;\n this.sectionStart = this.index + 1;\n } else if (c === 46) {\n this.cbs.ondirname(this.sectionStart, this.index);\n this.state = 16;\n this.sectionStart = this.index + 1;\n }\n }\n stateInDirArg(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirarg(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if (c === 91) {\n this.state = 15;\n } else if (c === 46) {\n this.cbs.ondirarg(this.sectionStart, this.index);\n this.state = 16;\n this.sectionStart = this.index + 1;\n }\n }\n stateInDynamicDirArg(c) {\n if (c === 93) {\n this.state = 14;\n } else if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirarg(this.sectionStart, this.index + 1);\n this.handleAttrNameEnd(c);\n if (!!(process.env.NODE_ENV !== \"production\") || false) {\n this.cbs.onerr(\n 27,\n this.index\n );\n }\n }\n }\n stateInDirModifier(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirmodifier(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if (c === 46) {\n this.cbs.ondirmodifier(this.sectionStart, this.index);\n this.sectionStart = this.index + 1;\n }\n }\n handleAttrNameEnd(c) {\n this.sectionStart = this.index;\n this.state = 17;\n this.cbs.onattribnameend(this.index);\n this.stateAfterAttrName(c);\n }\n stateAfterAttrName(c) {\n if (c === 61) {\n this.state = 18;\n } else if (c === 47 || c === 62) {\n this.cbs.onattribend(0, this.sectionStart);\n this.sectionStart = -1;\n this.state = 11;\n this.stateBeforeAttrName(c);\n } else if (!isWhitespace(c)) {\n this.cbs.onattribend(0, this.sectionStart);\n this.handleAttrStart(c);\n }\n }\n stateBeforeAttrValue(c) {\n if (c === 34) {\n this.state = 19;\n this.sectionStart = this.index + 1;\n } else if (c === 39) {\n this.state = 20;\n this.sectionStart = this.index + 1;\n } else if (!isWhitespace(c)) {\n this.sectionStart = this.index;\n this.state = 21;\n this.stateInAttrValueNoQuotes(c);\n }\n }\n handleInAttrValue(c, quote) {\n if (c === quote || this.fastForwardTo(quote)) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(\n quote === 34 ? 3 : 2,\n this.index + 1\n );\n this.state = 11;\n }\n }\n stateInAttrValueDoubleQuotes(c) {\n this.handleInAttrValue(c, 34);\n }\n stateInAttrValueSingleQuotes(c) {\n this.handleInAttrValue(c, 39);\n }\n stateInAttrValueNoQuotes(c) {\n if (isWhitespace(c) || c === 62) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(1, this.index);\n this.state = 11;\n this.stateBeforeAttrName(c);\n } else if ((!!(process.env.NODE_ENV !== \"production\") || false) && c === 34 || c === 39 || c === 60 || c === 61 || c === 96) {\n this.cbs.onerr(\n 18,\n this.index\n );\n } else ;\n }\n stateBeforeDeclaration(c) {\n if (c === 91) {\n this.state = 26;\n this.sequenceIndex = 0;\n } else {\n this.state = c === 45 ? 25 : 23;\n }\n }\n stateInDeclaration(c) {\n if (c === 62 || this.fastForwardTo(62)) {\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateInProcessingInstruction(c) {\n if (c === 62 || this.fastForwardTo(62)) {\n this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeComment(c) {\n if (c === 45) {\n this.state = 28;\n this.currentSequence = Sequences.CommentEnd;\n this.sequenceIndex = 2;\n this.sectionStart = this.index + 1;\n } else {\n this.state = 23;\n }\n }\n stateInSpecialComment(c) {\n if (c === 62 || this.fastForwardTo(62)) {\n this.cbs.oncomment(this.sectionStart, this.index);\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeSpecialS(c) {\n if (c === Sequences.ScriptEnd[3]) {\n this.startSpecial(Sequences.ScriptEnd, 4);\n } else if (c === Sequences.StyleEnd[3]) {\n this.startSpecial(Sequences.StyleEnd, 4);\n } else {\n this.state = 6;\n this.stateInTagName(c);\n }\n }\n stateBeforeSpecialT(c) {\n if (c === Sequences.TitleEnd[3]) {\n this.startSpecial(Sequences.TitleEnd, 4);\n } else if (c === Sequences.TextareaEnd[3]) {\n this.startSpecial(Sequences.TextareaEnd, 4);\n } else {\n this.state = 6;\n this.stateInTagName(c);\n }\n }\n startEntity() {\n }\n stateInEntity() {\n }\n /**\n * Iterates through the buffer, calling the function corresponding to the current state.\n *\n * States that are more likely to be hit are higher up, as a performance improvement.\n */\n parse(input) {\n this.buffer = input;\n while (this.index < this.buffer.length) {\n const c = this.buffer.charCodeAt(this.index);\n if (c === 10 && this.state !== 33) {\n this.newlines.push(this.index);\n }\n switch (this.state) {\n case 1: {\n this.stateText(c);\n break;\n }\n case 2: {\n this.stateInterpolationOpen(c);\n break;\n }\n case 3: {\n this.stateInterpolation(c);\n break;\n }\n case 4: {\n this.stateInterpolationClose(c);\n break;\n }\n case 31: {\n this.stateSpecialStartSequence(c);\n break;\n }\n case 32: {\n this.stateInRCDATA(c);\n break;\n }\n case 26: {\n this.stateCDATASequence(c);\n break;\n }\n case 19: {\n this.stateInAttrValueDoubleQuotes(c);\n break;\n }\n case 12: {\n this.stateInAttrName(c);\n break;\n }\n case 13: {\n this.stateInDirName(c);\n break;\n }\n case 14: {\n this.stateInDirArg(c);\n break;\n }\n case 15: {\n this.stateInDynamicDirArg(c);\n break;\n }\n case 16: {\n this.stateInDirModifier(c);\n break;\n }\n case 28: {\n this.stateInCommentLike(c);\n break;\n }\n case 27: {\n this.stateInSpecialComment(c);\n break;\n }\n case 11: {\n this.stateBeforeAttrName(c);\n break;\n }\n case 6: {\n this.stateInTagName(c);\n break;\n }\n case 34: {\n this.stateInSFCRootTagName(c);\n break;\n }\n case 9: {\n this.stateInClosingTagName(c);\n break;\n }\n case 5: {\n this.stateBeforeTagName(c);\n break;\n }\n case 17: {\n this.stateAfterAttrName(c);\n break;\n }\n case 20: {\n this.stateInAttrValueSingleQuotes(c);\n break;\n }\n case 18: {\n this.stateBeforeAttrValue(c);\n break;\n }\n case 8: {\n this.stateBeforeClosingTagName(c);\n break;\n }\n case 10: {\n this.stateAfterClosingTagName(c);\n break;\n }\n case 29: {\n this.stateBeforeSpecialS(c);\n break;\n }\n case 30: {\n this.stateBeforeSpecialT(c);\n break;\n }\n case 21: {\n this.stateInAttrValueNoQuotes(c);\n break;\n }\n case 7: {\n this.stateInSelfClosingTag(c);\n break;\n }\n case 23: {\n this.stateInDeclaration(c);\n break;\n }\n case 22: {\n this.stateBeforeDeclaration(c);\n break;\n }\n case 25: {\n this.stateBeforeComment(c);\n break;\n }\n case 24: {\n this.stateInProcessingInstruction(c);\n break;\n }\n case 33: {\n this.stateInEntity();\n break;\n }\n }\n this.index++;\n }\n this.cleanup();\n this.finish();\n }\n /**\n * Remove data that has already been consumed from the buffer.\n */\n cleanup() {\n if (this.sectionStart !== this.index) {\n if (this.state === 1 || this.state === 32 && this.sequenceIndex === 0) {\n this.cbs.ontext(this.sectionStart, this.index);\n this.sectionStart = this.index;\n } else if (this.state === 19 || this.state === 20 || this.state === 21) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n }\n }\n finish() {\n this.handleTrailingData();\n this.cbs.onend();\n }\n /** Handle any trailing data. */\n handleTrailingData() {\n const endIndex = this.buffer.length;\n if (this.sectionStart >= endIndex) {\n return;\n }\n if (this.state === 28) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, endIndex);\n } else {\n this.cbs.oncomment(this.sectionStart, endIndex);\n }\n } else if (this.state === 6 || this.state === 11 || this.state === 18 || this.state === 17 || this.state === 12 || this.state === 13 || this.state === 14 || this.state === 15 || this.state === 16 || this.state === 20 || this.state === 19 || this.state === 21 || this.state === 9) ; else {\n this.cbs.ontext(this.sectionStart, endIndex);\n }\n }\n emitCodePoint(cp, consumed) {\n }\n}\n\nconst CompilerDeprecationTypes = {\n \"COMPILER_IS_ON_ELEMENT\": \"COMPILER_IS_ON_ELEMENT\",\n \"COMPILER_V_BIND_SYNC\": \"COMPILER_V_BIND_SYNC\",\n \"COMPILER_V_BIND_OBJECT_ORDER\": \"COMPILER_V_BIND_OBJECT_ORDER\",\n \"COMPILER_V_ON_NATIVE\": \"COMPILER_V_ON_NATIVE\",\n \"COMPILER_V_IF_V_FOR_PRECEDENCE\": \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n \"COMPILER_NATIVE_TEMPLATE\": \"COMPILER_NATIVE_TEMPLATE\",\n \"COMPILER_INLINE_TEMPLATE\": \"COMPILER_INLINE_TEMPLATE\",\n \"COMPILER_FILTERS\": \"COMPILER_FILTERS\"\n};\nconst deprecationData = {\n [\"COMPILER_IS_ON_ELEMENT\"]: {\n message: `Platform-native elements with \"is\" prop will no longer be treated as components in Vue 3 unless the \"is\" value is explicitly prefixed with \"vue:\".`,\n link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`\n },\n [\"COMPILER_V_BIND_SYNC\"]: {\n message: (key) => `.sync modifier for v-bind has been removed. Use v-model with argument instead. \\`v-bind:${key}.sync\\` should be changed to \\`v-model:${key}\\`.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`\n },\n [\"COMPILER_V_BIND_OBJECT_ORDER\"]: {\n message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript object spread: it will now overwrite an existing non-mergeable attribute that appears before v-bind in the case of conflict. To retain 2.x behavior, move v-bind to make it the first attribute. You can also suppress this warning if the usage is intended.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`\n },\n [\"COMPILER_V_ON_NATIVE\"]: {\n message: `.native modifier for v-on has been removed as is no longer necessary.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`\n },\n [\"COMPILER_V_IF_V_FOR_PRECEDENCE\"]: {\n message: `v-if / v-for precedence when used on the same element has changed in Vue 3: v-if now takes higher precedence and will no longer have access to v-for scope variables. It is best to avoid the ambiguity with <template> tags or use a computed property that filters v-for data source.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`\n },\n [\"COMPILER_NATIVE_TEMPLATE\"]: {\n message: `<template> with no special directives will render as a native template element instead of its inner content in Vue 3.`\n },\n [\"COMPILER_INLINE_TEMPLATE\"]: {\n message: `\"inline-template\" has been removed in Vue 3.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`\n },\n [\"COMPILER_FILTERS\"]: {\n message: `filters have been removed in Vue 3. The \"|\" symbol will be treated as native JavaScript bitwise OR operator. Use method calls or computed properties instead.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`\n }\n};\nfunction getCompatValue(key, { compatConfig }) {\n const value = compatConfig && compatConfig[key];\n if (key === \"MODE\") {\n return value || 3;\n } else {\n return value;\n }\n}\nfunction isCompatEnabled(key, context) {\n const mode = getCompatValue(\"MODE\", context);\n const value = getCompatValue(key, context);\n return mode === 3 ? value === true : value !== false;\n}\nfunction checkCompatEnabled(key, context, loc, ...args) {\n const enabled = isCompatEnabled(key, context);\n if (!!(process.env.NODE_ENV !== \"production\") && enabled) {\n warnDeprecation(key, context, loc, ...args);\n }\n return enabled;\n}\nfunction warnDeprecation(key, context, loc, ...args) {\n const val = getCompatValue(key, context);\n if (val === \"suppress-warning\") {\n return;\n }\n const { message, link } = deprecationData[key];\n const msg = `(deprecation ${key}) ${typeof message === \"function\" ? message(...args) : message}${link ? `\n Details: ${link}` : ``}`;\n const err = new SyntaxError(msg);\n err.code = key;\n if (loc) err.loc = loc;\n context.onWarn(err);\n}\n\nfunction defaultOnError(error) {\n throw error;\n}\nfunction defaultOnWarn(msg) {\n !!(process.env.NODE_ENV !== \"production\") && console.warn(`[Vue warn] ${msg.message}`);\n}\nfunction createCompilerError(code, loc, messages, additionalMessage) {\n const msg = !!(process.env.NODE_ENV !== \"production\") || false ? (messages || errorMessages)[code] + (additionalMessage || ``) : `https://vuejs.org/error-reference/#compiler-${code}`;\n const error = new SyntaxError(String(msg));\n error.code = code;\n error.loc = loc;\n return error;\n}\nconst ErrorCodes = {\n \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\": 0,\n \"0\": \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\",\n \"CDATA_IN_HTML_CONTENT\": 1,\n \"1\": \"CDATA_IN_HTML_CONTENT\",\n \"DUPLICATE_ATTRIBUTE\": 2,\n \"2\": \"DUPLICATE_ATTRIBUTE\",\n \"END_TAG_WITH_ATTRIBUTES\": 3,\n \"3\": \"END_TAG_WITH_ATTRIBUTES\",\n \"END_TAG_WITH_TRAILING_SOLIDUS\": 4,\n \"4\": \"END_TAG_WITH_TRAILING_SOLIDUS\",\n \"EOF_BEFORE_TAG_NAME\": 5,\n \"5\": \"EOF_BEFORE_TAG_NAME\",\n \"EOF_IN_CDATA\": 6,\n \"6\": \"EOF_IN_CDATA\",\n \"EOF_IN_COMMENT\": 7,\n \"7\": \"EOF_IN_COMMENT\",\n \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\": 8,\n \"8\": \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\",\n \"EOF_IN_TAG\": 9,\n \"9\": \"EOF_IN_TAG\",\n \"INCORRECTLY_CLOSED_COMMENT\": 10,\n \"10\": \"INCORRECTLY_CLOSED_COMMENT\",\n \"INCORRECTLY_OPENED_COMMENT\": 11,\n \"11\": \"INCORRECTLY_OPENED_COMMENT\",\n \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\": 12,\n \"12\": \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\",\n \"MISSING_ATTRIBUTE_VALUE\": 13,\n \"13\": \"MISSING_ATTRIBUTE_VALUE\",\n \"MISSING_END_TAG_NAME\": 14,\n \"14\": \"MISSING_END_TAG_NAME\",\n \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\": 15,\n \"15\": \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\",\n \"NESTED_COMMENT\": 16,\n \"16\": \"NESTED_COMMENT\",\n \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\": 17,\n \"17\": \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\",\n \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\": 18,\n \"18\": \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\",\n \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\": 19,\n \"19\": \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\",\n \"UNEXPECTED_NULL_CHARACTER\": 20,\n \"20\": \"UNEXPECTED_NULL_CHARACTER\",\n \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\": 21,\n \"21\": \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\",\n \"UNEXPECTED_SOLIDUS_IN_TAG\": 22,\n \"22\": \"UNEXPECTED_SOLIDUS_IN_TAG\",\n \"X_INVALID_END_TAG\": 23,\n \"23\": \"X_INVALID_END_TAG\",\n \"X_MISSING_END_TAG\": 24,\n \"24\": \"X_MISSING_END_TAG\",\n \"X_MISSING_INTERPOLATION_END\": 25,\n \"25\": \"X_MISSING_INTERPOLATION_END\",\n \"X_MISSING_DIRECTIVE_NAME\": 26,\n \"26\": \"X_MISSING_DIRECTIVE_NAME\",\n \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\": 27,\n \"27\": \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\",\n \"X_V_IF_NO_EXPRESSION\": 28,\n \"28\": \"X_V_IF_NO_EXPRESSION\",\n \"X_V_IF_SAME_KEY\": 29,\n \"29\": \"X_V_IF_SAME_KEY\",\n \"X_V_ELSE_NO_ADJACENT_IF\": 30,\n \"30\": \"X_V_ELSE_NO_ADJACENT_IF\",\n \"X_V_FOR_NO_EXPRESSION\": 31,\n \"31\": \"X_V_FOR_NO_EXPRESSION\",\n \"X_V_FOR_MALFORMED_EXPRESSION\": 32,\n \"32\": \"X_V_FOR_MALFORMED_EXPRESSION\",\n \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\": 33,\n \"33\": \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\",\n \"X_V_BIND_NO_EXPRESSION\": 34,\n \"34\": \"X_V_BIND_NO_EXPRESSION\",\n \"X_V_ON_NO_EXPRESSION\": 35,\n \"35\": \"X_V_ON_NO_EXPRESSION\",\n \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\": 36,\n \"36\": \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\",\n \"X_V_SLOT_MIXED_SLOT_USAGE\": 37,\n \"37\": \"X_V_SLOT_MIXED_SLOT_USAGE\",\n \"X_V_SLOT_DUPLICATE_SLOT_NAMES\": 38,\n \"38\": \"X_V_SLOT_DUPLICATE_SLOT_NAMES\",\n \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\": 39,\n \"39\": \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\",\n \"X_V_SLOT_MISPLACED\": 40,\n \"40\": \"X_V_SLOT_MISPLACED\",\n \"X_V_MODEL_NO_EXPRESSION\": 41,\n \"41\": \"X_V_MODEL_NO_EXPRESSION\",\n \"X_V_MODEL_MALFORMED_EXPRESSION\": 42,\n \"42\": \"X_V_MODEL_MALFORMED_EXPRESSION\",\n \"X_V_MODEL_ON_SCOPE_VARIABLE\": 43,\n \"43\": \"X_V_MODEL_ON_SCOPE_VARIABLE\",\n \"X_V_MODEL_ON_PROPS\": 44,\n \"44\": \"X_V_MODEL_ON_PROPS\",\n \"X_V_MODEL_ON_CONST\": 45,\n \"45\": \"X_V_MODEL_ON_CONST\",\n \"X_INVALID_EXPRESSION\": 46,\n \"46\": \"X_INVALID_EXPRESSION\",\n \"X_KEEP_ALIVE_INVALID_CHILDREN\": 47,\n \"47\": \"X_KEEP_ALIVE_INVALID_CHILDREN\",\n \"X_PREFIX_ID_NOT_SUPPORTED\": 48,\n \"48\": \"X_PREFIX_ID_NOT_SUPPORTED\",\n \"X_MODULE_MODE_NOT_SUPPORTED\": 49,\n \"49\": \"X_MODULE_MODE_NOT_SUPPORTED\",\n \"X_CACHE_HANDLER_NOT_SUPPORTED\": 50,\n \"50\": \"X_CACHE_HANDLER_NOT_SUPPORTED\",\n \"X_SCOPE_ID_NOT_SUPPORTED\": 51,\n \"51\": \"X_SCOPE_ID_NOT_SUPPORTED\",\n \"X_VNODE_HOOKS\": 52,\n \"52\": \"X_VNODE_HOOKS\",\n \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\": 53,\n \"53\": \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\",\n \"__EXTEND_POINT__\": 54,\n \"54\": \"__EXTEND_POINT__\"\n};\nconst errorMessages = {\n // parse errors\n [0]: \"Illegal comment.\",\n [1]: \"CDATA section is allowed only in XML context.\",\n [2]: \"Duplicate attribute.\",\n [3]: \"End tag cannot have attributes.\",\n [4]: \"Illegal '/' in tags.\",\n [5]: \"Unexpected EOF in tag.\",\n [6]: \"Unexpected EOF in CDATA section.\",\n [7]: \"Unexpected EOF in comment.\",\n [8]: \"Unexpected EOF in script.\",\n [9]: \"Unexpected EOF in tag.\",\n [10]: \"Incorrectly closed comment.\",\n [11]: \"Incorrectly opened comment.\",\n [12]: \"Illegal tag name. Use '&lt;' to print '<'.\",\n [13]: \"Attribute value was expected.\",\n [14]: \"End tag name was expected.\",\n [15]: \"Whitespace was expected.\",\n [16]: \"Unexpected '<!--' in comment.\",\n [17]: `Attribute name cannot contain U+0022 (\"), U+0027 ('), and U+003C (<).`,\n [18]: \"Unquoted attribute value cannot contain U+0022 (\\\"), U+0027 ('), U+003C (<), U+003D (=), and U+0060 (`).\",\n [19]: \"Attribute name cannot start with '='.\",\n [21]: \"'<?' is allowed only in XML context.\",\n [20]: `Unexpected null character.`,\n [22]: \"Illegal '/' in tags.\",\n // Vue-specific parse errors\n [23]: \"Invalid end tag.\",\n [24]: \"Element is missing end tag.\",\n [25]: \"Interpolation end sign was not found.\",\n [27]: \"End bracket for dynamic directive argument was not found. Note that dynamic directive argument cannot contain spaces.\",\n [26]: \"Legal directive name was expected.\",\n // transform errors\n [28]: `v-if/v-else-if is missing expression.`,\n [29]: `v-if/else branches must use unique keys.`,\n [30]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,\n [31]: `v-for is missing expression.`,\n [32]: `v-for has invalid expression.`,\n [33]: `<template v-for> key should be placed on the <template> tag.`,\n [34]: `v-bind is missing expression.`,\n [53]: `v-bind with same-name shorthand only allows static argument.`,\n [35]: `v-on is missing expression.`,\n [36]: `Unexpected custom directive on <slot> outlet.`,\n [37]: `Mixed v-slot usage on both the component and nested <template>. When there are multiple named slots, all slots should use <template> syntax to avoid scope ambiguity.`,\n [38]: `Duplicate slot names found. `,\n [39]: `Extraneous children found when component already has explicitly named default slot. These children will be ignored.`,\n [40]: `v-slot can only be used on components or <template> tags.`,\n [41]: `v-model is missing expression.`,\n [42]: `v-model value must be a valid JavaScript member expression.`,\n [43]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\n [44]: `v-model cannot be used on a prop, because local prop bindings are not writable.\nUse a v-bind binding combined with a v-on listener that emits update:x event instead.`,\n [45]: `v-model cannot be used on a const binding because it is not writable.`,\n [46]: `Error parsing JavaScript expression: `,\n [47]: `<KeepAlive> expects exactly one child component.`,\n [52]: `@vnode-* hooks in templates are no longer supported. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted. @vnode-* hooks support has been removed in 3.4.`,\n // generic errors\n [48]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\n [49]: `ES module mode is not supported in this build of compiler.`,\n [50]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\n [51]: `\"scopeId\" option is only supported in module mode.`,\n // just to fulfill types\n [54]: ``\n};\n\nfunction walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = /* @__PURE__ */ Object.create(null)) {\n {\n return;\n }\n}\nfunction isReferencedIdentifier(id, parent, parentStack) {\n {\n return false;\n }\n}\nfunction isInDestructureAssignment(parent, parentStack) {\n if (parent && (parent.type === \"ObjectProperty\" || parent.type === \"ArrayPattern\")) {\n let i = parentStack.length;\n while (i--) {\n const p = parentStack[i];\n if (p.type === \"AssignmentExpression\") {\n return true;\n } else if (p.type !== \"ObjectProperty\" && !p.type.endsWith(\"Pattern\")) {\n break;\n }\n }\n }\n return false;\n}\nfunction isInNewExpression(parentStack) {\n let i = parentStack.length;\n while (i--) {\n const p = parentStack[i];\n if (p.type === \"NewExpression\") {\n return true;\n } else if (p.type !== \"MemberExpression\") {\n break;\n }\n }\n return false;\n}\nfunction walkFunctionParams(node, onIdent) {\n for (const p of node.params) {\n for (const id of extractIdentifiers(p)) {\n onIdent(id);\n }\n }\n}\nfunction walkBlockDeclarations(block, onIdent) {\n const body = block.type === \"SwitchCase\" ? block.consequent : block.body;\n for (const stmt of body) {\n if (stmt.type === \"VariableDeclaration\") {\n if (stmt.declare) continue;\n for (const decl of stmt.declarations) {\n for (const id of extractIdentifiers(decl.id)) {\n onIdent(id);\n }\n }\n } else if (stmt.type === \"FunctionDeclaration\" || stmt.type === \"ClassDeclaration\") {\n if (stmt.declare || !stmt.id) continue;\n onIdent(stmt.id);\n } else if (isForStatement(stmt)) {\n walkForStatement(stmt, true, onIdent);\n } else if (stmt.type === \"SwitchStatement\") {\n walkSwitchStatement(stmt, true, onIdent);\n }\n }\n}\nfunction isForStatement(stmt) {\n return stmt.type === \"ForOfStatement\" || stmt.type === \"ForInStatement\" || stmt.type === \"ForStatement\";\n}\nfunction walkForStatement(stmt, isVar, onIdent) {\n const variable = stmt.type === \"ForStatement\" ? stmt.init : stmt.left;\n if (variable && variable.type === \"VariableDeclaration\" && (variable.kind === \"var\" ? isVar : !isVar)) {\n for (const decl of variable.declarations) {\n for (const id of extractIdentifiers(decl.id)) {\n onIdent(id);\n }\n }\n }\n}\nfunction walkSwitchStatement(stmt, isVar, onIdent) {\n for (const cs of stmt.cases) {\n for (const stmt2 of cs.consequent) {\n if (stmt2.type === \"VariableDeclaration\" && (stmt2.kind === \"var\" ? isVar : !isVar)) {\n for (const decl of stmt2.declarations) {\n for (const id of extractIdentifiers(decl.id)) {\n onIdent(id);\n }\n }\n }\n }\n walkBlockDeclarations(cs, onIdent);\n }\n}\nfunction extractIdentifiers(param, nodes = []) {\n switch (param.type) {\n case \"Identifier\":\n nodes.push(param);\n break;\n case \"MemberExpression\":\n let object = param;\n while (object.type === \"MemberExpression\") {\n object = object.object;\n }\n nodes.push(object);\n break;\n case \"ObjectPattern\":\n for (const prop of param.properties) {\n if (prop.type === \"RestElement\") {\n extractIdentifiers(prop.argument, nodes);\n } else {\n extractIdentifiers(prop.value, nodes);\n }\n }\n break;\n case \"ArrayPattern\":\n param.elements.forEach((element) => {\n if (element) extractIdentifiers(element, nodes);\n });\n break;\n case \"RestElement\":\n extractIdentifiers(param.argument, nodes);\n break;\n case \"AssignmentPattern\":\n extractIdentifiers(param.left, nodes);\n break;\n }\n return nodes;\n}\nconst isFunctionType = (node) => {\n return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\n};\nconst isStaticProperty = (node) => node && (node.type === \"ObjectProperty\" || node.type === \"ObjectMethod\") && !node.computed;\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\nconst TS_NODE_TYPES = [\n \"TSAsExpression\",\n // foo as number\n \"TSTypeAssertion\",\n // (<number>foo)\n \"TSNonNullExpression\",\n // foo!\n \"TSInstantiationExpression\",\n // foo<string>\n \"TSSatisfiesExpression\"\n // foo satisfies T\n];\nfunction unwrapTSNode(node) {\n if (TS_NODE_TYPES.includes(node.type)) {\n return unwrapTSNode(node.expression);\n } else {\n return node;\n }\n}\n\nconst isStaticExp = (p) => p.type === 4 && p.isStatic;\nfunction isCoreComponent(tag) {\n switch (tag) {\n case \"Teleport\":\n case \"teleport\":\n return TELEPORT;\n case \"Suspense\":\n case \"suspense\":\n return SUSPENSE;\n case \"KeepAlive\":\n case \"keep-alive\":\n return KEEP_ALIVE;\n case \"BaseTransition\":\n case \"base-transition\":\n return BASE_TRANSITION;\n }\n}\nconst nonIdentifierRE = /^$|^\\d|[^\\$\\w\\xA0-\\uFFFF]/;\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\nconst getExpSource = (exp) => exp.type === 4 ? exp.content : exp.loc.source;\nconst isMemberExpressionBrowser = (exp) => {\n const path = getExpSource(exp).trim().replace(whitespaceRE, (s) => s.trim());\n let state = 0 /* inMemberExp */;\n let stateStack = [];\n let currentOpenBracketCount = 0;\n let currentOpenParensCount = 0;\n let currentStringType = null;\n for (let i = 0; i < path.length; i++) {\n const char = path.charAt(i);\n switch (state) {\n case 0 /* inMemberExp */:\n if (char === \"[\") {\n stateStack.push(state);\n state = 1 /* inBrackets */;\n currentOpenBracketCount++;\n } else if (char === \"(\") {\n stateStack.push(state);\n state = 2 /* inParens */;\n currentOpenParensCount++;\n } else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\n return false;\n }\n break;\n case 1 /* inBrackets */:\n if (char === `'` || char === `\"` || char === \"`\") {\n stateStack.push(state);\n state = 3 /* inString */;\n currentStringType = char;\n } else if (char === `[`) {\n currentOpenBracketCount++;\n } else if (char === `]`) {\n if (!--currentOpenBracketCount) {\n state = stateStack.pop();\n }\n }\n break;\n case 2 /* inParens */:\n if (char === `'` || char === `\"` || char === \"`\") {\n stateStack.push(state);\n state = 3 /* inString */;\n currentStringType = char;\n } else if (char === `(`) {\n currentOpenParensCount++;\n } else if (char === `)`) {\n if (i === path.length - 1) {\n return false;\n }\n if (!--currentOpenParensCount) {\n state = stateStack.pop();\n }\n }\n break;\n case 3 /* inString */:\n if (char === currentStringType) {\n state = stateStack.pop();\n currentStringType = null;\n }\n break;\n }\n }\n return !currentOpenBracketCount && !currentOpenParensCount;\n};\nconst isMemberExpressionNode = NOOP ;\nconst isMemberExpression = isMemberExpressionBrowser ;\nconst fnExpRE = /^\\s*(?:async\\s*)?(?:\\([^)]*?\\)|[\\w$_]+)\\s*(?::[^=]+)?=>|^\\s*(?:async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/;\nconst isFnExpressionBrowser = (exp) => fnExpRE.test(getExpSource(exp));\nconst isFnExpressionNode = NOOP ;\nconst isFnExpression = isFnExpressionBrowser ;\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\n return advancePositionWithMutation(\n {\n offset: pos.offset,\n line: pos.line,\n column: pos.column\n },\n source,\n numberOfCharacters\n );\n}\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\n let linesCount = 0;\n let lastNewLinePos = -1;\n for (let i = 0; i < numberOfCharacters; i++) {\n if (source.charCodeAt(i) === 10) {\n linesCount++;\n lastNewLinePos = i;\n }\n }\n pos.offset += numberOfCharacters;\n pos.line += linesCount;\n pos.column = lastNewLinePos === -1 ? pos.column + numberOfCharacters : numberOfCharacters - lastNewLinePos;\n return pos;\n}\nfunction assert(condition, msg) {\n if (!condition) {\n throw new Error(msg || `unexpected compiler condition`);\n }\n}\nfunction findDir(node, name, allowEmpty = false) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7 && (allowEmpty || p.exp) && (isString(name) ? p.name === name : name.test(p.name))) {\n return p;\n }\n }\n}\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 6) {\n if (dynamicOnly) continue;\n if (p.name === name && (p.value || allowEmpty)) {\n return p;\n }\n } else if (p.name === \"bind\" && (p.exp || allowEmpty) && isStaticArgOf(p.arg, name)) {\n return p;\n }\n }\n}\nfunction isStaticArgOf(arg, name) {\n return !!(arg && isStaticExp(arg) && arg.content === name);\n}\nfunction hasDynamicKeyVBind(node) {\n return node.props.some(\n (p) => p.type === 7 && p.name === \"bind\" && (!p.arg || // v-bind=\"obj\"\n p.arg.type !== 4 || // v-bind:[_ctx.foo]\n !p.arg.isStatic)\n // v-bind:[foo]\n );\n}\nfunction isText$1(node) {\n return node.type === 5 || node.type === 2;\n}\nfunction isVPre(p) {\n return p.type === 7 && p.name === \"pre\";\n}\nfunction isVSlot(p) {\n return p.type === 7 && p.name === \"slot\";\n}\nfunction isTemplateNode(node) {\n return node.type === 1 && node.tagType === 3;\n}\nfunction isSlotOutlet(node) {\n return node.type === 1 && node.tagType === 2;\n}\nconst propsHelperSet = /* @__PURE__ */ new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\nfunction getUnnormalizedProps(props, callPath = []) {\n if (props && !isString(props) && props.type === 14) {\n const callee = props.callee;\n if (!isString(callee) && propsHelperSet.has(callee)) {\n return getUnnormalizedProps(\n props.arguments[0],\n callPath.concat(props)\n );\n }\n }\n return [props, callPath];\n}\nfunction injectProp(node, prop, context) {\n let propsWithInjection;\n let props = node.type === 13 ? node.props : node.arguments[2];\n let callPath = [];\n let parentCall;\n if (props && !isString(props) && props.type === 14) {\n const ret = getUnnormalizedProps(props);\n props = ret[0];\n callPath = ret[1];\n parentCall = callPath[callPath.length - 1];\n }\n if (props == null || isString(props)) {\n propsWithInjection = createObjectExpression([prop]);\n } else if (props.type === 14) {\n const first = props.arguments[0];\n if (!isString(first) && first.type === 15) {\n if (!hasProp(prop, first)) {\n first.properties.unshift(prop);\n }\n } else {\n if (props.callee === TO_HANDLERS) {\n propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n createObjectExpression([prop]),\n props\n ]);\n } else {\n props.arguments.unshift(createObjectExpression([prop]));\n }\n }\n !propsWithInjection && (propsWithInjection = props);\n } else if (props.type === 15) {\n if (!hasProp(prop, props)) {\n props.properties.unshift(prop);\n }\n propsWithInjection = props;\n } else {\n propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n createObjectExpression([prop]),\n props\n ]);\n if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\n parentCall = callPath[callPath.length - 2];\n }\n }\n if (node.type === 13) {\n if (parentCall) {\n parentCall.arguments[0] = propsWithInjection;\n } else {\n node.props = propsWithInjection;\n }\n } else {\n if (parentCall) {\n parentCall.arguments[0] = propsWithInjection;\n } else {\n node.arguments[2] = propsWithInjection;\n }\n }\n}\nfunction hasProp(prop, props) {\n let result = false;\n if (prop.key.type === 4) {\n const propKeyName = prop.key.content;\n result = props.properties.some(\n (p) => p.key.type === 4 && p.key.content === propKeyName\n );\n }\n return result;\n}\nfunction toValidAssetId(name, type) {\n return `_${type}_${name.replace(/[^\\w]/g, (searchValue, replaceValue) => {\n return searchValue === \"-\" ? \"_\" : name.charCodeAt(replaceValue).toString();\n })}`;\n}\nfunction hasScopeRef(node, ids) {\n if (!node || Object.keys(ids).length === 0) {\n return false;\n }\n switch (node.type) {\n case 1:\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7 && (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\n return true;\n }\n }\n return node.children.some((c) => hasScopeRef(c, ids));\n case 11:\n if (hasScopeRef(node.source, ids)) {\n return true;\n }\n return node.children.some((c) => hasScopeRef(c, ids));\n case 9:\n return node.branches.some((b) => hasScopeRef(b, ids));\n case 10:\n if (hasScopeRef(node.condition, ids)) {\n return true;\n }\n return node.children.some((c) => hasScopeRef(c, ids));\n case 4:\n return !node.isStatic && isSimpleIdentifier(node.content) && !!ids[node.content];\n case 8:\n return node.children.some((c) => isObject(c) && hasScopeRef(c, ids));\n case 5:\n case 12:\n return hasScopeRef(node.content, ids);\n case 2:\n case 3:\n case 20:\n return false;\n default:\n if (!!(process.env.NODE_ENV !== \"production\")) ;\n return false;\n }\n}\nfunction getMemoedVNodeCall(node) {\n if (node.type === 14 && node.callee === WITH_MEMO) {\n return node.arguments[1].returns;\n } else {\n return node;\n }\n}\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+(\\S[\\s\\S]*)/;\nfunction isAllWhitespace(str) {\n for (let i = 0; i < str.length; i++) {\n if (!isWhitespace(str.charCodeAt(i))) {\n return false;\n }\n }\n return true;\n}\nfunction isWhitespaceText(node) {\n return node.type === 2 && isAllWhitespace(node.content) || node.type === 12 && isWhitespaceText(node.content);\n}\nfunction isCommentOrWhitespace(node) {\n return node.type === 3 || isWhitespaceText(node);\n}\n\nconst defaultParserOptions = {\n parseMode: \"base\",\n ns: 0,\n delimiters: [`{{`, `}}`],\n getNamespace: () => 0,\n isVoidTag: NO,\n isPreTag: NO,\n isIgnoreNewlineTag: NO,\n isCustomElement: NO,\n onError: defaultOnError,\n onWarn: defaultOnWarn,\n comments: !!(process.env.NODE_ENV !== \"production\"),\n prefixIdentifiers: false\n};\nlet currentOptions = defaultParserOptions;\nlet currentRoot = null;\nlet currentInput = \"\";\nlet currentOpenTag = null;\nlet currentProp = null;\nlet currentAttrValue = \"\";\nlet currentAttrStartIndex = -1;\nlet currentAttrEndIndex = -1;\nlet inPre = 0;\nlet inVPre = false;\nlet currentVPreBoundary = null;\nconst stack = [];\nconst tokenizer = new Tokenizer(stack, {\n onerr: emitError,\n ontext(start, end) {\n onText(getSlice(start, end), start, end);\n },\n ontextentity(char, start, end) {\n onText(char, start, end);\n },\n oninterpolation(start, end) {\n if (inVPre) {\n return onText(getSlice(start, end), start, end);\n }\n let innerStart = start + tokenizer.delimiterOpen.length;\n let innerEnd = end - tokenizer.delimiterClose.length;\n while (isWhitespace(currentInput.charCodeAt(innerStart))) {\n innerStart++;\n }\n while (isWhitespace(currentInput.charCodeAt(innerEnd - 1))) {\n innerEnd--;\n }\n let exp = getSlice(innerStart, innerEnd);\n if (exp.includes(\"&\")) {\n {\n exp = currentOptions.decodeEntities(exp, false);\n }\n }\n addNode({\n type: 5,\n content: createExp(exp, false, getLoc(innerStart, innerEnd)),\n loc: getLoc(start, end)\n });\n },\n onopentagname(start, end) {\n const name = getSlice(start, end);\n currentOpenTag = {\n type: 1,\n tag: name,\n ns: currentOptions.getNamespace(name, stack[0], currentOptions.ns),\n tagType: 0,\n // will be refined on tag close\n props: [],\n children: [],\n loc: getLoc(start - 1, end),\n codegenNode: void 0\n };\n },\n onopentagend(end) {\n endOpenTag(end);\n },\n onclosetag(start, end) {\n const name = getSlice(start, end);\n if (!currentOptions.isVoidTag(name)) {\n let found = false;\n for (let i = 0; i < stack.length; i++) {\n const e = stack[i];\n if (e.tag.toLowerCase() === name.toLowerCase()) {\n found = true;\n if (i > 0) {\n emitError(24, stack[0].loc.start.offset);\n }\n for (let j = 0; j <= i; j++) {\n const el = stack.shift();\n onCloseTag(el, end, j < i);\n }\n break;\n }\n }\n if (!found) {\n emitError(23, backTrack(start, 60));\n }\n }\n },\n onselfclosingtag(end) {\n const name = currentOpenTag.tag;\n currentOpenTag.isSelfClosing = true;\n endOpenTag(end);\n if (stack[0] && stack[0].tag === name) {\n onCloseTag(stack.shift(), end);\n }\n },\n onattribname(start, end) {\n currentProp = {\n type: 6,\n name: getSlice(start, end),\n nameLoc: getLoc(start, end),\n value: void 0,\n loc: getLoc(start)\n };\n },\n ondirname(start, end) {\n const raw = getSlice(start, end);\n const name = raw === \".\" || raw === \":\" ? \"bind\" : raw === \"@\" ? \"on\" : raw === \"#\" ? \"slot\" : raw.slice(2);\n if (!inVPre && name === \"\") {\n emitError(26, start);\n }\n if (inVPre || name === \"\") {\n currentProp = {\n type: 6,\n name: raw,\n nameLoc: getLoc(start, end),\n value: void 0,\n loc: getLoc(start)\n };\n } else {\n currentProp = {\n type: 7,\n name,\n rawName: raw,\n exp: void 0,\n arg: void 0,\n modifiers: raw === \".\" ? [createSimpleExpression(\"prop\")] : [],\n loc: getLoc(start)\n };\n if (name === \"pre\") {\n inVPre = tokenizer.inVPre = true;\n currentVPreBoundary = currentOpenTag;\n const props = currentOpenTag.props;\n for (let i = 0; i < props.length; i++) {\n if (props[i].type === 7) {\n props[i] = dirToAttr(props[i]);\n }\n }\n }\n }\n },\n ondirarg(start, end) {\n if (start === end) return;\n const arg = getSlice(start, end);\n if (inVPre && !isVPre(currentProp)) {\n currentProp.name += arg;\n setLocEnd(currentProp.nameLoc, end);\n } else {\n const isStatic = arg[0] !== `[`;\n currentProp.arg = createExp(\n isStatic ? arg : arg.slice(1, -1),\n isStatic,\n getLoc(start, end),\n isStatic ? 3 : 0\n );\n }\n },\n ondirmodifier(start, end) {\n const mod = getSlice(start, end);\n if (inVPre && !isVPre(currentProp)) {\n currentProp.name += \".\" + mod;\n setLocEnd(currentProp.nameLoc, end);\n } else if (currentProp.name === \"slot\") {\n const arg = currentProp.arg;\n if (arg) {\n arg.content += \".\" + mod;\n setLocEnd(arg.loc, end);\n }\n } else {\n const exp = createSimpleExpression(mod, true, getLoc(start, end));\n currentProp.modifiers.push(exp);\n }\n },\n onattribdata(start, end) {\n currentAttrValue += getSlice(start, end);\n if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n currentAttrEndIndex = end;\n },\n onattribentity(char, start, end) {\n currentAttrValue += char;\n if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n currentAttrEndIndex = end;\n },\n onattribnameend(end) {\n const start = currentProp.loc.start.offset;\n const name = getSlice(start, end);\n if (currentProp.type === 7) {\n currentProp.rawName = name;\n }\n if (currentOpenTag.props.some(\n (p) => (p.type === 7 ? p.rawName : p.name) === name\n )) {\n emitError(2, start);\n }\n },\n onattribend(quote, end) {\n if (currentOpenTag && currentProp) {\n setLocEnd(currentProp.loc, end);\n if (quote !== 0) {\n if (currentAttrValue.includes(\"&\")) {\n currentAttrValue = currentOptions.decodeEntities(\n currentAttrValue,\n true\n );\n }\n if (currentProp.type === 6) {\n if (currentProp.name === \"class\") {\n currentAttrValue = condense(currentAttrValue).trim();\n }\n if (quote === 1 && !currentAttrValue) {\n emitError(13, end);\n }\n currentProp.value = {\n type: 2,\n content: currentAttrValue,\n loc: quote === 1 ? getLoc(currentAttrStartIndex, currentAttrEndIndex) : getLoc(currentAttrStartIndex - 1, currentAttrEndIndex + 1)\n };\n if (tokenizer.inSFCRoot && currentOpenTag.tag === \"template\" && currentProp.name === \"lang\" && currentAttrValue && currentAttrValue !== \"html\") {\n tokenizer.enterRCDATA(toCharCodes(`</template`), 0);\n }\n } else {\n let expParseMode = 0 /* Normal */;\n currentProp.exp = createExp(\n currentAttrValue,\n false,\n getLoc(currentAttrStartIndex, currentAttrEndIndex),\n 0,\n expParseMode\n );\n if (currentProp.name === \"for\") {\n currentProp.forParseResult = parseForExpression(currentProp.exp);\n }\n let syncIndex = -1;\n if (currentProp.name === \"bind\" && (syncIndex = currentProp.modifiers.findIndex(\n (mod) => mod.content === \"sync\"\n )) > -1 && checkCompatEnabled(\n \"COMPILER_V_BIND_SYNC\",\n currentOptions,\n currentProp.loc,\n currentProp.arg.loc.source\n )) {\n currentProp.name = \"model\";\n currentProp.modifiers.splice(syncIndex, 1);\n }\n }\n }\n if (currentProp.type !== 7 || currentProp.name !== \"pre\") {\n currentOpenTag.props.push(currentProp);\n }\n }\n currentAttrValue = \"\";\n currentAttrStartIndex = currentAttrEndIndex = -1;\n },\n oncomment(start, end) {\n if (currentOptions.comments) {\n addNode({\n type: 3,\n content: getSlice(start, end),\n loc: getLoc(start - 4, end + 3)\n });\n }\n },\n onend() {\n const end = currentInput.length;\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && tokenizer.state !== 1) {\n switch (tokenizer.state) {\n case 5:\n case 8:\n emitError(5, end);\n break;\n case 3:\n case 4:\n emitError(\n 25,\n tokenizer.sectionStart\n );\n break;\n case 28:\n if (tokenizer.currentSequence === Sequences.CdataEnd) {\n emitError(6, end);\n } else {\n emitError(7, end);\n }\n break;\n case 6:\n case 7:\n case 9:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n case 16:\n case 17:\n case 18:\n case 19:\n // \"\n case 20:\n // '\n case 21:\n emitError(9, end);\n break;\n }\n }\n for (let index = 0; index < stack.length; index++) {\n onCloseTag(stack[index], end - 1);\n emitError(24, stack[index].loc.start.offset);\n }\n },\n oncdata(start, end) {\n if (stack[0].ns !== 0) {\n onText(getSlice(start, end), start, end);\n } else {\n emitError(1, start - 9);\n }\n },\n onprocessinginstruction(start) {\n if ((stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n emitError(\n 21,\n start - 1\n );\n }\n }\n});\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nconst stripParensRE = /^\\(|\\)$/g;\nfunction parseForExpression(input) {\n const loc = input.loc;\n const exp = input.content;\n const inMatch = exp.match(forAliasRE);\n if (!inMatch) return;\n const [, LHS, RHS] = inMatch;\n const createAliasExpression = (content, offset, asParam = false) => {\n const start = loc.start.offset + offset;\n const end = start + content.length;\n return createExp(\n content,\n false,\n getLoc(start, end),\n 0,\n asParam ? 1 /* Params */ : 0 /* Normal */\n );\n };\n const result = {\n source: createAliasExpression(RHS.trim(), exp.indexOf(RHS, LHS.length)),\n value: void 0,\n key: void 0,\n index: void 0,\n finalized: false\n };\n let valueContent = LHS.trim().replace(stripParensRE, \"\").trim();\n const trimmedOffset = LHS.indexOf(valueContent);\n const iteratorMatch = valueContent.match(forIteratorRE);\n if (iteratorMatch) {\n valueContent = valueContent.replace(forIteratorRE, \"\").trim();\n const keyContent = iteratorMatch[1].trim();\n let keyOffset;\n if (keyContent) {\n keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\n result.key = createAliasExpression(keyContent, keyOffset, true);\n }\n if (iteratorMatch[2]) {\n const indexContent = iteratorMatch[2].trim();\n if (indexContent) {\n result.index = createAliasExpression(\n indexContent,\n exp.indexOf(\n indexContent,\n result.key ? keyOffset + keyContent.length : trimmedOffset + valueContent.length\n ),\n true\n );\n }\n }\n }\n if (valueContent) {\n result.value = createAliasExpression(valueContent, trimmedOffset, true);\n }\n return result;\n}\nfunction getSlice(start, end) {\n return currentInput.slice(start, end);\n}\nfunction endOpenTag(end) {\n if (tokenizer.inSFCRoot) {\n currentOpenTag.innerLoc = getLoc(end + 1, end + 1);\n }\n addNode(currentOpenTag);\n const { tag, ns } = currentOpenTag;\n if (ns === 0 && currentOptions.isPreTag(tag)) {\n inPre++;\n }\n if (currentOptions.isVoidTag(tag)) {\n onCloseTag(currentOpenTag, end);\n } else {\n stack.unshift(currentOpenTag);\n if (ns === 1 || ns === 2) {\n tokenizer.inXML = true;\n }\n }\n currentOpenTag = null;\n}\nfunction onText(content, start, end) {\n {\n const tag = stack[0] && stack[0].tag;\n if (tag !== \"script\" && tag !== \"style\" && content.includes(\"&\")) {\n content = currentOptions.decodeEntities(content, false);\n }\n }\n const parent = stack[0] || currentRoot;\n const lastNode = parent.children[parent.children.length - 1];\n if (lastNode && lastNode.type === 2) {\n lastNode.content += content;\n setLocEnd(lastNode.loc, end);\n } else {\n parent.children.push({\n type: 2,\n content,\n loc: getLoc(start, end)\n });\n }\n}\nfunction onCloseTag(el, end, isImplied = false) {\n if (isImplied) {\n setLocEnd(el.loc, backTrack(end, 60));\n } else {\n setLocEnd(el.loc, lookAhead(end, 62) + 1);\n }\n if (tokenizer.inSFCRoot) {\n if (el.children.length) {\n el.innerLoc.end = extend({}, el.children[el.children.length - 1].loc.end);\n } else {\n el.innerLoc.end = extend({}, el.innerLoc.start);\n }\n el.innerLoc.source = getSlice(\n el.innerLoc.start.offset,\n el.innerLoc.end.offset\n );\n }\n const { tag, ns, children } = el;\n if (!inVPre) {\n if (tag === \"slot\") {\n el.tagType = 2;\n } else if (isFragmentTemplate(el)) {\n el.tagType = 3;\n } else if (isComponent(el)) {\n el.tagType = 1;\n }\n }\n if (!tokenizer.inRCDATA) {\n el.children = condenseWhitespace(children);\n }\n if (ns === 0 && currentOptions.isIgnoreNewlineTag(tag)) {\n const first = children[0];\n if (first && first.type === 2) {\n first.content = first.content.replace(/^\\r?\\n/, \"\");\n }\n }\n if (ns === 0 && currentOptions.isPreTag(tag)) {\n inPre--;\n }\n if (currentVPreBoundary === el) {\n inVPre = tokenizer.inVPre = false;\n currentVPreBoundary = null;\n }\n if (tokenizer.inXML && (stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n tokenizer.inXML = false;\n }\n {\n const props = el.props;\n if (!!(process.env.NODE_ENV !== \"production\") && isCompatEnabled(\n \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n currentOptions\n )) {\n let hasIf = false;\n let hasFor = false;\n for (let i = 0; i < props.length; i++) {\n const p = props[i];\n if (p.type === 7) {\n if (p.name === \"if\") {\n hasIf = true;\n } else if (p.name === \"for\") {\n hasFor = true;\n }\n }\n if (hasIf && hasFor) {\n warnDeprecation(\n \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n currentOptions,\n el.loc\n );\n break;\n }\n }\n }\n if (!tokenizer.inSFCRoot && isCompatEnabled(\n \"COMPILER_NATIVE_TEMPLATE\",\n currentOptions\n ) && el.tag === \"template\" && !isFragmentTemplate(el)) {\n !!(process.env.NODE_ENV !== \"production\") && warnDeprecation(\n \"COMPILER_NATIVE_TEMPLATE\",\n currentOptions,\n el.loc\n );\n const parent = stack[0] || currentRoot;\n const index = parent.children.indexOf(el);\n parent.children.splice(index, 1, ...el.children);\n }\n const inlineTemplateProp = props.find(\n (p) => p.type === 6 && p.name === \"inline-template\"\n );\n if (inlineTemplateProp && checkCompatEnabled(\n \"COMPILER_INLINE_TEMPLATE\",\n currentOptions,\n inlineTemplateProp.loc\n ) && el.children.length) {\n inlineTemplateProp.value = {\n type: 2,\n content: getSlice(\n el.children[0].loc.start.offset,\n el.children[el.children.length - 1].loc.end.offset\n ),\n loc: inlineTemplateProp.loc\n };\n }\n }\n}\nfunction lookAhead(index, c) {\n let i = index;\n while (currentInput.charCodeAt(i) !== c && i < currentInput.length - 1) i++;\n return i;\n}\nfunction backTrack(index, c) {\n let i = index;\n while (currentInput.charCodeAt(i) !== c && i >= 0) i--;\n return i;\n}\nconst specialTemplateDir = /* @__PURE__ */ new Set([\"if\", \"else\", \"else-if\", \"for\", \"slot\"]);\nfunction isFragmentTemplate({ tag, props }) {\n if (tag === \"template\") {\n for (let i = 0; i < props.length; i++) {\n if (props[i].type === 7 && specialTemplateDir.has(props[i].name)) {\n return true;\n }\n }\n }\n return false;\n}\nfunction isComponent({ tag, props }) {\n if (currentOptions.isCustomElement(tag)) {\n return false;\n }\n if (tag === \"component\" || isUpperCase(tag.charCodeAt(0)) || isCoreComponent(tag) || currentOptions.isBuiltInComponent && currentOptions.isBuiltInComponent(tag) || currentOptions.isNativeTag && !currentOptions.isNativeTag(tag)) {\n return true;\n }\n for (let i = 0; i < props.length; i++) {\n const p = props[i];\n if (p.type === 6) {\n if (p.name === \"is\" && p.value) {\n if (p.value.content.startsWith(\"vue:\")) {\n return true;\n } else if (checkCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n currentOptions,\n p.loc\n )) {\n return true;\n }\n }\n } else if (// :is on plain element - only treat as component in compat mode\n p.name === \"bind\" && isStaticArgOf(p.arg, \"is\") && checkCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n currentOptions,\n p.loc\n )) {\n return true;\n }\n }\n return false;\n}\nfunction isUpperCase(c) {\n return c > 64 && c < 91;\n}\nconst windowsNewlineRE = /\\r\\n/g;\nfunction condenseWhitespace(nodes) {\n const shouldCondense = currentOptions.whitespace !== \"preserve\";\n let removedWhitespace = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.type === 2) {\n if (!inPre) {\n if (isAllWhitespace(node.content)) {\n const prev = nodes[i - 1] && nodes[i - 1].type;\n const next = nodes[i + 1] && nodes[i + 1].type;\n if (!prev || !next || shouldCondense && (prev === 3 && (next === 3 || next === 1) || prev === 1 && (next === 3 || next === 1 && hasNewlineChar(node.content)))) {\n removedWhitespace = true;\n nodes[i] = null;\n } else {\n node.content = \" \";\n }\n } else if (shouldCondense) {\n node.content = condense(node.content);\n }\n } else {\n node.content = node.content.replace(windowsNewlineRE, \"\\n\");\n }\n }\n }\n return removedWhitespace ? nodes.filter(Boolean) : nodes;\n}\nfunction hasNewlineChar(str) {\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c === 10 || c === 13) {\n return true;\n }\n }\n return false;\n}\nfunction condense(str) {\n let ret = \"\";\n let prevCharIsWhitespace = false;\n for (let i = 0; i < str.length; i++) {\n if (isWhitespace(str.charCodeAt(i))) {\n if (!prevCharIsWhitespace) {\n ret += \" \";\n prevCharIsWhitespace = true;\n }\n } else {\n ret += str[i];\n prevCharIsWhitespace = false;\n }\n }\n return ret;\n}\nfunction addNode(node) {\n (stack[0] || currentRoot).children.push(node);\n}\nfunction getLoc(start, end) {\n return {\n start: tokenizer.getPos(start),\n // @ts-expect-error allow late attachment\n end: end == null ? end : tokenizer.getPos(end),\n // @ts-expect-error allow late attachment\n source: end == null ? end : getSlice(start, end)\n };\n}\nfunction cloneLoc(loc) {\n return getLoc(loc.start.offset, loc.end.offset);\n}\nfunction setLocEnd(loc, end) {\n loc.end = tokenizer.getPos(end);\n loc.source = getSlice(loc.start.offset, end);\n}\nfunction dirToAttr(dir) {\n const attr = {\n type: 6,\n name: dir.rawName,\n nameLoc: getLoc(\n dir.loc.start.offset,\n dir.loc.start.offset + dir.rawName.length\n ),\n value: void 0,\n loc: dir.loc\n };\n if (dir.exp) {\n const loc = dir.exp.loc;\n if (loc.end.offset < dir.loc.end.offset) {\n loc.start.offset--;\n loc.start.column--;\n loc.end.offset++;\n loc.end.column++;\n }\n attr.value = {\n type: 2,\n content: dir.exp.content,\n loc\n };\n }\n return attr;\n}\nfunction createExp(content, isStatic = false, loc, constType = 0, parseMode = 0 /* Normal */) {\n const exp = createSimpleExpression(content, isStatic, loc, constType);\n return exp;\n}\nfunction emitError(code, index, message) {\n currentOptions.onError(\n createCompilerError(code, getLoc(index, index), void 0, message)\n );\n}\nfunction reset() {\n tokenizer.reset();\n currentOpenTag = null;\n currentProp = null;\n currentAttrValue = \"\";\n currentAttrStartIndex = -1;\n currentAttrEndIndex = -1;\n stack.length = 0;\n}\nfunction baseParse(input, options) {\n reset();\n currentInput = input;\n currentOptions = extend({}, defaultParserOptions);\n if (options) {\n let key;\n for (key in options) {\n if (options[key] != null) {\n currentOptions[key] = options[key];\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!currentOptions.decodeEntities) {\n throw new Error(\n `[@vue/compiler-core] decodeEntities option is required in browser builds.`\n );\n }\n }\n tokenizer.mode = currentOptions.parseMode === \"html\" ? 1 : currentOptions.parseMode === \"sfc\" ? 2 : 0;\n tokenizer.inXML = currentOptions.ns === 1 || currentOptions.ns === 2;\n const delimiters = options && options.delimiters;\n if (delimiters) {\n tokenizer.delimiterOpen = toCharCodes(delimiters[0]);\n tokenizer.delimiterClose = toCharCodes(delimiters[1]);\n }\n const root = currentRoot = createRoot([], input);\n tokenizer.parse(currentInput);\n root.loc = getLoc(0, input.length);\n root.children = condenseWhitespace(root.children);\n currentRoot = null;\n return root;\n}\n\nfunction cacheStatic(root, context) {\n walk(\n root,\n void 0,\n context,\n // Root node is unfortunately non-hoistable due to potential parent\n // fallthrough attributes.\n !!getSingleElementRoot(root)\n );\n}\nfunction getSingleElementRoot(root) {\n const children = root.children.filter((x) => x.type !== 3);\n return children.length === 1 && children[0].type === 1 && !isSlotOutlet(children[0]) ? children[0] : null;\n}\nfunction walk(node, parent, context, doNotHoistNode = false, inFor = false) {\n const { children } = node;\n const toCache = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.type === 1 && child.tagType === 0) {\n const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n if (constantType > 0) {\n if (constantType >= 2) {\n child.codegenNode.patchFlag = -1;\n toCache.push(child);\n continue;\n }\n } else {\n const codegenNode = child.codegenNode;\n if (codegenNode.type === 13) {\n const flag = codegenNode.patchFlag;\n if ((flag === void 0 || flag === 512 || flag === 1) && getGeneratedPropsConstantType(child, context) >= 2) {\n const props = getNodeProps(child);\n if (props) {\n codegenNode.props = context.hoist(props);\n }\n }\n if (codegenNode.dynamicProps) {\n codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\n }\n }\n }\n } else if (child.type === 12) {\n const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n if (constantType >= 2) {\n if (child.codegenNode.type === 14 && child.codegenNode.arguments.length > 0) {\n child.codegenNode.arguments.push(\n -1 + (!!(process.env.NODE_ENV !== \"production\") ? ` /* ${PatchFlagNames[-1]} */` : ``)\n );\n }\n toCache.push(child);\n continue;\n }\n }\n if (child.type === 1) {\n const isComponent = child.tagType === 1;\n if (isComponent) {\n context.scopes.vSlot++;\n }\n walk(child, node, context, false, inFor);\n if (isComponent) {\n context.scopes.vSlot--;\n }\n } else if (child.type === 11) {\n walk(child, node, context, child.children.length === 1, true);\n } else if (child.type === 9) {\n for (let i2 = 0; i2 < child.branches.length; i2++) {\n walk(\n child.branches[i2],\n node,\n context,\n child.branches[i2].children.length === 1,\n inFor\n );\n }\n }\n }\n let cachedAsArray = false;\n if (toCache.length === children.length && node.type === 1) {\n if (node.tagType === 0 && node.codegenNode && node.codegenNode.type === 13 && isArray(node.codegenNode.children)) {\n node.codegenNode.children = getCacheExpression(\n createArrayExpression(node.codegenNode.children)\n );\n cachedAsArray = true;\n } else if (node.tagType === 1 && node.codegenNode && node.codegenNode.type === 13 && node.codegenNode.children && !isArray(node.codegenNode.children) && node.codegenNode.children.type === 15) {\n const slot = getSlotNode(node.codegenNode, \"default\");\n if (slot) {\n slot.returns = getCacheExpression(\n createArrayExpression(slot.returns)\n );\n cachedAsArray = true;\n }\n } else if (node.tagType === 3 && parent && parent.type === 1 && parent.tagType === 1 && parent.codegenNode && parent.codegenNode.type === 13 && parent.codegenNode.children && !isArray(parent.codegenNode.children) && parent.codegenNode.children.type === 15) {\n const slotName = findDir(node, \"slot\", true);\n const slot = slotName && slotName.arg && getSlotNode(parent.codegenNode, slotName.arg);\n if (slot) {\n slot.returns = getCacheExpression(\n createArrayExpression(slot.returns)\n );\n cachedAsArray = true;\n }\n }\n }\n if (!cachedAsArray) {\n for (const child of toCache) {\n child.codegenNode = context.cache(child.codegenNode);\n }\n }\n function getCacheExpression(value) {\n const exp = context.cache(value);\n exp.needArraySpread = true;\n return exp;\n }\n function getSlotNode(node2, name) {\n if (node2.children && !isArray(node2.children) && node2.children.type === 15) {\n const slot = node2.children.properties.find(\n (p) => p.key === name || p.key.content === name\n );\n return slot && slot.value;\n }\n }\n if (toCache.length && context.transformHoist) {\n context.transformHoist(children, context, node);\n }\n}\nfunction getConstantType(node, context) {\n const { constantCache } = context;\n switch (node.type) {\n case 1:\n if (node.tagType !== 0) {\n return 0;\n }\n const cached = constantCache.get(node);\n if (cached !== void 0) {\n return cached;\n }\n const codegenNode = node.codegenNode;\n if (codegenNode.type !== 13) {\n return 0;\n }\n if (codegenNode.isBlock && node.tag !== \"svg\" && node.tag !== \"foreignObject\" && node.tag !== \"math\") {\n return 0;\n }\n if (codegenNode.patchFlag === void 0) {\n let returnType2 = 3;\n const generatedPropsType = getGeneratedPropsConstantType(node, context);\n if (generatedPropsType === 0) {\n constantCache.set(node, 0);\n return 0;\n }\n if (generatedPropsType < returnType2) {\n returnType2 = generatedPropsType;\n }\n for (let i = 0; i < node.children.length; i++) {\n const childType = getConstantType(node.children[i], context);\n if (childType === 0) {\n constantCache.set(node, 0);\n return 0;\n }\n if (childType < returnType2) {\n returnType2 = childType;\n }\n }\n if (returnType2 > 1) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7 && p.name === \"bind\" && p.exp) {\n const expType = getConstantType(p.exp, context);\n if (expType === 0) {\n constantCache.set(node, 0);\n return 0;\n }\n if (expType < returnType2) {\n returnType2 = expType;\n }\n }\n }\n }\n if (codegenNode.isBlock) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7) {\n constantCache.set(node, 0);\n return 0;\n }\n }\n context.removeHelper(OPEN_BLOCK);\n context.removeHelper(\n getVNodeBlockHelper(context.inSSR, codegenNode.isComponent)\n );\n codegenNode.isBlock = false;\n context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\n }\n constantCache.set(node, returnType2);\n return returnType2;\n } else {\n constantCache.set(node, 0);\n return 0;\n }\n case 2:\n case 3:\n return 3;\n case 9:\n case 11:\n case 10:\n return 0;\n case 5:\n case 12:\n return getConstantType(node.content, context);\n case 4:\n return node.constType;\n case 8:\n let returnType = 3;\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (isString(child) || isSymbol(child)) {\n continue;\n }\n const childType = getConstantType(child, context);\n if (childType === 0) {\n return 0;\n } else if (childType < returnType) {\n returnType = childType;\n }\n }\n return returnType;\n case 20:\n return 2;\n default:\n if (!!(process.env.NODE_ENV !== \"production\")) ;\n return 0;\n }\n}\nconst allowHoistedHelperSet = /* @__PURE__ */ new Set([\n NORMALIZE_CLASS,\n NORMALIZE_STYLE,\n NORMALIZE_PROPS,\n GUARD_REACTIVE_PROPS\n]);\nfunction getConstantTypeOfHelperCall(value, context) {\n if (value.type === 14 && !isString(value.callee) && allowHoistedHelperSet.has(value.callee)) {\n const arg = value.arguments[0];\n if (arg.type === 4) {\n return getConstantType(arg, context);\n } else if (arg.type === 14) {\n return getConstantTypeOfHelperCall(arg, context);\n }\n }\n return 0;\n}\nfunction getGeneratedPropsConstantType(node, context) {\n let returnType = 3;\n const props = getNodeProps(node);\n if (props && props.type === 15) {\n const { properties } = props;\n for (let i = 0; i < properties.length; i++) {\n const { key, value } = properties[i];\n const keyType = getConstantType(key, context);\n if (keyType === 0) {\n return keyType;\n }\n if (keyType < returnType) {\n returnType = keyType;\n }\n let valueType;\n if (value.type === 4) {\n valueType = getConstantType(value, context);\n } else if (value.type === 14) {\n valueType = getConstantTypeOfHelperCall(value, context);\n } else {\n valueType = 0;\n }\n if (valueType === 0) {\n return valueType;\n }\n if (valueType < returnType) {\n returnType = valueType;\n }\n }\n }\n return returnType;\n}\nfunction getNodeProps(node) {\n const codegenNode = node.codegenNode;\n if (codegenNode.type === 13) {\n return codegenNode.props;\n }\n}\n\nfunction createTransformContext(root, {\n filename = \"\",\n prefixIdentifiers = false,\n hoistStatic = false,\n hmr = false,\n cacheHandlers = false,\n nodeTransforms = [],\n directiveTransforms = {},\n transformHoist = null,\n isBuiltInComponent = NOOP,\n isCustomElement = NOOP,\n expressionPlugins = [],\n scopeId = null,\n slotted = true,\n ssr = false,\n inSSR = false,\n ssrCssVars = ``,\n bindingMetadata = EMPTY_OBJ,\n inline = false,\n isTS = false,\n onError = defaultOnError,\n onWarn = defaultOnWarn,\n compatConfig\n}) {\n const nameMatch = filename.replace(/\\?.*$/, \"\").match(/([^/\\\\]+)\\.\\w+$/);\n const context = {\n // options\n filename,\n selfName: nameMatch && capitalize(camelize(nameMatch[1])),\n prefixIdentifiers,\n hoistStatic,\n hmr,\n cacheHandlers,\n nodeTransforms,\n directiveTransforms,\n transformHoist,\n isBuiltInComponent,\n isCustomElement,\n expressionPlugins,\n scopeId,\n slotted,\n ssr,\n inSSR,\n ssrCssVars,\n bindingMetadata,\n inline,\n isTS,\n onError,\n onWarn,\n compatConfig,\n // state\n root,\n helpers: /* @__PURE__ */ new Map(),\n components: /* @__PURE__ */ new Set(),\n directives: /* @__PURE__ */ new Set(),\n hoists: [],\n imports: [],\n cached: [],\n constantCache: /* @__PURE__ */ new WeakMap(),\n temps: 0,\n identifiers: /* @__PURE__ */ Object.create(null),\n scopes: {\n vFor: 0,\n vSlot: 0,\n vPre: 0,\n vOnce: 0\n },\n parent: null,\n grandParent: null,\n currentNode: root,\n childIndex: 0,\n inVOnce: false,\n // methods\n helper(name) {\n const count = context.helpers.get(name) || 0;\n context.helpers.set(name, count + 1);\n return name;\n },\n removeHelper(name) {\n const count = context.helpers.get(name);\n if (count) {\n const currentCount = count - 1;\n if (!currentCount) {\n context.helpers.delete(name);\n } else {\n context.helpers.set(name, currentCount);\n }\n }\n },\n helperString(name) {\n return `_${helperNameMap[context.helper(name)]}`;\n },\n replaceNode(node) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!context.currentNode) {\n throw new Error(`Node being replaced is already removed.`);\n }\n if (!context.parent) {\n throw new Error(`Cannot replace root node.`);\n }\n }\n context.parent.children[context.childIndex] = context.currentNode = node;\n },\n removeNode(node) {\n if (!!(process.env.NODE_ENV !== \"production\") && !context.parent) {\n throw new Error(`Cannot remove root node.`);\n }\n const list = context.parent.children;\n const removalIndex = node ? list.indexOf(node) : context.currentNode ? context.childIndex : -1;\n if (!!(process.env.NODE_ENV !== \"production\") && removalIndex < 0) {\n throw new Error(`node being removed is not a child of current parent`);\n }\n if (!node || node === context.currentNode) {\n context.currentNode = null;\n context.onNodeRemoved();\n } else {\n if (context.childIndex > removalIndex) {\n context.childIndex--;\n context.onNodeRemoved();\n }\n }\n context.parent.children.splice(removalIndex, 1);\n },\n onNodeRemoved: NOOP,\n addIdentifiers(exp) {\n },\n removeIdentifiers(exp) {\n },\n hoist(exp) {\n if (isString(exp)) exp = createSimpleExpression(exp);\n context.hoists.push(exp);\n const identifier = createSimpleExpression(\n `_hoisted_${context.hoists.length}`,\n false,\n exp.loc,\n 2\n );\n identifier.hoisted = exp;\n return identifier;\n },\n cache(exp, isVNode = false, inVOnce = false) {\n const cacheExp = createCacheExpression(\n context.cached.length,\n exp,\n isVNode,\n inVOnce\n );\n context.cached.push(cacheExp);\n return cacheExp;\n }\n };\n {\n context.filters = /* @__PURE__ */ new Set();\n }\n return context;\n}\nfunction transform(root, options) {\n const context = createTransformContext(root, options);\n traverseNode(root, context);\n if (options.hoistStatic) {\n cacheStatic(root, context);\n }\n if (!options.ssr) {\n createRootCodegen(root, context);\n }\n root.helpers = /* @__PURE__ */ new Set([...context.helpers.keys()]);\n root.components = [...context.components];\n root.directives = [...context.directives];\n root.imports = context.imports;\n root.hoists = context.hoists;\n root.temps = context.temps;\n root.cached = context.cached;\n root.transformed = true;\n {\n root.filters = [...context.filters];\n }\n}\nfunction createRootCodegen(root, context) {\n const { helper } = context;\n const { children } = root;\n if (children.length === 1) {\n const singleElementRootChild = getSingleElementRoot(root);\n if (singleElementRootChild && singleElementRootChild.codegenNode) {\n const codegenNode = singleElementRootChild.codegenNode;\n if (codegenNode.type === 13) {\n convertToBlock(codegenNode, context);\n }\n root.codegenNode = codegenNode;\n } else {\n root.codegenNode = children[0];\n }\n } else if (children.length > 1) {\n let patchFlag = 64;\n if (!!(process.env.NODE_ENV !== \"production\") && children.filter((c) => c.type !== 3).length === 1) {\n patchFlag |= 2048;\n }\n root.codegenNode = createVNodeCall(\n context,\n helper(FRAGMENT),\n void 0,\n root.children,\n patchFlag,\n void 0,\n void 0,\n true,\n void 0,\n false\n );\n } else ;\n}\nfunction traverseChildren(parent, context) {\n let i = 0;\n const nodeRemoved = () => {\n i--;\n };\n for (; i < parent.children.length; i++) {\n const child = parent.children[i];\n if (isString(child)) continue;\n context.grandParent = context.parent;\n context.parent = parent;\n context.childIndex = i;\n context.onNodeRemoved = nodeRemoved;\n traverseNode(child, context);\n }\n}\nfunction traverseNode(node, context) {\n context.currentNode = node;\n const { nodeTransforms } = context;\n const exitFns = [];\n for (let i2 = 0; i2 < nodeTransforms.length; i2++) {\n const onExit = nodeTransforms[i2](node, context);\n if (onExit) {\n if (isArray(onExit)) {\n exitFns.push(...onExit);\n } else {\n exitFns.push(onExit);\n }\n }\n if (!context.currentNode) {\n return;\n } else {\n node = context.currentNode;\n }\n }\n switch (node.type) {\n case 3:\n if (!context.ssr) {\n context.helper(CREATE_COMMENT);\n }\n break;\n case 5:\n if (!context.ssr) {\n context.helper(TO_DISPLAY_STRING);\n }\n break;\n // for container types, further traverse downwards\n case 9:\n for (let i2 = 0; i2 < node.branches.length; i2++) {\n traverseNode(node.branches[i2], context);\n }\n break;\n case 10:\n case 11:\n case 1:\n case 0:\n traverseChildren(node, context);\n break;\n }\n context.currentNode = node;\n let i = exitFns.length;\n while (i--) {\n exitFns[i]();\n }\n}\nfunction createStructuralDirectiveTransform(name, fn) {\n const matches = isString(name) ? (n) => n === name : (n) => name.test(n);\n return (node, context) => {\n if (node.type === 1) {\n const { props } = node;\n if (node.tagType === 3 && props.some(isVSlot)) {\n return;\n }\n const exitFns = [];\n for (let i = 0; i < props.length; i++) {\n const prop = props[i];\n if (prop.type === 7 && matches(prop.name)) {\n props.splice(i, 1);\n i--;\n const onExit = fn(node, prop, context);\n if (onExit) exitFns.push(onExit);\n }\n }\n return exitFns;\n }\n };\n}\n\nconst PURE_ANNOTATION = `/*@__PURE__*/`;\nconst aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\nfunction createCodegenContext(ast, {\n mode = \"function\",\n prefixIdentifiers = mode === \"module\",\n sourceMap = false,\n filename = `template.vue.html`,\n scopeId = null,\n optimizeImports = false,\n runtimeGlobalName = `Vue`,\n runtimeModuleName = `vue`,\n ssrRuntimeModuleName = \"vue/server-renderer\",\n ssr = false,\n isTS = false,\n inSSR = false\n}) {\n const context = {\n mode,\n prefixIdentifiers,\n sourceMap,\n filename,\n scopeId,\n optimizeImports,\n runtimeGlobalName,\n runtimeModuleName,\n ssrRuntimeModuleName,\n ssr,\n isTS,\n inSSR,\n source: ast.source,\n code: ``,\n column: 1,\n line: 1,\n offset: 0,\n indentLevel: 0,\n pure: false,\n map: void 0,\n helper(key) {\n return `_${helperNameMap[key]}`;\n },\n push(code, newlineIndex = -2 /* None */, node) {\n context.code += code;\n },\n indent() {\n newline(++context.indentLevel);\n },\n deindent(withoutNewLine = false) {\n if (withoutNewLine) {\n --context.indentLevel;\n } else {\n newline(--context.indentLevel);\n }\n },\n newline() {\n newline(context.indentLevel);\n }\n };\n function newline(n) {\n context.push(\"\\n\" + ` `.repeat(n), 0 /* Start */);\n }\n return context;\n}\nfunction generate(ast, options = {}) {\n const context = createCodegenContext(ast, options);\n if (options.onContextCreated) options.onContextCreated(context);\n const {\n mode,\n push,\n prefixIdentifiers,\n indent,\n deindent,\n newline,\n scopeId,\n ssr\n } = context;\n const helpers = Array.from(ast.helpers);\n const hasHelpers = helpers.length > 0;\n const useWithBlock = !prefixIdentifiers && mode !== \"module\";\n const preambleContext = context;\n {\n genFunctionPreamble(ast, preambleContext);\n }\n const functionName = ssr ? `ssrRender` : `render`;\n const args = ssr ? [\"_ctx\", \"_push\", \"_parent\", \"_attrs\"] : [\"_ctx\", \"_cache\"];\n const signature = args.join(\", \");\n {\n push(`function ${functionName}(${signature}) {`);\n }\n indent();\n if (useWithBlock) {\n push(`with (_ctx) {`);\n indent();\n if (hasHelpers) {\n push(\n `const { ${helpers.map(aliasHelper).join(\", \")} } = _Vue\n`,\n -1 /* End */\n );\n newline();\n }\n }\n if (ast.components.length) {\n genAssets(ast.components, \"component\", context);\n if (ast.directives.length || ast.temps > 0) {\n newline();\n }\n }\n if (ast.directives.length) {\n genAssets(ast.directives, \"directive\", context);\n if (ast.temps > 0) {\n newline();\n }\n }\n if (ast.filters && ast.filters.length) {\n newline();\n genAssets(ast.filters, \"filter\", context);\n newline();\n }\n if (ast.temps > 0) {\n push(`let `);\n for (let i = 0; i < ast.temps; i++) {\n push(`${i > 0 ? `, ` : ``}_temp${i}`);\n }\n }\n if (ast.components.length || ast.directives.length || ast.temps) {\n push(`\n`, 0 /* Start */);\n newline();\n }\n if (!ssr) {\n push(`return `);\n }\n if (ast.codegenNode) {\n genNode(ast.codegenNode, context);\n } else {\n push(`null`);\n }\n if (useWithBlock) {\n deindent();\n push(`}`);\n }\n deindent();\n push(`}`);\n return {\n ast,\n code: context.code,\n preamble: ``,\n map: context.map ? context.map.toJSON() : void 0\n };\n}\nfunction genFunctionPreamble(ast, context) {\n const {\n ssr,\n prefixIdentifiers,\n push,\n newline,\n runtimeModuleName,\n runtimeGlobalName,\n ssrRuntimeModuleName\n } = context;\n const VueBinding = runtimeGlobalName;\n const helpers = Array.from(ast.helpers);\n if (helpers.length > 0) {\n {\n push(`const _Vue = ${VueBinding}\n`, -1 /* End */);\n if (ast.hoists.length) {\n const staticHelpers = [\n CREATE_VNODE,\n CREATE_ELEMENT_VNODE,\n CREATE_COMMENT,\n CREATE_TEXT,\n CREATE_STATIC\n ].filter((helper) => helpers.includes(helper)).map(aliasHelper).join(\", \");\n push(`const { ${staticHelpers} } = _Vue\n`, -1 /* End */);\n }\n }\n }\n genHoists(ast.hoists, context);\n newline();\n push(`return `);\n}\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\n const resolver = helper(\n type === \"filter\" ? RESOLVE_FILTER : type === \"component\" ? RESOLVE_COMPONENT : RESOLVE_DIRECTIVE\n );\n for (let i = 0; i < assets.length; i++) {\n let id = assets[i];\n const maybeSelfReference = id.endsWith(\"__self\");\n if (maybeSelfReference) {\n id = id.slice(0, -6);\n }\n push(\n `const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`\n );\n if (i < assets.length - 1) {\n newline();\n }\n }\n}\nfunction genHoists(hoists, context) {\n if (!hoists.length) {\n return;\n }\n context.pure = true;\n const { push, newline } = context;\n newline();\n for (let i = 0; i < hoists.length; i++) {\n const exp = hoists[i];\n if (exp) {\n push(`const _hoisted_${i + 1} = `);\n genNode(exp, context);\n newline();\n }\n }\n context.pure = false;\n}\nfunction isText(n) {\n return isString(n) || n.type === 4 || n.type === 2 || n.type === 5 || n.type === 8;\n}\nfunction genNodeListAsArray(nodes, context) {\n const multilines = nodes.length > 3 || !!(process.env.NODE_ENV !== \"production\") && nodes.some((n) => isArray(n) || !isText(n));\n context.push(`[`);\n multilines && context.indent();\n genNodeList(nodes, context, multilines);\n multilines && context.deindent();\n context.push(`]`);\n}\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\n const { push, newline } = context;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (isString(node)) {\n push(node, -3 /* Unknown */);\n } else if (isArray(node)) {\n genNodeListAsArray(node, context);\n } else {\n genNode(node, context);\n }\n if (i < nodes.length - 1) {\n if (multilines) {\n comma && push(\",\");\n newline();\n } else {\n comma && push(\", \");\n }\n }\n }\n}\nfunction genNode(node, context) {\n if (isString(node)) {\n context.push(node, -3 /* Unknown */);\n return;\n }\n if (isSymbol(node)) {\n context.push(context.helper(node));\n return;\n }\n switch (node.type) {\n case 1:\n case 9:\n case 11:\n !!(process.env.NODE_ENV !== \"production\") && assert(\n node.codegenNode != null,\n `Codegen node is missing for element/if/for node. Apply appropriate transforms first.`\n );\n genNode(node.codegenNode, context);\n break;\n case 2:\n genText(node, context);\n break;\n case 4:\n genExpression(node, context);\n break;\n case 5:\n genInterpolation(node, context);\n break;\n case 12:\n genNode(node.codegenNode, context);\n break;\n case 8:\n genCompoundExpression(node, context);\n break;\n case 3:\n genComment(node, context);\n break;\n case 13:\n genVNodeCall(node, context);\n break;\n case 14:\n genCallExpression(node, context);\n break;\n case 15:\n genObjectExpression(node, context);\n break;\n case 17:\n genArrayExpression(node, context);\n break;\n case 18:\n genFunctionExpression(node, context);\n break;\n case 19:\n genConditionalExpression(node, context);\n break;\n case 20:\n genCacheExpression(node, context);\n break;\n case 21:\n genNodeList(node.body, context, true, false);\n break;\n // SSR only types\n case 22:\n break;\n case 23:\n break;\n case 24:\n break;\n case 25:\n break;\n case 26:\n break;\n /* v8 ignore start */\n case 10:\n break;\n default:\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assert(false, `unhandled codegen node type: ${node.type}`);\n const exhaustiveCheck = node;\n return exhaustiveCheck;\n }\n }\n}\nfunction genText(node, context) {\n context.push(JSON.stringify(node.content), -3 /* Unknown */, node);\n}\nfunction genExpression(node, context) {\n const { content, isStatic } = node;\n context.push(\n isStatic ? JSON.stringify(content) : content,\n -3 /* Unknown */,\n node\n );\n}\nfunction genInterpolation(node, context) {\n const { push, helper, pure } = context;\n if (pure) push(PURE_ANNOTATION);\n push(`${helper(TO_DISPLAY_STRING)}(`);\n genNode(node.content, context);\n push(`)`);\n}\nfunction genCompoundExpression(node, context) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (isString(child)) {\n context.push(child, -3 /* Unknown */);\n } else {\n genNode(child, context);\n }\n }\n}\nfunction genExpressionAsPropertyKey(node, context) {\n const { push } = context;\n if (node.type === 8) {\n push(`[`);\n genCompoundExpression(node, context);\n push(`]`);\n } else if (node.isStatic) {\n const text = isSimpleIdentifier(node.content) ? node.content : JSON.stringify(node.content);\n push(text, -2 /* None */, node);\n } else {\n push(`[${node.content}]`, -3 /* Unknown */, node);\n }\n}\nfunction genComment(node, context) {\n const { push, helper, pure } = context;\n if (pure) {\n push(PURE_ANNOTATION);\n }\n push(\n `${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`,\n -3 /* Unknown */,\n node\n );\n}\nfunction genVNodeCall(node, context) {\n const { push, helper, pure } = context;\n const {\n tag,\n props,\n children,\n patchFlag,\n dynamicProps,\n directives,\n isBlock,\n disableTracking,\n isComponent\n } = node;\n let patchFlagString;\n if (patchFlag) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (patchFlag < 0) {\n patchFlagString = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;\n } else {\n const flagNames = Object.keys(PatchFlagNames).map(Number).filter((n) => n > 0 && patchFlag & n).map((n) => PatchFlagNames[n]).join(`, `);\n patchFlagString = patchFlag + ` /* ${flagNames} */`;\n }\n } else {\n patchFlagString = String(patchFlag);\n }\n }\n if (directives) {\n push(helper(WITH_DIRECTIVES) + `(`);\n }\n if (isBlock) {\n push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\n }\n if (pure) {\n push(PURE_ANNOTATION);\n }\n const callHelper = isBlock ? getVNodeBlockHelper(context.inSSR, isComponent) : getVNodeHelper(context.inSSR, isComponent);\n push(helper(callHelper) + `(`, -2 /* None */, node);\n genNodeList(\n genNullableArgs([tag, props, children, patchFlagString, dynamicProps]),\n context\n );\n push(`)`);\n if (isBlock) {\n push(`)`);\n }\n if (directives) {\n push(`, `);\n genNode(directives, context);\n push(`)`);\n }\n}\nfunction genNullableArgs(args) {\n let i = args.length;\n while (i--) {\n if (args[i] != null) break;\n }\n return args.slice(0, i + 1).map((arg) => arg || `null`);\n}\nfunction genCallExpression(node, context) {\n const { push, helper, pure } = context;\n const callee = isString(node.callee) ? node.callee : helper(node.callee);\n if (pure) {\n push(PURE_ANNOTATION);\n }\n push(callee + `(`, -2 /* None */, node);\n genNodeList(node.arguments, context);\n push(`)`);\n}\nfunction genObjectExpression(node, context) {\n const { push, indent, deindent, newline } = context;\n const { properties } = node;\n if (!properties.length) {\n push(`{}`, -2 /* None */, node);\n return;\n }\n const multilines = properties.length > 1 || !!(process.env.NODE_ENV !== \"production\") && properties.some((p) => p.value.type !== 4);\n push(multilines ? `{` : `{ `);\n multilines && indent();\n for (let i = 0; i < properties.length; i++) {\n const { key, value } = properties[i];\n genExpressionAsPropertyKey(key, context);\n push(`: `);\n genNode(value, context);\n if (i < properties.length - 1) {\n push(`,`);\n newline();\n }\n }\n multilines && deindent();\n push(multilines ? `}` : ` }`);\n}\nfunction genArrayExpression(node, context) {\n genNodeListAsArray(node.elements, context);\n}\nfunction genFunctionExpression(node, context) {\n const { push, indent, deindent } = context;\n const { params, returns, body, newline, isSlot } = node;\n if (isSlot) {\n push(`_${helperNameMap[WITH_CTX]}(`);\n }\n push(`(`, -2 /* None */, node);\n if (isArray(params)) {\n genNodeList(params, context);\n } else if (params) {\n genNode(params, context);\n }\n push(`) => `);\n if (newline || body) {\n push(`{`);\n indent();\n }\n if (returns) {\n if (newline) {\n push(`return `);\n }\n if (isArray(returns)) {\n genNodeListAsArray(returns, context);\n } else {\n genNode(returns, context);\n }\n } else if (body) {\n genNode(body, context);\n }\n if (newline || body) {\n deindent();\n push(`}`);\n }\n if (isSlot) {\n if (node.isNonScopedSlot) {\n push(`, undefined, true`);\n }\n push(`)`);\n }\n}\nfunction genConditionalExpression(node, context) {\n const { test, consequent, alternate, newline: needNewline } = node;\n const { push, indent, deindent, newline } = context;\n if (test.type === 4) {\n const needsParens = !isSimpleIdentifier(test.content);\n needsParens && push(`(`);\n genExpression(test, context);\n needsParens && push(`)`);\n } else {\n push(`(`);\n genNode(test, context);\n push(`)`);\n }\n needNewline && indent();\n context.indentLevel++;\n needNewline || push(` `);\n push(`? `);\n genNode(consequent, context);\n context.indentLevel--;\n needNewline && newline();\n needNewline || push(` `);\n push(`: `);\n const isNested = alternate.type === 19;\n if (!isNested) {\n context.indentLevel++;\n }\n genNode(alternate, context);\n if (!isNested) {\n context.indentLevel--;\n }\n needNewline && deindent(\n true\n /* without newline */\n );\n}\nfunction genCacheExpression(node, context) {\n const { push, helper, indent, deindent, newline } = context;\n const { needPauseTracking, needArraySpread } = node;\n if (needArraySpread) {\n push(`[...(`);\n }\n push(`_cache[${node.index}] || (`);\n if (needPauseTracking) {\n indent();\n push(`${helper(SET_BLOCK_TRACKING)}(-1`);\n if (node.inVOnce) push(`, true`);\n push(`),`);\n newline();\n push(`(`);\n }\n push(`_cache[${node.index}] = `);\n genNode(node.value, context);\n if (needPauseTracking) {\n push(`).cacheIndex = ${node.index},`);\n newline();\n push(`${helper(SET_BLOCK_TRACKING)}(1),`);\n newline();\n push(`_cache[${node.index}]`);\n deindent();\n }\n push(`)`);\n if (needArraySpread) {\n push(`)]`);\n }\n}\n\nconst prohibitedKeywordRE = new RegExp(\n \"\\\\b\" + \"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield\".split(\",\").join(\"\\\\b|\\\\b\") + \"\\\\b\"\n);\nconst stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\nfunction validateBrowserExpression(node, context, asParams = false, asRawStatements = false) {\n const exp = node.content;\n if (!exp.trim()) {\n return;\n }\n try {\n new Function(\n asRawStatements ? ` ${exp} ` : `return ${asParams ? `(${exp}) => {}` : `(${exp})`}`\n );\n } catch (e) {\n let message = e.message;\n const keywordMatch = exp.replace(stripStringRE, \"\").match(prohibitedKeywordRE);\n if (keywordMatch) {\n message = `avoid using JavaScript keyword as property name: \"${keywordMatch[0]}\"`;\n }\n context.onError(\n createCompilerError(\n 46,\n node.loc,\n void 0,\n message\n )\n );\n }\n}\n\nconst transformExpression = (node, context) => {\n if (node.type === 5) {\n node.content = processExpression(\n node.content,\n context\n );\n } else if (node.type === 1) {\n const memo = findDir(node, \"memo\");\n for (let i = 0; i < node.props.length; i++) {\n const dir = node.props[i];\n if (dir.type === 7 && dir.name !== \"for\") {\n const exp = dir.exp;\n const arg = dir.arg;\n if (exp && exp.type === 4 && !(dir.name === \"on\" && arg) && // key has been processed in transformFor(vMemo + vFor)\n !(memo && arg && arg.type === 4 && arg.content === \"key\")) {\n dir.exp = processExpression(\n exp,\n context,\n // slot args must be processed as function params\n dir.name === \"slot\"\n );\n }\n if (arg && arg.type === 4 && !arg.isStatic) {\n dir.arg = processExpression(arg, context);\n }\n }\n }\n }\n};\nfunction processExpression(node, context, asParams = false, asRawStatements = false, localVars = Object.create(context.identifiers)) {\n {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateBrowserExpression(node, context, asParams, asRawStatements);\n }\n return node;\n }\n}\nfunction stringifyExpression(exp) {\n if (isString(exp)) {\n return exp;\n } else if (exp.type === 4) {\n return exp.content;\n } else {\n return exp.children.map(stringifyExpression).join(\"\");\n }\n}\n\nconst transformIf = createStructuralDirectiveTransform(\n /^(?:if|else|else-if)$/,\n (node, dir, context) => {\n return processIf(node, dir, context, (ifNode, branch, isRoot) => {\n const siblings = context.parent.children;\n let i = siblings.indexOf(ifNode);\n let key = 0;\n while (i-- >= 0) {\n const sibling = siblings[i];\n if (sibling && sibling.type === 9) {\n key += sibling.branches.length;\n }\n }\n return () => {\n if (isRoot) {\n ifNode.codegenNode = createCodegenNodeForBranch(\n branch,\n key,\n context\n );\n } else {\n const parentCondition = getParentCondition(ifNode.codegenNode);\n parentCondition.alternate = createCodegenNodeForBranch(\n branch,\n key + ifNode.branches.length - 1,\n context\n );\n }\n };\n });\n }\n);\nfunction processIf(node, dir, context, processCodegen) {\n if (dir.name !== \"else\" && (!dir.exp || !dir.exp.content.trim())) {\n const loc = dir.exp ? dir.exp.loc : node.loc;\n context.onError(\n createCompilerError(28, dir.loc)\n );\n dir.exp = createSimpleExpression(`true`, false, loc);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && true && dir.exp) {\n validateBrowserExpression(dir.exp, context);\n }\n if (dir.name === \"if\") {\n const branch = createIfBranch(node, dir);\n const ifNode = {\n type: 9,\n loc: cloneLoc(node.loc),\n branches: [branch]\n };\n context.replaceNode(ifNode);\n if (processCodegen) {\n return processCodegen(ifNode, branch, true);\n }\n } else {\n const siblings = context.parent.children;\n const comments = [];\n let i = siblings.indexOf(node);\n while (i-- >= -1) {\n const sibling = siblings[i];\n if (sibling && isCommentOrWhitespace(sibling)) {\n context.removeNode(sibling);\n if (!!(process.env.NODE_ENV !== \"production\") && sibling.type === 3) {\n comments.unshift(sibling);\n }\n continue;\n }\n if (sibling && sibling.type === 9) {\n if ((dir.name === \"else-if\" || dir.name === \"else\") && sibling.branches[sibling.branches.length - 1].condition === void 0) {\n context.onError(\n createCompilerError(30, node.loc)\n );\n }\n context.removeNode();\n const branch = createIfBranch(node, dir);\n if (!!(process.env.NODE_ENV !== \"production\") && comments.length && // #3619 ignore comments if the v-if is direct child of <transition>\n !(context.parent && context.parent.type === 1 && (context.parent.tag === \"transition\" || context.parent.tag === \"Transition\"))) {\n branch.children = [...comments, ...branch.children];\n }\n if (!!(process.env.NODE_ENV !== \"production\") || false) {\n const key = branch.userKey;\n if (key) {\n sibling.branches.forEach(({ userKey }) => {\n if (isSameKey(userKey, key)) {\n context.onError(\n createCompilerError(\n 29,\n branch.userKey.loc\n )\n );\n }\n });\n }\n }\n sibling.branches.push(branch);\n const onExit = processCodegen && processCodegen(sibling, branch, false);\n traverseNode(branch, context);\n if (onExit) onExit();\n context.currentNode = null;\n } else {\n context.onError(\n createCompilerError(30, node.loc)\n );\n }\n break;\n }\n }\n}\nfunction createIfBranch(node, dir) {\n const isTemplateIf = node.tagType === 3;\n return {\n type: 10,\n loc: node.loc,\n condition: dir.name === \"else\" ? void 0 : dir.exp,\n children: isTemplateIf && !findDir(node, \"for\") ? node.children : [node],\n userKey: findProp(node, `key`),\n isTemplateIf\n };\n}\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\n if (branch.condition) {\n return createConditionalExpression(\n branch.condition,\n createChildrenCodegenNode(branch, keyIndex, context),\n // make sure to pass in asBlock: true so that the comment node call\n // closes the current block.\n createCallExpression(context.helper(CREATE_COMMENT), [\n !!(process.env.NODE_ENV !== \"production\") ? '\"v-if\"' : '\"\"',\n \"true\"\n ])\n );\n } else {\n return createChildrenCodegenNode(branch, keyIndex, context);\n }\n}\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\n const { helper } = context;\n const keyProperty = createObjectProperty(\n `key`,\n createSimpleExpression(\n `${keyIndex}`,\n false,\n locStub,\n 2\n )\n );\n const { children } = branch;\n const firstChild = children[0];\n const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1;\n if (needFragmentWrapper) {\n if (children.length === 1 && firstChild.type === 11) {\n const vnodeCall = firstChild.codegenNode;\n injectProp(vnodeCall, keyProperty, context);\n return vnodeCall;\n } else {\n let patchFlag = 64;\n if (!!(process.env.NODE_ENV !== \"production\") && !branch.isTemplateIf && children.filter((c) => c.type !== 3).length === 1) {\n patchFlag |= 2048;\n }\n return createVNodeCall(\n context,\n helper(FRAGMENT),\n createObjectExpression([keyProperty]),\n children,\n patchFlag,\n void 0,\n void 0,\n true,\n false,\n false,\n branch.loc\n );\n }\n } else {\n const ret = firstChild.codegenNode;\n const vnodeCall = getMemoedVNodeCall(ret);\n if (vnodeCall.type === 13) {\n convertToBlock(vnodeCall, context);\n }\n injectProp(vnodeCall, keyProperty, context);\n return ret;\n }\n}\nfunction isSameKey(a, b) {\n if (!a || a.type !== b.type) {\n return false;\n }\n if (a.type === 6) {\n if (a.value.content !== b.value.content) {\n return false;\n }\n } else {\n const exp = a.exp;\n const branchExp = b.exp;\n if (exp.type !== branchExp.type) {\n return false;\n }\n if (exp.type !== 4 || exp.isStatic !== branchExp.isStatic || exp.content !== branchExp.content) {\n return false;\n }\n }\n return true;\n}\nfunction getParentCondition(node) {\n while (true) {\n if (node.type === 19) {\n if (node.alternate.type === 19) {\n node = node.alternate;\n } else {\n return node;\n }\n } else if (node.type === 20) {\n node = node.value;\n }\n }\n}\n\nconst transformFor = createStructuralDirectiveTransform(\n \"for\",\n (node, dir, context) => {\n const { helper, removeHelper } = context;\n return processFor(node, dir, context, (forNode) => {\n const renderExp = createCallExpression(helper(RENDER_LIST), [\n forNode.source\n ]);\n const isTemplate = isTemplateNode(node);\n const memo = findDir(node, \"memo\");\n const keyProp = findProp(node, `key`, false, true);\n keyProp && keyProp.type === 7;\n let keyExp = keyProp && (keyProp.type === 6 ? keyProp.value ? createSimpleExpression(keyProp.value.content, true) : void 0 : keyProp.exp);\n const keyProperty = keyProp && keyExp ? createObjectProperty(`key`, keyExp) : null;\n const isStableFragment = forNode.source.type === 4 && forNode.source.constType > 0;\n const fragmentFlag = isStableFragment ? 64 : keyProp ? 128 : 256;\n forNode.codegenNode = createVNodeCall(\n context,\n helper(FRAGMENT),\n void 0,\n renderExp,\n fragmentFlag,\n void 0,\n void 0,\n true,\n !isStableFragment,\n false,\n node.loc\n );\n return () => {\n let childBlock;\n const { children } = forNode;\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && isTemplate) {\n node.children.some((c) => {\n if (c.type === 1) {\n const key = findProp(c, \"key\");\n if (key) {\n context.onError(\n createCompilerError(\n 33,\n key.loc\n )\n );\n return true;\n }\n }\n });\n }\n const needFragmentWrapper = children.length !== 1 || children[0].type !== 1;\n const slotOutlet = isSlotOutlet(node) ? node : isTemplate && node.children.length === 1 && isSlotOutlet(node.children[0]) ? node.children[0] : null;\n if (slotOutlet) {\n childBlock = slotOutlet.codegenNode;\n if (isTemplate && keyProperty) {\n injectProp(childBlock, keyProperty, context);\n }\n } else if (needFragmentWrapper) {\n childBlock = createVNodeCall(\n context,\n helper(FRAGMENT),\n keyProperty ? createObjectExpression([keyProperty]) : void 0,\n node.children,\n 64,\n void 0,\n void 0,\n true,\n void 0,\n false\n );\n } else {\n childBlock = children[0].codegenNode;\n if (isTemplate && keyProperty) {\n injectProp(childBlock, keyProperty, context);\n }\n if (childBlock.isBlock !== !isStableFragment) {\n if (childBlock.isBlock) {\n removeHelper(OPEN_BLOCK);\n removeHelper(\n getVNodeBlockHelper(context.inSSR, childBlock.isComponent)\n );\n } else {\n removeHelper(\n getVNodeHelper(context.inSSR, childBlock.isComponent)\n );\n }\n }\n childBlock.isBlock = !isStableFragment;\n if (childBlock.isBlock) {\n helper(OPEN_BLOCK);\n helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n } else {\n helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n }\n }\n if (memo) {\n const loop = createFunctionExpression(\n createForLoopParams(forNode.parseResult, [\n createSimpleExpression(`_cached`)\n ])\n );\n loop.body = createBlockStatement([\n createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\n createCompoundExpression([\n `if (_cached`,\n ...keyExp ? [` && _cached.key === `, keyExp] : [],\n ` && ${context.helperString(\n IS_MEMO_SAME\n )}(_cached, _memo)) return _cached`\n ]),\n createCompoundExpression([`const _item = `, childBlock]),\n createSimpleExpression(`_item.memo = _memo`),\n createSimpleExpression(`return _item`)\n ]);\n renderExp.arguments.push(\n loop,\n createSimpleExpression(`_cache`),\n createSimpleExpression(String(context.cached.length))\n );\n context.cached.push(null);\n } else {\n renderExp.arguments.push(\n createFunctionExpression(\n createForLoopParams(forNode.parseResult),\n childBlock,\n true\n )\n );\n }\n };\n });\n }\n);\nfunction processFor(node, dir, context, processCodegen) {\n if (!dir.exp) {\n context.onError(\n createCompilerError(31, dir.loc)\n );\n return;\n }\n const parseResult = dir.forParseResult;\n if (!parseResult) {\n context.onError(\n createCompilerError(32, dir.loc)\n );\n return;\n }\n finalizeForParseResult(parseResult, context);\n const { addIdentifiers, removeIdentifiers, scopes } = context;\n const { source, value, key, index } = parseResult;\n const forNode = {\n type: 11,\n loc: dir.loc,\n source,\n valueAlias: value,\n keyAlias: key,\n objectIndexAlias: index,\n parseResult,\n children: isTemplateNode(node) ? node.children : [node]\n };\n context.replaceNode(forNode);\n scopes.vFor++;\n const onExit = processCodegen && processCodegen(forNode);\n return () => {\n scopes.vFor--;\n if (onExit) onExit();\n };\n}\nfunction finalizeForParseResult(result, context) {\n if (result.finalized) return;\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n validateBrowserExpression(result.source, context);\n if (result.key) {\n validateBrowserExpression(\n result.key,\n context,\n true\n );\n }\n if (result.index) {\n validateBrowserExpression(\n result.index,\n context,\n true\n );\n }\n if (result.value) {\n validateBrowserExpression(\n result.value,\n context,\n true\n );\n }\n }\n result.finalized = true;\n}\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\n return createParamsList([value, key, index, ...memoArgs]);\n}\nfunction createParamsList(args) {\n let i = args.length;\n while (i--) {\n if (args[i]) break;\n }\n return args.slice(0, i + 1).map((arg, i2) => arg || createSimpleExpression(`_`.repeat(i2 + 1), false));\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\nconst trackSlotScopes = (node, context) => {\n if (node.type === 1 && (node.tagType === 1 || node.tagType === 3)) {\n const vSlot = findDir(node, \"slot\");\n if (vSlot) {\n vSlot.exp;\n context.scopes.vSlot++;\n return () => {\n context.scopes.vSlot--;\n };\n }\n }\n};\nconst trackVForSlotScopes = (node, context) => {\n let vFor;\n if (isTemplateNode(node) && node.props.some(isVSlot) && (vFor = findDir(node, \"for\"))) {\n const result = vFor.forParseResult;\n if (result) {\n finalizeForParseResult(result, context);\n const { value, key, index } = result;\n const { addIdentifiers, removeIdentifiers } = context;\n value && addIdentifiers(value);\n key && addIdentifiers(key);\n index && addIdentifiers(index);\n return () => {\n value && removeIdentifiers(value);\n key && removeIdentifiers(key);\n index && removeIdentifiers(index);\n };\n }\n }\n};\nconst buildClientSlotFn = (props, _vForExp, children, loc) => createFunctionExpression(\n props,\n children,\n false,\n true,\n children.length ? children[0].loc : loc\n);\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\n context.helper(WITH_CTX);\n const { children, loc } = node;\n const slotsProperties = [];\n const dynamicSlots = [];\n let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\n const onComponentSlot = findDir(node, \"slot\", true);\n if (onComponentSlot) {\n const { arg, exp } = onComponentSlot;\n if (arg && !isStaticExp(arg)) {\n hasDynamicSlots = true;\n }\n slotsProperties.push(\n createObjectProperty(\n arg || createSimpleExpression(\"default\", true),\n buildSlotFn(exp, void 0, children, loc)\n )\n );\n }\n let hasTemplateSlots = false;\n let hasNamedDefaultSlot = false;\n const implicitDefaultChildren = [];\n const seenSlotNames = /* @__PURE__ */ new Set();\n let conditionalBranchIndex = 0;\n for (let i = 0; i < children.length; i++) {\n const slotElement = children[i];\n let slotDir;\n if (!isTemplateNode(slotElement) || !(slotDir = findDir(slotElement, \"slot\", true))) {\n if (slotElement.type !== 3) {\n implicitDefaultChildren.push(slotElement);\n }\n continue;\n }\n if (onComponentSlot) {\n context.onError(\n createCompilerError(37, slotDir.loc)\n );\n break;\n }\n hasTemplateSlots = true;\n const { children: slotChildren, loc: slotLoc } = slotElement;\n const {\n arg: slotName = createSimpleExpression(`default`, true),\n exp: slotProps,\n loc: dirLoc\n } = slotDir;\n let staticSlotName;\n if (isStaticExp(slotName)) {\n staticSlotName = slotName ? slotName.content : `default`;\n } else {\n hasDynamicSlots = true;\n }\n const vFor = findDir(slotElement, \"for\");\n const slotFunction = buildSlotFn(slotProps, vFor, slotChildren, slotLoc);\n let vIf;\n let vElse;\n if (vIf = findDir(slotElement, \"if\")) {\n hasDynamicSlots = true;\n dynamicSlots.push(\n createConditionalExpression(\n vIf.exp,\n buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++),\n defaultFallback\n )\n );\n } else if (vElse = findDir(\n slotElement,\n /^else(?:-if)?$/,\n true\n /* allowEmpty */\n )) {\n let j = i;\n let prev;\n while (j--) {\n prev = children[j];\n if (!isCommentOrWhitespace(prev)) {\n break;\n }\n }\n if (prev && isTemplateNode(prev) && findDir(prev, /^(?:else-)?if$/)) {\n let conditional = dynamicSlots[dynamicSlots.length - 1];\n while (conditional.alternate.type === 19) {\n conditional = conditional.alternate;\n }\n conditional.alternate = vElse.exp ? createConditionalExpression(\n vElse.exp,\n buildDynamicSlot(\n slotName,\n slotFunction,\n conditionalBranchIndex++\n ),\n defaultFallback\n ) : buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++);\n } else {\n context.onError(\n createCompilerError(30, vElse.loc)\n );\n }\n } else if (vFor) {\n hasDynamicSlots = true;\n const parseResult = vFor.forParseResult;\n if (parseResult) {\n finalizeForParseResult(parseResult, context);\n dynamicSlots.push(\n createCallExpression(context.helper(RENDER_LIST), [\n parseResult.source,\n createFunctionExpression(\n createForLoopParams(parseResult),\n buildDynamicSlot(slotName, slotFunction),\n true\n )\n ])\n );\n } else {\n context.onError(\n createCompilerError(\n 32,\n vFor.loc\n )\n );\n }\n } else {\n if (staticSlotName) {\n if (seenSlotNames.has(staticSlotName)) {\n context.onError(\n createCompilerError(\n 38,\n dirLoc\n )\n );\n continue;\n }\n seenSlotNames.add(staticSlotName);\n if (staticSlotName === \"default\") {\n hasNamedDefaultSlot = true;\n }\n }\n slotsProperties.push(createObjectProperty(slotName, slotFunction));\n }\n }\n if (!onComponentSlot) {\n const buildDefaultSlotProperty = (props, children2) => {\n const fn = buildSlotFn(props, void 0, children2, loc);\n if (context.compatConfig) {\n fn.isNonScopedSlot = true;\n }\n return createObjectProperty(`default`, fn);\n };\n if (!hasTemplateSlots) {\n slotsProperties.push(buildDefaultSlotProperty(void 0, children));\n } else if (implicitDefaultChildren.length && // #3766\n // with whitespace: 'preserve', whitespaces between slots will end up in\n // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\n !implicitDefaultChildren.every(isWhitespaceText)) {\n if (hasNamedDefaultSlot) {\n context.onError(\n createCompilerError(\n 39,\n implicitDefaultChildren[0].loc\n )\n );\n } else {\n slotsProperties.push(\n buildDefaultSlotProperty(void 0, implicitDefaultChildren)\n );\n }\n }\n }\n const slotFlag = hasDynamicSlots ? 2 : hasForwardedSlots(node.children) ? 3 : 1;\n let slots = createObjectExpression(\n slotsProperties.concat(\n createObjectProperty(\n `_`,\n // 2 = compiled but dynamic = can skip normalization, but must run diff\n // 1 = compiled and static = can skip normalization AND diff as optimized\n createSimpleExpression(\n slotFlag + (!!(process.env.NODE_ENV !== \"production\") ? ` /* ${slotFlagsText[slotFlag]} */` : ``),\n false\n )\n )\n ),\n loc\n );\n if (dynamicSlots.length) {\n slots = createCallExpression(context.helper(CREATE_SLOTS), [\n slots,\n createArrayExpression(dynamicSlots)\n ]);\n }\n return {\n slots,\n hasDynamicSlots\n };\n}\nfunction buildDynamicSlot(name, fn, index) {\n const props = [\n createObjectProperty(`name`, name),\n createObjectProperty(`fn`, fn)\n ];\n if (index != null) {\n props.push(\n createObjectProperty(`key`, createSimpleExpression(String(index), true))\n );\n }\n return createObjectExpression(props);\n}\nfunction hasForwardedSlots(children) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n switch (child.type) {\n case 1:\n if (child.tagType === 2 || hasForwardedSlots(child.children)) {\n return true;\n }\n break;\n case 9:\n if (hasForwardedSlots(child.branches)) return true;\n break;\n case 10:\n case 11:\n if (hasForwardedSlots(child.children)) return true;\n break;\n }\n }\n return false;\n}\n\nconst directiveImportMap = /* @__PURE__ */ new WeakMap();\nconst transformElement = (node, context) => {\n return function postTransformElement() {\n node = context.currentNode;\n if (!(node.type === 1 && (node.tagType === 0 || node.tagType === 1))) {\n return;\n }\n const { tag, props } = node;\n const isComponent = node.tagType === 1;\n let vnodeTag = isComponent ? resolveComponentType(node, context) : `\"${tag}\"`;\n const isDynamicComponent = isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\n let vnodeProps;\n let vnodeChildren;\n let patchFlag = 0;\n let vnodeDynamicProps;\n let dynamicPropNames;\n let vnodeDirectives;\n let shouldUseBlock = (\n // dynamic component may resolve to plain elements\n isDynamicComponent || vnodeTag === TELEPORT || vnodeTag === SUSPENSE || !isComponent && // <svg> and <foreignObject> must be forced into blocks so that block\n // updates inside get proper isSVG flag at runtime. (#639, #643)\n // This is technically web-specific, but splitting the logic out of core\n // leads to too much unnecessary complexity.\n (tag === \"svg\" || tag === \"foreignObject\" || tag === \"math\")\n );\n if (props.length > 0) {\n const propsBuildResult = buildProps(\n node,\n context,\n void 0,\n isComponent,\n isDynamicComponent\n );\n vnodeProps = propsBuildResult.props;\n patchFlag = propsBuildResult.patchFlag;\n dynamicPropNames = propsBuildResult.dynamicPropNames;\n const directives = propsBuildResult.directives;\n vnodeDirectives = directives && directives.length ? createArrayExpression(\n directives.map((dir) => buildDirectiveArgs(dir, context))\n ) : void 0;\n if (propsBuildResult.shouldUseBlock) {\n shouldUseBlock = true;\n }\n }\n if (node.children.length > 0) {\n if (vnodeTag === KEEP_ALIVE) {\n shouldUseBlock = true;\n patchFlag |= 1024;\n if (!!(process.env.NODE_ENV !== \"production\") && node.children.length > 1) {\n context.onError(\n createCompilerError(47, {\n start: node.children[0].loc.start,\n end: node.children[node.children.length - 1].loc.end,\n source: \"\"\n })\n );\n }\n }\n const shouldBuildAsSlots = isComponent && // Teleport is not a real component and has dedicated runtime handling\n vnodeTag !== TELEPORT && // explained above.\n vnodeTag !== KEEP_ALIVE;\n if (shouldBuildAsSlots) {\n const { slots, hasDynamicSlots } = buildSlots(node, context);\n vnodeChildren = slots;\n if (hasDynamicSlots) {\n patchFlag |= 1024;\n }\n } else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\n const child = node.children[0];\n const type = child.type;\n const hasDynamicTextChild = type === 5 || type === 8;\n if (hasDynamicTextChild && getConstantType(child, context) === 0) {\n patchFlag |= 1;\n }\n if (hasDynamicTextChild || type === 2) {\n vnodeChildren = child;\n } else {\n vnodeChildren = node.children;\n }\n } else {\n vnodeChildren = node.children;\n }\n }\n if (dynamicPropNames && dynamicPropNames.length) {\n vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\n }\n node.codegenNode = createVNodeCall(\n context,\n vnodeTag,\n vnodeProps,\n vnodeChildren,\n patchFlag === 0 ? void 0 : patchFlag,\n vnodeDynamicProps,\n vnodeDirectives,\n !!shouldUseBlock,\n false,\n isComponent,\n node.loc\n );\n };\n};\nfunction resolveComponentType(node, context, ssr = false) {\n let { tag } = node;\n const isExplicitDynamic = isComponentTag(tag);\n const isProp = findProp(\n node,\n \"is\",\n false,\n true\n /* allow empty */\n );\n if (isProp) {\n if (isExplicitDynamic || isCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n context\n )) {\n let exp;\n if (isProp.type === 6) {\n exp = isProp.value && createSimpleExpression(isProp.value.content, true);\n } else {\n exp = isProp.exp;\n if (!exp) {\n exp = createSimpleExpression(`is`, false, isProp.arg.loc);\n }\n }\n if (exp) {\n return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n exp\n ]);\n }\n } else if (isProp.type === 6 && isProp.value.content.startsWith(\"vue:\")) {\n tag = isProp.value.content.slice(4);\n }\n }\n const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\n if (builtIn) {\n if (!ssr) context.helper(builtIn);\n return builtIn;\n }\n context.helper(RESOLVE_COMPONENT);\n context.components.add(tag);\n return toValidAssetId(tag, `component`);\n}\nfunction buildProps(node, context, props = node.props, isComponent, isDynamicComponent, ssr = false) {\n const { tag, loc: elementLoc, children } = node;\n let properties = [];\n const mergeArgs = [];\n const runtimeDirectives = [];\n const hasChildren = children.length > 0;\n let shouldUseBlock = false;\n let patchFlag = 0;\n let hasRef = false;\n let hasClassBinding = false;\n let hasStyleBinding = false;\n let hasHydrationEventBinding = false;\n let hasDynamicKeys = false;\n let hasVnodeHook = false;\n const dynamicPropNames = [];\n const pushMergeArg = (arg) => {\n if (properties.length) {\n mergeArgs.push(\n createObjectExpression(dedupeProperties(properties), elementLoc)\n );\n properties = [];\n }\n if (arg) mergeArgs.push(arg);\n };\n const pushRefVForMarker = () => {\n if (context.scopes.vFor > 0) {\n properties.push(\n createObjectProperty(\n createSimpleExpression(\"ref_for\", true),\n createSimpleExpression(\"true\")\n )\n );\n }\n };\n const analyzePatchFlag = ({ key, value }) => {\n if (isStaticExp(key)) {\n const name = key.content;\n const isEventHandler = isOn(name);\n if (isEventHandler && (!isComponent || isDynamicComponent) && // omit the flag for click handlers because hydration gives click\n // dedicated fast path.\n name.toLowerCase() !== \"onclick\" && // omit v-model handlers\n name !== \"onUpdate:modelValue\" && // omit onVnodeXXX hooks\n !isReservedProp(name)) {\n hasHydrationEventBinding = true;\n }\n if (isEventHandler && isReservedProp(name)) {\n hasVnodeHook = true;\n }\n if (isEventHandler && value.type === 14) {\n value = value.arguments[0];\n }\n if (value.type === 20 || (value.type === 4 || value.type === 8) && getConstantType(value, context) > 0) {\n return;\n }\n if (name === \"ref\") {\n hasRef = true;\n } else if (name === \"class\") {\n hasClassBinding = true;\n } else if (name === \"style\") {\n hasStyleBinding = true;\n } else if (name !== \"key\" && !dynamicPropNames.includes(name)) {\n dynamicPropNames.push(name);\n }\n if (isComponent && (name === \"class\" || name === \"style\") && !dynamicPropNames.includes(name)) {\n dynamicPropNames.push(name);\n }\n } else {\n hasDynamicKeys = true;\n }\n };\n for (let i = 0; i < props.length; i++) {\n const prop = props[i];\n if (prop.type === 6) {\n const { loc, name, nameLoc, value } = prop;\n let isStatic = true;\n if (name === \"ref\") {\n hasRef = true;\n pushRefVForMarker();\n }\n if (name === \"is\" && (isComponentTag(tag) || value && value.content.startsWith(\"vue:\") || isCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n context\n ))) {\n continue;\n }\n properties.push(\n createObjectProperty(\n createSimpleExpression(name, true, nameLoc),\n createSimpleExpression(\n value ? value.content : \"\",\n isStatic,\n value ? value.loc : loc\n )\n )\n );\n } else {\n const { name, arg, exp, loc, modifiers } = prop;\n const isVBind = name === \"bind\";\n const isVOn = name === \"on\";\n if (name === \"slot\") {\n if (!isComponent) {\n context.onError(\n createCompilerError(40, loc)\n );\n }\n continue;\n }\n if (name === \"once\" || name === \"memo\") {\n continue;\n }\n if (name === \"is\" || isVBind && isStaticArgOf(arg, \"is\") && (isComponentTag(tag) || isCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n context\n ))) {\n continue;\n }\n if (isVOn && ssr) {\n continue;\n }\n if (\n // #938: elements with dynamic keys should be forced into blocks\n isVBind && isStaticArgOf(arg, \"key\") || // inline before-update hooks need to force block so that it is invoked\n // before children\n isVOn && hasChildren && isStaticArgOf(arg, \"vue:before-update\")\n ) {\n shouldUseBlock = true;\n }\n if (isVBind && isStaticArgOf(arg, \"ref\")) {\n pushRefVForMarker();\n }\n if (!arg && (isVBind || isVOn)) {\n hasDynamicKeys = true;\n if (exp) {\n if (isVBind) {\n {\n pushMergeArg();\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const hasOverridableKeys = mergeArgs.some((arg2) => {\n if (arg2.type === 15) {\n return arg2.properties.some(({ key }) => {\n if (key.type !== 4 || !key.isStatic) {\n return true;\n }\n return key.content !== \"class\" && key.content !== \"style\" && !isOn(key.content);\n });\n } else {\n return true;\n }\n });\n if (hasOverridableKeys) {\n checkCompatEnabled(\n \"COMPILER_V_BIND_OBJECT_ORDER\",\n context,\n loc\n );\n }\n }\n if (isCompatEnabled(\n \"COMPILER_V_BIND_OBJECT_ORDER\",\n context\n )) {\n mergeArgs.unshift(exp);\n continue;\n }\n }\n pushRefVForMarker();\n pushMergeArg();\n mergeArgs.push(exp);\n } else {\n pushMergeArg({\n type: 14,\n loc,\n callee: context.helper(TO_HANDLERS),\n arguments: isComponent ? [exp] : [exp, `true`]\n });\n }\n } else {\n context.onError(\n createCompilerError(\n isVBind ? 34 : 35,\n loc\n )\n );\n }\n continue;\n }\n if (isVBind && modifiers.some((mod) => mod.content === \"prop\")) {\n patchFlag |= 32;\n }\n const directiveTransform = context.directiveTransforms[name];\n if (directiveTransform) {\n const { props: props2, needRuntime } = directiveTransform(prop, node, context);\n !ssr && props2.forEach(analyzePatchFlag);\n if (isVOn && arg && !isStaticExp(arg)) {\n pushMergeArg(createObjectExpression(props2, elementLoc));\n } else {\n properties.push(...props2);\n }\n if (needRuntime) {\n runtimeDirectives.push(prop);\n if (isSymbol(needRuntime)) {\n directiveImportMap.set(prop, needRuntime);\n }\n }\n } else if (!isBuiltInDirective(name)) {\n runtimeDirectives.push(prop);\n if (hasChildren) {\n shouldUseBlock = true;\n }\n }\n }\n }\n let propsExpression = void 0;\n if (mergeArgs.length) {\n pushMergeArg();\n if (mergeArgs.length > 1) {\n propsExpression = createCallExpression(\n context.helper(MERGE_PROPS),\n mergeArgs,\n elementLoc\n );\n } else {\n propsExpression = mergeArgs[0];\n }\n } else if (properties.length) {\n propsExpression = createObjectExpression(\n dedupeProperties(properties),\n elementLoc\n );\n }\n if (hasDynamicKeys) {\n patchFlag |= 16;\n } else {\n if (hasClassBinding && !isComponent) {\n patchFlag |= 2;\n }\n if (hasStyleBinding && !isComponent) {\n patchFlag |= 4;\n }\n if (dynamicPropNames.length) {\n patchFlag |= 8;\n }\n if (hasHydrationEventBinding) {\n patchFlag |= 32;\n }\n }\n if (!shouldUseBlock && (patchFlag === 0 || patchFlag === 32) && (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\n patchFlag |= 512;\n }\n if (!context.inSSR && propsExpression) {\n switch (propsExpression.type) {\n case 15:\n let classKeyIndex = -1;\n let styleKeyIndex = -1;\n let hasDynamicKey = false;\n for (let i = 0; i < propsExpression.properties.length; i++) {\n const key = propsExpression.properties[i].key;\n if (isStaticExp(key)) {\n if (key.content === \"class\") {\n classKeyIndex = i;\n } else if (key.content === \"style\") {\n styleKeyIndex = i;\n }\n } else if (!key.isHandlerKey) {\n hasDynamicKey = true;\n }\n }\n const classProp = propsExpression.properties[classKeyIndex];\n const styleProp = propsExpression.properties[styleKeyIndex];\n if (!hasDynamicKey) {\n if (classProp && !isStaticExp(classProp.value)) {\n classProp.value = createCallExpression(\n context.helper(NORMALIZE_CLASS),\n [classProp.value]\n );\n }\n if (styleProp && // the static style is compiled into an object,\n // so use `hasStyleBinding` to ensure that it is a dynamic style binding\n (hasStyleBinding || styleProp.value.type === 4 && styleProp.value.content.trim()[0] === `[` || // v-bind:style and style both exist,\n // v-bind:style with static literal object\n styleProp.value.type === 17)) {\n styleProp.value = createCallExpression(\n context.helper(NORMALIZE_STYLE),\n [styleProp.value]\n );\n }\n } else {\n propsExpression = createCallExpression(\n context.helper(NORMALIZE_PROPS),\n [propsExpression]\n );\n }\n break;\n case 14:\n break;\n default:\n propsExpression = createCallExpression(\n context.helper(NORMALIZE_PROPS),\n [\n createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\n propsExpression\n ])\n ]\n );\n break;\n }\n }\n return {\n props: propsExpression,\n directives: runtimeDirectives,\n patchFlag,\n dynamicPropNames,\n shouldUseBlock\n };\n}\nfunction dedupeProperties(properties) {\n const knownProps = /* @__PURE__ */ new Map();\n const deduped = [];\n for (let i = 0; i < properties.length; i++) {\n const prop = properties[i];\n if (prop.key.type === 8 || !prop.key.isStatic) {\n deduped.push(prop);\n continue;\n }\n const name = prop.key.content;\n const existing = knownProps.get(name);\n if (existing) {\n if (name === \"style\" || name === \"class\" || isOn(name)) {\n mergeAsArray(existing, prop);\n }\n } else {\n knownProps.set(name, prop);\n deduped.push(prop);\n }\n }\n return deduped;\n}\nfunction mergeAsArray(existing, incoming) {\n if (existing.value.type === 17) {\n existing.value.elements.push(incoming.value);\n } else {\n existing.value = createArrayExpression(\n [existing.value, incoming.value],\n existing.loc\n );\n }\n}\nfunction buildDirectiveArgs(dir, context) {\n const dirArgs = [];\n const runtime = directiveImportMap.get(dir);\n if (runtime) {\n dirArgs.push(context.helperString(runtime));\n } else {\n {\n context.helper(RESOLVE_DIRECTIVE);\n context.directives.add(dir.name);\n dirArgs.push(toValidAssetId(dir.name, `directive`));\n }\n }\n const { loc } = dir;\n if (dir.exp) dirArgs.push(dir.exp);\n if (dir.arg) {\n if (!dir.exp) {\n dirArgs.push(`void 0`);\n }\n dirArgs.push(dir.arg);\n }\n if (Object.keys(dir.modifiers).length) {\n if (!dir.arg) {\n if (!dir.exp) {\n dirArgs.push(`void 0`);\n }\n dirArgs.push(`void 0`);\n }\n const trueExpression = createSimpleExpression(`true`, false, loc);\n dirArgs.push(\n createObjectExpression(\n dir.modifiers.map(\n (modifier) => createObjectProperty(modifier, trueExpression)\n ),\n loc\n )\n );\n }\n return createArrayExpression(dirArgs, dir.loc);\n}\nfunction stringifyDynamicPropNames(props) {\n let propsNamesString = `[`;\n for (let i = 0, l = props.length; i < l; i++) {\n propsNamesString += JSON.stringify(props[i]);\n if (i < l - 1) propsNamesString += \", \";\n }\n return propsNamesString + `]`;\n}\nfunction isComponentTag(tag) {\n return tag === \"component\" || tag === \"Component\";\n}\n\nconst transformSlotOutlet = (node, context) => {\n if (isSlotOutlet(node)) {\n const { children, loc } = node;\n const { slotName, slotProps } = processSlotOutlet(node, context);\n const slotArgs = [\n context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\n slotName,\n \"{}\",\n \"undefined\",\n \"true\"\n ];\n let expectedLen = 2;\n if (slotProps) {\n slotArgs[2] = slotProps;\n expectedLen = 3;\n }\n if (children.length) {\n slotArgs[3] = createFunctionExpression([], children, false, false, loc);\n expectedLen = 4;\n }\n if (context.scopeId && !context.slotted) {\n expectedLen = 5;\n }\n slotArgs.splice(expectedLen);\n node.codegenNode = createCallExpression(\n context.helper(RENDER_SLOT),\n slotArgs,\n loc\n );\n }\n};\nfunction processSlotOutlet(node, context) {\n let slotName = `\"default\"`;\n let slotProps = void 0;\n const nonNameProps = [];\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 6) {\n if (p.value) {\n if (p.name === \"name\") {\n slotName = JSON.stringify(p.value.content);\n } else {\n p.name = camelize(p.name);\n nonNameProps.push(p);\n }\n }\n } else {\n if (p.name === \"bind\" && isStaticArgOf(p.arg, \"name\")) {\n if (p.exp) {\n slotName = p.exp;\n } else if (p.arg && p.arg.type === 4) {\n const name = camelize(p.arg.content);\n slotName = p.exp = createSimpleExpression(name, false, p.arg.loc);\n }\n } else {\n if (p.name === \"bind\" && p.arg && isStaticExp(p.arg)) {\n p.arg.content = camelize(p.arg.content);\n }\n nonNameProps.push(p);\n }\n }\n }\n if (nonNameProps.length > 0) {\n const { props, directives } = buildProps(\n node,\n context,\n nonNameProps,\n false,\n false\n );\n slotProps = props;\n if (directives.length) {\n context.onError(\n createCompilerError(\n 36,\n directives[0].loc\n )\n );\n }\n }\n return {\n slotName,\n slotProps\n };\n}\n\nconst transformOn = (dir, node, context, augmentor) => {\n const { loc, modifiers, arg } = dir;\n if (!dir.exp && !modifiers.length) {\n context.onError(createCompilerError(35, loc));\n }\n let eventName;\n if (arg.type === 4) {\n if (arg.isStatic) {\n let rawName = arg.content;\n if (!!(process.env.NODE_ENV !== \"production\") && rawName.startsWith(\"vnode\")) {\n context.onError(createCompilerError(52, arg.loc));\n }\n if (rawName.startsWith(\"vue:\")) {\n rawName = `vnode-${rawName.slice(4)}`;\n }\n const eventString = node.tagType !== 0 || rawName.startsWith(\"vnode\") || !/[A-Z]/.test(rawName) ? (\n // for non-element and vnode lifecycle event listeners, auto convert\n // it to camelCase. See issue #2249\n toHandlerKey(camelize(rawName))\n ) : (\n // preserve case for plain element listeners that have uppercase\n // letters, as these may be custom elements' custom events\n `on:${rawName}`\n );\n eventName = createSimpleExpression(eventString, true, arg.loc);\n } else {\n eventName = createCompoundExpression([\n `${context.helperString(TO_HANDLER_KEY)}(`,\n arg,\n `)`\n ]);\n }\n } else {\n eventName = arg;\n eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\n eventName.children.push(`)`);\n }\n let exp = dir.exp;\n if (exp && !exp.content.trim()) {\n exp = void 0;\n }\n let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\n if (exp) {\n const isMemberExp = isMemberExpression(exp);\n const isInlineStatement = !(isMemberExp || isFnExpression(exp));\n const hasMultipleStatements = exp.content.includes(`;`);\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n validateBrowserExpression(\n exp,\n context,\n false,\n hasMultipleStatements\n );\n }\n if (isInlineStatement || shouldCache && isMemberExp) {\n exp = createCompoundExpression([\n `${isInlineStatement ? `$event` : `${``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\n exp,\n hasMultipleStatements ? `}` : `)`\n ]);\n }\n }\n let ret = {\n props: [\n createObjectProperty(\n eventName,\n exp || createSimpleExpression(`() => {}`, false, loc)\n )\n ]\n };\n if (augmentor) {\n ret = augmentor(ret);\n }\n if (shouldCache) {\n ret.props[0].value = context.cache(ret.props[0].value);\n }\n ret.props.forEach((p) => p.key.isHandlerKey = true);\n return ret;\n};\n\nconst transformBind = (dir, _node, context) => {\n const { modifiers, loc } = dir;\n const arg = dir.arg;\n let { exp } = dir;\n if (exp && exp.type === 4 && !exp.content.trim()) {\n {\n exp = void 0;\n }\n }\n if (arg.type !== 4) {\n arg.children.unshift(`(`);\n arg.children.push(`) || \"\"`);\n } else if (!arg.isStatic) {\n arg.content = arg.content ? `${arg.content} || \"\"` : `\"\"`;\n }\n if (modifiers.some((mod) => mod.content === \"camel\")) {\n if (arg.type === 4) {\n if (arg.isStatic) {\n arg.content = camelize(arg.content);\n } else {\n arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\n }\n } else {\n arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\n arg.children.push(`)`);\n }\n }\n if (!context.inSSR) {\n if (modifiers.some((mod) => mod.content === \"prop\")) {\n injectPrefix(arg, \".\");\n }\n if (modifiers.some((mod) => mod.content === \"attr\")) {\n injectPrefix(arg, \"^\");\n }\n }\n return {\n props: [createObjectProperty(arg, exp)]\n };\n};\nconst injectPrefix = (arg, prefix) => {\n if (arg.type === 4) {\n if (arg.isStatic) {\n arg.content = prefix + arg.content;\n } else {\n arg.content = `\\`${prefix}\\${${arg.content}}\\``;\n }\n } else {\n arg.children.unshift(`'${prefix}' + (`);\n arg.children.push(`)`);\n }\n};\n\nconst transformText = (node, context) => {\n if (node.type === 0 || node.type === 1 || node.type === 11 || node.type === 10) {\n return () => {\n const children = node.children;\n let currentContainer = void 0;\n let hasText = false;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isText$1(child)) {\n hasText = true;\n for (let j = i + 1; j < children.length; j++) {\n const next = children[j];\n if (isText$1(next)) {\n if (!currentContainer) {\n currentContainer = children[i] = createCompoundExpression(\n [child],\n child.loc\n );\n }\n currentContainer.children.push(` + `, next);\n children.splice(j, 1);\n j--;\n } else {\n currentContainer = void 0;\n break;\n }\n }\n }\n }\n if (!hasText || // if this is a plain element with a single text child, leave it\n // as-is since the runtime has dedicated fast path for this by directly\n // setting textContent of the element.\n // for component root it's always normalized anyway.\n children.length === 1 && (node.type === 0 || node.type === 1 && node.tagType === 0 && // #3756\n // custom directives can potentially add DOM elements arbitrarily,\n // we need to avoid setting textContent of the element at runtime\n // to avoid accidentally overwriting the DOM elements added\n // by the user through custom directives.\n !node.props.find(\n (p) => p.type === 7 && !context.directiveTransforms[p.name]\n ) && // in compat mode, <template> tags with no special directives\n // will be rendered as a fragment so its children must be\n // converted into vnodes.\n !(node.tag === \"template\"))) {\n return;\n }\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isText$1(child) || child.type === 8) {\n const callArgs = [];\n if (child.type !== 2 || child.content !== \" \") {\n callArgs.push(child);\n }\n if (!context.ssr && getConstantType(child, context) === 0) {\n callArgs.push(\n 1 + (!!(process.env.NODE_ENV !== \"production\") ? ` /* ${PatchFlagNames[1]} */` : ``)\n );\n }\n children[i] = {\n type: 12,\n content: child,\n loc: child.loc,\n codegenNode: createCallExpression(\n context.helper(CREATE_TEXT),\n callArgs\n )\n };\n }\n }\n };\n }\n};\n\nconst seen$1 = /* @__PURE__ */ new WeakSet();\nconst transformOnce = (node, context) => {\n if (node.type === 1 && findDir(node, \"once\", true)) {\n if (seen$1.has(node) || context.inVOnce || context.inSSR) {\n return;\n }\n seen$1.add(node);\n context.inVOnce = true;\n context.helper(SET_BLOCK_TRACKING);\n return () => {\n context.inVOnce = false;\n const cur = context.currentNode;\n if (cur.codegenNode) {\n cur.codegenNode = context.cache(\n cur.codegenNode,\n true,\n true\n );\n }\n };\n }\n};\n\nconst transformModel = (dir, node, context) => {\n const { exp, arg } = dir;\n if (!exp) {\n context.onError(\n createCompilerError(41, dir.loc)\n );\n return createTransformProps();\n }\n const rawExp = exp.loc.source.trim();\n const expString = exp.type === 4 ? exp.content : rawExp;\n const bindingType = context.bindingMetadata[rawExp];\n if (bindingType === \"props\" || bindingType === \"props-aliased\") {\n context.onError(createCompilerError(44, exp.loc));\n return createTransformProps();\n }\n if (bindingType === \"literal-const\" || bindingType === \"setup-const\") {\n context.onError(createCompilerError(45, exp.loc));\n return createTransformProps();\n }\n if (!expString.trim() || !isMemberExpression(exp) && true) {\n context.onError(\n createCompilerError(42, exp.loc)\n );\n return createTransformProps();\n }\n const propName = arg ? arg : createSimpleExpression(\"modelValue\", true);\n const eventName = arg ? isStaticExp(arg) ? `onUpdate:${camelize(arg.content)}` : createCompoundExpression(['\"onUpdate:\" + ', arg]) : `onUpdate:modelValue`;\n let assignmentExp;\n const eventArg = context.isTS ? `($event: any)` : `$event`;\n {\n assignmentExp = createCompoundExpression([\n `${eventArg} => ((`,\n exp,\n `) = $event)`\n ]);\n }\n const props = [\n // modelValue: foo\n createObjectProperty(propName, dir.exp),\n // \"onUpdate:modelValue\": $event => (foo = $event)\n createObjectProperty(eventName, assignmentExp)\n ];\n if (dir.modifiers.length && node.tagType === 1) {\n const modifiers = dir.modifiers.map((m) => m.content).map((m) => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`).join(`, `);\n const modifiersKey = arg ? isStaticExp(arg) ? `${arg.content}Modifiers` : createCompoundExpression([arg, ' + \"Modifiers\"']) : `modelModifiers`;\n props.push(\n createObjectProperty(\n modifiersKey,\n createSimpleExpression(\n `{ ${modifiers} }`,\n false,\n dir.loc,\n 2\n )\n )\n );\n }\n return createTransformProps(props);\n};\nfunction createTransformProps(props = []) {\n return { props };\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\nconst transformFilter = (node, context) => {\n if (!isCompatEnabled(\"COMPILER_FILTERS\", context)) {\n return;\n }\n if (node.type === 5) {\n rewriteFilter(node.content, context);\n } else if (node.type === 1) {\n node.props.forEach((prop) => {\n if (prop.type === 7 && prop.name !== \"for\" && prop.exp) {\n rewriteFilter(prop.exp, context);\n }\n });\n }\n};\nfunction rewriteFilter(node, context) {\n if (node.type === 4) {\n parseFilter(node, context);\n } else {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (typeof child !== \"object\") continue;\n if (child.type === 4) {\n parseFilter(child, context);\n } else if (child.type === 8) {\n rewriteFilter(node, context);\n } else if (child.type === 5) {\n rewriteFilter(child.content, context);\n }\n }\n }\n}\nfunction parseFilter(node, context) {\n const exp = node.content;\n let inSingle = false;\n let inDouble = false;\n let inTemplateString = false;\n let inRegex = false;\n let curly = 0;\n let square = 0;\n let paren = 0;\n let lastFilterIndex = 0;\n let c, prev, i, expression, filters = [];\n for (i = 0; i < exp.length; i++) {\n prev = c;\n c = exp.charCodeAt(i);\n if (inSingle) {\n if (c === 39 && prev !== 92) inSingle = false;\n } else if (inDouble) {\n if (c === 34 && prev !== 92) inDouble = false;\n } else if (inTemplateString) {\n if (c === 96 && prev !== 92) inTemplateString = false;\n } else if (inRegex) {\n if (c === 47 && prev !== 92) inRegex = false;\n } else if (c === 124 && // pipe\n exp.charCodeAt(i + 1) !== 124 && exp.charCodeAt(i - 1) !== 124 && !curly && !square && !paren) {\n if (expression === void 0) {\n lastFilterIndex = i + 1;\n expression = exp.slice(0, i).trim();\n } else {\n pushFilter();\n }\n } else {\n switch (c) {\n case 34:\n inDouble = true;\n break;\n // \"\n case 39:\n inSingle = true;\n break;\n // '\n case 96:\n inTemplateString = true;\n break;\n // `\n case 40:\n paren++;\n break;\n // (\n case 41:\n paren--;\n break;\n // )\n case 91:\n square++;\n break;\n // [\n case 93:\n square--;\n break;\n // ]\n case 123:\n curly++;\n break;\n // {\n case 125:\n curly--;\n break;\n }\n if (c === 47) {\n let j = i - 1;\n let p;\n for (; j >= 0; j--) {\n p = exp.charAt(j);\n if (p !== \" \") break;\n }\n if (!p || !validDivisionCharRE.test(p)) {\n inRegex = true;\n }\n }\n }\n }\n if (expression === void 0) {\n expression = exp.slice(0, i).trim();\n } else if (lastFilterIndex !== 0) {\n pushFilter();\n }\n function pushFilter() {\n filters.push(exp.slice(lastFilterIndex, i).trim());\n lastFilterIndex = i + 1;\n }\n if (filters.length) {\n !!(process.env.NODE_ENV !== \"production\") && warnDeprecation(\n \"COMPILER_FILTERS\",\n context,\n node.loc\n );\n for (i = 0; i < filters.length; i++) {\n expression = wrapFilter(expression, filters[i], context);\n }\n node.content = expression;\n node.ast = void 0;\n }\n}\nfunction wrapFilter(exp, filter, context) {\n context.helper(RESOLVE_FILTER);\n const i = filter.indexOf(\"(\");\n if (i < 0) {\n context.filters.add(filter);\n return `${toValidAssetId(filter, \"filter\")}(${exp})`;\n } else {\n const name = filter.slice(0, i);\n const args = filter.slice(i + 1);\n context.filters.add(name);\n return `${toValidAssetId(name, \"filter\")}(${exp}${args !== \")\" ? \",\" + args : args}`;\n }\n}\n\nconst seen = /* @__PURE__ */ new WeakSet();\nconst transformMemo = (node, context) => {\n if (node.type === 1) {\n const dir = findDir(node, \"memo\");\n if (!dir || seen.has(node) || context.inSSR) {\n return;\n }\n seen.add(node);\n return () => {\n const codegenNode = node.codegenNode || context.currentNode.codegenNode;\n if (codegenNode && codegenNode.type === 13) {\n if (node.tagType !== 1) {\n convertToBlock(codegenNode, context);\n }\n node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\n dir.exp,\n createFunctionExpression(void 0, codegenNode),\n `_cache`,\n String(context.cached.length)\n ]);\n context.cached.push(null);\n }\n };\n }\n};\n\nconst transformVBindShorthand = (node, context) => {\n if (node.type === 1) {\n for (const prop of node.props) {\n if (prop.type === 7 && prop.name === \"bind\" && (!prop.exp || // #13930 :foo in in-DOM templates will be parsed into :foo=\"\" by browser\n prop.exp.type === 4 && !prop.exp.content.trim()) && prop.arg) {\n const arg = prop.arg;\n if (arg.type !== 4 || !arg.isStatic) {\n context.onError(\n createCompilerError(\n 53,\n arg.loc\n )\n );\n prop.exp = createSimpleExpression(\"\", true, arg.loc);\n } else {\n const propName = camelize(arg.content);\n if (validFirstIdentCharRE.test(propName[0]) || // allow hyphen first char for https://github.com/vuejs/language-tools/pull/3424\n propName[0] === \"-\") {\n prop.exp = createSimpleExpression(propName, false, arg.loc);\n }\n }\n }\n }\n }\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\n return [\n [\n transformVBindShorthand,\n transformOnce,\n transformIf,\n transformMemo,\n transformFor,\n ...[transformFilter] ,\n ...!!(process.env.NODE_ENV !== \"production\") ? [transformExpression] : [],\n transformSlotOutlet,\n transformElement,\n trackSlotScopes,\n transformText\n ],\n {\n on: transformOn,\n bind: transformBind,\n model: transformModel\n }\n ];\n}\nfunction baseCompile(source, options = {}) {\n const onError = options.onError || defaultOnError;\n const isModuleMode = options.mode === \"module\";\n {\n if (options.prefixIdentifiers === true) {\n onError(createCompilerError(48));\n } else if (isModuleMode) {\n onError(createCompilerError(49));\n }\n }\n const prefixIdentifiers = false;\n if (options.cacheHandlers) {\n onError(createCompilerError(50));\n }\n if (options.scopeId && !isModuleMode) {\n onError(createCompilerError(51));\n }\n const resolvedOptions = extend({}, options, {\n prefixIdentifiers\n });\n const ast = isString(source) ? baseParse(source, resolvedOptions) : source;\n const [nodeTransforms, directiveTransforms] = getBaseTransformPreset();\n transform(\n ast,\n extend({}, resolvedOptions, {\n nodeTransforms: [\n ...nodeTransforms,\n ...options.nodeTransforms || []\n // user transforms\n ],\n directiveTransforms: extend(\n {},\n directiveTransforms,\n options.directiveTransforms || {}\n // user transforms\n )\n })\n );\n return generate(ast, resolvedOptions);\n}\n\nconst BindingTypes = {\n \"DATA\": \"data\",\n \"PROPS\": \"props\",\n \"PROPS_ALIASED\": \"props-aliased\",\n \"SETUP_LET\": \"setup-let\",\n \"SETUP_CONST\": \"setup-const\",\n \"SETUP_REACTIVE_CONST\": \"setup-reactive-const\",\n \"SETUP_MAYBE_REF\": \"setup-maybe-ref\",\n \"SETUP_REF\": \"setup-ref\",\n \"OPTIONS\": \"options\",\n \"LITERAL_CONST\": \"literal-const\"\n};\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexport { BASE_TRANSITION, BindingTypes, CAMELIZE, CAPITALIZE, CREATE_BLOCK, CREATE_COMMENT, CREATE_ELEMENT_BLOCK, CREATE_ELEMENT_VNODE, CREATE_SLOTS, CREATE_STATIC, CREATE_TEXT, CREATE_VNODE, CompilerDeprecationTypes, ConstantTypes, ElementTypes, ErrorCodes, FRAGMENT, GUARD_REACTIVE_PROPS, IS_MEMO_SAME, IS_REF, KEEP_ALIVE, MERGE_PROPS, NORMALIZE_CLASS, NORMALIZE_PROPS, NORMALIZE_STYLE, Namespaces, NodeTypes, OPEN_BLOCK, POP_SCOPE_ID, PUSH_SCOPE_ID, RENDER_LIST, RENDER_SLOT, RESOLVE_COMPONENT, RESOLVE_DIRECTIVE, RESOLVE_DYNAMIC_COMPONENT, RESOLVE_FILTER, SET_BLOCK_TRACKING, SUSPENSE, TELEPORT, TO_DISPLAY_STRING, TO_HANDLERS, TO_HANDLER_KEY, TS_NODE_TYPES, UNREF, WITH_CTX, WITH_DIRECTIVES, WITH_MEMO, advancePositionWithClone, advancePositionWithMutation, assert, baseCompile, baseParse, buildDirectiveArgs, buildProps, buildSlots, checkCompatEnabled, convertToBlock, createArrayExpression, createAssignmentExpression, createBlockStatement, createCacheExpression, createCallExpression, createCompilerError, createCompoundExpression, createConditionalExpression, createForLoopParams, createFunctionExpression, createIfStatement, createInterpolation, createObjectExpression, createObjectProperty, createReturnStatement, createRoot, createSequenceExpression, createSimpleExpression, createStructuralDirectiveTransform, createTemplateLiteral, createTransformContext, createVNodeCall, errorMessages, extractIdentifiers, findDir, findProp, forAliasRE, generate, getBaseTransformPreset, getConstantType, getMemoedVNodeCall, getVNodeBlockHelper, getVNodeHelper, hasDynamicKeyVBind, hasScopeRef, helperNameMap, injectProp, isAllWhitespace, isCommentOrWhitespace, isCoreComponent, isFnExpression, isFnExpressionBrowser, isFnExpressionNode, isFunctionType, isInDestructureAssignment, isInNewExpression, isMemberExpression, isMemberExpressionBrowser, isMemberExpressionNode, isReferencedIdentifier, isSimpleIdentifier, isSlotOutlet, isStaticArgOf, isStaticExp, isStaticProperty, isStaticPropertyKey, isTemplateNode, isText$1 as isText, isVPre, isVSlot, isWhitespaceText, locStub, noopDirectiveTransform, processExpression, processFor, processIf, processSlotOutlet, registerRuntimeHelpers, resolveComponentType, stringifyExpression, toValidAssetId, trackSlotScopes, trackVForSlotScopes, transform, transformBind, transformElement, transformExpression, transformModel, transformOn, transformVBindShorthand, traverseNode, unwrapTSNode, validFirstIdentCharRE, walkBlockDeclarations, walkFunctionParams, walkIdentifiers, warnDeprecation };\n","/**\n* @vue/compiler-dom v3.5.26\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { registerRuntimeHelpers, createSimpleExpression, createCompilerError, createObjectProperty, createCallExpression, getConstantType, TO_DISPLAY_STRING, transformModel as transformModel$1, findProp, hasDynamicKeyVBind, findDir, isStaticArgOf, transformOn as transformOn$1, isStaticExp, createCompoundExpression, checkCompatEnabled, isCommentOrWhitespace, noopDirectiveTransform, baseCompile, baseParse } from '@vue/compiler-core';\nexport * from '@vue/compiler-core';\nimport { isHTMLTag, isSVGTag, isMathMLTag, isVoidTag, parseStringStyle, makeMap, capitalize, extend } from '@vue/shared';\n\nconst V_MODEL_RADIO = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `vModelRadio` : ``);\nconst V_MODEL_CHECKBOX = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vModelCheckbox` : ``\n);\nconst V_MODEL_TEXT = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `vModelText` : ``);\nconst V_MODEL_SELECT = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vModelSelect` : ``\n);\nconst V_MODEL_DYNAMIC = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vModelDynamic` : ``\n);\nconst V_ON_WITH_MODIFIERS = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vOnModifiersGuard` : ``\n);\nconst V_ON_WITH_KEYS = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vOnKeysGuard` : ``\n);\nconst V_SHOW = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `vShow` : ``);\nconst TRANSITION = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Transition` : ``);\nconst TRANSITION_GROUP = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `TransitionGroup` : ``\n);\nregisterRuntimeHelpers({\n [V_MODEL_RADIO]: `vModelRadio`,\n [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n [V_MODEL_TEXT]: `vModelText`,\n [V_MODEL_SELECT]: `vModelSelect`,\n [V_MODEL_DYNAMIC]: `vModelDynamic`,\n [V_ON_WITH_MODIFIERS]: `withModifiers`,\n [V_ON_WITH_KEYS]: `withKeys`,\n [V_SHOW]: `vShow`,\n [TRANSITION]: `Transition`,\n [TRANSITION_GROUP]: `TransitionGroup`\n});\n\nlet decoder;\nfunction decodeHtmlBrowser(raw, asAttr = false) {\n if (!decoder) {\n decoder = document.createElement(\"div\");\n }\n if (asAttr) {\n decoder.innerHTML = `<div foo=\"${raw.replace(/\"/g, \"&quot;\")}\">`;\n return decoder.children[0].getAttribute(\"foo\");\n } else {\n decoder.innerHTML = raw;\n return decoder.textContent;\n }\n}\n\nconst parserOptions = {\n parseMode: \"html\",\n isVoidTag,\n isNativeTag: (tag) => isHTMLTag(tag) || isSVGTag(tag) || isMathMLTag(tag),\n isPreTag: (tag) => tag === \"pre\",\n isIgnoreNewlineTag: (tag) => tag === \"pre\" || tag === \"textarea\",\n decodeEntities: decodeHtmlBrowser ,\n isBuiltInComponent: (tag) => {\n if (tag === \"Transition\" || tag === \"transition\") {\n return TRANSITION;\n } else if (tag === \"TransitionGroup\" || tag === \"transition-group\") {\n return TRANSITION_GROUP;\n }\n },\n // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n getNamespace(tag, parent, rootNamespace) {\n let ns = parent ? parent.ns : rootNamespace;\n if (parent && ns === 2) {\n if (parent.tag === \"annotation-xml\") {\n if (tag === \"svg\") {\n return 1;\n }\n if (parent.props.some(\n (a) => a.type === 6 && a.name === \"encoding\" && a.value != null && (a.value.content === \"text/html\" || a.value.content === \"application/xhtml+xml\")\n )) {\n ns = 0;\n }\n } else if (/^m(?:[ions]|text)$/.test(parent.tag) && tag !== \"mglyph\" && tag !== \"malignmark\") {\n ns = 0;\n }\n } else if (parent && ns === 1) {\n if (parent.tag === \"foreignObject\" || parent.tag === \"desc\" || parent.tag === \"title\") {\n ns = 0;\n }\n }\n if (ns === 0) {\n if (tag === \"svg\") {\n return 1;\n }\n if (tag === \"math\") {\n return 2;\n }\n }\n return ns;\n }\n};\n\nconst transformStyle = (node) => {\n if (node.type === 1) {\n node.props.forEach((p, i) => {\n if (p.type === 6 && p.name === \"style\" && p.value) {\n node.props[i] = {\n type: 7,\n name: `bind`,\n arg: createSimpleExpression(`style`, true, p.loc),\n exp: parseInlineCSS(p.value.content, p.loc),\n modifiers: [],\n loc: p.loc\n };\n }\n });\n }\n};\nconst parseInlineCSS = (cssText, loc) => {\n const normalized = parseStringStyle(cssText);\n return createSimpleExpression(\n JSON.stringify(normalized),\n false,\n loc,\n 3\n );\n};\n\nfunction createDOMCompilerError(code, loc) {\n return createCompilerError(\n code,\n loc,\n !!(process.env.NODE_ENV !== \"production\") || false ? DOMErrorMessages : void 0\n );\n}\nconst DOMErrorCodes = {\n \"X_V_HTML_NO_EXPRESSION\": 54,\n \"54\": \"X_V_HTML_NO_EXPRESSION\",\n \"X_V_HTML_WITH_CHILDREN\": 55,\n \"55\": \"X_V_HTML_WITH_CHILDREN\",\n \"X_V_TEXT_NO_EXPRESSION\": 56,\n \"56\": \"X_V_TEXT_NO_EXPRESSION\",\n \"X_V_TEXT_WITH_CHILDREN\": 57,\n \"57\": \"X_V_TEXT_WITH_CHILDREN\",\n \"X_V_MODEL_ON_INVALID_ELEMENT\": 58,\n \"58\": \"X_V_MODEL_ON_INVALID_ELEMENT\",\n \"X_V_MODEL_ARG_ON_ELEMENT\": 59,\n \"59\": \"X_V_MODEL_ARG_ON_ELEMENT\",\n \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\": 60,\n \"60\": \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\",\n \"X_V_MODEL_UNNECESSARY_VALUE\": 61,\n \"61\": \"X_V_MODEL_UNNECESSARY_VALUE\",\n \"X_V_SHOW_NO_EXPRESSION\": 62,\n \"62\": \"X_V_SHOW_NO_EXPRESSION\",\n \"X_TRANSITION_INVALID_CHILDREN\": 63,\n \"63\": \"X_TRANSITION_INVALID_CHILDREN\",\n \"X_IGNORED_SIDE_EFFECT_TAG\": 64,\n \"64\": \"X_IGNORED_SIDE_EFFECT_TAG\",\n \"__EXTEND_POINT__\": 65,\n \"65\": \"__EXTEND_POINT__\"\n};\nconst DOMErrorMessages = {\n [54]: `v-html is missing expression.`,\n [55]: `v-html will override element children.`,\n [56]: `v-text is missing expression.`,\n [57]: `v-text will override element children.`,\n [58]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n [59]: `v-model argument is not supported on plain elements.`,\n [60]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n [61]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n [62]: `v-show is missing expression.`,\n [63]: `<Transition> expects exactly one child element or component.`,\n [64]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n const { exp, loc } = dir;\n if (!exp) {\n context.onError(\n createDOMCompilerError(54, loc)\n );\n }\n if (node.children.length) {\n context.onError(\n createDOMCompilerError(55, loc)\n );\n node.children.length = 0;\n }\n return {\n props: [\n createObjectProperty(\n createSimpleExpression(`innerHTML`, true, loc),\n exp || createSimpleExpression(\"\", true)\n )\n ]\n };\n};\n\nconst transformVText = (dir, node, context) => {\n const { exp, loc } = dir;\n if (!exp) {\n context.onError(\n createDOMCompilerError(56, loc)\n );\n }\n if (node.children.length) {\n context.onError(\n createDOMCompilerError(57, loc)\n );\n node.children.length = 0;\n }\n return {\n props: [\n createObjectProperty(\n createSimpleExpression(`textContent`, true),\n exp ? getConstantType(exp, context) > 0 ? exp : createCallExpression(\n context.helperString(TO_DISPLAY_STRING),\n [exp],\n loc\n ) : createSimpleExpression(\"\", true)\n )\n ]\n };\n};\n\nconst transformModel = (dir, node, context) => {\n const baseResult = transformModel$1(dir, node, context);\n if (!baseResult.props.length || node.tagType === 1) {\n return baseResult;\n }\n if (dir.arg) {\n context.onError(\n createDOMCompilerError(\n 59,\n dir.arg.loc\n )\n );\n }\n function checkDuplicatedValue() {\n const value = findDir(node, \"bind\");\n if (value && isStaticArgOf(value.arg, \"value\")) {\n context.onError(\n createDOMCompilerError(\n 61,\n value.loc\n )\n );\n }\n }\n const { tag } = node;\n const isCustomElement = context.isCustomElement(tag);\n if (tag === \"input\" || tag === \"textarea\" || tag === \"select\" || isCustomElement) {\n let directiveToUse = V_MODEL_TEXT;\n let isInvalidType = false;\n if (tag === \"input\" || isCustomElement) {\n const type = findProp(node, `type`);\n if (type) {\n if (type.type === 7) {\n directiveToUse = V_MODEL_DYNAMIC;\n } else if (type.value) {\n switch (type.value.content) {\n case \"radio\":\n directiveToUse = V_MODEL_RADIO;\n break;\n case \"checkbox\":\n directiveToUse = V_MODEL_CHECKBOX;\n break;\n case \"file\":\n isInvalidType = true;\n context.onError(\n createDOMCompilerError(\n 60,\n dir.loc\n )\n );\n break;\n default:\n !!(process.env.NODE_ENV !== \"production\") && checkDuplicatedValue();\n break;\n }\n }\n } else if (hasDynamicKeyVBind(node)) {\n directiveToUse = V_MODEL_DYNAMIC;\n } else {\n !!(process.env.NODE_ENV !== \"production\") && checkDuplicatedValue();\n }\n } else if (tag === \"select\") {\n directiveToUse = V_MODEL_SELECT;\n } else {\n !!(process.env.NODE_ENV !== \"production\") && checkDuplicatedValue();\n }\n if (!isInvalidType) {\n baseResult.needRuntime = context.helper(directiveToUse);\n }\n } else {\n context.onError(\n createDOMCompilerError(\n 58,\n dir.loc\n )\n );\n }\n baseResult.props = baseResult.props.filter(\n (p) => !(p.key.type === 4 && p.key.content === \"modelValue\")\n );\n return baseResult;\n};\n\nconst isEventOptionModifier = /* @__PURE__ */ makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /* @__PURE__ */ makeMap(\n // event propagation management\n `stop,prevent,self,ctrl,shift,alt,meta,exact,middle`\n);\nconst maybeKeyModifier = /* @__PURE__ */ makeMap(\"left,right\");\nconst isKeyboardEvent = /* @__PURE__ */ makeMap(`onkeyup,onkeydown,onkeypress`);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n const keyModifiers = [];\n const nonKeyModifiers = [];\n const eventOptionModifiers = [];\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i].content;\n if (modifier === \"native\" && checkCompatEnabled(\n \"COMPILER_V_ON_NATIVE\",\n context,\n loc\n )) {\n eventOptionModifiers.push(modifier);\n } else if (isEventOptionModifier(modifier)) {\n eventOptionModifiers.push(modifier);\n } else {\n if (maybeKeyModifier(modifier)) {\n if (isStaticExp(key)) {\n if (isKeyboardEvent(key.content.toLowerCase())) {\n keyModifiers.push(modifier);\n } else {\n nonKeyModifiers.push(modifier);\n }\n } else {\n keyModifiers.push(modifier);\n nonKeyModifiers.push(modifier);\n }\n } else {\n if (isNonKeyModifier(modifier)) {\n nonKeyModifiers.push(modifier);\n } else {\n keyModifiers.push(modifier);\n }\n }\n }\n }\n return {\n keyModifiers,\n nonKeyModifiers,\n eventOptionModifiers\n };\n};\nconst transformClick = (key, event) => {\n const isStaticClick = isStaticExp(key) && key.content.toLowerCase() === \"onclick\";\n return isStaticClick ? createSimpleExpression(event, true) : key.type !== 4 ? createCompoundExpression([\n `(`,\n key,\n `) === \"onClick\" ? \"${event}\" : (`,\n key,\n `)`\n ]) : key;\n};\nconst transformOn = (dir, node, context) => {\n return transformOn$1(dir, node, context, (baseResult) => {\n const { modifiers } = dir;\n if (!modifiers.length) return baseResult;\n let { key, value: handlerExp } = baseResult.props[0];\n const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n if (nonKeyModifiers.includes(\"right\")) {\n key = transformClick(key, `onContextmenu`);\n }\n if (nonKeyModifiers.includes(\"middle\")) {\n key = transformClick(key, `onMouseup`);\n }\n if (nonKeyModifiers.length) {\n handlerExp = createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n handlerExp,\n JSON.stringify(nonKeyModifiers)\n ]);\n }\n if (keyModifiers.length && // if event name is dynamic, always wrap with keys guard\n (!isStaticExp(key) || isKeyboardEvent(key.content.toLowerCase()))) {\n handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [\n handlerExp,\n JSON.stringify(keyModifiers)\n ]);\n }\n if (eventOptionModifiers.length) {\n const modifierPostfix = eventOptionModifiers.map(capitalize).join(\"\");\n key = isStaticExp(key) ? createSimpleExpression(`${key.content}${modifierPostfix}`, true) : createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n }\n return {\n props: [createObjectProperty(key, handlerExp)]\n };\n });\n};\n\nconst transformShow = (dir, node, context) => {\n const { exp, loc } = dir;\n if (!exp) {\n context.onError(\n createDOMCompilerError(62, loc)\n );\n }\n return {\n props: [],\n needRuntime: context.helper(V_SHOW)\n };\n};\n\nconst transformTransition = (node, context) => {\n if (node.type === 1 && node.tagType === 1) {\n const component = context.isBuiltInComponent(node.tag);\n if (component === TRANSITION) {\n return () => {\n if (!node.children.length) {\n return;\n }\n if (hasMultipleChildren(node)) {\n context.onError(\n createDOMCompilerError(\n 63,\n {\n start: node.children[0].loc.start,\n end: node.children[node.children.length - 1].loc.end,\n source: \"\"\n }\n )\n );\n }\n const child = node.children[0];\n if (child.type === 1) {\n for (const p of child.props) {\n if (p.type === 7 && p.name === \"show\") {\n node.props.push({\n type: 6,\n name: \"persisted\",\n nameLoc: node.loc,\n value: void 0,\n loc: node.loc\n });\n }\n }\n }\n };\n }\n }\n};\nfunction hasMultipleChildren(node) {\n const children = node.children = node.children.filter(\n (c) => !isCommentOrWhitespace(c)\n );\n const child = children[0];\n return children.length !== 1 || child.type === 11 || child.type === 9 && child.branches.some(hasMultipleChildren);\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n if (node.type === 1 && node.tagType === 0 && (node.tag === \"script\" || node.tag === \"style\")) {\n !!(process.env.NODE_ENV !== \"production\") && context.onError(\n createDOMCompilerError(\n 64,\n node.loc\n )\n );\n context.removeNode();\n }\n};\n\nfunction isValidHTMLNesting(parent, child) {\n if (parent === \"template\") {\n return true;\n }\n if (parent in onlyValidChildren) {\n return onlyValidChildren[parent].has(child);\n }\n if (child in onlyValidParents) {\n return onlyValidParents[child].has(parent);\n }\n if (parent in knownInvalidChildren) {\n if (knownInvalidChildren[parent].has(child)) return false;\n }\n if (child in knownInvalidParents) {\n if (knownInvalidParents[child].has(parent)) return false;\n }\n return true;\n}\nconst headings = /* @__PURE__ */ new Set([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\nconst emptySet = /* @__PURE__ */ new Set([]);\nconst onlyValidChildren = {\n head: /* @__PURE__ */ new Set([\n \"base\",\n \"basefront\",\n \"bgsound\",\n \"link\",\n \"meta\",\n \"title\",\n \"noscript\",\n \"noframes\",\n \"style\",\n \"script\",\n \"template\"\n ]),\n optgroup: /* @__PURE__ */ new Set([\"option\"]),\n select: /* @__PURE__ */ new Set([\"optgroup\", \"option\", \"hr\"]),\n // table\n table: /* @__PURE__ */ new Set([\"caption\", \"colgroup\", \"tbody\", \"tfoot\", \"thead\"]),\n tr: /* @__PURE__ */ new Set([\"td\", \"th\"]),\n colgroup: /* @__PURE__ */ new Set([\"col\"]),\n tbody: /* @__PURE__ */ new Set([\"tr\"]),\n thead: /* @__PURE__ */ new Set([\"tr\"]),\n tfoot: /* @__PURE__ */ new Set([\"tr\"]),\n // these elements can not have any children elements\n script: emptySet,\n iframe: emptySet,\n option: emptySet,\n textarea: emptySet,\n style: emptySet,\n title: emptySet\n};\nconst onlyValidParents = {\n // sections\n html: emptySet,\n body: /* @__PURE__ */ new Set([\"html\"]),\n head: /* @__PURE__ */ new Set([\"html\"]),\n // table\n td: /* @__PURE__ */ new Set([\"tr\"]),\n colgroup: /* @__PURE__ */ new Set([\"table\"]),\n caption: /* @__PURE__ */ new Set([\"table\"]),\n tbody: /* @__PURE__ */ new Set([\"table\"]),\n tfoot: /* @__PURE__ */ new Set([\"table\"]),\n col: /* @__PURE__ */ new Set([\"colgroup\"]),\n th: /* @__PURE__ */ new Set([\"tr\"]),\n thead: /* @__PURE__ */ new Set([\"table\"]),\n tr: /* @__PURE__ */ new Set([\"tbody\", \"thead\", \"tfoot\"]),\n // data list\n dd: /* @__PURE__ */ new Set([\"dl\", \"div\"]),\n dt: /* @__PURE__ */ new Set([\"dl\", \"div\"]),\n // other\n figcaption: /* @__PURE__ */ new Set([\"figure\"]),\n // li: new Set([\"ul\", \"ol\"]),\n summary: /* @__PURE__ */ new Set([\"details\"]),\n area: /* @__PURE__ */ new Set([\"map\"])\n};\nconst knownInvalidChildren = {\n p: /* @__PURE__ */ new Set([\n \"address\",\n \"article\",\n \"aside\",\n \"blockquote\",\n \"center\",\n \"details\",\n \"dialog\",\n \"dir\",\n \"div\",\n \"dl\",\n \"fieldset\",\n \"figure\",\n \"footer\",\n \"form\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"header\",\n \"hgroup\",\n \"hr\",\n \"li\",\n \"main\",\n \"nav\",\n \"menu\",\n \"ol\",\n \"p\",\n \"pre\",\n \"section\",\n \"table\",\n \"ul\"\n ]),\n svg: /* @__PURE__ */ new Set([\n \"b\",\n \"blockquote\",\n \"br\",\n \"code\",\n \"dd\",\n \"div\",\n \"dl\",\n \"dt\",\n \"em\",\n \"embed\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"hr\",\n \"i\",\n \"img\",\n \"li\",\n \"menu\",\n \"meta\",\n \"ol\",\n \"p\",\n \"pre\",\n \"ruby\",\n \"s\",\n \"small\",\n \"span\",\n \"strong\",\n \"sub\",\n \"sup\",\n \"table\",\n \"u\",\n \"ul\",\n \"var\"\n ])\n};\nconst knownInvalidParents = {\n a: /* @__PURE__ */ new Set([\"a\"]),\n button: /* @__PURE__ */ new Set([\"button\"]),\n dd: /* @__PURE__ */ new Set([\"dd\", \"dt\"]),\n dt: /* @__PURE__ */ new Set([\"dd\", \"dt\"]),\n form: /* @__PURE__ */ new Set([\"form\"]),\n li: /* @__PURE__ */ new Set([\"li\"]),\n h1: headings,\n h2: headings,\n h3: headings,\n h4: headings,\n h5: headings,\n h6: headings\n};\n\nconst validateHtmlNesting = (node, context) => {\n if (node.type === 1 && node.tagType === 0 && context.parent && context.parent.type === 1 && context.parent.tagType === 0 && !isValidHTMLNesting(context.parent.tag, node.tag)) {\n const error = new SyntaxError(\n `<${node.tag}> cannot be child of <${context.parent.tag}>, according to HTML specifications. This can cause hydration errors or potentially disrupt future functionality.`\n );\n error.loc = node.loc;\n context.onWarn(error);\n }\n};\n\nconst DOMNodeTransforms = [\n transformStyle,\n ...!!(process.env.NODE_ENV !== \"production\") ? [transformTransition, validateHtmlNesting] : []\n];\nconst DOMDirectiveTransforms = {\n cloak: noopDirectiveTransform,\n html: transformVHtml,\n text: transformVText,\n model: transformModel,\n // override compiler-core\n on: transformOn,\n // override compiler-core\n show: transformShow\n};\nfunction compile(src, options = {}) {\n return baseCompile(\n src,\n extend({}, parserOptions, options, {\n nodeTransforms: [\n // ignore <script> and <tag>\n // this is not put inside DOMNodeTransforms because that list is used\n // by compiler-ssr to generate vnode fallback branches\n ignoreSideEffectTags,\n ...DOMNodeTransforms,\n ...options.nodeTransforms || []\n ],\n directiveTransforms: extend(\n {},\n DOMDirectiveTransforms,\n options.directiveTransforms || {}\n ),\n transformHoist: null \n })\n );\n}\nfunction parse(template, options = {}) {\n return baseParse(template, extend({}, parserOptions, options));\n}\n\nexport { DOMDirectiveTransforms, DOMErrorCodes, DOMErrorMessages, DOMNodeTransforms, TRANSITION, TRANSITION_GROUP, V_MODEL_CHECKBOX, V_MODEL_DYNAMIC, V_MODEL_RADIO, V_MODEL_SELECT, V_MODEL_TEXT, V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS, V_SHOW, compile, createDOMCompilerError, parse, parserOptions, transformStyle };\n","/**\n* vue v3.5.26\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerDom = require('@vue/compiler-dom');\nvar runtimeDom = require('@vue/runtime-dom');\nvar shared = require('@vue/shared');\n\nfunction _interopNamespaceDefault(e) {\n var n = Object.create(null);\n if (e) {\n for (var k in e) {\n n[k] = e[k];\n }\n }\n n.default = e;\n return Object.freeze(n);\n}\n\nvar runtimeDom__namespace = /*#__PURE__*/_interopNamespaceDefault(runtimeDom);\n\nconst compileCache = /* @__PURE__ */ Object.create(null);\nfunction compileToFunction(template, options) {\n if (!shared.isString(template)) {\n if (template.nodeType) {\n template = template.innerHTML;\n } else {\n return shared.NOOP;\n }\n }\n const key = shared.genCacheKey(template, options);\n const cached = compileCache[key];\n if (cached) {\n return cached;\n }\n if (template[0] === \"#\") {\n const el = document.querySelector(template);\n template = el ? el.innerHTML : ``;\n }\n const opts = shared.extend(\n {\n hoistStatic: true,\n onError: void 0,\n onWarn: shared.NOOP\n },\n options\n );\n if (!opts.isCustomElement && typeof customElements !== \"undefined\") {\n opts.isCustomElement = (tag) => !!customElements.get(tag);\n }\n const { code } = compilerDom.compile(template, opts);\n const render = new Function(\"Vue\", code)(runtimeDom__namespace);\n render._rc = true;\n return compileCache[key] = render;\n}\nruntimeDom.registerRuntimeCompiler(compileToFunction);\n\nexports.compile = compileToFunction;\nObject.keys(runtimeDom).forEach(function (k) {\n if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = runtimeDom[k];\n});\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./dist/vue.cjs.prod.js')\n} else {\n module.exports = require('./dist/vue.cjs.js')\n}\n","/*!\n * Cropper.js v1.6.2\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-04-21T07:43:05.335Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n function ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n }\n function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n }\n function _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n }\n function _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n }\n function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper';\n\n // Actions\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw';\n\n // Classes\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n // Drag modes\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none';\n\n // Events\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n\n // Mime types\n var MIME_TYPE_JPEG = 'image/jpeg';\n\n // RegExps\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n // Misc\n // Inspired by the default width and height of a canvas element.\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n };\n\n var TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n /**\n * Check if the given value is not a number.\n */\n var isNaN = Number.isNaN || WINDOW.isNaN;\n\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n\n /**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\n var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\n\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n function isFunction(value) {\n return typeof value === 'function';\n }\n var slice = Array.prototype.slice;\n\n /**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\n function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\n\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n }\n\n /**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\n var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n };\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n /**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n }\n\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n function addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n function removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\n\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\n\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n\n /**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n var REGEXP_SPACES = /\\s\\s*/;\n var onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n }();\n\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n }\n\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n }\n\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n function dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n }\n\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n /**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\n\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n }\n\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n /**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n function getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n }\n\n /**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n }\n\n /**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n var fromCharCode = String.fromCharCode;\n\n /**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n }\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n /**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n\n /**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\n\n /**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n }\n\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n };\n\n var AnotherCropper = WINDOW.Cropper;\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n return _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n }();\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n}));\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _vue = require('vue');\n\nvar _cropperjs = require('cropperjs');\n\nvar _cropperjs2 = _interopRequireDefault(_cropperjs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar previewPropType = typeof window === 'undefined' ? [String, Array] : [String, Array, Element, NodeList];\n\nexports.default = {\n render: function render() {\n var crossorigin = this.crossorigin || undefined;\n\n return (0, _vue.h)('div', { style: this.containerStyle }, [(0, _vue.h)('img', {\n ref: 'img',\n src: this.src,\n alt: this.alt || 'image',\n style: [{ 'max-width': '100%' }, this.imgStyle],\n crossorigin: crossorigin\n })]);\n },\n\n props: {\n containerStyle: Object,\n src: {\n type: String,\n default: ''\n },\n alt: String,\n imgStyle: Object,\n\n viewMode: Number,\n dragMode: String,\n initialAspectRatio: Number,\n aspectRatio: Number,\n data: Object,\n preview: previewPropType,\n responsive: {\n type: Boolean,\n default: true\n },\n restore: {\n type: Boolean,\n default: true\n },\n checkCrossOrigin: {\n type: Boolean,\n default: true\n },\n checkOrientation: {\n type: Boolean,\n default: true\n },\n crossorigin: {\n type: String\n },\n modal: {\n type: Boolean,\n default: true\n },\n guides: {\n type: Boolean,\n default: true\n },\n center: {\n type: Boolean,\n default: true\n },\n highlight: {\n type: Boolean,\n default: true\n },\n background: {\n type: Boolean,\n default: true\n },\n autoCrop: {\n type: Boolean,\n default: true\n },\n autoCropArea: Number,\n movable: {\n type: Boolean,\n default: true\n },\n rotatable: {\n type: Boolean,\n default: true\n },\n scalable: {\n type: Boolean,\n default: true\n },\n zoomable: {\n type: Boolean,\n default: true\n },\n zoomOnTouch: {\n type: Boolean,\n default: true\n },\n zoomOnWheel: {\n type: Boolean,\n default: true\n },\n wheelZoomRatio: Number,\n cropBoxMovable: {\n type: Boolean,\n default: true\n },\n cropBoxResizable: {\n type: Boolean,\n default: true\n },\n toggleDragModeOnDblclick: {\n type: Boolean,\n default: true\n },\n\n minCanvasWidth: Number,\n minCanvasHeight: Number,\n minCropBoxWidth: Number,\n minCropBoxHeight: Number,\n minContainerWidth: Number,\n minContainerHeight: Number,\n\n ready: Function,\n cropstart: Function,\n cropmove: Function,\n cropend: Function,\n crop: Function,\n zoom: Function\n },\n mounted: function mounted() {\n var _$options$props = this.$options.props,\n containerStyle = _$options$props.containerStyle,\n src = _$options$props.src,\n alt = _$options$props.alt,\n imgStyle = _$options$props.imgStyle,\n data = _objectWithoutProperties(_$options$props, ['containerStyle', 'src', 'alt', 'imgStyle']);\n\n var props = {};\n\n for (var key in data) {\n if (this[key] !== undefined) {\n props[key] = this[key];\n }\n }\n\n this.cropper = new _cropperjs2.default(this.$refs.img, props);\n },\n\n methods: {\n reset: function reset() {\n return this.cropper.reset();\n },\n clear: function clear() {\n return this.cropper.clear();\n },\n initCrop: function initCrop() {\n return this.cropper.crop();\n },\n replace: function replace(url) {\n var onlyColorChanged = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n return this.cropper.replace(url, onlyColorChanged);\n },\n enable: function enable() {\n return this.cropper.enable();\n },\n disable: function disable() {\n return this.cropper.disable();\n },\n destroy: function destroy() {\n return this.cropper.destroy();\n },\n move: function move(offsetX, offsetY) {\n return this.cropper.move(offsetX, offsetY);\n },\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n\n return this.cropper.moveTo(x, y);\n },\n relativeZoom: function relativeZoom(ratio, _originalEvent) {\n return this.cropper.zoom(ratio, _originalEvent);\n },\n zoomTo: function zoomTo(ratio, _originalEvent) {\n return this.cropper.zoomTo(ratio, _originalEvent);\n },\n rotate: function rotate(degree) {\n return this.cropper.rotate(degree);\n },\n rotateTo: function rotateTo(degree) {\n return this.cropper.rotateTo(degree);\n },\n scaleX: function scaleX(_scaleX) {\n return this.cropper.scaleX(_scaleX);\n },\n scaleY: function scaleY(_scaleY) {\n return this.cropper.scaleY(_scaleY);\n },\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n\n return this.cropper.scale(scaleX, scaleY);\n },\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n return this.cropper.getData(rounded);\n },\n setData: function setData(data) {\n return this.cropper.setData(data);\n },\n getContainerData: function getContainerData() {\n return this.cropper.getContainerData();\n },\n getImageData: function getImageData() {\n return this.cropper.getImageData();\n },\n getCanvasData: function getCanvasData() {\n return this.cropper.getCanvasData();\n },\n setCanvasData: function setCanvasData(data) {\n return this.cropper.setCanvasData(data);\n },\n getCropBoxData: function getCropBoxData() {\n return this.cropper.getCropBoxData();\n },\n setCropBoxData: function setCropBoxData(data) {\n return this.cropper.setCropBoxData(data);\n },\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return this.cropper.getCroppedCanvas(options);\n },\n setAspectRatio: function setAspectRatio(aspectRatio) {\n return this.cropper.setAspectRatio(aspectRatio);\n },\n setDragMode: function setDragMode(mode) {\n return this.cropper.setDragMode(mode);\n }\n }\n};","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon cloud-download-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M6.5 20Q4.22 20 2.61 18.43 1 16.85 1 14.58 1 12.63 2.17 11.1 3.35 9.57 5.25 9.15 5.68 7.35 7.38 5.73 9.07 4.1 11 4.1 11.83 4.1 12.41 4.69 13 5.28 13 6.1V12.15L14.6 10.6L16 12L12 16L8 12L9.4 10.6L11 12.15V6.1Q9.1 6.45 8.05 7.94 7 9.43 7 11H6.5Q5.05 11 4.03 12.03 3 13.05 3 14.5 3 15.95 4.03 17 5.05 18 6.5 18H18.5Q19.55 18 20.27 17.27 21 16.55 21 15.5 21 14.45 20.27 13.73 19.55 13 18.5 13H17V11Q17 9.8 16.45 8.76 15.9 7.73 15 7V4.68Q16.85 5.55 17.93 7.26 19 9 19 11 20.73 11.2 21.86 12.5 23 13.78 23 15.5 23 17.38 21.69 18.69 20.38 20 18.5 20M12 11.05Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CloudDownloadOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon image-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19,19H5V5H19M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M13.96,12.29L11.21,15.83L9.25,13.47L6.5,17H17.5L13.96,12.29Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ImageOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon upload-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M9,10V16H15V10H19L12,3L5,10H9M12,5.8L14.2,8H13V14H11V8H9.8L12,5.8M19,18H5V20H19V18Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"UploadOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"contact-header-avatar__wrapper\">\n\t\t<input\n\t\t\tid=\"contact-avatar-upload\"\n\t\t\tref=\"uploadInput\"\n\t\t\ttype=\"file\"\n\t\t\tclass=\"hidden\"\n\t\t\taccept=\"image/*\"\n\t\t\t@change=\"handleUploadedFile\">\n\n\t\t<!-- Avatar display -->\n\t\t<Avatar\n\t\t\tv-if=\"contact.addressbook.id === 'z-server-generated--system'\"\n\t\t\tdisable-menu\n\t\t\t:show-user-status=\"false\"\n\t\t\t:user=\"contact.uid\"\n\t\t\t:size=\"75\"\n\t\t\tclass=\"contact-header-avatar__photo\" />\n\t\t<Avatar\n\t\t\tv-else\n\t\t\t:disable-tooltip=\"true\"\n\t\t\t:display-name=\"contact.displayName\"\n\t\t\t:is-no-user=\"true\"\n\t\t\t:size=\"75\"\n\t\t\t:url=\"photoUrl\"\n\t\t\tclass=\"contact-header-avatar__photo\" />\n\n\t\t<NcModal v-model:show=\"showCropper\" size=\"small\" @close=\"cancel\">\n\t\t\t<div class=\"avatar__container\">\n\t\t\t\t<h2>{{ t('contacts', 'Crop contact photo') }}</h2>\n\t\t\t\t<VueCropper\n\t\t\t\t\tref=\"cropper\"\n\t\t\t\t\tclass=\"avatar__cropper\"\n\t\t\t\t\tv-bind=\"cropperOptions\" />\n\t\t\t\t<div class=\"avatar__cropper-buttons\">\n\t\t\t\t\t<NcButton variant=\"tertiary\" @click=\"cancel\">\n\t\t\t\t\t\t{{ t('contacts', 'Cancel') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t@click=\"saveAvatar\">\n\t\t\t\t\t\t{{ t('contacts', 'Save') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</NcModal>\n\n\t\t<Actions\n\t\t\tv-if=\"!isReadOnly\"\n\t\t\tv-model:open=\"opened\"\n\t\t\t:force-menu=\"true\"\n\t\t\tclass=\"contact-header-avatar__menu\">\n\t\t\t<template #icon>\n\t\t\t\t<IconImage :size=\"20\" fill-color=\"#fff\" />\n\t\t\t</template>\n\t\t\t<ActionButton\n\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t@click.stop.prevent=\"selectFileInput\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconUpload :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('contacts', 'Upload a new picture') }}\n\t\t\t</ActionButton>\n\t\t\t<ActionButton\n\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t@click=\"selectFilePicker\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconFolder :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('contacts', 'Choose from Files') }}\n\t\t\t</ActionButton>\n\t\t\t<ActionButton\n\t\t\t\tv-for=\"network in supportedSocial\"\n\t\t\t\t:key=\"network\"\n\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t@click=\"getSocialAvatar(network)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconCloudDownload :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('contacts', 'Get from ' + network) }}\n\t\t\t</ActionButton>\n\n\t\t\t<template v-if=\"contact.photo\">\n\t\t\t\t<!-- FIXME: the link seems to have a bigger font size than the button caption -->\n\t\t\t\t<ActionLink\n\t\t\t\t\t:href=\"`${contact.url}?photo`\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t:close-after-click=\"true\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconDownload :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Download picture') }}\n\t\t\t\t</ActionLink>\n\t\t\t\t<ActionButton\n\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t@click=\"removePhoto\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Delete picture') }}\n\t\t\t\t</ActionButton>\n\t\t\t</template>\n\t\t</Actions>\n\t</div>\n</template>\n\n<script>\nimport sanitizeSVG from '@mattkrick/sanitize-svg'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport axios from '@nextcloud/axios'\nimport { getFilePickerBuilder, showError, showInfo, showSuccess } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport {\n\tNcActionButton as ActionButton,\n\tNcActionLink as ActionLink,\n\tNcActions as Actions,\n\tNcAvatar as Avatar,\n\tNcButton,\n\tNcModal,\n} from '@nextcloud/vue'\nimport VueCropper from 'vue-cropperjs'\nimport IconCloudDownload from 'vue-material-design-icons/CloudDownloadOutline.vue'\nimport IconFolder from 'vue-material-design-icons/FolderOutline.vue'\nimport IconImage from 'vue-material-design-icons/ImageOutline.vue'\nimport IconDelete from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconDownload from 'vue-material-design-icons/TrayArrowDown.vue'\nimport IconUpload from 'vue-material-design-icons/UploadOutline.vue'\nimport logger from '../../services/logger.js'\n\nimport 'cropperjs/dist/cropper.css'\n\nconst supportedNetworks = loadState('contacts', 'supportedNetworks')\n\nexport default {\n\tname: 'ContactDetailsAvatar',\n\n\tcomponents: {\n\t\tActionButton,\n\t\tActionLink,\n\t\tActions,\n\t\tAvatar,\n\t\tIconCloudDownload,\n\t\tIconDownload,\n\t\tIconDelete,\n\t\tIconUpload,\n\t\tIconFolder,\n\t\tIconImage,\n\t\tNcButton,\n\t\tVueCropper,\n\t\tNcModal,\n\t},\n\n\tprops: {\n\t\tcontact: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tisReadOnly: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\n\t\treloadBus: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\topened: false,\n\t\t\tloading: false,\n\t\t\tphotoUrl: undefined,\n\t\t\troot: generateRemoteUrl(`dav/files/${getCurrentUser().uid}`),\n\t\t\tshowCropper: false,\n\t\t\tcropperOptions: {\n\t\t\t\taspectRatio: 1 / 1,\n\t\t\t\tviewMode: 3,\n\t\t\t\tguides: false,\n\t\t\t\tcenter: false,\n\t\t\t\thighlight: false,\n\t\t\t\tautoCropArea: 1,\n\t\t\t\tdragMode: 'move',\n\t\t\t\tminContainerWidth: 100,\n\t\t\t\tminContainerHeight: 100,\n\t\t\t},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tsupportedSocial() {\n\t\t\tconst emails = this.contact.vCard.getAllProperties('email')\n\t\t\t// get social networks set for the current contact\n\t\t\tconst availableSocial = this.contact.vCard.getAllProperties('x-socialprofile')\n\t\t\t\t.map((a) => a.jCal[1].type.toString().toLowerCase())\n\t\t\tconst availableMessenger = this.contact.vCard.getAllProperties('impp')\n\t\t\t\t.map((a) => a.jCal[1].type.toString().toLowerCase())\n\t\t\tconst available = [].concat(availableSocial, availableMessenger)\n\t\t\t// get list of social networks that allow for avatar download\n\t\t\tconst supported = supportedNetworks.map((v) => v.toLowerCase())\n\t\t\tif (emails.length) {\n\t\t\t\tavailable.push('gravatar')\n\t\t\t}\n\t\t\t// return supported social networks which are set\n\t\t\treturn supported.filter((i) => available.includes(i))\n\t\t\t\t.map((j) => this.capitalize(j))\n\t\t},\n\t},\n\n\twatch: {\n\t\tasync contact() {\n\t\t\tawait this.loadPhotoUrl()\n\t\t},\n\t},\n\n\tasync mounted() {\n\t\tawait this.loadPhotoUrl()\n\t},\n\n\tmethods: {\n\t\tonLoad(...args) {\n\t\t\tconsole.debug(...args)\n\t\t},\n\n\t\t/**\n\t\t * Checks the selected image for mimetype\n\t\t * and open the cropper if valid, else show error\n\t\t *\n\t\t * @param {Buffer} data the image\n\t\t * @return {boolean}\n\t\t */\n\t\tasync processPicture(data) {\n\t\t\tconst type = this.getMimetype(data)\n\n\t\t\tif (!type.startsWith('image/')) {\n\t\t\t\tshowError(t('contacts', 'Please select a valid format'))\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif (type === 'image/svg') {\n\t\t\t\tconst imageSvg = atob(data.toString('base64'))\n\t\t\t\tconst cleanSvg = await sanitizeSVG(imageSvg)\n\t\t\t\tif (!cleanSvg) {\n\t\t\t\t\tthrow new Error('Unsafe svg image', imageSvg)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.openCropper(data, type)\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Open the cropper-modal with the provided data\n\t\t *\n\t\t * @param {Buffer} data the image\n\t\t * @param {string} type of the image\n\t\t */\n\t\topenCropper(data, type) {\n\t\t\tconst ccc = `data:${type};base64,${data.toString('base64')}`\n\t\t\tthis.$refs.cropper.replace(ccc)\n\t\t\tthis.showCropper = true\n\t\t},\n\n\t\t/**\n\t\t * Handle the uploaded file\n\t\t *\n\t\t * @param {object} event the event object containing the image\n\t\t */\n\t\thandleUploadedFile(event) {\n\t\t\tif (event.target.files && !this.loading) {\n\t\t\t\tthis.closeMenu()\n\n\t\t\t\tconst file = event.target.files[0]\n\n\t\t\t\tconst reader = new FileReader()\n\n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (typeof e.target.result === 'object') {\n\t\t\t\t\t\t\tconst data = Buffer.from(e.target.result, 'binary')\n\n\t\t\t\t\t\t\tif (this.processPicture(data)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthrow new Error('Wrong image mimetype')\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(error)\n\t\t\t\t\t\tshowError(t('contacts', 'Invalid image'))\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.resetPicker()\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset image pciker input\n\t\t */\n\t\tresetPicker() {\n\t\t\t// reset input\n\t\t\tthis.$refs.uploadInput.value = ''\n\t\t\tthis.loading = false\n\t\t},\n\n\t\t/**\n\t\t * Return the word with (only) the first letter capitalized\n\t\t *\n\t\t * @param {string} word the word to handle\n\t\t * @return {string} the word with the first letter capitalized\n\t\t */\n\t\tcapitalize(word) {\n\t\t\treturn word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n\t\t},\n\n\t\t/**\n\t\t * Return the mimetype based on the first 4 byte\n\t\t *\n\t\t * @param {Uint8Array} uint content\n\t\t * @return {string} the mimetype\n\t\t */\n\t\tgetMimetype(uint) {\n\t\t\tconst bytes = []\n\t\t\tuint.slice(0, 12).forEach((byte) => {\n\t\t\t\tbytes.push(byte.toString(16).padStart(2, '0'))\n\t\t\t})\n\t\t\tconst hex = bytes.join('').toUpperCase()\n\n\t\t\tconst nextcloudMajorVersion = parseInt(window.OC.config.version.split('.')[0])\n\t\t\tif (nextcloudMajorVersion >= 31\n\t\t\t\t&& hex.slice(0, 8) === '52494646'\n\t\t\t\t&& hex.slice(16, 24) === '57454250'\n\t\t\t) {\n\t\t\t\treturn 'image/webp'\n\t\t\t}\n\n\t\t\tif (nextcloudMajorVersion >= 32 && hex.slice(8, 24) === '6674797061766966') {\n\t\t\t\treturn 'image/avif'\n\t\t\t}\n\n\t\t\tswitch (hex.slice(0, 8)) {\n\t\t\t\tcase '89504E47':\n\t\t\t\t\treturn 'image/png'\n\t\t\t\tcase '47494638':\n\t\t\t\t\treturn 'image/gif'\n\t\t\t\tcase '3C3F786D':\n\t\t\t\tcase '3C737667':\n\t\t\t\t\treturn 'image/svg+xml'\n\t\t\t\tcase 'FFD8FFDB':\n\t\t\t\tcase 'FFD8FFE0':\n\t\t\t\tcase 'FFD8FFE1':\n\t\t\t\t\treturn 'image/jpeg'\n\t\t\t\tdefault:\n\t\t\t\t\treturn 'application/octet-stream'\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update the contact photo\n\t\t *\n\t\t * @param {string} data the photo as base64 binary string\n\t\t * @param {string} type mimetype\n\t\t */\n\t\tasync setPhoto(data, type) {\n\t\t\t// Init with empty data\n\t\t\tif (this.contact.photo) {\n\t\t\t\tthis.contact.vCard.addPropertyWithValue('photo', '')\n\t\t\t}\n\n\t\t\t// Vcard 3 and 4 have different syntax\n\t\t\t// https://tools.ietf.org/html/rfc2426#page-11\n\t\t\tif (this.contact.version === '3.0') {\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\tthis.contact.photo = data\n\n\t\t\t\tconst photo = this.contact.vCard.getFirstProperty('photo')\n\t\t\t\tphoto.setParameter('encoding', 'b')\n\t\t\t\tif (type) {\n\t\t\t\t\tphoto.setParameter('type', type.split('/').pop())\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// https://tools.ietf.org/html/rfc6350#section-6.2.4\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\tthis.contact.photo = `data:${type};base64,${data}`\n\t\t\t}\n\n\t\t\tawait this.loadPhotoUrl()\n\n\t\t\tawait this.reloadBus.emit('reload-avatar', this.contact.key)\n\n\t\t\tthis.loading = false\n\t\t},\n\n\t\tasync loadPhotoUrl() {\n\t\t\tthis.photoUrl = undefined\n\t\t\tif (this.contact.photo) {\n\t\t\t\tconst photoUrl = await this.contact.getPhotoUrl()\n\t\t\t\tif (!photoUrl) {\n\t\t\t\t\tconsole.warn('contact has an invalid photo')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.photoUrl = photoUrl\n\t\t\t} else if (this.contact.url) {\n\t\t\t\tthis.photoUrl = `${this.contact.url}?photo`\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Save the cropped image\n\t\t */\n\t\tsaveAvatar() {\n\t\t\tthis.showCropper = false\n\t\t\tthis.loading = true\n\n\t\t\tthis.$refs.cropper.getCroppedCanvas({\n\t\t\t\tminWidth: 16,\n\t\t\t\tminHeight: 16,\n\t\t\t\tmaxWidth: 512,\n\t\t\t\tmaxHeight: 512,\n\t\t\t}).toBlob(async (blob) => {\n\t\t\t\tif (blob === null) {\n\t\t\t\t\tshowError(t('contacts', 'Error cropping picture'))\n\t\t\t\t\tthis.cancel()\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.readAsDataURL(blob)\n\t\t\t\treader.onloadend = () => {\n\t\t\t\t\tconst base64data = reader.result\n\t\t\t\t\tthis.setPhoto(base64data.split(',').pop(), blob.type)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Remove the contact's picture\n\t\t */\n\t\tremovePhoto() {\n\t\t\tthis.contact.vCard.removeAllProperties('photo')\n\t\t\t// somehow the avatarUrl is not unavailable immediately, so we just set undefined\n\t\t\tthis.photoUrl = undefined\n\t\t\tthis.reloadBus.emit('delete-avatar', this.contact.key)\n\t\t},\n\n\t\t/**\n\t\t * Cancel cropping\n\t\t */\n\t\tcancel() {\n\t\t\tthis.showCropper = false\n\t\t\tthis.loading = false\n\t\t},\n\n\t\t/**\n\t\t * Picker handlers Upload\n\t\t */\n\t\tselectFileInput() {\n\t\t\tif (!this.loading) {\n\t\t\t\tthis.$refs.uploadInput.click()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Picker handlers from Files\n\t\t */\n\t\tasync selectFilePicker() {\n\t\t\tif (!this.loading) {\n\t\t\t\tthis.closeMenu()\n\n\t\t\t\tconst picker = getFilePickerBuilder(t('contacts', 'Pick an avatar'))\n\t\t\t\t\t.setMimeTypeFilter([\n\t\t\t\t\t\t'image/png',\n\t\t\t\t\t\t'image/jpeg',\n\t\t\t\t\t\t'image/gif',\n\t\t\t\t\t\t'image/x-xbitmap',\n\t\t\t\t\t\t'image/bmp',\n\t\t\t\t\t\t'image/svg+xml',\n\t\t\t\t\t]).addButton({\n\t\t\t\t\t\tlabel: t('calendar', 'Pick'),\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t\tcallback: (nodes) => logger.debug('Picked avatar', { nodes }),\n\t\t\t\t\t})\n\t\t\t\t\t.build()\n\n\t\t\t\tconst file = await picker.pick()\n\n\t\t\t\tif (file) {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst response = await axios.get(`${this.root}${file}`, {\n\t\t\t\t\t\t\tresponseType: 'arraybuffer',\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tconst data = Buffer.from(response.data, 'binary')\n\n\t\t\t\t\t\tthis.processPicture(data)\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tshowError(t('contacts', 'Error while processing the picture.'))\n\t\t\t\t\t\tconsole.error(error)\n\t\t\t\t\t\tthis.loading = false\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.resetPicker()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Downloads the Avatar from social media\n\t\t *\n\t\t * @param {string} network the social network to use (or 'any' for first match)\n\t\t */\n\t\tasync getSocialAvatar(network) {\n\t\t\tif (!this.loading) {\n\t\t\t\tthis.loading = true\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await axios.put(generateUrl('/apps/contacts/api/v1/social/avatar/{network}/{id}/{uid}', {\n\t\t\t\t\t\tnetwork: network.toLowerCase(),\n\t\t\t\t\t\tid: this.contact.addressbook.id,\n\t\t\t\t\t\tuid: this.contact.uid,\n\t\t\t\t\t}))\n\t\t\t\t\tif (response?.status !== 200) {\n\t\t\t\t\t\tthrow new URIError('Download of social profile avatar failed')\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fetch newly updated contact\n\t\t\t\t\tawait this.$store.dispatch('fetchFullContact', { contact: this.contact, forceReFetch: true })\n\n\t\t\t\t\t// Update local clone\n\t\t\t\t\tconst contact = this.$store.getters.getContact(this.contact.key)\n\t\t\t\t\tawait this.$emit('update-local-contact', contact)\n\n\t\t\t\t\tawait this.loadPhotoUrl()\n\n\t\t\t\t\tawait this.reloadBus.emit('reload-avatar', this.contact.key)\n\n\t\t\t\t\t// Notify user\n\t\t\t\t\tshowSuccess(t('contacts', 'Avatar downloaded from social network'))\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (error?.response?.status === 304) {\n\t\t\t\t\t\tshowInfo(t('contacts', 'Avatar already up to date'))\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowError(t('contacts', 'Avatar download failed'))\n\t\t\t\t\t\tconsole.debug(error)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.loading = false\n\t\t},\n\n\t\tcloseMenu() {\n\t\t\tthis.opened = false\n\t\t},\n\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.avatar {\n\t&__container {\n\t\tmargin: 0 auto;\n\t\tpadding: 24px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tgap: 16px 0;\n\t\twidth: 300px;\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\twidth: 180px;\n\t\theight: 180px;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tgap: 0 10px;\n\t}\n\n\t&__cropper {\n\t\toverflow: hidden;\n\n\t\t&-buttons {\n\t\t\twidth: 100%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t}\n\n\t\t&:deep(.cropper-view-box) {\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n}\n\n.contact-header-avatar {\n\t// Wrap and cut\n\t&__wrapper {\n\t\tposition: relative;\n\t\twidth: var(--avatar-size);\n\t\theight: var(--avatar-size);\n\t}\n\t&__background {\n\t\tz-index: 0;\n\t\ttop: 50px;\n\t\tinset-inline-start: 0;\n\t\topacity: .2;\n\t}\n\n\t&__photo,\n\t&__menu {\n\t\toverflow: hidden;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tborder-radius: unset !important;\n\t\tbackground-color: unset !important;\n\t\tbox-shadow: none !important;\n\t}\n\n\t&__photo {\n\t\tz-index: 10;\n\t\tcursor: pointer;\n\t\t// White background for avatars with transparency, also in dark theme\n\t\tbackground-color: #fff;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t\tbackground-size: cover;\n\t}\n\n\t&__menu {\n\t\tz-index: 11;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tbackground-color: rgba(0, 0, 0, .2);\n\t\t// Always show max opacity, let the background-color be the visual cue\n\t\t&:deep(.action-item__menutoggle) {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t// Move the menu in the bottom right if there is a picture already\n\t&__photo + &__menu {\n\t\tposition: absolute !important;\n\t\t// bottom right\n\t\ttop: 100%;\n\t\tinset-inline-start: 100%;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tmargin: -50%;\n\t\t&:deep {\n\t\t\t.action-item__menutoggle {\n\t\t\t\topacity: .7;\n\t\t\t\tbackground-color: rgba(0, 0, 0, .2);\n\t\t\t}\n\t\t\t&.action-item--open .action-item__menutoggle,\n\t\t\t.action-item__menutoggle:hover,\n\t\t\t.action-item__menutoggle:active,\n\t\t\t.action-item__menutoggle:focus {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.contact-header-modal {\n\t// We use this nesting of containers and max/width-height\n\t// to make automatically contain the image.\n\t// Because of that, we now fill the modal-container,\n\t// so we need to watch for click on the photo-wrapper to\n\t// close on image click outside.\n\t&:deep(.modal-container) {\n\t\tbackground-color: transparent;\n\t\tbox-shadow: none;\n\n\t\t&,\n\t\t.contact-header-modal__photo-wrapper {\n\t\t\t// center and align nested containers & image\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.contact-header-modal__photo-wrapper {\n\t\t\t// contain image\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\t.contact-header-modal__photo {\n\t\t\t// preserve ratio\n\t\t\tmax-width: 100%;\n\t\t\tmax-height: 100%;\n\t\t\t// animate zooming/resize\n\t\t\ttransition: height 100ms ease,\n\t\t\t\twidth 100ms ease;\n\t\t\tborder-radius: var(--border-radius-large);\n\t\t\t// make sure transparent images are visible\n\t\t\tbackground-color: white;\n\t\t}\n\t}\n}\n\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<!-- contact header -->\n\t<header class=\"contact-header\" :style=\"cssStyle\">\n\t\t<div class=\"contact-header__no-wrap\">\n\t\t\t<div class=\"contact-header__avatar\">\n\t\t\t\t<slot name=\"avatar\" :avatar-size=\"avatarSize\" />\n\t\t\t</div>\n\n\t\t\t<!-- fullname, org, title -->\n\t\t\t<div class=\"contact-header__infos\">\n\t\t\t\t<h2 class=\"contact-header__infos-title\">\n\t\t\t\t\t<slot name=\"title\" />\n\t\t\t\t</h2>\n\t\t\t\t<div v-if=\"$slots.subtitle\" class=\"contact-header__infos-subtitle\">\n\t\t\t\t\t<slot name=\"subtitle\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"contact-header__quick-actions\">\n\t\t\t\t\t<slot name=\"quick-actions\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- actions -->\n\t\t<div class=\"contact-header__actions\">\n\t\t\t<slot name=\"actions\" />\n\n\t\t\t<!-- menu actions -->\n\t\t\t<Actions\n\t\t\t\tref=\"actions\"\n\t\t\t\tclass=\"header-menu\"\n\t\t\t\tmenu-align=\"right\"\n\t\t\t\tv-bind=\"$attrs\">\n\t\t\t\t<slot name=\"actions-menu\" />\n\t\t\t</Actions>\n\t\t</div>\n\t</header>\n</template>\n\n<script>\nimport { NcActions as Actions } from '@nextcloud/vue'\n\nexport default {\n\tname: 'DetailsHeader',\n\n\tcomponents: {\n\t\tActions,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tavatarSize: 75,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcssStyle() {\n\t\t\treturn {\n\t\t\t\t'--avatar-size': this.avatarSize + 'px',\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../css/ContactDetailsLayout';\n\n$top-padding: 50px;\n\n// Header with avatar, name, position, actions...\n.contact-header {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: wrap;\n\tpadding: $top-padding 0 20px;\n\tgap: $contact-details-row-gap;\n\t&__quick-actions{\n\t\tpadding: 5px 0;\n\t}\n\n\t@media (max-width: 1024px) {\n\t\t// Top padding of 44px is already included in AppContent by default on mobile\n\t\tpadding-top: calc($top-padding - 44px);\n\t\t&__no-wrap {\n\t\t\twidth: 100%;\n\t\t}\n\t\t&__actions .header-menu {\n\t\t\tmargin-inline-start: auto;\n\t\t}\n\t\t&__avatar {\n\t\t\twidth: 150px !important;\n\t\t}\n\t}\n\n\t&__no-wrap {\n\t\tdisplay: flex;\n\t\tgap: $contact-details-row-gap;\n\t\talign-items: center;\n\t\tmin-width: 0;\n\t}\n\n\t// AVATAR\n\t&__avatar {\n\t\t// Global single column layout\n\t\tdisplay: flex;\n\t\tflex: 0 1 auto;\n\t\tjustify-content: flex-end;\n\t\twidth: $contact-details-label-max-width;\n\t\tmin-width: 0; // Has to be zero unless we implement wrapping\n\t}\n\n\t// ORG-TITLE-NAME\n\t&__infos {\n\t\tflex-direction: column;\n\n\t\t// Global single column layout\n\t\tdisplay: flex;\n\t\tflex: 0 1 auto;\n\t\twidth: $contact-details-value-max-width;\n\t\tmin-width: 0; // Has to be zero unless we implement wrapping\n\n\t\t&-title,\n\t\t&-subtitle {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t&__quick-actions {\n\t\t\tpadding: 5px 0;\n\t\t}\n\n\t\t:deep(input) {\n\t\t\tflex: 1 auto;\n\t\t}\n\n\t\t&-title :deep(input) {\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t&-subtitle:placeholder-shown {\n\t\t\tmax-width: 20%;\n\t\t}\n\t}\n\n\t// ACTIONS\n\t&__actions {\n\t\tdisplay: flex;\n\t\tflex: 1 0 auto;\n\t\tgap: 5px;\n\t}\n}\n</style>\n","'use strict';\n\nconst defaultAlphabetIndexMap = [];\n\nfunction isNumberCode(code) {\n return code >= 48/* '0' */ && code <= 57/* '9' */;\n}\n\nfunction naturalCompare(a, b, opts) {\n if (typeof a !== 'string') {\n throw new TypeError(`The first argument must be a string. Received type '${typeof a}'`);\n }\n if (typeof b !== 'string') {\n throw new TypeError(`The second argument must be a string. Received type '${typeof b}'`);\n }\n\n const lengthA = a.length;\n const lengthB = b.length;\n let indexA = 0;\n let indexB = 0;\n let alphabetIndexMap = defaultAlphabetIndexMap;\n let firstDifferenceInLeadingZeros = 0;\n\n if (opts) {\n if (opts.caseInsensitive) {\n a = a.toLowerCase();\n b = b.toLowerCase();\n }\n\n if (opts.alphabet) {\n alphabetIndexMap = buildAlphabetIndexMap(opts.alphabet);\n }\n }\n\n while (indexA < lengthA && indexB < lengthB) {\n let charCodeA = a.charCodeAt(indexA);\n let charCodeB = b.charCodeAt(indexB);\n\n if (isNumberCode(charCodeA)) {\n if (!isNumberCode(charCodeB)) {\n return charCodeA - charCodeB;\n }\n\n let numStartA = indexA;\n let numStartB = indexB;\n\n while (charCodeA === 48/* '0' */ && ++numStartA < lengthA) {\n charCodeA = a.charCodeAt(numStartA);\n }\n while (charCodeB === 48/* '0' */ && ++numStartB < lengthB) {\n charCodeB = b.charCodeAt(numStartB);\n }\n\n if (numStartA !== numStartB && firstDifferenceInLeadingZeros === 0) {\n firstDifferenceInLeadingZeros = numStartA - numStartB;\n }\n\n let numEndA = numStartA;\n let numEndB = numStartB;\n\n while (numEndA < lengthA && isNumberCode(a.charCodeAt(numEndA))) {\n ++numEndA;\n }\n while (numEndB < lengthB && isNumberCode(b.charCodeAt(numEndB))) {\n ++numEndB;\n }\n\n let difference = numEndA - numStartA - numEndB + numStartB; // numA length - numB length\n if (difference !== 0) {\n return difference;\n }\n\n while (numStartA < numEndA) {\n difference = a.charCodeAt(numStartA++) - b.charCodeAt(numStartB++);\n if (difference !== 0) {\n return difference;\n }\n }\n\n indexA = numEndA;\n indexB = numEndB;\n continue;\n }\n\n if (charCodeA !== charCodeB) {\n if (\n charCodeA < alphabetIndexMap.length &&\n charCodeB < alphabetIndexMap.length &&\n alphabetIndexMap[charCodeA] !== -1 &&\n alphabetIndexMap[charCodeB] !== -1\n ) {\n return alphabetIndexMap[charCodeA] - alphabetIndexMap[charCodeB];\n }\n\n return charCodeA - charCodeB;\n }\n\n ++indexA;\n ++indexB;\n }\n\n if (indexA < lengthA) { // `b` is a substring of `a`\n return 1;\n }\n\n if (indexB < lengthB) { // `a` is a substring of `b`\n return -1;\n }\n\n return firstDifferenceInLeadingZeros;\n}\n\nconst alphabetIndexMapCache = {};\n\nfunction buildAlphabetIndexMap(alphabet) {\n const existingMap = alphabetIndexMapCache[alphabet];\n if (existingMap !== undefined) {\n return existingMap;\n }\n\n const indexMap = [];\n const maxCharCode = alphabet.split('').reduce((maxCode, char) => {\n return Math.max(maxCode, char.charCodeAt(0));\n }, 0);\n\n for (let i = 0; i <= maxCharCode; i++) {\n indexMap.push(-1);\n }\n\n for (let i = 0; i < alphabet.length; i++) {\n indexMap[alphabet.charCodeAt(i)] = i;\n }\n\n alphabetIndexMapCache[alphabet] = indexMap;\n\n return indexMap;\n}\n\nmodule.exports = naturalCompare;\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div v-if=\"propModel && showProperty\" class=\"property\">\n\t\t<PropertyTitle\n\t\t\ticon=\"icon-contacts-dark\"\n\t\t\t:readable-name=\"t('contacts', 'Contact groups')\"\n\t\t\t:is-read-only=\"isReadOnly\" />\n\n\t\t<div class=\"property__row\">\n\t\t\t<div class=\"property__label\">\n\t\t\t\t<span>{{ propModel.readableName }}</span>\n\t\t\t</div>\n\n\t\t\t<!-- multiselect taggable groups -->\n\t\t\t<div class=\"property__value\">\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-if=\"!isReadOnly\"\n\t\t\t\t\tv-model=\"localValue\"\n\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t:no-wrap=\"true\"\n\t\t\t\t\t:placeholder=\"t('contacts', 'Add contact in group')\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:keep-open=\"true\"\n\t\t\t\t\t:clearable=\"true\"\n\t\t\t\t\t:deselect-from-dropdown=\"true\"\n\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t@option:deselected=\"updateValue\"\n\t\t\t\t\t@close=\"updateValue\">\n\t\t\t\t\t<!-- show how many groups are hidden and add tooltip -->\n\t\t\t\t\t<template #limit>\n\t\t\t\t\t\t<span v-tooltip.auto=\"formatGroupsTitle\" class=\"multiselect__limit\">\n\t\t\t\t\t\t\t+{{ localValue.length - 3 }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template #no-options>\n\t\t\t\t\t\t<span>{{ t('contacts', 'No results') }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t</NcSelect>\n\t\t\t\t<div v-else>\n\t\t\t\t\t<span v-if=\"localValue.length === 0\">{{ t('contacts', 'None') }}</span>\n\n\t\t\t\t\t<div v-else class=\"group__list\">\n\t\t\t\t\t\t<span v-for=\"(group, index) in localValue\" :key=\"index\">\n\t\t\t\t\t\t\t{{ group }}{{ index === (localValue.length - 1) ? '' : ',&nbsp;' }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- empty actions to keep the layout -->\n\t\t\t<div class=\"property__actions\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { NcSelect } from '@nextcloud/vue'\nimport naturalCompare from 'string-natural-compare'\nimport PropertyTitle from './PropertyTitle.vue'\nimport Contact from '../../models/contact.js'\n\nexport default {\n\tname: 'PropertyGroups',\n\n\tcomponents: {\n\t\tPropertyTitle,\n\t\tNcSelect,\n\t},\n\n\tprops: {\n\t\tpropModel: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tvalue: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\n\t\tcontact: {\n\t\t\ttype: Contact,\n\t\t\trequired: true,\n\t\t},\n\n\t\t// Is it read-only?\n\t\tisReadOnly: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlocalValue: [...this.value].sort(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshowAsText() {\n\t\t\treturn this.isReadOnly && this.localValue.length <= 1\n\t\t},\n\n\t\tshowProperty() {\n\t\t\treturn (this.isReadOnly && this.localValue.length > 0) || !this.isReadOnly\n\t\t},\n\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups.slice(0).map((group) => group.name)\n\t\t\t\t.sort((a, b) => naturalCompare(a, b, { caseInsensitive: true }))\n\t\t},\n\n\t\t/**\n\t\t * Format array of groups objects to a string for the popup\n\t\t * Based on the ultiselect limit\n\t\t *\n\t\t * @return {string} the additional groups\n\t\t */\n\t\tformatGroupsTitle() {\n\t\t\treturn this.localValue.slice(3).join(', ')\n\t\t},\n\n\t},\n\n\twatch: {\n\t\t/**\n\t\t * Since we're updating a local data based on the value prop,\n\t\t * we need to make sure to update the local data on pop change\n\t\t * TODO: check if this create performance drop\n\t\t */\n\t\tvalue() {\n\t\t\tthis.localValue = this.value\n\t\t},\n\n\t\tselectType() {\n\t\t\tthis.localType = this.selectType\n\t\t},\n\t},\n\n\tmethods: {\n\n\t\t/**\n\t\t * Send update event to parent\n\t\t */\n\t\tupdateValue() {\n\t\t\tthis.$emit('update:value', this.localValue)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.group__list {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"property property--rev\">\n\t\t<div class=\"property__row\">\n\t\t\t<div class=\"property__label\" />\n\n\t\t\t<div class=\"property__value\">\n\t\t\t\t{{ t('contacts', 'Last modified') }} {{ relativeDate }}\n\t\t\t</div>\n\n\t\t\t<div class=\"property__actions\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport moment from '@nextcloud/moment'\nimport { toRaw } from 'vue'\n\nexport default {\n\tname: 'PropertyRev',\n\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\trelativeDate() {\n\t\t\t// Need to unwrap the proxy here due to ical.js comparing the time zone to a static\n\t\t\t// value (which will never match the proxied object)\n\t\t\treturn moment.unix(toRaw(this.value).toUnixTime()).fromNow()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.property {\n\t&__value {\n\t\topacity: .5;\n\t\tcolor: var(--color-text-lighter);\n\t\tline-height: 44px;\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nconst isTalkEnabled = loadState('contacts', 'isTalkEnabled', false)\nexport default isTalkEnabled\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<AppContentDetails>\n\t\t<!-- nothing selected or contact not found -->\n\t\t<EmptyContent\n\t\t\tv-if=\"!contact\"\n\t\t\tclass=\"empty-content\"\n\t\t\t:name=\"t('contacts', 'No contact selected')\"\n\t\t\t:description=\"t('contacts', 'Select a contact on the list to begin')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconContact :size=\"20\" />\n\t\t\t</template>\n\t\t</EmptyContent>\n\n\t\t<!-- TODO: add empty content while this.loadingData === true -->\n\t\t<template v-else>\n\t\t\t<!-- contact header -->\n\t\t\t<DetailsHeader>\n\t\t\t\t<!-- avatar and upload photo -->\n\t\t\t\t<template #avatar>\n\t\t\t\t\t<ContactAvatar\n\t\t\t\t\t\t:contact=\"contact\"\n\t\t\t\t\t\t:is-read-only=\"isReadOnly\"\n\t\t\t\t\t\t:reload-bus=\"reloadBus\"\n\t\t\t\t\t\t@update-local-contact=\"updateLocalContact\" />\n\t\t\t\t</template>\n\n\t\t\t\t<!-- fullname -->\n\t\t\t\t<template #title>\n\t\t\t\t\t<div v-if=\"isReadOnly\" class=\"contact-title\">\n\t\t\t\t\t\t{{ contact.fullName }}\n\t\t\t\t\t</div>\n\t\t\t\t\t<input\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\tid=\"contact-fullname\"\n\t\t\t\t\t\tref=\"fullname\"\n\t\t\t\t\t\tv-model=\"contact.fullName\"\n\t\t\t\t\t\t:placeholder=\"t('contacts', 'Name')\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\t\tname=\"fullname\"\n\t\t\t\t\t\t@click=\"selectInput\">\n\t\t\t\t</template>\n\n\t\t\t\t<!-- org, title -->\n\t\t\t\t<template #subtitle>\n\t\t\t\t\t<template v-if=\"isReadOnly\">\n\t\t\t\t\t\t<span v-html=\"formattedSubtitle\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tid=\"contact-title\"\n\t\t\t\t\t\t\tv-model=\"contact.title\"\n\t\t\t\t\t\t\t:placeholder=\"t('contacts', 'Title')\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\t\t\tname=\"title\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tid=\"contact-org\"\n\t\t\t\t\t\t\tv-model=\"contact.org\"\n\t\t\t\t\t\t\t:placeholder=\"t('contacts', 'Company')\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\t\t\tname=\"org\">\n\t\t\t\t\t</template>\n\t\t\t\t</template>\n\n\t\t\t\t<template #quick-actions>\n\t\t\t\t\t<div v-if=\"!editMode && !loadingData\">\n\t\t\t\t\t\t<Actions\n\t\t\t\t\t\t\t:inline=\"6\"\n\t\t\t\t\t\t\tvariant=\"secondary\">\n\t\t\t\t\t\t\t<ActionButton\n\t\t\t\t\t\t\t\tv-if=\"isTalkEnabled && isInSystemAddressBook\"\n\t\t\t\t\t\t\t\t:aria-label=\"t('contacts', 'Go to talk conversation')\"\n\t\t\t\t\t\t\t\t:name=\"t('contacts', 'Go to talk conversation')\"\n\t\t\t\t\t\t\t\tclass=\"icon-talk quick-action\"\n\t\t\t\t\t\t\t\t:href=\"callUrl\" />\n\t\t\t\t\t\t\t<ActionButton\n\t\t\t\t\t\t\t\tv-if=\"profilePageLink\"\n\t\t\t\t\t\t\t\tclass=\"quick-action\"\n\t\t\t\t\t\t\t\t:aria-label=\"t('contacts', 'View profile')\"\n\t\t\t\t\t\t\t\t:name=\"t('contacts', 'View profile')\"\n\t\t\t\t\t\t\t\t:href=\"profilePageLink\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<IconAccount :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t\t\t<ActionLink\n\t\t\t\t\t\t\t\tv-for=\"emailAddress in emailAddressList\"\n\t\t\t\t\t\t\t\t:key=\"emailAddress\"\n\t\t\t\t\t\t\t\tclass=\"quick-action\"\n\t\t\t\t\t\t\t\t:href=\"'mailto:' + emailAddress\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<IconMail :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t{{ emailAddress }}\n\t\t\t\t\t\t\t</ActionLink>\n\t\t\t\t\t\t\t<ActionLink\n\t\t\t\t\t\t\t\tv-for=\"phoneNumber in phoneNumberList\"\n\t\t\t\t\t\t\t\t:key=\"phoneNumber\"\n\t\t\t\t\t\t\t\tclass=\"quick-action\"\n\t\t\t\t\t\t\t\t:href=\"'tel:' + phoneNumber\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<IconCall :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t{{ phoneNumber }}\n\t\t\t\t\t\t\t</ActionLink>\n\t\t\t\t\t\t</Actions>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<!-- actions -->\n\t\t\t\t<template #actions>\n\t\t\t\t\t<!-- warning message -->\n\t\t\t\t\t<component\n\t\t\t\t\t\t:is=\"warning.icon\"\n\t\t\t\t\t\tv-if=\"warning\"\n\t\t\t\t\t\t:title=\"warning ? warning.msg : ''\"\n\t\t\t\t\t\tclass=\"header-icon\"\n\t\t\t\t\t\t:classes=\"warning.classes\" />\n\n\t\t\t\t\t<!-- conflict message -->\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"conflict\"\n\t\t\t\t\t\t:title=\"conflict\"\n\t\t\t\t\t\tclass=\"header-icon header-icon--pulse icon-history\"\n\t\t\t\t\t\t@click=\"refreshContact\" />\n\n\t\t\t\t\t<!-- repaired contact message -->\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"fixed\"\n\t\t\t\t\t\t:title=\"t('contacts', 'This contact was broken and received a fix. Please review the content and click here to save it.')\"\n\t\t\t\t\t\tclass=\"header-icon header-icon--pulse icon-up\"\n\t\t\t\t\t\t@click=\"updateContact\" />\n\n\t\t\t\t\t<!-- edit and save buttons -->\n\t\t\t\t\t<template v-if=\"canModifyCard\">\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tv-if=\"!editMode\"\n\t\t\t\t\t\t\t:variant=\"isMobile ? 'secondary' : 'tertiary'\"\n\t\t\t\t\t\t\t@click=\"editMode = true\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<PencilIcon :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('contacts', 'Edit') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t:disabled=\"loadingUpdate || !isDataValid\"\n\t\t\t\t\t\t\t@click=\"onSave\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconLoading v-if=\"loadingUpdate\" :size=\"20\" />\n\t\t\t\t\t\t\t\t<CheckIcon v-else :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('contacts', 'Save') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</template>\n\t\t\t\t</template>\n\t\t\t\t<!-- menu actions -->\n\t\t\t\t<template #actions-menu>\n\t\t\t\t\t<ActionLink\n\t\t\t\t\t\t:href=\"contact.url\"\n\t\t\t\t\t\t:download=\"`${contact.displayName}.vcf`\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDownload :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('contacts', 'Download') }}\n\t\t\t\t\t</ActionLink>\n\t\t\t\t\t<!-- user can clone if there is at least one option available -->\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\tv-if=\"isReadOnly && addressbooksOptions.length > 0\"\n\t\t\t\t\t\tref=\"cloneAction\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t@click=\"cloneContact\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconCopy :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('contacts', 'Clone contact') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton :close-after-click=\"true\" @click=\"showQRcode\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconQr :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('contacts', 'Generate QR Code') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\tv-if=\"enableToggleBirthdayExclusion\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t@click=\"toggleBirthdayExclusionForContact\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<CakeIcon :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ excludeFromBirthdayLabel }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\tv-if=\"canDeleteCard\"\n\t\t\t\t\t\t@click=\"deleteContact\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('contacts', 'Delete') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</template>\n\t\t\t</DetailsHeader>\n\n\t\t\t<!-- qrcode -->\n\t\t\t<Modal\n\t\t\t\tv-if=\"qrcode\"\n\t\t\t\tid=\"qrcode-modal\"\n\t\t\t\tsize=\"small\"\n\t\t\t\t:clear-view-delay=\"-1\"\n\t\t\t\t:name=\"contact.displayName\"\n\t\t\t\t:close-button-contained=\"false\"\n\t\t\t\t@close=\"closeQrModal\">\n\t\t\t\t<img\n\t\t\t\t\t:src=\"`data:image/svg+xml;base64,${qrcode}`\"\n\t\t\t\t\t:alt=\"t('contacts', 'Contact vCard as QR code')\"\n\t\t\t\t\tclass=\"qrcode\"\n\t\t\t\t\twidth=\"400\">\n\t\t\t</Modal>\n\n\t\t\t<!-- pick addressbook when cloning contact -->\n\t\t\t<Modal\n\t\t\t\tv-if=\"showPickAddressbookModal\"\n\t\t\t\tid=\"pick-addressbook-modal\"\n\t\t\t\t:clear-view-delay=\"-1\"\n\t\t\t\t:name=\"t('contacts', 'Pick an address book')\"\n\t\t\t\t@close=\"closePickAddressbookModal\">\n\t\t\t\t<NcSelect\n\t\t\t\t\tref=\"pickAddressbook\"\n\t\t\t\t\tv-model=\"pickedAddressbook\"\n\t\t\t\t\tclass=\"address-book\"\n\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t:options=\"copyableAddressbooksOptions\"\n\t\t\t\t\t:placeholder=\"t('contacts', 'Select address book')\"\n\t\t\t\t\tlabel=\"name\" />\n\t\t\t\t<button @click=\"closePickAddressbookModal\">\n\t\t\t\t\t{{ t('contacts', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<button class=\"primary\" @click=\"cloneContact\">\n\t\t\t\t\t{{ t('contacts', 'Clone contact') }}\n\t\t\t\t</button>\n\t\t\t</Modal>\n\n\t\t\t<!-- contact details loading -->\n\t\t\t<IconLoading v-if=\"loadingData\" :size=\"20\" class=\"contact-details\" />\n\t\t\t<!-- quick actions -->\n\t\t\t<div v-else-if=\"!loadingData\" class=\"contact-details-wrapper\" :class=\"[{ 'contact-details-wrapper-read-only': isReadOnly }]\">\n\t\t\t\t<!-- contact details -->\n\t\t\t\t<section class=\"contact-details\">\n\t\t\t\t\t<!-- properties iteration -->\n\t\t\t\t\t<!-- using contact.key in the key and index as key to avoid conflicts between similar data and exact key -->\n\n\t\t\t\t\t<!-- Special handling for lifeEvents -->\n\t\t\t\t\t<div v-if=\"name === 'lifeEvents'\" class=\"life-events-group\">\n\t\t\t\t\t\t<ContactDetailsProperty\n\t\t\t\t\t\t\tv-for=\"(property, index) in properties\"\n\t\t\t\t\t\t\t:key=\"`${index}-${contact.key}-${property.name}`\"\n\t\t\t\t\t\t\t:is-first-property=\"index === 0\"\n\t\t\t\t\t\t\t:is-last-property=\"index === properties.length - 1\"\n\t\t\t\t\t\t\t:property=\"property\"\n\t\t\t\t\t\t\t:contact=\"contact\"\n\t\t\t\t\t\t\t:local-contact=\"localContact\"\n\t\t\t\t\t\t\t:contacts=\"contacts\"\n\t\t\t\t\t\t\t:bus=\"bus\"\n\t\t\t\t\t\t\t:is-read-only=\"isReadOnly\" />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-for=\"(properties, name) in groupedProperties\"\n\t\t\t\t\t\t:key=\"name\">\n\t\t\t\t\t\t<ContactDetailsProperty\n\t\t\t\t\t\t\tv-for=\"(property, index) in properties\"\n\t\t\t\t\t\t\t:key=\"`${index}-${contact.key}-${property.name}`\"\n\t\t\t\t\t\t\t:is-first-property=\"index === 0\"\n\t\t\t\t\t\t\t:is-last-property=\"index === properties.length - 1\"\n\t\t\t\t\t\t\t:property=\"property\"\n\t\t\t\t\t\t\t:contact=\"contact\"\n\t\t\t\t\t\t\t:local-contact=\"localContact\"\n\t\t\t\t\t\t\t:contacts=\"contacts\"\n\t\t\t\t\t\t\t:bus=\"bus\"\n\t\t\t\t\t\t\t:is-read-only=\"isReadOnly\" />\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\n\t\t\t\t<!-- addressbook change select - no last property because class is not applied here,\n\t\t\t\t\tempty property because this is a required prop on regular property-select. But since\n\t\t\t\t\twe are hijacking this... (this is supposed to be used with a ICAL.property, but to avoid code\n\t\t\t\t\tduplication, we created a fake propModel and property with our own options here) -->\n\t\t\t\t<PropertySelect\n\t\t\t\t\t:prop-model=\"addressbookModel\"\n\t\t\t\t\t:options=\"addressbooksOptions\"\n\t\t\t\t\t:value=\"addressbook\"\n\t\t\t\t\t:is-first-property=\"true\"\n\t\t\t\t\t:is-last-property=\"true\"\n\t\t\t\t\t:property=\"{}\"\n\t\t\t\t\t:hide-actions=\"true\"\n\t\t\t\t\t:is-read-only=\"isReadOnly\"\n\t\t\t\t\tclass=\"property--addressbooks property--last\"\n\t\t\t\t\t@update:value=\"updateAddressbook\" />\n\n\t\t\t\t<!-- Groups always visible -->\n\t\t\t\t<PropertyGroups\n\t\t\t\t\t:value=\"localContact.groups\"\n\t\t\t\t\t:prop-model=\"groupsModel\"\n\t\t\t\t\t:contact=\"contact\"\n\t\t\t\t\t:is-read-only=\"isReadOnly\"\n\t\t\t\t\tclass=\"property--groups property--last\"\n\t\t\t\t\t@update:value=\"updateGroups\" />\n\t\t\t</div>\n\t\t\t<div v-if=\"nextcloudVersionAtLeast28 && !editMode\" class=\"related-resources\">\n\t\t\t\t<NcRelatedResourcesPanel\n\t\t\t\t\tv-if=\"!filesPanelHasError\"\n\t\t\t\t\tprovider-id=\"account\"\n\t\t\t\t\tresource-type=\"files\"\n\t\t\t\t\t:description=\"desc\"\n\t\t\t\t\t:limit=\"5\"\n\t\t\t\t\t:header=\"t('contacts', 'Media shares with you')\"\n\t\t\t\t\t:item-id=\"contact.uid\"\n\t\t\t\t\t:primary=\"true\"\n\t\t\t\t\t@has-resources=\"value => hasFilesResources = value\"\n\t\t\t\t\t@has-error=\"value => filesPanelHasError = value\" />\n\t\t\t\t<NcRelatedResourcesPanel\n\t\t\t\t\tv-if=\"!talkPanelHasError\"\n\t\t\t\t\tprovider-id=\"account\"\n\t\t\t\t\tresource-type=\"talk\"\n\t\t\t\t\t:description=\"desc\"\n\t\t\t\t\t:limit=\"5\"\n\t\t\t\t\t:header=\"t('contacts', 'Talk conversations with you')\"\n\t\t\t\t\t:item-id=\"contact.uid\"\n\t\t\t\t\t:primary=\"true\"\n\t\t\t\t\t@has-resources=\"value => hasTalkResources = value\"\n\t\t\t\t\t@has-error=\"value => talkPanelHasError = value\" />\n\t\t\t\t<NcRelatedResourcesPanel\n\t\t\t\t\tv-if=\"!calendarPanelHasError\"\n\t\t\t\t\tprovider-id=\"account\"\n\t\t\t\t\tresource-type=\"calendar\"\n\t\t\t\t\t:description=\"desc\"\n\t\t\t\t\t:limit=\"5\"\n\t\t\t\t\t:header=\"t('contacts', 'Calendar events with you')\"\n\t\t\t\t\t:item-id=\"contact.uid\"\n\t\t\t\t\t:primary=\"true\"\n\t\t\t\t\t@has-resources=\"value => hasCalendarResources = value\"\n\t\t\t\t\t@has-error=\"value => calendarPanelHasError = value\" />\n\t\t\t\t<NcRelatedResourcesPanel\n\t\t\t\t\tv-if=\"!deckPanelHasError\"\n\t\t\t\t\tprovider-id=\"account\"\n\t\t\t\t\tresource-type=\"deck\"\n\t\t\t\t\t:description=\"desc\"\n\t\t\t\t\t:limit=\"5\"\n\t\t\t\t\t:header=\"t('contacts', 'Deck cards with you')\"\n\t\t\t\t\t:item-id=\"contact.uid\"\n\t\t\t\t\t:primary=\"true\"\n\t\t\t\t\t@has-resources=\"value => hasDeckResources = value\"\n\t\t\t\t\t@has-error=\"value => deckPanelHasError = value\" />\n\t\t\t\t<NcEmptyContent\n\t\t\t\t\tv-if=\"!hasRelatedResources && !loadingData\"\n\t\t\t\t\t:name=\"t('contacts', 'No shared items with this contact')\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<FolderMultipleImage :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t</div>\n\t\t\t<!-- new property select -->\n\t\t\t<AddNewProp\n\t\t\t\tv-if=\"!isReadOnly\"\n\t\t\t\tclass=\"last-edit\"\n\t\t\t\t:bus=\"bus\"\n\t\t\t\t:contact=\"contact\" />\n\n\t\t\t<!-- Last modified-->\n\t\t\t<PropertyRev v-if=\"contact.rev\" :value=\"contact.rev\" class=\"last-edit\" />\n\t\t</template>\n\t</AppContentDetails>\n</template>\n\n<script>\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { showError } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateUrl } from '@nextcloud/router'\nimport {\n\tNcActionButton as ActionButton,\n\tNcActionLink as ActionLink,\n\tNcActions as Actions,\n\tNcAppContentDetails as AppContentDetails,\n\tNcEmptyContent as EmptyContent,\n\tNcLoadingIcon as IconLoading,\n\tNcModal as Modal,\n\tNcButton,\n\tNcEmptyContent,\n\tNcRelatedResourcesPanel,\n\tNcSelect,\n} from '@nextcloud/vue'\nimport ICAL from 'ical.js'\nimport escape from 'lodash/fp/escape.js'\nimport mitt from 'mitt'\nimport { getSVG } from 'qreator/lib/svg'\nimport { defineComponent, reactive, toRaw } from 'vue'\nimport IconContact from 'vue-material-design-icons/AccountMultipleOutline.vue'\nimport IconAccount from 'vue-material-design-icons/AccountOutline.vue'\nimport CakeIcon from 'vue-material-design-icons/Cake.vue'\nimport CheckIcon from 'vue-material-design-icons/Check.vue'\nimport IconCopy from 'vue-material-design-icons/ContentCopy.vue'\nimport IconMail from 'vue-material-design-icons/EmailOutline.vue'\nimport EyeCircleIcon from 'vue-material-design-icons/EyeCircleOutline.vue'\nimport FolderMultipleImage from 'vue-material-design-icons/FolderMultipleImage.vue'\nimport IconMessage from 'vue-material-design-icons/MessageProcessingOutline.vue'\nimport PencilIcon from 'vue-material-design-icons/PencilOutline.vue'\nimport IconCall from 'vue-material-design-icons/PhoneOutline.vue'\nimport IconQr from 'vue-material-design-icons/Qrcode.vue'\nimport IconDelete from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconDownload from 'vue-material-design-icons/TrayArrowDown.vue'\nimport AddNewProp from './ContactDetails/ContactDetailsAddNewProp.vue'\nimport ContactAvatar from './ContactDetails/ContactDetailsAvatar.vue'\nimport ContactDetailsProperty from './ContactDetails/ContactDetailsProperty.vue'\nimport DetailsHeader from './DetailsHeader.vue'\nimport PropertyGroups from './Properties/PropertyGroups.vue'\nimport PropertyRev from './Properties/PropertyRev.vue'\nimport PropertySelect from './Properties/PropertySelect.vue'\nimport IsMobileMixin from '../mixins/IsMobileMixin.ts'\nimport rfcProps from '../models/rfcProps.js'\nimport isTalkEnabled from '../services/isTalkEnabled.js'\nimport validate from '../services/validate.js'\n\nconst { profileEnabled } = loadState('user_status', 'profileEnabled', false)\nconst browserStorage = getBuilder('contacts').persist().build()\n\nexport default defineComponent({\n\tname: 'ContactDetails',\n\n\tcomponents: {\n\t\tActions,\n\t\tActionButton,\n\t\tActionLink,\n\t\tAddNewProp,\n\t\tAppContentDetails,\n\t\tContactAvatar,\n\t\tContactDetailsProperty,\n\t\tDetailsHeader,\n\t\tEmptyContent,\n\t\tIconContact,\n\t\tIconMail,\n\t\tIconMessage,\n\t\tIconCall,\n\t\tIconAccount,\n\t\tIconDownload,\n\t\tIconDelete,\n\t\tIconQr,\n\t\tCakeIcon,\n\t\tIconCopy,\n\t\tIconLoading,\n\t\tPencilIcon,\n\t\tCheckIcon,\n\t\tModal,\n\t\tNcSelect,\n\t\tPropertyGroups,\n\t\tPropertyRev,\n\t\tPropertySelect,\n\t\tNcButton,\n\t\tNcRelatedResourcesPanel,\n\t\tNcEmptyContent,\n\t\tFolderMultipleImage,\n\t},\n\n\tmixins: [IsMobileMixin],\n\n\tprovide() {\n\t\treturn {\n\t\t\tsharedState: this.sharedState,\n\t\t}\n\t},\n\n\tprops: {\n\t\tcontactKey: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\tcontacts: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\treloadBus: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tdesc: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// if true, the local contact have been fixed and requires a push\n\t\t\tfixed: false,\n\t\t\t/**\n\t\t\t * Local off-store clone of the selected contact for edition\n\t\t\t * because we can't edit contacts data outside the store.\n\t\t\t * Every change will be dispatched and updated on the real\n\t\t\t * store contact after a debounce.\n\t\t\t */\n\t\t\tlocalContact: undefined,\n\t\t\tloadingData: true,\n\t\t\tloadingUpdate: false,\n\t\t\tqrcode: '',\n\t\t\tshowPickAddressbookModal: false,\n\t\t\tpickedAddressbook: null,\n\t\t\teditMode: false,\n\t\t\tnewGroupsValue: [],\n\t\t\tnewAddressBook: null,\n\t\t\tcontactDetailsSelector: '.contact-details',\n\t\t\texcludeFromBirthdayKey: 'x-nc-exclude-from-birthday-calendar',\n\n\t\t\t// communication for ContactDetailsAddNewProp and ContactDetailsProperty\n\t\t\tbus: mitt(),\n\t\t\tshowMenuPopover: false,\n\t\t\tprofileEnabled,\n\t\t\tisTalkEnabled,\n\t\t\thasFilesResources: false,\n\t\t\thasTalkResources: false,\n\t\t\thasCalendarResources: false,\n\t\t\thasDeckResources: false,\n\t\t\tdeckPanelHasError: false,\n\t\t\tfilesPanelHasError: false,\n\t\t\ttalkPanelHasError: false,\n\t\t\tcalendarPanelHasError: false,\n\t\t\tsharedState: reactive({ validEmail: true }),\n\t\t\tlastUsedAddressBook: undefined,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\thasRelatedResources() {\n\t\t\treturn this.hasFilesResources || this.hasTalkResources || this.hasCalendarResources || this.hasDeckResources\n\t\t},\n\n\t\t/**\n\t\t * True if the contact is in the system address book\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanModifyCard() {\n\t\t\treturn this.contact.addressbook?.canModifyCard\n\t\t},\n\n\t\t/**\n\t\t * True if the contact is in the system address book\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanDeleteCard() {\n\t\t\treturn this.contact.addressbook?.canDeleteCard\n\t\t},\n\n\t\t/**\n\t\t * The address book is read-only or the contact is in read-only mode.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisReadOnly() {\n\t\t\treturn !this.canModifyCard || !this.editMode\n\t\t},\n\n\t\tisDataValid() {\n\t\t\treturn this.sharedState.validEmail\n\t\t},\n\n\t\t/**\n\t\t * Warning messages\n\t\t *\n\t\t * @return {object | boolean}\n\t\t */\n\t\twarning() {\n\t\t\tif (this.canModifyCard === false) {\n\t\t\t\treturn {\n\t\t\t\t\ticon: EyeCircleIcon,\n\t\t\t\t\tclasses: [],\n\t\t\t\t\tmsg: t('contacts', 'This contact is in read-only mode. You do not have permission to edit this contact.'),\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\n\t\t/**\n\t\t * Conflict message\n\t\t *\n\t\t * @return {string|boolean}\n\t\t */\n\t\tconflict() {\n\t\t\tif (this.contact.conflict) {\n\t\t\t\treturn t('contacts', 'The contact you were trying to edit has changed. Please manually refresh the contact. Any further edits will be discarded.')\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\n\t\t/**\n\t\t * Contact properties copied and sorted by rfcProps.fieldOrder\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\tsortedProperties() {\n\t\t\treturn this.localContact.properties\n\t\t\t\t.slice(0)\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tconst nameA = a.name.split('.').pop()\n\t\t\t\t\tconst nameB = b.name.split('.').pop()\n\t\t\t\t\treturn rfcProps.fieldOrder.indexOf(nameA) - rfcProps.fieldOrder.indexOf(nameB)\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Contact properties filtered and grouped by rfcProps.fieldOrder\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tgroupedProperties() {\n\t\t\treturn this.sortedProperties\n\t\t\t\t.reduce((list, property) => {\n\t\t\t\t\t// If there is no component to display this prop, ignore it\n\t\t\t\t\tif (!this.canDisplay(property)) {\n\t\t\t\t\t\treturn list\n\t\t\t\t\t}\n\n\t\t\t\t\t// Group bday and deathdate together under 'lifeEvents'\n\t\t\t\t\tif (property.name === 'bday' || property.name === 'deathdate' || property.name === 'anniversary') {\n\t\t\t\t\t\tif (!list.lifeEvents) {\n\t\t\t\t\t\t\tlist.lifeEvents = []\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlist.lifeEvents.push(property)\n\t\t\t\t\t\treturn list\n\t\t\t\t\t}\n\n\t\t\t\t\t// Init if needed\n\t\t\t\t\tif (!list[property.name]) {\n\t\t\t\t\t\tlist[property.name] = []\n\t\t\t\t\t}\n\n\t\t\t\t\tlist[property.name].push(property)\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\n\t\t/**\n\t\t * Fake model to use the propertySelect component\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\taddressbookModel() {\n\t\t\treturn {\n\t\t\t\treadableName: t('contacts', 'Address book'),\n\t\t\t\ticon: 'icon-address-book',\n\t\t\t\toptions: this.addressbooksOptions,\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Usable addressbook object linked to the local contact\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\taddressbook() {\n\t\t\treturn this.contact?.addressbook?.id || this.lastUsedAddressBook?.id\n\t\t},\n\n\t\t/**\n\t\t * Fake model to use the propertyGroups component\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tgroupsModel() {\n\t\t\treturn {\n\t\t\t\treadableName: t('contacts', 'Contact groups'),\n\t\t\t\ticon: 'icon-contacts-dark',\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Store getters filtered and mapped to usable object\n\t\t * This is the list of addressbooks that are available\n\t\t *\n\t\t * @return {{id: string, name: string, readOnly: boolean}[]}\n\t\t */\n\t\taddressbooksOptions() {\n\t\t\treturn this.addressbooks\n\t\t\t\t.filter((addressbook) => addressbook.enabled)\n\t\t\t\t.map((addressbook) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: addressbook.id,\n\t\t\t\t\t\tname: addressbook.displayName,\n\t\t\t\t\t\treadOnly: addressbook.readOnly,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Store getters filtered and mapped to usable object\n\t\t * This is the list of addressbooks that are available to copy to\n\t\t *\n\t\t * @return {{id: string, name: string}[]}\n\t\t */\n\t\tcopyableAddressbooksOptions() {\n\t\t\treturn this.addressbooksOptions\n\t\t\t\t.filter((option) => !option.readOnly)\n\t\t\t\t.filter((option) => option.id !== this.contact.addressbook.id)\n\t\t\t\t.map((addressbook) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: addressbook.id,\n\t\t\t\t\t\tname: addressbook.name,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t// store getter\n\t\taddressbooks() {\n\t\t\treturn this.$store.getters.getAddressbooks\n\t\t},\n\n\t\tcontact() {\n\t\t\treturn this.$store.getters.getContact(this.contactKey)\n\t\t},\n\n\t\texcludeFromBirthdayLabel() {\n\t\t\treturn this.localContact.vCard.hasProperty(this.excludeFromBirthdayKey)\n\t\t\t\t? t('contacts', 'Add contact to Birthday Calendar')\n\t\t\t\t: t('contacts', 'Exclude contact from Birthday Calendar')\n\t\t},\n\n\t\t/**\n\t\t * True if the contact can be excluded from (or added to) the user's birthday calendar\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tenableToggleBirthdayExclusion() {\n\t\t\t// Wait until localContact was fetched\n\t\t\tconst isFetched = !!this.localContact?.vCard\n\t\t\treturn isFetched && !this.isInSystemAddressBook\n\t\t},\n\n\t\t/**\n\t\t * Read-only representation of the contact title and organization.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tformattedSubtitle() {\n\t\t\tconst title = this.contact.title\n\t\t\tconst organization = this.contact.org\n\n\t\t\tif (title && organization) {\n\t\t\t\treturn t('contacts', '{title} at {organization}', {\n\t\t\t\t\ttitle,\n\t\t\t\t\torganization,\n\t\t\t\t})\n\t\t\t} else if (title) {\n\t\t\t\treturn escape(title)\n\t\t\t} else if (organization) {\n\t\t\t\treturn escape(organization)\n\t\t\t}\n\n\t\t\treturn ''\n\t\t},\n\n\t\tprofilePageLink() {\n\t\t\treturn this.contact.socialLink('NEXTCLOUD')\n\t\t},\n\n\t\temailAddressProperties() {\n\t\t\treturn this.localContact.properties.find((property) => property.name === 'email')\n\t\t},\n\n\t\temailAddress() {\n\t\t\treturn this.emailAddressProperties?.getFirstValue()\n\t\t},\n\n\t\tphoneNumberProperties() {\n\t\t\treturn this.localContact.properties.find((property) => property.name === 'tel')\n\t\t},\n\n\t\tphoneNumberList() {\n\t\t\treturn this.groupedProperties?.tel?.map((prop) => prop.getFirstValue()).filter((tel) => !!tel)\n\t\t},\n\n\t\temailAddressList() {\n\t\t\treturn this.groupedProperties?.email?.map((prop) => prop.getFirstValue()).filter((address) => !!address)\n\t\t},\n\n\t\tcallUrl() {\n\t\t\treturn generateUrl('/apps/spreed/?callUser={uid}', { uid: this.contact.uid })\n\t\t},\n\n\t\tisInSystemAddressBook() {\n\t\t\treturn this.contact.addressbook.id === 'z-server-generated--system'\n\t\t},\n\n\t\tnextcloudVersionAtLeast28() {\n\t\t\treturn parseInt(window.OC.config.version.split('.')[0]) >= 28\n\t\t},\n\t},\n\n\twatch: {\n\t\tcontact(newContact, oldContact) {\n\t\t\tif (this.contactKey && newContact !== oldContact) {\n\t\t\t\tthis.selectContact(this.contactKey)\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// load the desired data if we already selected a contact\n\t\tif (this.contactKey) {\n\t\t\tthis.selectContact(this.contactKey)\n\t\t}\n\n\t\t// capture ctrl+s\n\t\tdocument.addEventListener('keydown', this.onCtrlSave)\n\n\t\tthis.lastUsedAddressBook = this.getLastUsedAddressBook()\n\t},\n\n\tbeforeUnmount() {\n\t\t// unbind capture ctrl+s\n\t\tdocument.removeEventListener('keydown', this.onCtrlSave)\n\t},\n\n\tmethods: {\n\t\tupdateGroups(value) {\n\t\t\tthis.newGroupsValue = value\n\t\t},\n\n\t\tupdateAddressbook(value) {\n\t\t\tthis.newAddressBook = value\n\t\t},\n\n\t\t/**\n\t\t * Send the local clone of contact to the store\n\t\t */\n\t\tasync updateContact() {\n\t\t\tthis.fixed = false\n\t\t\tthis.loadingUpdate = true\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('updateContact', this.localContact)\n\t\t\t} finally {\n\t\t\t\tthis.loadingUpdate = false\n\t\t\t}\n\n\t\t\t// if we just created the contact, we need to force update the\n\t\t\t// localContact to match the proper store contact\n\t\t\tif (!this.localContact.dav) {\n\t\t\t\tthis.logger.debug('New contact synced!', { localContact: this.localContact })\n\t\t\t\t// fetching newly created & storred contact\n\t\t\t\tconst contact = this.$store.getters.getContact(this.localContact.key)\n\t\t\t\tawait this.updateLocalContact(contact)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Generate a qrcode for the contact\n\t\t */\n\t\tasync showQRcode() {\n\t\t\tconst jCal = this.contact.jCal.slice(0)\n\t\t\t// do not encode photo\n\t\t\tjCal[1] = jCal[1].filter((props) => props[0] !== 'photo')\n\n\t\t\tconst data = ICAL.stringify(jCal)\n\t\t\tif (data.length > 0) {\n\t\t\t\tconst svgBytes = await getSVG(data)\n\t\t\t\tconst svgString = new TextDecoder().decode(svgBytes)\n\t\t\t\tthis.qrcode = btoa(svgString)\n\t\t\t}\n\t\t},\n\n\t\tasync toggleBirthdayExclusionForContact() {\n\t\t\tif (!this.localContact.vCard.hasProperty(this.excludeFromBirthdayKey)) {\n\t\t\t\tthis.localContact.vCard.addPropertyWithValue(this.excludeFromBirthdayKey, true)\n\t\t\t} else {\n\t\t\t\tthis.localContact.vCard.removeProperty(this.excludeFromBirthdayKey)\n\t\t\t}\n\n\t\t\tawait this.updateContact()\n\t\t},\n\n\t\t/**\n\t\t * Select the text in the input if it is still set to 'Name'\n\t\t */\n\t\tselectInput() {\n\t\t\tif (this.$refs.fullname && this.$refs.fullname.value === t('contacts', 'Name')) {\n\t\t\t\tthis.$refs.fullname.select()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Select a contact, and update the localContact\n\t\t * Fetch updated data if necessary\n\t\t * Scroll to the selected contact if exists\n\t\t *\n\t\t * @param {string} key the contact key\n\t\t */\n\t\tasync selectContact(key) {\n\t\t\tthis.loadingData = true\n\t\t\tthis.editMode = false\n\n\t\t\t// local version of the contact\n\t\t\tconst contact = this.$store.getters.getContact(key)\n\n\t\t\tif (contact) {\n\t\t\t\t// if contact exists AND if exists on server\n\t\t\t\tif (contact.dav) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.$store.dispatch('fetchFullContact', { contact })\n\t\t\t\t\t\t// clone to a local editable variable\n\t\t\t\t\t\tawait this.updateLocalContact(contact)\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (error.name === 'ParserError') {\n\t\t\t\t\t\t\tshowError(t('contacts', 'Syntax error. Cannot open the contact.'))\n\t\t\t\t\t\t} else if (error?.status === 404) {\n\t\t\t\t\t\t\tshowError(t('contacts', 'The contact does not exist on the server anymore.'))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tshowError(t('contacts', 'Unable to retrieve the contact from the server, please check your network connection.'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconsole.error(error)\n\t\t\t\t\t\t// trigger a local deletion from the store only\n\t\t\t\t\t\tthis.$store.dispatch('deleteContact', { contact: this.contact, dav: false })\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// clone to a local editable variable\n\t\t\t\t\tawait this.updateLocalContact(contact)\n\n\t\t\t\t\t// enable edit mode by default when creating a new contact\n\t\t\t\t\tthis.editMode = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.loadingData = false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch contact deletion request\n\t\t */\n\t\tdeleteContact() {\n\t\t\tthis.$store.dispatch('deleteContact', { contact: this.contact })\n\t\t},\n\n\t\t/**\n\t\t * Move contact to the specified addressbook\n\t\t *\n\t\t * @param {string} addressbookId the desired addressbook ID\n\t\t */\n\t\tasync moveContactToAddressbook(addressbookId) {\n\t\t\tconst addressbook = this.addressbooks.find((search) => search.id === addressbookId)\n\t\t\tthis.loadingUpdate = true\n\t\t\tif (addressbook) {\n\t\t\t\ttry {\n\t\t\t\t\tconst contact = await this.$store.dispatch('moveContactToAddressbook', {\n\t\t\t\t\t\t// we need to use the store contact, not the local contact\n\t\t\t\t\t\t// using this.contact and not this.localContact\n\t\t\t\t\t\tcontact: this.contact,\n\t\t\t\t\t\taddressbook,\n\t\t\t\t\t})\n\t\t\t\t\t// select the contact again\n\t\t\t\t\tthis.$router.push({\n\t\t\t\t\t\tname: 'contact',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tselectedGroup: this.$route.params.selectedGroup,\n\t\t\t\t\t\t\tselectedContact: contact.key,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tshowError(t('contacts', 'An error occurred while trying to move the contact'))\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingUpdate = false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Copy contact to the specified addressbook\n\t\t *\n\t\t * @param {string} addressbookId the desired addressbook ID\n\t\t */\n\t\tasync copyContactToAddressbook(addressbookId) {\n\t\t\tconst addressbook = this.addressbooks.find((search) => search.id === addressbookId)\n\t\t\tthis.loadingUpdate = true\n\t\t\tif (addressbook) {\n\t\t\t\ttry {\n\t\t\t\t\tconst contact = await this.$store.dispatch('copyContactToAddressbook', {\n\t\t\t\t\t\t// we need to use the store contact, not the local contact\n\t\t\t\t\t\t// using this.contact and not this.localContact\n\t\t\t\t\t\tcontact: this.contact,\n\t\t\t\t\t\taddressbook,\n\t\t\t\t\t})\n\t\t\t\t\t// select the contact again\n\t\t\t\t\tthis.$router.push({\n\t\t\t\t\t\tname: 'contact',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tselectedGroup: this.$route.params.selectedGroup,\n\t\t\t\t\t\t\tselectedContact: contact.key,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tshowError(t('contacts', 'An error occurred while trying to copy the contact'))\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingUpdate = false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Refresh the data of a contact\n\t\t */\n\t\trefreshContact() {\n\t\t\tthis.$store.dispatch('fetchFullContact', { contact: this.contact, etag: this.conflict })\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.contact.conflict = false\n\t\t\t\t})\n\t\t},\n\n\t\t// reset the current qrcode\n\t\tcloseQrModal() {\n\t\t\tthis.qrcode = ''\n\t\t},\n\n\t\t/**\n\t\t * Update this.localContact and set this.fixed\n\t\t *\n\t\t * @param {Contact} contact the contact to clone\n\t\t */\n\t\tasync updateLocalContact(contact) {\n\t\t\t// create empty contact and copy inner data\n\t\t\tconst localContact = Object.assign(\n\t\t\t\tObject.create(Object.getPrototypeOf(contact)),\n\t\t\t\tcontact,\n\t\t\t)\n\n\t\t\tthis.fixed = validate(localContact)\n\n\t\t\tthis.localContact = localContact\n\t\t\tthis.newGroupsValue = [...this.localContact.groups]\n\t\t},\n\n\t\tonCtrlSave(e) {\n\t\t\tif (!this.editMode) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (e.keyCode === 83 && (navigator.platform.match('Mac') ? e.metaKey : e.ctrlKey)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.onSave()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Clone the current contact to another addressbook\n\t\t */\n\t\tasync cloneContact() {\n\t\t\t// only one addressbook, let's clone it there\n\t\t\tif (this.pickedAddressbook && this.addressbooks.find((addressbook) => addressbook.id === this.pickedAddressbook.id)) {\n\t\t\t\tthis.logger.debug('Cloning contact to', { name: this.pickedAddressbook.name })\n\t\t\t\tawait this.copyContactToAddressbook(this.pickedAddressbook.id)\n\t\t\t\tthis.closePickAddressbookModal()\n\t\t\t} else if (this.addressbooksOptions.length === 1) {\n\t\t\t\tthis.logger.debug('Cloning contact to', { name: this.addressbooksOptions[0].name })\n\t\t\t\tawait this.copyContactToAddressbook(this.addressbooksOptions[0].id)\n\t\t\t} else {\n\t\t\t\tthis.showPickAddressbookModal = true\n\t\t\t}\n\t\t},\n\n\t\tclosePickAddressbookModal() {\n\t\t\tthis.showPickAddressbookModal = false\n\t\t\tthis.pickedAddressbook = null\n\t\t},\n\n\t\t/**\n\t\t * Should display the property\n\t\t *\n\t\t * @param {Property} property the property to check\n\t\t * @return {boolean}\n\t\t */\n\t\tcanDisplay(property) {\n\t\t\t// Make sure we have some model for the property and check for ITEM.PROP custom label format\n\t\t\tconst propModel = rfcProps.properties[property.name.split('.').pop()]\n\n\t\t\tconst propType = propModel && propModel.force\n\t\t\t\t? propModel.force\n\t\t\t\t: property.getDefaultType()\n\n\t\t\treturn propModel && propType !== 'unknown'\n\t\t},\n\n\t\t/**\n\t\t * Save the contact. This handler is triggered by the save button.\n\t\t */\n\t\tasync onSave() {\n\t\t\ttry {\n\t\t\t\tthis.localContact.groups = [...this.newGroupsValue]\n\t\t\t\tawait this.$store.dispatch('updateContactGroups', {\n\t\t\t\t\tgroupNames: this.newGroupsValue,\n\t\t\t\t\tcontact: this.contact,\n\t\t\t\t})\n\t\t\t\tawait this.updateContact()\n\t\t\t\tif (this.newAddressBook && this.newAddressBook !== this.contact.addressbook.id) {\n\t\t\t\t\tthis.updateAddressBookAccesses(this.newAddressBook)\n\t\t\t\t\tthis.moveContactToAddressbook(this.newAddressBook)\n\t\t\t\t\tthis.newAddressBook = null\n\t\t\t\t}\n\t\t\t\tthis.editMode = false\n\t\t\t\tawait this.$store.commit('resortAddressbooks')\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('error while saving contact', { error })\n\t\t\t\tshowError(t('contacts', 'Unable to update contact'))\n\t\t\t\tthis.logger.error(`Unable to update contact: ${error}`, {\n\t\t\t\t\terror,\n\t\t\t\t\tcontact: toRaw(this.contact),\n\t\t\t\t\tlocalContact: toRaw(this.localContact),\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tgetLastUsedAddressBook() {\n\t\t\tconst lastUsed = JSON.parse(browserStorage.getItem('last-used-addressbook') || '{}')\n\n\t\t\tif (lastUsed?.id === null || lastUsed?.id === undefined) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\treturn this.addressbooksOptions?.find((option) => option.id === lastUsed.id) ?? undefined\n\t\t},\n\n\t\tupdateAddressBookAccesses(newAddressBook) {\n\t\t\tlet lastUsedAddressBook = JSON.parse(browserStorage.getItem('last-used-addressbook') || '{}')\n\n\t\t\tif (!lastUsedAddressBook || typeof lastUsedAddressBook !== 'object') {\n\t\t\t\tlastUsedAddressBook = {}\n\t\t\t}\n\n\t\t\tlastUsedAddressBook.id = newAddressBook\n\n\t\t\tbrowserStorage.setItem('last-used-addressbook', JSON.stringify(lastUsedAddressBook))\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n// List of all properties\n.contact-details-wrapper {\n\tdisplay: inline;\n\talign-items: flex-start;\n\tpadding-bottom: calc(var(--default-grid-baseline) * 5);\n\tgap: calc(var(--default-grid-baseline) * 4);\n\tfloat: inline-start;\n}\n@media only screen and (max-width: 600px) {\n\t.contact-details-wrapper {\n\t\tdisplay: block;\n\t}\n}\n\nsection.contact-details {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 10px;\n}\n\n#qrcode-modal {\n\t:deep(.modal-container) {\n\t\tdisplay: flex;\n\t\tpadding: 10px;\n\t\tbackground-color: #fff;\n\t\t.qrcode {\n\t\t\tmax-width: 100%;\n\t\t}\n\t}\n}\n\n:deep(.v-select.select) {\n\tmin-width: 0;\n\tflex: 1 auto;\n}\n\n:deep(.v-select.select .vs__selected-options), :deep(.vs__search) {\n\tmin-height: unset;\n\tmargin: 0 !important;\n}\n\n:deep(.vs__selected) {\n\theight: calc(var(--default-clickable-area) - var(--default-grid-baseline)) !important;\n\tmargin: calc(var(--default-grid-baseline) / 2);\n}\n\n#pick-addressbook-modal {\n\t:deep(.modal-container) {\n\t\tdisplay: flex;\n\t\toverflow: visible;\n\t\tflex-wrap: wrap;\n\t\tjustify-content: space-evenly;\n\t\tmargin-bottom: 20px;\n\t\tpadding: 10px;\n\t\tbackground-color: #fff;\n\t\t.multiselect {\n\t\t\tflex: 1 1 100%;\n\t\t\twidth: 100%;\n\t\t\tmargin-bottom: 20px;\n\t\t}\n\t}\n}\n\n.action-item {\n\tbackground-color: var(--color-primary-element-light);\n\tborder-radius: var(--border-radius-rounded);\n}\n\n:deep(.button-vue--vue-tertiary:hover),\n:deep(.button-vue--vue-tertiary:active) {\n\tbackground-color: var(--color-primary-element-light-hover) !important;\n}\n\n.related-resources {\n\tdisplay:inline-grid;\n\tmargin-top: 88px;\n\tflex-direction: column;\n\tmargin-bottom: -30px;\n}\n@media only screen and (max-width: 1600px) {\n\t.related-resources {\n\t\tfloat: inline-start;\n\t\tdisplay: inline-grid;\n\t\tmargin-inline-start: 80px;\n\t\tflex-direction: column;\n\t\tmargin-bottom: 0;\n\t\tmargin-top: 40px;\n\t}\n}\n\n.last-edit {\n\tdisplay: inline-flex;\n}\n// forcing the size only for contacts app to fit the text size of the contacts app\n:deep(.related-resources__header h5) {\n\tfont-size: medium;\n\topacity: .7;\n\tcolor: var(--color-primary-element);\n}\n\n.address-book {\n\tmin-width: 260px !important;\n}\n\n.empty-content {\n\theight: 100%;\n}\n\n.contact-title {\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n:deep(.contact-details-wrapper-read-only .input-field__input) {\n\tbox-shadow: none !important;\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" id=\\\"mdi-cancel\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12 2C17.5 2 22 6.5 22 12S17.5 22 12 22 2 17.5 2 12 6.5 2 12 2M12 4C10.1 4 8.4 4.6 7.1 5.7L18.3 16.9C19.3 15.5 20 13.8 20 12C20 7.6 16.4 4 12 4M16.9 18.3L5.7 7.1C4.6 8.4 4 10.1 4 12C4 16.4 7.6 20 12 20C13.9 20 15.6 19.4 16.9 18.3Z\\\" /></svg>\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='mdi-delete-outline'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M6,19A2,2%200%200,0%208,21H16A2,2%200%200,0%2018,19V7H6V19M8,9H16V19H8V9M15.5,4L14.5,3H9.5L8.5,4H5V6H19V4H15.5Z'%20/%3e%3c/svg%3e\"","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon book-account-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18 2A2 2 0 0 1 20 4V20A2 2 0 0 1 18 22H6A2 2 0 0 1 4 20V4A2 2 0 0 1 6 2H18M18 4H13V9L10.5 6.7L8 9V4H6V20H18M13 11A2 2 0 1 1 11 13A2 2 0 0 1 13 11M17 19H9V18C9 16.67 11.67 16 13 16S17 16.67 17 18V19\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"BookAccountOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon close-thick-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M20 6.91L17.09 4L12 9.09L6.91 4L4 6.91L9.09 12L4 17.09L6.91 20L12 14.91L17.09 20L20 17.09L14.91 12L20 6.91Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CloseThickIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon set-merge-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M2 7V9H7V7H2M12 9V11H9V13H12V15L15 12L12 9M17 9V15H22V9H17M2 11V13H7V11H2M2 15V17H7V15H2Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"SetMergeIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon account-multiple-plus-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M13 11A3 3 0 1 0 10 8A3 3 0 0 0 13 11M13 7A1 1 0 1 1 12 8A1 1 0 0 1 13 7M17.11 10.86A5 5 0 0 0 17.11 5.14A2.91 2.91 0 0 1 18 5A3 3 0 0 1 18 11A2.91 2.91 0 0 1 17.11 10.86M13 13C7 13 7 17 7 17V19H19V17S19 13 13 13M9 17C9 16.71 9.32 15 13 15C16.5 15 16.94 16.56 17 17M24 17V19H21V17A5.6 5.6 0 0 0 19.2 13.06C24 13.55 24 17 24 17M8 12H5V15H3V12H0V10H3V7H5V10H8Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AccountMultiplePlusOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon book-arrow-right-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M13.09 20C13.21 20.72 13.46 21.39 13.81 22H6C4.89 22 4 21.11 4 20V4C4 2.9 4.89 2 6 2H18C19.11 2 20 2.9 20 4V13.09C19.67 13.04 19.34 13 19 13C18.66 13 18.33 13.04 18 13.09V4H13V12L10.5 9.75L8 12V4H6V20H13.09M23 19L20 16V18H16V20H20V22L23 19Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"BookArrowRightOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div\n\t\tclass=\"contacts-list__item-wrapper\"\n\t\t:draggable=\"isDraggable\"\n\t\t@dragstart=\"startDrag($event, source)\"\n\t\t@click.shift.exact.prevent=\"onSelectMultipleRange\">\n\t\t<ListItem\n\t\t\t:id=\"id\"\n\t\t\t:key=\"source.key\"\n\t\t\tclass=\"list-item-style envelope\"\n\t\t\t:name=\"source.displayName\"\n\t\t\t:to=\"isStatic ? undefined : { name: 'contact', params: { selectedGroup: selectedGroup, selectedContact: source.key } }\">\n\t\t\t<!-- @slot Icon slot -->\n\n\t\t\t<template #icon>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"contacts-list__item-icon\"\n\t\t\t\t\t@click.exact.prevent=\"onSelectMultiple\"\n\t\t\t\t\t@mouseenter=\"hoverAvatar(true)\"\n\t\t\t\t\t@mouseleave=\"hoverAvatar(false)\">\n\t\t\t\t\t<NcAvatar\n\t\t\t\t\t\tv-if=\"((!source.isMultiSelected && !hoveringAvatar) || isStatic) && source.addressbook.id === 'z-server-generated--system'\"\n\t\t\t\t\t\t:user=\"source.uid\"\n\t\t\t\t\t\t:hide-status=\"true\"\n\t\t\t\t\t\t:size=\"40\" />\n\t\t\t\t\t<NcAvatar\n\t\t\t\t\t\tv-if=\"((!source.isMultiSelected && !hoveringAvatar) || isStatic) && source.addressbook.id !== 'z-server-generated--system'\"\n\t\t\t\t\t\t:display-name=\"source.displayName\"\n\t\t\t\t\t\t:url=\"avatarUrl\"\n\t\t\t\t\t\t:size=\"40\" />\n\t\t\t\t\t<CheckIcon\n\t\t\t\t\t\tv-if=\"(source.isMultiSelected || hoveringAvatar) && !isStatic\"\n\t\t\t\t\t\t:size=\"28\"\n\t\t\t\t\t\t:class=\"{ 'contacts-list__item-avatar-selected': source.isMultiSelected, 'contacts-list__item-avatar-hovered': !source.isMultiSelected }\" />\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template #subname>\n\t\t\t\t<div class=\"envelope__subtitle\">\n\t\t\t\t\t<span class=\"envelope__subtitle__subject\">\n\t\t\t\t\t\t{{ source.email ? source.email : getTel }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showAddressbook\" class=\"envelope__subtitle\">\n\t\t\t\t\t<span class=\"envelope__subtitle__addressbook\">\n\t\t\t\t\t\t{{ t('contacts', 'from {addressbook}', { addressbook: source.addressbook.displayName }) }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</ListItem>\n\t</div>\n</template>\n\n<script>\nimport {\n\tNcListItem as ListItem,\n\tNcAvatar,\n} from '@nextcloud/vue'\nimport CheckIcon from 'vue-material-design-icons/Check.vue'\nimport RouterMixin from '../../mixins/RouterMixin.js'\n\nexport default {\n\tname: 'ContactsListItem',\n\n\tcomponents: {\n\t\tListItem,\n\t\tNcAvatar,\n\t\tCheckIcon,\n\t},\n\n\tmixins: [\n\t\tRouterMixin,\n\t],\n\n\tprops: {\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\treloadBus: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tonSelectMultipleFromParent: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => {},\n\t\t},\n\n\t\tisStatic: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t\trequired: false,\n\t\t},\n\n\t\tshowAddressbook: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t\trequired: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tavatarUrl: undefined,\n\t\t\thoveringAvatar: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// contact is not draggable when it has not been saved on server as it can't be added to groups/circles before\n\t\tisDraggable() {\n\t\t\treturn !!this.source.dav && this.source.addressbook.id !== 'z-server-generated--system' && !this.isStatic\n\t\t},\n\n\t\t// usable and valid html id for scrollTo\n\t\tid() {\n\t\t\treturn this.source.key.slice(0, -2)\n\t\t},\n\n\t\tgetTel() {\n\t\t\treturn this.source.properties.find((property) => property.name === 'tel')?.getFirstValue()\n\t\t},\n\t},\n\n\tcreated() {\n\t\tif (!this.isStatic) {\n\t\t\tthis.reloadBus.on('reload-avatar', this.reloadAvatarUrl)\n\t\t\tthis.reloadBus.on('delete-avatar', this.deleteAvatar)\n\t\t}\n\t},\n\n\tunmounted() {\n\t\tif (!this.isStatic) {\n\t\t\tthis.reloadBus.off('reload-avatar', this.reloadAvatarUrl)\n\t\t\tthis.reloadBus.off('delete-avatar', this.deleteAvatar)\n\t\t}\n\t},\n\n\tasync mounted() {\n\t\tawait this.loadAvatarUrl()\n\t},\n\n\tmethods: {\n\t\tstartDrag(evt, item) {\n\t\t\tevt.dataTransfer.dropEffect = 'move'\n\t\t\tevt.dataTransfer.effectAllowed = 'move'\n\t\t\tevt.dataTransfer.setData('item', JSON.stringify({\n\t\t\t\taddressbookId: item.addressbook.id,\n\t\t\t\tdisplayName: item.displayName,\n\t\t\t\tgroups: item.groups,\n\t\t\t\turl: item.url,\n\t\t\t\tuid: item.uid,\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Is called on save in ContactDetails to reload Avatar,\n\t\t * url does not change, so trigger on source change don't work\n\t\t *\n\t\t * @param {string} key from contact\n\t\t */\n\t\treloadAvatarUrl(key) {\n\t\t\tif (key === this.source.key) {\n\t\t\t\tthis.loadAvatarUrl()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Is called on save in ContactDetails to delete Avatar,\n\t\t * somehow the avatarUrl is not unavailable immediately, so we just set undefined\n\t\t *\n\t\t * @param {string} key from contact\n\t\t */\n\t\tdeleteAvatar(key) {\n\t\t\tif (key === this.source.key) {\n\t\t\t\tthis.avatarUrl = undefined\n\t\t\t}\n\t\t},\n\n\t\tasync loadAvatarUrl() {\n\t\t\tthis.avatarUrl = undefined\n\t\t\tif (this.source.photo) {\n\t\t\t\tconst photoUrl = await this.source.getPhotoUrl()\n\t\t\t\tif (!photoUrl) {\n\t\t\t\t\tconsole.warn('contact has an invalid photo')\n\t\t\t\t\t// Invalid photo data\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.avatarUrl = photoUrl\n\t\t\t} else if (this.source.hasPhoto && this.source.url) {\n\t\t\t\tthis.avatarUrl = `${this.source.url}?photo`\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Select this contact within the list\n\t\t */\n\t\tselectContact() {\n\t\t\tif (this.isStatic) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// change url with router\n\t\t\tthis.$router.push({\n\t\t\t\tname: 'contact',\n\t\t\t\tparams: { selectedGroup: this.selectedGroup, selectedContact: this.source.key },\n\t\t\t})\n\t\t},\n\n\t\tonSelectMultiple() {\n\t\t\tif (this.isStatic) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// This weirdness of passing a function as a prop is because the VirtualList extra-props prop object does not support listening to custom events (afaik)\n\t\t\tthis.onSelectMultipleFromParent(this.source, this.index)\n\t\t},\n\n\t\tonSelectMultipleRange() {\n\t\t\tif (this.isStatic) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onSelectMultipleFromParent(this.source, this.index, true)\n\t\t},\n\n\t\thoverAvatar(newState) {\n\t\t\tif (this.isStatic) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.hoveringAvatar = newState\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.envelope {\n\t.contacts-list__item-icon {\n\t\theight: 40px; // To prevent some unexpected spacing below the avatar\n\t}\n\n\t&__subtitle {\n\t\tdisplay: flex;\n\t\tgap: var(--default-grid-baseline);\n\n\t\t&__subject {\n\t\t\tline-height: 130%;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\n\t\t&__addressbook {\n\t\t\tline-height: 130%;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n:deep(.list-item) {\n\tlist-style: none;\n\tpadding-inline: calc(var(--default-grid-baseline) * 3);\n\tpadding-block: calc(var(--default-grid-baseline) * 2);\n}\n\n</style>\n\n<style lang=\"scss\">\n.contacts-list__item-wrapper {\n\t&[draggable='true'] .avatardiv * {\n\t\tcursor: move !important;\n\t}\n\n\t&[draggable='false'] .avatardiv * {\n\t\tcursor: not-allowed !important;\n\t}\n}\n\n.contacts-list__item-icon {\n\tcursor: pointer !important;\n}\n\n.contacts-list__item-avatar {\n\n\t&-selected, &-hovered {\n\t\tborder-radius: 32px;\n\t\twidth: 40px;\n\t\theight: 40px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\n\t&-selected {\n\t\tbackground-color: var(--color-primary-element);\n\t\tcolor: var(--color-primary-light);\n\t}\n\n\t&-hovered {\n\t\tcolor: var(--color-primary-hover);\n\t\tbackground-color: var(--color-primary-light-hover);\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios'\n\n/**\n * Append a group to a contact\n *\n * @param {Contact} contact the contact model\n * @param {string} groupName the group name\n */\nasync function appendContactToGroup(contact, groupName) {\n\tconst groups = contact.groups\n\tgroups.push(groupName)\n\n\treturn axios.patch(contact.url, {}, {\n\t\theaders: {\n\t\t\t'X-PROPERTY': 'CATEGORIES',\n\t\t\t'X-PROPERTY-REPLACE': groups.map((groupName) => encodeURIComponent(groupName)).join(','),\n\t\t},\n\t})\n}\n\nexport default appendContactToGroup\n","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"batch\">\n\t\t<div class=\"batch__title\">\n\t\t\t<h3 v-if=\"mode === 'group'\">\n\t\t\t\t{{ t('contacts', 'Add contacts to groups') }}\n\t\t\t</h3>\n\t\t\t<h3 v-if=\"mode === 'move'\">\n\t\t\t\t{{ t('contacts', 'Move contacts to addressbook') }}\n\t\t\t</h3>\n\t\t</div>\n\n\t\t<!-- Group selector for group mode -->\n\t\t<NcSelect\n\t\t\tv-if=\"mode === 'group'\"\n\t\t\tv-model=\"selectedGroups\"\n\t\t\t:input-label=\"t('contacts', 'Select groups')\"\n\t\t\t:multiple=\"true\"\n\t\t\t:options=\"groupOptions\" />\n\n\t\t<!-- Addressbook selector for move mode -->\n\t\t<NcSelect\n\t\t\tv-if=\"mode === 'move'\"\n\t\t\tv-model=\"selectedAddressesBook\"\n\t\t\t:input-label=\"t('contacts', 'Select addressbook')\"\n\t\t\t:options=\"moveTargetOptions\" />\n\n\t\t<h6>{{ t('contacts', 'Selected contacts') }}</h6>\n\t\t<NcNoteCard v-if=\"mode === 'group' && canModifyCount !== contacts.length\" type=\"info\">\n\t\t\t{{ t('contacts', 'Please note that only {count} of the {total} contacts can be added to a group', { count: canModifyCount, total: contacts.length }) }}\n\t\t</NcNoteCard>\n\t\t<NcNoteCard v-if=\"mode === 'move' && canDeleteCount !== contacts.length\" type=\"info\">\n\t\t\t{{ t('contacts', 'Please note that only {count} of the {total} contacts can be moved', { count: canDeleteCount, total: contacts.length }) }}\n\t\t</NcNoteCard>\n\n\t\t<ul class=\"contacts-list\">\n\t\t\t<ContactsListItem\n\t\t\t\tv-for=\"(contact, index) in contactsLimited\"\n\t\t\t\t:key=\"contact.key\"\n\t\t\t\t:class=\"{ disabled: !contact.addressbook.canDeleteCard }\"\n\t\t\t\t:index=\"index\"\n\t\t\t\t:source=\"contact\"\n\t\t\t\t:reload-bus=\"reloadBus\"\n\t\t\t\t:title=\"listItemTitle(contact)\"\n\t\t\t\t:is-static=\"true\"\n\t\t\t\t:show-addressbook=\"true\" />\n\t\t</ul>\n\n\t\t<NcButton\n\t\t\tv-if=\"contacts.length > 9\"\n\t\t\tvariant=\"secondary\"\n\t\t\t@click=\"showAllContacts = !showAllContacts\">\n\t\t\t<template #icon>\n\t\t\t\t<IconPlus :size=\"20\" />\n\t\t\t</template>\n\t\t\t{{ t('contacts', showAllContacts ? 'Show less' : 'Show all') }}\n\t\t</NcButton>\n\n\t\t<div class=\"batch__footer\">\n\t\t\t<NcButton\n\t\t\t\tv-if=\"mode === 'group'\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"selectedGroups.length === 0\"\n\t\t\t\t@click=\"submit\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconAccountPlus :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('contacts', 'Add') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\tv-if=\"mode === 'move'\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"!selectedAddressesBook\"\n\t\t\t\t@click=\"submit\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconBookArrow :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('contacts', 'Move') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { NcButton, NcNoteCard, NcSelect } from '@nextcloud/vue'\nimport IconAccountPlus from 'vue-material-design-icons/AccountMultiplePlusOutline.vue'\nimport IconBookArrow from 'vue-material-design-icons/BookArrowRightOutline.vue'\nimport IconPlus from 'vue-material-design-icons/Plus.vue'\nimport ContactsListItem from './ContactsListItem.vue'\nimport appendContactToGroup from '../../services/appendContactToGroup.js'\nimport contacts from '../../store/contacts.js'\n\nexport default {\n\tname: 'Batch',\n\n\tcomponents: {\n\t\tContactsListItem,\n\t\tNcButton,\n\t\tNcSelect,\n\t\tIconPlus,\n\t\tIconAccountPlus,\n\t\tIconBookArrow,\n\t\tNcNoteCard,\n\t},\n\n\tprops: {\n\t\tcontacts: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: 'group',\n\t\t},\n\t},\n\n\temits: ['submit'],\n\n\tdata() {\n\t\treturn {\n\t\t\treloadBus: null,\n\t\t\tshowAllContacts: false,\n\t\t\tselectedGroups: [],\n\t\t\tselectedAddressesBook: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcontactsLimited() {\n\t\t\tif (this.showAllContacts) {\n\t\t\t\treturn this.contacts\n\t\t\t}\n\t\t\treturn this.contacts.slice(0, 9)\n\t\t},\n\n\t\tgroupOptions() {\n\t\t\treturn this.$store.getters.getGroups.map((group) => ({\n\t\t\t\tlabel: group.name,\n\t\t\t\tvalue: group.name,\n\t\t\t}))\n\t\t},\n\n\t\tcanModifyCount() {\n\t\t\treturn this.contacts.filter((contact) => contact.addressbook.canModifyCard).length\n\t\t},\n\n\t\tcanDeleteCount() {\n\t\t\treturn this.contacts.filter((contact) => contact.addressbook.canDeleteCard).length\n\t\t},\n\n\t\tmoveTargetOptions() {\n\t\t\t// Provide only enabled, writable addressbooks to move to\n\t\t\treturn this.$store.getters.getAddressbooks\n\t\t\t\t.filter((ab) => ab.canCreateCard && ab.enabled)\n\t\t\t\t.map((ab) => ({ label: ab.displayName || ab.label || ab.addressbook, value: ab.id || ab.addressbook }))\n\t\t},\n\t},\n\n\tmethods: {\n\t\tsubmit() {\n\t\t\tif (this.mode === 'group') {\n\t\t\t\tthis.group()\n\t\t\t}\n\n\t\t\tif (this.mode === 'move') {\n\t\t\t\tthis.moveToAddressbook()\n\t\t\t}\n\t\t},\n\n\t\tlistItemTitle(contact) {\n\t\t\tif (this.mode === 'move') {\n\t\t\t\treturn contact.addressbook.canDeleteCard ? '' : this.$t('contacts', 'This contact cannot be moved')\n\t\t\t}\n\t\t\tif (this.mode === 'group') {\n\t\t\t\treturn contact.addressbook.canModifyCard ? '' : this.$t('contacts', 'This contact cannot be grouped')\n\t\t\t}\n\t\t\t// shouldn't end up here\n\t\t\treturn ''\n\t\t},\n\n\t\tasync group() {\n\t\t\tconst allGroups = this.$store.getters.getGroups\n\n\t\t\t// Add to groups\n\t\t\tthis.selectedGroups.forEach((selectedGroup) => {\n\t\t\t\tconst group = allGroups.find((g) => g.name === selectedGroup.value)\n\t\t\t\tif (!group) {\n\t\t\t\t\tconsole.error('Cannot add contact to an undefined group', selectedGroup)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.contacts.forEach((contact) => {\n\t\t\t\t\tif (!contact.addressbook.canModifyCard) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t} // skip read-only for groups\n\t\t\t\t\tif (contact.groups && contact.groups.includes(group.name)) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tappendContactToGroup(contact, group.name)\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tthis.$store.dispatch('addContactToGroup', { contact, groupName: group.name })\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tconsole.error(error)\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tthis.$emit('submit')\n\t\t},\n\n\t\tasync moveToAddressbook() {\n\t\t\tif (!this.selectedAddressesBook) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst addressbook = this.$store.getters.getAddressbooks.find((ab) => ab.id === this.selectedAddressesBook.value)\n\t\t\tif (!addressbook) {\n\t\t\t\tconsole.error('Selected addressbook not found', this.selectedAddressesBook)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst movePromises = this.contacts.map(async (contact) => {\n\t\t\t\tif (!contact.addressbook.canDeleteCard || contact.addressbook.id === addressbook.id) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.$store.dispatch('moveContactToAddressbook', { contact, addressbook })\n\t\t\t\t\treturn contact\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Failed to move contact', contact, error)\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tawait Promise.all(movePromises)\n\n\t\t\tthis.$emit('submit')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.batch {\n\tmargin: calc(var(--default-grid-baseline) * 8);\n\n\t&__title {\n\t\tmargin-bottom: var(--default-grid-baseline);\n\t}\n\n\t&__footer {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tjustify-content: flex-end;\n\t}\n\n\t.contacts-list {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\t\tgap: var(--default-grid-baseline);\n\t\tmargin: calc(var(--default-grid-baseline) * 2) 0;\n\n\t\t.disabled {\n\t\t\topacity: 0.5;\n\t\t}\n\t}\n}\n</style>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon badge-account-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M17,3H14V5H17V21H7V5H10V3H7A2,2 0 0,0 5,5V21A2,2 0 0,0 7,23H17A2,2 0 0,0 19,21V5A2,2 0 0,0 17,3M12,7A2,2 0 0,1 14,9A2,2 0 0,1 12,11A2,2 0 0,1 10,9A2,2 0 0,1 12,7M16,15H8V14C8,12.67 10.67,12 12,12C13.33,12 16,12.67 16,14V15M16,18H8V17H16V18M12,20H8V19H12V20M13,5H11V1H13V5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"BadgeAccountOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon check-circle-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M12 20C7.59 20 4 16.41 4 12S7.59 4 12 4 20 7.59 20 12 16.41 20 12 20M16.59 7.58L10 14.17L7.41 11.59L6 13L10 17L18 9L16.59 7.58Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CheckCircleOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon close-circle-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2C6.47,2 2,6.47 2,12C2,17.53 6.47,22 12,22C17.53,22 22,17.53 22,12C22,6.47 17.53,2 12,2M14.59,8L12,10.59L9.41,8L8,9.41L10.59,12L8,14.59L9.41,16L12,13.41L14.59,16L16,14.59L13.41,12L16,9.41L14.59,8Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"CloseCircleOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon domain-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18,15H16V17H18M18,11H16V13H18M20,19H12V17H14V15H12V13H14V11H12V9H20M10,7H8V5H10M10,11H8V9H10M10,15H8V13H10M10,19H8V17H10M6,7H4V5H6M6,11H4V9H6M6,15H4V13H6M6,19H4V17H6M12,7V3H2V21H22V7H12Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"DomainIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"merging\">\n\t\t<div class=\"merging__title\">\n\t\t\t<h3>{{ t('contacts', 'Confirm merging contacts') }}</h3>\n\t\t\t<div class=\"merging-title__addressbooks\">\n\t\t\t\t<IconCloseCircleOutline v-if=\"chosenAddressBook === null\" :size=\"20\" class=\"needs-action\" />\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-bind=\"addressBookSelect\"\n\t\t\t\t\tv-model=\"chosenAddressBook\"\n\t\t\t\t\t:disabled=\"contactsList[0].addressbook.id === contactsList[1].addressbook.id\"\n\t\t\t\t\t:title=\"t('contacts', 'Select address book')\"\n\t\t\t\t\t@update:model-value=\"calculateConflictsToResolve\" />\n\t\t\t</div>\n\t\t</div>\n\n\t\t<NcNoteCard\n\t\t\tv-if=\"conflictsToResolve\"\n\t\t\ttype=\"warning\"\n\t\t\t:text=\"t('contacts', 'The selected contacts have conflicting information. Choose which information to keep')\" />\n\n\t\t<NcNoteCard\n\t\t\tv-else\n\t\t\ttype=\"success\"\n\t\t\t:text=\"t('contacts', 'Contacts can be merged')\" />\n\n\t\t<div class=\"merging__conflicts\">\n\t\t\t<div\n\t\t\t\tv-for=\"(property, index) in sortedProperties\"\n\t\t\t\t:key=\"property\"\n\t\t\t\tclass=\"merging__conflicts__row\"\n\t\t\t\t:class=\"[{\n\t\t\t\t\tconflict: (conflictInformation[property]?.type === 'conflict' || conflictInformation[property]?.type === 'conflictWithMultipleValues'),\n\t\t\t\t\tlast: index === sortedProperties.length - 1,\n\t\t\t\t}]\">\n\t\t\t\t<!-- Indicators for whether there is a conflict -->\n\t\t\t\t<IconCheckCircleOutline\n\t\t\t\t\tv-if=\"(conflictInformation[property]?.type !== 'conflict' || resolvedConflicts.get(property) !== undefined)\n\t\t\t\t\t\t&& (conflictInformation[property]?.type !== 'conflictWithMultipleValues' || resolvedConflicts.get(property)?.size)\"\n\t\t\t\t\t:size=\"20\" />\n\t\t\t\t<IconCloseCircleOutline v-if=\"conflictInformation[property]?.type === 'conflict' && resolvedConflicts.get(property) === undefined\" :size=\"20\" class=\"needs-action\" />\n\t\t\t\t<IconCloseCircleOutline v-if=\"conflictInformation[property]?.type === 'conflictWithMultipleValues' && !resolvedConflicts.get(property)?.size\" :size=\"20\" class=\"needs-action\" />\n\n\t\t\t\t<!-- Checkboxes for resolving single conflicts or conflicts with multiple possible values, for contact 0 -->\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-if=\"conflictInformation[property]?.type === 'conflict'\"\n\t\t\t\t\t:model-value=\"resolvedConflicts.get(property) === 0\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t@update:model-value=\"resolveConflict(0, property)\" />\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-if=\"conflictInformation[property]?.type === 'conflictWithMultipleValues'\"\n\t\t\t\t\t:model-value=\"resolvedConflicts.get(property)?.has(0)\"\n\t\t\t\t\t@update:model-value=\"resolveMultiConflict(0, property)\" />\n\n\t\t\t\t<!-- Information of contact 0, either shown through DetailsProperty if possible or in a custom way -->\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"conflictInformation[property]?.type !== 'onlyInSecond'\"\n\t\t\t\t\tclass=\"merging__conflicts__property\"\n\t\t\t\t\t:class=\"[{\n\t\t\t\t\t\t'no-conflict': conflictInformation[property]?.type !== 'conflict'\n\t\t\t\t\t\t\t&& conflictInformation[property]?.type !== 'conflictWithMultipleValues',\n\t\t\t\t\t}]\">\n\t\t\t\t\t<div v-if=\"!simpleProperties.includes(property)\">\n\t\t\t\t\t\t<ContactDetailsProperty\n\t\t\t\t\t\t\tv-for=\"(singleProperty, propertyIndex) in dividedProperties[0][property]\"\n\t\t\t\t\t\t\t:key=\"singleProperty.jCal\"\n\t\t\t\t\t\t\t:is-first-property=\"propertyIndex === 0\"\n\t\t\t\t\t\t\t:is-last-property=\"false\"\n\t\t\t\t\t\t\t:property=\"singleProperty\"\n\t\t\t\t\t\t\t:contact=\"contactsList[0]\"\n\t\t\t\t\t\t\t:local-contact=\"contactsList[0]\"\n\t\t\t\t\t\t\t:contacts=\"contacts\"\n\t\t\t\t\t\t\t:bus=\"bus\"\n\t\t\t\t\t\t\t:is-read-only=\"true\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-else class=\"simple-property\">\n\t\t\t\t\t\t<div class=\"simple-property__title\">\n\t\t\t\t\t\t\t<component :is=\"simplePropertyDescriptions[property]?.icon || 'span'\" :size=\"20\" />\n\t\t\t\t\t\t\t<h3>{{ simplePropertyDescriptions[property]?.description || property }}</h3>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span v-for=\"singleProperty in dividedProperties[0][property]\" :key=\"singleProperty.jCal\">{{ singleProperty.getFirstValue() }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"conflictInformation[property]?.type === 'onlyInSecond'\" class=\"merging-conflicts__filler\" />\n\n\t\t\t\t<!-- Checkboxes for resolving single conflicts or conflicts with multiple possible values, for contact 1 -->\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-if=\"conflictInformation[property]?.type === 'conflict'\"\n\t\t\t\t\t:model-value=\"resolvedConflicts.get(property) === 1\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t@update:model-value=\"resolveConflict(1, property)\" />\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-if=\"conflictInformation[property]?.type === 'conflictWithMultipleValues'\"\n\t\t\t\t\t:model-value=\"resolvedConflicts.get(property)?.has(1)\"\n\t\t\t\t\t@update:model-value=\"resolveMultiConflict(1, property)\" />\n\n\t\t\t\t<!-- Information of contact 1, either shown through DetailsProperty if possible or in a custom way -->\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"conflictInformation[property]?.type !== 'onlyInFirst'\"\n\t\t\t\t\tclass=\"merging__conflicts__property\"\n\t\t\t\t\t:class=\"[{\n\t\t\t\t\t\t'no-conflict': conflictInformation[property]?.type !== 'conflict'\n\t\t\t\t\t\t\t&& conflictInformation[property]?.type !== 'conflictWithMultipleValues',\n\t\t\t\t\t}]\">\n\t\t\t\t\t<div v-if=\"!simpleProperties.includes(property)\">\n\t\t\t\t\t\t<ContactDetailsProperty\n\t\t\t\t\t\t\tv-for=\"(singleProperty, propertyIndex) in dividedProperties[1][property]\"\n\t\t\t\t\t\t\t:key=\"singleProperty.jCal\"\n\t\t\t\t\t\t\t:is-first-property=\"propertyIndex === 0\"\n\t\t\t\t\t\t\t:is-last-property=\"false\"\n\t\t\t\t\t\t\t:property=\"singleProperty\"\n\t\t\t\t\t\t\t:contact=\"contactsList[1]\"\n\t\t\t\t\t\t\t:local-contact=\"contactsList[1]\"\n\t\t\t\t\t\t\t:contacts=\"contacts\"\n\t\t\t\t\t\t\t:bus=\"bus\"\n\t\t\t\t\t\t\t:is-read-only=\"true\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-else class=\"simple-property\">\n\t\t\t\t\t\t<div class=\"simple-property__title\">\n\t\t\t\t\t\t\t<component :is=\"simplePropertyDescriptions[property]?.icon || 'span'\" :size=\"20\" />\n\t\t\t\t\t\t\t<h3>{{ simplePropertyDescriptions[property]?.description || property }}</h3>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span v-for=\"singleProperty in dividedProperties[1][property]\" :key=\"singleProperty.jCal\">{{ singleProperty.getFirstValue() }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"contactsList[0].groups.length || contactsList[1].groups.length\" class=\"merging__groups\">\n\t\t\t<h4 class=\"merging__groups__header\">\n\t\t\t\t{{ t('contacts', 'Groups') }}\n\t\t\t</h4>\n\t\t\t<NcSelect\n\t\t\t\tv-model=\"selectedGroups\"\n\t\t\t\t:options=\"contactsList[0].groups.concat(contactsList[1].groups)\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:placeholder=\"t('contacts', 'Select groups to add the merged contact to')\"\n\t\t\t\t:disabled=\"!contactsList[0].groups.length && !contactsList[1].groups.length\"\n\t\t\t\t@update:model-value=\"calculateConflictsToResolve\" />\n\t\t</div>\n\n\t\t<div class=\"merging__actions\">\n\t\t\t<NcButton :disabled=\"conflictsToResolve !== 0\" variant=\"secondary\" @click=\"mergeContacts\">\n\t\t\t\t{{ t('contacts', 'Merge contacts') }}\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconSetMerge v-if=\"!isLoading\" :size=\"20\" />\n\t\t\t\t\t<NcLoadingIcon v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { NcButton, NcCheckboxRadioSwitch, NcLoadingIcon, NcNoteCard, NcSelect } from '@nextcloud/vue'\nimport mitt from 'mitt'\nimport IconAccount from 'vue-material-design-icons/AccountOutline.vue'\nimport IconBadgeAccount from 'vue-material-design-icons/BadgeAccountOutline.vue'\nimport IconCheckCircleOutline from 'vue-material-design-icons/CheckCircleOutline.vue'\nimport IconCloseCircleOutline from 'vue-material-design-icons/CloseCircleOutline.vue'\nimport IconDomain from 'vue-material-design-icons/Domain.vue'\nimport IconSetMerge from 'vue-material-design-icons/SetMerge.vue'\nimport ContactDetailsProperty from '../ContactDetails/ContactDetailsProperty.vue'\nimport rfcProps from '../../models/rfcProps.js'\n\nexport default {\n\tname: 'Merging',\n\n\tcomponents: {\n\t\tContactDetailsProperty,\n\t\tNcCheckboxRadioSwitch,\n\t\tIconCheckCircleOutline,\n\t\tIconCloseCircleOutline,\n\t\tIconSetMerge,\n\t\tNcNoteCard,\n\t\tNcButton,\n\t\tIconDomain,\n\t\tIconAccount,\n\t\tIconBadgeAccount,\n\t\tNcSelect,\n\t\tNcLoadingIcon,\n\t},\n\n\tprops: {\n\t\tcontacts: {\n\t\t\ttype: Map,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tbus: mitt(),\n\t\t\tresolvedConflicts: new Map(),\n\t\t\tconflictsToResolve: 0,\n\t\t\tsortedProperties: [],\n\t\t\tsimpleProperties: ['fn', 'org', 'title'],\n\t\t\tsimplePropertyDescriptions: {\n\t\t\t\tfn: {\n\t\t\t\t\tdescription: this.t('contacts', 'Name'),\n\t\t\t\t\ticon: IconAccount,\n\t\t\t\t},\n\n\t\t\t\torg: {\n\t\t\t\t\tdescription: this.t('contacts', 'Company'),\n\t\t\t\t\ticon: IconDomain,\n\t\t\t\t},\n\n\t\t\t\ttitle: {\n\t\t\t\t\tdescription: this.t('contacts', 'Title'),\n\t\t\t\t\ticon: IconBadgeAccount,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tchosenAddressBook: null,\n\t\t\tselectedGroups: [],\n\t\t\tisLoading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcontactsList() {\n\t\t\treturn Array.from(this.contacts.values()).map((contact) => (contact))\n\t\t},\n\n\t\tdividedProperties() {\n\t\t\tconst [contactA, contactB] = this.contactsList\n\t\t\tif (!contactA || !contactB) {\n\t\t\t\treturn {}\n\t\t\t}\n\n\t\t\tconst sortedA = this.sortProperties(contactA)\n\t\t\tconst sortedB = this.sortProperties(contactB)\n\n\t\t\tconst groupedA = this.groupedProperties(sortedA)\n\t\t\tconst groupedB = this.groupedProperties(sortedB)\n\n\t\t\treturn [groupedA, groupedB]\n\t\t},\n\n\t\tusedProperties() {\n\t\t\tconst allKeys = this.dividedProperties.flatMap((map) => Object.keys(map))\n\t\t\treturn [...new Set(allKeys)].filter((key) => {\n\t\t\t\tconst valA = this.dividedProperties[0][key] ? this.dividedProperties[0][key].map((value) => this.getPropertyValue(value)) : []\n\t\t\t\tconst valB = this.dividedProperties[1][key] ? this.dividedProperties[1][key].map((value) => this.getPropertyValue(value)) : []\n\t\t\t\treturn (\n\t\t\t\t\t(!valA.every((val) => val === null || val === undefined || val === ''))\n\t\t\t\t\t|| (!valB.every((val) => val === null || val === undefined || val === ''))\n\t\t\t\t)\n\t\t\t})\n\t\t},\n\n\t\tconflictInformation() {\n\t\t\tconst conflictInformation = {}\n\n\t\t\tthis.usedProperties.forEach((property) => {\n\t\t\t\tif ((this.dividedProperties[0][property] ?? []).every((val) => this.checkIfPropertyEmpty(val))) {\n\t\t\t\t\tconflictInformation[property] = {\n\t\t\t\t\t\ttype: 'onlyInSecond',\n\t\t\t\t\t\tvalue: this.dividedProperties[1][property].map((val) => this.getPropertyValue(val)),\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif ((this.dividedProperties[1][property] ?? []).every((val) => this.checkIfPropertyEmpty(val))) {\n\t\t\t\t\tconflictInformation[property] = {\n\t\t\t\t\t\ttype: 'onlyInFirst',\n\t\t\t\t\t\tvalue: this.dividedProperties[0][property].map((val) => this.getPropertyValue(val)),\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst equalEvery = (a, b) => a.length === b.length && a.every((v, i) => v === b[i])\n\n\t\t\t\tif (\n\t\t\t\t\tequalEvery(\n\t\t\t\t\t\t(this.dividedProperties[0][property] ?? []).map((val) => this.getPropertyValue(val)),\n\t\t\t\t\t\t(this.dividedProperties[1][property] ?? []).map((val) => this.getPropertyValue(val)),\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tconflictInformation[property] = {\n\t\t\t\t\t\ttype: 'equal',\n\t\t\t\t\t\tvalue: this.dividedProperties[0][property].map((val) => this.getPropertyValue(val)),\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (rfcProps.properties[property]?.multiple === true) {\n\t\t\t\t\tconflictInformation[property] = {\n\t\t\t\t\t\ttype: 'conflictWithMultipleValues',\n\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconflictInformation[property] = {\n\t\t\t\t\ttype: 'conflict',\n\t\t\t\t\tvalue: null,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn conflictInformation\n\t\t},\n\n\t\taddressBookSelect() {\n\t\t\treturn {\n\t\t\t\tplaceholder: this.t('contacts', 'Select address book'),\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 0,\n\t\t\t\t\t\tlabel: this.contactsList[0].addressbook.displayName,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\tlabel: this.contactsList[1].addressbook.displayName,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.calculateConflictsToResolve()\n\t\tthis.sortedProperties = this.sortUsedProperties()\n\n\t\tif (this.contactsList[0].addressbook.id === this.contactsList[1].addressbook.id) {\n\t\t\tthis.chosenAddressBook = {\n\t\t\t\tid: 0,\n\t\t\t\tlabel: this.contactsList[0].addressbook.displayName,\n\t\t\t}\n\t\t}\n\n\t\tthis.selectedGroups = this.selectedGroups.concat(this.contactsList[0].groups)\n\t\tthis.selectedGroups = this.selectedGroups.concat(this.contactsList[1].groups)\n\t},\n\n\tmethods: {\n\t\tresolveConflict(version, property) {\n\t\t\tif (version === this.resolvedConflicts.get(property)) {\n\t\t\t\t// If the version is already resolved, toggle it back to undefined\n\t\t\t\tthis.resolvedConflicts.set(property, undefined)\n\t\t\t} else {\n\t\t\t\t// Otherwise, set the version as resolved\n\t\t\t\tthis.resolvedConflicts.set(property, version)\n\t\t\t}\n\t\t\tthis.$forceUpdate()\n\t\t\tthis.calculateConflictsToResolve()\n\t\t},\n\n\t\tresolveMultiConflict(version, property) {\n\t\t\tif (this.resolvedConflicts.has(property)) {\n\t\t\t\tconst currentVersions = this.resolvedConflicts.get(property)\n\t\t\t\tif (currentVersions.has(version)) {\n\t\t\t\t\tcurrentVersions.delete(version)\n\t\t\t\t} else {\n\t\t\t\t\tcurrentVersions.add(version)\n\t\t\t\t}\n\t\t\t\tthis.resolvedConflicts.set(property, currentVersions)\n\t\t\t} else {\n\t\t\t\tconst resolutions = new Set()\n\t\t\t\tresolutions.add(version)\n\t\t\t\tthis.resolvedConflicts.set(property, resolutions)\n\t\t\t}\n\t\t\tthis.$forceUpdate()\n\t\t\tthis.calculateConflictsToResolve()\n\t\t},\n\n\t\t/**\n\t\t * Should display the property\n\t\t *\n\t\t * @param {Property} property the property to check\n\t\t * @return {boolean}\n\t\t */\n\t\tcanDisplay(property) {\n\t\t\t// Make sure we have some model for the property and check for ITEM.PROP custom label format\n\t\t\tconst propModel = rfcProps.properties[property.name.split('.').pop()]\n\n\t\t\tconst propType = propModel && propModel.force\n\t\t\t\t? propModel.force\n\t\t\t\t: property.getDefaultType()\n\n\t\t\treturn propModel && propType !== 'unknown'\n\t\t},\n\n\t\t/**\n\t\t * Contact properties copied and sorted by rfcProps.fieldOrder\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\tsortProperties(contact) {\n\t\t\treturn contact.properties\n\t\t\t\t.slice(0)\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tconst nameA = a.name.split('.').pop()\n\t\t\t\t\tconst nameB = b.name.split('.').pop()\n\t\t\t\t\treturn rfcProps.fieldOrder.indexOf(nameA) - rfcProps.fieldOrder.indexOf(nameB)\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Contact properties filtered and grouped by rfcProps.fieldOrder\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tgroupedProperties(sortedProperties) {\n\t\t\treturn sortedProperties\n\t\t\t\t.reduce((list, property) => {\n\t\t\t\t\t// If there is no component to display this prop, ignore it\n\t\t\t\t\tif (!this.canDisplay(property) && property.name !== 'title' && property.name !== 'org' && property.name !== 'fn') {\n\t\t\t\t\t\treturn list\n\t\t\t\t\t}\n\n\t\t\t\t\t// Group bday and deathdate together under 'lifeEvents'\n\t\t\t\t\tif (property.name === 'bday' || property.name === 'deathdate' || property.name === 'anniversary') {\n\t\t\t\t\t\tif (!list.lifeEvents) {\n\t\t\t\t\t\t\tlist.lifeEvents = []\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlist.lifeEvents.push(property)\n\t\t\t\t\t\treturn list\n\t\t\t\t\t}\n\n\t\t\t\t\t// Init if needed\n\t\t\t\t\tif (!list[property.name]) {\n\t\t\t\t\t\tlist[property.name] = []\n\t\t\t\t\t}\n\n\t\t\t\t\tlist[property.name].push(property)\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\n\t\tcalculateConflictsToResolve() {\n\t\t\tlet conflictsCount = 0\n\n\t\t\tthis.usedProperties.forEach((property) => {\n\t\t\t\tif (this.conflictInformation[property]?.type === 'conflict' && this.resolvedConflicts.get(property) === undefined) {\n\t\t\t\t\tconflictsCount++\n\t\t\t\t}\n\n\t\t\t\tif (this.conflictInformation[property]?.type === 'conflictWithMultipleValues' && !this.resolvedConflicts.get(property)?.size) {\n\t\t\t\t\tconflictsCount++\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (this.chosenAddressBook === null) {\n\t\t\t\tconflictsCount++\n\t\t\t}\n\n\t\t\tthis.conflictsToResolve = conflictsCount\n\t\t},\n\n\t\tgetPropertyValue(property) {\n\t\t\tif (property.isMultiValue) {\n\t\t\t\t// differences between values types :x;x;x;x;x and x,x,x,x,x\n\t\t\t\treturn property.isStructuredValue\n\t\t\t\t\t? property.getValues()[0]\n\t\t\t\t\t: property.getValues()\n\t\t\t}\n\t\t\treturn property.getFirstValue()\n\t\t},\n\n\t\tcheckIfPropertyEmpty(property) {\n\t\t\tif (property === undefined) {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tconst value = this.getPropertyValue(property)\n\n\t\t\tif (value === '' || value === null || (Array.isArray(value) && value.length === 0)) {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn value.every((v) => v === '' || v === undefined)\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\n\t\tsortUsedProperties() {\n\t\t\t// the properties where this.conflictInformation[property].type === 'conflict' should have priority\n\t\t\treturn this.usedProperties.sort((a, b) => {\n\t\t\t\tconst aType = this.conflictInformation[a]?.type\n\t\t\t\tconst bType = this.conflictInformation[b]?.type\n\n\t\t\t\tif (aType === 'conflict' && bType !== 'conflict') {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\tif (bType === 'conflict' && aType !== 'conflict') {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn 0\n\t\t\t})\n\t\t},\n\n\t\tasync mergeContacts() {\n\t\t\tthis.isLoading = true\n\t\t\tconst contactToSave = this.contactsList[0]\n\n\t\t\tconst finalProperties = {}\n\n\t\t\tthis.usedProperties.forEach((property) => {\n\t\t\t\tif (this.conflictInformation[property]?.type === 'conflict') {\n\t\t\t\t\tconst resolvedVersion = this.resolvedConflicts.get(property)\n\t\t\t\t\tif (resolvedVersion !== undefined) {\n\t\t\t\t\t\tfinalProperties[property] = [this.dividedProperties[resolvedVersion][property]]\n\t\t\t\t\t}\n\t\t\t\t} else if (this.conflictInformation[property]?.type === 'conflictWithMultipleValues') {\n\t\t\t\t\tconst resolvedVersions = this.resolvedConflicts.get(property)\n\t\t\t\t\tif (resolvedVersions?.size) {\n\t\t\t\t\t\tfinalProperties[property] = Array.from(resolvedVersions).map((version) => this.dividedProperties[version][property])\n\t\t\t\t\t}\n\t\t\t\t} else if (this.conflictInformation[property]?.type === 'onlyInSecond') {\n\t\t\t\t\tfinalProperties[property] = [this.dividedProperties[1][property]]\n\t\t\t\t} else {\n\t\t\t\t\tfinalProperties[property] = [this.dividedProperties[0][property]]\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.usedProperties.forEach((name) => {\n\t\t\t\tif (finalProperties[name] !== undefined && finalProperties[name].length > 0) {\n\t\t\t\t\tfinalProperties[name].flat().forEach((property, index) => {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\tcontactToSave.vCard.updatePropertyWithValue(name, this.getPropertyValue(property))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontactToSave.vCard.addProperty(property)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tcontactToSave.groups = this.selectedGroups\n\t\t\tcontactToSave.addressbook = this.contactsList[this.chosenAddressBook.id].addressbook\n\n\t\t\tawait this.$store.dispatch('updateContact', contactToSave)\n\n\t\t\tawait this.$store.dispatch('deleteContact', { contact: this.contactsList[1] })\n\n\t\t\tthis.$emit('finished', contactToSave)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.merging {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: calc(var(--default-grid-baseline) * 8);\n\toverflow-x: clip;\n\n\t&__title {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin: calc(var(--default-grid-baseline) * 3) 0;\n\t\tjustify-content: space-between;\n\t\tgap: calc(var(--default-grid-baseline) * 2);\n\t\talign-items: center;\n\n\t\th3 {\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t&__addressbooks {\n\t\t\tdisplay: flex;\n\t\t\tgap: calc(var(--default-grid-baseline) * 2);\n\n\t\t\t.v-select {\n\t\t\t\tmargin-bottom: unset !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__groups {\n\t\tdisplay: flex;\n\t\tgap: calc(var(--default-grid-baseline) * 4);\n\t\tmargin: calc(var(--default-grid-baseline) * 4) 0;\n\t\tmargin-inline-start: calc(var(--default-grid-baseline) * 5);\n\n\t\t&__header {\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\n\t&__conflicts {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: calc(var(--default-grid-baseline) * 2);\n\t\tmargin: auto;\n\n\t\t&__row {\n\t\t\tdisplay: flex;\n\t\t\tgap: calc(var(--default-grid-baseline) * 5);\n\t\t\talign-items: start;\n\t\t\tborder-bottom: var(--border-width-input) solid var(--color-background-darker);\n\t\t\tpadding-bottom: calc(var(--default-grid-baseline) * 3);\n\n\t\t\t.material-design-icon {\n\t\t\t\talign-self: start;\n\t\t\t\tmargin-top: calc(var(--default-grid-baseline) * 4 + 2px);\n\t\t\t}\n\n\t\t\t.no-conflict {\n\t\t\t\tmargin-inline-start: 55px;\n\t\t\t}\n\n\t\t\t:deep(.property__label) {\n\t\t\t\tall: unset;\n\t\t\t}\n\t\t}\n\n\t\t&__property {\n\t\t\tdisplay: flex;\n\t\t\tgap: calc(var(--default-grid-baseline) * 2);\n\t\t\tmin-width: 300px;\n\t\t\tmax-width: 300px;\n\t\t\tmin-height: 85px;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t&__filler {\n\t\t\tmin-width: 352px;\n\t\t}\n\t}\n\n\t.last {\n\t\tborder-bottom: none;\n\t}\n\n\t.property__label {\n\t\twidth: unset;\n\t}\n\n\t.checkbox-radio-switch {\n\t\tmargin-top: calc(var(--default-grid-baseline) * 2);\n\t}\n\n\t&-actions {\n\t\tdisplay: flex;\n\t\tjustify-content: flex-end;\n\t\tmargin-top: calc(var(--default-grid-baseline) * 4);\n\t}\n}\n\n.needs-action {\n\tcolor: var(--color-warning-text);\n}\n\n.simple-property {\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__title {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 15px;\n\t\tmargin-bottom: calc(var(--default-grid-baseline) * 2);\n\n\t\th3 {\n\t\t\tfont-size: 22px;\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t.material-design-icon {\n\t\t\talign-self: center;\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n}\n\n// todo remove\n.modal-container__content {\n\toverflow: hidden !important;\n}\n\nh2 {\n\tmargin: 0 !important;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<AppContentList class=\"content-list\">\n\t\t<NcDialog\n\t\t\t:open=\"showDeleteConfirmationDialog\"\n\t\t\t:name=\"n(\n\t\t\t\t'contacts',\n\t\t\t\t'Delete {number} contact',\n\t\t\t\t'Delete {number} contacts',\n\t\t\t\tmultiSelectedContacts.size,\n\t\t\t\t{ number: multiSelectedContacts.size },\n\t\t\t)\"\n\t\t\t:buttons=\"buttons\"\n\t\t\tno-close>\n\t\t\t{{ t('contacts', 'Are you sure you want to proceed?') }}\n\t\t\t<NcNoteCard\n\t\t\t\tv-if=\"readOnlyMultiSelectedCount\"\n\t\t\t\tvariant=\"info\"\n\t\t\t\t:text=\"n('contacts',\n\t\t\t\t\t'Please note that {number} contact is read only and will not be deleted',\n\t\t\t\t\t'Please note that {number} contacts are read only and will not be deleted',\n\t\t\t\t\treadOnlyMultiSelectedCount,\n\t\t\t\t\t{ number: readOnlyMultiSelectedCount })\" />\n\t\t</NcDialog>\n\n\t\t<NcModal\n\t\t\tv-if=\"isMerging\"\n\t\t\t:name=\"t('contacts', 'Merge contacts')\"\n\t\t\tsize=\"large\"\n\t\t\t@close=\"isMerging = false\">\n\t\t\t<Merging :contacts=\"multiSelectedContacts\" @finished=\"finishContactMerging\" />\n\t\t</NcModal>\n\n\t\t<NcModal\n\t\t\tv-if=\"isGrouping\"\n\t\t\t:name=\"t('contacts', 'Add contacts to group')\"\n\t\t\tsize=\"large\"\n\t\t\t@close=\"isGrouping = false\">\n\t\t\t<Batch :contacts=\"Array.from(multiSelectedContacts.values())\" mode=\"group\" @submit=\"finishBatch\" />\n\t\t</NcModal>\n\n\t\t<NcModal\n\t\t\tv-if=\"isMovingAddressbook\"\n\t\t\t:name=\"t('contacts', 'Move contacts to addressbook')\"\n\t\t\tsize=\"large\"\n\t\t\t@close=\"isMovingAddressbook = false\">\n\t\t\t<Batch :contacts=\"Array.from(multiSelectedContacts.values())\" mode=\"move\" @submit=\"finishBatch\" />\n\t\t</NcModal>\n\n\t\t<div class=\"contacts-list__header\">\n\t\t\t<div class=\"search-contacts-field\">\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-model=\"query\"\n\t\t\t\t\t:label=\"t('contacts', 'Search contacts …')\"\n\t\t\t\t\ttrailing-button-icon=\"close\"\n\t\t\t\t\t:show-trailing-button=\"query !== ''\"\n\t\t\t\t\t@trailing-button-click=\"query = ''\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<transition name=\"contacts-list__multiselect-header\">\n\t\t\t<div v-if=\"isMultiSelecting\" class=\"contacts-list__multiselect-header\">\n\t\t\t\t<NcButton\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:title=\"t('contacts', 'Unselect {number}', { number: multiSelectedContacts.size })\"\n\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t@click.prevent=\"unselectAllMultiSelected\">\n\t\t\t\t\t<IconSelect :size=\"16\" />\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:disabled=\"!canDeleteAnySelected\"\n\t\t\t\t\t:title=\"deleteActionTitle\"\n\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t@click.prevent=\"attemptDeleteAllMultiSelected\">\n\t\t\t\t\t<IconDelete :size=\"16\" />\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"!isMergingLoading\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:disabled=\"!canMergeSelected\"\n\t\t\t\t\t:title=\"mergeActionTitle\"\n\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t@click.prevent=\"initiateContactMerging\">\n\t\t\t\t\t<IconSetMerge :size=\"20\" />\n\t\t\t\t</NcButton>\n\t\t\t\t<NcLoadingIcon v-else :size=\"20\" />\n\t\t\t\t<NcButton\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:title=\"groupActionTitle\"\n\t\t\t\t\t:disabled=\"!canModifyAnySelected\"\n\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t@click.prevent=\"isGrouping = true\">\n\t\t\t\t\t<IconAccountMultiple :size=\"20\" />\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:title=\"moveActionTitle\"\n\t\t\t\t\t:disabled=\"!canDeleteAnySelected\"\n\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t@click.prevent=\"isMovingAddressbook = true\">\n\t\t\t\t\t<IconBookAccount :size=\"20\" />\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</transition>\n\n\t\t<VList\n\t\t\tv-slot=\"{ item, index }\"\n\t\t\tref=\"scroller\"\n\t\t\tclass=\"contacts-list\"\n\t\t\t:data=\"filteredList\">\n\t\t\t<ContactsListItem\n\t\t\t\t:key=\"item.key\"\n\t\t\t\t:index=\"index\"\n\t\t\t\t:source=\"item\"\n\t\t\t\t:reload-bus=\"reloadBus\"\n\t\t\t\t:on-select-multiple-from-parent=\"onSelectMultiple\" />\n\t\t</VList>\n\t</AppContentList>\n</template>\n\n<script>\nimport IconCancelRaw from '@mdi/svg/svg/cancel.svg?raw'\nimport IconDeleteRaw from '@mdi/svg/svg/delete-outline.svg'\nimport {\n\tNcAppContentList as AppContentList,\n\tNcButton,\n\tNcDialog,\n\tNcLoadingIcon,\n\tNcModal,\n\tNcNoteCard,\n\tNcTextField,\n} from '@nextcloud/vue'\nimport { VList } from 'virtua/vue'\nimport IconAccountMultiple from 'vue-material-design-icons/AccountMultipleOutline.vue'\nimport IconBookAccount from 'vue-material-design-icons/BookAccountOutline.vue'\nimport IconSelect from 'vue-material-design-icons/CloseThick.vue'\nimport IconSetMerge from 'vue-material-design-icons/SetMerge.vue'\nimport IconDelete from 'vue-material-design-icons/TrashCanOutline.vue'\nimport Batch from './ContactsList/Batch.vue'\nimport ContactsListItem from './ContactsList/ContactsListItem.vue'\nimport Merging from './ContactsList/Merging.vue'\nimport RouterMixin from '../mixins/RouterMixin.js'\n\nexport default {\n\tname: 'ContactsList',\n\n\tcomponents: {\n\t\tAppContentList,\n\t\tNcNoteCard,\n\t\tVList,\n\t\tNcButton,\n\t\tIconSelect,\n\t\tIconDelete,\n\t\tIconSetMerge,\n\t\tIconAccountMultiple,\n\t\tIconBookAccount,\n\t\tNcDialog,\n\t\tNcModal,\n\t\tMerging,\n\t\tNcLoadingIcon,\n\t\tContactsListItem,\n\t\tBatch,\n\t\tNcTextField,\n\t},\n\n\tmixins: [\n\t\tRouterMixin,\n\t],\n\n\tprops: {\n\t\tlist: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\n\t\tcontacts: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tsearchQuery: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\treloadBus: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tquery: '',\n\t\t\tmultiSelectedContacts: new Map(),\n\t\t\trefreshKey: 0, // used to force re-render of the list when search query changes, can be removed in vue3\n\t\t\tshowDeleteConfirmationDialog: false,\n\t\t\tbuttons: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('contacts', 'Cancel'),\n\t\t\t\t\ticon: IconCancelRaw,\n\t\t\t\t\tcallback: () => { this.showDeleteConfirmationDialog = false },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('contacts', 'Delete'),\n\t\t\t\t\ttype: 'primary',\n\t\t\t\t\ticon: IconDeleteRaw,\n\t\t\t\t\tcallback: () => { this.deleteAllMultiSelected() },\n\t\t\t\t},\n\t\t\t],\n\n\t\t\tlastToggledIndex: undefined,\n\t\t\tisMerging: false,\n\t\t\tisMergingLoading: false,\n\t\t\tisGrouping: false,\n\t\t\tisMovingAddressbook: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfilteredList() {\n\t\t\tlet contactsList = this.list\n\t\t\t\t.filter((item) => this.matchSearch(this.contacts[item.key]))\n\t\t\t\t.map((item) => this.contacts[item.key])\n\n\t\t\tcontactsList = contactsList.filter((item) => item !== undefined)\n\n\t\t\tcontactsList.forEach((contact, index) => {\n\t\t\t\tif (contact !== undefined) {\n\t\t\t\t\tcontact.isMultiSelected = this.multiSelectedContacts.has(index)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn contactsList\n\t\t},\n\n\t\tisMultiSelecting() {\n\t\t\treturn this.multiSelectedContacts.size > 0\n\t\t},\n\n\t\treadOnlyMultiSelectedCount() {\n\t\t\tlet count = 0\n\n\t\t\tthis.multiSelectedContacts.forEach((contact) => {\n\t\t\t\tif (contact.addressbook.readOnly) {\n\t\t\t\t\tcount++\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn count\n\t\t},\n\n\t\tselectedEditable() {\n\t\t\tlet count = 0\n\n\t\t\tthis.multiSelectedContacts.forEach((contact) => {\n\t\t\t\tif (contact.addressbook.canModifyCard) {\n\t\t\t\t\tcount++\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn count\n\t\t},\n\n\t\tselectedDeletable() {\n\t\t\tlet count = 0\n\n\t\t\tthis.multiSelectedContacts.forEach((contact) => {\n\t\t\t\tif (contact.addressbook.canDeleteCard) {\n\t\t\t\t\tcount++\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn count\n\t\t},\n\n\t\tcanModifyAnySelected() {\n\t\t\treturn this.selectedEditable > 0\n\t\t},\n\n\t\tcanDeleteAnySelected() {\n\t\t\treturn this.selectedDeletable > 0\n\t\t},\n\n\t\tcanMergeSelected() {\n\t\t\treturn this.multiSelectedContacts.size === 2 && this.selectedEditable === this.multiSelectedContacts.size\n\t\t},\n\n\t\tdeleteActionTitle() {\n\t\t\treturn this.canDeleteAnySelected\n\t\t\t\t? n('contacts', 'Delete {number} contact', 'Delete {number} contacts', this.multiSelectedContacts.size, { number: this.multiSelectedContacts.size })\n\t\t\t\t: t('contacts', 'Please select at least one editable contact to delete')\n\t\t},\n\n\t\tmergeActionTitle() {\n\t\t\treturn this.areTwoEditable\n\t\t\t\t? t('contacts', 'Merge contacts')\n\t\t\t\t: t('contacts', 'Please select two editable contacts to merge')\n\t\t},\n\n\t\tgroupActionTitle() {\n\t\t\treturn this.canModifyAnySelected\n\t\t\t\t? n('contacts', 'Add {number} contact to group', 'Add {number} contacts to group', this.multiSelectedContacts.size, { number: this.multiSelectedContacts.size })\n\t\t\t\t: t('contacts', 'Please select at least one editable contact to add to a group')\n\t\t},\n\n\t\tmoveActionTitle() {\n\t\t\treturn this.canDeleteAnySelected\n\t\t\t\t? n('contacts', 'Move {number} contact to addressbook', 'Move {number} contacts to addressbook', this.multiSelectedContacts.size, { number: this.multiSelectedContacts.size })\n\t\t\t\t: t('contacts', 'Please select at least one editable contact to move to an addressbook')\n\t\t},\n\t},\n\n\twatch: {\n\t\tasync selectedContact(key) {\n\t\t\tif (!key) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait this.$nextTick()\n\t\t\tthis.scrollToContact(key)\n\t\t},\n\n\t\tlist(val, old) {\n\t\t\t// we just loaded the list and the url already have a selected contact\n\t\t\t// if not, the selectedContact watcher will take over\n\t\t\t// to select the first entry\n\t\t\tif (val.length !== 0 && old.length === 0 && this.selectedContact) {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.scrollToContact(this.selectedContact)\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.query = this.searchQuery\n\t},\n\n\tmethods: {\n\t\t// Select closest contact on deletion\n\t\tselectContact(oldIndex) {\n\t\t\tif (this.list.length > 0 && oldIndex < this.list.length) {\n\t\t\t\t// priority to the one above then the one after\n\t\t\t\tconst newContact = oldIndex === 0 ? this.list[oldIndex + 1] : this.list[oldIndex - 1]\n\t\t\t\tif (newContact) {\n\t\t\t\t\tthis.$router.push({ name: 'contact', params: { selectedGroup: this.selectedGroup, selectedContact: newContact.key } })\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Scroll to the desired contact if in the list and not visible\n\t\t *\n\t\t * @param {string} key the contact unique key\n\t\t */\n\t\tscrollToContact(key) {\n\t\t\tconst index = this.list.findIndex((contact) => contact.key === key)\n\t\t\tif (index === -1) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst scroller = this.$refs.scroller\n\t\t\tconst scrollerBoundingRect = scroller.$el.getBoundingClientRect()\n\t\t\tconst item = this.$el.querySelector('#' + key.slice(0, -2))\n\t\t\tconst itemBoundingRect = item?.getBoundingClientRect()\n\n\t\t\t// Try to scroll the item fully into view\n\t\t\tif (!item || itemBoundingRect.y < scrollerBoundingRect.y) {\n\t\t\t\t// Item is above the current scroll window (or partly overlapping)\n\t\t\t\tscroller.scrollToIndex(index)\n\t\t\t} else if (item) {\n\t\t\t\tconst itemHeight = scroller.getItemSize(index)\n\t\t\t\tconst pos = itemBoundingRect.y + itemHeight - (this.$el.offsetHeight + 50)\n\t\t\t\tif (pos > 0) {\n\t\t\t\t\t// Item is below the current scroll window (or partly overlapping)\n\t\t\t\t\tscroller.scrollTo(scroller.scrollOffset + pos)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Is this matching the current search ?\n\t\t *\n\t\t * @param {Contact} contact the contact to search\n\t\t * @return {boolean}\n\t\t */\n\t\tmatchSearch(contact) {\n\t\t\tif (this.query.trim() !== '') {\n\t\t\t\ttry {\n\t\t\t\t\treturn contact.searchData.toString().toLowerCase().search(this.query.trim().toLowerCase()) !== -1\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e instanceof SyntaxError) {\n\t\t\t\t\t\t// this.query likely is an invalid regex (i.e. just `+`)\n\t\t\t\t\t\treturn contact.searchData.toString().toLowerCase().includes(this.query.trim().toLowerCase())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\tonSelectMultiple(contact, index, isRange = false) {\n\t\t\tif (isRange && this.lastToggledIndex !== index) {\n\t\t\t\tif (this.onSelectRange(index)) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.multiSelectedContacts.has(index)) {\n\t\t\t\tthis.multiSelectedContacts.delete(index)\n\t\t\t} else {\n\t\t\t\tthis.multiSelectedContacts.set(index, contact)\n\t\t\t}\n\t\t\tthis.lastToggledIndex = index\n\t\t\tthis.multiSelectedContacts = new Map(this.multiSelectedContacts)\n\t\t},\n\n\t\tonSelectRange(index) {\n\t\t\tconst lastToggledIndex = this.lastToggledIndex ?? undefined\n\t\t\tif (lastToggledIndex === undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst start = Math.min(lastToggledIndex, index)\n\t\t\tconst end = Math.max(lastToggledIndex, index)\n\t\t\tconst selected = this.multiSelectedContacts.has(index)\n\n\t\t\tconst newSelection = new Map(this.multiSelectedContacts)\n\n\t\t\tfor (let i = start; i <= end; i++) {\n\t\t\t\tif (!selected) {\n\t\t\t\t\tnewSelection.set(i, this.filteredList[i])\n\t\t\t\t} else {\n\t\t\t\t\tnewSelection.delete(i)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.lastToggledIndex = index\n\t\t\tthis.multiSelectedContacts = newSelection\n\n\t\t\treturn true\n\t\t},\n\n\t\tunselectAllMultiSelected() {\n\t\t\tthis.multiSelectedContacts = new Map()\n\t\t\tthis.lastToggledIndex = undefined\n\t\t},\n\n\t\tattemptDeleteAllMultiSelected() {\n\t\t\tthis.showDeleteConfirmationDialog = true\n\t\t},\n\n\t\tdeleteAllMultiSelected() {\n\t\t\tthis.multiSelectedContacts.forEach(async (contact) => {\n\t\t\t\tif (contact.addressbook.readOnly) {\n\t\t\t\t\t// Do not try to delete read only contacts\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 500))\n\t\t\t\tawait this.$store.dispatch('deleteContact', { contact })\n\t\t\t})\n\t\t\tthis.unselectAllMultiSelected()\n\t\t\tthis.showDeleteConfirmationDialog = false\n\t\t},\n\n\t\tasync initiateContactMerging() {\n\t\t\t// For every contact in the multiSelectedContacts, we need to dispatch the load contact action\n\t\t\tthis.isMergingLoading = true\n\t\t\tconst contacts = Array.from(this.multiSelectedContacts.values())\n\t\t\tfor (const contact of contacts) {\n\t\t\t\tawait this.$store.dispatch('fetchFullContact', { contact })\n\t\t\t}\n\n\t\t\tthis.isMergingLoading = false\n\t\t\tthis.isMerging = true\n\t\t},\n\n\t\tasync finishContactMerging(mergedContact) {\n\t\t\t// After merging, we need to update the contact in the store\n\t\t\tawait this.$store.dispatch('fetchFullContact', { contact: mergedContact, forceReFetch: true })\n\n\t\t\tthis.unselectAllMultiSelected()\n\t\t\tthis.isMerging = false\n\n\t\t\tawait this.$router.push({\n\t\t\t\tname: 'root',\n\t\t\t})\n\t\t},\n\n\t\tasync finishBatch() {\n\t\t\tif (this.isGrouping) {\n\t\t\t\tfor (const contact of this.multiSelectedContacts.values()) {\n\t\t\t\t\tawait this.$store.dispatch('fetchFullContact', { contact, forceReFetch: true })\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.isGrouping = false\n\t\t\tthis.isMovingAddressbook = false\n\t\t\tthis.unselectAllMultiSelected()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// Make virtual scroller scrollable\n.contacts-list {\n\tmax-height: calc(100vh - var(--header-height) - var(--default-grid-baseline) * 14);\n\tflex: 1 auto;\n\tcontain: none !important;\n}\n\n// Add empty header to contacts-list that solves overlapping of contacts with app-navigation-toogle\n.contacts-list__header {\n\tmin-height: calc(var(--default-grid-baseline) * 12)\n}\n\n// Search field\n.search-contacts-field {\n\tpadding: var(--default-grid-baseline) calc(var(--default-grid-baseline) * 2) var(--default-grid-baseline) calc(var(--default-grid-baseline) * 12);\n\n\t> input {\n\t\twidth: 100%;\n\t}\n}\n\n.content-list {\n\toverflow-y: auto;\n\tpadding: 0 var(--default-grid-baseline);\n}\n\n.contacts-list__multiselect-header {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: center;\n\tbackground-color: var(--color-main-background-translucent);\n\tposition: sticky;\n\theight: calc(var(--default-grid-baseline) * 12);\n\tz-index: 100;\n}\n\n.contacts-list__multiselect-header-enter-active, .contacts-list__multiselect-header-leave-active {\n\ttransition: all calc(var(--animation-slow) / 2);\n}\n\n.contacts-list__multiselect-header-enter,\n.contacts-list__multiselect-header-leave-to {\n\topacity: 0;\n\theight: 0;\n\ttransform: scaleY(0);\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<AppContent v-if=\"loading\">\n\t\t<EmptyContent class=\"empty-content\" :name=\"t('contacts', 'Loading contacts …')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconLoading :size=\"20\" />\n\t\t\t</template>\n\t\t</EmptyContent>\n\t</AppContent>\n\n\t<AppContent v-else-if=\"isEmptyGroup && !isRealGroup\">\n\t\t<EmptyContent class=\"empty-content\" :name=\"t('contacts', 'There are no contacts yet')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconContact :size=\"20\" />\n\t\t\t</template>\n\t\t\t<template #desc>\n\t\t\t\t<NcButton variant=\"primary\" @click=\"newContact\">\n\t\t\t\t\t{{ t('contacts', 'Create contact') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t</EmptyContent>\n\t</AppContent>\n\n\t<AppContent v-else-if=\"isEmptyGroup && isRealGroup\">\n\t\t<EmptyContent class=\"empty-content\" :name=\" t('contacts', 'There are no contacts in this group')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconContact :size=\"20\" />\n\t\t\t</template>\n\t\t\t<template #desc>\n\t\t\t\t<NcButton v-if=\"contacts.length === 0\" variant=\"primary\" @click=\"addContactsToGroup(selectedGroup)\">\n\t\t\t\t\t{{ t('contacts', 'Create contacts') }}\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton v-else variant=\"primary\" @click=\"addContactsToGroup(selectedGroup)\">\n\t\t\t\t\t{{ t('contacts', 'Add contacts') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t</EmptyContent>\n\t</AppContent>\n\n\t<AppContent v-else :show-details=\"showDetails\" @update:show-details=\"hideDetails\">\n\t\t<!-- contacts list -->\n\t\t<template #list>\n\t\t\t<ContactsList\n\t\t\t\t:list=\"contactsList\"\n\t\t\t\t:contacts=\"contacts\"\n\t\t\t\t:search-query=\"searchQuery\"\n\t\t\t\t:reload-bus=\"reloadBus\" />\n\t\t</template>\n\n\t\t<!-- main contacts details -->\n\t\t<ContactDetails :contact-key=\"selectedContact\" :contacts=\"sortedContacts\" :reload-bus=\"reloadBus\" />\n\t</AppContent>\n</template>\n\n<script>\nimport { emit } from '@nextcloud/event-bus'\nimport {\n\tNcAppContent as AppContent,\n\tNcEmptyContent as EmptyContent,\n\tNcLoadingIcon as IconLoading,\n\tNcButton,\n} from '@nextcloud/vue'\nimport mitt from 'mitt'\nimport IconContact from 'vue-material-design-icons/AccountMultipleOutline.vue'\nimport ContactDetails from '../ContactDetails.vue'\nimport ContactsList from '../ContactsList.vue'\nimport RouterMixin from '../../mixins/RouterMixin.js'\n\nexport default {\n\tname: 'ContactsContent',\n\n\tcomponents: {\n\t\tAppContent,\n\t\tNcButton,\n\t\tContactDetails,\n\t\tContactsList,\n\t\tEmptyContent,\n\t\tIconContact,\n\t\tIconLoading,\n\t},\n\n\tmixins: [RouterMixin],\n\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\tcontactsList: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsearchQuery: '',\n\t\t\t// communication for ContactListItem and ContactDetails (reload avatar)\n\t\t\treloadBus: mitt(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// store variables\n\t\tcontacts() {\n\t\t\treturn this.$store.getters.getContacts\n\t\t},\n\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t},\n\n\t\tsortedContacts() {\n\t\t\treturn this.$store.getters.getSortedContacts\n\t\t},\n\n\t\t/**\n\t\t * Is this a real group ?\n\t\t * Aka not a dynamically generated one like `All contacts`\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisRealGroup() {\n\t\t\treturn this.groups.findIndex((group) => group.name === this.selectedGroup) > -1\n\t\t},\n\n\t\t/**\n\t\t * Is the current group empty\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEmptyGroup() {\n\t\t\treturn this.contactsList.length === 0\n\t\t},\n\n\t\tshowDetails() {\n\t\t\treturn !!this.selectedContact\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Forward the addContactsToGroup event to the parent\n\t\t *\n\t\t * @param {string} groupName the group name\n\t\t */\n\t\taddContactsToGroup(groupName) {\n\t\t\temit('contacts:group:append', groupName)\n\t\t},\n\n\t\t/**\n\t\t * Forward the newContact event to the parent\n\t\t */\n\t\tnewContact() {\n\t\t\tthis.$emit('new-contact')\n\t\t},\n\n\t\t/**\n\t\t * Show the list and deselect contact\n\t\t */\n\t\thideDetails() {\n\t\t\t// Reset the selected contact\n\t\t\tthis.$router.push({\n\t\t\t\tname: 'group',\n\t\t\t\tparams: {\n\t\t\t\t\tselectedGroup: this.selectedGroup,\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.empty-content {\n\theight: 100%;\n}\n</style>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon account-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AccountIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon account-multiple-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M16 17V19H2V17S2 13 9 13 16 17 16 17M12.5 7.5A3.5 3.5 0 1 0 9 11A3.5 3.5 0 0 0 12.5 7.5M15.94 13A5.32 5.32 0 0 1 18 17V19H22V17S22 13.37 15.94 13M15 4A3.39 3.39 0 0 0 13.07 4.59A5 5 0 0 1 13.07 10.41A3.39 3.39 0 0 0 15 11A3.5 3.5 0 0 0 15 4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AccountMultipleIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon alert-circle-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AlertCircleOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Modal\n\t\tsize=\"normal\"\n\t\t@close=\"onCancel\">\n\t\t<!-- Wrapper for content & navigation -->\n\t\t<div class=\"entity-picker\">\n\t\t\t<!-- Search -->\n\t\t\t<div class=\"entity-picker__new\">\n\t\t\t\t<input\n\t\t\t\t\tref=\"input\"\n\t\t\t\t\tv-model=\"circleName\"\n\t\t\t\t\t:placeholder=\"t('contacts', 'New team name')\"\n\t\t\t\t\tclass=\"entity-picker__new-input\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t@keypress.enter=\"onSubmit\">\n\t\t\t</div>\n\n\t\t\t<div class=\"entity-picker__content\">\n\t\t\t\t<p> {{ CIRCLE_DESC }}</p>\n\t\t\t\t<br>\n\n\t\t\t\t<!-- Personal circle, TODO: IMPLEMENT -->\n\t\t\t\t<template v-if=\"false\">\n\t\t\t\t\t<CheckboxRadioSwitch\n\t\t\t\t\t\tv-model:model-value=\"isPersonal\"\n\t\t\t\t\t\t:disabled=\"loading !== false\">\n\t\t\t\t\t\t{{ t('contacts', 'Personal team') }}\n\t\t\t\t\t</CheckboxRadioSwitch>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{{ t('contacts', 'This team will only be visible to you. Other members will not be able to see or use it.') }}\n\t\t\t\t\t</p>\n\t\t\t\t</template>\n\n\t\t\t\t<!-- Local circle -->\n\t\t\t\t<template v-if=\"isGlobalScale\">\n\t\t\t\t\t<CheckboxRadioSwitch\n\t\t\t\t\t\tv-model:model-value=\"isLocal\"\n\t\t\t\t\t\t:disabled=\"loading !== false\">\n\t\t\t\t\t\t{{ t('contacts', 'Local team') }}\n\t\t\t\t\t</CheckboxRadioSwitch>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{{ t('contacts', 'This team will not be shared with the other instances of the global scale') }}\n\t\t\t\t\t</p>\n\t\t\t\t</template>\n\t\t\t</div>\n\n\t\t\t<div class=\"entity-picker__navigation\">\n\t\t\t\t<button\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\tclass=\"navigation__button-left\"\n\t\t\t\t\t@click=\"onCancel\">\n\t\t\t\t\t{{ t('contacts', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\t:disabled=\"isEmptyName || loading\"\n\t\t\t\t\tclass=\"navigation__button-right primary\"\n\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t{{ t('contacts', 'Create team') }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</Modal>\n</template>\n\n<script>\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport {\n\tNcCheckboxRadioSwitch as CheckboxRadioSwitch,\n\tNcModal as Modal,\n} from '@nextcloud/vue'\nimport { CIRCLE_DESC } from '../../models/constants.ts'\n\nexport default {\n\tname: 'NewCircleIntro',\n\n\tcomponents: {\n\t\tCheckboxRadioSwitch,\n\t\tModal,\n\t},\n\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcircleName: '',\n\t\t\tisPersonal: false,\n\t\t\tisLocal: false,\n\n\t\t\tCIRCLE_DESC,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisEmptyName() {\n\t\t\treturn this.circleName.trim() === ''\n\t\t},\n\n\t\tisGlobalScale() {\n\t\t\treturn getCapabilities().circles?.status?.globalScale !== false\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.$nextTick(() => {\n\t\t\tthis.$refs.input.focus()\n\t\t\tthis.$refs.input.select()\n\t\t})\n\t},\n\n\tmethods: {\n\t\tonCancel() {\n\t\t\t/**\n\t\t\t * Emitted when the user closed or cancelled\n\t\t\t */\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tonSubmit() {\n\t\t\t/**\n\t\t\t * Emitted when user submit the form\n\t\t\t *\n\t\t\t * @type {Array} the selected entities\n\t\t\t */\n\t\t\tthis.$emit('submit', this.circleName, this.isPersonal, this.isLocal)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use 'sass:math';\n\n// Dialog variables\n$dialog-padding: 20px;\n$dialog-height: 480px;\n$entity-spacing: 4px;\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: math.div($clickable-area - $icon-size, 2);\n\n.entity-picker {\n\tposition: relative;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\tmin-height: $dialog-height;\n\theight: 100%;\n\tpadding: $dialog-padding;\n\tbox-sizing: border-box;\n\n\t&__new {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t&-input {\n\t\t\twidth: 100%;\n\t\t\theight: $clickable-area - $entity-spacing !important;\n\t\t\tmargin: $entity-spacing 0;\n\t\t\tfont-size: 16px;\n\t\t\tline-height: $clickable-area - $entity-spacing;\n\t\t}\n\t}\n\n\t&__content {\n\t\tflex: 1 1 100%;\n\t\tpadding: 20px 0;\n\t}\n\n\t&__navigation {\n\t\tz-index: 1;\n\t\tdisplay: flex;\n\t\t// define our base width, no shrinkage\n\t\tflex: 0 0;\n\t\tjustify-content: space-between;\n\t\t// Same as above\n\t\twidth: 100%;\n\t\tbox-shadow: 0 -10px 5px var(--color-main-background);\n\t\t&__button-right {\n\t\t\tmargin-inline-start: auto;\n\t\t}\n\t}\n}\n\n// Make the checkboxes span full width\n:deep(.checkbox-radio-switch__label) {\n\twidth: 100%;\n}\n\n// Properly center Entity Picker empty content\n.empty-content {\n\tmargin: 0;\n}\n\n/** Size full in the modal component doesn't have border radius, this adds\nit back */\n:deep(.modal-container) {\n\tborder-radius: var(--border-radius-large) !important;\n}\n\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<span\n\t\t:aria-hidden=\"!title\"\n\t\t:aria-label=\"title\"\n\t\tclass=\"material-design-icon icon-recently-contacted\"\n\t\trole=\"img\">\n\t\t<svg\n\t\t\t:fill=\"fillColor\"\n\t\t\tclass=\"material-design-icon__svg\"\n\t\t\t:width=\"size\"\n\t\t\t:height=\"size\"\n\t\t\tviewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n\t\t\t<path d=\"M14 3v10h1V3zM12 13h1V3h-1zM1.7 3a.7.7 0 00-.7.7v8.6c0 .4.3.7.7.7h8.6c.4 0 .7-.3.7-.7V3.7a.7.7 0 00-.7-.7zM6 5a1.6 1.6 0 010 3.2A1.6 1.6 0 016 5zm0 4.4c1 0 3.2.6 3.2 1.6v.6H2.8V11c0-1 2.1-1.6 3.2-1.6z\" />\n\t\t</svg>\n\t</span>\n</template>\n\n<script>\nexport default {\n\tname: 'IconRecentlyContacted',\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\tsize: {\n\t\t\ttype: Number,\n\t\t\tdefault: 20,\n\t\t},\n\n\t\tfillColor: {\n\t\t\ttype: String,\n\t\t\tdefault: 'currentColor',\n\t\t},\n\t},\n}\n</script>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon account-star-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M15,4A4,4 0 0,1 19,8A4,4 0 0,1 15,12A4,4 0 0,1 11,8A4,4 0 0,1 15,4M15,5.9A2.1,2.1 0 0,0 12.9,8A2.1,2.1 0 0,0 15,10.1C16.16,10.1 17.1,9.16 17.1,8C17.1,6.84 16.16,5.9 15,5.9M15,13C17.67,13 23,14.33 23,17V20H7V17C7,14.33 12.33,13 15,13M15,14.9C12,14.9 8.9,16.36 8.9,17V18.1H21.1V17C21.1,16.36 17.97,14.9 15,14.9M5,13.28L2.5,14.77L3.18,11.96L1,10.08L3.87,9.83L5,7.19L6.11,9.83L9,10.08L6.8,11.96L7.45,14.77L5,13.28Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AccountStarOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon location-enter-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M14 12L10 8V11H2V13H10V16M22 12A10 10 0 0 1 2.46 15H4.59A8 8 0 1 0 4.59 9H2.46A10 10 0 0 1 22 12Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"LocationEnterIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<AppNavigationItem\n\t\t:key=\"circle.key\"\n\t\t:name=\"circle.displayName\"\n\t\t:to=\"circle.router\">\n\t\t<template #icon>\n\t\t\t<AccountStar v-if=\"circle.isOwner\" :size=\"20\" />\n\t\t\t<AccountGroupOutline v-else :size=\"20\" />\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<ActionText v-if=\"loadingAction\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconLoading :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('contacts', 'Loading …') }}\n\t\t\t</ActionText>\n\t\t\t<template v-else>\n\t\t\t\t<ActionButton\n\t\t\t\t\tv-if=\"circle.canManageMembers\"\n\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t@click=\"addMemberToCircle\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconCog :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Manage team') }}\n\t\t\t\t</ActionButton>\n\n\t\t\t\t<!-- copy circle link -->\n\t\t\t\t<ActionLink\n\t\t\t\t\t:href=\"circleUrl\"\n\t\t\t\t\t:icon=\"copyLinkIcon\"\n\t\t\t\t\t@click.stop.prevent=\"copyToClipboard(circleUrl)\">\n\t\t\t\t\t{{ copyButtonText }}\n\t\t\t\t</ActionLink>\n\n\t\t\t\t<!-- leave circle -->\n\t\t\t\t<ActionButton\n\t\t\t\t\tv-if=\"circle.canLeave\"\n\t\t\t\t\t@click=\"confirmLeaveCircle\">\n\t\t\t\t\t{{ t('contacts', 'Leave team') }}\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<ExitToApp :size=\"16\" />\n\t\t\t\t\t</template>\n\t\t\t\t</ActionButton>\n\n\t\t\t\t<!-- join circle -->\n\t\t\t\t<ActionButton\n\t\t\t\t\tv-else-if=\"!circle.isMember && circle.canJoin\"\n\t\t\t\t\t:disabled=\"loadingJoin\"\n\t\t\t\t\t@click=\"joinCircle\">\n\t\t\t\t\t{{ joinButtonTitle }}\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<LocationEnter :size=\"16\" />\n\t\t\t\t\t</template>\n\t\t\t\t</ActionButton>\n\n\t\t\t\t<!-- delete circle -->\n\t\t\t\t<ActionButton\n\t\t\t\t\tv-if=\"circle.canDelete\"\n\t\t\t\t\t@click=\"confirmDeleteCircle\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Delete team') }}\n\t\t\t\t</ActionButton>\n\t\t\t</template>\n\t\t</template>\n\n\t\t<template #counter>\n\t\t\t<NcCounterBubble\n\t\t\t\tv-if=\"memberCount > 0\"\n\t\t\t\t:count=\"memberCount\" />\n\t\t</template>\n\t</AppNavigationItem>\n</template>\n\n<script>\nimport {\n\tNcActionButton as ActionButton,\n\tNcActionLink as ActionLink,\n\tNcActionText as ActionText,\n\tNcAppNavigationItem as AppNavigationItem,\n\tNcLoadingIcon as IconLoading,\n\tNcCounterBubble,\n} from '@nextcloud/vue'\nimport AccountGroupOutline from 'vue-material-design-icons/AccountGroupOutline.vue'\nimport AccountStar from 'vue-material-design-icons/AccountStarOutline.vue'\nimport IconCog from 'vue-material-design-icons/CogOutline.vue'\nimport ExitToApp from 'vue-material-design-icons/ExitToApp.vue'\nimport LocationEnter from 'vue-material-design-icons/LocationEnter.vue'\nimport IconDelete from 'vue-material-design-icons/TrashCanOutline.vue'\nimport CircleActionsMixin from '../../mixins/CircleActionsMixin.js'\nimport Circle from '../../models/circle.ts'\nimport UserGroup from '../../models/userGroup.ts'\n\nexport default {\n\tname: 'CircleNavigationItem',\n\n\tcomponents: {\n\t\tActionButton,\n\t\tActionLink,\n\t\tActionText,\n\t\tNcCounterBubble,\n\t\tAppNavigationItem,\n\t\tExitToApp,\n\t\tIconCog,\n\t\tIconDelete,\n\t\tLocationEnter,\n\t\tAccountStar,\n\t\tAccountGroupOutline,\n\t\tIconLoading,\n\t},\n\n\tmixins: [CircleActionsMixin],\n\n\tprops: {\n\t\tcircle: {\n\t\t\ttype: [Circle, UserGroup],\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tmemberCount() {\n\t\t\tconst count = Object.keys(this.circle?.members || []).length\n\n\t\t\t// If member list is empty, let's try the population initial count\n\t\t\tif (count === 0 && this.circle.population > 0) {\n\t\t\t\treturn this.circle.population\n\t\t\t}\n\n\t\t\treturn count\n\t\t},\n\t},\n}\n</script>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon share-variant-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18 16.08C17.24 16.08 16.56 16.38 16.04 16.85L8.91 12.7C8.96 12.47 9 12.24 9 12S8.96 11.53 8.91 11.3L15.96 7.19C16.5 7.69 17.21 8 18 8C19.66 8 21 6.66 21 5S19.66 2 18 2 15 3.34 15 5C15 5.24 15.04 5.47 15.09 5.7L8.04 9.81C7.5 9.31 6.79 9 6 9C4.34 9 3 10.34 3 12S4.34 15 6 15C6.79 15 7.5 14.69 8.04 14.19L15.16 18.34C15.11 18.55 15.08 18.77 15.08 19C15.08 20.61 16.39 21.91 18 21.91S20.92 20.61 20.92 19C20.92 17.39 19.61 16.08 18 16.08M18 4C18.55 4 19 4.45 19 5S18.55 6 18 6 17 5.55 17 5 17.45 4 18 4M6 13C5.45 13 5 12.55 5 12S5.45 11 6 11 7 11.45 7 12 6.55 13 6 13M18 20C17.45 20 17 19.55 17 19S17.45 18 18 18 19 18.45 19 19 18.55 20 18 20Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ShareVariantOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<li class=\"addressbook-sharee\">\n\t\t<IconLoading v-if=\"loading\" :size=\"20\" />\n\t\t<IconGroup v-else-if=\"sharee.isGroup && !loading\" />\n\t\t<IconUser v-else-if=\"!sharee.isGroup && !loading\" />\n\t\t<span\n\t\t\tclass=\"addressbook-sharee__identifier\"\n\t\t\t:title=\"sharee.displayName\">\n\t\t\t{{ sharee.displayName }}\n\t\t</span>\n\t\t<span class=\"addressbook-sharee__utils\">\n\t\t\t<input\n\t\t\t\t:id=\"uid\"\n\t\t\t\t:checked=\"writeable\"\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\tclass=\"checkbox\"\n\t\t\t\tname=\"editable\"\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\t@change=\"editSharee\">\n\t\t\t<label\n\t\t\t\t:for=\"uid\"\n\t\t\t\t:title=\"t('contacts', 'can edit')\">\n\t\t\t\t{{ t('contacts', 'can edit') }}\n\t\t\t</label>\n\t\t\t<NcButton\n\t\t\t\t:class=\"{ 'addressbook-sharee__utils--disabled': loading }\"\n\t\t\t\thref=\"#\"\n\t\t\t\ttitle=\"Delete\"\n\t\t\t\t@click=\"deleteSharee\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</span>\n\t</li>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport {\n\tNcLoadingIcon as IconLoading,\n\tNcButton,\n} from '@nextcloud/vue'\nimport IconGroup from 'vue-material-design-icons/AccountMultipleOutline.vue'\nimport IconUser from 'vue-material-design-icons/AccountOutline.vue'\nimport IconDelete from 'vue-material-design-icons/TrashCanOutline.vue'\n\nexport default {\n\tname: 'SettingsAddressbookSharee',\n\tcomponents: {\n\t\tNcButton,\n\t\tIconDelete,\n\t\tIconGroup,\n\t\tIconLoading,\n\t\tIconUser,\n\t},\n\n\tprops: {\n\t\taddressbook: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tsharee: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\twriteable() {\n\t\t\treturn this.sharee.writeable\n\t\t},\n\n\t\t// generated id for this sharee\n\t\tuid() {\n\t\t\treturn this.sharee.id + this.addressbook.id + Math.floor(Math.random() * 1000)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync deleteSharee() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeSharee', {\n\t\t\t\t\taddressbook: this.addressbook,\n\t\t\t\t\turi: this.sharee.uri,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(t('contacts', 'Unable to delete the share'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\tasync editSharee() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('toggleShareeWritable', {\n\t\t\t\t\taddressbook: this.addressbook,\n\t\t\t\t\turi: this.sharee.uri,\n\t\t\t\t\twriteable: !this.sharee.writeable,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(t('contacts', 'Unable to change permissions'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.addressbook-sharee__utils {\n\ttext-overflow: ellipsis;\n}\n\n.addressbook-sharee__utils label {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twidth: 107px;\n}\n\n:deep(.NcButton-vue--vue-secondary) {\n\tbackground-color: transparent;\n\tborder: none;\n\tbox-shadow: none;\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nconst isGroupSharingEnabled = loadState('contacts', 'isGroupSharingEnabled', false)\nexport default isGroupSharingEnabled\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Works like urldecode() from php\n *\n * @see https://www.php.net/manual/en/function.urldecode.php\n * @param {string} url The url to be decoded\n * @return {string} The decoded url\n */\nexport function urldecode(url) {\n\treturn decodeURIComponent(url.replace(/\\+/g, ' '))\n}\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"addressbook-shares\">\n\t\t<NcSelectUsers\n\t\t\tid=\"users-groups-search\"\n\t\t\t:options=\"usersOrGroups\"\n\t\t\t:searchable=\"true\"\n\t\t\t:internal-search=\"false\"\n\t\t\t:max-height=\"600\"\n\t\t\t:show-no-results=\"true\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:class=\"{ showContent: inputGiven, 'icon-loading': isLoading }\"\n\t\t\t:get-option-key=\"(option) => option.user\"\n\t\t\topen-direction=\"bottom\"\n\t\t\tlabel=\"displayName\"\n\t\t\t@search=\"findSharee\"\n\t\t\t@update:model-value=\"shareAddressbook\" />\n\t\t<!-- list of user or groups addressbook is shared with -->\n\t\t<ul v-if=\"addressbook.shares.length > 0\" class=\"addressbook-shares__list\">\n\t\t\t<AddressBookSharee\n\t\t\t\tv-for=\"sharee in addressbook.shares\"\n\t\t\t\t:key=\"sharee.uri\"\n\t\t\t\t:sharee=\"sharee\"\n\t\t\t\t:addressbook=\"addressbook\" />\n\t\t</ul>\n\t</div>\n</template>\n\n<script>\nimport { NcSelectUsers } from '@nextcloud/vue'\nimport debounce from 'debounce'\nimport AddressBookSharee from './SettingsAddressbookSharee.vue'\nimport client from '../../../services/cdav.js'\nimport isGroupSharingEnabled from '../../../services/isGroupSharingEnabled.js'\nimport { urldecode } from '../../../utils/url.js'\n\nexport default {\n\tname: 'SettingsAddressbookShare',\n\n\tcomponents: {\n\t\tNcSelectUsers,\n\t\tAddressBookSharee,\n\t},\n\n\tprops: {\n\t\taddressbook: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t},\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tisLoading: false,\n\t\t\tinputGiven: false,\n\t\t\tusersOrGroups: [],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tplaceholder() {\n\t\t\tif (isGroupSharingEnabled) {\n\t\t\t\treturn t('contacts', 'Share with users or groups')\n\t\t\t} else {\n\t\t\t\treturn t('contacts', 'Share with users')\n\t\t\t}\n\t\t},\n\n\t\tnoResult() {\n\t\t\treturn t('contacts', 'No users or groups')\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// This ensures that the multiselect input is in focus as soon as the user clicks share\n\t\tdocument.getElementById('users-groups-search').focus()\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Share addressbook\n\t\t *\n\t\t * @param {object} data destructuring object\n\t\t * @param {string} data.user the userId\n\t\t * @param {string} data.displayName the displayName\n\t\t * @param {string} data.uri the sharing principalScheme uri\n\t\t * @param {boolean} data.isGroup is this a group ?\n\t\t */\n\t\tshareAddressbook({ user, displayName, uri, isGroup }) {\n\t\t\tthis.$store.dispatch('shareAddressbook', { addressbook: this.addressbook, user, displayName, uri, isGroup })\n\t\t},\n\n\t\t/**\n\t\t * Use the cdav client call to find matches to the query from the existing Users & Groups\n\t\t *\n\t\t * @param {string} query\n\t\t */\n\t\tfindSharee: debounce(async function(query) {\n\t\t\tthis.isLoading = true\n\t\t\tthis.usersOrGroups = []\n\t\t\tif (query.length > 0) {\n\t\t\t\tconst results = await client.principalPropertySearchByDisplayname(query)\n\t\t\t\tthis.usersOrGroups = results\n\t\t\t\t\t.filter((result) => {\n\t\t\t\t\t\tconst allowedCalendarUserTypes = ['INDIVIDUAL']\n\t\t\t\t\t\tif (isGroupSharingEnabled) {\n\t\t\t\t\t\t\tallowedCalendarUserTypes.push('GROUP')\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn allowedCalendarUserTypes.includes(result.calendarUserType)\n\t\t\t\t\t\t\t&& !this.addressbook.shares.some((share) => share.uri === result.principalScheme)\n\t\t\t\t\t})\n\t\t\t\t\t.map((result) => {\n\t\t\t\t\t\tconst isGroup = result.calendarUserType === 'GROUP'\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tuser: urldecode(result[isGroup ? 'groupId' : 'userId']),\n\t\t\t\t\t\t\tdisplayName: result.displayname,\n\t\t\t\t\t\t\ticon: isGroup ? 'icon-group' : 'icon-user',\n\t\t\t\t\t\t\turi: urldecode(result.principalScheme),\n\t\t\t\t\t\t\tisGroup,\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\tthis.isLoading = false\n\t\t\t\tthis.inputGiven = true\n\t\t\t} else {\n\t\t\t\tthis.inputGiven = false\n\t\t\t\tthis.isLoading = false\n\t\t\t}\n\t\t}, 500),\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.addressbook-shares__list {\n\tmargin-inline-start: calc(var(--default-grid-baseline) * -2);\n\twidth: 282px;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div class=\"settings-addressbook-list\">\n\t\t<IconContactPlus class=\"settings-line__icon\" />\n\t\t<li :class=\"{ 'addressbook--disabled': !addressbook.enabled }\" class=\"addressbook\">\n\t\t\t<div class=\"addressbook__content\">\n\t\t\t\t<!-- addressbook name -->\n\t\t\t\t<span class=\"addressbook__name\" :title=\"addressbook.displayName\">\n\t\t\t\t\t{{ addressbook.enabled ? addressbook.displayName : t('contacts', '{addressbookname} (Hidden)', { addressbookname: addressbook.displayName }) }}\n\t\t\t\t</span>\n\n\t\t\t\t<div v-if=\"addressbook.dav.description\" class=\"addressbook__description\">\n\t\t\t\t\t{{ addressbook.dav.description }}\n\t\t\t\t</div>\n\t\t\t\t<!-- counters -->\n\t\t\t\t<div v-if=\"addressbook.enabled\" class=\"addressbook__count-wrapper\">\n\t\t\t\t\t<span class=\"addressbook__count\">{{ n('contacts', '%n contact', '%n contacts', contactsCount) }}</span>\n\t\t\t\t\t<span class=\"addressbook__count\">- {{ n('contacts', '%n group', '%n groups', groupsCount) }}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- sharing Ncbutton -->\n\t\t\t<NcButton\n\t\t\t\tv-if=\"!addressbook.readOnly && !isSharedWithMe\"\n\t\t\t\tv-tooltip.top=\"sharedWithTooltip\"\n\t\t\t\t:class=\"{ 'addressbook__share--shared': hasShares }\"\n\t\t\t\t:name=\"sharedWithTooltip\"\n\t\t\t\thref=\"#\"\n\t\t\t\tclass=\"addressbook__share\"\n\t\t\t\t@click=\"toggleShare\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconShare :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\n\t\t\t<!-- popovermenu -->\n\t\t\t<Actions class=\"addressbook__menu\" menu-align=\"right\">\n\t\t\t\t<!-- copy addressbook link -->\n\t\t\t\t<ActionLink\n\t\t\t\t\t:href=\"addressbook.url\"\n\t\t\t\t\t:icon=\"copyLinkIcon\"\n\t\t\t\t\t@click.stop.prevent=\"copyToClipboard(addressbookUrl)\">\n\t\t\t\t\t{{ copyNcButtonText }}\n\t\t\t\t</ActionLink>\n\n\t\t\t\t<!-- download addressbook -->\n\t\t\t\t<ActionLink :href=\"addressbook.url + '?export'\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconDownload :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Download') }}\n\t\t\t\t</ActionLink>\n\n\t\t\t\t<template v-if=\"addressbook.writeProps\">\n\t\t\t\t\t<!-- enable/disable addressbook -->\n\t\t\t\t\t<ActionCheckbox\n\t\t\t\t\t\tv-if=\"!toggleEnabledLoading\"\n\t\t\t\t\t\t:model-value=\"enabled\"\n\t\t\t\t\t\t@update:model-value=\"toggleAddressbookEnabled\">\n\t\t\t\t\t\t{{ t('contacts', 'Show') }}\n\t\t\t\t\t</ActionCheckbox>\n\t\t\t\t\t<ActionButton v-else>\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconLoading :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('contacts', 'Show') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</template>\n\n\t\t\t\t<template v-if=\"!addressbook.readOnly\">\n\t\t\t\t\t<!-- rename addressbook -->\n\t\t\t\t\t<ActionButton\n\t\t\t\t\t\tv-if=\"!editingName\"\n\t\t\t\t\t\t@click.stop.prevent=\"renameAddressbook\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconRename :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('contacts', 'Rename') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionInput\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\tref=\"renameInput\"\n\t\t\t\t\t\t:disabled=\"renameLoading\"\n\t\t\t\t\t\t:value=\"addressbook.displayName\"\n\t\t\t\t\t\t@submit=\"updateAddressbookName\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconLoading v-if=\"renameLoading\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconRename :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</ActionInput>\n\t\t\t\t</template>\n\t\t\t\t<!-- delete addressbook -->\n\t\t\t\t<ActionButton\n\t\t\t\t\tv-if=\"hasMultipleAddressbooks && addressbook.owner !== principalUrl && addressbook.owner !== '/remote.php/dav/principals/system/system/'\"\n\t\t\t\t\t@click=\"confirmUnshare\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLoading v-if=\"deleteAddressbookLoading\" :size=\"20\" />\n\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Unshare from me') }}\n\t\t\t\t</ActionButton>\n\t\t\t\t<ActionButton\n\t\t\t\t\tv-else-if=\"hasMultipleAddressbooks && addressbook.owner !== '/remote.php/dav/principals/system/system/'\"\n\t\t\t\t\t@click=\"confirmDeletion\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLoading v-if=\"deleteAddressbookLoading\" :size=\"20\" />\n\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Delete') }}\n\t\t\t\t</ActionButton>\n\t\t\t</Actions>\n\t\t\t<!-- sharing input -->\n\t\t\t<ShareAddressBook v-if=\"shareOpen && !addressbook.readOnly\" :addressbook=\"addressbook\" />\n\t\t</li>\n\t</div>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport {\n\tNcActionButton as ActionButton,\n\tNcActionCheckbox as ActionCheckbox,\n\tNcActionInput as ActionInput,\n\tNcActionLink as ActionLink,\n\tNcActions as Actions,\n\tNcLoadingIcon as IconLoading,\n\tNcButton,\n} from '@nextcloud/vue'\nimport IconContactPlus from 'vue-material-design-icons/AccountMultiplePlusOutline.vue'\nimport IconRename from 'vue-material-design-icons/PencilOutline.vue'\nimport IconShare from 'vue-material-design-icons/ShareVariantOutline.vue'\nimport IconDelete from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconDownload from 'vue-material-design-icons/TrayArrowDown.vue'\nimport ShareAddressBook from './SettingsAddressbookShare.vue'\nimport CopyToClipboardMixin from '../../../mixins/CopyToClipboardMixin.js'\nimport usePrincipalsStore from '../../../store/principals.js'\n\nexport default {\n\tname: 'SettingsAddressbook',\n\n\tcomponents: {\n\t\tActionButton,\n\t\tActionCheckbox,\n\t\tActionInput,\n\t\tActionLink,\n\t\tActions,\n\t\tNcButton,\n\t\tIconDelete,\n\t\tIconDownload,\n\t\tIconRename,\n\t\tIconContactPlus,\n\t\tIconShare,\n\t\tIconLoading,\n\t\tShareAddressBook,\n\t},\n\n\tmixins: [CopyToClipboardMixin],\n\n\tprops: {\n\t\taddressbook: {\n\t\t\ttype: Object,\n\t\t\tdefault() {\n\t\t\t\treturn {}\n\t\t\t},\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdeleteAddressbookLoading: false,\n\t\t\teditingName: false,\n\t\t\tmenuOpen: false,\n\t\t\trenameLoading: false,\n\t\t\tshareOpen: false,\n\t\t\ttoggleEnabledLoading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tenabled() {\n\t\t\treturn this.addressbook.enabled\n\t\t},\n\n\t\thasShares() {\n\t\t\treturn this.addressbook.shares.length > 0\n\t\t},\n\n\t\taddressbooks() {\n\t\t\treturn this.$store.getters.getAddressbooks\n\t\t},\n\n\t\thasMultipleAddressbooks() {\n\t\t\treturn this.addressbooks.length > 1\n\t\t},\n\n\t\t// info tooltip about number of shares\n\t\tsharedWithTooltip() {\n\t\t\treturn this.hasShares\n\t\t\t\t? n(\n\t\t\t\t\t\t'contacts',\n\t\t\t\t\t\t'Shared with {num} entity',\n\t\t\t\t\t\t'Shared with {num} entities',\n\t\t\t\t\t\tthis.addressbook.shares.length,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnum: this.addressbook.shares.length,\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: '' // disable the tooltip\n\t\t},\n\n\t\tcopyNcButtonText() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn this.copySuccess\n\t\t\t\t\t? t('contacts', 'Copied')\n\t\t\t\t\t: t('contacts', 'Cannot copy')\n\t\t\t}\n\t\t\treturn t('contacts', 'Copy link')\n\t\t},\n\n\t\taddressbookUrl() {\n\t\t\treturn window.location.origin + this.addressbook.url\n\t\t},\n\n\t\tcontacts() {\n\t\t\treturn Object.values(this.addressbook.contacts)\n\t\t},\n\n\t\tgroups() {\n\t\t\tconst allGroups = this.contacts\n\t\t\t\t.flatMap((contact) => contact.vCard.getAllProperties('categories').map((prop) => prop.getFirstValue()))\n\t\t\t// Deduplicate\n\t\t\treturn [...new Set(allGroups)]\n\t\t},\n\n\t\tcontactsCount() {\n\t\t\treturn this.contacts.length\n\t\t},\n\n\t\tgroupsCount() {\n\t\t\treturn this.groups.length\n\t\t},\n\n\t\tprincipalUrl() {\n\t\t\tconst principalsStore = usePrincipalsStore()\n\t\t\treturn principalsStore.currentUserPrincipal.principalUrl\n\t\t},\n\n\t\tisSharedWithMe() {\n\t\t\treturn this.addressbook.owner !== this.principalUrl\n\t\t},\n\t},\n\n\twatch: {\n\t\tmenuOpen() {\n\t\t\tif (this.menuOpen === false) {\n\t\t\t\tthis.editingName = false\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// required if popup needs to stay opened after menu click\n\t\tthis.popupItem = this.$el\n\t},\n\n\tmethods: {\n\t\tcloseMenu() {\n\t\t\tthis.menuOpen = false\n\t\t},\n\n\t\ttoggleMenu() {\n\t\t\tthis.menuOpen = !this.menuOpen\n\t\t},\n\n\t\ttoggleShare() {\n\t\t\tthis.shareOpen = !this.shareOpen\n\t\t},\n\n\t\tasync toggleAddressbookEnabled() {\n\t\t\t// change to loading status\n\t\t\tthis.toggleEnabledLoading = true\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('toggleAddressbookEnabled', this.addressbook)\n\t\t\t} catch (err) {\n\t\t\t\t// error handling\n\t\t\t\tconsole.error(err)\n\t\t\t\tshowError(t('contacts', 'Toggling of address book was not successful'))\n\t\t\t} finally {\n\t\t\t\t// stop loading status regardless of outcome\n\t\t\t\tthis.toggleEnabledLoading = false\n\t\t\t}\n\t\t},\n\n\t\tconfirmDeletion() {\n\t\t\twindow.OC.dialogs.confirm(\n\t\t\t\tt('contacts', 'This will delete the address book and every contacts within it'),\n\t\t\t\tt('contacts', 'Delete {addressbook}?', { addressbook: this.addressbook.displayName }),\n\t\t\t\tthis.deleteAddressbook,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\n\t\tconfirmUnshare() {\n\t\t\twindow.OC.dialogs.confirm(\n\t\t\t\tt('contacts', 'This will unshare the address book and every contacts within it'),\n\t\t\t\tt('contacts', 'Unshare {addressbook}?', { addressbook: this.addressbook.displayName }),\n\t\t\t\tthis.deleteAddressbook,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\n\t\tasync deleteAddressbook(confirm) {\n\t\t\tif (confirm) {\n\t\t\t\t// change to loading status\n\t\t\t\tthis.deleteAddressbookLoading = true\n\t\t\t\ttry {\n\t\t\t\t\tawait this.$store.dispatch('deleteAddressbook', this.addressbook)\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// error handling\n\t\t\t\t\tconsole.error(err)\n\t\t\t\t\tshowError(t('contacts', 'Deletion of address book was not successful.'))\n\t\t\t\t} finally {\n\t\t\t\t\t// stop loading status regardless of outcome\n\t\t\t\t\tthis.deleteAddressbookLoading = false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trenameAddressbook() {\n\t\t\tthis.editingName = true\n\t\t},\n\n\t\tasync updateAddressbookName() {\n\t\t\tconst addressbook = this.addressbook\n\t\t\t// New name for addressbook - inputed value from form\n\t\t\tconst newName = this.$refs.renameInput.$el.querySelector('input[type=\"text\"]').value\n\t\t\t// change to loading status\n\t\t\tthis.renameLoading = true\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('renameAddressbook', { addressbook, newName })\n\t\t\t} catch (err) {\n\t\t\t\t// error handling\n\t\t\t\tconsole.error(err)\n\t\t\t\tshowError(t('contacts', 'Renaming of address book was not successful.'))\n\t\t\t} finally {\n\t\t\t\tthis.editingName = false\n\t\t\t\t// stop loading status regardless of outcome\n\t\t\t\tthis.renameLoading = false\n\t\t\t\t// close popover menu\n\t\t\t\tthis.menuOpen = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.addressbook {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n\tpadding: var(--default-grid-baseline) 0;\n\n\t> .addressbook__content {\n\t\t+ a,\n\t\t+ div {\n\t\t\t// put actions at the end\n\t\t\tmargin-inline-start: auto;\n\t\t}\n\t}\n\n\t&__name {\n\t\tdisplay: block;\n\t\tflex: 0 1 auto;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tflex-direction: column;\n\t\tflex: 0 1 auto;\n\t\tmax-width: calc(100% - 2 * 44px);\n\t}\n\n\t&__description {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&__count-wrapper {\n\t\tdisplay: flex;\n\t}\n\n\t&__count {\n\t\tmargin-inline-start: calc(var(--default-grid-baseline) * 0.5);\n\t\tfont-size: smaller;\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&__count:not(:last-child) {\n\t\tmargin-inline-end: var(--default-grid-baseline);\n\t}\n\n\t&__share,\n\t&__menu .icon-more {\n\t\topacity: .5;\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\topacity: .7;\n\t\t}\n\t}\n\t&__share {\n\t\tbackground-color: transparent;\n\t\tborder: none;\n\t\tbox-shadow: none;\n\n\t\t&--shared {\n\t\t\topacity: .7;\n\t\t}\n\t}\n\t&--disabled &__name {\n\t\topacity: .5;\n\t}\n}\n\n.settings-addressbook-list {\n\tdisplay: flex;\n\twidth: 100%;\n\talign-items: center;\n\tgap: calc(var(--default-grid-baseline) * 2);\n\tpadding: calc(var(--default-grid-baseline) * 2) 0;\n\tborder-bottom: 1px solid var(--color-border);\n\n\t&:last-child {\n\t\tborder-bottom: none;\n\t}\n\n\t.settings-line__icon {\n\t\tflex-shrink: 0;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t.addressbook {\n\t\tflex: 1;\n\t\tpadding: 0;\n\t}\n\n\t.material-design-icon {\n\t\tjustify-content: flex-start;\n\t}\n}\n\n.addressbook-shares {\n\tpadding-top: calc(var(--default-grid-baseline) * 2);\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"import-contact\">\n\t\t<template v-if=\"!isNoAddressbookAvailable\">\n\t\t\t<NcButton class=\"import-contact__button-main\" @click=\"toggleModal\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconUpload :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('contacts', 'Import contacts') }}\n\t\t\t</NcButton>\n\t\t\t<Modal\n\t\t\t\tv-if=\"isOpened\"\n\t\t\t\tref=\"modal\"\n\t\t\t\tclass=\"import-contact__modal\"\n\t\t\t\t:name=\"t('contacts', 'Import contacts')\"\n\t\t\t\t@close=\"toggleModal\">\n\t\t\t\t<section class=\"import-contact__modal-addressbook\">\n\t\t\t\t\t<h2>{{ t('contacts', 'Import contacts') }}</h2>\n\t\t\t\t\t<NcSelect\n\t\t\t\t\t\tv-if=\"!isSingleAddressbook\"\n\t\t\t\t\t\tid=\"select-addressbook\"\n\t\t\t\t\t\tv-model=\"selectedAddressbookOption\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\t\t:options=\"options\"\n\t\t\t\t\t\t:disabled=\"isSingleAddressbook || isImporting\"\n\t\t\t\t\t\t:placeholder=\"t('contacts', 'Contacts')\"\n\t\t\t\t\t\tlabel=\"displayName\"\n\t\t\t\t\t\tclass=\"import-contact__modal-addressbook__select\">\n\t\t\t\t\t\t<template #selected-option=\"{ displayName }\">\n\t\t\t\t\t\t\t<span>{{ t('contacts', 'Import into the {addressbookName} address book', { addressbookName: displayName }) }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcSelect>\n\t\t\t\t</section>\n\t\t\t\t<section class=\"import-contact__modal-pick\">\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"contact-import\"\n\t\t\t\t\t\tref=\"contact-import-input\"\n\t\t\t\t\t\t:disabled=\"loading || isImporting\"\n\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\tclass=\"hidden-visually\"\n\t\t\t\t\t\t@change=\"processFile\">\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\t\tclass=\"import-contact__button import-contact__button--local\"\n\t\t\t\t\t\t@click=\"clickImportInput\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconUpload :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('contacts', 'Select local file') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\t\tclass=\"import-contact__button import-contact__button--files\"\n\t\t\t\t\t\t@click=\"openPicker\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconLoading v-if=\"loading\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconFolder :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('contacts', 'Import from files') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</section>\n\t\t\t</Modal>\n\t\t</template>\n\t\t<NcButton\n\t\t\tv-else\n\t\t\tid=\"upload\"\n\t\t\tfor=\"contact-import\"\n\t\t\tclass=\"button import-contact__button-disabled import-contact__multiselect-label import-contact__multiselect--no-select\">\n\t\t\t<template #icon>\n\t\t\t\t<IconError :size=\"20\" />\n\t\t\t</template>\n\t\t\t{{ t('contacts', 'Importing is disabled because there are no address books available') }}\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport axios from '@nextcloud/axios'\nimport { getFilePickerBuilder } from '@nextcloud/dialogs'\nimport { encodePath } from '@nextcloud/paths'\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport {\n\tNcLoadingIcon as IconLoading,\n\tNcModal as Modal,\n\tNcButton,\n\tNcSelect,\n} from '@nextcloud/vue'\nimport IconError from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport IconFolder from 'vue-material-design-icons/FolderOutline.vue'\nimport IconUpload from 'vue-material-design-icons/UploadOutline.vue'\n\nconst CancelToken = axios.CancelToken\n\nconst picker = getFilePickerBuilder(t('contacts', 'Choose a vCard file to import'))\n\t.setMultiSelect(false)\n\t.setType(1)\n\t.allowDirectories(false)\n\t.addMimeTypeFilter('text/vcard')\n\t.build()\n\nexport default {\n\tname: 'SettingsImportContacts',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tModal,\n\t\tNcSelect,\n\t\tIconUpload,\n\t\tIconError,\n\t\tIconFolder,\n\t\tIconLoading,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcancelRequest: () => {},\n\t\t\timportDestination: false,\n\t\t\tisOpened: false,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// getter for the store addressbooks\n\t\taddressbooks() {\n\t\t\treturn this.$store.getters.getAddressbooks\n\t\t},\n\n\t\t// filter out disabled and read-only addressbooks\n\t\tavailableAddressbooks() {\n\t\t\treturn this.addressbooks\n\t\t\t\t.filter((addressbook) => !addressbook.readOnly && addressbook.enabled)\n\t\t},\n\n\t\t// available options for the multiselect\n\t\toptions() {\n\t\t\treturn this.availableAddressbooks\n\t\t\t\t.map((addressbook) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: addressbook.id,\n\t\t\t\t\t\tdisplayName: addressbook.displayName,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\tselectedAddressbook: {\n\t\t\tget() {\n\t\t\t\tif (this.importDestination) {\n\t\t\t\t\treturn this.availableAddressbooks.find((addressbook) => addressbook.id === this.importDestination.id)\n\t\t\t\t}\n\t\t\t\t// default is first address book of the list\n\t\t\t\treturn this.availableAddressbooks[0]\n\t\t\t},\n\n\t\t\tset(value) {\n\t\t\t\tthis.importDestination = value\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * The selected address book option for the select component.\n\t\t * We can't use the actual address book here as it can't be converted to JSON.\n\t\t */\n\t\tselectedAddressbookOption: {\n\t\t\tget() {\n\t\t\t\treturn this.options.find((option) => option.id === this.selectedAddressbook.id)\n\t\t\t},\n\n\t\t\tset(value) {\n\t\t\t\tthis.selectedAddressbook = this.availableAddressbooks\n\t\t\t\t\t.find((addressbook) => addressbook.id === value.id)\n\t\t\t},\n\t\t},\n\n\t\t// disable multiselect when there is only one address book\n\t\tisSingleAddressbook() {\n\t\t\treturn this.options.length === 1\n\t\t},\n\n\t\tisNoAddressbookAvailable() {\n\t\t\treturn this.options.length < 1\n\t\t},\n\n\t\t// importing state store getter\n\t\timportState() {\n\t\t\treturn this.$store.getters.getImportState\n\t\t},\n\n\t\t// are we currently importing ?\n\t\tisImporting() {\n\t\t\treturn this.importState.stage !== 'default'\n\t\t},\n\t},\n\n\tasync mounted() {\n\t\t// Direct import check\n\t\tif (this.$route.name === 'import') {\n\t\t\tconst path = this.$route.query.file\n\t\t\tawait this.processLocalFile(path)\n\n\t\t\tthis.$router.push({\n\t\t\t\tname: 'group',\n\t\t\t\tparams: { selectedGroup: t('contacts', 'All contacts') },\n\t\t\t})\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Process input type file change\n\t\t *\n\t\t * @param {Event} event the input change event\n\t\t */\n\t\tprocessFile(event) {\n\t\t\tthis.loading = true\n\t\t\tthis.$store.dispatch('changeStage', 'parsing')\n\n\t\t\tconst file = event.target.files[0]\n\t\t\tconst reader = new FileReader()\n\n\t\t\tconst addressbook = this.selectedAddressbook\n\t\t\tthis.$store.dispatch('setAddressbook', addressbook.displayName)\n\n\t\t\treader.onload = () => {\n\t\t\t\tthis.isOpened = false\n\t\t\t\tthis.$store.dispatch('importContactsIntoAddressbook', { vcf: reader.result, addressbook })\n\n\t\t\t\t// reset input\n\t\t\t\tevent.target.value = ''\n\t\t\t\tthis.resetState()\n\t\t\t}\n\t\t\treader.readAsText(file)\n\t\t},\n\n\t\tasync processLocalFile(path) {\n\t\t\tconsole.debug('Importing', path)\n\t\t\ttry {\n\t\t\t\tthis.cancelRequest()\n\n\t\t\t\t// prepare cancel token for axios request\n\t\t\t\tconst source = CancelToken.source()\n\t\t\t\tthis.cancelRequest = source.cancel\n\n\t\t\t\tconst file = await axios.get(generateRemoteUrl(`dav/files/${getCurrentUser().uid}`) + encodePath(path), {\n\t\t\t\t\tcancelToken: source.token,\n\t\t\t\t})\n\n\t\t\t\tconst addressbook = this.selectedAddressbook\n\t\t\t\tthis.$store.dispatch('changeStage', 'parsing')\n\t\t\t\tthis.$store.dispatch('setAddressbook', addressbook.displayName)\n\n\t\t\t\tif (file.data) {\n\t\t\t\t\tawait this.$store.dispatch('importContactsIntoAddressbook', { vcf: file.data, addressbook })\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Something wrong happened while processing local file', error)\n\t\t\t}\n\t\t},\n\n\t\ttoggleModal() {\n\t\t\tthis.isOpened = !this.isOpened\n\t\t\t// cancel any ongoing request if closed\n\t\t\tif (!this.isOpened) {\n\t\t\t\tthis.cancelRequest()\n\t\t\t}\n\t\t},\n\n\t\tclickImportInput() {\n\t\t\tthis.$refs['contact-import-input'].click()\n\t\t},\n\n\t\t/**\n\t\t * Open nextcloud file picker\n\t\t */\n\t\tasync openPicker() {\n\t\t\ttry {\n\t\t\t\t// unlikely, but let's cancel any previous request\n\t\t\t\tthis.cancelRequest()\n\n\t\t\t\t// pick, retrieve & process file\n\t\t\t\tconst path = await picker.pick()\n\t\t\t\tif (path) {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\tawait this.processLocalFile(path)\n\t\t\t\t}\n\t\t\t\tthis.resetState()\n\t\t\t} catch (error) {\n\t\t\t\tthis.loading = false\n\t\t\t\tconsole.error('Something wrong happened while picking a file', error)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset default component state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.cancelRequest = () => {}\n\t\t\tthis.importDestination = false\n\t\t\tthis.isOpened = false\n\t\t\tthis.loading = false\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.import-contact {\n\t&__modal {\n\t\tsection {\n\t\t\tpadding: 22px;\n\t\t\t// only one padding bewteen sections\n\t\t\t&:not(:last-child) {\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\t\t&-pick {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-between;\n\t\t\tpadding-top: 0 !important;\n\t\t}\n\t}\n\n\t&__modal-addressbook {\n\t\t&__select {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t&__button {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 10px;\n\t\twidth: calc(50% - 20px);\n\t\tmargin: 10px 0;\n\t\t&-icon {\n\t\t\twidth: 32px;\n\t\t\theight: 32px;\n\t\t\tmargin-inline-end: 5px;\n\t\t}\n\t\t&-main {\n\t\t\twidth: 100% !important;\n\t\t\tmargin-inline-start: 0 !important;\n\t\t}\n\t\t&-disabled {\n\t\t\t// Wrap warning about disabled button instead of ellipsing it\n\t\t\t:deep(.button-vue__text) {\n\t\t\t\twhite-space: pre-wrap;\n\t\t\t}\n\t\t}\n\t\t&--cancel:not(:focus):not(:hover) {\n\t\t\tborder-color: transparent;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n}\n\n</style>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon loading-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,4V2A10,10 0 0,0 2,12H4A8,8 0 0,1 12,4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"LoadingIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"new-addressbook-entry\">\n\t\t<NcButton v-if=\"!modalOpen && !loading\" @click=\"openModal\">\n\t\t\t<template #icon>\n\t\t\t\t<IconAdd :size=\"20\" />\n\t\t\t</template>\n\t\t\t{{ t('contacts', 'New address book') }}\n\t\t</NcButton>\n\t\t<IconLoading v-if=\"loading\" :size=\"20\" />\n\n\t\t<NcModal v-if=\"modalOpen\" size=\"small\" @close=\"onModalCancel\">\n\t\t\t<div class=\"new-addressbook-modal\">\n\t\t\t\t<NcInputField\n\t\t\t\t\tv-model:model-value=\"displayName\"\n\t\t\t\t\tclass=\"new-addressbook\"\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\t:label=\"t('contacts', 'Add new address book')\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tspellcheck=\"false\" />\n\n\t\t\t\t<div class=\"new-addressbook-modal__buttons\">\n\t\t\t\t\t<NcButton variant=\"tertiary\" :disabled=\"loading\" @click=\"onModalCancel\">\n\t\t\t\t\t\t{{ t('contacts', 'Cancel') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton variant=\"primary\" :disabled=\"loading || inputErrorState\" @click=\"onModalSubmit\">\n\t\t\t\t\t\t{{ t('contacts', 'Add') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</NcModal>\n\t</div>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { NcButton, NcInputField, NcModal } from '@nextcloud/vue'\nimport IconLoading from 'vue-material-design-icons/Loading.vue'\nimport IconAdd from 'vue-material-design-icons/Plus.vue'\n\nexport default {\n\tname: 'SettingsNewAddressbook',\n\tcomponents: {\n\t\tNcInputField,\n\t\tIconAdd,\n\t\tIconLoading,\n\t\tNcButton,\n\t\tNcModal,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tdisplayName: '',\n\t\t\tmodalOpen: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tinputErrorState() {\n\t\t\tif (this.displayName === '') {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// no slashes!\n\t\t\treturn /[/\\\\]/.test(this.displayName)\n\t\t},\n\t},\n\n\tmethods: {\n\t\topenModal() {\n\t\t\tthis.modalOpen = true\n\t\t},\n\n\t\tonModalCancel() {\n\t\t\tthis.modalOpen = false\n\t\t\tthis.displayName = ''\n\t\t\tthis.loading = false\n\t\t},\n\n\t\tasync onModalSubmit() {\n\t\t\tawait this.addAddressbook()\n\t\t\tthis.modalOpen = false\n\t\t},\n\n\t\t/**\n\t\t * Add a new address book\n\t\t */\n\t\taddAddressbook() {\n\t\t\tif (this.displayName === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\tthis.$store.dispatch('appendAddressbook', { displayName: this.displayName })\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.displayName = ''\n\t\t\t\t\tthis.loading = false\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tshowError(t('contacts', 'An error occurred, unable to create the address book'))\n\t\t\t\t\tthis.loading = false\n\t\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.new-addressbook-entry {\n\tdisplay: flex;\n\twidth: 100%;\n\tjustify-content: stretch;\n\tmargin-top: calc(var(--default-grid-baseline) * 2);\n\n\t> * {\n\t\tflex-grow: 1;\n\t}\n}\n\n.new-addressbook-modal {\n\tpadding: calc(var(--default-grid-baseline) * 4);\n\tpadding-top: calc(var(--default-grid-baseline) * 8);\n\t> * {\n\t\twidth: 100%;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: end;\n\t\tgap: calc(var(--default-grid-baseline) * 2);\n\t\tmargin-top: calc(var(--default-grid-baseline) * 2);\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcFormBox>\n\t\t<div class=\"sort-contacts\">\n\t\t\t<label for=\"sort-by\" class=\"sort-contacts__label\">\n\t\t\t\t{{ t('contacts', 'Sort contacts by') }}\n\t\t\t</label>\n\t\t\t<NcSelect\n\t\t\t\tid=\"sort-by\"\n\t\t\t\tv-model=\"selected\"\n\t\t\t\t:searchable=\"false\"\n\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t:options=\"options\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\t@update:model-value=\"sortContacts\" />\n\t\t</div>\n\t</NcFormBox>\n</template>\n\n<script>\nimport { NcSelect } from '@nextcloud/vue'\nimport NcFormBox from '@nextcloud/vue/components/NcFormBox'\n\nexport default {\n\tname: 'SettingsSortContacts',\n\n\tcomponents: {\n\t\tNcFormBox,\n\t\tNcSelect,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tselected: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('contacts', 'First name'),\n\t\t\t\t\tvalue: 'firstName',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('contacts', 'Last name'),\n\t\t\t\t\tvalue: 'lastName',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('contacts', 'Phonetic first name'),\n\t\t\t\t\tvalue: 'phoneticFirstName',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('contacts', 'Phonetic last name'),\n\t\t\t\t\tvalue: 'phoneticLastName',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('contacts', 'Display name'),\n\t\t\t\t\tvalue: 'displayName',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('contacts', 'Last modified'),\n\t\t\t\t\tvalue: 'rev',\n\t\t\t\t},\n\t\t\t]\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tthis.selected = this.options.find((option) => option.value === this.$store.getters.getOrderKey) ?? null\n\t},\n\n\tmethods: {\n\t\tsortContacts(selected) {\n\t\t\tconst value = selected && selected.value ? selected.value : 'displayName'\n\t\t\tthis.$store.commit('setOrder', value)\n\t\t\tthis.$store.commit('sortContacts')\n\t\t\tlocalStorage.setItem('orderKey', value)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sort-contacts {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: calc(var(--default-grid-baseline) * 2);\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<AppSettingsDialog\n\t\tid=\"app-settings-dialog\"\n\t\tv-model:open=\"showSettings\"\n\t\t:name=\"t('contacts', 'Contacts settings')\"\n\t\t:show-navigation=\"true\">\n\t\t<AppSettingsSection id=\"general\" :name=\"t('contacts', 'General')\">\n\t\t\t<SettingsSortContacts />\n\n\t\t\t<NcFormBox>\n\t\t\t\t<NcFormBoxSwitch\n\t\t\t\t\tv-model=\"enableSocialSync\"\n\t\t\t\t\t:label=\"t('contacts', 'Update avatars from social media')\"\n\t\t\t\t\t:description=\"t('contacts', 'Refreshed once per week')\"\n\t\t\t\t\t:loading=\"enableSocialSyncLoading\"\n\t\t\t\t\t:disabled=\"enableSocialSyncLoading\"\n\t\t\t\t\t@update:model-value=\"toggleSocialSync\" />\n\t\t\t</NcFormBox>\n\n\t\t\t<SettingsImportContacts\n\t\t\t\t:addressbooks=\"addressbooks\"\n\t\t\t\t@clicked=\"onClickImport\"\n\t\t\t\t@file-loaded=\"onLoad\" />\n\t\t</AppSettingsSection>\n\n\t\t<AppSettingsSection id=\"address-books\" :name=\"t('contacts', 'Address books')\">\n\t\t\t<ul id=\"addressbook-list\" class=\"addressbook-list\">\n\t\t\t\t<SettingsAddressbook v-for=\"addressbook in addressbooks\" :key=\"addressbook.id\" :addressbook=\"addressbook\" />\n\t\t\t</ul>\n\t\t\t<SettingsNewAddressbook class=\"settings-new-addressbook\" :addressbooks=\"addressbooks\" />\n\t\t</AppSettingsSection>\n\t</AppSettingsDialog>\n</template>\n\n<script>\n\nimport axios from '@nextcloud/axios'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateUrl } from '@nextcloud/router'\nimport {\n\tNcAppSettingsDialog as AppSettingsDialog,\n\tNcAppSettingsSection as AppSettingsSection,\n} from '@nextcloud/vue'\nimport NcFormBox from '@nextcloud/vue/components/NcFormBox'\nimport NcFormBoxSwitch from '@nextcloud/vue/components/NcFormBoxSwitch'\nimport SettingsAddressbook from './Settings/SettingsAddressbook.vue'\nimport SettingsImportContacts from './Settings/SettingsImportContacts.vue'\nimport SettingsNewAddressbook from './Settings/SettingsNewAddressbook.vue'\nimport SettingsSortContacts from './Settings/SettingsSortContacts.vue'\n\nexport default {\n\tname: 'ContactsSettings',\n\tcomponents: {\n\t\tAppSettingsDialog,\n\t\tAppSettingsSection,\n\t\tNcFormBox,\n\t\tNcFormBoxSwitch,\n\t\tSettingsAddressbook,\n\t\tSettingsNewAddressbook,\n\t\tSettingsImportContacts,\n\t\tSettingsSortContacts,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\trequired: true,\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tallowSocialSync: loadState('contacts', 'allowSocialSync') !== 'no',\n\t\t\tenableSocialSync: loadState('contacts', 'enableSocialSync') !== 'no',\n\t\t\tenableSocialSyncLoading: false,\n\t\t\tshowSettings: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// store getters\n\t\taddressbooks() {\n\t\t\treturn this.$store.getters.getAddressbooks\n\t\t},\n\t},\n\n\twatch: {\n\t\tshowSettings(value) {\n\t\t\tif (!value) {\n\t\t\t\tthis.$emit('update:open', value)\n\t\t\t}\n\t\t},\n\n\t\tasync open(value) {\n\t\t\tif (value) {\n\t\t\t\tawait this.onOpen()\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonClickImport(event) {\n\t\t\tthis.$emit('clicked', event)\n\t\t},\n\n\t\tasync toggleSocialSync(value) {\n\t\t\tthis.enableSocialSyncLoading = true\n\n\t\t\tconst setting = value ? 'yes' : 'no'\n\t\t\ttry {\n\t\t\t\tawait axios.put(generateUrl('apps/contacts/api/v1/social/config/user/enableSocialSync'), {\n\t\t\t\t\tallow: setting,\n\t\t\t\t})\n\t\t\t\tshowSuccess(t('contacts', 'Setting saved'))\n\t\t\t} catch {\n\t\t\t\tshowError(t('contacts', 'Failed to save setting'))\n\t\t\t\tthis.enableSocialSync = !value\n\t\t\t} finally {\n\t\t\t\tthis.enableSocialSyncLoading = false\n\t\t\t}\n\t\t},\n\n\t\tonLoad() {\n\t\t\tthis.$emit('file-loaded', false)\n\t\t},\n\n\t\tasync onOpen() {\n\t\t\tthis.showSettings = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.addressbook-list {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0 0 calc(var(--default-grid-baseline) * 2);\n\n\t:deep(.settings-addressbook-list) {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: calc(var(--default-grid-baseline) * 2);\n\t\tpadding: calc(var(--default-grid-baseline) * 2) 0;\n\t\tborder-bottom: 1px solid var(--color-border);\n\n\t\t&:last-child {\n\t\t\tborder-bottom: none;\n\t\t}\n\n\t\t.settings-line__icon {\n\t\t\tflex-shrink: 0;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t.addressbook {\n\t\t\tflex: 1;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n}\n</style>\n","//download.js v4.2, by dandavis; 2008-2016. [MIT] see http://danml.com/download.html for tests/usage\n// v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime\n// v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs\n// v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support. 3.1 improved safari handling.\n// v4 adds AMD/UMD, commonJS, and plain browser support\n// v4.1 adds url download capability via solo URL argument (same domain/CORS only)\n// v4.2 adds semantic variable names, long (over 2MB) dataURL support, and hidden by default temp anchors\n// https://github.com/rndme/download\n\n(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.download = factory();\n }\n}(this, function () {\n\n\treturn function download(data, strFileName, strMimeType) {\n\n\t\tvar self = window, // this script is only for browsers anyway...\n\t\t\tdefaultMime = \"application/octet-stream\", // this default mime also triggers iframe downloads\n\t\t\tmimeType = strMimeType || defaultMime,\n\t\t\tpayload = data,\n\t\t\turl = !strFileName && !strMimeType && payload,\n\t\t\tanchor = document.createElement(\"a\"),\n\t\t\ttoString = function(a){return String(a);},\n\t\t\tmyBlob = (self.Blob || self.MozBlob || self.WebKitBlob || toString),\n\t\t\tfileName = strFileName || \"download\",\n\t\t\tblob,\n\t\t\treader;\n\t\t\tmyBlob= myBlob.call ? myBlob.bind(self) : Blob ;\n\t \n\t\tif(String(this)===\"true\"){ //reverse arguments, allowing download.bind(true, \"text/xml\", \"export.xml\") to act as a callback\n\t\t\tpayload=[payload, mimeType];\n\t\t\tmimeType=payload[0];\n\t\t\tpayload=payload[1];\n\t\t}\n\n\n\t\tif(url && url.length< 2048){ // if no filename and no mime, assume a url was passed as the only argument\n\t\t\tfileName = url.split(\"/\").pop().split(\"?\")[0];\n\t\t\tanchor.href = url; // assign href prop to temp anchor\n\t\t \tif(anchor.href.indexOf(url) !== -1){ // if the browser determines that it's a potentially valid url path:\n \t\tvar ajax=new XMLHttpRequest();\n \t\tajax.open( \"GET\", url, true);\n \t\tajax.responseType = 'blob';\n \t\tajax.onload= function(e){ \n\t\t\t\t download(e.target.response, fileName, defaultMime);\n\t\t\t\t};\n \t\tsetTimeout(function(){ ajax.send();}, 0); // allows setting custom ajax headers using the return:\n\t\t\t return ajax;\n\t\t\t} // end if valid url?\n\t\t} // end if url?\n\n\n\t\t//go ahead and download dataURLs right away\n\t\tif(/^data:([\\w+-]+\\/[\\w+.-]+)?[,;]/.test(payload)){\n\t\t\n\t\t\tif(payload.length > (1024*1024*1.999) && myBlob !== toString ){\n\t\t\t\tpayload=dataUrlToBlob(payload);\n\t\t\t\tmimeType=payload.type || defaultMime;\n\t\t\t}else{\t\t\t\n\t\t\t\treturn navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs:\n\t\t\t\t\tnavigator.msSaveBlob(dataUrlToBlob(payload), fileName) :\n\t\t\t\t\tsaver(payload) ; // everyone else can save dataURLs un-processed\n\t\t\t}\n\t\t\t\n\t\t}else{//not data url, is it a string with special needs?\n\t\t\tif(/([\\x80-\\xff])/.test(payload)){\t\t\t \n\t\t\t\tvar i=0, tempUiArr= new Uint8Array(payload.length), mx=tempUiArr.length;\n\t\t\t\tfor(i;i<mx;++i) tempUiArr[i]= payload.charCodeAt(i);\n\t\t\t \tpayload=new myBlob([tempUiArr], {type: mimeType});\n\t\t\t}\t\t \n\t\t}\n\t\tblob = payload instanceof myBlob ?\n\t\t\tpayload :\n\t\t\tnew myBlob([payload], {type: mimeType}) ;\n\n\n\t\tfunction dataUrlToBlob(strUrl) {\n\t\t\tvar parts= strUrl.split(/[:;,]/),\n\t\t\ttype= parts[1],\n\t\t\tdecoder= parts[2] == \"base64\" ? atob : decodeURIComponent,\n\t\t\tbinData= decoder( parts.pop() ),\n\t\t\tmx= binData.length,\n\t\t\ti= 0,\n\t\t\tuiArr= new Uint8Array(mx);\n\n\t\t\tfor(i;i<mx;++i) uiArr[i]= binData.charCodeAt(i);\n\n\t\t\treturn new myBlob([uiArr], {type: type});\n\t\t }\n\n\t\tfunction saver(url, winMode){\n\n\t\t\tif ('download' in anchor) { //html5 A[download]\n\t\t\t\tanchor.href = url;\n\t\t\t\tanchor.setAttribute(\"download\", fileName);\n\t\t\t\tanchor.className = \"download-js-link\";\n\t\t\t\tanchor.innerHTML = \"downloading...\";\n\t\t\t\tanchor.style.display = \"none\";\n\t\t\t\tdocument.body.appendChild(anchor);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tanchor.click();\n\t\t\t\t\tdocument.body.removeChild(anchor);\n\t\t\t\t\tif(winMode===true){setTimeout(function(){ self.URL.revokeObjectURL(anchor.href);}, 250 );}\n\t\t\t\t}, 66);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// handle non-a[download] safari as best we can:\n\t\t\tif(/(Version)\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari\\//.test(navigator.userAgent)) {\n\t\t\t\tif(/^data:/.test(url))\turl=\"data:\"+url.replace(/^data:([\\w\\/\\-\\+]+)/, defaultMime);\n\t\t\t\tif(!window.open(url)){ // popup blocked, offer direct download:\n\t\t\t\t\tif(confirm(\"Displaying New Document\\n\\nUse Save As... to download, then click back to return to this page.\")){ location.href=url; }\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t//do iframe dataURL download (old ch+FF):\n\t\t\tvar f = document.createElement(\"iframe\");\n\t\t\tdocument.body.appendChild(f);\n\n\t\t\tif(!winMode && /^data:/.test(url)){ // force a mime that will download:\n\t\t\t\turl=\"data:\"+url.replace(/^data:([\\w\\/\\-\\+]+)/, defaultMime);\n\t\t\t}\n\t\t\tf.src=url;\n\t\t\tsetTimeout(function(){ document.body.removeChild(f); }, 333);\n\n\t\t}//end saver\n\n\n\n\n\t\tif (navigator.msSaveBlob) { // IE10+ : (has Blob, but not a[download] or URL)\n\t\t\treturn navigator.msSaveBlob(blob, fileName);\n\t\t}\n\n\t\tif(self.URL){ // simple fast and modern way using Blob and URL:\n\t\t\tsaver(self.URL.createObjectURL(blob), true);\n\t\t}else{\n\t\t\t// handle non-Blob()+non-URL browsers:\n\t\t\tif(typeof blob === \"string\" || blob.constructor===toString ){\n\t\t\t\ttry{\n\t\t\t\t\treturn saver( \"data:\" + mimeType + \";base64,\" + self.btoa(blob) );\n\t\t\t\t}catch(y){\n\t\t\t\t\treturn saver( \"data:\" + mimeType + \",\" + encodeURIComponent(blob) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Blob but not URL support:\n\t\t\treader=new FileReader();\n\t\t\treader.onload=function(e){\n\t\t\t\tsaver(this.result);\n\t\t\t};\n\t\t\treader.readAsDataURL(blob);\n\t\t}\n\t\treturn true;\n\t}; /* end download() */\n}));\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\nvar hookCallback;\n\nfunction hooks() {\n return hookCallback.apply(null, arguments);\n}\n\n// This is done to register the method called with moment()\n// without creating circular dependencies.\nfunction setHookCallback(callback) {\n hookCallback = callback;\n}\n\nfunction isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n}\n\nfunction isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n}\n\nfunction hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n}\n\nfunction isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n}\n\nfunction isUndefined(input) {\n return input === void 0;\n}\n\nfunction isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n}\n\nfunction isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n}\n\nfunction map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n}\n\nfunction extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n}\n\nfunction createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n}\n\nfunction defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n}\n\nfunction getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n}\n\nvar some;\nif (Array.prototype.some) {\n some = Array.prototype.some;\n} else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n}\n\nfunction isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n}\n\nfunction createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n}\n\n// Plugins that add properties should also add the key here (null value),\n// so we can properly clone ourselves.\nvar momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\nfunction copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n}\n\n// Moment prototype object\nfunction Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n}\n\nfunction isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n}\n\nfunction warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n}\n\nfunction deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n}\n\nvar deprecations = {};\n\nfunction deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n}\n\nhooks.suppressDeprecationWarnings = false;\nhooks.deprecationHandler = null;\n\nfunction isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n}\n\nfunction set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n}\n\nfunction mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n}\n\nfunction Locale(config) {\n if (config != null) {\n this.set(config);\n }\n}\n\nvar keys;\n\nif (Object.keys) {\n keys = Object.keys;\n} else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n}\n\nvar defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n};\n\nfunction calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n}\n\nfunction zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n}\n\nvar formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n// token: 'M'\n// padded: ['MM', 2]\n// ordinal: 'Mo'\n// callback: function () { this.month() + 1 }\nfunction addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n}\n\nfunction removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n}\n\nfunction makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n}\n\n// format date using native date object\nfunction formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n}\n\nfunction expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n}\n\nvar defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n};\n\nfunction longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n}\n\nvar defaultInvalidDate = 'Invalid date';\n\nfunction invalidDate() {\n return this._invalidDate;\n}\n\nvar defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\nfunction ordinal(number) {\n return this._ordinal.replace('%d', number);\n}\n\nvar defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n};\n\nfunction relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n}\n\nfunction pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n}\n\nvar aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n};\n\nfunction normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n}\n\nfunction normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n}\n\nvar priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n};\n\nfunction getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n}\n\nvar match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\nregexes = {};\n\nfunction addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n}\n\nfunction getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n}\n\n// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\nfunction unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n}\n\nfunction regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nfunction absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n}\n\nfunction toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n}\n\nvar tokens = {};\n\nfunction addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n}\n\nfunction addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n}\n\nfunction addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n}\n\nfunction isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\nvar YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n// FORMATTING\n\naddFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n});\n\naddFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n});\n\naddFormatToken(0, ['YYYY', 4], 0, 'year');\naddFormatToken(0, ['YYYYY', 5], 0, 'year');\naddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n// PARSING\n\naddRegexToken('Y', matchSigned);\naddRegexToken('YY', match1to2, match2);\naddRegexToken('YYYY', match1to4, match4);\naddRegexToken('YYYYY', match1to6, match6);\naddRegexToken('YYYYYY', match1to6, match6);\n\naddParseToken(['YYYYY', 'YYYYYY'], YEAR);\naddParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n});\naddParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n});\naddParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n});\n\n// HELPERS\n\nfunction daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\n// HOOKS\n\nhooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n};\n\n// MOMENTS\n\nvar getSetYear = makeGetSet('FullYear', true);\n\nfunction getIsLeapYear() {\n return isLeapYear(this.year());\n}\n\nfunction makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n}\n\nfunction get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n}\n\nfunction set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n}\n\n// MOMENTS\n\nfunction stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n}\n\nfunction stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n}\n\nfunction mod(n, x) {\n return ((n % x) + x) % x;\n}\n\nvar indexOf;\n\nif (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n} else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n}\n\nfunction daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n}\n\n// FORMATTING\n\naddFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n});\n\naddFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n});\n\naddFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n});\n\n// PARSING\n\naddRegexToken('M', match1to2, match1to2NoLeadingZero);\naddRegexToken('MM', match1to2, match2);\naddRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n});\naddRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n});\n\naddParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n});\n\naddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n});\n\n// LOCALES\n\nvar defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\nfunction localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n}\n\nfunction localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n}\n\nfunction handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n}\n\nfunction localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n}\n\n// MOMENTS\n\nfunction setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n}\n\nfunction getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n}\n\nfunction getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n}\n\nfunction monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n}\n\nfunction monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n}\n\nfunction computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n}\n\nfunction createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n}\n\nfunction createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n}\n\n// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\nfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n}\n\nfunction weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n}\n\nfunction weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n}\n\n// FORMATTING\n\naddFormatToken('w', ['ww', 2], 'wo', 'week');\naddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n// PARSING\n\naddRegexToken('w', match1to2, match1to2NoLeadingZero);\naddRegexToken('ww', match1to2, match2);\naddRegexToken('W', match1to2, match1to2NoLeadingZero);\naddRegexToken('WW', match1to2, match2);\n\naddWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n);\n\n// HELPERS\n\n// LOCALES\n\nfunction localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n}\n\nvar defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n};\n\nfunction localeFirstDayOfWeek() {\n return this._week.dow;\n}\n\nfunction localeFirstDayOfYear() {\n return this._week.doy;\n}\n\n// MOMENTS\n\nfunction getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\nfunction getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('d', 0, 'do', 'day');\n\naddFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n});\n\naddFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n});\n\naddFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n});\n\naddFormatToken('e', 0, 0, 'weekday');\naddFormatToken('E', 0, 0, 'isoWeekday');\n\n// PARSING\n\naddRegexToken('d', match1to2);\naddRegexToken('e', match1to2);\naddRegexToken('E', match1to2);\naddRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n});\naddRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n});\naddRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n});\n\naddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n});\n\naddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n});\n\n// HELPERS\n\nfunction parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n}\n\nfunction parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n}\n\n// LOCALES\nfunction shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n}\n\nvar defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\nfunction localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n}\n\nfunction localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n}\n\nfunction localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n}\n\nfunction handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n}\n\nfunction localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n}\n\n// MOMENTS\n\nfunction getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n}\n\nfunction getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n}\n\nfunction getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n}\n\nfunction weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n}\n\nfunction weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n}\n\nfunction weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n}\n\nfunction computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n}\n\n// FORMATTING\n\nfunction hFormat() {\n return this.hours() % 12 || 12;\n}\n\nfunction kFormat() {\n return this.hours() || 24;\n}\n\naddFormatToken('H', ['HH', 2], 0, 'hour');\naddFormatToken('h', ['hh', 2], 0, hFormat);\naddFormatToken('k', ['kk', 2], 0, kFormat);\n\naddFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n});\n\naddFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n});\n\nfunction meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n}\n\nmeridiem('a', true);\nmeridiem('A', false);\n\n// PARSING\n\nfunction matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n}\n\naddRegexToken('a', matchMeridiem);\naddRegexToken('A', matchMeridiem);\naddRegexToken('H', match1to2, match1to2HasZero);\naddRegexToken('h', match1to2, match1to2NoLeadingZero);\naddRegexToken('k', match1to2, match1to2NoLeadingZero);\naddRegexToken('HH', match1to2, match2);\naddRegexToken('hh', match1to2, match2);\naddRegexToken('kk', match1to2, match2);\n\naddRegexToken('hmm', match3to4);\naddRegexToken('hmmss', match5to6);\naddRegexToken('Hmm', match3to4);\naddRegexToken('Hmmss', match5to6);\n\naddParseToken(['H', 'HH'], HOUR);\naddParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n});\naddParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n});\naddParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n});\naddParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n});\naddParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n});\n\n// LOCALES\n\nfunction localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n}\n\nvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\nfunction localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n}\n\nvar baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n};\n\n// internal storage for locale config files\nvar locales = {},\n localeFamilies = {},\n globalLocale;\n\nfunction commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n}\n\nfunction normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n}\n\n// pick the locale from the array\n// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\nfunction chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n}\n\nfunction isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n}\n\nfunction loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n}\n\n// This function will load locale and then set the global locale. If\n// no arguments are passed in, it will simply return the current global\n// locale key.\nfunction getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n}\n\nfunction defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n}\n\nfunction updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n}\n\n// returns locale data\nfunction getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n}\n\nfunction listLocales() {\n return keys(locales);\n}\n\nfunction checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n}\n\n// iso 8601 regex\n// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\nvar extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n// date from iso format\nfunction configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n}\n\nfunction extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n}\n\nfunction untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n}\n\nfunction checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n}\n\nfunction calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n}\n\n// date and time from ref 2822 format\nfunction configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n}\n\n// date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\nfunction configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n}\n\nhooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n);\n\n// Pick the first defined of two or three arguments.\nfunction defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n}\n\nfunction currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n}\n\n// convert an array to a date.\n// the array should mirror the parameters below\n// note: all values past the year are optional and will default to the lowest possible value.\n// [year, month, day , hour, minute, second, millisecond]\nfunction configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n}\n\nfunction dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n}\n\n// constant that refers to the ISO standard\nhooks.ISO_8601 = function () {};\n\n// constant that refers to the RFC 2822 form\nhooks.RFC_2822 = function () {};\n\n// date from string and format string\nfunction configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n}\n\nfunction meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n}\n\n// date from string and array of format strings\nfunction configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n}\n\nfunction configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n}\n\nfunction createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n}\n\nfunction prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n}\n\nfunction configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n}\n\nfunction createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n}\n\nfunction createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n}\n\nvar prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n// Pick a moment m from moments so that m[fn](other) is true for all\n// other. This relies on the function fn to be transitive.\n//\n// moments should either be an array of moment objects or an array, whose\n// first element is an array of moment objects.\nfunction pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n}\n\n// TODO: Use [].sort instead?\nfunction min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n}\n\nfunction max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n}\n\nvar now = function () {\n return Date.now ? Date.now() : +new Date();\n};\n\nvar ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n];\n\nfunction isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n}\n\nfunction isValid$1() {\n return this._isValid;\n}\n\nfunction createInvalid$1() {\n return createDuration(NaN);\n}\n\nfunction Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n}\n\nfunction isDuration(obj) {\n return obj instanceof Duration;\n}\n\nfunction absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n}\n\n// compare two arrays, return the number of differences\nfunction compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n}\n\n// FORMATTING\n\nfunction offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n}\n\noffset('Z', ':');\noffset('ZZ', '');\n\n// PARSING\n\naddRegexToken('Z', matchShortOffset);\naddRegexToken('ZZ', matchShortOffset);\naddParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n});\n\n// HELPERS\n\n// timezone chunker\n// '+10:00' > ['10', '00']\n// '-1530' > ['-15', '30']\nvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\nfunction offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n}\n\n// Return a moment from input, that is local/utc/zone equivalent to model.\nfunction cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n}\n\nfunction getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n}\n\n// HOOKS\n\n// This function will be called whenever a moment is mutated.\n// It is intended to keep the offset in sync with the timezone.\nhooks.updateOffset = function () {};\n\n// MOMENTS\n\n// keepLocalTime = true means only change the timezone, without\n// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n// +0200, so we adjust the time as needed, to be valid.\n//\n// Keeping the time actually adds/subtracts (one hour)\n// from the actual represented time. That is why we call updateOffset\n// a second time. In case it wants us to change the offset again\n// _changeInProgress == true case, then we have to adjust, because\n// there is no such time in the given timezone.\nfunction getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n}\n\nfunction getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n}\n\nfunction setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n}\n\nfunction setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n}\n\nfunction setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n}\n\nfunction hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n}\n\nfunction isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n}\n\nfunction isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n}\n\nfunction isLocal() {\n return this.isValid() ? !this._isUTC : false;\n}\n\nfunction isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n}\n\nfunction isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n}\n\n// ASP.NET json date format regex\nvar aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\nfunction createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n}\n\ncreateDuration.fn = Duration.prototype;\ncreateDuration.invalid = createInvalid$1;\n\nfunction parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n}\n\nfunction positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n}\n\nfunction momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n}\n\n// TODO: remove 'name' arg after deprecation is removed\nfunction createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n}\n\nfunction addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n}\n\nvar add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\nfunction isString(input) {\n return typeof input === 'string' || input instanceof String;\n}\n\n// type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\nfunction isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n}\n\nfunction isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n}\n\nfunction isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n}\n\nfunction isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n}\n\nfunction getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n}\n\nfunction calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n}\n\nfunction clone() {\n return new Moment(this);\n}\n\nfunction isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n}\n\nfunction isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n}\n\nfunction isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n}\n\nfunction isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n}\n\nfunction isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n}\n\nfunction isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n}\n\nfunction diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n}\n\nfunction monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n}\n\nhooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\nhooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\nfunction toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n}\n\nfunction toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n}\n\n/**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\nfunction inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n}\n\nfunction format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n}\n\nfunction from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n}\n\nfunction fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n}\n\nfunction to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n}\n\nfunction toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n}\n\n// If passed a locale key, it will set the locale for this\n// instance. Otherwise, it will return the locale configuration\n// variables for this instance.\nfunction locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n}\n\nvar lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n);\n\nfunction localeData() {\n return this._locale;\n}\n\nvar MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n// actual modulo - handles negative numbers (for dates before 1970):\nfunction mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n}\n\nfunction localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n}\n\nfunction utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n}\n\nfunction startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n}\n\nfunction endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n}\n\nfunction valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n}\n\nfunction unix() {\n return Math.floor(this.valueOf() / 1000);\n}\n\nfunction toDate() {\n return new Date(this.valueOf());\n}\n\nfunction toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n}\n\nfunction toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n}\n\nfunction toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n}\n\nfunction isValid$2() {\n return isValid(this);\n}\n\nfunction parsingFlags() {\n return extend({}, getParsingFlags(this));\n}\n\nfunction invalidAt() {\n return getParsingFlags(this).overflow;\n}\n\nfunction creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n}\n\naddFormatToken('N', 0, 0, 'eraAbbr');\naddFormatToken('NN', 0, 0, 'eraAbbr');\naddFormatToken('NNN', 0, 0, 'eraAbbr');\naddFormatToken('NNNN', 0, 0, 'eraName');\naddFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\naddFormatToken('y', ['y', 1], 'yo', 'eraYear');\naddFormatToken('y', ['yy', 2], 0, 'eraYear');\naddFormatToken('y', ['yyy', 3], 0, 'eraYear');\naddFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\naddRegexToken('N', matchEraAbbr);\naddRegexToken('NN', matchEraAbbr);\naddRegexToken('NNN', matchEraAbbr);\naddRegexToken('NNNN', matchEraName);\naddRegexToken('NNNNN', matchEraNarrow);\n\naddParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n);\n\naddRegexToken('y', matchUnsigned);\naddRegexToken('yy', matchUnsigned);\naddRegexToken('yyy', matchUnsigned);\naddRegexToken('yyyy', matchUnsigned);\naddRegexToken('yo', matchEraYearOrdinal);\n\naddParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\naddParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n});\n\nfunction localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n}\n\nfunction localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n}\n\nfunction localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n}\n\nfunction getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n}\n\nfunction getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n}\n\nfunction getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n}\n\nfunction getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n}\n\nfunction erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n}\n\nfunction erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n}\n\nfunction erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n}\n\nfunction matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n}\n\nfunction matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n}\n\nfunction matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n}\n\nfunction matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n}\n\nfunction computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n}\n\n// FORMATTING\n\naddFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n});\n\naddFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n});\n\nfunction addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n}\n\naddWeekYearFormatToken('gggg', 'weekYear');\naddWeekYearFormatToken('ggggg', 'weekYear');\naddWeekYearFormatToken('GGGG', 'isoWeekYear');\naddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n// ALIASES\n\n// PARSING\n\naddRegexToken('G', matchSigned);\naddRegexToken('g', matchSigned);\naddRegexToken('GG', match1to2, match2);\naddRegexToken('gg', match1to2, match2);\naddRegexToken('GGGG', match1to4, match4);\naddRegexToken('gggg', match1to4, match4);\naddRegexToken('GGGGG', match1to6, match6);\naddRegexToken('ggggg', match1to6, match6);\n\naddWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n);\n\naddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n});\n\n// MOMENTS\n\nfunction getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n}\n\nfunction getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n}\n\nfunction getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n}\n\nfunction getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n}\n\nfunction getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n}\n\nfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n}\n\n// FORMATTING\n\naddFormatToken('Q', 0, 'Qo', 'quarter');\n\n// PARSING\n\naddRegexToken('Q', match1);\naddParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n});\n\n// MOMENTS\n\nfunction getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n}\n\n// FORMATTING\n\naddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n// PARSING\n\naddRegexToken('D', match1to2, match1to2NoLeadingZero);\naddRegexToken('DD', match1to2, match2);\naddRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n});\n\naddParseToken(['D', 'DD'], DATE);\naddParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n});\n\n// MOMENTS\n\nvar getSetDayOfMonth = makeGetSet('Date', true);\n\n// FORMATTING\n\naddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n// PARSING\n\naddRegexToken('DDD', match1to3);\naddRegexToken('DDDD', match3);\naddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n});\n\n// HELPERS\n\n// MOMENTS\n\nfunction getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('m', ['mm', 2], 0, 'minute');\n\n// PARSING\n\naddRegexToken('m', match1to2, match1to2HasZero);\naddRegexToken('mm', match1to2, match2);\naddParseToken(['m', 'mm'], MINUTE);\n\n// MOMENTS\n\nvar getSetMinute = makeGetSet('Minutes', false);\n\n// FORMATTING\n\naddFormatToken('s', ['ss', 2], 0, 'second');\n\n// PARSING\n\naddRegexToken('s', match1to2, match1to2HasZero);\naddRegexToken('ss', match1to2, match2);\naddParseToken(['s', 'ss'], SECOND);\n\n// MOMENTS\n\nvar getSetSecond = makeGetSet('Seconds', false);\n\n// FORMATTING\n\naddFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n});\n\naddFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n});\n\naddFormatToken(0, ['SSS', 3], 0, 'millisecond');\naddFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n});\naddFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n});\naddFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n});\naddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n});\naddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n});\naddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n});\n\n// PARSING\n\naddRegexToken('S', match1to3, match1);\naddRegexToken('SS', match1to3, match2);\naddRegexToken('SSS', match1to3, match3);\n\nvar token, getSetMillisecond;\nfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n}\n\nfunction parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n}\n\nfor (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n}\n\ngetSetMillisecond = makeGetSet('Milliseconds', false);\n\n// FORMATTING\n\naddFormatToken('z', 0, 0, 'zoneAbbr');\naddFormatToken('zz', 0, 0, 'zoneName');\n\n// MOMENTS\n\nfunction getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n}\n\nfunction getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n}\n\nvar proto = Moment.prototype;\n\nproto.add = add;\nproto.calendar = calendar$1;\nproto.clone = clone;\nproto.diff = diff;\nproto.endOf = endOf;\nproto.format = format;\nproto.from = from;\nproto.fromNow = fromNow;\nproto.to = to;\nproto.toNow = toNow;\nproto.get = stringGet;\nproto.invalidAt = invalidAt;\nproto.isAfter = isAfter;\nproto.isBefore = isBefore;\nproto.isBetween = isBetween;\nproto.isSame = isSame;\nproto.isSameOrAfter = isSameOrAfter;\nproto.isSameOrBefore = isSameOrBefore;\nproto.isValid = isValid$2;\nproto.lang = lang;\nproto.locale = locale;\nproto.localeData = localeData;\nproto.max = prototypeMax;\nproto.min = prototypeMin;\nproto.parsingFlags = parsingFlags;\nproto.set = stringSet;\nproto.startOf = startOf;\nproto.subtract = subtract;\nproto.toArray = toArray;\nproto.toObject = toObject;\nproto.toDate = toDate;\nproto.toISOString = toISOString;\nproto.inspect = inspect;\nif (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n}\nproto.toJSON = toJSON;\nproto.toString = toString;\nproto.unix = unix;\nproto.valueOf = valueOf;\nproto.creationData = creationData;\nproto.eraName = getEraName;\nproto.eraNarrow = getEraNarrow;\nproto.eraAbbr = getEraAbbr;\nproto.eraYear = getEraYear;\nproto.year = getSetYear;\nproto.isLeapYear = getIsLeapYear;\nproto.weekYear = getSetWeekYear;\nproto.isoWeekYear = getSetISOWeekYear;\nproto.quarter = proto.quarters = getSetQuarter;\nproto.month = getSetMonth;\nproto.daysInMonth = getDaysInMonth;\nproto.week = proto.weeks = getSetWeek;\nproto.isoWeek = proto.isoWeeks = getSetISOWeek;\nproto.weeksInYear = getWeeksInYear;\nproto.weeksInWeekYear = getWeeksInWeekYear;\nproto.isoWeeksInYear = getISOWeeksInYear;\nproto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\nproto.date = getSetDayOfMonth;\nproto.day = proto.days = getSetDayOfWeek;\nproto.weekday = getSetLocaleDayOfWeek;\nproto.isoWeekday = getSetISODayOfWeek;\nproto.dayOfYear = getSetDayOfYear;\nproto.hour = proto.hours = getSetHour;\nproto.minute = proto.minutes = getSetMinute;\nproto.second = proto.seconds = getSetSecond;\nproto.millisecond = proto.milliseconds = getSetMillisecond;\nproto.utcOffset = getSetOffset;\nproto.utc = setOffsetToUTC;\nproto.local = setOffsetToLocal;\nproto.parseZone = setOffsetToParsedOffset;\nproto.hasAlignedHourOffset = hasAlignedHourOffset;\nproto.isDST = isDaylightSavingTime;\nproto.isLocal = isLocal;\nproto.isUtcOffset = isUtcOffset;\nproto.isUtc = isUtc;\nproto.isUTC = isUtc;\nproto.zoneAbbr = getZoneAbbr;\nproto.zoneName = getZoneName;\nproto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n);\nproto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n);\nproto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n);\nproto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n);\nproto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n);\n\nfunction createUnix(input) {\n return createLocal(input * 1000);\n}\n\nfunction createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n}\n\nfunction preParsePostFormat(string) {\n return string;\n}\n\nvar proto$1 = Locale.prototype;\n\nproto$1.calendar = calendar;\nproto$1.longDateFormat = longDateFormat;\nproto$1.invalidDate = invalidDate;\nproto$1.ordinal = ordinal;\nproto$1.preparse = preParsePostFormat;\nproto$1.postformat = preParsePostFormat;\nproto$1.relativeTime = relativeTime;\nproto$1.pastFuture = pastFuture;\nproto$1.set = set;\nproto$1.eras = localeEras;\nproto$1.erasParse = localeErasParse;\nproto$1.erasConvertYear = localeErasConvertYear;\nproto$1.erasAbbrRegex = erasAbbrRegex;\nproto$1.erasNameRegex = erasNameRegex;\nproto$1.erasNarrowRegex = erasNarrowRegex;\n\nproto$1.months = localeMonths;\nproto$1.monthsShort = localeMonthsShort;\nproto$1.monthsParse = localeMonthsParse;\nproto$1.monthsRegex = monthsRegex;\nproto$1.monthsShortRegex = monthsShortRegex;\nproto$1.week = localeWeek;\nproto$1.firstDayOfYear = localeFirstDayOfYear;\nproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\nproto$1.weekdays = localeWeekdays;\nproto$1.weekdaysMin = localeWeekdaysMin;\nproto$1.weekdaysShort = localeWeekdaysShort;\nproto$1.weekdaysParse = localeWeekdaysParse;\n\nproto$1.weekdaysRegex = weekdaysRegex;\nproto$1.weekdaysShortRegex = weekdaysShortRegex;\nproto$1.weekdaysMinRegex = weekdaysMinRegex;\n\nproto$1.isPM = localeIsPM;\nproto$1.meridiem = localeMeridiem;\n\nfunction get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n}\n\nfunction listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n}\n\n// ()\n// (5)\n// (fmt, 5)\n// (fmt)\n// (true)\n// (true, 5)\n// (true, fmt, 5)\n// (true, fmt)\nfunction listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n}\n\nfunction listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n}\n\nfunction listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n}\n\nfunction listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n}\n\nfunction listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n}\n\nfunction listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n}\n\ngetSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n});\n\n// Side effect imports\n\nhooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n);\nhooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n);\n\nvar mathAbs = Math.abs;\n\nfunction abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n}\n\nfunction addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n}\n\n// supports only 2.0-style add(1, 's') or add(duration)\nfunction add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n}\n\n// supports only 2.0-style subtract(1, 's') or subtract(duration)\nfunction subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n}\n\nfunction absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n}\n\nfunction bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n}\n\nfunction daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n}\n\nfunction monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n}\n\nfunction as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n}\n\nfunction makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n}\n\nvar asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\nfunction clone$1() {\n return createDuration(this);\n}\n\nfunction get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n}\n\nfunction makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n}\n\nvar milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\nfunction weeks() {\n return absFloor(this.days() / 7);\n}\n\nvar round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\nfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n}\n\nfunction relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n}\n\n// This function allows you to set the rounding function for relative time strings\nfunction getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n}\n\n// This function allows you to set a threshold for relative time strings\nfunction getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n}\n\nfunction humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n}\n\nvar abs$1 = Math.abs;\n\nfunction sign(x) {\n return (x > 0) - (x < 0) || +x;\n}\n\nfunction toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n}\n\nvar proto$2 = Duration.prototype;\n\nproto$2.isValid = isValid$1;\nproto$2.abs = abs;\nproto$2.add = add$1;\nproto$2.subtract = subtract$1;\nproto$2.as = as;\nproto$2.asMilliseconds = asMilliseconds;\nproto$2.asSeconds = asSeconds;\nproto$2.asMinutes = asMinutes;\nproto$2.asHours = asHours;\nproto$2.asDays = asDays;\nproto$2.asWeeks = asWeeks;\nproto$2.asMonths = asMonths;\nproto$2.asQuarters = asQuarters;\nproto$2.asYears = asYears;\nproto$2.valueOf = valueOf$1;\nproto$2._bubble = bubble;\nproto$2.clone = clone$1;\nproto$2.get = get$2;\nproto$2.milliseconds = milliseconds;\nproto$2.seconds = seconds;\nproto$2.minutes = minutes;\nproto$2.hours = hours;\nproto$2.days = days;\nproto$2.weeks = weeks;\nproto$2.months = months;\nproto$2.years = years;\nproto$2.humanize = humanize;\nproto$2.toISOString = toISOString$1;\nproto$2.toString = toISOString$1;\nproto$2.toJSON = toISOString$1;\nproto$2.locale = locale;\nproto$2.localeData = localeData;\n\nproto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n);\nproto$2.lang = lang;\n\n// FORMATTING\n\naddFormatToken('X', 0, 0, 'unix');\naddFormatToken('x', 0, 0, 'valueOf');\n\n// PARSING\n\naddRegexToken('x', matchSigned);\naddRegexToken('X', matchTimestamp);\naddParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n});\naddParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n});\n\n//! moment.js\n\nhooks.version = '2.30.1';\n\nsetHookCallback(createLocal);\n\nhooks.fn = proto;\nhooks.min = min;\nhooks.max = max;\nhooks.now = now;\nhooks.utc = createUTC;\nhooks.unix = createUnix;\nhooks.months = listMonths;\nhooks.isDate = isDate;\nhooks.locale = getSetGlobalLocale;\nhooks.invalid = createInvalid;\nhooks.duration = createDuration;\nhooks.isMoment = isMoment;\nhooks.weekdays = listWeekdays;\nhooks.parseZone = createInZone;\nhooks.localeData = getLocale;\nhooks.isDuration = isDuration;\nhooks.monthsShort = listMonthsShort;\nhooks.weekdaysMin = listWeekdaysMin;\nhooks.defineLocale = defineLocale;\nhooks.updateLocale = updateLocale;\nhooks.locales = listLocales;\nhooks.weekdaysShort = listWeekdaysShort;\nhooks.normalizeUnits = normalizeUnits;\nhooks.relativeTimeRounding = getSetRelativeTimeRounding;\nhooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\nhooks.calendarFormat = getCalendarFormat;\nhooks.prototype = proto;\n\n// currently HTML5 input type only supports 24-hour formats\nhooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n};\n\nexport default hooks;\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon folder-edit-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M4 18H12.13L11 19.13V20H4C2.9 20 2 19.11 2 18V6C2 4.89 2.89 4 4 4H10L12 6H20C21.1 6 22 6.89 22 8V10.15C21.74 10.06 21.46 10 21.17 10C20.75 10 20.36 10.11 20 10.3V8H4V18M22.85 13.47L21.53 12.15C21.33 11.95 21 11.95 20.81 12.15L19.83 13.13L21.87 15.17L22.85 14.19C23.05 14 23.05 13.67 22.85 13.47M13 19.96V22H15.04L21.17 15.88L19.13 13.83L13 19.96Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FolderEditOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios'\n\n/**\n * Append a group to a contact\n *\n * @param {Contact} contact the contact model\n * @param {string} groupName the group name\n */\nasync function removeContactFromGroup(contact, groupName) {\n\tconst foundGroups = contact.groups\n\n\tlet currentGroups = foundGroups.map((groupName) => encodeURIComponent(groupName))\n\n\tcurrentGroups = currentGroups.filter((e) => e !== encodeURIComponent(groupName))\n\n\treturn axios.patch(contact.url, {}, {\n\t\theaders: {\n\t\t\t'X-PROPERTY': 'CATEGORIES',\n\t\t\t'X-PROPERTY-REPLACE': currentGroups.join(','),\n\t\t},\n\t})\n}\n\nexport default removeContactFromGroup\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios'\n\n/**\n * Append a group to a contact\n *\n * @param {Contact} contact the contact model\n * @param {string} oldGroupName name that gets removed\n * @param {string} newGroupName name that gets added\n */\nasync function renameContactFromGroup(contact, oldGroupName, newGroupName) {\n\tconst foundGroups = contact.groups\n\tfoundGroups.push(newGroupName)\n\n\tlet currentGroups = foundGroups.map((groupName) => encodeURIComponent(groupName))\n\n\tcurrentGroups = currentGroups.filter((e) => e !== encodeURIComponent(oldGroupName))\n\n\treturn axios.patch(contact.url, {}, {\n\t\theaders: {\n\t\t\t'X-PROPERTY': 'CATEGORIES',\n\t\t\t'X-PROPERTY-REPLACE': currentGroups.join(','),\n\t\t},\n\t})\n}\n\nexport default renameContactFromGroup\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div\n\t\tv-if=\"!isEmpty\"\n\t\tclass=\"group-drop-area\"\n\t\tdata-testid=\"group-drop-area\"\n\t\t@drop=\"onDrop($event, group)\"\n\t\t@dragenter.prevent\n\t\t@dragover=\"onDragOver($event)\"\n\t\t@dragleave=\"onDragLeave($event)\">\n\t\t<AppNavigationItem\n\t\t\t:key=\"group.key\"\n\t\t\t:to=\"group.router\"\n\t\t\t:name=\"group.name\"\n\t\t\t:active=\"routeState === `group:${group.id}`\"\n\t\t\t@click=\"$emit('updateRouteState', `group:${group.id}`)\">\n\t\t\t<template #icon>\n\t\t\t\t<IconContactFilled v-if=\"routeState === `group:${group.id}`\" :size=\"20\" />\n\t\t\t\t<IconContact v-else :size=\"20\" />\n\t\t\t</template>\n\t\t\t<template #actions>\n\t\t\t\t<ActionButton\n\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t@click=\"addContactsToGroup(group)\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconAdd :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Add contacts') }}\n\t\t\t\t</ActionButton>\n\t\t\t\t<ActionInput\n\t\t\t\t\tv-model:model-value=\"newGroupName\"\n\t\t\t\t\t:disabled=\"renaming\"\n\t\t\t\t\t@submit=\"renameGroup\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLoading v-if=\"renaming\" :size=\"20\" />\n\t\t\t\t\t\t<IconRename v-else :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Rename') }}\n\t\t\t\t</ActionInput>\n\t\t\t\t<ActionButton\n\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t@click=\"downloadGroup(group)\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconDownload :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Export') }}\n\t\t\t\t</ActionButton>\n\t\t\t\t<ActionButton @click=\"emailGroup(group)\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconEmail :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Send email') }}\n\t\t\t\t</ActionButton>\n\t\t\t\t<ActionButton @click=\"emailGroup(group, 'bcc')\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconEmail :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Send email as BCC') }}\n\t\t\t\t</ActionButton>\n\t\t\t\t<ActionButton :disabled=\"deleting\" @click=\"deleteGroup\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLoading v-if=\"deleting\" :size=\"20\" />\n\t\t\t\t\t\t<IconDelete v-else :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('contacts', 'Delete') }}\n\t\t\t\t</ActionButton>\n\t\t\t</template>\n\n\t\t\t<template #counter>\n\t\t\t\t<NcCounterBubble\n\t\t\t\t\tv-if=\"group.contacts.length > 0\"\n\t\t\t\t\t:count=\"group.contacts.length\" />\n\t\t\t</template>\n\t\t</AppNavigationItem>\n\t</div>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { emit } from '@nextcloud/event-bus'\nimport {\n\tNcActionButton as ActionButton,\n\tNcActionInput as ActionInput,\n\tNcAppNavigationItem as AppNavigationItem,\n\tNcLoadingIcon as IconLoading,\n\tNcCounterBubble,\n} from '@nextcloud/vue'\nimport download from 'downloadjs'\nimport moment from 'moment'\nimport IconContactFilled from 'vue-material-design-icons/AccountMultiple.vue'\nimport IconContact from 'vue-material-design-icons/AccountMultipleOutline.vue'\nimport IconEmail from 'vue-material-design-icons/EmailOutline.vue'\nimport IconRename from 'vue-material-design-icons/FolderEditOutline.vue'\nimport IconAdd from 'vue-material-design-icons/Plus.vue'\nimport IconDelete from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconDownload from 'vue-material-design-icons/TrayArrowDown.vue'\nimport removeContactFromGroup from '../../services/removeContactFromGroup.js'\nimport renameContactFromGroup from '../../services/renameContactFromGroup.js'\n\nexport default {\n\tname: 'GroupNavigationItem',\n\n\tcomponents: {\n\t\tActionButton,\n\t\tNcCounterBubble,\n\t\tAppNavigationItem,\n\t\tActionInput,\n\t\tIconContact,\n\t\tIconAdd,\n\t\tIconDownload,\n\t\tIconEmail,\n\t\tIconRename,\n\t\tIconDelete,\n\t\tIconLoading,\n\t\tIconContactFilled,\n\t},\n\n\tprops: {\n\t\tgroup: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\trouteState: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tnewGroupName: '',\n\t\t\trenaming: false,\n\t\t\tdeleting: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcontacts() {\n\t\t\treturn this.$store.getters.getContacts\n\t\t},\n\n\t\tisEmpty() {\n\t\t\treturn this.group.contacts.length === 0\n\t\t},\n\t},\n\n\tmethods: {\n\t\tisInGroup(groups, groupId) {\n\t\t\treturn groups.includes(groupId)\n\t\t},\n\n\t\t/**\n\t\t * Drop contact on group handler.\n\t\t *\n\t\t * @param {object} event drop event\n\t\t * @param {object} group to add to dropped contact\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync onDrop(event, group) {\n\t\t\ttry {\n\t\t\t\tconst contactFromDropData = JSON.parse(event.dataTransfer.getData('item'))\n\t\t\t\tconst contactFromStore = this.$store.getters.getContact(Buffer.from(`${contactFromDropData.uid}~${contactFromDropData.addressbookId}`, 'utf-8').toString('base64'))\n\t\t\t\tif (contactFromStore && !this.isInGroup(contactFromStore.groups, group.id)) {\n\t\t\t\t\tconst contact = this.$store.getters.getContact(Buffer.from(`${contactFromDropData.uid}~${contactFromDropData.addressbookId}`, 'utf-8').toString('base64'))\n\t\t\t\t\tawait this.$store.dispatch('updateContactGroups', {\n\t\t\t\t\t\tgroupNames: [...contactFromStore.groups, group.id],\n\t\t\t\t\t\tcontact,\n\t\t\t\t\t})\n\t\t\t\t\tconst localContact = Object.assign(\n\t\t\t\t\t\tObject.create(Object.getPrototypeOf(contact)),\n\t\t\t\t\t\tcontact,\n\t\t\t\t\t)\n\t\t\t\t\tlocalContact.groups = [...contactFromStore.groups, group.id]\n\t\t\t\t\tawait this.$store.dispatch('updateContact', localContact)\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e)\n\t\t\t\tshowError('Tried to drop an invalid contact!')\n\t\t\t} finally {\n\t\t\t\tevent.target.closest('.group-drop-area').removeAttribute('drop-active')\n\t\t\t}\n\t\t},\n\n\t\t// Add marker for drop area\n\t\tonDragOver(event) {\n\t\t\tevent.preventDefault()\n\t\t\tevent.target.closest('.group-drop-area').setAttribute('drop-active', true)\n\t\t},\n\n\t\t// Remove marker from drop area\n\t\tonDragLeave(event) {\n\t\t\tevent.target.closest('.group-drop-area').removeAttribute('drop-active')\n\t\t},\n\n\t\t// Trigger the entity picker view\n\t\taddContactsToGroup() {\n\t\t\temit('contacts:group:append', this.group.name)\n\t\t},\n\n\t\t/**\n\t\t * Download group of contacts\n\t\t *\n\t\t * @param {object} group of contacts to be downloaded\n\t\t */\n\t\tdownloadGroup(group) {\n\t\t\t// get grouped contacts\n\t\t\tlet groupedContacts = {}\n\t\t\tgroup.contacts.forEach((key) => {\n\t\t\t\tconst id = this.contacts[key].addressbook.id\n\t\t\t\tgroupedContacts = {\n\t\t\t\t\t[id]: {\n\t\t\t\t\t\taddressbook: this.contacts[key].addressbook,\n\t\t\t\t\t\tcontacts: [],\n\t\t\t\t\t},\n\t\t\t\t\t...groupedContacts,\n\t\t\t\t}\n\t\t\t\tgroupedContacts[id].contacts.push(this.contacts[key].url)\n\t\t\t})\n\n\t\t\t// create vcard promise with the requested contacts\n\t\t\tconst vcardPromise = Promise.all(Object.keys(groupedContacts).map((key) => groupedContacts[key].addressbook.dav.addressbookMultigetExport(groupedContacts[key].contacts)))\n\t\t\t\t.then((response) => ({\n\t\t\t\t\tgroupName: group.name,\n\t\t\t\t\tdata: response.map((data) => data.body).join(''),\n\t\t\t\t}))\n\n\t\t\t// download vcard\n\t\t\tthis.downloadVcardPromise(vcardPromise)\n\t\t},\n\n\t\t/**\n\t\t * Download vcard promise as vcard file\n\t\t *\n\t\t * @param {Promise} vcardPromise the full vcf file promise\n\t\t */\n\t\tasync downloadVcardPromise(vcardPromise) {\n\t\t\tvcardPromise.then((response) => {\n\t\t\t\tconst filename = moment().format('YYYY-MM-DD_HH-mm') + '_' + response.groupName + '.vcf'\n\t\t\t\tconst content = 'data:text/plain;charset=utf-8,' + window.encodeURIComponent(response.data)\n\t\t\t\tdownload(content, filename, 'text/vcard')\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Open mailto: for contacts in a group\n\t\t *\n\t\t * @param {object} group of contacts to be emailed\n\t\t * @param {string} mode\n\t\t */\n\t\temailGroup(group, mode = 'to') {\n\t\t\tconst emails = []\n\t\t\tgroup.contacts.filter((key) => this.contacts[key].email !== null).forEach((key) => {\n\t\t\t\t// The email property could contain \"John Doe <john.doe@example.com>\", but vcard spec only\n\t\t\t\t// allows addr-spec, not name-addr, so to stay compliant, replace everything outside of <>\n\t\t\t\tconst email = this.contacts[key].email.replace(/(.*<)([^>]*)(>)/g, '$2').trim()\n\t\t\t\tconst name = this.contacts[key].fullName.replace(/[,<>]/g, '').trim()\n\t\t\t\tif (email === '') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (name === null || name === '') {\n\t\t\t\t\temails.push(email)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\temails.push(`${name} <${email}>`)\n\t\t\t})\n\t\t\t// We could just do mailto:${emails}, but if we want to use name-addr, not addr-spec, then we\n\t\t\t// have to explicitly set the \"to:\" or \"bcc:\" header.\n\t\t\twindow.location.href = `mailto:?${mode}=${emails.map(encodeURIComponent).join(',')}`\n\t\t},\n\n\t\t/**\n\t\t * Rename group in store and on server\n\t\t */\n\t\tasync renameGroup() {\n\t\t\tif (this.newGroupName === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.renaming = true\n\t\t\tfor (const key of this.group.contacts) {\n\t\t\t\tconst contact = this.$store.getters.getContact(key)\n\n\t\t\t\tif (contact === undefined) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait renameContactFromGroup(contact, this.group.name, this.newGroupName)\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error('Error renaming group', e)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$store.commit('renameGroup', {\n\t\t\t\toldGroupName: this.group.name,\n\t\t\t\tnewGroupName: this.newGroupName,\n\t\t\t})\n\t\t\tthis.renaming = false\n\t\t},\n\n\t\t/**\n\t\t * Delete group from store and on server\n\t\t */\n\t\tasync deleteGroup() {\n\t\t\tthis.deleting = true\n\t\t\tfor (const key of this.group.contacts) {\n\t\t\t\tconst contact = this.$store.getters.getContact(key)\n\n\t\t\t\tif (contact === undefined) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait removeContactFromGroup(contact, this.group.name)\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error('Error deleting group', e)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$store.commit('removeGroup', this.group.name)\n\t\t\tthis.deleting = false\n\t\t},\n\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.group-drop-area[drop-active=true] {\n\tbackground-color: var(--color-primary-light);\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nconst isContactsInteractionEnabled = loadState('contacts', 'isContactsInteractionEnabled', false)\nexport default isContactsInteractionEnabled\n","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<AppNavigation>\n\t\t<template #icon>\n\t\t\t<IconLoading v-if=\"loading\" :size=\"20\" />\n\t\t</template>\n\n\t\t<template #search>\n\t\t\t<header class=\"header\">\n\t\t\t\t<slot />\n\t\t\t</header>\n\t\t</template>\n\n\t\t<!-- groups list -->\n\t\t<template #list>\n\t\t\t<!-- All contacts group -->\n\t\t\t<AppNavigationItem\n\t\t\t\tid=\"everyone\"\n\t\t\t\t:name=\"GROUP_ALL_CONTACTS\"\n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: { selectedGroup: GROUP_ALL_CONTACTS },\n\t\t\t\t}\"\n\t\t\t\t:active=\"routeState === 'all'\"\n\t\t\t\t@click=\"updateRouteState('all')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconContactFilled v-if=\"routeState === 'all'\" :size=\"20\" />\n\t\t\t\t\t<IconContact v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t<template #counter>\n\t\t\t\t\t<NcCounterBubble\n\t\t\t\t\t\tv-if=\"sortedContacts.length\"\n\t\t\t\t\t\t:count=\"sortedContacts.length\" />\n\t\t\t\t</template>\n\t\t\t</AppNavigationItem>\n\n\t\t\t<!-- Organization chart -->\n\t\t\t<AppNavigationItem\n\t\t\t\tv-if=\"existChart\"\n\t\t\t\tid=\"chart\"\n\t\t\t\t:name=\"CHART_ALL_CONTACTS\"\n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'chart',\n\t\t\t\t\tparams: { selectedChart: GROUP_ALL_CONTACTS },\n\t\t\t\t}\"\n\t\t\t\t:active=\"routeState === 'orgchart'\"\n\t\t\t\ticon=\"icon-category-monitoring\"\n\t\t\t\t@click=\"updateRouteState('orgchart')\" />\n\n\t\t\t<!-- Not grouped group -->\n\t\t\t<AppNavigationItem\n\t\t\t\tv-if=\"ungroupedContacts.length > 0\"\n\t\t\t\tid=\"notgrouped\"\n\t\t\t\t:name=\"GROUP_NO_GROUP_CONTACTS\"\n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: { selectedGroup: GROUP_NO_GROUP_CONTACTS },\n\t\t\t\t}\"\n\t\t\t\t:active=\"routeState === 'notgrouped'\"\n\t\t\t\t@click=\"updateRouteState('notgrouped')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconUserFilled v-if=\"routeState === 'notgrouped'\" :size=\"20\" />\n\t\t\t\t\t<IconUser v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t<template #counter>\n\t\t\t\t\t<NcCounterBubble\n\t\t\t\t\t\tv-if=\"ungroupedContacts.length\"\n\t\t\t\t\t\t:count=\"ungroupedContacts.length\" />\n\t\t\t\t</template>\n\t\t\t</AppNavigationItem>\n\n\t\t\t<!-- Recently contacted group -->\n\t\t\t<AppNavigationItem\n\t\t\t\tv-if=\"isContactsInteractionEnabled && recentlyContactedContacts && recentlyContactedContacts.contacts.length > 0\"\n\t\t\t\tid=\"recentlycontacted\"\n\t\t\t\t:name=\"t('contacts', 'Recently contacted')\"\n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: { selectedGroup: GROUP_RECENTLY_CONTACTED },\n\t\t\t\t}\"\n\t\t\t\t:active=\"routeState === 'recentlycontacted'\"\n\t\t\t\t@click=\"updateRouteState('recentlycontacted')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconRecentlyContacted :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t<template #counter>\n\t\t\t\t\t<NcCounterBubble\n\t\t\t\t\t\tv-if=\"recentlyContactedContacts.contacts.length\"\n\t\t\t\t\t\t:count=\"recentlyContactedContacts.contacts.length\" />\n\t\t\t\t</template>\n\t\t\t</AppNavigationItem>\n\n\t\t\t<AppNavigationCaption\n\t\t\t\tid=\"newgroup\"\n\t\t\t\tv-model:menu-open=\"isNewGroupMenuOpen\"\n\t\t\t\t:force-menu=\"true\"\n\t\t\t\t:name=\"t('contacts', 'Contact groups')\"\n\t\t\t\t@click.prevent.stop=\"toggleNewGroupMenu\">\n\t\t\t\t<template #actionsTriggerIcon>\n\t\t\t\t\t<IconAdd :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t<template #actions>\n\t\t\t\t\t<ActionText v-show=\"isNewGroupMenuOpen\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconError v-if=\"createGroupError\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconContact v-else-if=\"!createGroupError\" :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ createGroupError ? createGroupError : t('contacts', 'Create a new contact group') }}\n\t\t\t\t\t</ActionText>\n\t\t\t\t\t<ActionInput\n\t\t\t\t\t\tv-show=\"isNewGroupMenuOpen\"\n\t\t\t\t\t\ticon=\"\"\n\t\t\t\t\t\t:placeholder=\"t('contacts', 'Contact group name')\"\n\t\t\t\t\t\t@submit.prevent.stop=\"createNewGroup\" />\n\t\t\t\t</template>\n\t\t\t</AppNavigationCaption>\n\n\t\t\t<!-- Custom groups -->\n\t\t\t<GroupNavigationItem\n\t\t\t\tv-for=\"group in ellipsisGroupsMenu\"\n\t\t\t\t:key=\"group.key\"\n\t\t\t\t:route-state=\"routeState\"\n\t\t\t\t:group=\"group\"\n\t\t\t\t@update-route-state=\"updateRouteState\" />\n\n\t\t\t<template v-if=\"isCirclesEnabled\">\n\t\t\t\t<!-- Toggle groups ellipsis -->\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tv-if=\"groupsMenu.length > ELLIPSIS_COUNT\"\n\t\t\t\t\t:name=\"collapseGroupsTitle\"\n\t\t\t\t\tclass=\"app-navigation__collapse\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\t@click=\"onToggleGroups\" />\n\n\t\t\t\t<!-- New circle button caption and modal -->\n\t\t\t\t<AppNavigationCaption\n\t\t\t\t\tid=\"newcircle\"\n\t\t\t\t\t:name=\"t('contacts', 'Teams')\">\n\t\t\t\t\t<template #actions>\n\t\t\t\t\t\t<NcActionButton @click=\"toggleNewCircleModal\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconAdd :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('contacts', 'Create a new team') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t</AppNavigationCaption>\n\t\t\t\t<NewCircleIntro\n\t\t\t\t\tv-if=\"isNewCircleModalOpen\"\n\t\t\t\t\t:loading=\"createCircleLoading\"\n\t\t\t\t\t@close=\"closeNewCircleIntro\"\n\t\t\t\t\t@submit=\"createNewCircle\" />\n\n\t\t\t\t<template v-if=\"circlesMenu.length > 0\">\n\t\t\t\t\t<!-- Circles -->\n\t\t\t\t\t<CircleNavigationItem\n\t\t\t\t\t\tv-for=\"circle in ellipsisCirclesMenu\"\n\t\t\t\t\t\t:key=\"circle.key\"\n\t\t\t\t\t\t:circle=\"circle\"\n\t\t\t\t\t\t@click=\"updateRouteState(`circle:${circle.id}`)\" />\n\n\t\t\t\t\t<!-- Toggle circles ellipsis -->\n\t\t\t\t\t<AppNavigationItem\n\t\t\t\t\t\tv-if=\"circlesMenu.length > ELLIPSIS_COUNT\"\n\t\t\t\t\t\t:name=\"collapseCirclesTitle\"\n\t\t\t\t\t\tclass=\"app-navigation__collapse\"\n\t\t\t\t\t\ticon=\"\"\n\t\t\t\t\t\t@click=\"onToggleCircles\" />\n\t\t\t\t</template>\n\n\t\t\t\t<li class=\"app-navigation__circle-desc\">\n\t\t\t\t\t{{ CIRCLE_DESC }}\n\t\t\t\t</li>\n\t\t\t</template>\n\t\t</template>\n\n\t\t<!-- settings -->\n\n\t\t<template #footer>\n\t\t\t<div class=\"contacts-settings\">\n\t\t\t\t<NcButton\n\t\t\t\t\t:aria-label=\"t('contacts', 'Open the contacts app settings')\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t@click=\"showContactsSettings\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Cog :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ CONTACTS_SETTINGS }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</template>\n\t\t<ContactsSettings v-model:open=\"showSettings\" />\n\t</AppNavigation>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { emit } from '@nextcloud/event-bus'\nimport {\n\tNcActionInput as ActionInput,\n\tNcActionText as ActionText,\n\tNcAppNavigation as AppNavigation,\n\tNcAppNavigationCaption as AppNavigationCaption,\n\tNcAppNavigationItem as AppNavigationItem,\n\tNcLoadingIcon as IconLoading,\n\tNcActionButton,\n\tNcButton,\n\tNcCounterBubble,\n} from '@nextcloud/vue'\nimport { mapStores } from 'pinia'\nimport naturalCompare from 'string-natural-compare'\nimport IconUserFilled from 'vue-material-design-icons/Account.vue'\nimport IconContactFilled from 'vue-material-design-icons/AccountMultiple.vue'\nimport IconContact from 'vue-material-design-icons/AccountMultipleOutline.vue'\nimport IconUser from 'vue-material-design-icons/AccountOutline.vue'\nimport IconError from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport Cog from 'vue-material-design-icons/CogOutline.vue'\nimport IconAdd from 'vue-material-design-icons/Plus.vue'\nimport NewCircleIntro from '../EntityPicker/NewCircleIntro.vue'\nimport IconRecentlyContacted from '../Icons/IconRecentlyContacted.vue'\nimport CircleNavigationItem from './CircleNavigationItem.vue'\nimport ContactsSettings from './ContactsSettings.vue'\nimport GroupNavigationItem from './GroupNavigationItem.vue'\nimport RouterMixin from '../../mixins/RouterMixin.js'\nimport { CHART_ALL_CONTACTS, CIRCLE_DESC, CONTACTS_SETTINGS, ELLIPSIS_COUNT, GROUP_ALL_CONTACTS, GROUP_NO_GROUP_CONTACTS, GROUP_RECENTLY_CONTACTED } from '../../models/constants.ts'\nimport isCirclesEnabled from '../../services/isCirclesEnabled.js'\nimport isContactsInteractionEnabled from '../../services/isContactsInteractionEnabled.js'\nimport useUserGroupStore from '../../store/userGroup.ts'\n\nexport default {\n\tname: 'RootNavigation',\n\n\tcomponents: {\n\t\tActionInput,\n\t\tActionText,\n\t\tNcActionButton,\n\t\tAppNavigation,\n\t\tNcCounterBubble,\n\t\tAppNavigationItem,\n\t\tAppNavigationCaption,\n\t\tCircleNavigationItem,\n\t\tCog,\n\t\tContactsSettings,\n\t\tGroupNavigationItem,\n\t\tIconContact,\n\t\tIconContactFilled,\n\t\tIconUser,\n\t\tIconUserFilled,\n\t\tIconAdd,\n\t\tIconError,\n\t\tIconLoading,\n\t\tIconRecentlyContacted,\n\t\tNewCircleIntro,\n\t\tNcButton,\n\t},\n\n\tmixins: [RouterMixin],\n\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tCIRCLE_DESC,\n\t\t\tCONTACTS_SETTINGS,\n\t\t\tELLIPSIS_COUNT,\n\t\t\tGROUP_ALL_CONTACTS,\n\t\t\tCHART_ALL_CONTACTS,\n\t\t\tGROUP_NO_GROUP_CONTACTS,\n\t\t\tGROUP_RECENTLY_CONTACTED,\n\n\t\t\t// create group\n\t\t\tisNewGroupMenuOpen: false,\n\t\t\tcreateGroupError: null,\n\n\t\t\t// create circle\n\t\t\tisNewCircleModalOpen: false,\n\t\t\tcreateCircleLoading: false,\n\t\t\tcreateCircleError: null,\n\n\t\t\tisCirclesEnabled,\n\t\t\tisContactsInteractionEnabled,\n\n\t\t\tcollapsedGroups: true,\n\t\t\tcollapsedCircles: true,\n\n\t\t\tshowSettings: false,\n\n\t\t\trouteState: 'all',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// store variables\n\t\tcircles() {\n\t\t\treturn this.$store.getters.getCircles\n\t\t},\n\n\t\tcontacts() {\n\t\t\tconst contacts = this.$store.getters.getContacts\n\t\t\tif (contacts.undefined) {\n\t\t\t\tcontacts[this.selectedContact] = contacts.undefined\n\t\t\t\tdelete contacts.undefined\n\t\t\t}\n\n\t\t\treturn this.$store.getters.getContacts\n\t\t},\n\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t},\n\n\t\tsortedContacts() {\n\t\t\treturn this.$store.getters.getSortedContacts\n\t\t},\n\n\t\tuserGroups() {\n\t\t\treturn this.userGroupStore.userGroupList\n\t\t},\n\n\t\t// list all the contacts that doesn't have a group\n\t\tungroupedContacts() {\n\t\t\treturn this.sortedContacts.filter((contact) => this.contacts[contact.key]?.groups && this.contacts[contact.key]?.groups?.length === 0)\n\t\t},\n\n\t\t// check if any contact has manager, if not then is no need for organization chart menu\n\t\texistChart() {\n\t\t\treturn !!Object.keys(this.contacts).filter((key) => this.contacts[key].managersName).length\n\t\t},\n\n\t\t// generate groups menu from the groups store\n\t\tgroupsMenu() {\n\t\t\tconst menu = this.groups.map((group) => {\n\t\t\t\treturn {\n\t\t\t\t\t...group,\n\t\t\t\t\tid: group.name.replace(' ', '_'),\n\t\t\t\t\tkey: group.name.replace(' ', '_'),\n\t\t\t\t\trouter: {\n\t\t\t\t\t\tname: 'group',\n\t\t\t\t\t\tparams: { selectedGroup: group.name },\n\t\t\t\t\t},\n\t\t\t\t\ttoString: () => group.name,\n\t\t\t\t}\n\t\t\t})\n\t\t\tmenu.sort((a, b) => naturalCompare(a.toString(), b.toString(), { caseInsensitive: true }))\n\n\t\t\t// Find the Recently Contacted group, delete it from array\n\t\t\tconst recentlyIndex = menu.findIndex((group) => group.name === GROUP_RECENTLY_CONTACTED)\n\t\t\tif (recentlyIndex >= 0) {\n\t\t\t\tmenu.splice(recentlyIndex, 1)\n\t\t\t}\n\n\t\t\treturn menu\n\t\t},\n\n\t\tellipsisGroupsMenu() {\n\t\t\t// If circles is not enabled, we show everything\n\t\t\tif (this.isCirclesEnabled && this.collapsedGroups) {\n\t\t\t\treturn this.groupsMenu.slice(0, ELLIPSIS_COUNT)\n\t\t\t}\n\t\t\treturn this.groupsMenu\n\t\t},\n\n\t\t// generate circles menu from the circles store\n\t\tcirclesMenu() {\n\t\t\tconst menu = [...(this.circles || []), ...(this.userGroups || [])]\n\n\t\t\tmenu.sort((a, b) => {\n\t\t\t\t// If user is member of a and b, sort by level\n\t\t\t\tif (a?.initiator?.level !== b?.initiator?.level && a?.initiator?.level && b?.initiator?.level) {\n\t\t\t\t\treturn b.initiator.level - a.initiator.level\n\t\t\t\t}\n\n\t\t\t\t// If user is member of a and not b, sort a first\n\t\t\t\tif (a.initiator && !b.initiator) {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\n\t\t\t\t// If user is member of b and not a, sort b first\n\t\t\t\tif (!a.initiator && b.initiator) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\n\t\t\t\t// Else we sort by name\n\t\t\t\treturn naturalCompare(a.toString(), b.toString(), { caseInsensitive: true })\n\t\t\t})\n\n\t\t\treturn menu\n\t\t},\n\n\t\tellipsisCirclesMenu() {\n\t\t\tif (this.collapsedCircles) {\n\t\t\t\treturn this.circlesMenu.slice(0, ELLIPSIS_COUNT)\n\t\t\t}\n\t\t\treturn this.circlesMenu\n\t\t},\n\n\t\t// Recently contacted data\n\t\trecentlyContactedContacts() {\n\t\t\treturn this.groups.find((group) => group.name === GROUP_RECENTLY_CONTACTED)\n\t\t},\n\n\t\t// Titles for the ellipsis toggle buttons\n\t\tcollapseGroupsTitle() {\n\t\t\treturn this.collapsedGroups\n\t\t\t\t? t('contacts', 'Show all groups')\n\t\t\t\t: t('contacts', 'Collapse groups')\n\t\t},\n\n\t\tcollapseCirclesTitle() {\n\t\t\treturn this.collapsedCircles\n\t\t\t\t? t('contacts', 'Show all teams')\n\t\t\t\t: t('contacts', 'Collapse teams')\n\t\t},\n\n\t\t...mapStores(useUserGroupStore),\n\t},\n\n\tmethods: {\n\t\ttoggleNewGroupMenu() {\n\t\t\tthis.isNewGroupMenuOpen = !this.isNewGroupMenuOpen\n\t\t},\n\n\t\tcreateNewGroup(e) {\n\t\t\tconst input = e.target.querySelector('input[type=text]')\n\t\t\tconst groupName = input.value.trim()\n\t\t\tif (groupName.length === 0) {\n\t\t\t\tshowError(t('contacts', 'Group name cannot be empty'))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.logger.debug('Creating new group', { groupName })\n\n\t\t\t// Check if already exists\n\t\t\tif (this.groups.find((group) => group.name === groupName)) {\n\t\t\t\tthis.createGroupError = t('contacts', 'This group already exists')\n\t\t\t\temit('contacts:group:append', this.groups.find((group) => group.name === groupName).name)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.createGroupError = null\n\t\t\tthis.logger.debug('Created new local group', { groupName })\n\n\t\t\ttry {\n\t\t\t\tthis.$store.dispatch('addGroup', groupName)\n\t\t\t\tthis.isNewGroupMenuOpen = false\n\t\t\t\temit('contacts:group:append', groupName)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('contacts', 'An error occurred while creating the group'))\n\t\t\t}\n\t\t},\n\n\t\t// Ellipsis item toggles\n\t\tonToggleGroups() {\n\t\t\tthis.collapsedGroups = !this.collapsedGroups\n\t\t},\n\n\t\tonToggleCircles() {\n\t\t\tthis.collapsedCircles = !this.collapsedCircles\n\t\t},\n\n\t\ttoggleNewCircleModal() {\n\t\t\tthis.isNewCircleModalOpen = true\n\t\t},\n\n\t\tasync createNewCircle(circleName, isPersonal, isLocal) {\n\t\t\tthis.logger.debug('Creating new team', { circleName })\n\n\t\t\tthis.createCircleLoading = true\n\n\t\t\t// Check if already exists\n\t\t\tif (this.circles.find((circle) => circle.name === circleName)) {\n\t\t\t\tthis.createCircleError = t('contacts', 'This team already exists')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.createCircleError = null\n\n\t\t\ttry {\n\t\t\t\tconst circle = await this.$store.dispatch('createCircle', { circleName, isPersonal, isLocal })\n\t\t\t\tthis.closeNewCircleIntro()\n\n\t\t\t\t// Select group\n\t\t\t\tthis.$router.push({\n\t\t\t\t\tname: 'circle',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tselectedCircle: circle.id,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('contacts', 'An error happened during the creation of the team'))\n\t\t\t} finally {\n\t\t\t\tthis.createCircleLoading = false\n\t\t\t}\n\t\t},\n\n\t\tcloseNewCircleIntro() {\n\t\t\tthis.isNewCircleModalOpen = false\n\t\t},\n\n\t\t/**\n\t\t * Shows the contacts settings\n\t\t */\n\t\tshowContactsSettings() {\n\t\t\tthis.showSettings = true\n\t\t},\n\n\t\tupdateRouteState(state) {\n\t\t\tthis.routeState = state\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$caption-padding: 22px;\n\n.header {\n\tpadding: calc(var(--default-grid-baseline, 4px) * 2);\n}\n\n#newgroup,\n#newcircle {\n\tmargin-top: $caption-padding;\n\n\t:deep(a) {\n\t\tcolor: var(--color-text-maxcontrast)\n\t}\n}\n\n.app-navigation__circle-desc {\n\tmargin: 0 $caption-padding;\n}\n\n.app-navigation__collapse :deep(a) {\n\tcolor: var(--color-text-maxcontrast)\n}\n\n:deep(.settings-button__label) {\n\topacity: .7;\n\tfont-weight: bold;\n}\n\n.contacts-settings {\n\tpadding: calc(var(--default-grid-baseline, 4px) * 2);\n\n\t:deep(.button-vue__wrapper) {\n\t\tjustify-content: flex-start !important;\n\t}\n}\n\n.contacts-settings-button {\n\twidth: 100%;\n\tjustify-content: start !important;\n}\n\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div>\n\t\t<EmptyContent\n\t\t\t:description=\"desc\"\n\t\t\t:name=\"title\"\n\t\t\tclass=\"processing-screen__wrapper\">\n\t\t\t<template #icon>\n\t\t\t\t<IconContact :size=\"20\" />\n\t\t\t</template>\n\t\t</EmptyContent>\n\t\t<div class=\"processing-screen__progress\">\n\t\t\t<progress :max=\"total\" :value=\"progress\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { NcEmptyContent as EmptyContent } from '@nextcloud/vue'\nimport IconContact from 'vue-material-design-icons/AccountMultipleOutline.vue'\nexport default {\n\tname: 'ProcessingScreen',\n\n\tcomponents: {\n\t\tEmptyContent,\n\t\tIconContact,\n\t},\n\n\tprops: {\n\t\ttotal: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\tprogress: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\tdesc: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.processing-screen {\n\t&__wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: auto;\n\t\tmargin: 50px;\n\t}\n\n\t&__progress {\n\t\tpadding: 0 12px;\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div>\n\t\t<ProcessingScreen\n\t\t\t:progress=\"progress\"\n\t\t\t:total=\"total\"\n\t\t\t:desc=\"failed > 0 ? messageFailed : ''\"\n\t\t\t:title=\"total === progress\n\t\t\t\t? finishedHeader\n\t\t\t\t: progressHeader\" />\n\t\t<div class=\"close__button\">\n\t\t\t<NcButton v-if=\"total === progress\" class=\"primary\" @click=\"onClose\">\n\t\t\t\t{{ t('contacts', 'Close') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { NcButton } from '@nextcloud/vue'\nimport ProcessingScreen from '../../components/ProcessingScreen.vue'\nexport default {\n\tname: 'AddToGroupView',\n\n\tcomponents: {\n\t\tProcessingScreen,\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\tfailed: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\tprogress: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\tsuccess: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\ttotal: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tprogressHeader() {\n\t\t\treturn n(\n\t\t\t\t'contacts',\n\t\t\t\t'{success} contact added to {name}',\n\t\t\t\t'{success} contacts added to {name}',\n\t\t\t\tthis.success,\n\t\t\t\t{ success: this.success, name: this.name },\n\t\t\t)\n\t\t},\n\n\t\tfinishedHeader() {\n\t\t\treturn n(\n\t\t\t\t'contacts',\n\t\t\t\t'Adding {success} contact to {name}',\n\t\t\t\t'Adding {success} contacts to {name}',\n\t\t\t\tthis.success,\n\t\t\t\t{ success: this.success, name: this.name },\n\t\t\t)\n\t\t},\n\n\t\tmessageFailed() {\n\t\t\treturn n(\n\t\t\t\t'contacts',\n\t\t\t\t'{count} error',\n\t\t\t\t'{count} errors',\n\t\t\t\tthis.failed,\n\t\t\t\t{ count: this.failed },\n\t\t\t)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.close__button {\n\tpadding: 12px;\n\tfloat: inline-end;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<!-- Bulk contacts edit modal -->\n\t<Modal\n\t\tv-if=\"isProcessing || isProcessDone\"\n\t\t:clear-view-delay=\"-1\"\n\t\t:can-close=\"isProcessDone\"\n\t\t@close=\"closeProcess\">\n\t\t<AddToGroupView v-bind=\"processStatus\" @close=\"closeProcess\" />\n\t</Modal>\n\n\t<!-- contacts picker -->\n\t<EntityPicker\n\t\tv-else-if=\"showPicker\"\n\t\t:confirm-label=\"t('contacts', 'Add to {group}', { group: pickerforGroup.name })\"\n\t\t:title-label=\"t('contacts', 'Add members to {group}', { group: pickerforGroup.name })\"\n\t\t:data-types=\"pickerTypes\"\n\t\t:data-set=\"pickerData\"\n\t\t:empty-data-set-description=\"t('contacts', 'Please note that you can only add contacts from writable address books to contact groups. Contacts from read-only address books, such as the system address book, cannot be added.')\"\n\t\t@close=\"onContactPickerClose\"\n\t\t@submit=\"onContactPickerPick\" />\n</template>\n\n<script>\nimport { subscribe } from '@nextcloud/event-bus'\nimport { NcModal as Modal } from '@nextcloud/vue'\nimport pLimit from 'p-limit'\nimport AddToGroupView from '../../views/Processing/AddToGroupView.vue'\nimport EntityPicker from './EntityPicker.vue'\nimport appendContactToGroup from '../../services/appendContactToGroup.js'\n\nexport default {\n\tname: 'ContactsPicker',\n\n\tcomponents: {\n\t\tAddToGroupView,\n\t\tEntityPicker,\n\t\tModal,\n\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Entity picker\n\t\t\tshowPicker: false,\n\t\t\tpickerforGroup: null,\n\t\t\tpickerData: [],\n\t\t\tpickerTypes: [{\n\t\t\t\tid: 'contact',\n\t\t\t\tlabel: t('contacts', 'Contacts'),\n\t\t\t}],\n\n\t\t\t// Bulk processing\n\t\t\tisProcessing: false,\n\t\t\tisProcessDone: false,\n\t\t\tprocessStatus: {\n\t\t\t\tfailed: 0,\n\t\t\t\tprogress: 0,\n\t\t\t\tsuccess: 0,\n\t\t\t\ttotal: 0,\n\t\t\t\tname: '',\n\t\t\t},\n\n\t\t\tpassedGroupName: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcontacts() {\n\t\t\treturn this.$store.getters.getContacts\n\t\t},\n\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t},\n\n\t\tsortedContacts() {\n\t\t\treturn this.$store.getters.getSortedContacts\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// Watch for a add-to-group event\n\t\tsubscribe('contacts:group:append', this.addContactsToGroup)\n\t},\n\n\tmethods: {\n\t\t// Bulk contacts group management handlers\n\t\taddContactsToGroup(group) {\n\t\t\tconsole.debug('Contacts picker opened for group', group)\n\n\t\t\tthis.passedGroupName = group.name ? group.name : group\n\t\t\t// Get the full group if we provided the group name only\n\t\t\tif (typeof group === 'string') {\n\t\t\t\tgroup = this.groups.find((a) => a.name === group)\n\t\t\t\tif (!group) {\n\t\t\t\t\tconsole.error('Cannot add contact to an undefined group', group)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Init data set\n\t\t\tthis.pickerData = this.sortedContacts\n\t\t\t\t.map(({ key }) => {\n\t\t\t\t\tconst contact = this.contacts[key]\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: contact.key,\n\t\t\t\t\t\tlabel: contact.displayName,\n\t\t\t\t\t\ttype: 'contact',\n\t\t\t\t\t\treadOnly: contact.addressbook.readOnly,\n\t\t\t\t\t\tgroups: contact.groups,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t// No read only contacts\n\t\t\t\t.filter((contact) => !contact.readOnly)\n\t\t\t\t// No contacts already present in group\n\t\t\t\t.filter((contact) => contact.groups.indexOf(group.name) === -1)\n\n\t\t\tthis.showPicker = true\n\t\t\tthis.pickerforGroup = group\n\t\t},\n\n\t\tonContactPickerClose() {\n\t\t\tthis.pickerData = []\n\t\t\tthis.showPicker = false\n\t\t},\n\n\t\tonContactPickerPick(selection) {\n\t\t\tconsole.debug('Adding', selection, 'to group', this.pickerforGroup)\n\t\t\tconst groupName = this.pickerforGroup.name\n\n\t\t\tthis.isProcessing = true\n\t\t\tthis.showPicker = false\n\n\t\t\tthis.processStatus.total = selection.length\n\t\t\tthis.processStatus.name = this.pickerforGroup.name\n\t\t\tthis.processStatus.progress = 0\n\t\t\tthis.processStatus.failed = 0\n\n\t\t\t// max simultaneous requests\n\t\t\tconst limit = pLimit(3)\n\t\t\tconst requests = []\n\n\t\t\t// create the array of requests to send\n\t\t\tselection.map(async (entity) => {\n\t\t\t\ttry {\n\t\t\t\t\t// Get contact\n\t\t\t\t\tconst contact = this.contacts[entity.id]\n\n\t\t\t\t\t// push contact to server and use limit\n\t\t\t\t\trequests.push(limit(() => appendContactToGroup(contact, groupName)\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tthis.$store.dispatch('addContactToGroup', { contact, groupName })\n\t\t\t\t\t\t\tthis.processStatus.progress++\n\t\t\t\t\t\t\tthis.processStatus.success++\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tthis.processStatus.progress++\n\t\t\t\t\t\t\tthis.processStatus.error++\n\t\t\t\t\t\t\tconsole.error(error)\n\t\t\t\t\t\t})))\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tPromise.all(requests).then(() => {\n\t\t\t\tthis.isProcessDone = true\n\t\t\t\tthis.showPicker = false\n\n\t\t\t\t// Select group\n\t\t\t\tthis.$router.push({\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tselectedGroup: typeof this.passedGroupName === 'string' ? this.passedGroupName : this.passedGroupName.name,\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\t// Auto close after 3 seconds if no errors\n\t\t\t\tif (this.processStatus.failed === 0) {\n\t\t\t\t\tsetTimeout(this.closeProcess, 3000)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tcloseProcess() {\n\t\t\tthis.pickerforGroup = null\n\t\t\tthis.isProcessing = false\n\t\t\tthis.isProcessDone = false\n\n\t\t\t// Reset\n\t\t\tthis.processStatus.failed = 0\n\t\t\tthis.processStatus.progress = 0\n\t\t\tthis.processStatus.success = 0\n\t\t\tthis.processStatus.total = 0\n\n\t\t\tif (this.passedGroupName === '' || this.passedGroupName === undefined) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Select group\n\t\t\tthis.$router.push({\n\t\t\t\tname: 'group',\n\t\t\t\tparams: {\n\t\t\t\t\tselectedGroup: typeof this.passedGroupName === 'string' ? this.passedGroupName : this.passedGroupName.name,\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div>\n\t\t<ProcessingScreen\n\t\t\t:progress=\"progress\"\n\t\t\t:total=\"total\"\n\t\t\t:desc=\"failed > 0 ? importFailed : ''\"\n\t\t\t:title=\"total === progress\n\t\t\t\t? importedHeader\n\t\t\t\t: importingHeader\" />\n\t\t<div class=\"close__button\">\n\t\t\t<NcButton v-if=\"total === progress\" class=\"primary\" @click=\"onClose\">\n\t\t\t\t{{ t('contacts', 'Close') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { NcButton } from '@nextcloud/vue'\nimport ProcessingScreen from '../../components/ProcessingScreen.vue'\nexport default {\n\tname: 'ImportView',\n\n\tcomponents: {\n\t\tProcessingScreen,\n\t\tNcButton,\n\t},\n\n\tcomputed: {\n\t\timportState() {\n\t\t\treturn this.$store.getters.getImportState\n\t\t},\n\n\t\taddressbook() {\n\t\t\treturn this.importState.addressbook\n\t\t},\n\n\t\ttotal() {\n\t\t\treturn this.importState.total\n\t\t},\n\n\t\taccepted() {\n\t\t\treturn this.importState.accepted\n\t\t},\n\n\t\tfailed() {\n\t\t\treturn this.importState.denied\n\t\t},\n\n\t\tprogress() {\n\t\t\treturn this.accepted + this.failed\n\t\t},\n\n\t\timportingHeader() {\n\t\t\treturn n(\n\t\t\t\t'contacts',\n\t\t\t\t'Importing %n contact into {addressbook}',\n\t\t\t\t'Importing %n contacts into {addressbook}',\n\t\t\t\tthis.total,\n\t\t\t\t{\n\t\t\t\t\taddressbook: this.addressbook,\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\n\t\timportedHeader() {\n\t\t\treturn n(\n\t\t\t\t'contacts',\n\t\t\t\t'Done importing %n contact into {addressbook}',\n\t\t\t\t'Done importing %n contacts into {addressbook}',\n\t\t\t\tthis.total,\n\t\t\t\t{\n\t\t\t\t\taddressbook: this.addressbook,\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\n\t\timportFailed() {\n\t\t\treturn n(\n\t\t\t\t'contacts',\n\t\t\t\t'{count} error',\n\t\t\t\t'{count} errors',\n\t\t\t\tthis.failed,\n\t\t\t\t{ count: this.failed },\n\t\t\t)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.close__button {\n\tpadding: 12px;\n\tfloat: inline-end;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Content :app-name=\"appName\">\n\t\t<!-- new-contact-button + navigation + settings -->\n\t\t<RootNavigation\n\t\t\t:contacts-list=\"contactsList\"\n\t\t\t:loading=\"loadingContacts || loadingCircles\"\n\t\t\t:selected-group=\"selectedGroup\"\n\t\t\t:selected-contact=\"selectedContact\">\n\t\t\t<div class=\"import-and-new-contact-buttons\">\n\t\t\t\t<SettingsImportContacts v-if=\"!loadingContacts && isEmptyGroup && !isChartView && !isCirclesView\" />\n\t\t\t\t<!-- new-contact-button -->\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"!loadingContacts\"\n\t\t\t\t\t:disabled=\"!defaultAddressbook\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\twide\n\t\t\t\t\t@click=\"newContact\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconAdd :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ isCirclesView ? t('contacts', 'Add member') : t('contacts', 'New contact') }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</RootNavigation>\n\n\t\t<!-- Main content: circle, chart or contacts -->\n\t\t<UserGroupContent\n\t\t\tv-if=\"selectedUserGroup\"\n\t\t\t:loding=\"loadingCircles\" />\n\t\t<CircleContent\n\t\t\tv-if=\"selectedCircle || selectedUserGroup\"\n\t\t\t:loading=\"loadingCircles\" />\n\t\t<ChartContent\n\t\t\tv-else-if=\"selectedChart\"\n\t\t\t:contacts-list=\"contacts\" />\n\t\t<ContactsContent\n\t\t\tv-else\n\t\t\t:contacts-list=\"contactsList\"\n\t\t\t:loading=\"loadingContacts\"\n\t\t\t@new-contact=\"newContact\" />\n\n\t\t<!-- Import modal -->\n\t\t<Modal\n\t\t\tv-if=\"isImporting\"\n\t\t\t:clear-view-delay=\"-1\"\n\t\t\t:can-close=\"isImportDone\"\n\t\t\t@close=\"closeImport\">\n\t\t\t<ImportView @close=\"closeImport\" />\n\t\t</Modal>\n\n\t\t<!-- Select contacts group modal -->\n\t\t<ContactsPicker />\n\t</Content>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { showError } from '@nextcloud/dialogs'\nimport { emit } from '@nextcloud/event-bus'\nimport {\n\tNcContent as Content,\n\tNcModal as Modal,\n\tNcButton,\n} from '@nextcloud/vue'\nimport ICAL from 'ical.js'\nimport IconAdd from 'vue-material-design-icons/Plus.vue'\nimport ChartContent from '../components/AppContent/ChartContent.vue'\nimport CircleContent from '../components/AppContent/CircleContent.vue'\nimport ContactsContent from '../components/AppContent/ContactsContent.vue'\nimport RootNavigation from '../components/AppNavigation/RootNavigation.vue'\nimport SettingsImportContacts from '../components/AppNavigation/Settings/SettingsImportContacts.vue'\nimport ContactsPicker from '../components/EntityPicker/ContactsPicker.vue'\nimport ImportView from './Processing/ImportView.vue'\nimport IsMobileMixin from '../mixins/IsMobileMixin.ts'\nimport RouterMixin from '../mixins/RouterMixin.js'\nimport { GROUP_ALL_CONTACTS, GROUP_NO_GROUP_CONTACTS, ROUTE_CIRCLE, ROUTE_USER_GROUP } from '../models/constants.ts'\nimport Contact from '../models/contact.js'\nimport rfcProps from '../models/rfcProps.js'\nimport client from '../services/cdav.js'\nimport isCirclesEnabled from '../services/isCirclesEnabled.js'\nimport usePrincipalsStore from '../store/principals.js'\nimport useUserGroupStore from '../store/userGroup.ts'\n\nexport default {\n\tname: 'Contacts',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tCircleContent,\n\t\tChartContent,\n\t\tContactsContent,\n\t\tContactsPicker,\n\t\tContent,\n\t\tImportView,\n\t\tIconAdd,\n\t\tModal,\n\t\tRootNavigation,\n\t\tSettingsImportContacts,\n\t},\n\n\tmixins: [\n\t\tIsMobileMixin,\n\t\tRouterMixin,\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\t// The object shorthand syntax is breaking builds (bug in @babel/preset-env)\n\t\t\t/* eslint-disable object-shorthand */\n\t\t\tappName: appName,\n\n\t\t\t// Let's but the loading state to true if circles is enabled\n\t\t\tloadingCircles: isCirclesEnabled,\n\t\t\tloadingContacts: true,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// store getters\n\t\taddressbooks() {\n\t\t\treturn this.$store.getters.getAddressbooks\n\t\t},\n\n\t\tcontacts() {\n\t\t\treturn this.$store.getters.getContacts\n\t\t},\n\n\t\tsortedContacts() {\n\t\t\treturn this.$store.getters.getSortedContacts\n\t\t},\n\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t},\n\n\t\tcircles() {\n\t\t\treturn this.$store.getters.getCircles\n\t\t},\n\n\t\torderKey() {\n\t\t\treturn this.$store.getters.getOrderKey\n\t\t},\n\n\t\timportState() {\n\t\t\treturn this.$store.getters.getImportState\n\t\t},\n\n\t\tisEmptyGroup() {\n\t\t\treturn this.contactsList.length === 0\n\t\t},\n\n\t\tisChartView() {\n\t\t\treturn !!this.selectedChart\n\t\t},\n\n\t\t/**\n\t\t * Are we importing contacts ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisImporting() {\n\t\t\treturn this.importState.stage !== 'default'\n\t\t},\n\n\t\t/**\n\t\t * Are we done importing contacts ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisImportDone() {\n\t\t\treturn this.importState.stage === 'done'\n\t\t},\n\n\t\t// first enabled addressbook of the list\n\t\tdefaultAddressbook() {\n\t\t\treturn this.addressbooks.find((addressbook) => !addressbook.readOnly && addressbook.enabled)\n\t\t},\n\n\t\t/**\n\t\t * Contacts list based on the selected group.\n\t\t * Those filters are pretty fast, so let's only\n\t\t * intersect the groups contacts and the full\n\t\t * sorted contacts List.\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\tcontactsList() {\n\t\t\tif (this.selectedGroup === GROUP_ALL_CONTACTS) {\n\t\t\t\treturn this.sortedContacts\n\t\t\t} else if (this.selectedGroup === GROUP_NO_GROUP_CONTACTS) {\n\t\t\t\treturn this.ungroupedContacts.map((contact) => this.sortedContacts.find((item) => item.key === contact.key))\n\t\t\t} else if (this.selectedGroup === ROUTE_CIRCLE || this.selectedGroup === ROUTE_USER_GROUP) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst group = this.groups.filter((group) => group.name === this.selectedGroup)[0]\n\t\t\tif (group) {\n\t\t\t\treturn this.sortedContacts.filter((contact) => group.contacts.indexOf(contact.key) >= 0)\n\t\t\t}\n\t\t\treturn []\n\t\t},\n\n\t\tisCirclesView() {\n\t\t\treturn this.selectedGroup === ROUTE_CIRCLE || this.selectedGroup === ROUTE_USER_GROUP\n\t\t},\n\n\t\tungroupedContacts() {\n\t\t\treturn this.sortedContacts.filter((contact) => this.contacts[contact.key].groups && this.contacts[contact.key].groups.length === 0)\n\t\t},\n\t},\n\n\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup() {\n\t\t\tif (!this.isMobile && !this.selectedChart) {\n\t\t\t\tthis.selectFirstContactIfNone()\n\t\t\t}\n\t\t},\n\n\t\t// watch url change and contact select\n\t\tselectedContact() {\n\t\t\tif (!this.isMobile && !this.selectedChart) {\n\t\t\t\tthis.selectFirstContactIfNone()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (this.isCirclesEnabled) {\n\t\t\tthis.logger.info('Circles frontend enabled')\n\t\t} else {\n\t\t\tthis.logger.info('No compatible version of circles found')\n\t\t}\n\t},\n\n\tasync beforeMount() {\n\t\t// get addressbooks then get contacts\n\t\tclient.connect({ enableCardDAV: true }).then(() => {\n\t\t\tthis.logger.debug('Connected to dav!', { client })\n\t\t\tconst principalsStore = usePrincipalsStore()\n\t\t\tprincipalsStore.setCurrentUserPrincipal(client)\n\t\t\tthis.$store.dispatch('getAddressbooks')\n\t\t\t\t.then((addressbooks) => {\n\t\t\t\t\tconst writeableAddressBooks = addressbooks.filter((addressbook) => !addressbook.readOnly)\n\n\t\t\t\t\t// No writeable addressbooks? Create a new one!\n\t\t\t\t\tif (writeableAddressBooks.length === 0) {\n\t\t\t\t\t\tthis.$store.dispatch('appendAddressbook', { displayName: t('contacts', 'Contacts') })\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tthis.fetchContacts()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t// else, let's get those contacts!\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.fetchContacts()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t// check local storage for orderKey\n\t\t\tif (localStorage.getItem('orderKey')) {\n\t\t\t\t// run setOrder mutation with local storage key\n\t\t\t\tthis.$store.commit('setOrder', localStorage.getItem('orderKey'))\n\t\t\t}\n\t\t})\n\n\t\t// Get circles if enabled\n\t\tif (isCirclesEnabled) {\n\t\t\tconst userGroupStore = useUserGroupStore()\n\t\t\tthis.$store.dispatch('getCircles')\n\t\t\t\t.then(userGroupStore.getUserGroups(getCurrentUser().uid))\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loadingCircles = false\n\t\t\t\t})\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync newContact() {\n\t\t\tif (this.isCirclesView) {\n\t\t\t\temit('contacts:circles:append', this.selectedCircle.id)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst contact = new Contact(\n\t\t\t\t`\n\t\t\t\tBEGIN:VCARD\n\t\t\t\tVERSION:4.0\n\t\t\t\tPRODID:-//Nextcloud Contacts v${appVersion}\n\t\t\t\tEND:VCARD\n\t\t\t`.trim().replace(/\\t/gm, ''),\n\t\t\t\tthis.defaultAddressbook,\n\t\t\t)\n\n\t\t\tcontact.fullName = t('contacts', 'Name')\n\n\t\t\tcontact.rev = ICAL.Time.fromJSDate(new Date(), true)\n\n\t\t\t// itterate over all properties (filter is not usable on objects and we need the key of the property)\n\t\t\tconst properties = rfcProps.properties\n\t\t\tfor (const name in properties) {\n\t\t\t\tif (properties[name].default) {\n\t\t\t\t\tconst defaultData = properties[name].defaultValue\n\t\t\t\t\tlet defaultValue = defaultData.value\n\t\t\t\t\tif (Array.isArray(defaultValue)) {\n\t\t\t\t\t\tdefaultValue = [...defaultValue]\n\t\t\t\t\t}\n\t\t\t\t\t// add default field\n\t\t\t\t\tconst property = contact.vCard.addPropertyWithValue(name, defaultValue)\n\t\t\t\t\t// add default type\n\t\t\t\t\tif (defaultData.type) {\n\t\t\t\t\t\tproperty.setParameter('type', defaultData.type)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// set group if it's selected already\n\t\t\t// BUT NOT if it's the _fake_ groups like all contacts and not grouped\n\t\t\tif ([GROUP_ALL_CONTACTS, GROUP_NO_GROUP_CONTACTS].indexOf(this.selectedGroup) === -1) {\n\t\t\t\tcontact.groups = [this.selectedGroup]\n\t\t\t}\n\t\t\ttry {\n\t\t\t\t// this will trigger the proper commits to groups, contacts and addressbook\n\t\t\t\tawait this.$store.dispatch('addContact', contact)\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: 'contact',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tselectedGroup: this.selectedGroup,\n\t\t\t\t\t\tselectedContact: contact.key,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('contacts', 'Unable to create the contact.'))\n\t\t\t\tconsole.error(error)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Dispatch sorting update request to the store\n\t\t *\n\t\t * @param {string} orderKey the object key to order by\n\t\t */\n\t\tupdateSorting(orderKey = 'displayName') {\n\t\t\tthis.$store.commit('setOrder', orderKey)\n\t\t\tthis.$store.commit('sortContacts')\n\t\t},\n\n\t\t/**\n\t\t * Fetch the contacts of each addressbooks\n\t\t */\n\t\tfetchContacts() {\n\t\t\t// wait for all addressbooks to have fetch their contacts\n\t\t\t// don't filter disabled at this point, because sum of contacts per address book is shown\n\t\t\tPromise.all(this.addressbooks\n\t\t\t\t.map((addressbook) => {\n\t\t\t\t\tif (!addressbook.enabled) {\n\t\t\t\t\t\treturn Promise.resolve()\n\t\t\t\t\t}\n\t\t\t\t\treturn this.$store.dispatch('getContactsFromAddressBook', { addressbook })\n\t\t\t\t})).then(() => {\n\t\t\t\tthis.loadingContacts = false\n\t\t\t\tif (!this.isMobile && !this.selectedChart) {\n\t\t\t\t\tthis.selectFirstContactIfNone()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Select the first contact of the list\n\t\t * if none are selected already\n\t\t */\n\t\tselectFirstContactIfNone() {\n\t\t\t// Do not redirect if pending import\n\t\t\tif (this.$route.name === 'import') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst inList = this.contactsList.findIndex((contact) => contact.key === this.selectedContact) > -1\n\t\t\tif (!this.selectedContact || !inList) {\n\t\t\t\t// Unknown contact\n\t\t\t\tif (this.selectedContact && !inList) {\n\t\t\t\t\tshowError(t('contacts', 'Contact not found'))\n\t\t\t\t\tthis.$router.push({\n\t\t\t\t\t\tname: 'group',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tselectedGroup: this.selectedGroup,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// Unknown group\n\t\t\t\tif (!this.selectedCircle\n\t\t\t\t\t&& !this.selectedUserGroup\n\t\t\t\t\t&& !this.groups.find((group) => group.name === this.selectedGroup)\n\t\t\t\t\t&& GROUP_ALL_CONTACTS !== this.selectedGroup\n\t\t\t\t\t&& GROUP_NO_GROUP_CONTACTS !== this.selectedGroup\n\t\t\t\t\t&& ROUTE_CIRCLE !== this.selectedGroup\n\t\t\t\t\t&& ROUTE_USER_GROUP !== this.selectedGroup) {\n\t\t\t\t\tshowError(t('contacts', 'Group {group} not found', { group: this.selectedGroup }))\n\t\t\t\t\tconsole.error('Group not found', this.selectedGroup)\n\n\t\t\t\t\tthis.$router.push({\n\t\t\t\t\t\tname: 'root',\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (Object.keys(this.contactsList).length) {\n\t\t\t\t\tthis.$router.push({\n\t\t\t\t\t\tname: 'contact',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tselectedGroup: this.selectedGroup,\n\t\t\t\t\t\t\tselectedContact: Object.values(this.contactsList)[0].key,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Done importing, the user closed the import status screen\n\t\t */\n\t\tcloseImport() {\n\t\t\tthis.$store.dispatch('changeStage', 'default')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.import-and-new-contact-buttons {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px;\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { generateUrl } from '@nextcloud/router'\nimport { createRouter, createWebHistory } from 'vue-router'\nimport Contacts from '../views/Contacts.vue'\nimport { ROUTE_CHART, ROUTE_CIRCLE, ROUTE_USER_GROUP } from '../models/constants.ts'\n\n// if index.php is in the url AND we got this far, then it's working:\n// let's keep using index.php in the url\nconst routerHistory = createWebHistory(generateUrl('/apps/contacts', ''))\n\nexport default createRouter({\n\thistory: routerHistory,\n\tlinkActiveClass: 'active',\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\tcomponent: Contacts,\n\t\t\tprops: true,\n\t\t\tname: 'root',\n\t\t\t// always load default group\n\t\t\tredirect: {\n\t\t\t\tname: 'group',\n\t\t\t\tparams: { selectedGroup: t('contacts', 'All contacts') },\n\t\t\t},\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: `/${ROUTE_CHART}/:selectedChart`,\n\t\t\t\t\tname: 'chart',\n\t\t\t\t\tcomponent: Contacts,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpath: 'import',\n\t\t\t\t\tname: 'import',\n\t\t\t\t\tcomponent: Contacts,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpath: `${ROUTE_CIRCLE}/:selectedCircle`,\n\t\t\t\t\tname: 'circle',\n\t\t\t\t\tcomponent: Contacts,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup',\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tcomponent: Contacts,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup/:selectedContact',\n\t\t\t\t\tname: 'contact',\n\t\t\t\t\tcomponent: Contacts,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpath: `${ROUTE_USER_GROUP}/:selectedUserGroup`,\n\t\t\t\t\tname: 'user_group',\n\t\t\t\t\tcomponent: Contacts,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n})\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createPinia } from 'pinia'\nimport { createApp } from 'vue'\nimport App from './ContactsRoot.vue'\nimport LegacyGlobalMixin from './mixins/LegacyGlobalMixin.js'\nimport router from './router/index.js'\nimport logger from './services/logger.js'\nimport store from './store/index.js'\n\nimport 'vite/modulepreload-polyfill'\n// Global scss sheets\nimport './css/contacts.scss'\n// Dialogs css\nimport '@nextcloud/dialogs/style.css'\n\nconst app = createApp(App)\n\n// Redirect Vue errors to Sentry\napp.config.errorHandler = async function(error, vm, info) {\n\tlogger.error(`[Vue error]: Error in ${info}: ${error}`, {\n\t\terror,\n\t\tvm,\n\t\tinfo,\n\t})\n\twindow.onerror?.(error)\n}\n\nconst pinia = createPinia()\napp.use(pinia)\n\napp.use(store)\napp.use(router)\n\napp.mixin(LegacyGlobalMixin)\n\n// Force redirect if rewrite enabled but accessed through index.php\nif (window.location.pathname.split('/')[1] === 'index.php'\n\t&& window.OC.config.modRewriteWorking) {\n\trouter.push({\n\t\tname: 'group',\n\t\tparams: { selectedGroup: t('contacts', 'All contacts') },\n\t})\n}\n\napp.mount('#content')\n"],"file":"contacts-main.mjs"}