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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-10-27 15:11:10 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-10-27 15:11:10 +0300
commit71329edee6b7c2af838e07189dfeef8a41cd66ec (patch)
tree53965603a181b9f85beb6d1d2b3aeb80c81680e3 /app
parent563240e444eab70551083c6114fc0726df412e52 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/admin/abuse_report/components/graphql/abuse_report.query.graphql13
-rw-r--r--app/assets/javascripts/admin/abuse_report/components/labels_select.vue2
-rw-r--r--app/assets/javascripts/admin/abuse_report/components/report_details.vue2
-rw-r--r--app/assets/javascripts/admin/abuse_report/graphql/abuse_report.query.graphql29
-rw-r--r--app/assets/javascripts/admin/abuse_report/graphql/abuse_report_labels.query.graphql (renamed from app/assets/javascripts/admin/abuse_report/components/graphql/abuse_report_labels.query.graphql)0
-rw-r--r--app/assets/javascripts/admin/abuse_report/graphql/create_abuse_report_label.mutation.graphql (renamed from app/assets/javascripts/admin/abuse_report/components/graphql/create_abuse_report_label.mutation.graphql)0
-rw-r--r--app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_discussion_resolved_status.fragment.graphql11
-rw-r--r--app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_note.fragment.graphql24
-rw-r--r--app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_note_permissions.fragment.graphql3
-rw-r--r--app/assets/javascripts/admin/abuse_report/graphql/notes/create_abuse_report_note.mutation.graphql18
-rw-r--r--app/assets/javascripts/admin/abuse_report/graphql/notes/delete_abuse_report_note.fragment.graphql8
-rw-r--r--app/assets/javascripts/admin/abuse_report/graphql/notes/update_abuse_report_note.mutation.graphql10
-rw-r--r--app/assets/javascripts/graphql_shared/possible_types.json1
-rw-r--r--app/assets/javascripts/members/components/table/role_dropdown.vue68
-rw-r--r--app/assets/javascripts/members/store/actions.js5
-rw-r--r--app/assets/javascripts/members/utils.js34
-rw-r--r--app/assets/javascripts/sidebar/queries/constants.js4
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/extensions/security_reports/mr_widget_security_reports.vue52
-rw-r--r--app/assets/stylesheets/startup/_cloaking.scss15
-rw-r--r--app/assets/stylesheets/startup/startup-dark.scss1928
-rw-r--r--app/assets/stylesheets/startup/startup-general.scss1781
-rw-r--r--app/assets/stylesheets/startup/startup-signin.scss852
-rw-r--r--app/controllers/projects/pipelines_controller.rb7
-rw-r--r--app/finders/packages/pypi/packages_finder.rb11
-rw-r--r--app/graphql/mutations/ci/pipeline/cancel.rb2
-rw-r--r--app/graphql/types/abuse_report_type.rb9
-rw-r--r--app/graphql/types/notes/noteable_interface.rb2
-rw-r--r--app/graphql/types/permission_types/abuse_report.rb11
-rw-r--r--app/models/abuse_report.rb16
-rw-r--r--app/models/ci/catalog/components_project.rb5
-rw-r--r--app/policies/abuse_report_policy.rb1
-rw-r--r--app/policies/ci/pipeline_policy.rb9
-rw-r--r--app/policies/project_policy.rb2
-rw-r--r--app/serializers/ci/pipeline_entity.rb2
-rw-r--r--app/services/ci/cancel_pipeline_service.rb2
-rw-r--r--app/services/ci/catalog/resources/validate_service.rb26
-rw-r--r--app/views/admin/application_settings/_usage.html.haml2
37 files changed, 283 insertions, 4684 deletions
diff --git a/app/assets/javascripts/admin/abuse_report/components/graphql/abuse_report.query.graphql b/app/assets/javascripts/admin/abuse_report/components/graphql/abuse_report.query.graphql
deleted file mode 100644
index f5b075cb9af..00000000000
--- a/app/assets/javascripts/admin/abuse_report/components/graphql/abuse_report.query.graphql
+++ /dev/null
@@ -1,13 +0,0 @@
-query abuseReportQuery($id: AbuseReportID!) {
- abuseReport(id: $id) {
- labels {
- nodes {
- id
- title
- description
- color
- textColor
- }
- }
- }
-}
diff --git a/app/assets/javascripts/admin/abuse_report/components/labels_select.vue b/app/assets/javascripts/admin/abuse_report/components/labels_select.vue
index 747c9a1a947..d2d143f0460 100644
--- a/app/assets/javascripts/admin/abuse_report/components/labels_select.vue
+++ b/app/assets/javascripts/admin/abuse_report/components/labels_select.vue
@@ -11,7 +11,7 @@ import DropdownContentsCreateView from '~/sidebar/components/labels/labels_selec
import DropdownHeader from '~/sidebar/components/labels/labels_select_widget/dropdown_header.vue';
import DropdownFooter from '~/sidebar/components/labels/labels_select_widget/dropdown_footer.vue';
import DropdownWidget from '~/vue_shared/components/dropdown/dropdown_widget/dropdown_widget.vue';
-import abuseReportLabelsQuery from './graphql/abuse_report_labels.query.graphql';
+import abuseReportLabelsQuery from '../graphql/abuse_report_labels.query.graphql';
export default {
components: {
diff --git a/app/assets/javascripts/admin/abuse_report/components/report_details.vue b/app/assets/javascripts/admin/abuse_report/components/report_details.vue
index 10e1dca7f91..89017e6cbd4 100644
--- a/app/assets/javascripts/admin/abuse_report/components/report_details.vue
+++ b/app/assets/javascripts/admin/abuse_report/components/report_details.vue
@@ -1,8 +1,8 @@
<script>
import { __ } from '~/locale';
import { createAlert } from '~/alert';
+import abuseReportQuery from '../graphql/abuse_report.query.graphql';
import LabelsSelect from './labels_select.vue';
-import abuseReportQuery from './graphql/abuse_report.query.graphql';
export default {
name: 'ReportDetails',
diff --git a/app/assets/javascripts/admin/abuse_report/graphql/abuse_report.query.graphql b/app/assets/javascripts/admin/abuse_report/graphql/abuse_report.query.graphql
new file mode 100644
index 00000000000..d864b44b39c
--- /dev/null
+++ b/app/assets/javascripts/admin/abuse_report/graphql/abuse_report.query.graphql
@@ -0,0 +1,29 @@
+#import "./notes/abuse_report_note.fragment.graphql"
+#import "./notes/abuse_report_discussion_resolved_status.fragment.graphql"
+
+query abuseReportQuery($id: AbuseReportID!) {
+ abuseReport(id: $id) {
+ id
+ labels {
+ nodes {
+ id
+ title
+ description
+ color
+ textColor
+ }
+ }
+ discussions {
+ nodes {
+ id
+ replyId
+ ...AbuseReportDiscussionResolvedStatus
+ notes {
+ nodes {
+ ...AbuseReportNote
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/app/assets/javascripts/admin/abuse_report/components/graphql/abuse_report_labels.query.graphql b/app/assets/javascripts/admin/abuse_report/graphql/abuse_report_labels.query.graphql
index 4e724b4db2c..4e724b4db2c 100644
--- a/app/assets/javascripts/admin/abuse_report/components/graphql/abuse_report_labels.query.graphql
+++ b/app/assets/javascripts/admin/abuse_report/graphql/abuse_report_labels.query.graphql
diff --git a/app/assets/javascripts/admin/abuse_report/components/graphql/create_abuse_report_label.mutation.graphql b/app/assets/javascripts/admin/abuse_report/graphql/create_abuse_report_label.mutation.graphql
index 0781b8e634b..0781b8e634b 100644
--- a/app/assets/javascripts/admin/abuse_report/components/graphql/create_abuse_report_label.mutation.graphql
+++ b/app/assets/javascripts/admin/abuse_report/graphql/create_abuse_report_label.mutation.graphql
diff --git a/app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_discussion_resolved_status.fragment.graphql b/app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_discussion_resolved_status.fragment.graphql
new file mode 100644
index 00000000000..5ca56c2ded2
--- /dev/null
+++ b/app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_discussion_resolved_status.fragment.graphql
@@ -0,0 +1,11 @@
+fragment AbuseReportDiscussionResolvedStatus on Discussion {
+ id
+ resolvable
+ resolved
+ resolvedAt
+ resolvedBy {
+ id
+ name
+ webUrl
+ }
+}
diff --git a/app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_note.fragment.graphql b/app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_note.fragment.graphql
new file mode 100644
index 00000000000..43bd2b3a6e6
--- /dev/null
+++ b/app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_note.fragment.graphql
@@ -0,0 +1,24 @@
+#import "~/graphql_shared/fragments/author.fragment.graphql"
+#import "./abuse_report_note_permissions.fragment.graphql"
+
+fragment AbuseReportNote on Note {
+ id
+ author {
+ ...Author
+ }
+ body
+ bodyHtml
+ createdAt
+ resolved
+ userPermissions {
+ ...AbuseReportNotePermissions
+ }
+ discussion {
+ id
+ notes {
+ nodes {
+ id
+ }
+ }
+ }
+}
diff --git a/app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_note_permissions.fragment.graphql b/app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_note_permissions.fragment.graphql
new file mode 100644
index 00000000000..01436436b93
--- /dev/null
+++ b/app/assets/javascripts/admin/abuse_report/graphql/notes/abuse_report_note_permissions.fragment.graphql
@@ -0,0 +1,3 @@
+fragment AbuseReportNotePermissions on NotePermissions {
+ adminNote
+}
diff --git a/app/assets/javascripts/admin/abuse_report/graphql/notes/create_abuse_report_note.mutation.graphql b/app/assets/javascripts/admin/abuse_report/graphql/notes/create_abuse_report_note.mutation.graphql
new file mode 100644
index 00000000000..53ac9468e08
--- /dev/null
+++ b/app/assets/javascripts/admin/abuse_report/graphql/notes/create_abuse_report_note.mutation.graphql
@@ -0,0 +1,18 @@
+#import "./abuse_report_note.fragment.graphql"
+
+mutation createAbuseReportNote($input: CreateNoteInput!) {
+ createNote(input: $input) {
+ note {
+ id
+ discussion {
+ id
+ notes {
+ nodes {
+ ...AbuseReportNote
+ }
+ }
+ }
+ }
+ errors
+ }
+}
diff --git a/app/assets/javascripts/admin/abuse_report/graphql/notes/delete_abuse_report_note.fragment.graphql b/app/assets/javascripts/admin/abuse_report/graphql/notes/delete_abuse_report_note.fragment.graphql
new file mode 100644
index 00000000000..e8ff2933159
--- /dev/null
+++ b/app/assets/javascripts/admin/abuse_report/graphql/notes/delete_abuse_report_note.fragment.graphql
@@ -0,0 +1,8 @@
+mutation deleteAbuseReportNote($input: DestroyNoteInput!) {
+ destroyNote(input: $input) {
+ errors
+ note {
+ id
+ }
+ }
+}
diff --git a/app/assets/javascripts/admin/abuse_report/graphql/notes/update_abuse_report_note.mutation.graphql b/app/assets/javascripts/admin/abuse_report/graphql/notes/update_abuse_report_note.mutation.graphql
new file mode 100644
index 00000000000..e11165074c9
--- /dev/null
+++ b/app/assets/javascripts/admin/abuse_report/graphql/notes/update_abuse_report_note.mutation.graphql
@@ -0,0 +1,10 @@
+#import "./abuse_report_note.fragment.graphql"
+
+mutation updateAbuseReportNote($input: UpdateNoteInput!) {
+ updateNote(input: $input) {
+ note {
+ ...AbuseReportNote
+ }
+ errors
+ }
+}
diff --git a/app/assets/javascripts/graphql_shared/possible_types.json b/app/assets/javascripts/graphql_shared/possible_types.json
index 4e0b1413f71..e0cd18a8643 100644
--- a/app/assets/javascripts/graphql_shared/possible_types.json
+++ b/app/assets/javascripts/graphql_shared/possible_types.json
@@ -70,6 +70,7 @@
"ProjectMember"
],
"NoteableInterface": [
+ "AbuseReport",
"AlertManagementAlert",
"BoardEpic",
"Design",
diff --git a/app/assets/javascripts/members/components/table/role_dropdown.vue b/app/assets/javascripts/members/components/table/role_dropdown.vue
index cd0d42fd452..2b72a3fe6e8 100644
--- a/app/assets/javascripts/members/components/table/role_dropdown.vue
+++ b/app/assets/javascripts/members/components/table/role_dropdown.vue
@@ -4,8 +4,9 @@ import { GlBreakpointInstance as bp } from '@gitlab/ui/dist/utils';
// eslint-disable-next-line no-restricted-imports
import { mapActions } from 'vuex';
import * as Sentry from '~/sentry/sentry_browser_wrapper';
-import { s__ } from '~/locale';
import { guestOverageConfirmAction } from 'ee_else_ce/members/guest_overage_confirm_action';
+import { roleDropdownItems, initialSelectedRole } from 'ee_else_ce/members/utils';
+import { s__ } from '~/locale';
export default {
name: 'RoleDropdown',
@@ -29,7 +30,7 @@ export default {
return {
isDesktop: false,
busy: false,
- selectedRoleValue: this.member.accessLevel.integerValue,
+ selectedRole: null,
};
},
computed: {
@@ -37,12 +38,12 @@ export default {
return this.permissions.canOverride && !this.member.isOverridden;
},
dropdownItems() {
- return Object.entries(this.member.validRoles).map(([name, value]) => ({
- value,
- text: name,
- }));
+ return roleDropdownItems(this.member);
},
},
+ created() {
+ this.selectedRole = initialSelectedRole(this.dropdownItems.flatten, this.member);
+ },
mounted() {
this.isDesktop = bp.isDesktop();
},
@@ -52,44 +53,39 @@ export default {
return dispatch(`${this.namespace}/updateMemberRole`, payload);
},
}),
- async handleOverageConfirm(currentRoleValue, newRoleValue, newRoleName) {
- return guestOverageConfirmAction({
- currentRoleValue,
- newRoleValue,
- newRoleName,
- group: this.group,
- memberId: this.member.id,
- memberType: this.namespace,
- });
- },
- async handleSelect(newRoleValue) {
- const currentRoleValue = this.member.accessLevel.integerValue;
- if (newRoleValue === currentRoleValue) {
- return;
- }
-
+ async handleSelect(value) {
this.busy = true;
- const { text: newRoleName } = this.dropdownItems.find((item) => item.value === newRoleValue);
- const confirmed = await this.handleOverageConfirm(
- currentRoleValue,
- newRoleValue,
- newRoleName,
- );
- if (!confirmed) {
- this.selectedRoleValue = currentRoleValue;
- this.busy = false;
- return;
- }
+ const newRole = this.dropdownItems.flatten.find((item) => item.value === value);
+ const previousRole = this.selectedRole;
try {
+ const confirmed = await guestOverageConfirmAction({
+ currentRoleValue: this.member.accessLevel.integerValue,
+ newRoleValue: newRole.accessLevel,
+ newRoleName: newRole.text,
+ newMemberRoleId: newRole.memberRoleId,
+ group: this.group,
+ memberId: this.member.id,
+ memberType: this.namespace,
+ });
+ if (!confirmed) {
+ return;
+ }
+
+ this.selectedRole = value;
+
await this.updateMemberRole({
memberId: this.member.id,
- accessLevel: { integerValue: newRoleValue, stringValue: newRoleName },
+ accessLevel: {
+ integerValue: newRole.accessLevel,
+ memberRoleId: newRole.memberRoleId,
+ },
});
this.$toast.show(s__('Members|Role updated successfully.'));
} catch (error) {
+ this.selectedRole = previousRole;
Sentry.captureException(error);
} finally {
this.busy = false;
@@ -101,14 +97,14 @@ export default {
<template>
<gl-collapsible-listbox
- v-model="selectedRoleValue"
:placement="isDesktop ? 'left' : 'right'"
:toggle-text="member.accessLevel.stringValue"
:header-text="__('Change role')"
:disabled="disabled"
:loading="busy"
data-qa-selector="access_level_dropdown"
- :items="dropdownItems"
+ :items="dropdownItems.formatted"
+ :selected="selectedRole"
@select="handleSelect"
>
<template #list-item="{ item }">
diff --git a/app/assets/javascripts/members/store/actions.js b/app/assets/javascripts/members/store/actions.js
index 712f0d6caa7..d696f618a3c 100644
--- a/app/assets/javascripts/members/store/actions.js
+++ b/app/assets/javascripts/members/store/actions.js
@@ -6,7 +6,10 @@ export const updateMemberRole = async ({ state, commit }, { memberId, accessLeve
try {
await axios.put(
state.memberPath.replace(/:id$/, memberId),
- state.requestFormatter({ accessLevel: accessLevel.integerValue }),
+ state.requestFormatter({
+ accessLevel: accessLevel.integerValue,
+ memberRoleId: accessLevel.memberRoleId,
+ }),
);
commit(types.RECEIVE_MEMBER_ROLE_SUCCESS, { memberId, accessLevel });
diff --git a/app/assets/javascripts/members/utils.js b/app/assets/javascripts/members/utils.js
index 09e4b5e8a6f..1304fb0fee1 100644
--- a/app/assets/javascripts/members/utils.js
+++ b/app/assets/javascripts/members/utils.js
@@ -1,4 +1,4 @@
-import { isUndefined } from 'lodash';
+import { isUndefined, uniqueId } from 'lodash';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
import { getParameterByName, setUrlParams } from '~/lib/utils/url_utility';
import {
@@ -35,6 +35,36 @@ export const generateBadges = ({ member, isCurrentUser, canManageMembers }) => [
},
];
+/**
+ * Creates the dropdowns options for static roles
+ *
+ * @param {object} member
+ * @param {Map<string, number>} member.validRoles
+ */
+export const roleDropdownItems = ({ validRoles }) => {
+ const staticRoleDropdownItems = Object.entries(validRoles).map(([name, value]) => ({
+ accessLevel: value,
+ memberRoleId: null, // The value `null` is need to downgrade from custom role to static role. See: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/133430#note_1595153555
+ text: name,
+ value: uniqueId('role-static-'),
+ }));
+
+ return { flatten: staticRoleDropdownItems, formatted: staticRoleDropdownItems };
+};
+
+/**
+ * Finds and returns unique value
+ *
+ * @param {Array<{accessLevel: number, memberRoleId: null, text: string, value: string}>} flattenDropdownItems
+ * @param {object} member
+ * @param {{integerValue: number}} member.accessLevel
+ */
+export const initialSelectedRole = (flattenDropdownItems, member) => {
+ return flattenDropdownItems.find(
+ ({ accessLevel }) => accessLevel === member.accessLevel.integerValue,
+ )?.value;
+};
+
export const isGroup = (member) => {
return Boolean(member.sharedWithGroup);
};
@@ -128,6 +158,7 @@ export const parseDataAttributes = (el) => {
export const baseRequestFormatter = (basePropertyName, accessLevelPropertyName) => ({
accessLevel,
+ memberRoleId,
...otherProperties
}) => {
const accessLevelProperty = !isUndefined(accessLevel)
@@ -137,6 +168,7 @@ export const baseRequestFormatter = (basePropertyName, accessLevelPropertyName)
return {
[basePropertyName]: {
...accessLevelProperty,
+ member_role_id: memberRoleId ?? null,
...otherProperties,
},
};
diff --git a/app/assets/javascripts/sidebar/queries/constants.js b/app/assets/javascripts/sidebar/queries/constants.js
index 0844abc4599..6bcdc01a003 100644
--- a/app/assets/javascripts/sidebar/queries/constants.js
+++ b/app/assets/javascripts/sidebar/queries/constants.js
@@ -12,8 +12,8 @@ import {
WORKSPACE_PROJECT,
} from '~/issues/constants';
import updateAlertAssigneesMutation from '~/vue_shared/alert_details/graphql/mutations/alert_set_assignees.mutation.graphql';
-import abuseReportLabelsQuery from '~/admin/abuse_report/components/graphql/abuse_report_labels.query.graphql';
-import createAbuseReportLabelMutation from '~/admin/abuse_report/components/graphql/create_abuse_report_label.mutation.graphql';
+import abuseReportLabelsQuery from '~/admin/abuse_report/graphql/abuse_report_labels.query.graphql';
+import createAbuseReportLabelMutation from '~/admin/abuse_report/graphql/create_abuse_report_label.mutation.graphql';
import createGroupOrProjectLabelMutation from '../components/labels/labels_select_widget/graphql/create_label.mutation.graphql';
import updateTestCaseLabelsMutation from '../components/labels/labels_select_widget/graphql/update_test_case_labels.mutation.graphql';
import epicLabelsQuery from '../components/labels/labels_select_widget/graphql/epic_labels.query.graphql';
diff --git a/app/assets/javascripts/vue_merge_request_widget/extensions/security_reports/mr_widget_security_reports.vue b/app/assets/javascripts/vue_merge_request_widget/extensions/security_reports/mr_widget_security_reports.vue
index e7d8de97f20..a36a58c68de 100644
--- a/app/assets/javascripts/vue_merge_request_widget/extensions/security_reports/mr_widget_security_reports.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/extensions/security_reports/mr_widget_security_reports.vue
@@ -1,5 +1,5 @@
<script>
-import { GlDropdown, GlDropdownItem, GlTooltipDirective as GlTooltip } from '@gitlab/ui';
+import { GlDisclosureDropdown } from '@gitlab/ui';
import MrWidget from '~/vue_merge_request_widget/components/widget/widget.vue';
import { helpPagePath } from '~/helpers/help_page_helper';
import { s__, sprintf } from '~/locale';
@@ -10,11 +10,7 @@ export default {
name: 'WidgetSecurityReportsCE',
components: {
MrWidget,
- GlDropdown,
- GlDropdownItem,
- },
- directives: {
- GlTooltip,
+ GlDisclosureDropdown,
},
i18n: {
apiError: s__(
@@ -76,17 +72,23 @@ export default {
summary() {
return { title: this.$options.i18n.scansHaveRun };
},
+ listboxOptions() {
+ return this.artifacts.map(({ name, path }) => ({
+ text: sprintf(s__('SecurityReports|Download %{artifactName}'), {
+ artifactName: name,
+ }),
+ href: path,
+ extraAttrs: {
+ download: '',
+ rel: 'nofollow',
+ },
+ }));
+ },
},
methods: {
handleIsLoading(value) {
this.isLoading = value;
},
-
- artifactText({ name }) {
- return sprintf(s__('SecurityReports|Download %{artifactName}'), {
- artifactName: name,
- });
- },
},
widgetHelpPopover: {
options: { title: s__('ciReport|Security scan results') },
@@ -116,26 +118,12 @@ export default {
@is-loading="handleIsLoading"
>
<template #action-buttons>
- <div class="gl-ml-3">
- <gl-dropdown
- v-gl-tooltip
- icon="download"
- size="small"
- category="tertiary"
- variant="confirm"
- right
- >
- <gl-dropdown-item
- v-for="artifact in artifacts"
- :key="artifact.path"
- :href="artifact.path"
- :data-testid="`download-${artifact.name}`"
- download
- >
- {{ artifactText(artifact) }}
- </gl-dropdown-item>
- </gl-dropdown>
- </div>
+ <gl-disclosure-dropdown
+ class="gl-ml-3"
+ size="small"
+ icon="download"
+ :items="listboxOptions"
+ />
</template>
</mr-widget>
</template>
diff --git a/app/assets/stylesheets/startup/_cloaking.scss b/app/assets/stylesheets/startup/_cloaking.scss
deleted file mode 100644
index f60d72a51fb..00000000000
--- a/app/assets/stylesheets/startup/_cloaking.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- Prevent flashing of content when using startup.css
- */
-@mixin cloak-startup-scss($display) {
- // General selector for cloaking until ready
- .cloak-startup,
- // Breadcrumbs and alerts on the top of the page
- .content-wrapper > .alert-wrapper,
- // Content on pages
- #content-body,
- // Prevent flashing of haml generated modal contents
- .modal-dialog {
- display: $display;
- }
-}
diff --git a/app/assets/stylesheets/startup/startup-dark.scss b/app/assets/stylesheets/startup/startup-dark.scss
deleted file mode 100644
index 60cbcffd506..00000000000
--- a/app/assets/stylesheets/startup/startup-dark.scss
+++ /dev/null
@@ -1,1928 +0,0 @@
-// DO NOT EDIT! This is auto-generated from "yarn run generate:startup_css"
-// Please see the feedback issue for more details and help:
-// https://gitlab.com/gitlab-org/gitlab/-/issues/331812
-@charset "UTF-8";
-:root {
- --white: #333238;
-}
-*,
-*::before,
-*::after {
- box-sizing: border-box;
-}
-html {
- font-family: sans-serif;
- line-height: 1.15;
-}
-aside,
-header {
- display: block;
-}
-body {
- margin: 0;
- font-family: var(--default-regular-font, "GitLab Sans"), -apple-system,
- BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell,
- "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
- "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #ececef;
- text-align: left;
- background-color: #1f1e24;
-}
-ul {
- margin-top: 0;
- margin-bottom: 1rem;
-}
-ul ul {
- margin-bottom: 0;
-}
-strong {
- font-weight: bolder;
-}
-a {
- color: #428fdc;
- text-decoration: none;
- background-color: transparent;
-}
-a:not([href]):not([class]) {
- color: inherit;
- text-decoration: none;
-}
-kbd {
- font-family: var(--default-mono-font, "GitLab Mono"), "JetBrains Mono",
- "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono",
- "Courier New", "andale mono", "lucida console", monospace;
- font-size: 1em;
-}
-img {
- vertical-align: middle;
- border-style: none;
-}
-svg {
- overflow: hidden;
- vertical-align: middle;
-}
-button {
- border-radius: 0;
-}
-input,
-button {
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-button,
-input {
- overflow: visible;
-}
-button {
- text-transform: none;
-}
-[role="button"] {
- cursor: pointer;
-}
-button:not(:disabled),
-[type="button"]:not(:disabled) {
- cursor: pointer;
-}
-button::-moz-focus-inner,
-[type="button"]::-moz-focus-inner {
- padding: 0;
- border-style: none;
-}
-[type="search"] {
- outline-offset: -2px;
-}
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-kbd {
- padding: 0.2rem 0.4rem;
- font-size: 90%;
- color: #333238;
- background-color: #ececef;
- border-radius: 0.2rem;
-}
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: 600;
-}
-.container-fluid {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-.form-control {
- display: block;
- width: 100%;
- height: 32px;
- padding: 0.375rem 0.75rem;
- font-size: 0.875rem;
- font-weight: 400;
- line-height: 1.5;
- color: #ececef;
- background-color: #333238;
- background-clip: padding-box;
- border: 1px solid #737278;
- border-radius: 0.25rem;
-}
-@media (prefers-reduced-motion: reduce) {
-}
-.form-control::placeholder {
- color: #a4a3a8;
- opacity: 1;
-}
-.form-control:disabled {
- background-color: #24232a;
- opacity: 1;
-}
-.btn {
- display: inline-block;
- font-weight: 400;
- color: #ececef;
- text-align: center;
- vertical-align: middle;
- user-select: none;
- background-color: transparent;
- border: 1px solid transparent;
- padding: 0.375rem 0.75rem;
- font-size: 1rem;
- line-height: 20px;
- border-radius: 0.25rem;
-}
-@media (prefers-reduced-motion: reduce) {
-}
-.btn:disabled {
- opacity: 0.65;
-}
-.btn:not(:disabled):not(.disabled) {
- cursor: pointer;
-}
-.collapse:not(.show) {
- display: none;
-}
-.dropdown {
- position: relative;
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 10rem;
- padding: 0.5rem 0;
- margin: 0.125rem 0 0;
- font-size: 1rem;
- color: #ececef;
- text-align: left;
- list-style: none;
- background-color: #333238;
- background-clip: padding-box;
- border: 1px solid rgba(255, 255, 255, 0.15);
- border-radius: 0.25rem;
-}
-.nav {
- display: flex;
- flex-wrap: wrap;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-.navbar {
- position: relative;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: space-between;
- padding: 0.25rem 0.5rem;
-}
-.navbar .container-fluid {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: space-between;
-}
-.navbar-nav {
- display: flex;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-.navbar-nav .dropdown-menu {
- position: static;
- float: none;
-}
-.navbar-collapse {
- flex-basis: 100%;
- flex-grow: 1;
- align-items: center;
-}
-.navbar-toggler {
- padding: 0.25rem 0.75rem;
- font-size: 1.25rem;
- line-height: 1;
- background-color: transparent;
- border: 1px solid transparent;
- border-radius: 0.25rem;
-}
-@media (max-width: 575.98px) {
- .navbar-expand-sm > .container-fluid {
- padding-right: 0;
- padding-left: 0;
- }
-}
-@media (min-width: 576px) {
- .navbar-expand-sm {
- flex-flow: row nowrap;
- justify-content: flex-start;
- }
- .navbar-expand-sm .navbar-nav {
- flex-direction: row;
- }
- .navbar-expand-sm .navbar-nav .dropdown-menu {
- position: absolute;
- }
- .navbar-expand-sm > .container-fluid {
- flex-wrap: nowrap;
- }
- .navbar-expand-sm .navbar-collapse {
- display: flex !important;
- flex-basis: auto;
- }
- .navbar-expand-sm .navbar-toggler {
- display: none;
- }
-}
-.badge {
- display: inline-block;
- padding: 0.25em 0.4em;
- font-size: 75%;
- font-weight: 600;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: 0.25rem;
-}
-@media (prefers-reduced-motion: reduce) {
-}
-.badge:empty {
- display: none;
-}
-.btn .badge {
- position: relative;
- top: -1px;
-}
-.badge-pill {
- padding-right: 0.6em;
- padding-left: 0.6em;
- border-radius: 10rem;
-}
-.badge-success {
- color: #fbfafd;
- background-color: #2da160;
-}
-.badge-info {
- color: #fbfafd;
- background-color: #428fdc;
-}
-.badge-warning {
- color: #fbfafd;
- background-color: #c17d10;
-}
-.rounded-circle {
- border-radius: 50% !important;
-}
-.d-none {
- display: none !important;
-}
-.d-block {
- display: block !important;
-}
-@media (min-width: 576px) {
- .d-sm-none {
- display: none !important;
- }
- .d-sm-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 768px) {
- .d-md-block {
- display: block !important;
- }
-}
-@media (min-width: 992px) {
- .d-lg-none {
- display: none !important;
- }
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border: 0;
-}
-.gl-avatar {
- display: inline-flex;
- border-width: 1px;
- border-style: solid;
- border-color: rgba(251, 250, 253, 0.08);
- overflow: hidden;
- flex-shrink: 0;
-}
-.gl-avatar-s24 {
- width: 1.5rem;
- height: 1.5rem;
- font-size: 0.75rem;
- line-height: 1rem;
- border-radius: 0.25rem;
-}
-.gl-avatar-circle {
- border-radius: 50%;
-}
-.gl-badge {
- display: inline-flex;
- align-items: center;
- font-size: 0.75rem;
- font-weight: 400;
- line-height: 1rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
-}
-.gl-badge.sm {
- padding-top: 0;
- padding-bottom: 0;
-}
-.gl-badge.badge-info {
- background-color: #064787;
- color: #9dc7f1;
-}
-a.gl-badge.badge-info.active,
-a.gl-badge.badge-info:active {
- color: #e9f3fc;
- background-color: #0b5cad;
-}
-a.gl-badge.badge-info:active {
- box-shadow: 0 0 0 1px #333238, 0 0 0 3px #1f75cb;
- outline: none;
-}
-.gl-badge.badge-success {
- background-color: #0d532a;
- color: #91d4a8;
-}
-a.gl-badge.badge-success.active,
-a.gl-badge.badge-success:active {
- color: #ecf4ee;
- background-color: #24663b;
-}
-a.gl-badge.badge-success:active {
- box-shadow: 0 0 0 1px #333238, 0 0 0 3px #1f75cb;
- outline: none;
-}
-.gl-badge.badge-warning {
- background-color: #703800;
- color: #e9be74;
-}
-a.gl-badge.badge-warning.active,
-a.gl-badge.badge-warning:active {
- color: #fdf1dd;
- background-color: #8f4700;
-}
-a.gl-badge.badge-warning:active {
- box-shadow: 0 0 0 1px #333238, 0 0 0 3px #1f75cb;
- outline: none;
-}
-.gl-button .gl-badge {
- top: 0;
-}
-.gl-form-input,
-.gl-form-input.form-control {
- background-color: #333238;
- font-family: var(--default-regular-font, "GitLab Sans"), -apple-system,
- BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell,
- "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
- "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 0.875rem;
- line-height: 1rem;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- height: auto;
- color: #ececef;
- box-shadow: inset 0 0 0 1px #737278;
- border-style: none;
- appearance: none;
- -moz-appearance: none;
-}
-.gl-form-input:disabled,
-.gl-form-input:not(.form-control-plaintext):not([type="color"]):read-only,
-.gl-form-input.form-control:disabled,
-.gl-form-input.form-control:not(.form-control-plaintext):not([type="color"]):read-only {
- background-color: #1f1e24;
- box-shadow: inset 0 0 0 1px #434248;
-}
-.gl-form-input:disabled,
-.gl-form-input.form-control:disabled {
- cursor: not-allowed;
- color: #89888d;
-}
-.gl-form-input::placeholder,
-.gl-form-input.form-control::placeholder {
- color: #737278;
-}
-.gl-icon {
- fill: currentColor;
-}
-.gl-icon.s12 {
- width: 12px;
- height: 12px;
-}
-.gl-icon.s16 {
- width: 16px;
- height: 16px;
-}
-.gl-icon.s32 {
- width: 32px;
- height: 32px;
-}
-.gl-link {
- font-size: 0.875rem;
- color: #428fdc;
-}
-.gl-link:active {
- color: #9dc7f1;
-}
-.gl-link:active {
- text-decoration: underline;
- outline: 2px solid #1f75cb;
- outline-offset: 2px;
-}
-.gl-button {
- display: inline-flex;
-}
-.gl-button:not(.btn-link):active {
- text-decoration: none;
-}
-.gl-button.gl-button {
- border-width: 0;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- background-color: transparent;
- line-height: 1rem;
- color: #ececef;
- fill: currentColor;
- box-shadow: inset 0 0 0 1px #535158;
- justify-content: center;
- align-items: center;
- font-size: 0.875rem;
- border-radius: 0.25rem;
-}
-.gl-button.gl-button .gl-button-text {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- padding-top: 1px;
- padding-bottom: 1px;
- margin-top: -1px;
- margin-bottom: -1px;
-}
-.gl-button.gl-button.btn-default {
- background-color: #333238;
-}
-.gl-button.gl-button.btn-default:active,
-.gl-button.gl-button.btn-default.active {
- box-shadow: inset 0 0 0 1px #a4a3a8, 0 0 0 1px #333238, 0 0 0 3px #1f75cb;
- outline: none;
- background-color: #434248;
-}
-.gl-button.gl-button.btn-default:active .gl-icon,
-.gl-button.gl-button.btn-default.active .gl-icon {
- color: #ececef;
-}
-.gl-button.gl-button.btn-default .gl-icon {
- color: #89888d;
-}
-.gl-search-box-by-type-search-icon {
- color: #89888d;
- width: 1rem;
- position: absolute;
- left: 0.5rem;
- top: calc(50% - 16px / 2);
-}
-.gl-search-box-by-type {
- display: flex;
- position: relative;
-}
-.gl-search-box-by-type-input,
-.gl-search-box-by-type-input.gl-form-input {
- height: 2rem;
- padding-right: 2rem;
- padding-left: 1.75rem;
-}
-body {
- font-size: 0.875rem;
-}
-button,
-html [type="button"],
-[role="button"] {
- cursor: pointer;
-}
-strong {
- font-weight: bold;
-}
-svg {
- vertical-align: baseline;
-}
-.form-control {
- font-size: 0.875rem;
-}
-.hidden {
- display: none !important;
- visibility: hidden !important;
-}
-.badge:not(.gl-badge) {
- padding: 4px 5px;
- font-size: 12px;
- font-style: normal;
- font-weight: 400;
- display: inline-block;
-}
-.divider {
- height: 0;
- margin: 4px 0;
- overflow: hidden;
- border-top: 1px solid #434248;
-}
-.toggle-sidebar-button .collapse-text,
-.toggle-sidebar-button .icon-chevron-double-lg-left {
- color: #bfbfc3;
-}
-html {
- overflow-y: scroll;
-}
-.layout-page {
- padding-top: calc(
- var(--header-height, 48px) +
- calc(var(--system-header-height) + var(--performance-bar-height))
- );
- padding-bottom: var(--system-footer-height);
-}
-@media (min-width: 576px) {
- .logged-out-marketing-header {
- --header-height: 72px;
- }
-}
-.btn {
- border-radius: 4px;
- font-size: 0.875rem;
- font-weight: 400;
- padding: 6px 10px;
- background-color: #333238;
- border-color: #434248;
- color: #ececef;
- color: #ececef;
- white-space: nowrap;
-}
-.btn:active {
- background-color: #333238;
- box-shadow: none;
-}
-.btn:active,
-.btn.active {
- background-color: #434248;
- border-color: #4f4f4f;
- color: #ececef;
-}
-.btn svg {
- height: 15px;
- width: 15px;
-}
-.btn svg:not(:last-child) {
- margin-right: 5px;
-}
-.badge.badge-pill:not(.gl-badge) {
- font-weight: 400;
- background-color: rgba(255, 255, 255, 0.07);
- color: #bfbfc3;
- vertical-align: baseline;
-}
-:root {
- --performance-bar-height: 0px;
- --system-header-height: 0px;
- --top-bar-height: 0px;
- --system-footer-height: 0px;
- --mr-review-bar-height: 0px;
- --breakpoint-xs: 0;
- --breakpoint-sm: 576px;
- --breakpoint-md: 768px;
- --breakpoint-lg: 992px;
- --breakpoint-xl: 1200px;
-}
-.with-top-bar {
- --top-bar-height: 48px;
-}
-@media (min-width: 768px) {
- .page-with-contextual-sidebar {
- --application-bar-left: 56px;
- }
-}
-@media (min-width: 1200px) {
- .page-with-contextual-sidebar {
- --application-bar-left: 256px;
- }
- .page-with-icon-sidebar {
- --application-bar-left: 56px;
- }
- .page-with-super-sidebar {
- --application-bar-left: 256px;
- }
- .page-with-super-sidebar-collapsed {
- --application-bar-left: 0px;
- }
-}
-.gl-font-sm {
- font-size: 12px;
-}
-.dropdown {
- position: relative;
-}
-.dropdown-menu {
- display: none;
- position: absolute;
- width: auto;
- top: 100%;
- z-index: 300;
- min-width: 240px;
- max-width: 500px;
- margin-top: 4px;
- margin-bottom: 24px;
- font-size: 0.875rem;
- font-weight: 400;
- padding: 8px 0;
- background-color: #333238;
- border: 1px solid #434248;
- border-radius: 0.25rem;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
-}
-.dropdown-menu ul {
- margin: 0;
- padding: 0;
-}
-.dropdown-menu li {
- display: block;
- text-align: left;
- list-style: none;
-}
-.dropdown-menu li > a,
-.dropdown-menu li > button {
- background: transparent;
- border: 0;
- border-radius: 0;
- box-shadow: none;
- display: block;
- font-weight: 400;
- position: relative;
- padding: 8px 12px;
- color: #ececef;
- line-height: 16px;
- white-space: normal;
- overflow: hidden;
- text-align: left;
- width: 100%;
-}
-.dropdown-menu li > a:active,
-.dropdown-menu li > button:active {
- background-color: #4e4c53;
- color: #ececef;
- outline: 0;
- text-decoration: none;
-}
-.dropdown-menu li > a:active,
-.dropdown-menu li > button:active {
- box-shadow: inset 0 0 0 2px #1f75cb, inset 0 0 0 3px #333238,
- inset 0 0 0 1px #333238;
- outline: none;
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 0.25rem 0;
- padding: 0;
- background-color: #434248;
-}
-.dropdown-menu .badge.badge-pill + span:not(.badge):not(.badge-pill) {
- margin-right: 40px;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab li.dropdown {
- position: static;
- }
- .navbar-gitlab li.dropdown.user-counter {
- margin-left: 8px !important;
- }
- .navbar-gitlab li.dropdown.user-counter > a {
- padding: 0 4px !important;
- }
- header.navbar-gitlab .dropdown .dropdown-menu {
- width: 100%;
- min-width: 100%;
- }
-}
-input {
- border-radius: 0.25rem;
- color: #ececef;
- background-color: #333238;
-}
-input[type="search"] {
- appearance: textfield;
-}
-.form-control {
- border-radius: 4px;
- padding: 6px 10px;
-}
-.form-control::placeholder {
- color: #737278;
-}
-kbd {
- display: inline-block;
- padding: 3px 5px;
- font-size: 0.75rem;
- line-height: 10px;
- color: var(--gray-700, #bfbfc3);
- vertical-align: unset;
- background-color: var(--gray-10, #1f1e24);
- border-width: 1px;
- border-style: solid;
- border-color: var(--gray-100, #434248) var(--gray-100, #434248)
- var(--gray-200, #535158);
- border-image: none;
- border-radius: 3px;
- box-shadow: 0 -1px 0 var(--gray-200, #535158) inset;
-}
-.navbar-gitlab {
- padding: 0 16px;
- z-index: 1000;
- margin-bottom: 0;
- min-height: var(--header-height, 48px);
- border: 0;
- position: fixed;
- top: calc(var(--system-header-height) + var(--performance-bar-height));
- left: 0;
- right: 0;
- border-radius: 0;
-}
-.navbar-gitlab .close-icon {
- display: none;
-}
-.navbar-gitlab .header-content {
- width: 100%;
- display: flex;
- justify-content: space-between;
- position: relative;
- min-height: var(--header-height, 48px);
- padding-left: 0;
-}
-.navbar-gitlab .header-content .title {
- padding-right: 0;
- color: currentColor;
- display: flex;
- position: relative;
- margin: 0;
- font-size: 18px;
- vertical-align: top;
- white-space: nowrap;
-}
-.navbar-gitlab .header-content .title img {
- height: 24px;
-}
-.navbar-gitlab .header-content .title a:not(.canary-badge) {
- display: flex;
- align-items: center;
- padding: 2px 8px;
- margin: 4px 2px 4px -8px;
- border-radius: 4px;
-}
-.navbar-gitlab .header-content .title a:not(.canary-badge):active {
- box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6), 0 0 0 3px #1068bf;
- outline: none;
-}
-.navbar-gitlab .header-content .navbar-collapse > ul.nav > li:not(.d-none) {
- margin: 0 2px;
-}
-.navbar-gitlab .header-search-form {
- min-width: 320px;
-}
-@media (min-width: 768px) and (max-width: 1199.98px) {
- .navbar-gitlab .header-search-form {
- min-width: 200px;
- }
-}
-.navbar-gitlab .header-search-form .keyboard-shortcut-helper {
- transform: translateY(calc(50% - 2px));
- box-shadow: none;
- border-color: transparent;
-}
-.navbar-gitlab .navbar-collapse {
- flex: 0 0 auto;
- border-top: 0;
- padding: 0;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .navbar-collapse {
- flex: 1 1 auto;
- }
-}
-.navbar-gitlab .navbar-collapse .nav {
- flex-wrap: nowrap;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .navbar-collapse .nav > li:not(.d-none) a {
- margin-left: 0;
- }
-}
-.navbar-gitlab .container-fluid {
- padding: 0;
-}
-.navbar-gitlab .container-fluid .user-counter svg {
- margin-right: 3px;
-}
-.navbar-gitlab .container-fluid .navbar-toggler {
- position: relative;
- right: -10px;
- border-radius: 0;
- min-width: 45px;
- padding: 0;
- margin: 8px 8px 8px 0;
- font-size: 14px;
- text-align: center;
- color: currentColor;
-}
-.navbar-gitlab .container-fluid .navbar-toggler.active {
- color: currentColor;
- background-color: transparent;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .container-fluid .navbar-nav {
- display: flex;
- padding-right: 10px;
- flex-direction: row;
- }
-}
-.navbar-gitlab
- .container-fluid
- .navbar-nav
- li
- .badge.badge-pill:not(.gl-badge) {
- box-shadow: none;
- font-weight: 600;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .container-fluid .nav > li.header-user {
- padding-left: 10px;
- }
-}
-.navbar-gitlab .container-fluid .nav > li > a {
- will-change: color;
- margin: 4px 0;
- padding: 6px 8px;
- height: 32px;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .container-fluid .nav > li > a {
- padding: 0;
- }
-}
-.navbar-gitlab .container-fluid .nav > li > a.header-user-dropdown-toggle {
- margin-left: 2px;
-}
-.navbar-gitlab
- .container-fluid
- .nav
- > li
- > a.header-user-dropdown-toggle
- .header-user-avatar {
- margin-right: 0;
-}
-.navbar-gitlab .container-fluid .nav > li .header-new-dropdown-toggle {
- margin-right: 0;
-}
-.navbar-sub-nav > li > a,
-.navbar-sub-nav > li > button,
-.navbar-nav > li > a,
-.navbar-nav > li > button {
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 6px 8px;
- margin: 4px 2px;
- font-size: 12px;
- color: currentColor;
- border-radius: 4px;
- height: 32px;
- font-weight: 600;
-}
-.navbar-sub-nav > li > a:active,
-.navbar-sub-nav > li > button:active,
-.navbar-nav > li > a:active,
-.navbar-nav > li > button:active {
- box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6), 0 0 0 3px #1068bf;
- outline: none;
-}
-.navbar-sub-nav > li .top-nav-toggle,
-.navbar-sub-nav > li > button,
-.navbar-nav > li .top-nav-toggle,
-.navbar-nav > li > button {
- background: transparent;
- border: 0;
-}
-.navbar-sub-nav .dropdown-menu,
-.navbar-nav .dropdown-menu {
- position: absolute;
-}
-.navbar-sub-nav {
- display: flex;
- align-items: center;
- height: 100%;
- margin: 0 0 0 6px;
-}
-.caret-down,
-.btn .caret-down {
- top: 0;
- height: 11px;
- width: 11px;
- margin-left: 4px;
- fill: currentColor;
-}
-.header-user .dropdown-menu,
-.header-new .dropdown-menu {
- margin-top: 4px;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .container-fluid {
- font-size: 18px;
- }
- .navbar-gitlab .container-fluid .navbar-nav {
- table-layout: fixed;
- width: 100%;
- margin: 0;
- text-align: right;
- }
- .navbar-gitlab .container-fluid .navbar-collapse {
- margin-left: -8px;
- margin-right: -10px;
- }
- .navbar-gitlab .container-fluid .navbar-collapse .nav > li:not(.d-none) {
- flex: 1;
- }
- .header-user-dropdown-toggle {
- text-align: center;
- }
- .header-user-avatar {
- float: none;
- }
-}
-.header-user-avatar {
- float: left;
- margin-right: 5px;
- border-radius: 50%;
- border: 1px solid #333238;
-}
-.notification-dot {
- background-color: #9e5400;
- height: 12px;
- width: 12px;
- pointer-events: none;
- visibility: hidden;
- top: 3px;
-}
-.tanuki-logo .tanuki {
- fill: #e24329;
-}
-.tanuki-logo .left-cheek,
-.tanuki-logo .right-cheek {
- fill: #fc6d26;
-}
-.tanuki-logo .chin {
- fill: #fca326;
-}
-.context-header {
- position: relative;
- margin-right: 2px;
- width: 256px;
-}
-.context-header > a,
-.context-header > button {
- font-weight: 600;
- display: flex;
- width: 100%;
- align-items: center;
- padding: 10px 16px 10px 10px;
- color: #ececef;
- background-color: transparent;
- border: 0;
- text-align: left;
-}
-.context-header .avatar-container {
- flex: 0 0 32px;
- background-color: #333238;
-}
-.context-header .sidebar-context-title {
- overflow: hidden;
- text-overflow: ellipsis;
- color: #ececef;
-}
-@media (min-width: 768px) {
- .page-with-contextual-sidebar {
- padding-left: 56px;
- }
-}
-@media (min-width: 1200px) {
- .page-with-contextual-sidebar {
- padding-left: 256px;
- }
-}
-@media (min-width: 768px) {
- .page-with-icon-sidebar {
- padding-left: 56px;
- }
-}
-.nav-sidebar {
- position: fixed;
- bottom: var(--system-footer-height);
- left: 0;
- z-index: 600;
- width: 256px;
- top: calc(
- var(--header-height, 48px) +
- calc(var(--system-header-height) + var(--performance-bar-height)) +
- var(--top-bar-height)
- );
- background-color: #1f1e24;
- border-right: 1px solid #e9e9e9;
- transform: translate3d(0, 0, 0);
-}
-.nav-sidebar.sidebar-collapsed-desktop {
- width: 56px;
-}
-.nav-sidebar.sidebar-collapsed-desktop .nav-sidebar-inner-scroll {
- overflow-x: hidden;
-}
-.nav-sidebar.sidebar-collapsed-desktop .badge.badge-pill:not(.fly-out-badge),
-.nav-sidebar.sidebar-collapsed-desktop .nav-item-name,
-.nav-sidebar.sidebar-collapsed-desktop .collapse-text {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
-}
-.nav-sidebar.sidebar-collapsed-desktop .sidebar-top-level-items > li > a {
- min-height: unset;
-}
-.nav-sidebar.sidebar-collapsed-desktop .fly-out-top-item:not(.divider) {
- display: block !important;
-}
-.nav-sidebar.sidebar-collapsed-desktop .avatar-container {
- margin: 0 auto;
-}
-.nav-sidebar.sidebar-collapsed-desktop li.active:not(.fly-out-top-item) > a {
- background-color: rgba(41, 41, 97, 0.08);
-}
-.nav-sidebar a {
- text-decoration: none;
- color: #ececef;
-}
-.nav-sidebar li {
- white-space: nowrap;
-}
-.nav-sidebar li .nav-item-name {
- flex: 1;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.nav-sidebar li > a,
-.nav-sidebar li > .fly-out-top-item-container {
- height: 2rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- display: flex;
- align-items: center;
- border-radius: 0.25rem;
- width: auto;
- margin: 1px 8px;
-}
-.nav-sidebar li.active > a {
- font-weight: 600;
-}
-.nav-sidebar li.active:not(.fly-out-top-item) > a:not(.has-sub-items) {
- background-color: rgba(251, 250, 253, 0.08);
-}
-.nav-sidebar ul {
- padding-left: 0;
- list-style: none;
-}
-@media (max-width: 767.98px) {
- .nav-sidebar {
- left: -256px;
- }
-}
-.nav-sidebar .nav-icon-container {
- display: flex;
- margin-right: 8px;
-}
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item {
- display: none;
-}
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- a,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item.active
- a,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- .fly-out-top-item-container {
- margin-left: 0;
- margin-right: 0;
- padding-left: 1rem;
- padding-right: 1rem;
- cursor: default;
- pointer-events: none;
- font-size: 0.75rem;
- margin-top: -0.25rem;
- margin-bottom: -0.25rem;
- margin-top: 0;
- position: relative;
- color: #333238;
- background: var(--black, #fff);
-}
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- a
- strong,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item.active
- a
- strong,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- .fly-out-top-item-container
- strong {
- font-weight: 400;
-}
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- a::before,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item.active
- a::before,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- .fly-out-top-item-container::before {
- position: absolute;
- content: "";
- display: block;
- top: 50%;
- left: -0.25rem;
- margin-top: -0.25rem;
- width: 0;
- height: 0;
- border-top: 0.25rem solid transparent;
- border-bottom: 0.25rem solid transparent;
- border-right: 0.25rem solid #fff;
- border-right-color: var(--black, #fff);
-}
-@media (min-width: 576px) {
- .nav-sidebar a.has-sub-items + .sidebar-sub-level-items {
- min-width: 150px;
- }
-}
-.nav-sidebar a.has-sub-items + .sidebar-sub-level-items .fly-out-top-item {
- display: none;
-}
-.nav-sidebar a.has-sub-items + .sidebar-sub-level-items .fly-out-top-item a,
-.nav-sidebar
- a.has-sub-items
- + .sidebar-sub-level-items
- .fly-out-top-item.active
- a,
-.nav-sidebar
- a.has-sub-items
- + .sidebar-sub-level-items
- .fly-out-top-item
- .fly-out-top-item-container {
- margin-left: 0;
- margin-right: 0;
- padding-left: 1rem;
- padding-right: 1rem;
- cursor: default;
- pointer-events: none;
- font-size: 0.75rem;
- margin-top: 0;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
-}
-@media (min-width: 768px) and (max-width: 1199px) {
- .nav-sidebar:not(.sidebar-expanded-mobile) {
- width: 56px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .nav-sidebar-inner-scroll {
- overflow-x: hidden;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- .badge.badge-pill:not(.fly-out-badge),
- .nav-sidebar:not(.sidebar-expanded-mobile) .nav-item-name,
- .nav-sidebar:not(.sidebar-expanded-mobile) .collapse-text {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-top-level-items > li > a {
- min-height: unset;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .fly-out-top-item:not(.divider) {
- display: block !important;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .avatar-container {
- margin: 0 auto;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- li.active:not(.fly-out-top-item)
- > a {
- background-color: rgba(41, 41, 97, 0.08);
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .context-header {
- height: 60px;
- width: 56px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .context-header a {
- padding: 10px 4px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-context-title {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .context-header {
- height: auto;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .context-header a {
- padding: 0.25rem;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- .sidebar-top-level-items
- > li
- .sidebar-sub-level-items:not(.flyout-list) {
- display: none;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .nav-icon-container {
- margin-right: 0;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button {
- width: 55px;
- padding: 0 21px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- .toggle-sidebar-button
- .collapse-text {
- display: none;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- .toggle-sidebar-button
- .icon-chevron-double-lg-left {
- transform: rotate(180deg);
- margin: 0;
- }
-}
-.nav-sidebar-inner-scroll {
- height: 100%;
- width: 100%;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.nav-sidebar-inner-scroll > div.context-header {
- margin-top: 0.25rem;
-}
-.nav-sidebar-inner-scroll > div.context-header a {
- height: 2rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- display: flex;
- align-items: center;
- border-radius: 0.25rem;
- width: auto;
- margin: 1px 8px;
- padding: 0.25rem;
- margin-bottom: 0.25rem;
- margin-top: 0.125rem;
- height: auto;
-}
-.nav-sidebar-inner-scroll > div.context-header a .avatar-container {
- font-weight: 400;
- flex: none;
-}
-.sidebar-top-level-items {
- margin-bottom: 60px;
-}
-.sidebar-top-level-items .context-header a {
- padding: 0.25rem;
- margin-bottom: 0.25rem;
- margin-top: 0.125rem;
- height: auto;
-}
-.sidebar-top-level-items .context-header a .avatar-container {
- font-weight: 400;
- flex: none;
-}
-.sidebar-top-level-items
- > li.active
- .sidebar-sub-level-items:not(.is-fly-out-only) {
- display: block;
-}
-.sidebar-top-level-items li > a.gl-link {
- color: #ececef;
-}
-.sidebar-top-level-items li > a.gl-link:active {
- text-decoration: none;
-}
-.sidebar-sub-level-items {
- padding-top: 0;
- padding-bottom: 0;
- display: none;
-}
-.sidebar-sub-level-items:not(.fly-out-list) li > a {
- padding-left: 2.25rem;
-}
-.toggle-sidebar-button,
-.close-nav-button {
- height: 48px;
- padding: 0 16px;
- background-color: #24232a;
- border: 0;
- color: #bfbfc3;
- display: flex;
- align-items: center;
- background-color: #1f1e24;
- position: fixed;
- bottom: 0;
- width: 255px;
-}
-.toggle-sidebar-button .collapse-text,
-.toggle-sidebar-button .icon-chevron-double-lg-left,
-.close-nav-button .collapse-text,
-.close-nav-button .icon-chevron-double-lg-left {
- color: inherit;
-}
-.collapse-text {
- white-space: nowrap;
- overflow: hidden;
-}
-.sidebar-collapsed-desktop .context-header {
- height: 60px;
- width: 56px;
-}
-.sidebar-collapsed-desktop .context-header a {
- padding: 10px 4px;
-}
-.sidebar-collapsed-desktop .sidebar-context-title {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
-}
-.sidebar-collapsed-desktop .context-header {
- height: auto;
-}
-.sidebar-collapsed-desktop .context-header a {
- padding: 0.25rem;
-}
-.sidebar-collapsed-desktop
- .sidebar-top-level-items
- > li
- .sidebar-sub-level-items:not(.flyout-list) {
- display: none;
-}
-.sidebar-collapsed-desktop .nav-icon-container {
- margin-right: 0;
-}
-.sidebar-collapsed-desktop .toggle-sidebar-button {
- width: 55px;
- padding: 0 21px;
-}
-.sidebar-collapsed-desktop .toggle-sidebar-button .collapse-text {
- display: none;
-}
-.sidebar-collapsed-desktop .toggle-sidebar-button .icon-chevron-double-lg-left {
- transform: rotate(180deg);
- margin: 0;
-}
-.close-nav-button {
- display: none;
-}
-@media (max-width: 767.98px) {
- .close-nav-button {
- display: flex;
- }
- .toggle-sidebar-button {
- display: none;
- }
-}
-.super-sidebar {
- display: flex;
- flex-direction: column;
- position: fixed;
- top: calc(
- var(--header-height, 48px) +
- calc(var(--system-header-height) + var(--performance-bar-height))
- );
- bottom: var(--system-footer-height);
- left: 0;
- background-color: var(--gray-10, #1f1e24);
- border-right: 1px solid rgba(251, 250, 253, 0.08);
- transform: translate3d(0, 0, 0);
- width: 256px;
- z-index: 600;
-}
-.super-sidebar.super-sidebar-loading {
- transform: translate3d(-100%, 0, 0);
-}
-@media (min-width: 1200px) {
- .super-sidebar.super-sidebar-loading {
- transform: translate3d(0, 0, 0);
- }
-}
-@media (prefers-reduced-motion: no-preference) {
-}
-.page-with-super-sidebar {
- padding-left: 0;
-}
-@media (prefers-reduced-motion: no-preference) {
-}
-@media (min-width: 1200px) {
- .page-with-super-sidebar {
- padding-left: 256px;
- }
-}
-.page-with-super-sidebar-collapsed .super-sidebar {
- transform: translate3d(-100%, 0, 0);
-}
-@media (min-width: 1200px) {
- .page-with-super-sidebar-collapsed {
- padding-left: 0;
- }
-}
-input::-moz-placeholder {
- color: #737278;
- opacity: 1;
-}
-input::-ms-input-placeholder {
- color: #737278;
-}
-input:-ms-input-placeholder {
- color: #737278;
-}
-svg {
- fill: currentColor;
-}
-svg.s12 {
- width: 12px;
- height: 12px;
-}
-svg.s16 {
- width: 16px;
- height: 16px;
-}
-svg.s32 {
- width: 32px;
- height: 32px;
-}
-svg.s12 {
- vertical-align: -1px;
-}
-svg.s16 {
- vertical-align: -3px;
-}
-.avatar,
-.avatar-container {
- float: left;
- margin-right: 16px;
- border-radius: 50%;
-}
-.avatar.s16,
-.avatar-container.s16 {
- width: 16px;
- height: 16px;
- margin-right: 8px;
-}
-.avatar.s32,
-.avatar-container.s32 {
- width: 32px;
- height: 32px;
- margin-right: 8px;
-}
-.avatar {
- transition-property: none;
- width: 40px;
- height: 40px;
- padding: 0;
- background: #212027;
- overflow: hidden;
- box-shadow: inset 0 0 0 1px rgba(251, 250, 253, 0.1);
-}
-.avatar.avatar-tile {
- border-radius: 0;
- border: 0;
-}
-.identicon {
- text-align: center;
- vertical-align: top;
- color: #ececef;
- background-color: #333238;
-}
-.identicon.s16 {
- font-size: 10px;
- line-height: 16px;
-}
-.identicon.s32 {
- font-size: 14px;
- line-height: 32px;
-}
-.identicon.bg1 {
- background-color: #660e00;
-}
-.identicon.bg2 {
- background-color: #232150;
-}
-.identicon.bg3 {
- background-color: #1a1a40;
-}
-.identicon.bg4 {
- background-color: #033464;
-}
-.identicon.bg5 {
- background-color: #0a4020;
-}
-.identicon.bg6 {
- background-color: #5c2900;
-}
-.identicon.bg7 {
- background-color: #333238;
-}
-.avatar-container {
- overflow: hidden;
- display: flex;
-}
-.avatar-container a {
- width: 100%;
- height: 100%;
- display: flex;
- text-decoration: none;
-}
-.avatar-container .avatar {
- border-radius: 0;
- border: 0;
- height: auto;
- width: 100%;
- margin: 0;
- align-self: center;
-}
-.rect-avatar {
- border-radius: 2px;
-}
-.rect-avatar.s16 {
- border-radius: 2px;
-}
-.rect-avatar.s16 .avatar {
- border-radius: 2px;
-}
-.rect-avatar.s32 {
- border-radius: 4px;
-}
-.rect-avatar.s32 .avatar {
- border-radius: 4px;
-}
-:root {
- color-scheme: dark;
- --gray-10: #1f1e24;
- --gray-50: #333238;
- --gray-100: #434248;
- --gray-200: #535158;
- --gray-700: #bfbfc3;
- --gray-900: #ececef;
- --border-color: #434248;
- --white: #333238;
- --black: #fff;
-}
-body.gl-dark {
- color-scheme: dark;
- --gray-10: #1f1e24;
- --border-color: #434248;
- --white: #333238;
- --black: #fff;
-}
-.nav-sidebar,
-.toggle-sidebar-button,
-.close-nav-button {
- background-color: #29282d;
- border-right: 1px solid #333238;
-}
-.gl-avatar:not(.gl-avatar-identicon),
-.avatar-container,
-.avatar {
- background: rgba(251, 250, 253, 0.04);
-}
-.gl-avatar {
- border-style: none;
- box-shadow: inset 0 0 0 1px rgba(251, 250, 253, 0.1);
-}
-body.gl-dark {
- --gl-theme-accent: #737278;
-}
-body.gl-dark .navbar-gitlab {
- background-color: #ececef;
-}
-body.gl-dark .navbar-gitlab .navbar-collapse {
- color: #ececef;
-}
-body.gl-dark .navbar-gitlab .container-fluid .navbar-toggler {
- border-left: 1px solid #a3a2a6;
- color: #ececef;
-}
-body.gl-dark .navbar-gitlab .navbar-sub-nav > li.active > a,
-body.gl-dark .navbar-gitlab .navbar-sub-nav > li.active > button,
-body.gl-dark .navbar-gitlab .navbar-nav > li.active > a,
-body.gl-dark .navbar-gitlab .navbar-nav > li.active > button {
- color: #ececef;
- background-color: #333238;
-}
-body.gl-dark .navbar-gitlab .navbar-sub-nav {
- color: #ececef;
-}
-body.gl-dark .navbar-gitlab .nav > li {
- color: #ececef;
-}
-body.gl-dark .navbar-gitlab .nav > li.header-search {
- color: #ececef;
-}
-body.gl-dark .navbar-gitlab .nav > li > a .notification-dot {
- border: 2px solid #ececef;
-}
-body.gl-dark
- .navbar-gitlab
- .nav
- > li
- > a.header-help-dropdown-toggle
- .notification-dot {
- background-color: #ececef;
-}
-body.gl-dark
- .navbar-gitlab
- .nav
- > li
- > a.header-user-dropdown-toggle
- .header-user-avatar {
- border-color: #ececef;
-}
-body.gl-dark .navbar-gitlab .nav > li.active > a {
- color: #ececef;
- background-color: #333238;
-}
-body.gl-dark .navbar-gitlab .nav > li.active > a .notification-dot {
- border-color: #333238;
-}
-body.gl-dark
- .navbar-gitlab
- .nav
- > li.active
- > a.header-help-dropdown-toggle
- .notification-dot {
- background-color: #ececef;
-}
-body.gl-dark .header-search-form {
- background-color: rgba(236, 236, 239, 0.2) !important;
- border-radius: 4px;
-}
-body.gl-dark .header-search-form svg.gl-search-box-by-type-search-icon {
- color: rgba(236, 236, 239, 0.8);
-}
-body.gl-dark .header-search-form input {
- background-color: transparent;
- color: rgba(236, 236, 239, 0.8);
- box-shadow: inset 0 0 0 1px rgba(236, 236, 239, 0.4);
-}
-body.gl-dark .header-search-form input::placeholder {
- color: rgba(236, 236, 239, 0.8);
-}
-body.gl-dark .header-search-form input:active::placeholder {
- color: #737278;
-}
-body.gl-dark .header-search-form .keyboard-shortcut-helper {
- color: #ececef;
- background-color: rgba(236, 236, 239, 0.2);
-}
-body.gl-dark .nav-sidebar li.active > a {
- color: #ececef;
-}
-body.gl-dark .nav-sidebar .fly-out-top-item a,
-body.gl-dark .nav-sidebar .fly-out-top-item.active a,
-body.gl-dark .nav-sidebar .fly-out-top-item .fly-out-top-item-container {
- background-color: var(--gray-100, #333238);
- color: var(--gray-900, #ececef);
-}
-body.gl-dark .navbar-gitlab {
- background-color: var(--gray-50);
- box-shadow: 0 1px 0 0 var(--gray-100);
-}
-body.gl-dark .navbar-gitlab .navbar-sub-nav li.active > a,
-body.gl-dark .navbar-gitlab .navbar-sub-nav li.active > button,
-body.gl-dark .navbar-gitlab .navbar-nav li.active > a,
-body.gl-dark .navbar-gitlab .navbar-nav li.active > button {
- color: var(--gl-text-color);
- background-color: var(--gray-200);
-}
-body.gl-dark .navbar-gitlab .header-search-form {
- background-color: var(--gray-100) !important;
- box-shadow: inset 0 0 0 1px var(--border-color) !important;
-}
-body.gl-dark .navbar-gitlab .header-search-form:active {
- background-color: var(--gray-100) !important;
- box-shadow: inset 0 0 0 1px var(--blue-200) !important;
-}
-
-.tab-width-8 {
- tab-size: 8;
-}
-.gl-sr-only {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
-}
-.gl-border-none\! {
- border-style: none !important;
-}
-.gl-display-none {
- display: none;
-}
-.gl-display-flex {
- display: flex;
-}
-@media (min-width: 992px) {
- .gl-lg-display-flex {
- display: flex;
- }
-}
-@media (min-width: 576px) {
- .gl-sm-display-block {
- display: block;
- }
-}
-@media (min-width: 992px) {
- .gl-lg-display-block {
- display: block;
- }
-}
-.gl-align-items-center {
- align-items: center;
-}
-.gl-align-items-stretch {
- align-items: stretch;
-}
-.gl-flex-grow-0\! {
- flex-grow: 0 !important;
-}
-.gl-flex-grow-1 {
- flex-grow: 1;
-}
-.gl-flex-basis-half\! {
- flex-basis: 50% !important;
-}
-.gl-justify-content-end {
- justify-content: flex-end;
-}
-.gl-relative {
- position: relative;
-}
-.gl-absolute {
- position: absolute;
-}
-.gl-top-0 {
- top: 0;
-}
-.gl-right-3 {
- right: 0.5rem;
-}
-.gl-w-full {
- width: 100%;
-}
-.gl-px-3 {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
-}
-.gl-pr-2 {
- padding-right: 0.25rem;
-}
-.gl-pt-0 {
- padding-top: 0;
-}
-.gl-mr-auto {
- margin-right: auto;
-}
-.gl-mr-3 {
- margin-right: 0.5rem;
-}
-.gl-ml-n2 {
- margin-left: -0.25rem;
-}
-.gl-ml-3 {
- margin-left: 0.5rem;
-}
-.gl-mx-0\! {
- margin-left: 0 !important;
- margin-right: 0 !important;
-}
-.gl-text-right {
- text-align: right;
-}
-.gl-white-space-nowrap {
- white-space: nowrap;
-}
-.gl-font-sm {
- font-size: 0.75rem;
-}
-.gl-font-weight-bold {
- font-weight: 600;
-}
-.gl-z-index-1 {
- z-index: 1;
-}
-
-@import "startup/cloaking";
-@include cloak-startup-scss(none);
diff --git a/app/assets/stylesheets/startup/startup-general.scss b/app/assets/stylesheets/startup/startup-general.scss
deleted file mode 100644
index 04c44dd9603..00000000000
--- a/app/assets/stylesheets/startup/startup-general.scss
+++ /dev/null
@@ -1,1781 +0,0 @@
-// DO NOT EDIT! This is auto-generated from "yarn run generate:startup_css"
-// Please see the feedback issue for more details and help:
-// https://gitlab.com/gitlab-org/gitlab/-/issues/331812
-@charset "UTF-8";
-:root {
- --white: #fff;
-}
-*,
-*::before,
-*::after {
- box-sizing: border-box;
-}
-html {
- font-family: sans-serif;
- line-height: 1.15;
-}
-aside,
-header {
- display: block;
-}
-body {
- margin: 0;
- font-family: var(--default-regular-font, "GitLab Sans"), -apple-system,
- BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell,
- "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
- "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #333238;
- text-align: left;
- background-color: #fff;
-}
-ul {
- margin-top: 0;
- margin-bottom: 1rem;
-}
-ul ul {
- margin-bottom: 0;
-}
-strong {
- font-weight: bolder;
-}
-a {
- color: #1f75cb;
- text-decoration: none;
- background-color: transparent;
-}
-a:not([href]):not([class]) {
- color: inherit;
- text-decoration: none;
-}
-kbd {
- font-family: var(--default-mono-font, "GitLab Mono"), "JetBrains Mono",
- "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono",
- "Courier New", "andale mono", "lucida console", monospace;
- font-size: 1em;
-}
-img {
- vertical-align: middle;
- border-style: none;
-}
-svg {
- overflow: hidden;
- vertical-align: middle;
-}
-button {
- border-radius: 0;
-}
-input,
-button {
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-button,
-input {
- overflow: visible;
-}
-button {
- text-transform: none;
-}
-[role="button"] {
- cursor: pointer;
-}
-button:not(:disabled),
-[type="button"]:not(:disabled) {
- cursor: pointer;
-}
-button::-moz-focus-inner,
-[type="button"]::-moz-focus-inner {
- padding: 0;
- border-style: none;
-}
-[type="search"] {
- outline-offset: -2px;
-}
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-kbd {
- padding: 0.2rem 0.4rem;
- font-size: 90%;
- color: #fff;
- background-color: #333238;
- border-radius: 0.2rem;
-}
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: 600;
-}
-.container-fluid {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-.form-control {
- display: block;
- width: 100%;
- height: 32px;
- padding: 0.375rem 0.75rem;
- font-size: 0.875rem;
- font-weight: 400;
- line-height: 1.5;
- color: #333238;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid #89888d;
- border-radius: 0.25rem;
-}
-@media (prefers-reduced-motion: reduce) {
-}
-.form-control::placeholder {
- color: #626168;
- opacity: 1;
-}
-.form-control:disabled {
- background-color: #fbfafd;
- opacity: 1;
-}
-.btn {
- display: inline-block;
- font-weight: 400;
- color: #333238;
- text-align: center;
- vertical-align: middle;
- user-select: none;
- background-color: transparent;
- border: 1px solid transparent;
- padding: 0.375rem 0.75rem;
- font-size: 1rem;
- line-height: 20px;
- border-radius: 0.25rem;
-}
-@media (prefers-reduced-motion: reduce) {
-}
-.btn:disabled {
- opacity: 0.65;
-}
-.btn:not(:disabled):not(.disabled) {
- cursor: pointer;
-}
-.collapse:not(.show) {
- display: none;
-}
-.dropdown {
- position: relative;
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 10rem;
- padding: 0.5rem 0;
- margin: 0.125rem 0 0;
- font-size: 1rem;
- color: #333238;
- text-align: left;
- list-style: none;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.15);
- border-radius: 0.25rem;
-}
-.nav {
- display: flex;
- flex-wrap: wrap;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-.navbar {
- position: relative;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: space-between;
- padding: 0.25rem 0.5rem;
-}
-.navbar .container-fluid {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: space-between;
-}
-.navbar-nav {
- display: flex;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-.navbar-nav .dropdown-menu {
- position: static;
- float: none;
-}
-.navbar-collapse {
- flex-basis: 100%;
- flex-grow: 1;
- align-items: center;
-}
-.navbar-toggler {
- padding: 0.25rem 0.75rem;
- font-size: 1.25rem;
- line-height: 1;
- background-color: transparent;
- border: 1px solid transparent;
- border-radius: 0.25rem;
-}
-@media (max-width: 575.98px) {
- .navbar-expand-sm > .container-fluid {
- padding-right: 0;
- padding-left: 0;
- }
-}
-@media (min-width: 576px) {
- .navbar-expand-sm {
- flex-flow: row nowrap;
- justify-content: flex-start;
- }
- .navbar-expand-sm .navbar-nav {
- flex-direction: row;
- }
- .navbar-expand-sm .navbar-nav .dropdown-menu {
- position: absolute;
- }
- .navbar-expand-sm > .container-fluid {
- flex-wrap: nowrap;
- }
- .navbar-expand-sm .navbar-collapse {
- display: flex !important;
- flex-basis: auto;
- }
- .navbar-expand-sm .navbar-toggler {
- display: none;
- }
-}
-.badge {
- display: inline-block;
- padding: 0.25em 0.4em;
- font-size: 75%;
- font-weight: 600;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: 0.25rem;
-}
-@media (prefers-reduced-motion: reduce) {
-}
-.badge:empty {
- display: none;
-}
-.btn .badge {
- position: relative;
- top: -1px;
-}
-.badge-pill {
- padding-right: 0.6em;
- padding-left: 0.6em;
- border-radius: 10rem;
-}
-.badge-success {
- color: #fff;
- background-color: #108548;
-}
-.badge-info {
- color: #fff;
- background-color: #1f75cb;
-}
-.badge-warning {
- color: #fff;
- background-color: #ab6100;
-}
-.rounded-circle {
- border-radius: 50% !important;
-}
-.d-none {
- display: none !important;
-}
-.d-block {
- display: block !important;
-}
-@media (min-width: 576px) {
- .d-sm-none {
- display: none !important;
- }
- .d-sm-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 768px) {
- .d-md-block {
- display: block !important;
- }
-}
-@media (min-width: 992px) {
- .d-lg-none {
- display: none !important;
- }
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border: 0;
-}
-.gl-avatar {
- display: inline-flex;
- border-width: 1px;
- border-style: solid;
- border-color: rgba(31, 30, 36, 0.08);
- overflow: hidden;
- flex-shrink: 0;
-}
-.gl-avatar-s24 {
- width: 1.5rem;
- height: 1.5rem;
- font-size: 0.75rem;
- line-height: 1rem;
- border-radius: 0.25rem;
-}
-.gl-avatar-circle {
- border-radius: 50%;
-}
-.gl-badge {
- display: inline-flex;
- align-items: center;
- font-size: 0.75rem;
- font-weight: 400;
- line-height: 1rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
-}
-.gl-badge.sm {
- padding-top: 0;
- padding-bottom: 0;
-}
-.gl-badge.badge-info {
- background-color: #cbe2f9;
- color: #0b5cad;
-}
-a.gl-badge.badge-info.active,
-a.gl-badge.badge-info:active {
- color: #033464;
- background-color: #9dc7f1;
-}
-a.gl-badge.badge-info:active {
- box-shadow: 0 0 0 1px #fff, 0 0 0 3px #428fdc;
- outline: none;
-}
-.gl-badge.badge-success {
- background-color: #c3e6cd;
- color: #24663b;
-}
-a.gl-badge.badge-success.active,
-a.gl-badge.badge-success:active {
- color: #0a4020;
- background-color: #91d4a8;
-}
-a.gl-badge.badge-success:active {
- box-shadow: 0 0 0 1px #fff, 0 0 0 3px #428fdc;
- outline: none;
-}
-.gl-badge.badge-warning {
- background-color: #f5d9a8;
- color: #8f4700;
-}
-a.gl-badge.badge-warning.active,
-a.gl-badge.badge-warning:active {
- color: #5c2900;
- background-color: #e9be74;
-}
-a.gl-badge.badge-warning:active {
- box-shadow: 0 0 0 1px #fff, 0 0 0 3px #428fdc;
- outline: none;
-}
-.gl-button .gl-badge {
- top: 0;
-}
-.gl-form-input,
-.gl-form-input.form-control {
- background-color: #fff;
- font-family: var(--default-regular-font, "GitLab Sans"), -apple-system,
- BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell,
- "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
- "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 0.875rem;
- line-height: 1rem;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- height: auto;
- color: #333238;
- box-shadow: inset 0 0 0 1px #89888d;
- border-style: none;
- appearance: none;
- -moz-appearance: none;
-}
-.gl-form-input:disabled,
-.gl-form-input:not(.form-control-plaintext):not([type="color"]):read-only,
-.gl-form-input.form-control:disabled,
-.gl-form-input.form-control:not(.form-control-plaintext):not([type="color"]):read-only {
- background-color: #fbfafd;
- box-shadow: inset 0 0 0 1px #dcdcde;
-}
-.gl-form-input:disabled,
-.gl-form-input.form-control:disabled {
- cursor: not-allowed;
- color: #737278;
-}
-.gl-form-input::placeholder,
-.gl-form-input.form-control::placeholder {
- color: #89888d;
-}
-.gl-icon {
- fill: currentColor;
-}
-.gl-icon.s12 {
- width: 12px;
- height: 12px;
-}
-.gl-icon.s16 {
- width: 16px;
- height: 16px;
-}
-.gl-icon.s32 {
- width: 32px;
- height: 32px;
-}
-.gl-link {
- font-size: 0.875rem;
- color: #1f75cb;
-}
-.gl-link:active {
- color: #0b5cad;
-}
-.gl-link:active {
- text-decoration: underline;
- outline: 2px solid #428fdc;
- outline-offset: 2px;
-}
-.gl-button {
- display: inline-flex;
-}
-.gl-button:not(.btn-link):active {
- text-decoration: none;
-}
-.gl-button.gl-button {
- border-width: 0;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- background-color: transparent;
- line-height: 1rem;
- color: #333238;
- fill: currentColor;
- box-shadow: inset 0 0 0 1px #bfbfc3;
- justify-content: center;
- align-items: center;
- font-size: 0.875rem;
- border-radius: 0.25rem;
-}
-.gl-button.gl-button .gl-button-text {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- padding-top: 1px;
- padding-bottom: 1px;
- margin-top: -1px;
- margin-bottom: -1px;
-}
-.gl-button.gl-button.btn-default {
- background-color: #fff;
-}
-.gl-button.gl-button.btn-default:active,
-.gl-button.gl-button.btn-default.active {
- box-shadow: inset 0 0 0 1px #626168, 0 0 0 1px #fff, 0 0 0 3px #428fdc;
- outline: none;
- background-color: #dcdcde;
-}
-.gl-button.gl-button.btn-default:active .gl-icon,
-.gl-button.gl-button.btn-default.active .gl-icon {
- color: #333238;
-}
-.gl-button.gl-button.btn-default .gl-icon {
- color: #737278;
-}
-.gl-search-box-by-type-search-icon {
- color: #737278;
- width: 1rem;
- position: absolute;
- left: 0.5rem;
- top: calc(50% - 16px / 2);
-}
-.gl-search-box-by-type {
- display: flex;
- position: relative;
-}
-.gl-search-box-by-type-input,
-.gl-search-box-by-type-input.gl-form-input {
- height: 2rem;
- padding-right: 2rem;
- padding-left: 1.75rem;
-}
-body {
- font-size: 0.875rem;
-}
-button,
-html [type="button"],
-[role="button"] {
- cursor: pointer;
-}
-strong {
- font-weight: bold;
-}
-svg {
- vertical-align: baseline;
-}
-.form-control {
- font-size: 0.875rem;
-}
-.hidden {
- display: none !important;
- visibility: hidden !important;
-}
-.badge:not(.gl-badge) {
- padding: 4px 5px;
- font-size: 12px;
- font-style: normal;
- font-weight: 400;
- display: inline-block;
-}
-.divider {
- height: 0;
- margin: 4px 0;
- overflow: hidden;
- border-top: 1px solid #dcdcde;
-}
-.toggle-sidebar-button .collapse-text,
-.toggle-sidebar-button .icon-chevron-double-lg-left {
- color: #737278;
-}
-html {
- overflow-y: scroll;
-}
-.layout-page {
- padding-top: calc(
- var(--header-height, 48px) +
- calc(var(--system-header-height) + var(--performance-bar-height))
- );
- padding-bottom: var(--system-footer-height);
-}
-@media (min-width: 576px) {
- .logged-out-marketing-header {
- --header-height: 72px;
- }
-}
-.btn {
- border-radius: 4px;
- font-size: 0.875rem;
- font-weight: 400;
- padding: 6px 10px;
- background-color: #fff;
- border-color: #dcdcde;
- color: #333238;
- color: #333238;
- white-space: nowrap;
-}
-.btn:active {
- background-color: #ececef;
- box-shadow: none;
-}
-.btn:active,
-.btn.active {
- background-color: #e6e6ea;
- border-color: #dedee3;
- color: #333238;
-}
-.btn svg {
- height: 15px;
- width: 15px;
-}
-.btn svg:not(:last-child) {
- margin-right: 5px;
-}
-.badge.badge-pill:not(.gl-badge) {
- font-weight: 400;
- background-color: rgba(0, 0, 0, 0.07);
- color: #535158;
- vertical-align: baseline;
-}
-:root {
- --performance-bar-height: 0px;
- --system-header-height: 0px;
- --top-bar-height: 0px;
- --system-footer-height: 0px;
- --mr-review-bar-height: 0px;
- --breakpoint-xs: 0;
- --breakpoint-sm: 576px;
- --breakpoint-md: 768px;
- --breakpoint-lg: 992px;
- --breakpoint-xl: 1200px;
-}
-.with-top-bar {
- --top-bar-height: 48px;
-}
-@media (min-width: 768px) {
- .page-with-contextual-sidebar {
- --application-bar-left: 56px;
- }
-}
-@media (min-width: 1200px) {
- .page-with-contextual-sidebar {
- --application-bar-left: 256px;
- }
- .page-with-icon-sidebar {
- --application-bar-left: 56px;
- }
- .page-with-super-sidebar {
- --application-bar-left: 256px;
- }
- .page-with-super-sidebar-collapsed {
- --application-bar-left: 0px;
- }
-}
-.gl-font-sm {
- font-size: 12px;
-}
-.dropdown {
- position: relative;
-}
-.dropdown-menu {
- display: none;
- position: absolute;
- width: auto;
- top: 100%;
- z-index: 300;
- min-width: 240px;
- max-width: 500px;
- margin-top: 4px;
- margin-bottom: 24px;
- font-size: 0.875rem;
- font-weight: 400;
- padding: 8px 0;
- background-color: #fff;
- border: 1px solid #dcdcde;
- border-radius: 0.25rem;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
-}
-.dropdown-menu ul {
- margin: 0;
- padding: 0;
-}
-.dropdown-menu li {
- display: block;
- text-align: left;
- list-style: none;
-}
-.dropdown-menu li > a,
-.dropdown-menu li > button {
- background: transparent;
- border: 0;
- border-radius: 0;
- box-shadow: none;
- display: block;
- font-weight: 400;
- position: relative;
- padding: 8px 12px;
- color: #333238;
- line-height: 16px;
- white-space: normal;
- overflow: hidden;
- text-align: left;
- width: 100%;
-}
-.dropdown-menu li > a:active,
-.dropdown-menu li > button:active {
- background-color: #ececef;
- color: #333238;
- outline: 0;
- text-decoration: none;
-}
-.dropdown-menu li > a:active,
-.dropdown-menu li > button:active {
- box-shadow: inset 0 0 0 2px #428fdc, inset 0 0 0 3px #fff,
- inset 0 0 0 1px #fff;
- outline: none;
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 0.25rem 0;
- padding: 0;
- background-color: #dcdcde;
-}
-.dropdown-menu .badge.badge-pill + span:not(.badge):not(.badge-pill) {
- margin-right: 40px;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab li.dropdown {
- position: static;
- }
- .navbar-gitlab li.dropdown.user-counter {
- margin-left: 8px !important;
- }
- .navbar-gitlab li.dropdown.user-counter > a {
- padding: 0 4px !important;
- }
- header.navbar-gitlab .dropdown .dropdown-menu {
- width: 100%;
- min-width: 100%;
- }
-}
-input {
- border-radius: 0.25rem;
- color: #333238;
- background-color: #fff;
-}
-input[type="search"] {
- appearance: textfield;
-}
-.form-control {
- border-radius: 4px;
- padding: 6px 10px;
-}
-.form-control::placeholder {
- color: #89888d;
-}
-kbd {
- display: inline-block;
- padding: 3px 5px;
- font-size: 0.75rem;
- line-height: 10px;
- color: var(--gray-700, #535158);
- vertical-align: unset;
- background-color: var(--gray-10, #fbfafd);
- border-width: 1px;
- border-style: solid;
- border-color: var(--gray-100, #dcdcde) var(--gray-100, #dcdcde)
- var(--gray-200, #bfbfc3);
- border-image: none;
- border-radius: 3px;
- box-shadow: 0 -1px 0 var(--gray-200, #bfbfc3) inset;
-}
-.navbar-gitlab {
- padding: 0 16px;
- z-index: 1000;
- margin-bottom: 0;
- min-height: var(--header-height, 48px);
- border: 0;
- position: fixed;
- top: calc(var(--system-header-height) + var(--performance-bar-height));
- left: 0;
- right: 0;
- border-radius: 0;
-}
-.navbar-gitlab .close-icon {
- display: none;
-}
-.navbar-gitlab .header-content {
- width: 100%;
- display: flex;
- justify-content: space-between;
- position: relative;
- min-height: var(--header-height, 48px);
- padding-left: 0;
-}
-.navbar-gitlab .header-content .title {
- padding-right: 0;
- color: currentColor;
- display: flex;
- position: relative;
- margin: 0;
- font-size: 18px;
- vertical-align: top;
- white-space: nowrap;
-}
-.navbar-gitlab .header-content .title img {
- height: 24px;
-}
-.navbar-gitlab .header-content .title a:not(.canary-badge) {
- display: flex;
- align-items: center;
- padding: 2px 8px;
- margin: 4px 2px 4px -8px;
- border-radius: 4px;
-}
-.navbar-gitlab .header-content .title a:not(.canary-badge):active {
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6), 0 0 0 3px #63a6e9;
- outline: none;
-}
-.navbar-gitlab .header-content .navbar-collapse > ul.nav > li:not(.d-none) {
- margin: 0 2px;
-}
-.navbar-gitlab .header-search-form {
- min-width: 320px;
-}
-@media (min-width: 768px) and (max-width: 1199.98px) {
- .navbar-gitlab .header-search-form {
- min-width: 200px;
- }
-}
-.navbar-gitlab .header-search-form .keyboard-shortcut-helper {
- transform: translateY(calc(50% - 2px));
- box-shadow: none;
- border-color: transparent;
-}
-.navbar-gitlab .navbar-collapse {
- flex: 0 0 auto;
- border-top: 0;
- padding: 0;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .navbar-collapse {
- flex: 1 1 auto;
- }
-}
-.navbar-gitlab .navbar-collapse .nav {
- flex-wrap: nowrap;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .navbar-collapse .nav > li:not(.d-none) a {
- margin-left: 0;
- }
-}
-.navbar-gitlab .container-fluid {
- padding: 0;
-}
-.navbar-gitlab .container-fluid .user-counter svg {
- margin-right: 3px;
-}
-.navbar-gitlab .container-fluid .navbar-toggler {
- position: relative;
- right: -10px;
- border-radius: 0;
- min-width: 45px;
- padding: 0;
- margin: 8px 8px 8px 0;
- font-size: 14px;
- text-align: center;
- color: currentColor;
-}
-.navbar-gitlab .container-fluid .navbar-toggler.active {
- color: currentColor;
- background-color: transparent;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .container-fluid .navbar-nav {
- display: flex;
- padding-right: 10px;
- flex-direction: row;
- }
-}
-.navbar-gitlab
- .container-fluid
- .navbar-nav
- li
- .badge.badge-pill:not(.gl-badge) {
- box-shadow: none;
- font-weight: 600;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .container-fluid .nav > li.header-user {
- padding-left: 10px;
- }
-}
-.navbar-gitlab .container-fluid .nav > li > a {
- will-change: color;
- margin: 4px 0;
- padding: 6px 8px;
- height: 32px;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .container-fluid .nav > li > a {
- padding: 0;
- }
-}
-.navbar-gitlab .container-fluid .nav > li > a.header-user-dropdown-toggle {
- margin-left: 2px;
-}
-.navbar-gitlab
- .container-fluid
- .nav
- > li
- > a.header-user-dropdown-toggle
- .header-user-avatar {
- margin-right: 0;
-}
-.navbar-gitlab .container-fluid .nav > li .header-new-dropdown-toggle {
- margin-right: 0;
-}
-.navbar-sub-nav > li > a,
-.navbar-sub-nav > li > button,
-.navbar-nav > li > a,
-.navbar-nav > li > button {
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 6px 8px;
- margin: 4px 2px;
- font-size: 12px;
- color: currentColor;
- border-radius: 4px;
- height: 32px;
- font-weight: 600;
-}
-.navbar-sub-nav > li > a:active,
-.navbar-sub-nav > li > button:active,
-.navbar-nav > li > a:active,
-.navbar-nav > li > button:active {
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6), 0 0 0 3px #63a6e9;
- outline: none;
-}
-.navbar-sub-nav > li .top-nav-toggle,
-.navbar-sub-nav > li > button,
-.navbar-nav > li .top-nav-toggle,
-.navbar-nav > li > button {
- background: transparent;
- border: 0;
-}
-.navbar-sub-nav .dropdown-menu,
-.navbar-nav .dropdown-menu {
- position: absolute;
-}
-.navbar-sub-nav {
- display: flex;
- align-items: center;
- height: 100%;
- margin: 0 0 0 6px;
-}
-.caret-down,
-.btn .caret-down {
- top: 0;
- height: 11px;
- width: 11px;
- margin-left: 4px;
- fill: currentColor;
-}
-.header-user .dropdown-menu,
-.header-new .dropdown-menu {
- margin-top: 4px;
-}
-@media (max-width: 575.98px) {
- .navbar-gitlab .container-fluid {
- font-size: 18px;
- }
- .navbar-gitlab .container-fluid .navbar-nav {
- table-layout: fixed;
- width: 100%;
- margin: 0;
- text-align: right;
- }
- .navbar-gitlab .container-fluid .navbar-collapse {
- margin-left: -8px;
- margin-right: -10px;
- }
- .navbar-gitlab .container-fluid .navbar-collapse .nav > li:not(.d-none) {
- flex: 1;
- }
- .header-user-dropdown-toggle {
- text-align: center;
- }
- .header-user-avatar {
- float: none;
- }
-}
-.header-user-avatar {
- float: left;
- margin-right: 5px;
- border-radius: 50%;
- border: 1px solid #f2f2f4;
-}
-.notification-dot {
- background-color: #d99530;
- height: 12px;
- width: 12px;
- pointer-events: none;
- visibility: hidden;
- top: 3px;
-}
-.tanuki-logo .tanuki {
- fill: #e24329;
-}
-.tanuki-logo .left-cheek,
-.tanuki-logo .right-cheek {
- fill: #fc6d26;
-}
-.tanuki-logo .chin {
- fill: #fca326;
-}
-.context-header {
- position: relative;
- margin-right: 2px;
- width: 256px;
-}
-.context-header > a,
-.context-header > button {
- font-weight: 600;
- display: flex;
- width: 100%;
- align-items: center;
- padding: 10px 16px 10px 10px;
- color: #333238;
- background-color: transparent;
- border: 0;
- text-align: left;
-}
-.context-header .avatar-container {
- flex: 0 0 32px;
- background-color: #fff;
-}
-.context-header .sidebar-context-title {
- overflow: hidden;
- text-overflow: ellipsis;
- color: #333238;
-}
-@media (min-width: 768px) {
- .page-with-contextual-sidebar {
- padding-left: 56px;
- }
-}
-@media (min-width: 1200px) {
- .page-with-contextual-sidebar {
- padding-left: 256px;
- }
-}
-@media (min-width: 768px) {
- .page-with-icon-sidebar {
- padding-left: 56px;
- }
-}
-.nav-sidebar {
- position: fixed;
- bottom: var(--system-footer-height);
- left: 0;
- z-index: 600;
- width: 256px;
- top: calc(
- var(--header-height, 48px) +
- calc(var(--system-header-height) + var(--performance-bar-height)) +
- var(--top-bar-height)
- );
- background-color: #fbfafd;
- border-right: 1px solid #e9e9e9;
- transform: translate3d(0, 0, 0);
-}
-.nav-sidebar.sidebar-collapsed-desktop {
- width: 56px;
-}
-.nav-sidebar.sidebar-collapsed-desktop .nav-sidebar-inner-scroll {
- overflow-x: hidden;
-}
-.nav-sidebar.sidebar-collapsed-desktop .badge.badge-pill:not(.fly-out-badge),
-.nav-sidebar.sidebar-collapsed-desktop .nav-item-name,
-.nav-sidebar.sidebar-collapsed-desktop .collapse-text {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
-}
-.nav-sidebar.sidebar-collapsed-desktop .sidebar-top-level-items > li > a {
- min-height: unset;
-}
-.nav-sidebar.sidebar-collapsed-desktop .fly-out-top-item:not(.divider) {
- display: block !important;
-}
-.nav-sidebar.sidebar-collapsed-desktop .avatar-container {
- margin: 0 auto;
-}
-.nav-sidebar.sidebar-collapsed-desktop li.active:not(.fly-out-top-item) > a {
- background-color: rgba(41, 41, 97, 0.08);
-}
-.nav-sidebar a {
- text-decoration: none;
- color: #333238;
-}
-.nav-sidebar li {
- white-space: nowrap;
-}
-.nav-sidebar li .nav-item-name {
- flex: 1;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.nav-sidebar li > a,
-.nav-sidebar li > .fly-out-top-item-container {
- height: 2rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- display: flex;
- align-items: center;
- border-radius: 0.25rem;
- width: auto;
- margin: 1px 8px;
-}
-.nav-sidebar li.active > a {
- font-weight: 600;
-}
-.nav-sidebar li.active:not(.fly-out-top-item) > a:not(.has-sub-items) {
- background-color: rgba(31, 30, 36, 0.08);
-}
-.nav-sidebar ul {
- padding-left: 0;
- list-style: none;
-}
-@media (max-width: 767.98px) {
- .nav-sidebar {
- left: -256px;
- }
-}
-.nav-sidebar .nav-icon-container {
- display: flex;
- margin-right: 8px;
-}
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item {
- display: none;
-}
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- a,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item.active
- a,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- .fly-out-top-item-container {
- margin-left: 0;
- margin-right: 0;
- padding-left: 1rem;
- padding-right: 1rem;
- cursor: default;
- pointer-events: none;
- font-size: 0.75rem;
- margin-top: -0.25rem;
- margin-bottom: -0.25rem;
- margin-top: 0;
- position: relative;
- color: #fff;
- background: var(--black, #000);
-}
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- a
- strong,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item.active
- a
- strong,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- .fly-out-top-item-container
- strong {
- font-weight: 400;
-}
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- a::before,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item.active
- a::before,
-.nav-sidebar
- a:not(.has-sub-items)
- + .sidebar-sub-level-items
- .fly-out-top-item
- .fly-out-top-item-container::before {
- position: absolute;
- content: "";
- display: block;
- top: 50%;
- left: -0.25rem;
- margin-top: -0.25rem;
- width: 0;
- height: 0;
- border-top: 0.25rem solid transparent;
- border-bottom: 0.25rem solid transparent;
- border-right: 0.25rem solid #000;
- border-right-color: var(--black, #000);
-}
-@media (min-width: 576px) {
- .nav-sidebar a.has-sub-items + .sidebar-sub-level-items {
- min-width: 150px;
- }
-}
-.nav-sidebar a.has-sub-items + .sidebar-sub-level-items .fly-out-top-item {
- display: none;
-}
-.nav-sidebar a.has-sub-items + .sidebar-sub-level-items .fly-out-top-item a,
-.nav-sidebar
- a.has-sub-items
- + .sidebar-sub-level-items
- .fly-out-top-item.active
- a,
-.nav-sidebar
- a.has-sub-items
- + .sidebar-sub-level-items
- .fly-out-top-item
- .fly-out-top-item-container {
- margin-left: 0;
- margin-right: 0;
- padding-left: 1rem;
- padding-right: 1rem;
- cursor: default;
- pointer-events: none;
- font-size: 0.75rem;
- margin-top: 0;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
-}
-@media (min-width: 768px) and (max-width: 1199px) {
- .nav-sidebar:not(.sidebar-expanded-mobile) {
- width: 56px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .nav-sidebar-inner-scroll {
- overflow-x: hidden;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- .badge.badge-pill:not(.fly-out-badge),
- .nav-sidebar:not(.sidebar-expanded-mobile) .nav-item-name,
- .nav-sidebar:not(.sidebar-expanded-mobile) .collapse-text {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-top-level-items > li > a {
- min-height: unset;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .fly-out-top-item:not(.divider) {
- display: block !important;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .avatar-container {
- margin: 0 auto;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- li.active:not(.fly-out-top-item)
- > a {
- background-color: rgba(41, 41, 97, 0.08);
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .context-header {
- height: 60px;
- width: 56px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .context-header a {
- padding: 10px 4px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-context-title {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .context-header {
- height: auto;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .context-header a {
- padding: 0.25rem;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- .sidebar-top-level-items
- > li
- .sidebar-sub-level-items:not(.flyout-list) {
- display: none;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .nav-icon-container {
- margin-right: 0;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button {
- width: 55px;
- padding: 0 21px;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- .toggle-sidebar-button
- .collapse-text {
- display: none;
- }
- .nav-sidebar:not(.sidebar-expanded-mobile)
- .toggle-sidebar-button
- .icon-chevron-double-lg-left {
- transform: rotate(180deg);
- margin: 0;
- }
-}
-.nav-sidebar-inner-scroll {
- height: 100%;
- width: 100%;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.nav-sidebar-inner-scroll > div.context-header {
- margin-top: 0.25rem;
-}
-.nav-sidebar-inner-scroll > div.context-header a {
- height: 2rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- display: flex;
- align-items: center;
- border-radius: 0.25rem;
- width: auto;
- margin: 1px 8px;
- padding: 0.25rem;
- margin-bottom: 0.25rem;
- margin-top: 0.125rem;
- height: auto;
-}
-.nav-sidebar-inner-scroll > div.context-header a .avatar-container {
- font-weight: 400;
- flex: none;
-}
-.sidebar-top-level-items {
- margin-bottom: 60px;
-}
-.sidebar-top-level-items .context-header a {
- padding: 0.25rem;
- margin-bottom: 0.25rem;
- margin-top: 0.125rem;
- height: auto;
-}
-.sidebar-top-level-items .context-header a .avatar-container {
- font-weight: 400;
- flex: none;
-}
-.sidebar-top-level-items
- > li.active
- .sidebar-sub-level-items:not(.is-fly-out-only) {
- display: block;
-}
-.sidebar-top-level-items li > a.gl-link {
- color: #333238;
-}
-.sidebar-top-level-items li > a.gl-link:active {
- text-decoration: none;
-}
-.sidebar-sub-level-items {
- padding-top: 0;
- padding-bottom: 0;
- display: none;
-}
-.sidebar-sub-level-items:not(.fly-out-list) li > a {
- padding-left: 2.25rem;
-}
-.toggle-sidebar-button,
-.close-nav-button {
- height: 48px;
- padding: 0 16px;
- background-color: #fbfafd;
- border: 0;
- color: #737278;
- display: flex;
- align-items: center;
- background-color: #fbfafd;
- position: fixed;
- bottom: 0;
- width: 255px;
-}
-.toggle-sidebar-button .collapse-text,
-.toggle-sidebar-button .icon-chevron-double-lg-left,
-.close-nav-button .collapse-text,
-.close-nav-button .icon-chevron-double-lg-left {
- color: inherit;
-}
-.collapse-text {
- white-space: nowrap;
- overflow: hidden;
-}
-.sidebar-collapsed-desktop .context-header {
- height: 60px;
- width: 56px;
-}
-.sidebar-collapsed-desktop .context-header a {
- padding: 10px 4px;
-}
-.sidebar-collapsed-desktop .sidebar-context-title {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
-}
-.sidebar-collapsed-desktop .context-header {
- height: auto;
-}
-.sidebar-collapsed-desktop .context-header a {
- padding: 0.25rem;
-}
-.sidebar-collapsed-desktop
- .sidebar-top-level-items
- > li
- .sidebar-sub-level-items:not(.flyout-list) {
- display: none;
-}
-.sidebar-collapsed-desktop .nav-icon-container {
- margin-right: 0;
-}
-.sidebar-collapsed-desktop .toggle-sidebar-button {
- width: 55px;
- padding: 0 21px;
-}
-.sidebar-collapsed-desktop .toggle-sidebar-button .collapse-text {
- display: none;
-}
-.sidebar-collapsed-desktop .toggle-sidebar-button .icon-chevron-double-lg-left {
- transform: rotate(180deg);
- margin: 0;
-}
-.close-nav-button {
- display: none;
-}
-@media (max-width: 767.98px) {
- .close-nav-button {
- display: flex;
- }
- .toggle-sidebar-button {
- display: none;
- }
-}
-.super-sidebar {
- display: flex;
- flex-direction: column;
- position: fixed;
- top: calc(
- var(--header-height, 48px) +
- calc(var(--system-header-height) + var(--performance-bar-height))
- );
- bottom: var(--system-footer-height);
- left: 0;
- background-color: var(--gray-10, #fbfafd);
- border-right: 1px solid rgba(31, 30, 36, 0.08);
- transform: translate3d(0, 0, 0);
- width: 256px;
- z-index: 600;
-}
-.super-sidebar.super-sidebar-loading {
- transform: translate3d(-100%, 0, 0);
-}
-@media (min-width: 1200px) {
- .super-sidebar.super-sidebar-loading {
- transform: translate3d(0, 0, 0);
- }
-}
-@media (prefers-reduced-motion: no-preference) {
-}
-.page-with-super-sidebar {
- padding-left: 0;
-}
-@media (prefers-reduced-motion: no-preference) {
-}
-@media (min-width: 1200px) {
- .page-with-super-sidebar {
- padding-left: 256px;
- }
-}
-.page-with-super-sidebar-collapsed .super-sidebar {
- transform: translate3d(-100%, 0, 0);
-}
-@media (min-width: 1200px) {
- .page-with-super-sidebar-collapsed {
- padding-left: 0;
- }
-}
-input::-moz-placeholder {
- color: #89888d;
- opacity: 1;
-}
-input::-ms-input-placeholder {
- color: #89888d;
-}
-input:-ms-input-placeholder {
- color: #89888d;
-}
-svg {
- fill: currentColor;
-}
-svg.s12 {
- width: 12px;
- height: 12px;
-}
-svg.s16 {
- width: 16px;
- height: 16px;
-}
-svg.s32 {
- width: 32px;
- height: 32px;
-}
-svg.s12 {
- vertical-align: -1px;
-}
-svg.s16 {
- vertical-align: -3px;
-}
-.avatar,
-.avatar-container {
- float: left;
- margin-right: 16px;
- border-radius: 50%;
-}
-.avatar.s16,
-.avatar-container.s16 {
- width: 16px;
- height: 16px;
- margin-right: 8px;
-}
-.avatar.s32,
-.avatar-container.s32 {
- width: 32px;
- height: 32px;
- margin-right: 8px;
-}
-.avatar {
- transition-property: none;
- width: 40px;
- height: 40px;
- padding: 0;
- background: #fefefe;
- overflow: hidden;
- box-shadow: inset 0 0 0 1px rgba(31, 30, 36, 0.1);
-}
-.avatar.avatar-tile {
- border-radius: 0;
- border: 0;
-}
-.identicon {
- text-align: center;
- vertical-align: top;
- color: #333238;
- background-color: #ececef;
-}
-.identicon.s16 {
- font-size: 10px;
- line-height: 16px;
-}
-.identicon.s32 {
- font-size: 14px;
- line-height: 32px;
-}
-.identicon.bg1 {
- background-color: #fcf1ef;
-}
-.identicon.bg2 {
- background-color: #f4f0ff;
-}
-.identicon.bg3 {
- background-color: #f1f1ff;
-}
-.identicon.bg4 {
- background-color: #e9f3fc;
-}
-.identicon.bg5 {
- background-color: #ecf4ee;
-}
-.identicon.bg6 {
- background-color: #fdf1dd;
-}
-.identicon.bg7 {
- background-color: #ececef;
-}
-.avatar-container {
- overflow: hidden;
- display: flex;
-}
-.avatar-container a {
- width: 100%;
- height: 100%;
- display: flex;
- text-decoration: none;
-}
-.avatar-container .avatar {
- border-radius: 0;
- border: 0;
- height: auto;
- width: 100%;
- margin: 0;
- align-self: center;
-}
-.rect-avatar {
- border-radius: 2px;
-}
-.rect-avatar.s16 {
- border-radius: 2px;
-}
-.rect-avatar.s16 .avatar {
- border-radius: 2px;
-}
-.rect-avatar.s32 {
- border-radius: 4px;
-}
-.rect-avatar.s32 .avatar {
- border-radius: 4px;
-}
-
-.tab-width-8 {
- tab-size: 8;
-}
-.gl-sr-only {
- border: 0;
- clip: rect(0, 0, 0, 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- white-space: nowrap;
- width: 1px;
-}
-.gl-border-none\! {
- border-style: none !important;
-}
-.gl-display-none {
- display: none;
-}
-.gl-display-flex {
- display: flex;
-}
-@media (min-width: 992px) {
- .gl-lg-display-flex {
- display: flex;
- }
-}
-@media (min-width: 576px) {
- .gl-sm-display-block {
- display: block;
- }
-}
-@media (min-width: 992px) {
- .gl-lg-display-block {
- display: block;
- }
-}
-.gl-align-items-center {
- align-items: center;
-}
-.gl-align-items-stretch {
- align-items: stretch;
-}
-.gl-flex-grow-0\! {
- flex-grow: 0 !important;
-}
-.gl-flex-grow-1 {
- flex-grow: 1;
-}
-.gl-flex-basis-half\! {
- flex-basis: 50% !important;
-}
-.gl-justify-content-end {
- justify-content: flex-end;
-}
-.gl-relative {
- position: relative;
-}
-.gl-absolute {
- position: absolute;
-}
-.gl-top-0 {
- top: 0;
-}
-.gl-right-3 {
- right: 0.5rem;
-}
-.gl-w-full {
- width: 100%;
-}
-.gl-px-3 {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
-}
-.gl-pr-2 {
- padding-right: 0.25rem;
-}
-.gl-pt-0 {
- padding-top: 0;
-}
-.gl-mr-auto {
- margin-right: auto;
-}
-.gl-mr-3 {
- margin-right: 0.5rem;
-}
-.gl-ml-n2 {
- margin-left: -0.25rem;
-}
-.gl-ml-3 {
- margin-left: 0.5rem;
-}
-.gl-mx-0\! {
- margin-left: 0 !important;
- margin-right: 0 !important;
-}
-.gl-text-right {
- text-align: right;
-}
-.gl-white-space-nowrap {
- white-space: nowrap;
-}
-.gl-font-sm {
- font-size: 0.75rem;
-}
-.gl-font-weight-bold {
- font-weight: 600;
-}
-.gl-z-index-1 {
- z-index: 1;
-}
-
-@import "startup/cloaking";
-@include cloak-startup-scss(none);
diff --git a/app/assets/stylesheets/startup/startup-signin.scss b/app/assets/stylesheets/startup/startup-signin.scss
deleted file mode 100644
index 32da8e1bb6b..00000000000
--- a/app/assets/stylesheets/startup/startup-signin.scss
+++ /dev/null
@@ -1,852 +0,0 @@
-// DO NOT EDIT! This is auto-generated from "yarn run generate:startup_css"
-// Please see the feedback issue for more details and help:
-// https://gitlab.com/gitlab-org/gitlab/-/issues/331812
-@charset "UTF-8";
-:root {
- --white: #fff;
-}
-*,
-*::before,
-*::after {
- box-sizing: border-box;
-}
-html {
- font-family: sans-serif;
- line-height: 1.15;
-}
-header {
- display: block;
-}
-body {
- margin: 0;
- font-family: var(--default-regular-font, "GitLab Sans"), -apple-system,
- BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell,
- "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
- "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #333238;
- text-align: left;
- background-color: #fff;
-}
-hr {
- box-sizing: content-box;
- height: 0;
- overflow: visible;
-}
-h1,
-h3 {
- margin-top: 0;
- margin-bottom: 0.25rem;
-}
-p {
- margin-top: 0;
- margin-bottom: 1rem;
-}
-a {
- color: #1f75cb;
- text-decoration: none;
- background-color: transparent;
-}
-a:not([href]):not([class]) {
- color: inherit;
- text-decoration: none;
-}
-img {
- vertical-align: middle;
- border-style: none;
-}
-svg {
- overflow: hidden;
- vertical-align: middle;
-}
-label {
- display: inline-block;
- margin-bottom: 0.5rem;
-}
-button {
- border-radius: 0;
-}
-input,
-button {
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-button,
-input {
- overflow: visible;
-}
-button {
- text-transform: none;
-}
-button:not(:disabled),
-[type="submit"]:not(:disabled) {
- cursor: pointer;
-}
-button::-moz-focus-inner,
-[type="submit"]::-moz-focus-inner {
- padding: 0;
- border-style: none;
-}
-input[type="checkbox"] {
- box-sizing: border-box;
- padding: 0;
-}
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0;
-}
-[hidden] {
- display: none !important;
-}
-h1,
-h3 {
- margin-bottom: 0.25rem;
- font-weight: 600;
- line-height: 1.2;
- color: #333238;
-}
-h1 {
- font-size: 2.1875rem;
-}
-h3 {
- font-size: 1.53125rem;
-}
-hr {
- margin-top: 0.5rem;
- margin-bottom: 0.5rem;
- border: 0;
- border-top: 1px solid rgba(0, 0, 0, 0.1);
-}
-.container {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-@media (min-width: 576px) {
- .container {
- max-width: 540px;
- }
-}
-@media (min-width: 768px) {
- .container {
- max-width: 720px;
- }
-}
-@media (min-width: 992px) {
- .container {
- max-width: 960px;
- }
-}
-@media (min-width: 1200px) {
- .container {
- max-width: 1140px;
- }
-}
-.row {
- display: flex;
- flex-wrap: wrap;
- margin-right: -15px;
- margin-left: -15px;
-}
-.col-md-6,
-.col-sm-12 {
- position: relative;
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
-}
-.order-1 {
- order: 1;
-}
-.order-12 {
- order: 12;
-}
-@media (min-width: 576px) {
- .col-sm-12 {
- flex: 0 0 100%;
- max-width: 100%;
- }
- .order-sm-1 {
- order: 1;
- }
- .order-sm-12 {
- order: 12;
- }
-}
-@media (min-width: 768px) {
- .col-md-6 {
- flex: 0 0 50%;
- max-width: 50%;
- }
-}
-.form-control {
- display: block;
- width: 100%;
- height: 32px;
- padding: 0.375rem 0.75rem;
- font-size: 0.875rem;
- font-weight: 400;
- line-height: 1.5;
- color: #333238;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid #89888d;
- border-radius: 0.25rem;
-}
-@media (prefers-reduced-motion: reduce) {
-}
-.form-control::placeholder {
- color: #626168;
- opacity: 1;
-}
-.form-control:disabled {
- background-color: #fbfafd;
- opacity: 1;
-}
-.form-group {
- margin-bottom: 1rem;
-}
-.form-text {
- display: block;
- margin-top: 0.25rem;
-}
-.btn {
- display: inline-block;
- font-weight: 400;
- color: #333238;
- text-align: center;
- vertical-align: middle;
- user-select: none;
- background-color: transparent;
- border: 1px solid transparent;
- padding: 0.375rem 0.75rem;
- font-size: 1rem;
- line-height: 20px;
- border-radius: 0.25rem;
-}
-@media (prefers-reduced-motion: reduce) {
-}
-.btn:disabled {
- opacity: 0.65;
-}
-.btn:not(:disabled):not(.disabled) {
- cursor: pointer;
-}
-fieldset:disabled a.btn {
- pointer-events: none;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 0.5rem;
-}
-input.btn-block[type="submit"] {
- width: 100%;
-}
-.custom-control {
- position: relative;
- z-index: 1;
- display: block;
- min-height: 1.5rem;
- padding-left: 1.5rem;
- print-color-adjust: exact;
-}
-.custom-control-input {
- position: absolute;
- left: 0;
- z-index: -1;
- width: 1rem;
- height: 1.25rem;
- opacity: 0;
-}
-.custom-control-input:checked ~ .custom-control-label::before {
- color: #fff;
- border-color: #007bff;
- background-color: #007bff;
-}
-.custom-control-input:not(:disabled):active ~ .custom-control-label::before {
- color: #fff;
- background-color: #b3d7ff;
- border-color: #b3d7ff;
-}
-.custom-control-input:disabled ~ .custom-control-label {
- color: #626168;
-}
-.custom-control-input:disabled ~ .custom-control-label::before {
- background-color: #fbfafd;
-}
-.custom-control-label {
- position: relative;
- margin-bottom: 0;
- vertical-align: top;
-}
-.custom-control-label::before {
- position: absolute;
- top: 0.25rem;
- left: -1.5rem;
- display: block;
- width: 1rem;
- height: 1rem;
- pointer-events: none;
- content: "";
- background-color: #fff;
- border: 1px solid #737278;
-}
-.custom-control-label::after {
- position: absolute;
- top: 0.25rem;
- left: -1.5rem;
- display: block;
- width: 1rem;
- height: 1rem;
- content: "";
- background: 50% / 50% 50% no-repeat;
-}
-.custom-checkbox .custom-control-label::before {
- border-radius: 0.25rem;
-}
-.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e");
-}
-.custom-checkbox
- .custom-control-input:indeterminate
- ~ .custom-control-label::before {
- border-color: #007bff;
- background-color: #007bff;
-}
-.custom-checkbox
- .custom-control-input:indeterminate
- ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e");
-}
-.custom-checkbox
- .custom-control-input:disabled:checked
- ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5);
-}
-.custom-checkbox
- .custom-control-input:disabled:indeterminate
- ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5);
-}
-@media (prefers-reduced-motion: reduce) {
-}
-.tab-content > .tab-pane {
- display: none;
-}
-.tab-content > .active {
- display: block;
-}
-.navbar {
- position: relative;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: space-between;
- padding: 0.25rem 0.5rem;
-}
-.navbar .container {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: space-between;
-}
-.fixed-top {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1030;
-}
-.mt-3 {
- margin-top: 1rem !important;
-}
-.mb-3 {
- margin-bottom: 1rem !important;
-}
-.text-nowrap {
- white-space: nowrap !important;
-}
-.font-weight-normal {
- font-weight: 400 !important;
-}
-.gl-form-input,
-.gl-form-input.form-control {
- background-color: #fff;
- font-family: var(--default-regular-font, "GitLab Sans"), -apple-system,
- BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell,
- "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
- "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 0.875rem;
- line-height: 1rem;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- height: auto;
- color: #333238;
- box-shadow: inset 0 0 0 1px #89888d;
- border-style: none;
- appearance: none;
- -moz-appearance: none;
-}
-.gl-form-input:disabled,
-.gl-form-input:not(.form-control-plaintext):not([type="color"]):read-only,
-.gl-form-input.form-control:disabled,
-.gl-form-input.form-control:not(.form-control-plaintext):not([type="color"]):read-only {
- background-color: #fbfafd;
- box-shadow: inset 0 0 0 1px #dcdcde;
-}
-.gl-form-input:disabled,
-.gl-form-input.form-control:disabled {
- cursor: not-allowed;
- color: #737278;
-}
-.gl-form-input::placeholder,
-.gl-form-input.form-control::placeholder {
- color: #89888d;
-}
-.gl-form-checkbox {
- font-size: 0.875rem;
- line-height: 1rem;
- color: #333238;
-}
-.gl-form-checkbox .custom-control-input:disabled,
-.gl-form-checkbox .custom-control-input:disabled ~ .custom-control-label {
- cursor: not-allowed;
- color: #89888d;
-}
-.gl-form-checkbox.custom-control {
- padding-left: 1rem;
-}
-.gl-form-checkbox.custom-control .custom-control-input ~ .custom-control-label {
- cursor: pointer;
- padding-left: 0.5rem;
- margin-bottom: 0.5rem;
-}
-.gl-form-checkbox.custom-control
- .custom-control-input
- ~ .custom-control-label::before,
-.gl-form-checkbox.custom-control
- .custom-control-input
- ~ .custom-control-label::after {
- top: 0;
- left: -1rem;
-}
-.gl-form-checkbox.custom-control
- .custom-control-input
- ~ .custom-control-label::before {
- background-color: #fff;
- border-color: #89888d;
-}
-.gl-form-checkbox.custom-control
- .custom-control-input:checked
- ~ .custom-control-label::before {
- background-color: #1f75cb;
- border-color: #1f75cb;
-}
-.gl-form-checkbox.custom-control
- .custom-control-input[type="checkbox"]:checked
- ~ .custom-control-label::after,
-.gl-form-checkbox.custom-control
- .custom-control-input[type="checkbox"]:indeterminate
- ~ .custom-control-label::after {
- background: none;
- background-color: #fff;
- mask-repeat: no-repeat;
- mask-position: center center;
-}
-.gl-form-checkbox.custom-control
- .custom-control-input[type="checkbox"]:checked
- ~ .custom-control-label::after {
- mask-image: url('data:image/svg+xml,%3Csvg width="8" height="7" viewBox="0 0 8 7" fill="none" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M1 3.05299L2.99123 5L7 1" stroke="white" stroke-width="2"/%3E%3C/svg%3E%0A');
-}
-.gl-form-checkbox.custom-control
- .custom-control-input[type="checkbox"]:indeterminate
- ~ .custom-control-label::after {
- mask-image: url('data:image/svg+xml,%3Csvg width="8" height="2" viewBox="0 0 8 2" fill="none" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M0 1L8 1" stroke="white" stroke-width="2"/%3E%3C/svg%3E%0A');
-}
-.gl-form-checkbox.custom-control.custom-checkbox
- .custom-control-input:indeterminate
- ~ .custom-control-label::before {
- background-color: #1f75cb;
- border-color: #1f75cb;
-}
-.gl-form-checkbox.custom-control
- .custom-control-input:disabled
- ~ .custom-control-label {
- cursor: not-allowed;
-}
-.gl-form-checkbox.custom-control
- .custom-control-input:disabled
- ~ .custom-control-label::before {
- background-color: #ececef;
- border-color: #dcdcde;
- pointer-events: auto;
-}
-.gl-form-checkbox.custom-control
- .custom-control-input:checked:disabled
- ~ .custom-control-label::before,
-.gl-form-checkbox.custom-control
- .custom-control-input[type="checkbox"]:indeterminate:disabled
- ~ .custom-control-label::before {
- background-color: #dcdcde;
- border-color: #dcdcde;
-}
-.gl-form-checkbox.custom-control
- .custom-control-input:checked:disabled
- ~ .custom-control-label::after,
-.gl-form-checkbox.custom-control
- .custom-control-input[type="checkbox"]:indeterminate:disabled
- ~ .custom-control-label::after {
- background-color: #737278;
-}
-.gl-button {
- display: inline-flex;
-}
-.gl-button:not(.btn-link):active {
- text-decoration: none;
-}
-.gl-button.gl-button,
-.gl-button.gl-button.btn-block {
- border-width: 0;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- background-color: transparent;
- line-height: 1rem;
- color: #333238;
- fill: currentColor;
- box-shadow: inset 0 0 0 1px #bfbfc3;
- justify-content: center;
- align-items: center;
- font-size: 0.875rem;
- border-radius: 0.25rem;
-}
-.gl-button.gl-button .gl-button-text,
-.gl-button.gl-button.btn-block .gl-button-text {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- padding-top: 1px;
- padding-bottom: 1px;
- margin-top: -1px;
- margin-bottom: -1px;
-}
-.gl-button.gl-button .gl-button-icon,
-.gl-button.gl-button.btn-block .gl-button-icon {
- height: 1rem;
- width: 1rem;
- flex-shrink: 0;
- margin-right: 0.25rem;
- top: auto;
-}
-.gl-button.gl-button.btn-default,
-.gl-button.gl-button.btn-block.btn-default {
- background-color: #fff;
-}
-.gl-button.gl-button.btn-default:active,
-.gl-button.gl-button.btn-default.active,
-.gl-button.gl-button.btn-block.btn-default:active,
-.gl-button.gl-button.btn-block.btn-default.active {
- box-shadow: inset 0 0 0 1px #626168, 0 0 0 1px #fff, 0 0 0 3px #428fdc;
- outline: none;
- background-color: #dcdcde;
-}
-.gl-button.gl-button.btn-confirm,
-.gl-button.gl-button.btn-block.btn-confirm {
- color: #fff;
-}
-.gl-button.gl-button.btn-confirm,
-.gl-button.gl-button.btn-block.btn-confirm {
- background-color: #1f75cb;
- box-shadow: inset 0 0 0 1px #1068bf;
-}
-.gl-button.gl-button.btn-confirm:active,
-.gl-button.gl-button.btn-confirm.active,
-.gl-button.gl-button.btn-block.btn-confirm:active,
-.gl-button.gl-button.btn-block.btn-confirm.active {
- box-shadow: inset 0 0 0 1px #033464, 0 0 0 1px #fff, 0 0 0 3px #428fdc;
- outline: none;
- background-color: #0b5cad;
-}
-body {
- font-size: 0.875rem;
-}
-button,
-[type="submit"] {
- cursor: pointer;
-}
-h1,
-h3 {
- margin-top: 20px;
- margin-bottom: 10px;
-}
-hr {
- overflow: hidden;
-}
-svg {
- vertical-align: baseline;
-}
-.form-control {
- font-size: 0.875rem;
-}
-.hidden {
- display: none !important;
- visibility: hidden !important;
-}
-html {
- overflow-y: scroll;
-}
-body.navless {
- background-color: #fff !important;
-}
-.container {
- padding-top: 0;
- z-index: 5;
-}
-.container .content {
- margin: 0;
-}
-@media (max-width: 575.98px) {
- .container .content {
- margin-top: 20px;
- }
-}
-.btn {
- border-radius: 4px;
- font-size: 0.875rem;
- font-weight: 400;
- padding: 6px 10px;
- background-color: #fff;
- border-color: #dcdcde;
- color: #333238;
- color: #333238;
- white-space: nowrap;
-}
-.btn:active {
- background-color: #ececef;
- box-shadow: none;
-}
-.btn:active,
-.btn.active {
- background-color: #e6e6ea;
- border-color: #dedee3;
- color: #333238;
-}
-.btn svg {
- height: 15px;
- width: 15px;
-}
-.btn svg:not(:last-child) {
- margin-right: 5px;
-}
-.btn-block {
- width: 100%;
- margin: 0;
-}
-.btn-block.btn {
- padding: 6px 0;
-}
-:root {
- --performance-bar-height: 0px;
- --system-header-height: 0px;
- --top-bar-height: 0px;
- --system-footer-height: 0px;
- --mr-review-bar-height: 0px;
- --breakpoint-xs: 0;
- --breakpoint-sm: 576px;
- --breakpoint-md: 768px;
- --breakpoint-lg: 992px;
- --breakpoint-xl: 1200px;
-}
-.tab-content {
- overflow: visible;
-}
-@media (max-width: 767.98px) {
- .tab-content {
- isolation: isolate;
- }
-}
-hr {
- margin: 1.5rem 0;
- border-top: 1px solid #ececef;
-}
-.flash-container {
- margin: 0;
- margin-bottom: 16px;
- font-size: 14px;
- position: relative;
- z-index: 1;
-}
-.flash-container.sticky {
- position: sticky;
- top: calc(
- var(--header-height, 48px) +
- calc(var(--system-header-height) + var(--performance-bar-height)) +
- var(--top-bar-height)
- );
- z-index: 251;
-}
-.flash-container.flash-container-page {
- margin-bottom: 0;
-}
-.flash-container:empty {
- margin: 0;
-}
-input {
- border-radius: 0.25rem;
- color: #333238;
- background-color: #fff;
-}
-label {
- font-weight: 600;
-}
-label.custom-control-label {
- font-weight: 400;
-}
-.form-control {
- border-radius: 4px;
- padding: 6px 10px;
-}
-.form-control::placeholder {
- color: #89888d;
-}
-.gl-show-field-errors .form-control:not(textarea) {
- height: 32px;
-}
-.navbar-empty {
- justify-content: center;
- height: var(--header-height, 48px);
- background: #fff;
- border-bottom: 1px solid #dcdcde;
-}
-.navbar-empty .tanuki-logo,
-.navbar-empty .brand-header-logo {
- max-height: 100%;
-}
-.tanuki-logo .tanuki {
- fill: #e24329;
-}
-.tanuki-logo .left-cheek,
-.tanuki-logo .right-cheek {
- fill: #fc6d26;
-}
-.tanuki-logo .chin {
- fill: #fca326;
-}
-input::-moz-placeholder {
- color: #89888d;
- opacity: 1;
-}
-input::-ms-input-placeholder {
- color: #89888d;
-}
-input:-ms-input-placeholder {
- color: #89888d;
-}
-svg {
- fill: currentColor;
-}
-
-.fixed-top {
- top: calc(var(--system-header-height) + var(--performance-bar-height));
-}
-.gl-display-flex {
- display: flex;
-}
-.gl-align-items-center {
- align-items: center;
-}
-.gl-flex-wrap {
- flex-wrap: wrap;
-}
-.gl-justify-content-space-between {
- justify-content: space-between;
-}
-.gl-align-self-end {
- align-self: flex-end;
-}
-.gl-w-10 {
- width: 3.5rem;
-}
-.gl-w-half {
- width: 50%;
-}
-.gl-w-full {
- width: 100%;
-}
-@media (max-width: 575.98px) {
- .gl-xs-w-full {
- width: 100%;
- }
-}
-.gl-h-full {
- height: 100%;
-}
-.gl-p-5 {
- padding: 1rem;
-}
-.gl-px-5 {
- padding-left: 1rem;
- padding-right: 1rem;
-}
-.gl-py-5 {
- padding-top: 1rem;
- padding-bottom: 1rem;
-}
-.gl-m-0 {
- margin: 0;
-}
-.gl-mt-3 {
- margin-top: 0.5rem;
-}
-.gl-mt-5 {
- margin-top: 1rem;
-}
-.gl-mr-auto {
- margin-right: auto;
-}
-.gl-mb-2 {
- margin-bottom: 0.25rem;
-}
-.gl-mb-3 {
- margin-bottom: 0.5rem;
-}
-.gl-ml-auto {
- margin-left: auto;
-}
-.gl-gap-5 {
- gap: 1rem;
-}
-@media (min-width: 576px) {
- .gl-sm-mt-0 {
- margin-top: 0;
- }
-}
-.gl-text-center {
- text-align: center;
-}
-.gl-text-right {
- text-align: right;
-}
-.gl-font-size-h2 {
- font-size: 1.1875rem;
-}
-.gl-font-weight-bold {
- font-weight: 600;
-}
-
-@import "startup/cloaking";
-@include cloak-startup-scss(none);
diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb
index 036ea45cc78..cd2db2dad2c 100644
--- a/app/controllers/projects/pipelines_controller.rb
+++ b/app/controllers/projects/pipelines_controller.rb
@@ -18,7 +18,8 @@ class Projects::PipelinesController < Projects::ApplicationController
before_action :authorize_read_build!, only: [:index, :show]
before_action :authorize_read_ci_cd_analytics!, only: [:charts]
before_action :authorize_create_pipeline!, only: [:new, :create]
- before_action :authorize_update_pipeline!, only: [:retry, :cancel]
+ before_action :authorize_update_pipeline!, only: [:retry]
+ before_action :authorize_cancel_pipeline!, only: [:cancel]
before_action :ensure_pipeline, only: [:show, :downloadable_artifacts]
before_action :reject_if_build_artifacts_size_refreshing!, only: [:destroy]
@@ -303,6 +304,10 @@ class Projects::PipelinesController < Projects::ApplicationController
return access_denied! unless can?(current_user, :update_pipeline, @pipeline)
end
+ def authorize_cancel_pipeline!
+ return access_denied! unless can?(current_user, :cancel_pipeline, @pipeline)
+ end
+
def limited_pipelines_count(project, scope = nil)
finder = Ci::PipelinesFinder.new(project, current_user, index_params.merge(scope: scope))
diff --git a/app/finders/packages/pypi/packages_finder.rb b/app/finders/packages/pypi/packages_finder.rb
index 17138134eb3..944824bee6e 100644
--- a/app/finders/packages/pypi/packages_finder.rb
+++ b/app/finders/packages/pypi/packages_finder.rb
@@ -3,6 +3,8 @@
module Packages
module Pypi
class PackagesFinder < ::Packages::GroupOrProjectPackageFinder
+ extend ::Gitlab::Utils::Override
+
def execute
return packages unless @params[:package_name]
@@ -14,6 +16,15 @@ module Packages
def packages
base.pypi.has_version
end
+
+ override :group_packages
+ def group_packages
+ packages_visible_to_user(
+ @current_user,
+ within_group: @project_or_group,
+ with_package_registry_enabled: true
+ )
+ end
end
end
end
diff --git a/app/graphql/mutations/ci/pipeline/cancel.rb b/app/graphql/mutations/ci/pipeline/cancel.rb
index 810f458fd75..1014462d0b1 100644
--- a/app/graphql/mutations/ci/pipeline/cancel.rb
+++ b/app/graphql/mutations/ci/pipeline/cancel.rb
@@ -6,7 +6,7 @@ module Mutations
class Cancel < Base
graphql_name 'PipelineCancel'
- authorize :update_pipeline
+ authorize :cancel_pipeline
def resolve(id:)
pipeline = authorized_find!(id: id)
diff --git a/app/graphql/types/abuse_report_type.rb b/app/graphql/types/abuse_report_type.rb
index 012e709cdb5..2532530cfa9 100644
--- a/app/graphql/types/abuse_report_type.rb
+++ b/app/graphql/types/abuse_report_type.rb
@@ -3,9 +3,18 @@
module Types
class AbuseReportType < BaseObject
graphql_name 'AbuseReport'
+
+ implements Types::Notes::NoteableInterface
+
description 'An abuse report'
+
authorize :read_abuse_report
+ expose_permissions Types::PermissionTypes::AbuseReport
+
+ field :id, Types::GlobalIDType[::AbuseReport],
+ null: false, description: 'Global ID of the abuse report.'
+
field :labels, ::Types::LabelType.connection_type,
null: true, description: 'Labels of the abuse report.'
end
diff --git a/app/graphql/types/notes/noteable_interface.rb b/app/graphql/types/notes/noteable_interface.rb
index 9971511d6ce..7c75f213e24 100644
--- a/app/graphql/types/notes/noteable_interface.rb
+++ b/app/graphql/types/notes/noteable_interface.rb
@@ -21,6 +21,8 @@ module Types
Types::DesignManagement::DesignType
when ::AlertManagement::Alert
Types::AlertManagement::AlertType
+ when AbuseReport
+ Types::AbuseReportType
else
raise "Unknown GraphQL type for #{object}"
end
diff --git a/app/graphql/types/permission_types/abuse_report.rb b/app/graphql/types/permission_types/abuse_report.rb
new file mode 100644
index 00000000000..abd5d545d02
--- /dev/null
+++ b/app/graphql/types/permission_types/abuse_report.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+module Types
+ module PermissionTypes
+ class AbuseReport < BasePermissionType
+ graphql_name 'AbuseReportPermissions'
+
+ abilities :read_abuse_report, :create_note
+ end
+ end
+end
diff --git a/app/models/abuse_report.rb b/app/models/abuse_report.rb
index 872dedf07b1..de6b644c536 100644
--- a/app/models/abuse_report.rb
+++ b/app/models/abuse_report.rb
@@ -139,11 +139,11 @@ class AbuseReport < ApplicationRecord
def reported_content
case report_type
when :issue
- project.issues.iid_in(route_hash[:id]).pick(:description_html)
+ reported_project.issues.iid_in(route_hash[:id]).pick(:description_html)
when :merge_request
- project.merge_requests.iid_in(route_hash[:id]).pick(:description_html)
+ reported_project.merge_requests.iid_in(route_hash[:id]).pick(:description_html)
when :comment
- project.notes.id_in(note_id_from_url).pick(:note_html)
+ reported_project.notes.id_in(note_id_from_url).pick(:note_html)
end
end
@@ -157,13 +157,19 @@ class AbuseReport < ApplicationRecord
user.abuse_reports.open.by_category(category).id_not_in(id).includes(:reporter)
end
+ # createNote mutation calls noteable.project,
+ # which in case of abuse reports is nil
+ def project
+ nil
+ end
+
private
- def project
+ def reported_project
Project.find_by_full_path(route_hash.values_at(:namespace_id, :project_id).join('/'))
end
- def group
+ def reported_group
Group.find_by_full_path(route_hash[:group_id])
end
diff --git a/app/models/ci/catalog/components_project.rb b/app/models/ci/catalog/components_project.rb
index 2bc33a6f050..783a2d358c5 100644
--- a/app/models/ci/catalog/components_project.rb
+++ b/app/models/ci/catalog/components_project.rb
@@ -10,6 +10,7 @@ module Ci
TEMPLATE_FILE = 'template.yml'
TEMPLATES_DIR = 'templates'
TEMPLATE_PATH_REGEX = '^templates\/\w+\-?\w+(?:\/template)?\.yml$'
+ COMPONENTS_LIMIT = 10
ComponentData = Struct.new(:content, :path, keyword_init: true)
@@ -18,8 +19,8 @@ module Ci
@sha = sha
end
- def fetch_component_paths(sha)
- project.repository.search_files_by_regexp(TEMPLATE_PATH_REGEX, sha)
+ def fetch_component_paths(sha, limit: COMPONENTS_LIMIT)
+ project.repository.search_files_by_regexp(TEMPLATE_PATH_REGEX, sha, limit: limit)
end
def extract_component_name(path)
diff --git a/app/policies/abuse_report_policy.rb b/app/policies/abuse_report_policy.rb
index f1f994e6a42..043dbd0cb89 100644
--- a/app/policies/abuse_report_policy.rb
+++ b/app/policies/abuse_report_policy.rb
@@ -3,5 +3,6 @@
class AbuseReportPolicy < ::BasePolicy
rule { admin }.policy do
enable :read_abuse_report
+ enable :create_note
end
end
diff --git a/app/policies/ci/pipeline_policy.rb b/app/policies/ci/pipeline_policy.rb
index 1d60b1e79de..bd6e580c33a 100644
--- a/app/policies/ci/pipeline_policy.rb
+++ b/app/policies/ci/pipeline_policy.rb
@@ -45,6 +45,15 @@ module Ci
enable :read_pipeline_variable
end
+ # TODO: splitting out cancel from update in Issue #20207
+ rule { can?(:update_pipeline) }.policy do
+ enable :cancel_pipeline
+ end
+
+ rule { ~can?(:update_pipeline) }.policy do
+ prevent :cancel_pipeline
+ end
+
rule { project_allows_read_dependency }.policy do
enable :read_dependency
end
diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb
index 28ba819cb60..74d2272b670 100644
--- a/app/policies/project_policy.rb
+++ b/app/policies/project_policy.rb
@@ -511,6 +511,7 @@ class ProjectPolicy < BasePolicy
rule { can?(:developer_access) & user_confirmed? }.policy do
enable :create_pipeline
enable :update_pipeline
+ enable :cancel_pipeline
enable :create_pipeline_schedule
end
@@ -651,6 +652,7 @@ class ProjectPolicy < BasePolicy
# - We prevent the user from accessing Pipelines
rule { (builds_disabled & ~internal_builds_disabled) | repository_disabled }.policy do
prevent(*create_read_update_admin_destroy(:pipeline))
+ prevent :cancel_pipeline
prevent(*create_read_update_admin_destroy(:commit_status))
end
diff --git a/app/serializers/ci/pipeline_entity.rb b/app/serializers/ci/pipeline_entity.rb
index 832ca619edc..4ff56c67d13 100644
--- a/app/serializers/ci/pipeline_entity.rb
+++ b/app/serializers/ci/pipeline_entity.rb
@@ -106,7 +106,7 @@ class Ci::PipelineEntity < Grape::Entity
end
def can_cancel?
- can?(request.current_user, :update_pipeline, pipeline) &&
+ can?(request.current_user, :cancel_pipeline, pipeline) &&
pipeline.cancelable?
end
diff --git a/app/services/ci/cancel_pipeline_service.rb b/app/services/ci/cancel_pipeline_service.rb
index 0fd63768400..52d38520fc3 100644
--- a/app/services/ci/cancel_pipeline_service.rb
+++ b/app/services/ci/cancel_pipeline_service.rb
@@ -24,7 +24,7 @@ module Ci
end
def execute
- unless can?(current_user, :update_pipeline, pipeline)
+ unless can?(current_user, :cancel_pipeline, pipeline)
return ServiceResponse.error(
message: 'Insufficient permissions to cancel the pipeline',
reason: :insufficient_permissions)
diff --git a/app/services/ci/catalog/resources/validate_service.rb b/app/services/ci/catalog/resources/validate_service.rb
index 9e8986ba6fc..186b1699d03 100644
--- a/app/services/ci/catalog/resources/validate_service.rb
+++ b/app/services/ci/catalog/resources/validate_service.rb
@@ -4,7 +4,7 @@ module Ci
module Catalog
module Resources
class ValidateService
- attr_reader :project
+ MINIMUM_AMOUNT_OF_COMPONENTS = 1
def initialize(project, ref)
@project = project
@@ -13,30 +13,38 @@ module Ci
end
def execute
- check_project_readme
- check_project_description
+ verify_presence_project_readme
+ verify_presence_project_description
+ scan_directory_for_components
if errors.empty?
ServiceResponse.success
else
- ServiceResponse.error(message: errors.join(' , '))
+ ServiceResponse.error(message: errors.join(', '))
end
end
private
- attr_reader :ref, :errors
+ attr_reader :project, :ref, :errors
- def check_project_description
+ def verify_presence_project_readme
+ return if project_has_readme?
+
+ errors << 'Project must have a README'
+ end
+
+ def verify_presence_project_description
return if project.description.present?
errors << 'Project must have a description'
end
- def check_project_readme
- return if project_has_readme?
+ def scan_directory_for_components
+ return if Ci::Catalog::ComponentsProject.new(project).fetch_component_paths(ref,
+ limit: MINIMUM_AMOUNT_OF_COMPONENTS).any?
- errors << 'Project must have a README'
+ errors << 'Project must contain components'
end
def project_has_readme?
diff --git a/app/views/admin/application_settings/_usage.html.haml b/app/views/admin/application_settings/_usage.html.haml
index 7f90db73468..dd9820d064a 100644
--- a/app/views/admin/application_settings/_usage.html.haml
+++ b/app/views/admin/application_settings/_usage.html.haml
@@ -13,7 +13,7 @@
.form-group
- can_be_configured = @application_setting.usage_ping_can_be_configured?
- service_ping_link_start = link_start % { url: help_page_path('development/internal_analytics/service_ping/index') }
- - deactivating_service_ping_link_start = link_start % { url: help_page_path('administration/settings/usage_statistics', anchor: 'disable-usage-statistics-with-the-configuration-file') }
+ - deactivating_service_ping_link_start = link_start % { url: help_page_path('administration/settings/usage_statistics', anchor: 'through-the-configuration-file') }
- usage_ping_help_text = s_('AdminSettings|To help improve GitLab and its user experience, GitLab periodically collects usage information. %{link_start}What information is shared with GitLab Inc.?%{link_end}').html_safe % { link_start: service_ping_link_start, link_end: link_end }
- disabled_help_text = s_('AdminSettings|Service ping is disabled in your configuration file, and cannot be enabled through this form. For more information, see the documentation on %{link_start}deactivating service ping%{link_end}.').html_safe % { link_start: deactivating_service_ping_link_start, link_end: link_end }
= f.gitlab_ui_checkbox_component :usage_ping_enabled, s_('AdminSettings|Enable Service Ping'),