{"version":3,"sources":["webpack:///./sidebar/queries/get_merge_request_reviewers.query.graphql","webpack:////build/source/ee/app/assets/javascripts/sidebar/queries/reviewer_applicable_approval_rules.fragment.graphql","webpack:///./graphql_shared/constants.js","webpack:///./graphql_shared/fragments/user_availability.fragment.graphql","webpack:///./notes/constants.js","webpack:///./sidebar/components/reviewers/uncollapsed_reviewer_list.vue","webpack:///./sidebar/components/reviewers/reviewer_avatar.vue?d0ec","webpack:///sidebar/components/reviewers/reviewer_avatar.vue","webpack:///./sidebar/components/reviewers/reviewer_avatar_link.vue?4c40","webpack:///sidebar/components/reviewers/reviewer_avatar_link.vue","webpack:///./sidebar/components/reviewers/reviewer_avatar.vue?f444","webpack:///./sidebar/components/reviewers/reviewer_avatar.vue","webpack:///./sidebar/components/reviewers/reviewer_avatar_link.vue?f001","webpack:///./sidebar/components/reviewers/reviewer_avatar_link.vue","webpack:///sidebar/components/reviewers/uncollapsed_reviewer_list.vue","webpack:///./sidebar/components/reviewers/uncollapsed_reviewer_list.vue?8101","webpack:///./sidebar/components/reviewers/uncollapsed_reviewer_list.vue?0ff4","webpack:///./helpers/event_hub_factory.js","webpack:///./super_sidebar/user_counts_fetch.js","webpack:///./invite_members/event_hub.js","webpack:///./sidebar/components/reviewers/sidebar_reviewers.vue","webpack:///./merge_requests/components/reviewers/reviewer_drawer.vue?eb57","webpack:///merge_requests/components/reviewers/reviewer_drawer.vue","webpack:///./merge_requests/components/reviewers/reviewer_drawer.vue?4c1a","webpack:///./merge_requests/components/reviewers/reviewer_drawer.vue","webpack:///./sidebar/components/reviewers/reviewer_title.vue?0de8","webpack:///sidebar/components/reviewers/reviewer_title.vue","webpack:///./sidebar/components/reviewers/reviewer_title.vue?205e","webpack:///./sidebar/components/reviewers/reviewer_title.vue","webpack:///./sidebar/components/reviewers/reviewers.vue?27b8","webpack:///sidebar/components/reviewers/reviewers.vue","webpack:///./sidebar/components/reviewers/reviewers.vue?a753","webpack:///./sidebar/components/reviewers/reviewers.vue","webpack:///sidebar/components/reviewers/sidebar_reviewers.vue","webpack:///./sidebar/components/reviewers/sidebar_reviewers.vue?26dc","webpack:///./sidebar/components/reviewers/sidebar_reviewers.vue?1507","webpack:///./graphql_shared/utils.js","webpack:///./lib/utils/ajax_cache.js","webpack:///./gfm_auto_complete.js","webpack:///./invite_members/components/invite_members_trigger.vue","webpack:///./invite_members/components/invite_members_trigger.vue?f47d","webpack:///invite_members/components/invite_members_trigger.vue","webpack:///./invite_members/components/invite_members_trigger.vue?c527","webpack:///./sidebar/event_hub.js","webpack:///./sidebar/queries/reviewer_rereview.mutation.graphql","webpack:///./graphql_shared/fragments/user.fragment.graphql","webpack:///./loading_icon_for_legacy_js.js","webpack:///./invite_members/constants.js","webpack:///./sidebar/stores/sidebar_store.js","webpack:///./lib/utils/regexp.js","webpack:///./graphql_shared/queries/project_autocomplete_users_with_mr_permissions.query.graphql","webpack:///./behaviors/markdown/gfm_auto_complete.js","webpack:///./merge_requests/components/reviewers/reviewer_dropdown.vue","webpack:///./merge_requests/components/reviewers/update_reviewers.vue?199e","webpack:///merge_requests/components/reviewers/update_reviewers.vue","webpack:///./merge_requests/components/reviewers/update_reviewers.vue","webpack:///./merge_requests/components/reviewers/reviewer_dropdown.vue?d87f","webpack:///merge_requests/components/reviewers/reviewer_dropdown.vue","webpack:///./merge_requests/components/reviewers/reviewer_dropdown.vue?4a6a","webpack:///./render_vue_component_for_legacy_js.js","webpack:///./merge_requests/components/reviewers/queries/user_permissions.query.graphql","webpack:///./merge_requests/components/reviewers/queries/set_reviewers.mutation.graphql","webpack:///./sidebar/queries/merge_request_reviewers.subscription.graphql","webpack:///./lib/utils/jquery_at_who.js","webpack:///./vue_shared/plugins/global_toast.js","webpack:////build/source/ee/app/assets/javascripts/gfm_auto_complete.js","webpack:///./sidebar/services/sidebar_service.js","webpack:///./sidebar/sidebar_mediator.js"],"names":["doc","loc","source","names","unique","defs","filter","def","kind","name","value","definitions","concat","definitionRefs","findOperation","i","length","element","forEach","refs","Set","collectFragmentReferences","node","add","type","selectionSet","selections","selection","variableDefinitions","module","exports","operationName","newDoc","hasOwnProperty","opRefs","allRefs","newRefs","refName","size","prevRefs","has","childRef","op","push","oneQuery","MINIMUM_SEARCH_LENGTH","TYPENAME_BOARD","TYPENAME_CI_BUILD","TYPENAME_CI_RUNNER","TYPENAME_CI_PIPELINE","TYPENAME_CI_STAGE","TYPENAME_CI_TRIGGER","TYPENAME_CI_VARIABLE","TYPENAME_COMMIT_STATUS","TYPENAME_CONTAINER_REPOSITORY","TYPENAME_CRM_CONTACT","TYPENAME_CRM_ORGANIZATION","TYPENAME_DESIGN_VERSION","TYPENAME_DISCUSSION","TYPENAME_DISCUSSION_NOTE","TYPENAME_EPIC","TYPENAME_EPIC_BOARD","TYPENAME_FEATURE_FLAG","TYPENAME_GROUP","TYPENAME_ISSUE","TYPENAME_ITERATION","TYPENAME_ITERATIONS_CADENCE","TYPENAME_LABEL","TYPENAME_MEMBER_ROLE","TYPENAME_MERGE_REQUEST","TYPENAME_MILESTONE","TYPENAME_NOTE","TYPENAME_PACKAGES_PACKAGE","TYPENAME_PROJECT","TYPENAME_SCANNER_PROFILE","TYPENAME_SITE_PROFILE","TYPENAME_TODO","TYPENAME_USER","TYPENAME_VULNERABILITY","TYPENAME_WORK_ITEM","TYPENAME_WORK_ITEM_RELATED_BRANCH","TYPE_ORGANIZATION","TYPE_USERS_SAVED_REPLY","TYPE_WORKSPACE","TYPE_COMPLIANCE_FRAMEWORK","QUERY_PARAM_START_CURSOR","QUERY_PARAM_END_CURSOR","DISCUSSION_NOTE","DIFF_NOTE","DISCUSSION","NOTE","SYSTEM_NOTE","COMMENT","ISSUE_NOTEABLE_TYPE","EPIC_NOTEABLE_TYPE","MERGE_REQUEST_NOTEABLE_TYPE","SNIPPET_NOTEABLE_TYPE","DESIGN_NOTEABLE_TYPE","COMMIT_NOTEABLE_TYPE","INCIDENT_NOTEABLE_TYPE","UNRESOLVE_NOTE_METHOD_NAME","RESOLVE_NOTE_METHOD_NAME","DESCRIPTION_TYPE","DISCUSSION_FILTERS_DEFAULT_VALUE","COMMENTS_ONLY_FILTER_VALUE","HISTORY_ONLY_FILTER_VALUE","DISCUSSION_TAB_LABEL","NOTE_UNDERSCORE","TIME_DIFFERENCE_VALUE","ASC","DESC","DISCUSSION_FETCH_TIMEOUT","FETCH_UPDATED_NOTES_DEBOUNCE_TIMEOUT","NOTEABLE_TYPE_MAPPING","Issue","MergeRequest","Epic","Incident","DISCUSSION_FILTER_TYPES","ALL","COMMENTS","HISTORY","toggleStateErrorMessage","STATUS_CLOSED","__","STATUS_OPEN","STATUS_REOPENED","MR_FILTER_OPTIONS","text","systemNoteIcons","noteText","s__","bot","noteType","individualNote","MR_FILTER_TRACKING_OPENED","MR_FILTER_TRACKING_USER_COMMENTS","MR_FILTER_TRACKING_BOT_COMMENTS","components","GlAvatar","GlIcon","props","user","Object","required","imgSize","Number","computed","reviewerAlt","sprintf","userName","avatarUrl","avatar_url","gon","default_avatar_url","hasMergeIcon","_this$user$mergeReque","mergeRequestInteraction","canMerge","ReviewerAvatar","_c","this","_self","staticClass","attrs","_v","_e","GlLink","directives","GlTooltip","GlTooltipDirective","rootPath","String","issuableType","default","TYPE_ISSUE","cannotMerge","TYPE_MERGE_REQUEST","reviewerId","getIdFromGraphQLId","id","reviewerUrl","webUrl","_vm","username","_t","REVIEW_STATE_ICONS","APPROVED","iconClass","title","REQUESTED_CHANGES","REVIEWED","UNREVIEWED","REVIEW_STARTED","i18n","reRequestReview","removeReviewer","GlButton","ReviewerAvatarLink","users","Array","isEditable","Boolean","data","showLess","loadingStates","watch","handler","previousUsers","_this","reduce","acc","userPreviousState","find","approved","showApprovalAnimation","immediate","methods","userId","_this2","setTimeout","reviewedButNotApprovedTooltip","toggleShowLess","$emit","callback","requestReviewComplete","_this3","done","requestRemovalComplete","success","_this4","reviewStateIcon","class","reviewState","showRequestReviewButton","includes","LOADING_STATE","SUCCESS_STATE","_l","index","key","_s","canUpdate","rawName","modifiers","$options","on","$event","EventHub","constructor","$_all","Map","dispose","clear","$on","handlers","get","set","$off","newHandlers","x","delete","$once","wrapHandler","args","fetchUserCounts","document","dispatchEvent","CustomEvent","createEventHub","apollo","reviewers","query","getMergeRequestReviewers","variables","fullPath","projectPath","iid","issuableIid","update","_data$workspace","workspace","issuable","nodes","skip","open","GlDrawer","ApprovalSummary","ApprovalRulesWrapper","inject","getDrawerHeaderHeight","getContentWrapperHeight","loadingReviewers","$apollo","queries","loading","DRAWER_Z_INDEX","scopedSlots","_u","fn","proxy","GlLoadingIcon","ReviewerDropdown","Tooltip","numberOfReviewers","editable","reviewerTitle","n__","changeReviewer","UncollapsedReviewerList","hasNoUsers","sortedReviewers","_user$mergeRequestInt","_user$mergeRequestInt2","assignSelf","requestReview","state","Vue","observable","initialLoading","drawerOpen","MountingPortal","ReviewerTitle","Reviewers","ReviewerDrawer","mediator","field","getMergeRequestReviewersQuery","result","error","createAlert","message","subscribeToMore","mergeRequestReviewersUpdatedSubscription","_this$issuable","issuableId","_this$issuable2","updateQuery","_","subscriptionData","mergeRequestReviewersUpdated","store","setReviewersFromRealtime","map","r","relativeUrlRoot","_gon$relative_url_roo","relative_url_root","_this$issuable$review","graphqlFetching","isLoading","_this$issuable$userPe","userPermissions","adminMergeRequest","created","Store","bind","addReviewer","removeAllReviewers","eventHub","saveReviewers","toggleDrawerOpen","beforeDestroy","reviewBySelf","$el","parentElement","Event","addSelfReview","then","refetch","catch","event","isGid","removeReviewerById","startsWith","parseGid","gid","replace","split","rawId","parseInt","isInteger","getTypeFromGraphQLId","mutationOperationMode","append","remove","convertToGraphQLId","TypeError","convertToGraphQLIds","ids","convertNodeIdsFromGraphQLIds","_isArray","getNodesOrDefault","queryData","nodesField","_queryData$nodesField","toggleQueryPollingByVisibility","queryRef","interval","stopStartQuery","Visibility","hidden","stopPolling","startPolling","change","etagQueryHeaders","featureCorrelation","etagResource","fetchOptions","method","headers","calculateGraphQLPaginationQueryParams","startCursor","endCursor","routeQuery","start_cursor","end_cursor","AjaxCache","Cache","super","pendingRequests","override","endpoint","internalStorage","retrieve","forceRetrieve","hasData","Promise","resolve","pendingRequest","axios","e","Error","textStatus","busyBadge","_memoize","renderVueComponentForLegacyJS","GlBadge","variant","outerHTML","escape","string","encodedString","decodedString","decodeURIComponent","_escape","showAndHideHelper","$input","alias","removeClass","addClass","createMemberSearchString","member","membersBeforeSave","members","count","mentionsDisabled","autoCompleteAvatar","charAt","toUpperCase","rectAvatarClass","imgAvatar","txtAvatar","avatarIcon","spriteIcon","avatarTag","search","icon","availability","highlighter","li","escapedQuery","_escapeRegExp","regexp","RegExp","str","$1","$2","$3","setupSubcommands","cmd","atwho","at","keys","maxLen","displayTpl","header","description","defaultAutocompleteConfig","emojis","issues","mergeRequests","epics","iterations","milestones","labels","snippets","vulnerabilities","contacts","wikis","GfmAutoComplete","dataSources","cachedData","isLoadingData","previousQuery","undefined","currentBackendFilterRequestController","setup","input","enableMap","$","setupLifecycle","each","hasClass","off","setupAtWho","trigger","clearCache","setupEmoji","setupMembers","setupIssues","setupMilestones","setupMergeRequests","setupLabels","setupSnippets","setupContacts","setupWikis","searchKey","limit","skipSpecialCharacterTest","skipMarkdownCharacterTest","defaultLoadingData","cssClasses","Loading","template","tpl","aliases","params","warning","_template","className","join","insertTpl","referencePrefix","match","exec","test","interpolate","suffix","callbacks","getDefaultCallbacks","beforeSave","commands","c","matcher","flag","subtext","setSubmitReviewStates","REVIEW_STATES","reviewed","approve","requested_changes","fetchData","Emoji","templateFunction","insertTemplateFunction","unicodeLetters","items","$inputor","sorter","setting","highlightFirst","alwaysHighlightFirst","instance","MEMBER_COMMAND","ASSIGN","UNASSIGN","ASSIGN_REVIEWER","UNASSIGN_REVIEWER","REASSIGN","CC","REQUEST_REVIEW","assignees","command","tmpl","Members","availabilityStatus","isUserBusy","delay","DEFAULT_DEBOUNCE_AND_THROTTLE_MS","_SidebarMediator$sing","_state$issuable","subtextNodes","pop","regexSubtext","values","SidebarMediator","singleton","defaultMatcher","app","controllers","sort","Issues","reference","iconName","icon_name","Milestones","expired","parsedMilestones","m","dueDate","due_date","newDate","Date","now","getTime","mA","mB","merges","LABEL_COMMAND","LABEL","LABELS","UNLABEL","RELABEL","Labels","color","endsWith","lastCandidate","label","Wikis","beforeInsert","slug","substr","toLowerCase","email","Contacts","firstName","first_name","lastName","last_name","contact","self","isTypeWithBackendFiltering","withoutAt","substring","regex","dataSource","atTypeMap","_this$cachedData$at","loadData","abort","AbortController","signal","finally","loadEmojiData","loadSubcommands","some","glEmojiTag","updateDataSources","newDataSources","destroy","dataToInspect","loadingState","atSymbolsWithBar","atSymbolsWithoutBar","targetSubtext","resultantFlag","accentAChar","decodeURI","accentYChar","typesWithBackendFiltering","emoji","item","escapedFieldValue","fieldValue","slice","nameOrUsernameStartsWith","nameOrUsernameIncludes","lowercaseQuery","_sortBy","mappedIconName","ISSUABLE_EPIC","WORK_ITEMS_TYPE_MAP","WORK_ITEM_TYPE_ENUM_EPIC","milestone","slugSpan","loadingSpinner","loadingIconForLegacyJS","inline","classes","GlDropdownItem","GlDisclosureDropdownItem","displayText","category","triggerSource","triggerElement","componentAttributes","isButtonTrigger","TRIGGER_ELEMENT_BUTTON","isWithEmojiTrigger","TRIGGER_ELEMENT_WITH_EMOJI","isDropdownWithEmojiTrigger","TRIGGER_ELEMENT_DROPDOWN_WITH_EMOJI","isDisclosureTrigger","TRIGGER_ELEMENT_DISCLOSURE_DROPDOWN","openModal","handleDisclosureDropdownAction","component","_b","window","emitSidebarEvent","defaultValue","prop","_GlLoadingIcon$props$","PROJECT_SELECT_LABEL_ID","SEARCH_DELAY","VALID_TOKEN_BACKGROUND","WARNING_TOKEN_BACKGROUND","INVALID_TOKEN_BACKGROUND","TOAST_MESSAGE_LOCALSTORAGE_KEY","MEMBERS_WITH_QUEUED_STATUS_LOCALSTORAGE_KEY","GROUP_FILTERS","DESCENDANT_GROUPS","USERS_FILTER_ALL","USERS_FILTER_SAML_PROVIDER_ID","TOP_NAV_INVITE_MEMBERS_COMPONENT","INVITE_MEMBER_MODAL_TRACKING_CATEGORY","IMPORT_PROJECT_MEMBERS_MODAL_TRACKING_CATEGORY","IMPORT_PROJECT_MEMBERS_MODAL_TRACKING_LABEL","MEMBERS_MODAL_DEFAULT_TITLE","MEMBERS_MODAL_CELEBRATE_TITLE","MEMBERS_MODAL_CELEBRATE_INTRO","MEMBERS_TO_GROUP_DEFAULT_INTRO_TEXT","MEMBERS_TO_PROJECT_DEFAULT_INTRO_TEXT","MEMBERS_TO_PROJECT_CELEBRATE_INTRO_TEXT","MEMBERS_SEARCH_FIELD","MEMBERS_PLACEHOLDER","GROUP_MODAL_DEFAULT_TITLE","GROUP_MODAL_TO_GROUP_DEFAULT_INTRO_TEXT","GROUP_MODAL_TO_PROJECT_DEFAULT_INTRO_TEXT","GROUP_MODAL_TO_GROUP_ALERT_BODY","GROUP_MODAL_TO_GROUP_ALERT_LINK","helpPagePath","anchor","GROUP_MODAL_TO_PROJECT_ALERT_BODY","GROUP_MODAL_TO_PROJECT_ALERT_LINK","GROUP_SEARCH_FIELD","GROUP_PLACEHOLDER","ACCESS_LEVEL","ACCESS_EXPIRE_DATE","TOAST_MESSAGE_SUCCESSFUL","QUEUED_MESSAGE_SUCCESSFUL","INVALID_FEEDBACK_MESSAGE_DEFAULT","READ_MORE_TEXT","READ_MORE_ACCESS_EXPIRATION_TEXT","INVITE_BUTTON_TEXT","INVITE_BUTTON_TEXT_DISABLED","CANCEL_BUTTON_TEXT","HEADER_CLOSE_LABEL","MEMBER_ERROR_LIST_TEXT","COLLAPSED_ERRORS","EXPANDED_ERRORS","EMPTY_INVITES_ALERT_TEXT","MEMBER_MODAL_LABELS","modal","celebrate","intro","toGroup","introText","toProject","searchField","placeHolder","toastMessageSuccessful","memberErrorListText","collapsedErrors","expandedErrors","emptyInvitesAlertText","GROUP_MODAL_LABELS","notificationText","notificationLink","ON_SHOW_TRACK_LABEL","ON_CELEBRATION_TRACK_LABEL","WARNING_ALERT_TITLE","DANGER_ALERT_TITLE","REACHED_LIMIT_VARIANT","CLOSE_TO_LIMIT_VARIANT","REACHED_LIMIT_UPGRADE_SUGGESTION_MESSAGE","CLOSE_TO_LIMIT_MESSAGE","BLOCKED_SEAT_OVERAGES_BODY","BLOCKED_SEAT_OVERAGES_CTA","BLOCKED_SEAT_OVERAGES_CTA_DOCS","BLOCKED_SEAT_OVERAGES_ERROR_REASON","SidebarStore","options","initSingleton","currentUser","timeTrackingLimitToHours","parseBoolean","timeEstimate","totalTimeSpent","humanTimeEstimate","humanTimeSpent","isFetching","autocompleteProjects","moveToProjectId","isLockDialogOpen","participants","projectEmailsEnabled","subscribeDisabledDescription","subscribed","changing","setAssigneeData","setReviewerData","resetChanging","setTimeTrackingData","time_estimate","total_time_spent","human_time_estimate","humanTotalTimeSpent","human_total_time_spent","setFetchingState","setLoadingState","addAssignee","assignee","findAssignee","reviewer","findReviewer","updateAssignee","stateKey","updateReviewer","overwrite","newData","removeAssignee","removeAllAssignees","setAssigneesFromRealtime","setAutocompleteProjects","projects","setSubscribedState","setMoveToProjectId","semverRegex","noSpacesRegex","containsPotentialRegex","initGFMInput","$els","el","gfm","gl","enableGFM","dataset","supportsAutocomplete","selectedReviewers","mutate","mutation","setReviewersMutation","reviewerUsernames","render","$scopedSlots","updateReviewers","userPermissionsQuery","_data$project","project","mergeRequest","GlCollapsibleListbox","UpdateReviewers","InviteMembersTrigger","visibleReviewers","searching","fetchedUsers","currentSelectedReviewers","mappedUsers","selectedReviewersToShow","mapUser","textSrOnly","u","gqlUser","newVal","debouncedFetchAutocompleteUsers","_debounce","fetchAutocompleteUsers","secondaryText","shownDropdown","userAutocompleteWithMRPermissionsQuery","mergeRequestId","selectReviewer","unassign","directlyInviteMembers","model","$$v","expression","Component","children","vm","h","$mount","$forceUpdate","cloneNode","$destroy","use","GlToast","showGlobalToast","$toast","show","Q_ISSUE_SUB_COMMANDS","dev","transform","Q_MERGE_REQUEST_SUB_COMMANDS","fix","review","Q_MERGE_REQUEST_CAN_SUGGEST_SUB_COMMANDS","Iterations","GfmAutoCompleteEE","_defineProperty","defaultCallbacks","setupAutoCompleteEpics","setupAutoCompleteIterations","setupAutoCompleteVulnerabilities","canSuggest","getQSubCommands","gqClient","createGqClient","fetchPolicy","fetchPolicies","NO_CACHE","SidebarService","endpointMap","moveIssueEndpoint","projectsAutocompleteEndpoint","put","getProjectsAutocomplete","searchTerm","moveIssue","post","move_to_project_id","reviewerRereviewMutation","toString","service","Service","assignYourself","selected","assignee_ids","res","reject","selectedIds","suggestedSelectedIds","suggested","reviewer_ids","suggested_reviewer_ids","toast","projectId","fetch","processFetchedData","fetchAutocompleteProjects","location","pathname","web_url","visitUrl"],"mappings":"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","file":"initGFMInput.dae925e8.chunk.js","sourcesContent":["\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestReviewers\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"ID\"}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"alias\":{\"kind\":\"Name\",\"value\":\"workspace\"},\"name\":{\"kind\":\"Name\",\"value\":\"project\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"alias\":{\"kind\":\"Name\",\"value\":\"issuable\"},\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequest\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"reviewers\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"nodes\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"User\"},\"directives\":[]},{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"UserAvailability\"},\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestInteraction\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"canMerge\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"canUpdate\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"approved\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"reviewState\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ReviewersApplicableApprovalRules\"},\"directives\":[]}]}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"userPermissions\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"adminMergeRequest\"},\"arguments\":[],\"directives\":[]}]}}]}}]}}]}}],\"loc\":{\"start\":0,\"end\":737}};\n    doc.loc.source = {\"body\":\"#import \\\"~/graphql_shared/fragments/user.fragment.graphql\\\"\\n#import \\\"~/graphql_shared/fragments/user_availability.fragment.graphql\\\"\\n#import \\\"ee_else_ce/sidebar/queries/reviewer_applicable_approval_rules.fragment.graphql\\\"\\n\\nquery mergeRequestReviewers($fullPath: ID!, $iid: String!) {\\n  workspace: project(fullPath: $fullPath) {\\n    id\\n    issuable: mergeRequest(iid: $iid) {\\n      id\\n      reviewers {\\n        nodes {\\n          ...User\\n          ...UserAvailability\\n          mergeRequestInteraction {\\n            canMerge\\n            canUpdate\\n            approved\\n            reviewState\\n\\n            ...ReviewersApplicableApprovalRules\\n          }\\n        }\\n      }\\n      userPermissions {\\n        adminMergeRequest\\n      }\\n    }\\n  }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  doc.definitions = doc.definitions.concat(unique(require(\"~/graphql_shared/fragments/user.fragment.graphql\").definitions));\ndoc.definitions = doc.definitions.concat(unique(require(\"~/graphql_shared/fragments/user_availability.fragment.graphql\").definitions));\ndoc.definitions = doc.definitions.concat(unique(require(\"ee_else_ce/sidebar/queries/reviewer_applicable_approval_rules.fragment.graphql\").definitions));\n\n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set();\n\n      // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n      opRefs.forEach(function(refName) {\n        newRefs.add(refName);\n      });\n\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n    \n    module.exports = doc;\n    \n        module.exports[\"mergeRequestReviewers\"] = oneQuery(doc, \"mergeRequestReviewers\");\n        \n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"ReviewersApplicableApprovalRules\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"UserMergeRequestInteraction\"}},\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"applicableApprovalRules\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":116}};\n    doc.loc.source = {\"body\":\"fragment ReviewersApplicableApprovalRules on UserMergeRequestInteraction {\\n  applicableApprovalRules {\\n    id\\n  }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set();\n\n      // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n      opRefs.forEach(function(refName) {\n        newRefs.add(refName);\n      });\n\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n    \n    module.exports = doc;\n    \n        module.exports[\"ReviewersApplicableApprovalRules\"] = oneQuery(doc, \"ReviewersApplicableApprovalRules\");\n        \n","export const MINIMUM_SEARCH_LENGTH = 3;\n\nexport const TYPENAME_BOARD = 'Board';\nexport const TYPENAME_CI_BUILD = 'Ci::Build';\nexport const TYPENAME_CI_RUNNER = 'Ci::Runner';\nexport const TYPENAME_CI_PIPELINE = 'Ci::Pipeline';\nexport const TYPENAME_CI_STAGE = 'Ci::Stage';\nexport const TYPENAME_CI_TRIGGER = 'Ci::Trigger';\nexport const TYPENAME_CI_VARIABLE = 'Ci::Variable';\nexport const TYPENAME_COMMIT_STATUS = 'CommitStatus';\nexport const TYPENAME_CONTAINER_REPOSITORY = 'ContainerRepository';\nexport const TYPENAME_CRM_CONTACT = 'CustomerRelations::Contact';\nexport const TYPENAME_CRM_ORGANIZATION = 'CustomerRelations::Organization';\nexport const TYPENAME_DESIGN_VERSION = 'DesignManagement::Version';\nexport const TYPENAME_DISCUSSION = 'Discussion';\nexport const TYPENAME_DISCUSSION_NOTE = 'DiscussionNote';\nexport const TYPENAME_EPIC = 'Epic';\nexport const TYPENAME_EPIC_BOARD = 'Boards::EpicBoard';\nexport const TYPENAME_FEATURE_FLAG = 'FeatureFlag';\nexport const TYPENAME_GROUP = 'Group';\nexport const TYPENAME_ISSUE = 'Issue';\nexport const TYPENAME_ITERATION = 'Iteration';\nexport const TYPENAME_ITERATIONS_CADENCE = 'Iterations::Cadence';\nexport const TYPENAME_LABEL = 'Label';\nexport const TYPENAME_MEMBER_ROLE = 'MemberRole';\nexport const TYPENAME_MERGE_REQUEST = 'MergeRequest';\nexport const TYPENAME_MILESTONE = 'Milestone';\nexport const TYPENAME_NOTE = 'Note';\nexport const TYPENAME_PACKAGES_PACKAGE = 'Packages::Package';\nexport const TYPENAME_PROJECT = 'Project';\nexport const TYPENAME_SCANNER_PROFILE = 'DastScannerProfile';\nexport const TYPENAME_SITE_PROFILE = 'DastSiteProfile';\nexport const TYPENAME_TODO = 'Todo';\nexport const TYPENAME_USER = 'User';\nexport const TYPENAME_VULNERABILITY = 'Vulnerability';\nexport const TYPENAME_WORK_ITEM = 'WorkItem';\nexport const TYPENAME_WORK_ITEM_RELATED_BRANCH = 'WorkItemRelatedBranch';\nexport const TYPE_ORGANIZATION = 'Organizations::Organization';\nexport const TYPE_USERS_SAVED_REPLY = 'Users::SavedReply';\nexport const TYPE_WORKSPACE = 'RemoteDevelopment::Workspace';\nexport const TYPE_COMPLIANCE_FRAMEWORK = 'ComplianceManagement::Framework';\n\nexport const QUERY_PARAM_START_CURSOR = 'start_cursor';\nexport const QUERY_PARAM_END_CURSOR = 'end_cursor';\n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"UserAvailability\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"User\"}},\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"status\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"availability\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":70}};\n    doc.loc.source = {\"body\":\"fragment UserAvailability on User {\\n  status {\\n    availability\\n  }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set();\n\n      // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n      opRefs.forEach(function(refName) {\n        newRefs.add(refName);\n      });\n\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n    \n    module.exports = doc;\n    \n        module.exports[\"UserAvailability\"] = oneQuery(doc, \"UserAvailability\");\n        \n","import { STATUS_CLOSED, STATUS_OPEN, STATUS_REOPENED } from '~/issues/constants';\nimport { __, s__ } from '~/locale';\n\nexport const DISCUSSION_NOTE = 'DiscussionNote';\nexport const DIFF_NOTE = 'DiffNote';\nexport const DISCUSSION = 'discussion';\nexport const NOTE = 'note';\nexport const SYSTEM_NOTE = 'systemNote';\nexport const COMMENT = 'comment';\nexport const ISSUE_NOTEABLE_TYPE = 'Issue';\nexport const EPIC_NOTEABLE_TYPE = 'Epic';\nexport const MERGE_REQUEST_NOTEABLE_TYPE = 'MergeRequest';\nexport const SNIPPET_NOTEABLE_TYPE = 'Snippet';\nexport const DESIGN_NOTEABLE_TYPE = 'DesignManagement::Design';\nexport const COMMIT_NOTEABLE_TYPE = 'Commit';\nexport const INCIDENT_NOTEABLE_TYPE = 'INCIDENT'; // TODO: check if value can be converted to `Incident`\nexport const UNRESOLVE_NOTE_METHOD_NAME = 'delete';\nexport const RESOLVE_NOTE_METHOD_NAME = 'post';\nexport const DESCRIPTION_TYPE = 'changed the description';\nexport const DISCUSSION_FILTERS_DEFAULT_VALUE = 0;\nexport const COMMENTS_ONLY_FILTER_VALUE = 1;\nexport const HISTORY_ONLY_FILTER_VALUE = 2;\nexport const DISCUSSION_TAB_LABEL = 'show';\nexport const NOTE_UNDERSCORE = 'note_';\nexport const TIME_DIFFERENCE_VALUE = 10;\nexport const ASC = 'asc';\nexport const DESC = 'desc';\n\nexport const DISCUSSION_FETCH_TIMEOUT = 750;\n\nexport const FETCH_UPDATED_NOTES_DEBOUNCE_TIMEOUT = 750;\n\nexport const NOTEABLE_TYPE_MAPPING = {\n  Issue: ISSUE_NOTEABLE_TYPE,\n  MergeRequest: MERGE_REQUEST_NOTEABLE_TYPE,\n  Epic: EPIC_NOTEABLE_TYPE,\n  Incident: INCIDENT_NOTEABLE_TYPE,\n};\n\nexport const DISCUSSION_FILTER_TYPES = {\n  ALL: 'all',\n  COMMENTS: 'comments',\n  HISTORY: 'history',\n};\n\nexport const toggleStateErrorMessage = {\n  Epic: {\n    [STATUS_CLOSED]: __('Something went wrong while reopening the epic. Please try again later.'),\n    [STATUS_OPEN]: __('Something went wrong while closing the epic. Please try again later.'),\n    [STATUS_REOPENED]: __('Something went wrong while closing the epic. Please try again later.'),\n  },\n  MergeRequest: {\n    [STATUS_CLOSED]: __(\n      'Something went wrong while reopening the merge request. Please try again later.',\n    ),\n    [STATUS_OPEN]: __(\n      'Something went wrong while closing the merge request. Please try again later.',\n    ),\n    [STATUS_REOPENED]: __(\n      'Something went wrong while closing the merge request. Please try again later.',\n    ),\n  },\n};\n\nexport const MR_FILTER_OPTIONS = [\n  {\n    text: __('Approvals'),\n    value: 'approval',\n    systemNoteIcons: ['approval', 'unapproval', 'check', 'error'],\n  },\n  {\n    text: __('Assignees & reviewers'),\n    value: 'assignees_reviewers',\n    noteText: [\n      s__('IssuableEvents|requested review from'),\n      s__('IssuableEvents|removed review request for'),\n      s__('IssuableEvents|assigned to'),\n      s__('IssuableEvents|unassigned'),\n    ],\n  },\n  {\n    text: __('Comments (from bots)'),\n    value: 'bot_comments',\n    bot: true,\n  },\n  {\n    text: __('Comments (from users)'),\n    value: 'comments',\n    noteType: ['DiscussionNote', 'DiffNote'],\n    individualNote: true,\n    noteText: [s__('IssuableEvents|resolved all threads')],\n  },\n  {\n    text: __('Commits & branches'),\n    value: 'commit_branches',\n    systemNoteIcons: ['commit', 'fork'],\n  },\n  {\n    text: __('Edits'),\n    value: 'edits',\n    systemNoteIcons: ['pencil', 'todo-done'],\n  },\n  {\n    text: __('Labels'),\n    value: 'labels',\n    systemNoteIcons: ['label'],\n  },\n  {\n    text: __('Lock status'),\n    value: 'lock_status',\n    systemNoteIcons: ['lock', 'lock-open'],\n  },\n  {\n    text: __('Mentions'),\n    value: 'mentions',\n    systemNoteIcons: ['comment-dots'],\n  },\n  {\n    text: __('Merge request status'),\n    value: 'status',\n    systemNoteIcons: ['merge-request', 'issue-close', 'issues', 'merge-request-close', 'merge'],\n  },\n  {\n    text: __('Tracking'),\n    value: 'tracking',\n    noteType: ['MilestoneNote'],\n    systemNoteIcons: ['timer'],\n  },\n];\nexport const MR_FILTER_TRACKING_OPENED = 'user_clicks_comment_filter_dropdown';\nexport const MR_FILTER_TRACKING_USER_COMMENTS = 'click_comment_filter_toggle_user_comments_in_mr';\nexport const MR_FILTER_TRACKING_BOT_COMMENTS = 'click_comment_filter_toggle_bot_comments_in_mr';\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',_vm._l((_vm.users),function(user,index){return _c('div',{key:user.id,staticClass:\"reviewer-grid gl-mr-2 gl-grid gl-items-center\",class:{\n      'gl-mb-3': index !== _vm.users.length - 1,\n    },attrs:{\"data-testid\":\"reviewer\"}},[_c('reviewer-avatar-link',{staticClass:\"gl-mr-2 gl-break-anywhere\",attrs:{\"user\":user,\"root-path\":_vm.rootPath,\"issuable-type\":_vm.issuableType,\"data-css-area\":\"user\"}},[_c('div',{staticClass:\"gl-ml-3 gl-grid gl-items-center gl-leading-normal\"},[_vm._v(\"\\n        \"+_vm._s(user.name)+\"\\n      \")])]),_vm._v(\" \"),(user.mergeRequestInteraction.canUpdate && _vm.showRequestReviewButton(user))?_c('gl-button',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip.left\",modifiers:{\"left\":true}}],staticClass:\"gl-float-right gl-mr-2 !gl-text-subtle\",attrs:{\"title\":_vm.$options.i18n.reRequestReview,\"aria-label\":_vm.$options.i18n.reRequestReview,\"loading\":_vm.loadingStates[user.id] === _vm.$options.LOADING_STATE,\"size\":\"small\",\"icon\":\"redo\",\"variant\":\"link\",\"data-testid\":\"re-request-button\"},on:{\"click\":function($event){return _vm.reRequestReview(user.id)}}}):_vm._e(),_vm._v(\" \"),_c('span',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip.top.viewport\",modifiers:{\"top\":true,\"viewport\":true}}],staticClass:\"gl-float-right gl-my-2 gl-ml-auto gl-shrink-0\",class:_vm.reviewStateIcon(user).class,attrs:{\"title\":_vm.reviewStateIcon(user).title,\"data-testid\":\"reviewer-state-icon-parent\"}},[_c('gl-icon',{class:_vm.reviewStateIcon(user).iconClass,attrs:{\"size\":_vm.reviewStateIcon(user).size || 16,\"name\":_vm.reviewStateIcon(user).name,\"aria-label\":_vm.reviewStateIcon(user).title,\"data-testid\":\"reviewer-state-icon\"}})],1),_vm._v(\" \"),(_vm.isEditable)?_c('span',{staticClass:\"gl-inline-flex gl-h-6 gl-w-6\"},[_c('gl-button',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip.top.viewport\",modifiers:{\"top\":true,\"viewport\":true}}],staticClass:\"gl-float-right gl-ml-2 !gl-text-subtle\",attrs:{\"title\":_vm.$options.i18n.removeReviewer,\"aria-label\":_vm.$options.i18n.removeReviewer,\"loading\":_vm.loadingStates[user.id] === _vm.$options.LOADING_STATE,\"size\":\"small\",\"icon\":\"close\",\"variant\":\"link\",\"data-testid\":\"remove-request-button\"},on:{\"click\":function($event){return _vm.removeReviewer(user.id)}}})],1):_vm._e()],1)}),0)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_avatar.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_avatar.vue?vue&type=script&lang=js\"","<script>\n// NOTE! For the first iteration, we are simply copying the implementation of Assignees\n// It will soon be overhauled in Issue https://gitlab.com/gitlab-org/gitlab/-/issues/233736\nimport { GlAvatar, GlIcon } from '@gitlab/ui';\nimport { __, sprintf } from '~/locale';\n\nexport default {\n  components: {\n    GlAvatar,\n    GlIcon,\n  },\n  props: {\n    user: {\n      type: Object,\n      required: true,\n    },\n    imgSize: {\n      type: Number,\n      required: true,\n    },\n  },\n  computed: {\n    reviewerAlt() {\n      return sprintf(__(\"%{userName}'s avatar\"), { userName: this.user.name });\n    },\n    avatarUrl() {\n      return this.user.avatarUrl || this.user.avatar_url || gon.default_avatar_url;\n    },\n    hasMergeIcon() {\n      return !this.user.mergeRequestInteraction?.canMerge;\n    },\n  },\n};\n</script>\n\n<template>\n  <span class=\"gl-relative\">\n    <gl-avatar :label=\"user.name\" :src=\"avatarUrl\" :size=\"imgSize\" :alt=\"reviewerAlt\" />\n    <gl-icon\n      v-if=\"hasMergeIcon\"\n      name=\"warning-solid\"\n      aria-hidden=\"true\"\n      class=\"merge-icon reviewer-merge-icon\"\n    />\n  </span>\n</template>\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_avatar_link.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_avatar_link.vue?vue&type=script&lang=js\"","<script>\n// NOTE! For the first iteration, we are simply copying the implementation of Assignees\n// It will soon be overhauled in Issue https://gitlab.com/gitlab-org/gitlab/-/issues/233736\nimport { GlTooltipDirective, GlLink } from '@gitlab/ui';\nimport { TYPE_ISSUE, TYPE_MERGE_REQUEST } from '~/issues/constants';\nimport { getIdFromGraphQLId } from '~/graphql_shared/utils';\nimport ReviewerAvatar from './reviewer_avatar.vue';\n\nexport default {\n  components: {\n    ReviewerAvatar,\n    GlLink,\n  },\n  directives: {\n    GlTooltip: GlTooltipDirective,\n  },\n  props: {\n    user: {\n      type: Object,\n      required: true,\n    },\n    rootPath: {\n      type: String,\n      required: true,\n    },\n    issuableType: {\n      type: String,\n      default: TYPE_ISSUE,\n      required: false,\n    },\n  },\n  computed: {\n    cannotMerge() {\n      return (\n        this.issuableType === TYPE_MERGE_REQUEST && !this.user.mergeRequestInteraction?.canMerge\n      );\n    },\n    reviewerId() {\n      return getIdFromGraphQLId(this.user.id);\n    },\n    reviewerUrl() {\n      return this.user.webUrl;\n    },\n  },\n};\n</script>\n\n<template>\n  <!-- must be `gl-inline-block` or parent flex-basis causes width issues -->\n  <gl-link\n    :href=\"reviewerUrl\"\n    :data-user-id=\"reviewerId\"\n    :data-username=\"user.username\"\n    :data-cannot-merge=\"cannotMerge\"\n    data-placement=\"left\"\n    class=\"js-user-link gl-inline-block !gl-text-inherit hover:!gl-text-blue-800\"\n  >\n    <!-- use gl-flex so that slot can be appropriately styled -->\n    <span class=\"gl-flex\">\n      <reviewer-avatar :user=\"user\" :img-size=\"24\" :issuable-type=\"issuableType\" />\n      <slot :user=\"user\"></slot>\n    </span>\n  </gl-link>\n</template>\n","import { render, staticRenderFns } from \"./reviewer_avatar.vue?vue&type=template&id=6f9204a6\"\nimport script from \"./reviewer_avatar.vue?vue&type=script&lang=js\"\nexport * from \"./reviewer_avatar.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"gl-relative\"},[_c('gl-avatar',{attrs:{\"label\":_vm.user.name,\"src\":_vm.avatarUrl,\"size\":_vm.imgSize,\"alt\":_vm.reviewerAlt}}),_vm._v(\" \"),(_vm.hasMergeIcon)?_c('gl-icon',{staticClass:\"merge-icon reviewer-merge-icon\",attrs:{\"name\":\"warning-solid\",\"aria-hidden\":\"true\"}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./reviewer_avatar_link.vue?vue&type=template&id=9d273eae\"\nimport script from \"./reviewer_avatar_link.vue?vue&type=script&lang=js\"\nexport * from \"./reviewer_avatar_link.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('gl-link',{staticClass:\"js-user-link gl-inline-block !gl-text-inherit hover:!gl-text-blue-800\",attrs:{\"href\":_vm.reviewerUrl,\"data-user-id\":_vm.reviewerId,\"data-username\":_vm.user.username,\"data-cannot-merge\":_vm.cannotMerge,\"data-placement\":\"left\"}},[_c('span',{staticClass:\"gl-flex\"},[_c('reviewer-avatar',{attrs:{\"user\":_vm.user,\"img-size\":24,\"issuable-type\":_vm.issuableType}}),_vm._v(\" \"),_vm._t(\"default\",null,{\"user\":_vm.user})],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<script>\nimport { GlButton, GlTooltipDirective, GlIcon } from '@gitlab/ui';\nimport { TYPE_ISSUE } from '~/issues/constants';\nimport { __, sprintf, s__ } from '~/locale';\nimport ReviewerAvatarLink from './reviewer_avatar_link.vue';\n\nconst LOADING_STATE = 'loading';\nconst SUCCESS_STATE = 'success';\nconst JUST_APPROVED = 'approved';\n\nconst REVIEW_STATE_ICONS = {\n  APPROVED: {\n    name: 'check-circle',\n    iconClass: 'gl-fill-icon-success',\n    title: s__('MergeRequest|Reviewer approved changes'),\n  },\n  REQUESTED_CHANGES: {\n    name: 'error',\n    iconClass: 'gl-fill-icon-danger',\n    title: s__('MergeRequest|Reviewer requested changes'),\n  },\n  REVIEWED: {\n    name: 'comment-lines',\n    iconClass: 'gl-fill-icon-info',\n    title: s__('MergeRequest|Reviewer commented'),\n  },\n  UNREVIEWED: {\n    name: 'dash-circle',\n    iconClass: 'gl-fill-icon-default',\n    title: s__('MergeRequest|Awaiting review'),\n  },\n  REVIEW_STARTED: {\n    name: 'comment-dots',\n    iconClass: 'gl-fill-icon-default',\n    title: s__('MergeRequest|Reviewer started review'),\n  },\n};\n\nexport default {\n  i18n: {\n    reRequestReview: __('Re-request review'),\n    removeReviewer: s__('MergeRequest|Remove reviewer'),\n  },\n  components: {\n    GlButton,\n    GlIcon,\n    ReviewerAvatarLink,\n  },\n  directives: {\n    GlTooltip: GlTooltipDirective,\n  },\n  props: {\n    users: {\n      type: Array,\n      required: true,\n    },\n    rootPath: {\n      type: String,\n      required: true,\n    },\n    issuableType: {\n      type: String,\n      required: false,\n      default: TYPE_ISSUE,\n    },\n    isEditable: {\n      type: Boolean,\n      required: false,\n      default: false,\n    },\n  },\n  data() {\n    return {\n      showLess: true,\n      loadingStates: {},\n    };\n  },\n  watch: {\n    users: {\n      handler(users, previousUsers) {\n        this.loadingStates = users.reduce(\n          (acc, user) => ({\n            ...acc,\n            [user.id]: acc[user.id] || null,\n          }),\n          this.loadingStates,\n        );\n        if (previousUsers) {\n          users.forEach((user) => {\n            const userPreviousState = previousUsers.find(({ id }) => id === user.id);\n            if (\n              userPreviousState &&\n              user.mergeRequestInteraction.approved &&\n              !userPreviousState.mergeRequestInteraction.approved\n            ) {\n              this.showApprovalAnimation(user.id);\n            }\n          });\n        }\n      },\n      immediate: true,\n    },\n  },\n  methods: {\n    showApprovalAnimation(userId) {\n      this.loadingStates[userId] = JUST_APPROVED;\n\n      setTimeout(() => {\n        this.loadingStates[userId] = null;\n      }, 1500);\n    },\n    reviewedButNotApprovedTooltip(user) {\n      return sprintf(s__('MergeRequest|Reviewed by @%{username} but not yet approved'), user);\n    },\n    toggleShowLess() {\n      this.showLess = !this.showLess;\n    },\n    reRequestReview(userId) {\n      this.loadingStates[userId] = LOADING_STATE;\n      this.$emit('request-review', { userId, callback: this.requestReviewComplete });\n    },\n    removeReviewer(userId) {\n      this.loadingStates[userId] = LOADING_STATE;\n      this.$emit('remove-reviewer', {\n        userId,\n        done: () => this.requestRemovalComplete(userId),\n      });\n    },\n    requestReviewComplete(userId, success) {\n      if (success) {\n        this.loadingStates[userId] = SUCCESS_STATE;\n\n        setTimeout(() => {\n          this.loadingStates[userId] = null;\n        }, 1500);\n      } else {\n        this.loadingStates[userId] = null;\n      }\n    },\n    requestRemovalComplete(userId) {\n      delete this.loadingStates[userId];\n    },\n    reviewStateIcon(user) {\n      if (user.mergeRequestInteraction.approved) {\n        return {\n          ...REVIEW_STATE_ICONS.APPROVED,\n          class: [this.loadingStates[user.id] === JUST_APPROVED && 'merge-request-approved-icon'],\n        };\n      }\n      return (\n        REVIEW_STATE_ICONS[user.mergeRequestInteraction.reviewState] ||\n        REVIEW_STATE_ICONS.UNREVIEWED\n      );\n    },\n    showRequestReviewButton(user) {\n      if (!user.mergeRequestInteraction.approved) {\n        return !['UNREVIEWED'].includes(user.mergeRequestInteraction.reviewState);\n      }\n\n      return true;\n    },\n  },\n  LOADING_STATE,\n  SUCCESS_STATE,\n};\n</script>\n\n<template>\n  <div>\n    <div\n      v-for=\"(user, index) in users\"\n      :key=\"user.id\"\n      :class=\"{\n        'gl-mb-3': index !== users.length - 1,\n      }\"\n      class=\"reviewer-grid gl-mr-2 gl-grid gl-items-center\"\n      data-testid=\"reviewer\"\n    >\n      <reviewer-avatar-link\n        :user=\"user\"\n        :root-path=\"rootPath\"\n        :issuable-type=\"issuableType\"\n        class=\"gl-mr-2 gl-break-anywhere\"\n        data-css-area=\"user\"\n      >\n        <div class=\"gl-ml-3 gl-grid gl-items-center gl-leading-normal\">\n          {{ user.name }}\n        </div>\n      </reviewer-avatar-link>\n      <gl-button\n        v-if=\"user.mergeRequestInteraction.canUpdate && showRequestReviewButton(user)\"\n        v-gl-tooltip.left\n        :title=\"$options.i18n.reRequestReview\"\n        :aria-label=\"$options.i18n.reRequestReview\"\n        :loading=\"loadingStates[user.id] === $options.LOADING_STATE\"\n        class=\"gl-float-right gl-mr-2 !gl-text-subtle\"\n        size=\"small\"\n        icon=\"redo\"\n        variant=\"link\"\n        data-testid=\"re-request-button\"\n        @click=\"reRequestReview(user.id)\"\n      />\n      <span\n        v-gl-tooltip.top.viewport\n        :title=\"reviewStateIcon(user).title\"\n        class=\"gl-float-right gl-my-2 gl-ml-auto gl-shrink-0\"\n        :class=\"reviewStateIcon(user).class\"\n        data-testid=\"reviewer-state-icon-parent\"\n      >\n        <gl-icon\n          :size=\"reviewStateIcon(user).size || 16\"\n          :name=\"reviewStateIcon(user).name\"\n          :class=\"reviewStateIcon(user).iconClass\"\n          :aria-label=\"reviewStateIcon(user).title\"\n          data-testid=\"reviewer-state-icon\"\n        />\n      </span>\n      <span v-if=\"isEditable\" class=\"gl-inline-flex gl-h-6 gl-w-6\">\n        <gl-button\n          v-gl-tooltip.top.viewport\n          :title=\"$options.i18n.removeReviewer\"\n          :aria-label=\"$options.i18n.removeReviewer\"\n          :loading=\"loadingStates[user.id] === $options.LOADING_STATE\"\n          class=\"gl-float-right gl-ml-2 !gl-text-subtle\"\n          size=\"small\"\n          icon=\"close\"\n          variant=\"link\"\n          data-testid=\"remove-request-button\"\n          @click=\"removeReviewer(user.id)\"\n        />\n      </span>\n    </div>\n  </div>\n</template>\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./uncollapsed_reviewer_list.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./uncollapsed_reviewer_list.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./uncollapsed_reviewer_list.vue?vue&type=template&id=093a03aa\"\nimport script from \"./uncollapsed_reviewer_list.vue?vue&type=script&lang=js\"\nexport * from \"./uncollapsed_reviewer_list.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","/**\n * An event hub with a Vue instance like API\n *\n * NOTE: This is a derivative work from [mitt][1] v1.2.0 which is licensed by\n * [MIT License][2] © [Jason Miller][3]\n *\n * [1]: https://github.com/developit/mitt\n * [2]: https://opensource.org/licenses/MIT\n * [3]: https://jasonformat.com/\n */\nclass EventHub {\n  constructor() {\n    this.$_all = new Map();\n  }\n\n  dispose() {\n    this.$_all.clear();\n  }\n\n  /**\n   * Register an event handler for the given type.\n   *\n   * @param {string|symbol} type Type of event to listen for\n   * @param {Function} handler Function to call in response to given event\n   */\n  $on(type, handler) {\n    const handlers = this.$_all.get(type);\n    const added = handlers && handlers.push(handler);\n\n    if (!added) {\n      this.$_all.set(type, [handler]);\n    }\n  }\n\n  /**\n   * Remove an event handler or all handlers for the given type.\n   *\n   * @param {string|symbol} type Type of event to unregister `handler`\n   * @param {Function} handler Handler function to remove\n   */\n  $off(type, handler) {\n    const handlers = this.$_all.get(type) || [];\n\n    const newHandlers = handler ? handlers.filter((x) => x !== handler) : [];\n\n    if (newHandlers.length) {\n      this.$_all.set(type, newHandlers);\n    } else {\n      this.$_all.delete(type);\n    }\n  }\n\n  /**\n   * Add an event listener to type but only trigger it once\n   *\n   * @param {string|symbol} type Type of event to listen for\n   * @param {Function} handler Handler function to call in response to event\n   */\n  $once(type, handler) {\n    const wrapHandler = (...args) => {\n      this.$off(type, wrapHandler);\n      handler(...args);\n    };\n    this.$on(type, wrapHandler);\n  }\n\n  /**\n   * Invoke all handlers for the given type.\n   *\n   * @param {string|symbol} type The event type to invoke\n   * @param {Any} [evt] Any value passed to each handler\n   */\n  $emit(type, ...args) {\n    const handlers = this.$_all.get(type) || [];\n\n    handlers.forEach((handler) => {\n      handler(...args);\n    });\n  }\n}\n\n/**\n * Return a Vue like event hub\n *\n * - $on\n * - $off\n * - $once\n * - $emit\n *\n * We'd like to shy away from using a full fledged Vue instance from this in the future.\n */\nexport default () => {\n  return new EventHub();\n};\n","/**\n * This triggers a re-fetch of the user counts\n *\n * It is separate from the user_counts_manager, so that\n * this function is side-effect free and can be used in\n * anywhere in the app without bloating bundle size\n */\nexport function fetchUserCounts() {\n  document.dispatchEvent(new CustomEvent('userCounts:fetch'));\n}\n","import createEventHub from '~/helpers/event_hub_factory';\n\nexport default createEventHub();\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('reviewer-title',{attrs:{\"reviewers\":_vm.reviewers,\"number-of-reviewers\":_vm.reviewers.length,\"loading\":_vm.isLoading,\"editable\":_vm.canUpdate},on:{\"request-review\":_vm.requestReview,\"remove-reviewer\":_vm.removeReviewerById}}),_vm._v(\" \"),_c('approval-summary',{staticClass:\"gl-mb-2\",attrs:{\"short-text\":\"\"}},[_c('gl-button',{staticClass:\"gl-ml-2 !gl-text-sm\",attrs:{\"size\":\"small\",\"category\":\"tertiary\",\"variant\":\"confirm\"},on:{\"click\":function($event){return _vm.toggleDrawerOpen()}}},[_vm._v(\"\\n      \"+_vm._s(_vm.__('Assign'))+\"\\n    \")])],1),_vm._v(\" \"),(!_vm.initialLoading)?_c('reviewers',{staticClass:\"gl-pt-2\",attrs:{\"root-path\":_vm.relativeUrlRoot,\"users\":_vm.reviewers,\"editable\":_vm.canUpdate,\"issuable-type\":_vm.issuableType},on:{\"request-review\":_vm.requestReview,\"assign-self\":_vm.reviewBySelf,\"remove-reviewer\":_vm.removeReviewerById}}):_vm._e(),_vm._v(\" \"),_c('mounting-portal',{attrs:{\"mount-to\":\"#js-reviewer-drawer-portal\"}},[_c('reviewer-drawer',{attrs:{\"open\":_vm.drawerOpen},on:{\"request-review\":_vm.requestReview,\"remove-reviewer\":_vm.removeReviewerById,\"close\":function($event){return _vm.toggleDrawerOpen(false)}}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_drawer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_drawer.vue?vue&type=script&lang=js\"","<script>\nimport { GlDrawer } from '@gitlab/ui';\nimport { DRAWER_Z_INDEX } from '~/lib/utils/constants';\nimport { getContentWrapperHeight } from '~/lib/utils/dom_utils';\nimport getMergeRequestReviewers from '~/sidebar/queries/get_merge_request_reviewers.query.graphql';\n\nexport default {\n  apollo: {\n    reviewers: {\n      query: getMergeRequestReviewers,\n      variables() {\n        return {\n          fullPath: this.projectPath,\n          iid: this.issuableIid,\n        };\n      },\n      update: (data) => data.workspace?.issuable?.reviewers?.nodes || [],\n      skip() {\n        return !this.open;\n      },\n    },\n  },\n  components: {\n    GlDrawer,\n    ApprovalSummary: () =>\n      import('ee_component/merge_requests/components/reviewers/approval_summary.vue'),\n    ApprovalRulesWrapper: () =>\n      import('ee_component/merge_requests/components/reviewers/approval_rules_wrapper.vue'),\n  },\n  inject: ['projectPath', 'issuableIid'],\n  props: {\n    open: {\n      type: Boolean,\n      required: true,\n    },\n  },\n  data() {\n    return {\n      reviewers: [],\n    };\n  },\n  computed: {\n    getDrawerHeaderHeight() {\n      if (!this.open) return '0';\n      return getContentWrapperHeight();\n    },\n    loadingReviewers() {\n      return this.$apollo.queries.reviewers.loading;\n    },\n  },\n  DRAWER_Z_INDEX,\n};\n</script>\n\n<template>\n  <gl-drawer\n    :header-height=\"getDrawerHeaderHeight\"\n    :z-index=\"$options.DRAWER_Z_INDEX\"\n    :open=\"open\"\n    @close=\"$emit('close')\"\n  >\n    <template #title>\n      <h4 class=\"gl-my-0\">{{ __('Assign reviewers') }}</h4>\n    </template>\n    <template #header>\n      <approval-summary class=\"gl-mt-3\" />\n    </template>\n    <approval-rules-wrapper\n      :reviewers=\"reviewers\"\n      @request-review=\"(data) => $emit('request-review', data)\"\n      @remove-reviewer=\"(data) => $emit('remove-reviewer', data)\"\n    />\n  </gl-drawer>\n</template>\n","import { render, staticRenderFns } from \"./reviewer_drawer.vue?vue&type=template&id=2848a406\"\nimport script from \"./reviewer_drawer.vue?vue&type=script&lang=js\"\nexport * from \"./reviewer_drawer.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('gl-drawer',{attrs:{\"header-height\":_vm.getDrawerHeaderHeight,\"z-index\":_vm.$options.DRAWER_Z_INDEX,\"open\":_vm.open},on:{\"close\":function($event){return _vm.$emit('close')}},scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_c('h4',{staticClass:\"gl-my-0\"},[_vm._v(_vm._s(_vm.__('Assign reviewers')))])]},proxy:true},{key:\"header\",fn:function(){return [_c('approval-summary',{staticClass:\"gl-mt-3\"})]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('approval-rules-wrapper',{attrs:{\"reviewers\":_vm.reviewers},on:{\"request-review\":(data) => _vm.$emit('request-review', data),\"remove-reviewer\":(data) => _vm.$emit('remove-reviewer', data)}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_title.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_title.vue?vue&type=script&lang=js\"","<script>\nimport { GlLoadingIcon, GlTooltipDirective } from '@gitlab/ui';\nimport { n__, s__ } from '~/locale';\nimport ReviewerDropdown from '~/merge_requests/components/reviewers/reviewer_dropdown.vue';\n\nexport default {\n  name: 'ReviewerTitle',\n  components: {\n    GlLoadingIcon,\n    ReviewerDropdown,\n  },\n  directives: {\n    Tooltip: GlTooltipDirective,\n  },\n  props: {\n    loading: {\n      type: Boolean,\n      required: false,\n      default: false,\n    },\n    numberOfReviewers: {\n      type: Number,\n      required: true,\n    },\n    editable: {\n      type: Boolean,\n      required: true,\n    },\n    reviewers: {\n      type: Array,\n      required: false,\n      default: () => [],\n    },\n  },\n  computed: {\n    reviewerTitle() {\n      const reviewers = this.numberOfReviewers;\n      return n__('Reviewer', `%d Reviewers`, reviewers);\n    },\n  },\n  i18n: {\n    changeReviewer: s__('MergeRequest|Change reviewer'),\n  },\n};\n</script>\n<template>\n  <div\n    class=\"hide-collapsed gl-flex gl-items-center gl-gap-2 gl-font-bold gl-leading-20 gl-text-default\"\n  >\n    {{ reviewerTitle }}\n    <gl-loading-icon v-if=\"loading\" size=\"sm\" inline class=\"align-bottom\" />\n    <template v-if=\"editable\">\n      <reviewer-dropdown\n        class=\"gl-ml-auto\"\n        :selected-reviewers=\"reviewers\"\n        :visible-reviewers=\"reviewers\"\n      />\n    </template>\n  </div>\n</template>\n","import { render, staticRenderFns } from \"./reviewer_title.vue?vue&type=template&id=652e150e\"\nimport script from \"./reviewer_title.vue?vue&type=script&lang=js\"\nexport * from \"./reviewer_title.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"hide-collapsed gl-flex gl-items-center gl-gap-2 gl-font-bold gl-leading-20 gl-text-default\"},[_vm._v(\"\\n  \"+_vm._s(_vm.reviewerTitle)+\"\\n  \"),(_vm.loading)?_c('gl-loading-icon',{staticClass:\"align-bottom\",attrs:{\"size\":\"sm\",\"inline\":\"\"}}):_vm._e(),_vm._v(\" \"),(_vm.editable)?[_c('reviewer-dropdown',{staticClass:\"gl-ml-auto\",attrs:{\"selected-reviewers\":_vm.reviewers,\"visible-reviewers\":_vm.reviewers}})]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewers.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewers.vue?vue&type=script&lang=js\"","<!-- eslint-disable vue/multi-word-component-names -->\n<script>\nimport { GlButton } from '@gitlab/ui';\n// NOTE! For the first iteration, we are simply copying the implementation of Assignees\n// It will soon be overhauled in Issue https://gitlab.com/gitlab-org/gitlab/-/issues/233736\nimport { TYPE_ISSUE } from '~/issues/constants';\nimport UncollapsedReviewerList from './uncollapsed_reviewer_list.vue';\n\nexport default {\n  // name: 'Reviewers' is a false positive: https://gitlab.com/gitlab-org/frontend/eslint-plugin-i18n/issues/26#possible-false-positives\n  // eslint-disable-next-line @gitlab/require-i18n-strings\n  name: 'Reviewers',\n  components: {\n    GlButton,\n    UncollapsedReviewerList,\n  },\n  props: {\n    rootPath: {\n      type: String,\n      required: true,\n    },\n    users: {\n      type: Array,\n      required: true,\n    },\n    editable: {\n      type: Boolean,\n      required: true,\n    },\n    issuableType: {\n      type: String,\n      required: false,\n      default: TYPE_ISSUE,\n    },\n  },\n  computed: {\n    hasNoUsers() {\n      return !this.users.length;\n    },\n    sortedReviewers() {\n      const canMergeUsers = this.users.filter((user) => user.mergeRequestInteraction?.canMerge);\n      const canNotMergeUsers = this.users.filter((user) => !user.mergeRequestInteraction?.canMerge);\n\n      return [...canMergeUsers, ...canNotMergeUsers];\n    },\n  },\n  methods: {\n    assignSelf() {\n      this.$emit('assign-self');\n    },\n    requestReview(data) {\n      this.$emit('request-review', data);\n    },\n    removeReviewer(data) {\n      this.$emit('remove-reviewer', data);\n    },\n  },\n};\n</script>\n\n<template>\n  <div>\n    <div class=\"value hide-collapsed\">\n      <span\n        v-if=\"hasNoUsers\"\n        class=\"no-value gl-flex gl-text-base gl-leading-normal !gl-text-subtle\"\n        data-testid=\"no-value\"\n      >\n        {{ __('None') }}\n        <template v-if=\"editable\">\n          -\n          <gl-button\n            category=\"tertiary\"\n            variant=\"link\"\n            class=\"gl-ml-2\"\n            data-testid=\"assign-yourself\"\n            @click=\"assignSelf\"\n          >\n            <span class=\"gl-text-subtle hover:gl-text-blue-800\">{{ __('assign yourself') }}</span>\n          </gl-button>\n        </template>\n      </span>\n\n      <uncollapsed-reviewer-list\n        v-else\n        :users=\"sortedReviewers\"\n        :root-path=\"rootPath\"\n        :issuable-type=\"issuableType\"\n        @request-review=\"requestReview\"\n        @remove-reviewer=\"removeReviewer\"\n      />\n    </div>\n  </div>\n</template>\n","import { render, staticRenderFns } from \"./reviewers.vue?vue&type=template&id=2b416e42\"\nimport script from \"./reviewers.vue?vue&type=script&lang=js\"\nexport * from \"./reviewers.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"value hide-collapsed\"},[(_vm.hasNoUsers)?_c('span',{staticClass:\"no-value gl-flex gl-text-base gl-leading-normal !gl-text-subtle\",attrs:{\"data-testid\":\"no-value\"}},[_vm._v(\"\\n      \"+_vm._s(_vm.__('None'))+\"\\n      \"),(_vm.editable)?[_vm._v(\"\\n        -\\n        \"),_c('gl-button',{staticClass:\"gl-ml-2\",attrs:{\"category\":\"tertiary\",\"variant\":\"link\",\"data-testid\":\"assign-yourself\"},on:{\"click\":_vm.assignSelf}},[_c('span',{staticClass:\"gl-text-subtle hover:gl-text-blue-800\"},[_vm._v(_vm._s(_vm.__('assign yourself')))])])]:_vm._e()],2):_c('uncollapsed-reviewer-list',{attrs:{\"users\":_vm.sortedReviewers,\"root-path\":_vm.rootPath,\"issuable-type\":_vm.issuableType},on:{\"request-review\":_vm.requestReview,\"remove-reviewer\":_vm.removeReviewer}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<script>\n// NOTE! For the first iteration, we are simply copying the implementation of Assignees\n// It will soon be overhauled in Issue https://gitlab.com/gitlab-org/gitlab/-/issues/233736\nimport Vue from 'vue';\nimport { MountingPortal } from 'portal-vue';\nimport { GlButton } from '@gitlab/ui';\nimport { createAlert } from '~/alert';\nimport { TYPE_ISSUE } from '~/issues/constants';\nimport { __ } from '~/locale';\nimport { isGid, getIdFromGraphQLId } from '~/graphql_shared/utils';\nimport { fetchUserCounts } from '~/super_sidebar/user_counts_fetch';\nimport ReviewerDrawer from '~/merge_requests/components/reviewers/reviewer_drawer.vue';\nimport eventHub from '../../event_hub';\nimport getMergeRequestReviewersQuery from '../../queries/get_merge_request_reviewers.query.graphql';\nimport mergeRequestReviewersUpdatedSubscription from '../../queries/merge_request_reviewers.subscription.graphql';\nimport Store from '../../stores/sidebar_store';\nimport ReviewerTitle from './reviewer_title.vue';\nimport Reviewers from './reviewers.vue';\n\nexport const state = Vue.observable({\n  issuable: {},\n  loading: false,\n  initialLoading: true,\n  drawerOpen: false,\n});\n\nexport default {\n  name: 'SidebarReviewers',\n  components: {\n    MountingPortal,\n    GlButton,\n    ReviewerTitle,\n    Reviewers,\n    ReviewerDrawer,\n    ApprovalSummary: () =>\n      import('ee_component/merge_requests/components/reviewers/approval_summary.vue'),\n  },\n  props: {\n    mediator: {\n      type: Object,\n      required: true,\n    },\n    field: {\n      type: String,\n      required: true,\n    },\n    issuableType: {\n      type: String,\n      required: false,\n      default: TYPE_ISSUE,\n    },\n    issuableIid: {\n      type: String,\n      required: true,\n    },\n    projectPath: {\n      type: String,\n      required: true,\n    },\n  },\n  apollo: {\n    // eslint-disable-next-line @gitlab/vue-no-undef-apollo-properties\n    issuable: {\n      query: getMergeRequestReviewersQuery,\n      variables() {\n        return {\n          iid: this.issuableIid,\n          fullPath: this.projectPath,\n        };\n      },\n      update(data) {\n        return data.workspace?.issuable;\n      },\n      result() {\n        this.initialLoading = false;\n      },\n      error() {\n        createAlert({ message: __('An error occurred while fetching reviewers.') });\n      },\n      subscribeToMore: {\n        document() {\n          return mergeRequestReviewersUpdatedSubscription;\n        },\n        variables() {\n          return {\n            issuableId: this.issuable?.id,\n          };\n        },\n        skip() {\n          return !this.issuable?.id;\n        },\n        updateQuery(\n          _,\n          {\n            subscriptionData: {\n              data: { mergeRequestReviewersUpdated },\n            },\n          },\n        ) {\n          if (mergeRequestReviewersUpdated) {\n            this.store.setReviewersFromRealtime(\n              mergeRequestReviewersUpdated.reviewers.nodes.map((r) => ({\n                ...r,\n                id: getIdFromGraphQLId(r.id),\n              })),\n            );\n          }\n        },\n      },\n    },\n  },\n  data() {\n    return state;\n  },\n  computed: {\n    relativeUrlRoot() {\n      return gon.relative_url_root ?? '';\n    },\n    reviewers() {\n      return this.issuable.reviewers?.nodes || [];\n    },\n    graphqlFetching() {\n      return this.$apollo.queries.issuable.loading;\n    },\n    isLoading() {\n      return this.loading || this.$apollo.queries.issuable.loading;\n    },\n    canUpdate() {\n      return this.issuable.userPermissions?.adminMergeRequest || false;\n    },\n  },\n  created() {\n    this.store = new Store();\n\n    this.removeReviewer = this.store.removeReviewer.bind(this.store);\n    this.addReviewer = this.store.addReviewer.bind(this.store);\n    this.removeAllReviewers = this.store.removeAllReviewers.bind(this.store);\n\n    // Get events from deprecatedJQueryDropdown\n    eventHub.$on('sidebar.removeReviewer', this.removeReviewer);\n    eventHub.$on('sidebar.addReviewer', this.addReviewer);\n    eventHub.$on('sidebar.removeAllReviewers', this.removeAllReviewers);\n    eventHub.$on('sidebar.saveReviewers', this.saveReviewers);\n    eventHub.$on('sidebar.toggleReviewerDrawer', this.toggleDrawerOpen);\n  },\n  beforeDestroy() {\n    eventHub.$off('sidebar.removeReviewer', this.removeReviewer);\n    eventHub.$off('sidebar.addReviewer', this.addReviewer);\n    eventHub.$off('sidebar.removeAllReviewers', this.removeAllReviewers);\n    eventHub.$off('sidebar.saveReviewers', this.saveReviewers);\n    eventHub.$off('sidebar.toggleReviewerDrawer', this.toggleDrawerOpen);\n  },\n  methods: {\n    reviewBySelf() {\n      // Notify gl dropdown that we are now assigning to current user\n      this.$el.parentElement.dispatchEvent(new Event('assignYourself'));\n\n      this.mediator.addSelfReview();\n      this.saveReviewers();\n    },\n    saveReviewers() {\n      this.loading = true;\n\n      this.mediator\n        .saveReviewers(this.field)\n        .then(() => {\n          this.loading = false;\n          fetchUserCounts();\n          this.$apollo.queries.issuable.refetch();\n        })\n        .catch(() => {\n          this.loading = false;\n          return createAlert({\n            message: __('Error occurred when saving reviewers'),\n          });\n        });\n    },\n    requestReview(data) {\n      this.mediator.requestReview(data);\n    },\n    async removeReviewerById(event) {\n      const userId = isGid(event.userId) ? getIdFromGraphQLId(event.userId) : event.userId;\n      this.store.reviewers = this.store.reviewers.filter((user) => user.id !== userId);\n      try {\n        await this.saveReviewers();\n      } catch (error) {\n        createAlert(__('Unable to remove a reviewer at the moment, try again later'), { error });\n      } finally {\n        event.done();\n      }\n    },\n    toggleDrawerOpen(drawerOpen = !this.drawerOpen) {\n      this.drawerOpen = drawerOpen;\n    },\n  },\n};\n</script>\n\n<template>\n  <div>\n    <reviewer-title\n      :reviewers=\"reviewers\"\n      :number-of-reviewers=\"reviewers.length\"\n      :loading=\"isLoading\"\n      :editable=\"canUpdate\"\n      @request-review=\"requestReview\"\n      @remove-reviewer=\"removeReviewerById\"\n    />\n    <approval-summary short-text class=\"gl-mb-2\">\n      <gl-button\n        size=\"small\"\n        category=\"tertiary\"\n        variant=\"confirm\"\n        class=\"gl-ml-2 !gl-text-sm\"\n        @click=\"toggleDrawerOpen()\"\n      >\n        {{ __('Assign') }}\n      </gl-button>\n    </approval-summary>\n    <reviewers\n      v-if=\"!initialLoading\"\n      :root-path=\"relativeUrlRoot\"\n      :users=\"reviewers\"\n      :editable=\"canUpdate\"\n      :issuable-type=\"issuableType\"\n      class=\"gl-pt-2\"\n      @request-review=\"requestReview\"\n      @assign-self=\"reviewBySelf\"\n      @remove-reviewer=\"removeReviewerById\"\n    />\n    <mounting-portal mount-to=\"#js-reviewer-drawer-portal\">\n      <reviewer-drawer\n        :open=\"drawerOpen\"\n        @request-review=\"requestReview\"\n        @remove-reviewer=\"removeReviewerById\"\n        @close=\"toggleDrawerOpen(false)\"\n      />\n    </mounting-portal>\n  </div>\n</template>\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sidebar_reviewers.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sidebar_reviewers.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./sidebar_reviewers.vue?vue&type=template&id=660c3939\"\nimport script from \"./sidebar_reviewers.vue?vue&type=script&lang=js\"\nexport * from \"./sidebar_reviewers.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import { isArray } from 'lodash';\nimport Visibility from 'visibilityjs';\nimport { QUERY_PARAM_START_CURSOR, QUERY_PARAM_END_CURSOR } from './constants';\n\n/**\n * Ids generated by GraphQL endpoints are usually in the format\n * gid://gitlab/Environments/123. This method checks if the passed id follows that format\n *\n * @param {String|Number} id The id value\n * @returns {Boolean}\n */\nexport const isGid = (id) => {\n  if (typeof id === 'string' && id.startsWith('gid://gitlab/')) {\n    return true;\n  }\n\n  return false;\n};\n\nexport const parseGid = (gid) => {\n  const [type, id] = `${gid}`.replace(/gid:\\/\\/gitlab\\//g, '').split('/');\n  return { type, id };\n};\n\n/**\n * Ids generated by GraphQL endpoints are usually in the format\n * gid://gitlab/Environments/123. This method extracts Id number\n * from the Id path\n *\n * @param {String} gid GraphQL global ID\n * @returns {Number}\n */\nexport const getIdFromGraphQLId = (gid = '') => {\n  const rawId = isGid(gid) ? parseGid(gid).id : gid;\n  const id = parseInt(rawId, 10);\n  return Number.isInteger(id) ? id : null;\n};\n\n/**\n * Ids generated by GraphQL endpoints are usually in the format\n * gid://gitlab/Environments/123. This method extracts Type string\n * from the Id path\n *\n * @param {String} gid GraphQL global ID\n * @returns {String}\n */\nexport const getTypeFromGraphQLId = (gid = '') => {\n  if (!isGid(gid)) return null;\n\n  const { type } = parseGid(gid);\n  return type || null;\n};\n\nexport const mutationOperationMode = {\n  append: 'APPEND',\n  remove: 'REMOVE',\n  replace: 'REPLACE',\n};\n\n/**\n * Ids generated by GraphQL endpoints are usually in the format\n * gid://gitlab/Groups/123. This method takes a type and an id\n * and interpolates the 2 values into the expected GraphQL ID format.\n *\n * @param {String} type The entity type\n * @param {String|Number} id The id value\n * @returns {String}\n */\nexport const convertToGraphQLId = (type, id) => {\n  if (typeof type !== 'string') {\n    throw new TypeError(`type must be a string; got ${typeof type}`);\n  }\n\n  if (!['number', 'string'].includes(typeof id)) {\n    throw new TypeError(`id must be a number or string; got ${typeof id}`);\n  }\n\n  if (isGid(id)) {\n    return id;\n  }\n\n  return `gid://gitlab/${type}/${id}`;\n};\n\n/**\n * Ids generated by GraphQL endpoints are usually in the format\n * gid://gitlab/Groups/123. This method takes a type and an\n * array of ids and tranforms the array values into the expected\n * GraphQL ID format.\n *\n * @param {String} type The entity type\n * @param {Array} ids An array of id values\n * @returns {Array}\n */\nexport const convertToGraphQLIds = (type, ids) => ids.map((id) => convertToGraphQLId(type, id));\n\n/**\n * Ids generated by GraphQL endpoints are usually in the format\n * gid://gitlab/Groups/123. This method takes an array of\n * GraphQL Ids and converts them to a number.\n *\n * @param {Array} ids An array of GraphQL IDs\n * @returns {Array}\n */\nexport const convertFromGraphQLIds = (ids) => {\n  if (!isArray(ids)) {\n    throw new TypeError(`ids must be an array; got ${typeof ids}`);\n  }\n\n  return ids.map((id) => getIdFromGraphQLId(id));\n};\n\n/**\n * Ids generated by GraphQL endpoints are usually in the format\n * gid://gitlab/Groups/123. This method takes an array of nodes\n * and converts the `id` properties from a GraphQL Id to a number.\n *\n * @param {Array} nodes An array of nodes with an `id` property\n * @returns {Array}\n */\nexport const convertNodeIdsFromGraphQLIds = (nodes) => {\n  if (!isArray(nodes)) {\n    throw new TypeError(`nodes must be an array; got ${typeof nodes}`);\n  }\n\n  return nodes.map((node) => (node.id ? { ...node, id: getIdFromGraphQLId(node.id) } : node));\n};\n\n/**\n * This function takes a GraphQL query data as a required argument and\n * the field name to resolve as an optional argument\n * and returns resolved field's data or an empty array\n * @param {Object} queryData\n * @param {String} nodesField (in most cases it will be 'nodes')\n * @returns {Array}\n */\nexport const getNodesOrDefault = (queryData, nodesField = 'nodes') => {\n  return queryData?.[nodesField] ?? [];\n};\n\nexport const toggleQueryPollingByVisibility = (queryRef, interval = 10000) => {\n  const stopStartQuery = (query) => {\n    if (!Visibility.hidden()) {\n      query.startPolling(interval);\n    } else {\n      query.stopPolling();\n    }\n  };\n\n  stopStartQuery(queryRef);\n  Visibility.change(stopStartQuery.bind(null, queryRef));\n};\n\nexport const etagQueryHeaders = (featureCorrelation, etagResource = '') => {\n  return {\n    fetchOptions: {\n      method: 'GET',\n    },\n    headers: {\n      'X-GITLAB-GRAPHQL-FEATURE-CORRELATION': featureCorrelation,\n      'X-GITLAB-GRAPHQL-RESOURCE-ETAG': etagResource,\n      'X-Requested-With': 'XMLHttpRequest',\n    },\n  };\n};\n\nexport const calculateGraphQLPaginationQueryParams = ({\n  startCursor,\n  endCursor,\n  routeQuery: { start_cursor, end_cursor, ...routeQuery },\n}) => {\n  if (startCursor) {\n    return {\n      ...routeQuery,\n      [QUERY_PARAM_START_CURSOR]: startCursor,\n    };\n  }\n\n  if (endCursor) {\n    return {\n      ...routeQuery,\n      [QUERY_PARAM_END_CURSOR]: endCursor,\n    };\n  }\n\n  return routeQuery;\n};\n","import axios from './axios_utils';\nimport Cache from './cache';\n\nclass AjaxCache extends Cache {\n  constructor() {\n    super();\n    this.pendingRequests = {};\n  }\n\n  override(endpoint, data) {\n    this.internalStorage[endpoint] = data;\n  }\n\n  retrieve(endpoint, forceRetrieve) {\n    if (this.hasData(endpoint) && !forceRetrieve) {\n      return Promise.resolve(this.get(endpoint));\n    }\n\n    let pendingRequest = this.pendingRequests[endpoint];\n\n    if (!pendingRequest) {\n      pendingRequest = axios\n        .get(endpoint)\n        .then(({ data }) => {\n          this.internalStorage[endpoint] = data;\n          delete this.pendingRequests[endpoint];\n        })\n        .catch((e) => {\n          const error = new Error(`${endpoint}: ${e.message}`);\n          error.textStatus = e.message;\n\n          delete this.pendingRequests[endpoint];\n          throw error;\n        });\n\n      this.pendingRequests[endpoint] = pendingRequest;\n    }\n\n    return pendingRequest.then(() => this.get(endpoint));\n  }\n}\n\nexport default new AjaxCache();\n","import { GlBadge } from '@gitlab/ui';\nimport $ from 'jquery';\nimport '~/lib/utils/jquery_at_who';\nimport { escape as lodashEscape, sortBy, template, escapeRegExp, memoize } from 'lodash';\nimport * as Emoji from '~/emoji';\nimport axios from '~/lib/utils/axios_utils';\nimport { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';\nimport { loadingIconForLegacyJS } from '~/loading_icon_for_legacy_js';\nimport { s__, __, sprintf } from '~/locale';\nimport { isUserBusy } from '~/set_status_modal/utils';\nimport SidebarMediator from '~/sidebar/sidebar_mediator';\nimport { state } from '~/sidebar/components/reviewers/sidebar_reviewers.vue';\nimport {\n  ISSUABLE_EPIC,\n  WORK_ITEMS_TYPE_MAP,\n  WORK_ITEM_TYPE_ENUM_EPIC,\n} from '~/work_items/constants';\nimport AjaxCache from './lib/utils/ajax_cache';\nimport { spriteIcon } from './lib/utils/common_utils';\nimport { newDate } from './lib/utils/datetime_utility';\nimport { unicodeLetters } from './lib/utils/regexp';\nimport { renderVueComponentForLegacyJS } from './render_vue_component_for_legacy_js';\n\nconst USERS_ALIAS = 'users';\nconst ISSUES_ALIAS = 'issues';\nconst MILESTONES_ALIAS = 'milestones';\nconst MERGEREQUESTS_ALIAS = 'mergerequests';\nconst LABELS_ALIAS = 'labels';\nconst SNIPPETS_ALIAS = 'snippets';\nconst CONTACTS_ALIAS = 'contacts';\nconst WIKIS_ALIAS = 'wikis';\n\nconst CADENCE_REFERENCE_PREFIX = '[cadence:';\nconst ITERATION_REFERENCE_PREFIX = '*iteration:';\n\nexport const AT_WHO_ACTIVE_CLASS = 'at-who-active';\nexport const CONTACT_STATE_ACTIVE = 'active';\nexport const CONTACTS_ADD_COMMAND = '/add_contacts';\nexport const CONTACTS_REMOVE_COMMAND = '/remove_contacts';\n\nconst busyBadge = memoize(\n  () =>\n    renderVueComponentForLegacyJS(\n      GlBadge,\n      {\n        class: 'gl-ml-2',\n        props: {\n          variant: 'warning',\n          size: 'sm',\n        },\n      },\n      s__('UserProfile|Busy'),\n    ).outerHTML,\n);\n\n/**\n * Escapes user input before we pass it to at.js, which\n * renders it as HTML in the autocomplete dropdown.\n *\n * at.js allows you to reference data using `${}` syntax\n * (e.g. ${search}) which it replaces with the actual data\n * before rendering it in the autocomplete dropdown.\n * To prevent user input from executing this `${}` syntax,\n * we also need to escape the $ character.\n *\n * @param string user input\n * @return {string} escaped user input\n */\nexport function escape(string) {\n  // To prevent double (or multiple) enconding attack\n  // Decode the user input repeatedly prior to escaping the final decoded string.\n  let encodedString = string;\n  let decodedString = decodeURIComponent(encodedString);\n\n  while (decodedString !== encodedString) {\n    encodedString = decodeURIComponent(decodedString);\n    decodedString = decodeURIComponent(encodedString);\n  }\n\n  return lodashEscape(decodedString.replace(/\\$/g, '&dollar;'));\n}\n\nexport function showAndHideHelper($input, alias = '') {\n  $input.on(`hidden${alias ? '-' : ''}${alias}.atwho`, () => {\n    $input.removeClass(AT_WHO_ACTIVE_CLASS);\n  });\n  $input.on(`shown${alias ? '-' : ''}${alias}.atwho`, () => {\n    $input.addClass(AT_WHO_ACTIVE_CLASS);\n  });\n}\n\n// This should be kept in sync with the backend filtering in\n// `User#gfm_autocomplete_search` and `Namespace#gfm_autocomplete_search`\nfunction createMemberSearchString(member) {\n  return `${member.name.replace(/ /g, '')} ${member.username}`;\n}\n\nexport function membersBeforeSave(members) {\n  return members.map((member) => {\n    const GROUP_TYPE = 'Group';\n\n    let title = '';\n    if (member.username == null) {\n      return member;\n    }\n    title = member.name;\n    if (member.count && !member.mentionsDisabled) {\n      title += ` (${member.count})`;\n    }\n\n    const autoCompleteAvatar = member.avatar_url || member.username.charAt(0).toUpperCase();\n\n    const rectAvatarClass = member.type === GROUP_TYPE ? 'rect-avatar' : '';\n    const imgAvatar = `<img src=\"${member.avatar_url}\" alt=\"${member.username}\" class=\"avatar ${rectAvatarClass} avatar-inline s24 gl-mr-2\"/>`;\n    const txtAvatar = `<div class=\"avatar ${rectAvatarClass} avatar-inline s24 gl-mr-2\">${autoCompleteAvatar}</div>`;\n    const avatarIcon = member.mentionsDisabled\n      ? spriteIcon('notifications-off', 's16 vertical-align-middle gl-ml-2')\n      : '';\n\n    return {\n      username: member.username,\n      avatarTag: autoCompleteAvatar.length === 1 ? txtAvatar : imgAvatar,\n      title,\n      search: createMemberSearchString(member),\n      icon: avatarIcon,\n      availability: member?.availability,\n    };\n  });\n}\n\nexport const highlighter = (li, query) => {\n  // override default behaviour to escape dot character\n  // see https://github.com/ichord/At.js/pull/576\n  if (!query) {\n    return li;\n  }\n  const escapedQuery = escapeRegExp(query);\n  const regexp = new RegExp(`>\\\\s*([^<]*?)(${escapedQuery})([^<]*)\\\\s*<`, 'ig');\n  // eslint-disable-next-line max-params\n  return li.replace(regexp, (str, $1, $2, $3) => `> ${$1}<strong>${$2}</strong>${$3} <`);\n};\n\n/**\n * Sets up subommands for quickaction for the given\n * input with the provided command and the subcommand descriptions.\n *\n * @param {Object} $input input element\n * @param {string} cmd command that triggers subcommand selection\n * @param {Record<string, { header: string, description: string }>} data object containing names of commands as keys with description and header as values\n *\n */\nexport const setupSubcommands = ($input, cmd, data) => {\n  $input.filter('[data-supports-quick-actions=\"true\"]').atwho({\n    // Always keep the trailing space otherwise the command won't display correctly\n    at: `/${cmd} `,\n    alias: cmd,\n    data: Object.keys(data),\n    maxLen: 100,\n    displayTpl({ name }) {\n      const { header, description } = data[name];\n\n      return `<li><span class=\"name gl-font-bold\">${lodashEscape(header)}</span><small class=\"description\"><em>${lodashEscape(description)}</em></small></li>`;\n    },\n  });\n};\n\nexport const defaultAutocompleteConfig = {\n  emojis: true,\n  members: true,\n  issues: true,\n  mergeRequests: true,\n  epics: true,\n  iterations: true,\n  milestones: true,\n  labels: true,\n  snippets: true,\n  vulnerabilities: true,\n  contacts: true,\n  wikis: true,\n};\n\nclass GfmAutoComplete {\n  constructor(dataSources = {}) {\n    this.dataSources = dataSources;\n    this.cachedData = {};\n    this.isLoadingData = {};\n    this.previousQuery = undefined;\n    this.currentBackendFilterRequestController = null;\n  }\n\n  setup(input, enableMap = defaultAutocompleteConfig) {\n    // Add GFM auto-completion to all input fields, that accept GFM input.\n    this.input = input || $('.js-gfm-input');\n    this.enableMap = enableMap;\n    this.setupLifecycle();\n  }\n\n  setupLifecycle() {\n    this.input.each((i, input) => {\n      const $input = $(input);\n      if (!$input.hasClass('js-gfm-input-initialized')) {\n        // eslint-disable-next-line @gitlab/no-global-event-off\n        $input.off('focus.setupAtWho').on('focus.setupAtWho', this.setupAtWho.bind(this, $input));\n        $input.on('change.atwho', () => input.dispatchEvent(new Event('input')));\n        // This triggers at.js again\n        // Needed for quick actions with suffixes (ex: /label ~)\n        $input.on('inserted-commands.atwho', $input.trigger.bind($input, 'keyup'));\n        $input.on('clear-commands-cache.atwho', () => this.clearCache());\n        $input.addClass('js-gfm-input-initialized');\n      }\n    });\n  }\n\n  setupAtWho($input) {\n    if (this.enableMap.emojis) this.setupEmoji($input);\n    if (this.enableMap.members) this.setupMembers($input);\n    if (this.enableMap.issues) this.setupIssues($input);\n    if (this.enableMap.milestones) this.setupMilestones($input);\n    if (this.enableMap.mergeRequests) this.setupMergeRequests($input);\n    if (this.enableMap.labels) this.setupLabels($input);\n    if (this.enableMap.snippets) this.setupSnippets($input);\n    if (this.enableMap.contacts) this.setupContacts($input);\n    if (this.enableMap.wikis) this.setupWikis($input);\n\n    $input.filter('[data-supports-quick-actions=\"true\"]').atwho({\n      at: '/',\n      alias: 'commands',\n      searchKey: 'search',\n      limit: 100,\n      skipSpecialCharacterTest: true,\n      skipMarkdownCharacterTest: true,\n      data: GfmAutoComplete.defaultLoadingData,\n      maxLen: 100,\n      displayTpl(value) {\n        const cssClasses = [];\n\n        if (GfmAutoComplete.isLoading(value)) return GfmAutoComplete.Loading.template;\n        // eslint-disable-next-line no-template-curly-in-string\n        let tpl = '<li class=\"<%- className %>\"><span class=\"name\">/${name}</span>';\n        if (value.aliases.length > 0) {\n          tpl += ' <small class=\"aliases\">(or /<%- aliases.join(\", /\") %>)</small>';\n        }\n        if (value.params.length > 0) {\n          tpl += ' <small class=\"params\"><%- params.join(\" \") %></small>';\n        }\n        if (value.warning && value.icon && value.icon === 'confidential') {\n          tpl += `<small class=\"description gl-flex gl-items-center\">${spriteIcon(\n            'eye-slash',\n            's16 gl-mr-2',\n          )}<em><%- warning %></em></small>`;\n        } else if (value.warning) {\n          tpl += '<small class=\"description\"><em><%- warning %></em></small>';\n        } else if (value.description !== '') {\n          tpl += '<small class=\"description\"><em><%- description %></em></small>';\n        }\n        tpl += '</li>';\n\n        if (value.warning) {\n          cssClasses.push('has-warning');\n        }\n\n        return template(tpl)({\n          ...value,\n          className: cssClasses.join(' '),\n        });\n      },\n      insertTpl(value) {\n        // eslint-disable-next-line no-template-curly-in-string\n        let tpl = '/${name} ';\n        let referencePrefix = null;\n        if (value.params.length > 0) {\n          const regexp = /^\\[[a-z]+:/;\n          const match = regexp.exec(value.params);\n          if (match) {\n            [referencePrefix] = match;\n\n            // EE-ONLY; iteration quick action should autocomplete iteration reference only\n            if (referencePrefix === CADENCE_REFERENCE_PREFIX)\n              referencePrefix = ITERATION_REFERENCE_PREFIX;\n\n            tpl += '<%- referencePrefix %>';\n          } else {\n            [[referencePrefix]] = value.params;\n            if (/^[@%~]/.test(referencePrefix)) {\n              tpl += '<%- referencePrefix %>';\n            } else if (/^[*]/.test(referencePrefix)) {\n              // EE-ONLY\n              referencePrefix = ITERATION_REFERENCE_PREFIX;\n              tpl += '<%- referencePrefix %>';\n            }\n          }\n        }\n        return template(tpl, { interpolate: /<%=([\\s\\S]+?)%>/g })({ referencePrefix });\n      },\n      suffix: '',\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        beforeSave(commands) {\n          if (GfmAutoComplete.isLoading(commands)) return commands;\n          return $.map(commands, (c) => {\n            let search = c.name;\n            if (c.aliases.length > 0) {\n              search = `${search} ${c.aliases.join(' ')}`;\n            }\n            return {\n              name: c.name,\n              aliases: c.aliases,\n              params: c.params,\n              description: c.description,\n              warning: c.warning,\n              icon: c.icon,\n              search,\n            };\n          });\n        },\n        matcher(flag, subtext) {\n          const regexp = /(?:^|\\n)\\/([A-Za-z_]*)$/gi;\n          const match = regexp.exec(subtext);\n          if (match) {\n            return match[1];\n          }\n          return null;\n        },\n      },\n    });\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  setSubmitReviewStates($input) {\n    const REVIEW_STATES = {\n      reviewed: {\n        header: __('Comment'),\n        description: __('Submit general feedback without explicit approval.'),\n      },\n      approve: {\n        header: __('Approve'),\n        description: __('Submit feedback and approve these changes.'),\n      },\n      requested_changes: {\n        header: __('Request changes'),\n        description: __('Submit feedback that should be addressed before merging.'),\n      },\n    };\n\n    setupSubcommands($input, 'submit_review', REVIEW_STATES);\n  }\n\n  setupEmoji($input) {\n    const fetchData = this.fetchData.bind(this);\n\n    // Emoji\n    $input.atwho({\n      at: ':',\n      displayTpl: GfmAutoComplete.Emoji.templateFunction,\n      insertTpl: GfmAutoComplete.Emoji.insertTemplateFunction,\n      skipSpecialCharacterTest: true,\n      data: GfmAutoComplete.defaultLoadingData,\n      maxLen: 100,\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        matcher(flag, subtext) {\n          const regexp = new RegExp(`(?:[^${unicodeLetters}0-9:]|\\n|^):([^ :][^:]*)?$`, 'gi');\n          const match = regexp.exec(subtext);\n\n          if (match && match.length) {\n            // Since we have \"?\" on the group, it's possible it is undefined\n            return match[1] || '';\n          }\n\n          return null;\n        },\n        filter(query, items) {\n          if (GfmAutoComplete.isLoading(items)) {\n            fetchData(this.$inputor, this.at);\n            return items;\n          }\n\n          return GfmAutoComplete.Emoji.filter(query);\n        },\n        sorter(query, items) {\n          this.setting.highlightFirst = this.setting.alwaysHighlightFirst || query.length > 0;\n          if (GfmAutoComplete.isLoading(items)) {\n            this.setting.highlightFirst = false;\n            return items;\n          }\n\n          if (query.length === 0) {\n            return items;\n          }\n\n          return GfmAutoComplete.Emoji.sorter(items);\n        },\n      },\n    });\n    showAndHideHelper($input);\n  }\n\n  setupMembers($input) {\n    const instance = this;\n    const fetchData = this.fetchData.bind(this);\n    const MEMBER_COMMAND = {\n      ASSIGN: '/assign',\n      UNASSIGN: '/unassign',\n      ASSIGN_REVIEWER: '/assign_reviewer',\n      UNASSIGN_REVIEWER: '/unassign_reviewer',\n      REASSIGN: '/reassign',\n      CC: '/cc',\n      REQUEST_REVIEW: '/request_review',\n    };\n    let assignees = [];\n    let reviewers = [];\n    let command = '';\n\n    // Team Members\n    $input.atwho({\n      at: '@',\n      alias: USERS_ALIAS,\n      maxLen: 100,\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        const { avatarTag, username, title, icon, availability } = value;\n        if (username != null) {\n          tmpl = GfmAutoComplete.Members.templateFunction({\n            avatarTag,\n            username,\n            title,\n            icon,\n            availabilityStatus: availability && isUserBusy(availability) ? busyBadge() : '',\n          });\n        }\n        return tmpl;\n      },\n      // eslint-disable-next-line no-template-curly-in-string\n      insertTpl: '${atwho-at}${username}',\n      limit: 10,\n      delay: DEFAULT_DEBOUNCE_AND_THROTTLE_MS,\n      searchKey: 'search',\n      alwaysHighlightFirst: true,\n      skipSpecialCharacterTest: true,\n      data: GfmAutoComplete.defaultLoadingData,\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        beforeSave: membersBeforeSave,\n        matcher(flag, subtext) {\n          const subtextNodes = subtext.split(/\\n+/g).pop().split(GfmAutoComplete.regexSubtext);\n\n          // Check if @ is followed by '/assign', '/reassign', '/unassign' or '/cc' commands.\n          command = subtextNodes.find((node) => {\n            if (Object.values(MEMBER_COMMAND).includes(node)) {\n              return node;\n            }\n            return null;\n          });\n\n          // Cache assignees & reviewers list for easier filtering later\n          assignees =\n            SidebarMediator.singleton?.store?.assignees?.map(createMemberSearchString) || [];\n          reviewers = state.issuable?.reviewers?.nodes?.map(createMemberSearchString) || [];\n\n          const match = GfmAutoComplete.defaultMatcher(flag, subtext, this.app.controllers);\n          return match && match.length ? match[1] : null;\n        },\n        filter(query, data) {\n          if (GfmAutoComplete.isLoading(data) || instance.previousQuery !== query) {\n            instance.previousQuery = query;\n\n            fetchData(this.$inputor, this.at, query);\n            return data;\n          }\n\n          if (command === MEMBER_COMMAND.ASSIGN) {\n            // Only include members which are not assigned to Issuable currently\n            return data.filter((member) => !assignees.includes(member.search));\n          }\n          if (command === MEMBER_COMMAND.UNASSIGN) {\n            // Only include members which are assigned to Issuable currently\n            return data.filter((member) => assignees.includes(member.search));\n          }\n          if (command === MEMBER_COMMAND.ASSIGN_REVIEWER) {\n            // Only include members which are not assigned as a reviewer to Issuable currently\n            return data.filter((member) => !reviewers.includes(member.search));\n          }\n          if (command === MEMBER_COMMAND.UNASSIGN_REVIEWER) {\n            // Only include members which are not assigned as a reviewer to Issuable currently\n            return data.filter((member) => reviewers.includes(member.search));\n          }\n\n          return data;\n        },\n        sorter(query, items) {\n          // Disable auto-selecting the loading icon\n          this.setting.highlightFirst = this.setting.alwaysHighlightFirst;\n          if (GfmAutoComplete.isLoading(items)) {\n            this.setting.highlightFirst = false;\n            return items;\n          }\n\n          if (!query) {\n            return items;\n          }\n\n          return GfmAutoComplete.Members.sort(query, items);\n        },\n      },\n    });\n    showAndHideHelper($input, USERS_ALIAS);\n  }\n\n  setupIssues($input) {\n    $input.atwho({\n      at: '#',\n      alias: ISSUES_ALIAS,\n      searchKey: 'search',\n      maxLen: 100,\n      delay: DEFAULT_DEBOUNCE_AND_THROTTLE_MS,\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        if (value.title != null) {\n          tmpl = GfmAutoComplete.Issues.templateFunction(value);\n        }\n        return tmpl;\n      },\n      data: GfmAutoComplete.defaultLoadingData,\n      insertTpl: GfmAutoComplete.Issues.insertTemplateFunction,\n      skipSpecialCharacterTest: true,\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        beforeSave(issues) {\n          return $.map(issues, (i) => {\n            if (i.title == null) {\n              return i;\n            }\n            return {\n              id: i.iid,\n              title: i.title,\n              reference: i.reference,\n              search: `${i.iid} ${i.title}`,\n              iconName: i.icon_name,\n            };\n          });\n        },\n      },\n    });\n    showAndHideHelper($input, ISSUES_ALIAS);\n  }\n\n  setupMilestones($input) {\n    $input.atwho({\n      at: '%',\n      alias: MILESTONES_ALIAS,\n      searchKey: 'search',\n      // eslint-disable-next-line no-template-curly-in-string\n      insertTpl: '${atwho-at}${title}',\n      maxLen: 100,\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        if (value.title != null) {\n          tmpl = GfmAutoComplete.Milestones.templateFunction(value.title, value.expired);\n        }\n        return tmpl;\n      },\n      data: GfmAutoComplete.defaultLoadingData,\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        beforeSave(milestones) {\n          const parsedMilestones = $.map(milestones, (m) => {\n            if (m.title == null) {\n              return m;\n            }\n\n            const dueDate = m.due_date ? newDate(m.due_date) : null;\n            const expired = dueDate ? Date.now() > dueDate.getTime() : false;\n\n            return {\n              id: m.iid,\n              title: m.title,\n              search: m.title,\n              expired,\n              dueDate,\n            };\n          });\n\n          // Sort milestones by due date when present.\n          if (typeof parsedMilestones[0] === 'object') {\n            return parsedMilestones.sort((mA, mB) => {\n              // Move all expired milestones to the bottom.\n              if (mA.expired) return 1;\n              if (mB.expired) return -1;\n\n              // Move milestones without due dates just above expired milestones.\n              if (!mA.dueDate) return 1;\n              if (!mB.dueDate) return -1;\n\n              // Sort by due date in ascending order.\n              return mA.dueDate - mB.dueDate;\n            });\n          }\n          return parsedMilestones;\n        },\n      },\n    });\n    showAndHideHelper($input, MILESTONES_ALIAS);\n  }\n\n  setupMergeRequests($input) {\n    $input.atwho({\n      at: '!',\n      alias: MERGEREQUESTS_ALIAS,\n      searchKey: 'search',\n      maxLen: 100,\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        if (value.title != null) {\n          tmpl = GfmAutoComplete.Issues.templateFunction(value);\n        }\n        return tmpl;\n      },\n      data: GfmAutoComplete.defaultLoadingData,\n      insertTpl: GfmAutoComplete.Issues.insertTemplateFunction,\n      skipSpecialCharacterTest: true,\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        beforeSave(merges) {\n          return $.map(merges, (m) => {\n            if (m.title == null) {\n              return m;\n            }\n            return {\n              id: m.iid,\n              title: m.title,\n              reference: m.reference,\n              search: `${m.iid} ${m.title}`,\n            };\n          });\n        },\n      },\n    });\n    showAndHideHelper($input, MERGEREQUESTS_ALIAS);\n  }\n\n  setupLabels($input) {\n    const instance = this;\n    const fetchData = this.fetchData.bind(this);\n    const LABEL_COMMAND = {\n      LABEL: '/label',\n      LABELS: '/labels',\n      UNLABEL: '/unlabel',\n      RELABEL: '/relabel',\n    };\n    let command = '';\n\n    $input.atwho({\n      at: '~',\n      alias: LABELS_ALIAS,\n      searchKey: 'search',\n      data: GfmAutoComplete.defaultLoadingData,\n      maxLen: 100,\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Labels.templateFunction(value.color, value.title);\n        if (GfmAutoComplete.isLoading(value)) {\n          tmpl = GfmAutoComplete.Loading.template;\n        }\n        return tmpl;\n      },\n      // eslint-disable-next-line no-template-curly-in-string\n      insertTpl: '${atwho-at}${title}',\n      limit: 20,\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        beforeSave(merges) {\n          if (GfmAutoComplete.isLoading(merges)) return merges;\n          return $.map(merges, (m) => ({\n            title: m.title,\n            color: m.color,\n            search: m.title,\n            set: m.set,\n          }));\n        },\n        matcher(flag, subtext) {\n          const subtextNodes = subtext.split(/\\n+/g).pop().split(GfmAutoComplete.regexSubtext);\n\n          // Check if ~ is followed by '/label', '/labels', '/relabel' or '/unlabel' commands.\n          command = subtextNodes.find((node) => {\n            if (Object.values(LABEL_COMMAND).includes(node)) {\n              return node;\n            }\n            return null;\n          });\n\n          // If any label matches the inserted text after the last `~`, suggest those labels,\n          // even if any spaces or funky characters were typed.\n          // This allows matching labels like \"Accepting merge requests\".\n          const labels = instance.cachedData[flag];\n          if (labels) {\n            if (!subtext.includes(flag)) {\n              // Do not match if there is no `~` before the cursor\n              return null;\n            }\n            if (subtext.endsWith('~~')) {\n              // Do not match if there are two consecutive `~` characters (strikethrough) before the cursor\n              return null;\n            }\n            const lastCandidate = subtext.split(flag).pop();\n            if (labels.find((label) => label.title.startsWith(lastCandidate))) {\n              return lastCandidate;\n            }\n          }\n\n          const match = GfmAutoComplete.defaultMatcher(flag, subtext, this.app.controllers);\n          return match && match.length ? match[1] : null;\n        },\n        filter(query, data, searchKey) {\n          if (GfmAutoComplete.isLoading(data)) {\n            fetchData(this.$inputor, this.at);\n            return data;\n          }\n\n          if (data === GfmAutoComplete.defaultLoadingData) {\n            return $.fn.atwho.default.callbacks.filter(query, data, searchKey);\n          }\n\n          // The `LABEL_COMMAND.RELABEL` is intentionally skipped\n          // because we want to return all the labels (unfiltered) for that command.\n          if (command === LABEL_COMMAND.LABEL || command === LABEL_COMMAND.LABELS) {\n            // Return labels with set: undefined.\n            return data.filter((label) => !label.set);\n          }\n          if (command === LABEL_COMMAND.UNLABEL) {\n            // Return labels with set: true.\n            return data.filter((label) => label.set);\n          }\n\n          return data;\n        },\n      },\n    });\n    showAndHideHelper($input, LABELS_ALIAS);\n  }\n\n  setupSnippets($input) {\n    $input.atwho({\n      at: '$',\n      alias: SNIPPETS_ALIAS,\n      searchKey: 'search',\n      maxLen: 100,\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        if (value.title != null) {\n          tmpl = GfmAutoComplete.Issues.templateFunction(value);\n        }\n        return tmpl;\n      },\n      data: GfmAutoComplete.defaultLoadingData,\n      // eslint-disable-next-line no-template-curly-in-string\n      insertTpl: '${atwho-at}${id}',\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        beforeSave(snippets) {\n          return $.map(snippets, (m) => {\n            if (m.title == null) {\n              return m;\n            }\n            return {\n              id: m.id,\n              title: m.title,\n              search: `${m.id} ${m.title}`,\n            };\n          });\n        },\n      },\n    });\n    showAndHideHelper($input, SNIPPETS_ALIAS);\n  }\n\n  setupWikis($input) {\n    $input.atwho({\n      at: '[[',\n      suffix: ']]',\n      alias: WIKIS_ALIAS,\n      searchKey: 'title',\n      data: GfmAutoComplete.defaultLoadingData,\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        if (value.title != null) {\n          tmpl = GfmAutoComplete.Wikis.templateFunction(value);\n        }\n        return tmpl;\n      },\n      // eslint-disable-next-line no-template-curly-in-string\n      insertTpl: '${atwho-at}${title}|${slug}',\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        beforeInsert(value) {\n          const [title, slug] = value.substr(2).split('|');\n          if (title.toLowerCase() === slug.toLowerCase()) {\n            return `[[${slug}`;\n          }\n          return `[[${title}|${slug}`;\n        },\n        beforeSave(wikis) {\n          return $.map(wikis, (m) => {\n            if (m.title == null) {\n              return m;\n            }\n            return {\n              title: m.title,\n              slug: m.slug,\n            };\n          });\n        },\n      },\n    });\n    showAndHideHelper($input, WIKIS_ALIAS);\n  }\n\n  setupContacts($input) {\n    const fetchData = this.fetchData.bind(this);\n    let command = '';\n\n    $input.atwho({\n      at: '[contact:',\n      suffix: ']',\n      alias: CONTACTS_ALIAS,\n      searchKey: 'search',\n      maxLen: 100,\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        if (value.email != null) {\n          tmpl = GfmAutoComplete.Contacts.templateFunction(value);\n        }\n        return tmpl;\n      },\n      data: GfmAutoComplete.defaultLoadingData,\n      // eslint-disable-next-line no-template-curly-in-string\n      insertTpl: '${atwho-at}${email}',\n      callbacks: {\n        ...this.getDefaultCallbacks(),\n        beforeSave(contacts) {\n          return $.map(contacts, (m) => {\n            if (m.email == null) {\n              return m;\n            }\n            return {\n              id: m.id,\n              email: m.email,\n              firstName: m.first_name,\n              lastName: m.last_name,\n              search: `${m.email}`,\n              state: m.state,\n              set: m.set,\n            };\n          });\n        },\n        matcher(flag, subtext) {\n          const subtextNodes = subtext.split(/\\n+/g).pop().split(GfmAutoComplete.regexSubtext);\n\n          command = subtextNodes.find((node) => {\n            if (node === CONTACTS_ADD_COMMAND || node === CONTACTS_REMOVE_COMMAND) {\n              return node;\n            }\n            return null;\n          });\n\n          const match = GfmAutoComplete.defaultMatcher(flag, subtext, this.app.controllers);\n          return match?.length ? match[1] : null;\n        },\n        filter(query, data, searchKey) {\n          if (GfmAutoComplete.isLoading(data)) {\n            fetchData(this.$inputor, this.at);\n            return data;\n          }\n\n          if (data === GfmAutoComplete.defaultLoadingData) {\n            return $.fn.atwho.default.callbacks.filter(query, data, searchKey);\n          }\n\n          if (command === CONTACTS_ADD_COMMAND) {\n            // Return contacts that are active and not already on the issue\n            return data.filter((contact) => contact.state === CONTACT_STATE_ACTIVE && !contact.set);\n          }\n          if (command === CONTACTS_REMOVE_COMMAND) {\n            // Return contacts already on the issue\n            return data.filter((contact) => contact.set);\n          }\n\n          return data;\n        },\n      },\n    });\n    showAndHideHelper($input, CONTACTS_ALIAS);\n  }\n\n  getDefaultCallbacks() {\n    const self = this;\n\n    return {\n      sorter(query, items, searchKey) {\n        this.setting.highlightFirst = this.setting.alwaysHighlightFirst || query.length > 0;\n        if (GfmAutoComplete.isLoading(items)) {\n          this.setting.highlightFirst = false;\n          return items;\n        }\n        return $.fn.atwho.default.callbacks.sorter(query, items, searchKey);\n      },\n      filter(query, data, searchKey) {\n        if (GfmAutoComplete.isTypeWithBackendFiltering(this.at)) {\n          if (GfmAutoComplete.isLoading(data) || self.previousQuery !== query) {\n            self.previousQuery = query;\n            self.fetchData(this.$inputor, this.at, query);\n            return data;\n          }\n        }\n\n        if (GfmAutoComplete.isLoading(data)) {\n          self.fetchData(this.$inputor, this.at);\n          return data;\n        }\n\n        return $.fn.atwho.default.callbacks.filter(query, data, searchKey);\n      },\n      beforeInsert(value) {\n        let withoutAt = value.substring(1);\n        const at = value.charAt();\n\n        if (value && !this.setting.skipSpecialCharacterTest) {\n          const regex = at === '~' ? /\\W|^\\d+$/ : /\\W/;\n          if (withoutAt && regex.test(withoutAt)) {\n            withoutAt = `\"${withoutAt}\"`;\n          }\n        }\n\n        // We can ignore this for quick actions because they are processed\n        // before Markdown.\n        if (!this.setting.skipMarkdownCharacterTest) {\n          withoutAt = withoutAt\n            .replace(/(~~|`|\\*)/g, '\\\\$1')\n            .replace(/(\\b)(_+)/g, '$1\\\\$2') // only escape underscores at the start\n            .replace(/(_+)(\\b)/g, '\\\\$1$2'); // or end of words\n        }\n\n        return `${at}${withoutAt}`;\n      },\n      matcher(flag, subtext) {\n        const match = GfmAutoComplete.defaultMatcher(flag, subtext, this.app.controllers);\n\n        if (match) {\n          return match[1];\n        }\n        return null;\n      },\n      highlighter,\n    };\n  }\n\n  fetchData($input, at, search) {\n    if (this.isLoadingData[at] && !GfmAutoComplete.isTypeWithBackendFiltering(at)) return;\n\n    this.isLoadingData[at] = true;\n    const dataSource = this.dataSources[GfmAutoComplete.atTypeMap[at]];\n\n    if (GfmAutoComplete.isTypeWithBackendFiltering(at)) {\n      if (this.cachedData[at]?.[search]) {\n        this.loadData($input, at, this.cachedData[at][search], { search });\n      } else {\n        if (this.currentBackendFilterRequestController) {\n          this.currentBackendFilterRequestController.abort();\n        }\n\n        this.currentBackendFilterRequestController = new AbortController();\n\n        axios\n          .get(dataSource, {\n            params: { search },\n            signal: this.currentBackendFilterRequestController.signal,\n          })\n          .then(({ data }) => {\n            this.loadData($input, at, data, { search });\n          })\n          .catch(() => {\n            this.isLoadingData[at] = false;\n          })\n          .finally(() => {\n            this.currentBackendFilterRequestController = null;\n          });\n      }\n    } else if (this.cachedData[at]) {\n      this.loadData($input, at, this.cachedData[at]);\n    } else if (GfmAutoComplete.atTypeMap[at] === 'emojis') {\n      this.loadEmojiData($input, at).catch(() => {});\n    } else if (dataSource) {\n      AjaxCache.retrieve(dataSource, true)\n        .then((data) => {\n          this.loadSubcommands($input, data);\n          this.loadData($input, at, data);\n        })\n        .catch(() => {\n          this.isLoadingData[at] = false;\n        });\n    } else {\n      this.isLoadingData[at] = false;\n    }\n  }\n\n  loadSubcommands($input, data) {\n    if (data.some((c) => c.name === 'submit_review')) {\n      this.setSubmitReviewStates($input);\n    }\n  }\n\n  // eslint-disable-next-line max-params\n  loadData($input, at, data, { search } = {}) {\n    this.isLoadingData[at] = false;\n\n    if (search !== undefined) {\n      if (this.cachedData[at] === undefined) {\n        this.cachedData[at] = {};\n      }\n\n      this.cachedData[at][search] = data;\n    } else {\n      this.cachedData[at] = data;\n    }\n\n    $input.atwho('load', at, data);\n    // This trigger at.js again\n    // otherwise we would be stuck with loading until the user types\n    return $input.trigger('keyup');\n  }\n\n  async loadEmojiData($input, at) {\n    await Emoji.initEmojiMap();\n\n    this.loadData($input, at, ['loaded']);\n\n    GfmAutoComplete.glEmojiTag = Emoji.glEmojiTag;\n  }\n\n  updateDataSources(newDataSources) {\n    this.dataSources = { ...this.dataSources, ...newDataSources };\n    this.clearCache();\n  }\n\n  clearCache() {\n    this.cachedData = {};\n  }\n\n  destroy() {\n    this.input.each((i, input) => {\n      const $input = $(input);\n      $input.atwho('destroy');\n    });\n  }\n\n  static isLoading(data) {\n    let dataToInspect = data;\n    if (data && data.length > 0) {\n      [dataToInspect] = data;\n    }\n\n    const loadingState = GfmAutoComplete.defaultLoadingData[0];\n    return dataToInspect && (dataToInspect === loadingState || dataToInspect.name === loadingState);\n  }\n\n  static defaultMatcher(flag, subtext, controllers) {\n    // The below is taken from At.js source\n    // Tweaked to commands to start without a space only if char before is a non-word character\n    // https://github.com/ichord/At.js\n    const atSymbolsWithBar = Object.keys(controllers)\n      .join('|')\n      .replace(/[$]/, '\\\\$&')\n      .replace(/([[\\]:])/g, '\\\\$1')\n      .replace(/([*])/g, '\\\\$1');\n\n    const atSymbolsWithoutBar = Object.keys(controllers).join('');\n    const targetSubtext = subtext.split(GfmAutoComplete.regexSubtext).pop();\n    const resultantFlag = flag.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n\n    const accentAChar = decodeURI('%C3%80');\n    const accentYChar = decodeURI('%C3%BF');\n\n    // Holy regex, batman!\n    const regexp = new RegExp(\n      `^(?:\\\\B|[^a-zA-Z0-9_\\`${atSymbolsWithoutBar}]|\\\\s)${resultantFlag}(?!${atSymbolsWithBar})((?:[A-Za-z${accentAChar}-${accentYChar}0-9_'.+-:]|[^\\\\x00-\\\\x7a])*)$`,\n      'gi',\n    );\n\n    return regexp.exec(targetSubtext);\n  }\n}\n\nGfmAutoComplete.regexSubtext = /\\s+/g;\n\nGfmAutoComplete.defaultLoadingData = ['loading'];\n\nGfmAutoComplete.atTypeMap = {\n  ':': 'emojis',\n  '@': 'members',\n  '#': 'issues',\n  '!': 'mergeRequests',\n  '&': 'epics',\n  '*iteration:': 'iterations',\n  '~': 'labels',\n  '%': 'milestones',\n  '/': 'commands',\n  '[vulnerability:': 'vulnerabilities',\n  $: 'snippets',\n  '[contact:': 'contacts',\n  '[[': 'wikis',\n};\n\nGfmAutoComplete.typesWithBackendFiltering = ['vulnerabilities', 'members', 'issues'];\n\nGfmAutoComplete.isTypeWithBackendFiltering = (type) =>\n  GfmAutoComplete.typesWithBackendFiltering.includes(GfmAutoComplete.atTypeMap[type]);\n\n// Emoji\nGfmAutoComplete.glEmojiTag = null;\nGfmAutoComplete.Emoji = {\n  insertTemplateFunction(value) {\n    return `:${value.emoji.name}:`;\n  },\n  templateFunction(item) {\n    if (GfmAutoComplete.isLoading(item)) {\n      return GfmAutoComplete.Loading.template;\n    }\n\n    const escapedFieldValue = escape(item.fieldValue);\n    if (!GfmAutoComplete.glEmojiTag) {\n      return `<li>${escapedFieldValue}</li>`;\n    }\n\n    return `<li>${GfmAutoComplete.glEmojiTag(item.emoji.name)} ${escapedFieldValue}</li>`;\n  },\n  filter(query) {\n    if (query.length === 0) {\n      return Emoji.getAllEmoji()\n        .map((emoji) => ({\n          emoji,\n          fieldValue: emoji.name,\n        }))\n        .slice(0, 20);\n    }\n\n    return Emoji.searchEmoji(query);\n  },\n  sorter(items) {\n    return items.sort(Emoji.sortEmoji);\n  },\n};\n// Team Members\nGfmAutoComplete.Members = {\n  templateFunction({ avatarTag, username, title, icon, availabilityStatus }) {\n    return `<li>${avatarTag} ${username} <small>${escape(\n      title,\n    )}${availabilityStatus}</small> ${icon}</li>`;\n  },\n  nameOrUsernameStartsWith(member, query) {\n    // `member.search` is a name:username string like `MargeSimpson msimpson`\n    return member.search.split(' ').some((name) => name.toLowerCase().startsWith(query));\n  },\n  nameOrUsernameIncludes(member, query) {\n    // `member.search` is a name:username string like `MargeSimpson msimpson`\n    return member.search.toLowerCase().includes(query);\n  },\n  // This should be kept in sync with the backend sorting in\n  // `User#gfm_autocomplete_search` and `Namespace#gfm_autocomplete_search`\n  sort(query, members) {\n    const lowercaseQuery = query.toLowerCase();\n    const { nameOrUsernameStartsWith, nameOrUsernameIncludes } = GfmAutoComplete.Members;\n\n    return sortBy(\n      members.filter((member) => nameOrUsernameIncludes(member, lowercaseQuery)),\n      (member) => (nameOrUsernameStartsWith(member, lowercaseQuery) ? -1 : 0),\n    );\n  },\n};\nGfmAutoComplete.Labels = {\n  templateFunction(color, title) {\n    return `<li><span class=\"dropdown-label-box\" style=\"background: ${escape(\n      color,\n    )}\"></span> ${escape(title)}</li>`;\n  },\n};\n// Issues, MergeRequests and Snippets\nGfmAutoComplete.Issues = {\n  insertTemplateFunction(value) {\n    // eslint-disable-next-line no-template-curly-in-string\n    return value.reference || '${atwho-at}${id}';\n  },\n  templateFunction({ id, title, reference, iconName }) {\n    const mappedIconName =\n      iconName === ISSUABLE_EPIC ? WORK_ITEMS_TYPE_MAP[WORK_ITEM_TYPE_ENUM_EPIC].icon : iconName;\n    const icon = mappedIconName\n      ? spriteIcon(mappedIconName, 'gl-fill-icon-subtle s16 gl-mr-2')\n      : '';\n    return `<li>${icon}<small>${escape(reference || id)}</small> ${escape(title)}</li>`;\n  },\n};\n// Milestones\nGfmAutoComplete.Milestones = {\n  templateFunction(title, expired) {\n    if (expired) {\n      return `<li>${sprintf(__('%{milestone} (expired)'), {\n        milestone: escape(title),\n      })}</li>`;\n    }\n    return `<li>${escape(title)}</li>`;\n  },\n};\nGfmAutoComplete.Contacts = {\n  templateFunction({ email, firstName, lastName }) {\n    return `<li><small>${escape(firstName)} ${escape(lastName)}</small> ${escape(email)}</li>`;\n  },\n};\nGfmAutoComplete.Wikis = {\n  templateFunction({ title, slug }) {\n    const icon = spriteIcon('document', 's16 vertical-align-middle gl-mr-2');\n    const slugSpan =\n      title.toLowerCase() !== slug.toLowerCase() ? ` <small>(${escape(slug)})</small>` : '';\n    return `<li>${icon} ${escape(title)} ${slugSpan}</li>`;\n  },\n};\n\nconst loadingSpinner = loadingIconForLegacyJS({\n  inline: true,\n  classes: ['gl-mr-2'],\n}).outerHTML;\n\nGfmAutoComplete.Loading = {\n  template: `<li style=\"pointer-events: none;\">${loadingSpinner}Loading...</li>`,\n};\n\nexport default GfmAutoComplete;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.isButtonTrigger)?_c('gl-button',_vm._b({attrs:{\"variant\":_vm.variant,\"category\":_vm.category,\"icon\":_vm.icon},on:{\"click\":_vm.openModal}},'gl-button',_vm.componentAttributes,false),[_vm._v(\"\\n  \"+_vm._s(_vm.displayText)+\"\\n\")]):(_vm.isWithEmojiTrigger)?_c('gl-link',_vm._b({on:{\"click\":_vm.openModal}},'gl-link',_vm.componentAttributes,false),[_vm._v(\"\\n  \"+_vm._s(_vm.displayText)+\"\\n  \"),_c('gl-emoji',{staticClass:\"gl-mr-1 gl-align-baseline gl-text-size-reset\",attrs:{\"data-name\":_vm.icon}})],1):(_vm.isDropdownWithEmojiTrigger)?_c('gl-dropdown-item',_vm._b({on:{\"click\":_vm.openModal}},'gl-dropdown-item',_vm.componentAttributes,false),[_vm._v(\"\\n  \"+_vm._s(_vm.displayText)+\"\\n  \"),_c('gl-emoji',{staticClass:\"gl-mr-1 gl-align-baseline gl-text-size-reset\",attrs:{\"data-name\":_vm.icon}})],1):(_vm.isDisclosureTrigger)?_c('gl-disclosure-dropdown-item',_vm._b({attrs:{\"item\":_vm.item},on:{\"action\":_vm.handleDisclosureDropdownAction}},'gl-disclosure-dropdown-item',_vm.componentAttributes,false)):_c('gl-link',_vm._b({attrs:{\"data-is-link\":\"true\"},on:{\"click\":_vm.openModal}},'gl-link',_vm.componentAttributes,false),[_vm._v(\"\\n  \"+_vm._s(_vm.displayText)+\"\\n\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./invite_members_trigger.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./invite_members_trigger.vue?vue&type=script&lang=js\"","<script>\nimport { GlButton, GlLink, GlDropdownItem, GlDisclosureDropdownItem } from '@gitlab/ui';\nimport { s__ } from '~/locale';\nimport eventHub from '../event_hub';\nimport {\n  TRIGGER_ELEMENT_BUTTON,\n  TRIGGER_ELEMENT_WITH_EMOJI,\n  TRIGGER_ELEMENT_DROPDOWN_WITH_EMOJI,\n  TRIGGER_ELEMENT_DISCLOSURE_DROPDOWN,\n} from '../constants';\n\nexport default {\n  components: { GlButton, GlLink, GlDropdownItem, GlDisclosureDropdownItem },\n  props: {\n    displayText: {\n      type: String,\n      required: false,\n      default: s__('InviteMembers|Invite team members'),\n    },\n    icon: {\n      type: String,\n      required: false,\n      default: '',\n    },\n    classes: {\n      type: String,\n      required: false,\n      default: '',\n    },\n    variant: {\n      type: String,\n      required: false,\n      default: undefined,\n    },\n    category: {\n      type: String,\n      required: false,\n      default: undefined,\n    },\n    triggerSource: {\n      type: String,\n      required: true,\n    },\n    triggerElement: {\n      type: String,\n      required: false,\n      default: 'button',\n    },\n  },\n  computed: {\n    componentAttributes() {\n      return {\n        class: this.classes,\n        'data-testid': 'invite-members-button',\n      };\n    },\n    item() {\n      return { text: this.displayText };\n    },\n    isButtonTrigger() {\n      return this.triggerElement === TRIGGER_ELEMENT_BUTTON;\n    },\n    isWithEmojiTrigger() {\n      return this.triggerElement === TRIGGER_ELEMENT_WITH_EMOJI;\n    },\n    isDropdownWithEmojiTrigger() {\n      return this.triggerElement === TRIGGER_ELEMENT_DROPDOWN_WITH_EMOJI;\n    },\n    isDisclosureTrigger() {\n      return this.triggerElement === TRIGGER_ELEMENT_DISCLOSURE_DROPDOWN;\n    },\n  },\n  methods: {\n    openModal() {\n      eventHub.$emit('openModal', { source: this.triggerSource });\n    },\n    handleDisclosureDropdownAction() {\n      this.openModal();\n      this.$emit('modal-opened');\n    },\n  },\n};\n</script>\n\n<template>\n  <gl-button\n    v-if=\"isButtonTrigger\"\n    v-bind=\"componentAttributes\"\n    :variant=\"variant\"\n    :category=\"category\"\n    :icon=\"icon\"\n    @click=\"openModal\"\n  >\n    {{ displayText }}\n  </gl-button>\n  <gl-link v-else-if=\"isWithEmojiTrigger\" v-bind=\"componentAttributes\" @click=\"openModal\">\n    {{ displayText }}\n    <gl-emoji class=\"gl-mr-1 gl-align-baseline gl-text-size-reset\" :data-name=\"icon\" />\n  </gl-link>\n  <gl-dropdown-item\n    v-else-if=\"isDropdownWithEmojiTrigger\"\n    v-bind=\"componentAttributes\"\n    @click=\"openModal\"\n  >\n    {{ displayText }}\n    <gl-emoji class=\"gl-mr-1 gl-align-baseline gl-text-size-reset\" :data-name=\"icon\" />\n  </gl-dropdown-item>\n  <gl-disclosure-dropdown-item\n    v-else-if=\"isDisclosureTrigger\"\n    v-bind=\"componentAttributes\"\n    :item=\"item\"\n    @action=\"handleDisclosureDropdownAction\"\n  />\n  <gl-link v-else v-bind=\"componentAttributes\" data-is-link=\"true\" @click=\"openModal\">\n    {{ displayText }}\n  </gl-link>\n</template>\n","import { render, staticRenderFns } from \"./invite_members_trigger.vue?vue&type=template&id=cb0ec660\"\nimport script from \"./invite_members_trigger.vue?vue&type=script&lang=js\"\nexport * from \"./invite_members_trigger.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import createEventHub from '~/helpers/event_hub_factory';\n\nconst eventHub = createEventHub();\n\n// TODO: remove eventHub hack after code splitting refactor\nwindow.emitSidebarEvent = (...args) => eventHub.$emit(...args);\n\nexport default eventHub;\n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"mutation\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestRequestRereview\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"projectPath\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"ID\"}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"userId\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"UserID\"}}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestReviewerRereview\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"input\"},\"value\":{\"kind\":\"ObjectValue\",\"fields\":[{\"kind\":\"ObjectField\",\"name\":{\"kind\":\"Name\",\"value\":\"projectPath\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"projectPath\"}}},{\"kind\":\"ObjectField\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"}}},{\"kind\":\"ObjectField\",\"name\":{\"kind\":\"Name\",\"value\":\"userId\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"userId\"}}}]}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"errors\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":207}};\n    doc.loc.source = {\"body\":\"mutation mergeRequestRequestRereview($projectPath: ID!, $iid: String!, $userId: UserID!) {\\n  mergeRequestReviewerRereview(input: { projectPath: $projectPath, iid: $iid, userId: $userId }) {\\n    errors\\n  }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set();\n\n      // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n      opRefs.forEach(function(refName) {\n        newRefs.add(refName);\n      });\n\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n    \n    module.exports = doc;\n    \n        module.exports[\"mergeRequestRequestRereview\"] = oneQuery(doc, \"mergeRequestRequestRereview\");\n        \n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"User\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"User\"}},\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"avatarUrl\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"username\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"webUrl\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"webPath\"},\"arguments\":[],\"directives\":[]}]}}],\"loc\":{\"start\":0,\"end\":80}};\n    doc.loc.source = {\"body\":\"fragment User on User {\\n  id\\n  avatarUrl\\n  name\\n  username\\n  webUrl\\n  webPath\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set();\n\n      // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n      opRefs.forEach(function(refName) {\n        newRefs.add(refName);\n      });\n\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n    \n    module.exports = doc;\n    \n        module.exports[\"User\"] = oneQuery(doc, \"User\");\n        \n","import { GlLoadingIcon } from '@gitlab/ui';\nimport { __ } from '~/locale';\nimport { renderVueComponentForLegacyJS } from './render_vue_component_for_legacy_js';\n\nconst defaultValue = (prop) => GlLoadingIcon.props[prop]?.default;\n\n/**\n * Returns a loading icon/spinner element.\n *\n * This should *only* be used in existing legacy areas of code where Vue is not\n * in use, as part of the migration strategy defined in\n * https://gitlab.com/groups/gitlab-org/-/epics/7626.\n *\n * @param {object} props - The props to configure the spinner.\n * @param {boolean} props.inline - Display the spinner inline; otherwise, as a block.\n * @param {string} props.color - The color of the spinner ('dark' or 'light')\n * @param {string} props.size - The size of the spinner ('sm', 'md', 'lg', 'xl')\n * @param {string[]} props.classes - Additional classes to apply to the element.\n * @param {string} props.label - The ARIA label to apply to the spinner.\n * @returns {HTMLElement}\n */\nexport const loadingIconForLegacyJS = ({\n  inline = defaultValue('inline'),\n  color = defaultValue('color'),\n  size = defaultValue('size'),\n  classes = [],\n  label = __('Loading'),\n} = {}) =>\n  renderVueComponentForLegacyJS(GlLoadingIcon, {\n    class: classes,\n    props: {\n      inline,\n      color,\n      size,\n      label,\n    },\n  });\n","import { s__ } from '~/locale';\nimport { helpPagePath } from '~/helpers/help_page_helper';\n\nexport const PROJECT_SELECT_LABEL_ID = 'project-select';\nexport const SEARCH_DELAY = 200;\nexport const VALID_TOKEN_BACKGROUND = 'gl-bg-green-100';\nexport const WARNING_TOKEN_BACKGROUND = 'gl-bg-orange-100';\nexport const INVALID_TOKEN_BACKGROUND = 'gl-bg-red-100';\nexport const TOAST_MESSAGE_LOCALSTORAGE_KEY = 'members_invited_successfully';\nexport const MEMBERS_WITH_QUEUED_STATUS_LOCALSTORAGE_KEY = 'members_queued_successfully';\n\nexport const GROUP_FILTERS = {\n  ALL: 'all',\n  DESCENDANT_GROUPS: 'descendant_groups',\n};\n\nexport const USERS_FILTER_ALL = 'all';\nexport const USERS_FILTER_SAML_PROVIDER_ID = 'saml_provider_id';\nexport const TRIGGER_ELEMENT_BUTTON = 'button';\nexport const TOP_NAV_INVITE_MEMBERS_COMPONENT = 'invite_members';\nexport const TRIGGER_ELEMENT_WITH_EMOJI = 'text-emoji';\nexport const TRIGGER_ELEMENT_DROPDOWN_WITH_EMOJI = 'dropdown-text-emoji';\nexport const TRIGGER_ELEMENT_DISCLOSURE_DROPDOWN = 'dropdown-text';\nexport const INVITE_MEMBER_MODAL_TRACKING_CATEGORY = 'invite_members_modal';\nexport const IMPORT_PROJECT_MEMBERS_MODAL_TRACKING_CATEGORY = 'invite_project_members_modal';\nexport const IMPORT_PROJECT_MEMBERS_MODAL_TRACKING_LABEL = 'project-members-page';\nexport const MEMBERS_MODAL_DEFAULT_TITLE = s__('InviteMembersModal|Invite members');\nexport const MEMBERS_MODAL_CELEBRATE_TITLE = s__(\n  'InviteMembersModal|GitLab is better with colleagues!',\n);\nexport const MEMBERS_MODAL_CELEBRATE_INTRO = s__(\n  'InviteMembersModal|How about inviting a colleague or two to join you?',\n);\nexport const MEMBERS_TO_GROUP_DEFAULT_INTRO_TEXT = s__(\n  \"InviteMembersModal|You're inviting members to the %{strongStart}%{name}%{strongEnd} group.\",\n);\n\nexport const MEMBERS_TO_PROJECT_DEFAULT_INTRO_TEXT = s__(\n  \"InviteMembersModal|You're inviting members to the %{strongStart}%{name}%{strongEnd} project.\",\n);\nexport const MEMBERS_TO_PROJECT_CELEBRATE_INTRO_TEXT = s__(\n  \"InviteMembersModal|Congratulations on creating your project, you're almost there!\",\n);\nexport const MEMBERS_SEARCH_FIELD = s__('InviteMembersModal|Username, name or email address');\nexport const MEMBERS_PLACEHOLDER = s__(\n  'InviteMembersModal|Select from GitLab usernames or enter email addresses',\n);\n\nexport const GROUP_MODAL_DEFAULT_TITLE = s__('InviteMembersModal|Invite a group');\nexport const GROUP_MODAL_TO_GROUP_DEFAULT_INTRO_TEXT = s__(\n  \"InviteMembersModal|You're inviting a group to the %{strongStart}%{name}%{strongEnd} group.\",\n);\nexport const GROUP_MODAL_TO_PROJECT_DEFAULT_INTRO_TEXT = s__(\n  \"InviteMembersModal|You're inviting a group to the %{strongStart}%{name}%{strongEnd} project.\",\n);\n\nexport const GROUP_MODAL_TO_GROUP_ALERT_BODY = s__(\n  'InviteMembersModal|Inviting a group %{linkStart}adds its members to your group%{linkEnd}, including members who join after the invite. This might put your group over the free %{count} user limit.',\n);\nexport const GROUP_MODAL_TO_GROUP_ALERT_LINK = helpPagePath(\n  'user/project/members/sharing_projects_groups',\n  {\n    anchor: 'invite-a-group-to-a-group',\n  },\n);\nexport const GROUP_MODAL_TO_PROJECT_ALERT_BODY = s__(\n  'InviteMembersModal|Inviting a group %{linkStart}adds its members to your project%{linkEnd}, including members who join after the invite. This might put your group over the free %{count} user limit.',\n);\nexport const GROUP_MODAL_TO_PROJECT_ALERT_LINK = helpPagePath(\n  'user/project/members/sharing_projects_groups',\n  {\n    anchor: 'invite-a-group-to-a-project',\n  },\n);\n\nexport const GROUP_SEARCH_FIELD = s__('InviteMembersModal|Select a group to invite');\nexport const GROUP_PLACEHOLDER = s__('InviteMembersModal|Search for a group to invite');\n\nexport const ACCESS_LEVEL = s__('InviteMembersModal|Select maximum role');\nexport const ACCESS_EXPIRE_DATE = s__('InviteMembersModal|Access expiration date (optional)');\nexport const TOAST_MESSAGE_SUCCESSFUL = s__('InviteMembersModal|Members were successfully added.');\nexport const QUEUED_MESSAGE_SUCCESSFUL = s__(\n  'InviteMembersModal|Some invitations have been queued for administrator approval.',\n);\nexport const INVALID_FEEDBACK_MESSAGE_DEFAULT = s__('InviteMembersModal|Something went wrong');\nexport const READ_MORE_TEXT = s__(\n  `InviteMembersModal|%{linkStart}Read more%{linkEnd} about role permissions. You can change this later. Invited members are limited to this role or their current group role, whichever is lower.`,\n);\nexport const READ_MORE_ACCESS_EXPIRATION_TEXT = s__(\n  `InviteMembersModal|%{linkStart}Read more%{linkEnd} about access expiration`,\n);\nexport const INVITE_BUTTON_TEXT = s__('InviteMembersModal|Invite');\nexport const INVITE_BUTTON_TEXT_DISABLED = s__('InviteMembersModal|Manage members');\nexport const CANCEL_BUTTON_TEXT = s__('InviteMembersModal|Cancel');\nexport const HEADER_CLOSE_LABEL = s__('InviteMembersModal|Close invite team members');\nexport const MEMBER_ERROR_LIST_TEXT = s__(\n  'InviteMembersModal|Review the invite errors and try again:',\n);\nexport const COLLAPSED_ERRORS = s__('InviteMembersModal|Show more (%{count})');\nexport const EXPANDED_ERRORS = s__('InviteMembersModal|Show less');\nexport const EMPTY_INVITES_ALERT_TEXT = s__('InviteMembersModal|Please add members to invite');\n\nexport const MEMBER_MODAL_LABELS = {\n  modal: {\n    default: {\n      title: MEMBERS_MODAL_DEFAULT_TITLE,\n    },\n    celebrate: {\n      title: MEMBERS_MODAL_CELEBRATE_TITLE,\n      intro: MEMBERS_MODAL_CELEBRATE_INTRO,\n    },\n  },\n  toGroup: {\n    default: {\n      introText: MEMBERS_TO_GROUP_DEFAULT_INTRO_TEXT,\n    },\n  },\n  toProject: {\n    default: {\n      introText: MEMBERS_TO_PROJECT_DEFAULT_INTRO_TEXT,\n    },\n    celebrate: {\n      introText: MEMBERS_TO_PROJECT_CELEBRATE_INTRO_TEXT,\n    },\n  },\n  searchField: MEMBERS_SEARCH_FIELD,\n  placeHolder: MEMBERS_PLACEHOLDER,\n  toastMessageSuccessful: TOAST_MESSAGE_SUCCESSFUL,\n  memberErrorListText: MEMBER_ERROR_LIST_TEXT,\n  collapsedErrors: COLLAPSED_ERRORS,\n  expandedErrors: EXPANDED_ERRORS,\n  emptyInvitesAlertText: EMPTY_INVITES_ALERT_TEXT,\n};\n\nexport const GROUP_MODAL_LABELS = {\n  title: GROUP_MODAL_DEFAULT_TITLE,\n  toGroup: {\n    introText: GROUP_MODAL_TO_GROUP_DEFAULT_INTRO_TEXT,\n    notificationText: GROUP_MODAL_TO_GROUP_ALERT_BODY,\n    notificationLink: GROUP_MODAL_TO_GROUP_ALERT_LINK,\n  },\n  toProject: {\n    introText: GROUP_MODAL_TO_PROJECT_DEFAULT_INTRO_TEXT,\n    notificationText: GROUP_MODAL_TO_PROJECT_ALERT_BODY,\n    notificationLink: GROUP_MODAL_TO_PROJECT_ALERT_LINK,\n  },\n  searchField: GROUP_SEARCH_FIELD,\n  placeHolder: GROUP_PLACEHOLDER,\n  toastMessageSuccessful: TOAST_MESSAGE_SUCCESSFUL,\n};\n\nexport const ON_SHOW_TRACK_LABEL = 'over_limit_modal_viewed';\nexport const ON_CELEBRATION_TRACK_LABEL = 'invite_celebration_modal';\n\nexport const WARNING_ALERT_TITLE = s__(\n  'InviteMembersModal|You only have space for %{count} more %{members} in %{name}',\n);\nexport const DANGER_ALERT_TITLE = s__(\n  \"InviteMembersModal|You've reached your %{count} %{members} limit for %{name}\",\n);\n\nexport const REACHED_LIMIT_VARIANT = 'reached';\nexport const CLOSE_TO_LIMIT_VARIANT = 'close';\n\nexport const REACHED_LIMIT_MESSAGE = s__(\n  'InviteMembersModal|To invite new users to this top-level group, you must remove existing users. You can still add existing users from the top-level group, including any subgroups and projects.',\n);\n\nexport const REACHED_LIMIT_UPGRADE_SUGGESTION_MESSAGE = REACHED_LIMIT_MESSAGE.concat(\n  s__(\n    'InviteMembersModal| To get more members, the owner of this top-level group can %{trialLinkStart}start a trial%{trialLinkEnd} or %{upgradeLinkStart}upgrade%{upgradeLinkEnd} to a paid tier.',\n  ),\n);\n\nexport const CLOSE_TO_LIMIT_MESSAGE = s__(\n  'InviteMembersModal|To get more members an owner of the group can %{trialLinkStart}start a trial%{trialLinkEnd} or %{upgradeLinkStart}upgrade%{upgradeLinkEnd} to a paid tier.',\n);\nexport const BLOCKED_SEAT_OVERAGES_BODY = s__(\n  'InviteMembersModal|You must purchase more seats for your subscription before this amount of users can be added.',\n);\nexport const BLOCKED_SEAT_OVERAGES_CTA = s__('InviteMembersModal|Purchase more seats');\nexport const BLOCKED_SEAT_OVERAGES_CTA_DOCS = s__('InviteMembersModal|Learn how to add seats');\nexport const BLOCKED_SEAT_OVERAGES_ERROR_REASON = 'seat_limit_exceeded_error';\n","import { parseBoolean } from '~/lib/utils/common_utils';\n\nexport default class SidebarStore {\n  constructor(options) {\n    if (!SidebarStore.singleton) {\n      this.initSingleton(options);\n    }\n\n    // eslint-disable-next-line no-constructor-return\n    return SidebarStore.singleton;\n  }\n\n  initSingleton(options) {\n    const { currentUser, rootPath, editable, timeTrackingLimitToHours } = options;\n    this.currentUser = currentUser;\n    this.rootPath = rootPath;\n    this.editable = parseBoolean(editable);\n    this.timeEstimate = 0;\n    this.totalTimeSpent = 0;\n    this.humanTimeEstimate = '';\n    this.humanTimeSpent = '';\n    this.timeTrackingLimitToHours = timeTrackingLimitToHours;\n    this.assignees = [];\n    this.reviewers = [];\n    this.isFetching = {\n      assignees: true,\n      reviewers: true,\n    };\n    this.isLoading = {};\n    this.autocompleteProjects = [];\n    this.moveToProjectId = 0;\n    this.isLockDialogOpen = false;\n    this.participants = [];\n    this.projectEmailsEnabled = true;\n    this.subscribeDisabledDescription = '';\n    this.subscribed = null;\n    this.changing = false;\n    this.issuableType = options.issuableType;\n\n    SidebarStore.singleton = this;\n  }\n\n  setAssigneeData({ assignees }) {\n    this.isFetching.assignees = false;\n    if (assignees) {\n      this.assignees = assignees;\n    }\n  }\n\n  setReviewerData({ reviewers }) {\n    this.isFetching.reviewers = false;\n    if (reviewers) {\n      this.reviewers = reviewers;\n    }\n  }\n\n  resetChanging() {\n    this.changing = false;\n  }\n\n  setTimeTrackingData(data) {\n    this.timeEstimate = data.time_estimate;\n    this.totalTimeSpent = data.total_time_spent;\n    this.humanTimeEstimate = data.human_time_estimate;\n    this.humanTotalTimeSpent = data.human_total_time_spent;\n  }\n\n  setFetchingState(key, value) {\n    this.isFetching[key] = value;\n  }\n\n  setLoadingState(key, value) {\n    this.isLoading[key] = value;\n  }\n\n  addAssignee(assignee) {\n    if (!this.findAssignee(assignee)) {\n      this.changing = true;\n      this.assignees.push(assignee);\n    }\n  }\n\n  addReviewer(reviewer) {\n    if (!this.findReviewer(reviewer)) {\n      this.reviewers.push(reviewer);\n    }\n  }\n\n  updateAssignee(id, stateKey) {\n    const assignee = this.findAssignee({ id });\n\n    if (assignee) {\n      assignee[stateKey] = !assignee[stateKey];\n    }\n  }\n\n  updateReviewer(id, stateKey) {\n    const reviewer = this.findReviewer({ id });\n\n    if (reviewer) {\n      reviewer[stateKey] = !reviewer[stateKey];\n    }\n  }\n\n  overwrite(key, newData) {\n    this[key] = newData;\n  }\n\n  findAssignee(findAssignee) {\n    return this.assignees.find(({ id }) => id === findAssignee.id);\n  }\n\n  findReviewer(findReviewer) {\n    return this.reviewers.find(({ id }) => id === findReviewer.id);\n  }\n\n  removeAssignee(assignee) {\n    if (assignee) {\n      this.changing = true;\n      this.assignees = this.assignees.filter(({ id }) => id !== assignee.id);\n    }\n  }\n\n  removeReviewer(reviewer) {\n    if (reviewer) {\n      this.reviewers = this.reviewers.filter(({ id }) => id !== reviewer.id);\n    }\n  }\n\n  removeAllAssignees() {\n    this.changing = true;\n    this.assignees = [];\n  }\n\n  removeAllReviewers() {\n    this.reviewers = [];\n  }\n\n  setAssigneesFromRealtime(data) {\n    this.assignees = data;\n  }\n\n  setReviewersFromRealtime(data) {\n    this.reviewers = data;\n  }\n\n  setAutocompleteProjects(projects) {\n    this.autocompleteProjects = projects;\n  }\n\n  setSubscribedState(subscribed) {\n    this.subscribed = subscribed;\n  }\n\n  setMoveToProjectId(moveToProjectId) {\n    this.moveToProjectId = moveToProjectId;\n  }\n}\n","/**\n * Regexp utility for the convenience of working with regular expressions.\n */\n\n// Inspired by https://github.com/mishoo/UglifyJS/blob/2bc1d02363db3798d5df41fb5059a19edca9b7eb/lib/parse-js.js#L203\n// Unicode 6.1\nexport const unicodeLetters =\n  '\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u0527\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0\\\\u08A2-\\\\u08AC\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0977\\\\u0979-\\\\u097F\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C33\\\\u0C35-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F0\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191C\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA697\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA793\\\\uA7A0-\\\\uA7AA\\\\uA7F8-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA80-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC';\n\nexport const semverRegex =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\nexport const noSpacesRegex = /^\\S+$/;\n\n/**\n * Checks if a string contains potential regular expression elements.\n *\n * @param {string} str - The string to check for potential regex elements.\n * @returns {boolean} - Returns true if the string contains regex elements, otherwise false.\n */\n\nexport const containsPotentialRegex = (str) => {\n  const regexPattern = /[*+?^${}()|[\\]\\\\]/;\n  return regexPattern.test(str);\n};\n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"projectAutocompleteUsersSearchWithMRPermissions\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"search\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"ID\"}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestId\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"MergeRequestID\"}}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"alias\":{\"kind\":\"Name\",\"value\":\"workspace\"},\"name\":{\"kind\":\"Name\",\"value\":\"project\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"alias\":{\"kind\":\"Name\",\"value\":\"users\"},\"name\":{\"kind\":\"Name\",\"value\":\"autocompleteUsers\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"search\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"search\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"User\"},\"directives\":[]},{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"UserAvailability\"},\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestInteraction\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestId\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"canMerge\"},\"arguments\":[],\"directives\":[]}]}}]}}]}}]}}],\"loc\":{\"start\":0,\"end\":477}};\n    doc.loc.source = {\"body\":\"#import \\\"../fragments/user.fragment.graphql\\\"\\n#import \\\"~/graphql_shared/fragments/user_availability.fragment.graphql\\\"\\n\\nquery projectAutocompleteUsersSearchWithMRPermissions(\\n  $search: String!\\n  $fullPath: ID!\\n  $mergeRequestId: MergeRequestID!\\n) {\\n  workspace: project(fullPath: $fullPath) {\\n    id\\n    users: autocompleteUsers(search: $search) {\\n      ...User\\n      ...UserAvailability\\n      mergeRequestInteraction(id: $mergeRequestId) {\\n        canMerge\\n      }\\n    }\\n  }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  doc.definitions = doc.definitions.concat(unique(require(\"../fragments/user.fragment.graphql\").definitions));\ndoc.definitions = doc.definitions.concat(unique(require(\"~/graphql_shared/fragments/user_availability.fragment.graphql\").definitions));\n\n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set();\n\n      // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n      opRefs.forEach(function(refName) {\n        newRefs.add(refName);\n      });\n\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n    \n    module.exports = doc;\n    \n        module.exports[\"projectAutocompleteUsersSearchWithMRPermissions\"] = oneQuery(doc, \"projectAutocompleteUsersSearchWithMRPermissions\");\n        \n","import $ from 'jquery';\nimport GfmAutoComplete from 'ee_else_ce/gfm_auto_complete';\nimport { parseBoolean } from '~/lib/utils/common_utils';\n\nexport default function initGFMInput($els) {\n  $els.each((i, el) => {\n    const gfm = new GfmAutoComplete(gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources);\n    const enableGFM = parseBoolean(el.dataset.supportsAutocomplete);\n\n    gfm.setup($(el), {\n      emojis: true,\n      members: enableGFM,\n      issues: enableGFM,\n      iterations: enableGFM,\n      milestones: enableGFM,\n      mergeRequests: enableGFM,\n      labels: enableGFM,\n      vulnerabilities: enableGFM,\n    });\n  });\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.userPermissions.adminMergeRequest)?_c('update-reviewers',{attrs:{\"selected-reviewers\":_vm.currentSelectedReviewers},scopedSlots:_vm._u([{key:\"default\",fn:function({ loading, updateReviewers }){return [_c('gl-collapsible-listbox',{staticClass:\"reviewers-dropdown\",attrs:{\"header-text\":_vm.$options.i18n.selectReviewer,\"reset-button-label\":_vm.$options.i18n.unassign,\"searchable\":\"\",\"multiple\":\"\",\"placement\":\"bottom-end\",\"is-check-centered\":\"\",\"items\":_vm.mappedUsers,\"loading\":loading,\"searching\":_vm.searching},on:{\"search\":_vm.debouncedFetchAutocompleteUsers,\"shown\":_vm.shownDropdown,\"hidden\":updateReviewers,\"reset\":_vm.removeAllReviewers},scopedSlots:_vm._u([{key:\"toggle\",fn:function(){return [_c('gl-button',{staticClass:\"js-sidebar-dropdown-toggle *:!gl-text-default\",attrs:{\"size\":\"small\",\"category\":\"tertiary\",\"loading\":loading,\"data-track-action\":\"click_edit_button\",\"data-track-label\":\"right_sidebar\",\"data-track-property\":\"reviewer\",\"data-testid\":\"reviewers-edit-button\"}},[_vm._v(\"\\n          \"+_vm._s(_vm.__('Edit'))+\"\\n        \")])]},proxy:true},{key:\"list-item\",fn:function({ item }){return [_c('span',{staticClass:\"gl-flex gl-items-center\"},[_c('div',{staticClass:\"gl-relative gl-mr-3\"},[_c('gl-avatar',{attrs:{\"size\":32,\"src\":item.avatarUrl,\"entity-name\":item.value}}),_vm._v(\" \"),(item.mergeRequestInteraction && !item.mergeRequestInteraction.canMerge)?_c('gl-icon',{staticClass:\"reviewer-merge-icon\",attrs:{\"name\":\"warning-solid\",\"aria-hidden\":\"true\"}}):_vm._e()],1),_vm._v(\" \"),_c('span',{staticClass:\"gl-flex gl-flex-col\"},[_c('span',{staticClass:\"gl-whitespace-nowrap gl-font-bold\"},[_vm._v(_vm._s(item.text))]),_vm._v(\" \"),_c('span',{staticClass:\"gl-text-subtle\"},[_vm._v(\" \"+_vm._s(item.secondaryText))])])])]}},(_vm.directlyInviteMembers)?{key:\"footer\",fn:function(){return [_c('div',{staticClass:\"gl-flex gl-flex-col gl-border-t-1 gl-border-t-dropdown !gl-p-2 !gl-pt-0 gl-border-t-solid\"},[_c('invite-members-trigger',{staticClass:\"!gl-mt-2 !gl-justify-start\",attrs:{\"trigger-element\":\"button\",\"display-text\":_vm.__('Invite members'),\"trigger-source\":\"merge_request_reviewers_dropdown\",\"category\":\"tertiary\",\"block\":\"\"}})],1)]},proxy:true}:null],null,true),model:{value:(_vm.currentSelectedReviewers),callback:function ($$v) {_vm.currentSelectedReviewers=$$v},expression:\"currentSelectedReviewers\"}})]}}],null,false,1187136036)}):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./update_reviewers.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./update_reviewers.vue?vue&type=script&lang=js\"","<script>\nimport setReviewersMutation from './queries/set_reviewers.mutation.graphql';\n\nexport default {\n  inject: ['projectPath', 'issuableIid'],\n  props: {\n    selectedReviewers: {\n      type: Array,\n      required: true,\n    },\n  },\n  data() {\n    return {\n      loading: false,\n    };\n  },\n  methods: {\n    async updateReviewers() {\n      this.loading = true;\n\n      await this.$apollo.mutate({\n        mutation: setReviewersMutation,\n        variables: {\n          reviewerUsernames: this.selectedReviewers,\n          projectPath: this.projectPath,\n          iid: this.issuableIid,\n        },\n      });\n\n      this.loading = false;\n    },\n  },\n  render() {\n    return this.$scopedSlots.default({\n      loading: this.loading,\n      updateReviewers: this.updateReviewers,\n    });\n  },\n};\n</script>\n","var render, staticRenderFns\nimport script from \"./update_reviewers.vue?vue&type=script&lang=js\"\nexport * from \"./update_reviewers.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_dropdown.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./reviewer_dropdown.vue?vue&type=script&lang=js\"","<script>\nimport { debounce } from 'lodash';\nimport { GlCollapsibleListbox, GlButton, GlAvatar, GlIcon } from '@gitlab/ui';\nimport { __ } from '~/locale';\nimport { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';\nimport { TYPENAME_MERGE_REQUEST } from '~/graphql_shared/constants';\nimport { convertToGraphQLId } from '~/graphql_shared/utils';\nimport userAutocompleteWithMRPermissionsQuery from '~/graphql_shared/queries/project_autocomplete_users_with_mr_permissions.query.graphql';\nimport InviteMembersTrigger from '~/invite_members/components/invite_members_trigger.vue';\nimport UpdateReviewers from './update_reviewers.vue';\nimport userPermissionsQuery from './queries/user_permissions.query.graphql';\n\nexport default {\n  apollo: {\n    userPermissions: {\n      query: userPermissionsQuery,\n      variables() {\n        return {\n          fullPath: this.projectPath,\n          iid: this.issuableIid,\n        };\n      },\n      update: (data) => data.project?.mergeRequest?.userPermissions || {},\n    },\n  },\n  components: {\n    GlCollapsibleListbox,\n    GlButton,\n    GlAvatar,\n    GlIcon,\n    UpdateReviewers,\n    InviteMembersTrigger,\n  },\n  inject: ['projectPath', 'issuableId', 'issuableIid', 'directlyInviteMembers'],\n  props: {\n    users: {\n      type: Array,\n      required: false,\n      default: () => [],\n    },\n    selectedReviewers: {\n      type: Array,\n      required: false,\n      default: () => [],\n    },\n    visibleReviewers: {\n      type: Array,\n      required: false,\n      default: () => [],\n    },\n  },\n  data() {\n    return {\n      search: '',\n      searching: false,\n      fetchedUsers: [],\n      currentSelectedReviewers: this.selectedReviewers.map((r) => r.username),\n      userPermissions: {},\n    };\n  },\n  computed: {\n    mappedUsers() {\n      const items = [];\n      let users;\n\n      if (this.selectedReviewersToShow.length && !this.search) {\n        items.push({\n          text: __('Reviewers'),\n          options: this.selectedReviewersToShow.map((user) => this.mapUser(user)),\n        });\n      }\n\n      if (this.fetchedUsers.length) {\n        users = this.fetchedUsers;\n      } else {\n        users = this.users;\n      }\n\n      items.push({\n        textSrOnly: true,\n        text: __('Users'),\n        options: users\n          .filter((u) =>\n            this.search ? true : !this.selectedReviewers.find(({ id }) => u.id === id),\n          )\n          .map((user) => this.mapUser(user)),\n      });\n\n      return items;\n    },\n    selectedReviewersToShow() {\n      return this.selectedReviewers.filter((user) =>\n        this.visibleReviewers.map((gqlUser) => gqlUser.id).includes(user.id),\n      );\n    },\n  },\n  watch: {\n    selectedReviewers(newVal) {\n      this.currentSelectedReviewers = newVal.map((r) => r.username);\n    },\n  },\n  created() {\n    this.debouncedFetchAutocompleteUsers = debounce(\n      (search) => this.fetchAutocompleteUsers(search),\n      DEFAULT_DEBOUNCE_AND_THROTTLE_MS,\n    );\n  },\n  methods: {\n    mapUser(user) {\n      return {\n        value: user.username,\n        text: user.name,\n        secondaryText: `@${user.username}`,\n        ...user,\n      };\n    },\n    shownDropdown() {\n      if (!this.users.length && !this.fetchedUsers.length) {\n        this.fetchAutocompleteUsers();\n      }\n    },\n    async fetchAutocompleteUsers(search = '') {\n      this.search = search;\n      this.searching = true;\n\n      const {\n        data: {\n          workspace: { users = [] },\n        },\n      } = await this.$apollo.query({\n        query: userAutocompleteWithMRPermissionsQuery,\n        variables: {\n          search,\n          fullPath: this.projectPath,\n          mergeRequestId: convertToGraphQLId(TYPENAME_MERGE_REQUEST, this.issuableId),\n        },\n      });\n\n      this.fetchedUsers = users;\n      this.searching = false;\n    },\n    removeAllReviewers() {\n      this.currentSelectedReviewers = [];\n    },\n  },\n  i18n: {\n    selectReviewer: __('Select reviewer'),\n    unassign: __('Unassign'),\n  },\n};\n</script>\n\n<template>\n  <update-reviewers\n    v-if=\"userPermissions.adminMergeRequest\"\n    :selected-reviewers=\"currentSelectedReviewers\"\n  >\n    <template #default=\"{ loading, updateReviewers }\">\n      <gl-collapsible-listbox\n        v-model=\"currentSelectedReviewers\"\n        :header-text=\"$options.i18n.selectReviewer\"\n        :reset-button-label=\"$options.i18n.unassign\"\n        searchable\n        multiple\n        placement=\"bottom-end\"\n        is-check-centered\n        class=\"reviewers-dropdown\"\n        :items=\"mappedUsers\"\n        :loading=\"loading\"\n        :searching=\"searching\"\n        @search=\"debouncedFetchAutocompleteUsers\"\n        @shown=\"shownDropdown\"\n        @hidden=\"updateReviewers\"\n        @reset=\"removeAllReviewers\"\n      >\n        <template #toggle>\n          <gl-button\n            class=\"js-sidebar-dropdown-toggle *:!gl-text-default\"\n            size=\"small\"\n            category=\"tertiary\"\n            :loading=\"loading\"\n            data-track-action=\"click_edit_button\"\n            data-track-label=\"right_sidebar\"\n            data-track-property=\"reviewer\"\n            data-testid=\"reviewers-edit-button\"\n          >\n            {{ __('Edit') }}\n          </gl-button>\n        </template>\n        <template #list-item=\"{ item }\">\n          <span class=\"gl-flex gl-items-center\">\n            <div class=\"gl-relative gl-mr-3\">\n              <gl-avatar :size=\"32\" :src=\"item.avatarUrl\" :entity-name=\"item.value\" />\n              <gl-icon\n                v-if=\"item.mergeRequestInteraction && !item.mergeRequestInteraction.canMerge\"\n                name=\"warning-solid\"\n                aria-hidden=\"true\"\n                class=\"reviewer-merge-icon\"\n              />\n            </div>\n            <span class=\"gl-flex gl-flex-col\">\n              <span class=\"gl-whitespace-nowrap gl-font-bold\">{{ item.text }}</span>\n              <span class=\"gl-text-subtle\"> {{ item.secondaryText }}</span>\n            </span>\n          </span>\n        </template>\n\n        <template v-if=\"directlyInviteMembers\" #footer>\n          <div\n            class=\"gl-flex gl-flex-col gl-border-t-1 gl-border-t-dropdown !gl-p-2 !gl-pt-0 gl-border-t-solid\"\n          >\n            <invite-members-trigger\n              trigger-element=\"button\"\n              :display-text=\"__('Invite members')\"\n              trigger-source=\"merge_request_reviewers_dropdown\"\n              category=\"tertiary\"\n              block\n              class=\"!gl-mt-2 !gl-justify-start\"\n            />\n          </div>\n        </template>\n      </gl-collapsible-listbox>\n    </template>\n  </update-reviewers>\n</template>\n","import { render, staticRenderFns } from \"./reviewer_dropdown.vue?vue&type=template&id=0401e65a\"\nimport script from \"./reviewer_dropdown.vue?vue&type=script&lang=js\"\nexport * from \"./reviewer_dropdown.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import Vue from 'vue';\n\n/**\n * Returns the root element of the given Vue component.\n *\n * This should *only* be used in existing legacy areas of code where Vue is not\n * in use. For example, as part of the migration strategy defined in\n * https://gitlab.com/groups/gitlab-org/-/epics/7626.\n *\n * @param {Object} Component - The Vue component to render.\n * @param {Object} data - The data object to pass to the render function.\n * @param {string|Array} children - The children to render in the default slot\n *     of the component.\n * @returns {HTMLElement}\n */\nexport const renderVueComponentForLegacyJS = (Component, data, children) => {\n  const vm = new Vue({\n    render(h) {\n      return h(Component, data, children);\n    },\n  });\n\n  vm.$mount();\n\n  // Ensure it's rendered\n  vm.$forceUpdate();\n\n  const el = vm.$el.cloneNode(true);\n  vm.$destroy();\n\n  return el;\n};\n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"addReviewerPermissions\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"ID\"}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"project\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequest\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"userPermissions\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"adminMergeRequest\"},\"arguments\":[],\"directives\":[]}]}}]}}]}}]}}],\"loc\":{\"start\":0,\"end\":211}};\n    doc.loc.source = {\"body\":\"query addReviewerPermissions($fullPath: ID!, $iid: String!) {\\n  project(fullPath: $fullPath) {\\n    id\\n    mergeRequest(iid: $iid) {\\n      id\\n      userPermissions {\\n        adminMergeRequest\\n      }\\n    }\\n  }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set();\n\n      // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n      opRefs.forEach(function(refName) {\n        newRefs.add(refName);\n      });\n\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n    \n    module.exports = doc;\n    \n        module.exports[\"addReviewerPermissions\"] = oneQuery(doc, \"addReviewerPermissions\");\n        \n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"mutation\",\"name\":{\"kind\":\"Name\",\"value\":\"setReviewers\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"projectPath\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"ID\"}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"reviewerUsernames\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"ListType\",\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestSetReviewers\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"input\"},\"value\":{\"kind\":\"ObjectValue\",\"fields\":[{\"kind\":\"ObjectField\",\"name\":{\"kind\":\"Name\",\"value\":\"projectPath\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"projectPath\"}}},{\"kind\":\"ObjectField\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"iid\"}}},{\"kind\":\"ObjectField\",\"name\":{\"kind\":\"Name\",\"value\":\"reviewerUsernames\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"reviewerUsernames\"}}}]}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"errors\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":232}};\n    doc.loc.source = {\"body\":\"mutation setReviewers($projectPath: ID!, $iid: String!, $reviewerUsernames: [String!]!) {\\n  mergeRequestSetReviewers(\\n    input: { projectPath: $projectPath, iid: $iid, reviewerUsernames: $reviewerUsernames }\\n  ) {\\n    errors\\n  }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set();\n\n      // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n      opRefs.forEach(function(refName) {\n        newRefs.add(refName);\n      });\n\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n    \n    module.exports = doc;\n    \n        module.exports[\"setReviewers\"] = oneQuery(doc, \"setReviewers\");\n        \n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"subscription\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestReviewersUpdated\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"issuableId\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"IssuableID\"}}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestReviewersUpdated\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"issuableId\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"issuableId\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"InlineFragment\",\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"MergeRequest\"}},\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"reviewers\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"nodes\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"User\"},\"directives\":[]},{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"UserAvailability\"},\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"mergeRequestInteraction\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"canMerge\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"canUpdate\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"approved\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"reviewState\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"ReviewersApplicableApprovalRules\"},\"directives\":[]}]}}]}}]}}]}}]}}]}}],\"loc\":{\"start\":0,\"end\":681}};\n    doc.loc.source = {\"body\":\"#import \\\"~/graphql_shared/fragments/user.fragment.graphql\\\"\\n#import \\\"~/graphql_shared/fragments/user_availability.fragment.graphql\\\"\\n#import \\\"ee_else_ce/sidebar/queries/reviewer_applicable_approval_rules.fragment.graphql\\\"\\n\\nsubscription mergeRequestReviewersUpdated($issuableId: IssuableID!) {\\n  mergeRequestReviewersUpdated(issuableId: $issuableId) {\\n    ... on MergeRequest {\\n      id\\n      reviewers {\\n        nodes {\\n          ...User\\n          ...UserAvailability\\n          mergeRequestInteraction {\\n            canMerge\\n            canUpdate\\n            approved\\n            reviewState\\n\\n            ...ReviewersApplicableApprovalRules\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  doc.definitions = doc.definitions.concat(unique(require(\"~/graphql_shared/fragments/user.fragment.graphql\").definitions));\ndoc.definitions = doc.definitions.concat(unique(require(\"~/graphql_shared/fragments/user_availability.fragment.graphql\").definitions));\ndoc.definitions = doc.definitions.concat(unique(require(\"ee_else_ce/sidebar/queries/reviewer_applicable_approval_rules.fragment.graphql\").definitions));\n\n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set();\n\n      // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n      opRefs.forEach(function(refName) {\n        newRefs.add(refName);\n      });\n\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n    \n    module.exports = doc;\n    \n        module.exports[\"mergeRequestReviewersUpdated\"] = oneQuery(doc, \"mergeRequestReviewersUpdated\");\n        \n","import 'jquery';\nimport 'jquery.caret'; // required by at.js\nimport '@gitlab/at.js';\n","import { GlToast } from '@gitlab/ui';\nimport Vue from 'vue';\n\nVue.use(GlToast);\nconst instance = new Vue();\n\nexport default function showGlobalToast(...args) {\n  return instance.$toast.show(...args);\n}\n","import $ from 'jquery';\nimport { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';\nimport '~/lib/utils/jquery_at_who';\nimport GfmAutoComplete, { showAndHideHelper, escape, setupSubcommands } from '~/gfm_auto_complete';\nimport { s__ } from '~/locale';\nimport { MERGE_REQUEST_NOTEABLE_TYPE } from '~/notes/constants';\n\n/**\n * This is added to keep the export parity with the CE counterpart.\n *\n * Some modules import `defaultAutocompleteConfig` or `membersBeforeSave`\n * which will be undefined if not exported from here in EE.\n */\nexport {\n  escape,\n  defaultAutocompleteConfig,\n  membersBeforeSave,\n  highlighter,\n  CONTACT_STATE_ACTIVE,\n  CONTACTS_ADD_COMMAND,\n  CONTACTS_REMOVE_COMMAND,\n} from '~/gfm_auto_complete';\n\nconst EPICS_ALIAS = 'epics';\nconst ITERATIONS_ALIAS = 'iterations';\nconst VULNERABILITIES_ALIAS = 'vulnerabilities';\n\nexport const Q_ISSUE_SUB_COMMANDS = {\n  dev: {\n    header: s__('AmazonQ|dev'),\n    description: s__('AmazonQ|Create a merge request to incorporate Amazon Q suggestions (Beta)'),\n  },\n  transform: {\n    header: s__('AmazonQ|transform'),\n    description: s__('AmazonQ|Upgrade Java Maven application to Java 17 (Beta)'),\n  },\n};\n\nexport const Q_MERGE_REQUEST_SUB_COMMANDS = {\n  dev: {\n    header: s__('AmazonQ|dev'),\n    description: s__('AmazonQ|Apply changes to this merge request based on the comments (Beta)'),\n  },\n  fix: {\n    header: s__('AmazonQ|fix'),\n    description: s__('AmazonQ|Create fixes for review findings (Beta)'),\n  },\n  review: {\n    header: s__('AmazonQ|review'),\n    description: s__('AmazonQ|Review merge request for code quality and security issues (Beta)'),\n  },\n};\n\nexport const Q_MERGE_REQUEST_CAN_SUGGEST_SUB_COMMANDS = {\n  test: {\n    header: s__('AmazonQ|test'),\n    description: s__(\n      'AmazonQ|Create unit tests for selected lines of code in Java or Python files (Beta)',\n    ),\n  },\n};\n\nconst getQSubCommands = ($input) => {\n  if ($input.data('noteableType') === MERGE_REQUEST_NOTEABLE_TYPE) {\n    const canSuggest = $input.data('canSuggest');\n\n    return {\n      ...Q_MERGE_REQUEST_SUB_COMMANDS,\n      ...(canSuggest ? Q_MERGE_REQUEST_CAN_SUGGEST_SUB_COMMANDS : {}),\n    };\n  }\n\n  return Q_ISSUE_SUB_COMMANDS;\n};\n\nGfmAutoComplete.Iterations = {\n  templateFunction({ id, title }) {\n    return `<li><small>*iteration:${id}</small> ${escape(title)}</li>`;\n  },\n};\n\nclass GfmAutoCompleteEE extends GfmAutoComplete {\n  setupAtWho($input) {\n    if (this.enableMap.epics) {\n      this.setupAutoCompleteEpics($input, this.getDefaultCallbacks());\n    }\n\n    if (this.enableMap.iterations) {\n      this.setupAutoCompleteIterations($input, this.getDefaultCallbacks());\n    }\n\n    if (this.enableMap.vulnerabilities) {\n      this.setupAutoCompleteVulnerabilities($input, this.getDefaultCallbacks());\n    }\n\n    super.setupAtWho($input);\n  }\n\n  loadSubcommands($input, data) {\n    if (data.some((c) => c.name === 'q')) {\n      setupSubcommands($input, 'q', getQSubCommands($input));\n    }\n\n    super.loadSubcommands($input, data);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  setupAutoCompleteEpics = ($input, defaultCallbacks) => {\n    $input.atwho({\n      at: '&',\n      alias: EPICS_ALIAS,\n      searchKey: 'search',\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        if (value.title != null) {\n          tmpl = GfmAutoComplete.Issues.templateFunction(value);\n        }\n        return tmpl;\n      },\n      data: GfmAutoComplete.defaultLoadingData,\n      insertTpl: GfmAutoComplete.Issues.insertTemplateFunction,\n      skipSpecialCharacterTest: true,\n      callbacks: {\n        ...defaultCallbacks,\n        beforeSave(merges) {\n          return $.map(merges, (m) => {\n            if (m.title == null) {\n              return m;\n            }\n            return {\n              id: m.iid,\n              reference: m.reference,\n              title: m.title,\n              search: `${m.iid} ${m.title}`,\n            };\n          });\n        },\n      },\n    });\n    showAndHideHelper($input, EPICS_ALIAS);\n  };\n\n  // eslint-disable-next-line class-methods-use-this\n  setupAutoCompleteIterations = ($input, defaultCallbacks) => {\n    $input.atwho({\n      at: '*iteration:',\n      alias: ITERATIONS_ALIAS,\n      searchKey: 'search',\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        if (value.id != null) {\n          tmpl = GfmAutoComplete.Iterations.templateFunction(value);\n        }\n        return tmpl;\n      },\n      data: GfmAutoComplete.defaultLoadingData,\n      // eslint-disable-next-line no-template-curly-in-string\n      insertTpl: '${atwho-at}${id}',\n      skipSpecialCharacterTest: true,\n      callbacks: {\n        ...defaultCallbacks,\n        beforeSave(merges) {\n          return $.map(merges, (m) => {\n            if (m.id == null) {\n              return m;\n            }\n\n            return {\n              id: m.id,\n              title: m.title,\n              search: `${m.id} ${m.title}`,\n            };\n          });\n        },\n      },\n    });\n    showAndHideHelper($input, ITERATIONS_ALIAS);\n  };\n\n  // eslint-disable-next-line class-methods-use-this\n  setupAutoCompleteVulnerabilities = ($input, defaultCallbacks) => {\n    $input.atwho({\n      at: '[vulnerability:',\n      suffix: ']',\n      alias: VULNERABILITIES_ALIAS,\n      delay: DEFAULT_DEBOUNCE_AND_THROTTLE_MS,\n      searchKey: 'search',\n      displayTpl(value) {\n        let tmpl = GfmAutoComplete.Loading.template;\n        if (value.title != null) {\n          tmpl = GfmAutoComplete.Issues.templateFunction(value);\n        }\n        return tmpl;\n      },\n      data: GfmAutoComplete.defaultLoadingData,\n      insertTpl: GfmAutoComplete.Issues.insertTemplateFunction,\n      skipSpecialCharacterTest: true,\n      callbacks: {\n        ...defaultCallbacks,\n        beforeSave(merges) {\n          return merges.map((m) => {\n            if (m.title == null) {\n              return m;\n            }\n            return {\n              id: m.id,\n              title: m.title,\n              reference: m.reference,\n              search: `${m.id} ${m.title}`,\n            };\n          });\n        },\n      },\n    });\n    showAndHideHelper($input, VULNERABILITIES_ALIAS);\n  };\n}\n\nexport default GfmAutoCompleteEE;\n","import { TYPENAME_USER } from '~/graphql_shared/constants';\nimport { convertToGraphQLId } from '~/graphql_shared/utils';\nimport createGqClient, { fetchPolicies } from '~/lib/graphql';\nimport axios from '~/lib/utils/axios_utils';\nimport reviewerRereviewMutation from '../queries/reviewer_rereview.mutation.graphql';\n\nexport const gqClient = createGqClient(\n  {},\n  {\n    fetchPolicy: fetchPolicies.NO_CACHE,\n  },\n);\n\nexport default class SidebarService {\n  constructor(endpointMap) {\n    if (!SidebarService.singleton) {\n      this.endpoint = endpointMap.endpoint;\n      this.moveIssueEndpoint = endpointMap.moveIssueEndpoint;\n      this.projectsAutocompleteEndpoint = endpointMap.projectsAutocompleteEndpoint;\n      this.fullPath = endpointMap.fullPath;\n      this.iid = endpointMap.iid;\n      this.issuableType = endpointMap.issuableType;\n\n      SidebarService.singleton = this;\n    }\n\n    // eslint-disable-next-line no-constructor-return\n    return SidebarService.singleton;\n  }\n\n  get() {\n    return axios.get(this.endpoint);\n  }\n\n  update(key, data) {\n    return axios.put(this.endpoint, { [key]: data });\n  }\n\n  getProjectsAutocomplete(searchTerm) {\n    return axios.get(this.projectsAutocompleteEndpoint, {\n      params: {\n        search: searchTerm,\n      },\n    });\n  }\n\n  moveIssue(moveToProjectId) {\n    return axios.post(this.moveIssueEndpoint, {\n      move_to_project_id: moveToProjectId,\n    });\n  }\n\n  requestReview(userId) {\n    return gqClient.mutate({\n      mutation: reviewerRereviewMutation,\n      variables: {\n        userId: convertToGraphQLId(TYPENAME_USER, `${userId}`),\n        projectPath: this.fullPath,\n        iid: this.iid.toString(),\n      },\n    });\n  }\n}\n","import { createAlert } from '~/alert';\nimport { __ } from '~/locale';\nimport toast from '~/vue_shared/plugins/global_toast';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport Service from './services/sidebar_service';\nimport Store from './stores/sidebar_store';\n\nexport default class SidebarMediator {\n  constructor(options) {\n    if (!SidebarMediator.singleton) {\n      this.initSingleton(options);\n    }\n\n    // eslint-disable-next-line no-constructor-return\n    return SidebarMediator.singleton;\n  }\n\n  initSingleton(options) {\n    this.store = new Store(options);\n    this.service = new Service({\n      endpoint: options.endpoint,\n      moveIssueEndpoint: options.moveIssueEndpoint,\n      projectsAutocompleteEndpoint: options.projectsAutocompleteEndpoint,\n      fullPath: options.fullPath,\n      iid: options.iid,\n      issuableType: options.issuableType,\n    });\n    SidebarMediator.singleton = this;\n  }\n\n  assignYourself() {\n    this.store.addAssignee(this.store.currentUser);\n  }\n  addSelfReview() {\n    this.store.addReviewer(this.store.currentUser);\n  }\n\n  async saveAssignees(field) {\n    const selected = this.store.assignees.map((u) => u.id);\n\n    // If there are no ids, that means we have to unassign (which is id = 0)\n    // And it only accepts an array, hence [0]\n    const assignees = selected.length === 0 ? [0] : selected;\n    const data = { assignee_ids: assignees };\n\n    try {\n      const res = await this.service.update(field, data);\n\n      this.store.overwrite('assignees', res.data.assignees);\n\n      if (res.data.reviewers) {\n        this.store.overwrite('reviewers', res.data.reviewers);\n      }\n\n      return Promise.resolve(res);\n    } catch (e) {\n      return Promise.reject(e);\n    }\n  }\n\n  async saveReviewers(field) {\n    const selectedReviewers = this.store.reviewers;\n    const selectedIds = selectedReviewers.map((u) => u.id);\n    const suggestedSelectedIds = selectedReviewers.filter((u) => u.suggested).map((u) => u.id);\n\n    // If there are no ids, that means we have to unassign (which is id = 0)\n    // And it only accepts an array, hence [0]\n    const reviewers = selectedIds.length === 0 ? [0] : selectedIds;\n    const data = { reviewer_ids: reviewers, suggested_reviewer_ids: suggestedSelectedIds };\n\n    try {\n      const res = await this.service.update(field, data);\n\n      this.store.overwrite('reviewers', res.data.reviewers);\n      this.store.overwrite('assignees', res.data.assignees);\n\n      return Promise.resolve(res);\n    } catch (e) {\n      return Promise.reject();\n    }\n  }\n\n  requestReview({ userId, callback }) {\n    return this.service\n      .requestReview(userId)\n      .then(() => {\n        this.store.updateReviewer(userId, 'reviewed');\n        toast(__('Requested review'));\n        callback(userId, true);\n      })\n      .catch(() => callback(userId, false));\n  }\n\n  setMoveToProjectId(projectId) {\n    this.store.setMoveToProjectId(projectId);\n  }\n\n  fetch() {\n    return this.service\n      .get()\n      .then(({ data }) => {\n        this.processFetchedData(data);\n      })\n      .catch(() =>\n        createAlert({\n          message: __('Error occurred when fetching sidebar data'),\n        }),\n      );\n  }\n\n  processFetchedData(data) {\n    this.store.setAssigneeData(data);\n    this.store.setReviewerData(data);\n    this.store.setTimeTrackingData(data);\n  }\n\n  fetchAutocompleteProjects(searchTerm) {\n    return this.service.getProjectsAutocomplete(searchTerm).then(({ data }) => {\n      this.store.setAutocompleteProjects(data);\n      return this.store.autocompleteProjects;\n    });\n  }\n\n  moveIssue() {\n    return this.service.moveIssue(this.store.moveToProjectId).then(({ data }) => {\n      if (window.location.pathname !== data.web_url) {\n        visitUrl(data.web_url);\n      }\n    });\n  }\n}\n"],"sourceRoot":""}