chore: environment highlight colour schema update (#4464)

Co-authored-by: jamesgeorge007 <25279263+jamesgeorge007@users.noreply.github.com>
This commit is contained in:
Nivedin
2024-10-25 13:01:38 +05:30
committed by GitHub
parent 8dc471f33f
commit c72ded2251
6 changed files with 88 additions and 29 deletions

View File

@@ -560,9 +560,24 @@ details[open] summary .indicator {
} }
} }
.env-highlight { .env-highlight,
@apply text-accentContrast; .predefined-variable-highlight {
// forcing the text colour to be white inside a higlighted environment variable and predefined variable
@apply text-accentContrast #{!important};
span {
@apply text-accentContrast #{!important};
}
// setting the text colour to be visible when it's selected and common item is highlighted
.cm-selectionMatch {
@apply text-secondaryDark #{!important};
span {
@apply text-secondaryDark #{!important};
}
}
}
.env-highlight {
&.request-variable-highlight { &.request-variable-highlight {
@apply bg-amber-500; @apply bg-amber-500;
@apply hover:bg-amber-600; @apply hover:bg-amber-600;
@@ -584,6 +599,18 @@ details[open] summary .indicator {
} }
} }
.predefined-variable-highlight {
&.predefined-variable-valid {
@apply bg-yellow-500;
@apply hover:bg-yellow-600;
}
&.predefined-variable-invalid {
@apply hover:bg-red-300;
@apply bg-red-300;
}
}
#nprogress .bar { #nprogress .bar {
@apply bg-accent #{!important}; @apply bg-accent #{!important};
} }
@@ -609,17 +636,3 @@ details[open] summary .indicator {
.gql-operation-highlight { .gql-operation-highlight {
@apply opacity-100; @apply opacity-100;
} }
.predefined-variable-highlight {
color: inherit;
&.predefined-variable-valid {
@apply bg-yellow-500;
@apply hover:bg-yellow-600;
}
&.predefined-variable-invalid {
@apply hover:bg-red-300;
@apply bg-red-300;
}
}

View File

@@ -183,8 +183,10 @@ declare module 'vue' {
IconLucideLayers: typeof import('~icons/lucide/layers')['default'] IconLucideLayers: typeof import('~icons/lucide/layers')['default']
IconLucideListEnd: typeof import('~icons/lucide/list-end')['default'] IconLucideListEnd: typeof import('~icons/lucide/list-end')['default']
IconLucideMinus: typeof import('~icons/lucide/minus')['default'] IconLucideMinus: typeof import('~icons/lucide/minus')['default']
IconLucideRss: typeof import('~icons/lucide/rss')['default']
IconLucideSearch: typeof import('~icons/lucide/search')['default'] IconLucideSearch: typeof import('~icons/lucide/search')['default']
IconLucideUsers: typeof import('~icons/lucide/users')['default'] IconLucideUsers: typeof import('~icons/lucide/users')['default']
IconLucideVerified: typeof import('~icons/lucide/verified')['default']
IconLucideX: typeof import('~icons/lucide/x')['default'] IconLucideX: typeof import('~icons/lucide/x')['default']
ImportExportBase: typeof import('./components/importExport/Base.vue')['default'] ImportExportBase: typeof import('./components/importExport/Base.vue')['default']
ImportExportImportExportList: typeof import('./components/importExport/ImportExportList.vue')['default'] ImportExportImportExportList: typeof import('./components/importExport/ImportExportList.vue')['default']

View File

@@ -1,4 +1,3 @@
import { watch, Ref } from "vue"
import { Compartment } from "@codemirror/state" import { Compartment } from "@codemirror/state"
import { import {
Decoration, Decoration,
@@ -7,9 +6,13 @@ import {
ViewPlugin, ViewPlugin,
hoverTooltip, hoverTooltip,
} from "@codemirror/view" } from "@codemirror/view"
import * as E from "fp-ts/Either"
import { parseTemplateStringE } from "@hoppscotch/data"
import { StreamSubscriberFunc } from "@composables/stream" import { StreamSubscriberFunc } from "@composables/stream"
import { parseTemplateStringE } from "@hoppscotch/data"
import * as E from "fp-ts/Either"
import { Ref, watch } from "vue"
import { invokeAction } from "~/helpers/actions"
import { getService } from "~/modules/dioc"
import { import {
AggregateEnvironment, AggregateEnvironment,
aggregateEnvsWithSecrets$, aggregateEnvsWithSecrets$,
@@ -17,13 +20,12 @@ import {
getCurrentEnvironment, getCurrentEnvironment,
getSelectedEnvironmentType, getSelectedEnvironmentType,
} from "~/newstore/environments" } from "~/newstore/environments"
import { invokeAction } from "~/helpers/actions" import { SecretEnvironmentService } from "~/services/secret-environment.service"
import { RESTTabService } from "~/services/tab/rest"
import IconEdit from "~icons/lucide/edit?raw"
import IconUser from "~icons/lucide/user?raw" import IconUser from "~icons/lucide/user?raw"
import IconUsers from "~icons/lucide/users?raw" import IconUsers from "~icons/lucide/users?raw"
import IconEdit from "~icons/lucide/edit?raw" import { isComment } from "./helpers"
import { SecretEnvironmentService } from "~/services/secret-environment.service"
import { getService } from "~/modules/dioc"
import { RESTTabService } from "~/services/tab/rest"
const HOPP_ENVIRONMENT_REGEX = /(<<[a-zA-Z0-9-_]+>>)/g const HOPP_ENVIRONMENT_REGEX = /(<<[a-zA-Z0-9-_]+>>)/g
@@ -66,6 +68,10 @@ const filterNonEmptyEnvironmentVariables = (
const cursorTooltipField = (aggregateEnvs: AggregateEnvironment[]) => const cursorTooltipField = (aggregateEnvs: AggregateEnvironment[]) =>
hoverTooltip( hoverTooltip(
(view, pos, side) => { (view, pos, side) => {
// Check if the current position is inside a comment then disable the tooltip
if (isComment(view.state, pos)) {
return null
}
const { from, to, text } = view.state.doc.lineAt(pos) const { from, to, text } = view.state.doc.lineAt(pos)
// TODO: When Codemirror 6 allows this to work (not make the // TODO: When Codemirror 6 allows this to work (not make the
@@ -163,7 +169,10 @@ const cursorTooltipField = (aggregateEnvs: AggregateEnvironment[]) =>
invokeActionType = "modals.my.environment.edit" invokeActionType = "modals.my.environment.edit"
} }
if (tooltipEnv?.sourceEnv === "RequestVariable") { if (
tooltipEnv?.sourceEnv === "RequestVariable" &&
restTabs.currentActiveTab.value.document.type === "request"
) {
restTabs.currentActiveTab.value.document.optionTabPreference = restTabs.currentActiveTab.value.document.optionTabPreference =
"requestVariables" "requestVariables"
} else { } else {
@@ -229,7 +238,13 @@ function checkEnv(env: string, aggregateEnvs: AggregateEnvironment[]) {
const getMatchDecorator = (aggregateEnvs: AggregateEnvironment[]) => const getMatchDecorator = (aggregateEnvs: AggregateEnvironment[]) =>
new MatchDecorator({ new MatchDecorator({
regexp: HOPP_ENVIRONMENT_REGEX, regexp: HOPP_ENVIRONMENT_REGEX,
decoration: (m) => checkEnv(m[0], aggregateEnvs), decoration: (m, view, pos) => {
// Check if the current position is inside a comment then disable the highlight
if (isComment(view.state, pos)) {
return null
}
return checkEnv(m[0], aggregateEnvs)
},
}) })
export const environmentHighlightStyle = ( export const environmentHighlightStyle = (

View File

@@ -5,9 +5,11 @@ import {
ViewPlugin, ViewPlugin,
hoverTooltip, hoverTooltip,
} from "@codemirror/view" } from "@codemirror/view"
import IconSquareAsterisk from "~icons/lucide/square-asterisk?raw"
import { HOPP_SUPPORTED_PREDEFINED_VARIABLES } from "@hoppscotch/data" import { HOPP_SUPPORTED_PREDEFINED_VARIABLES } from "@hoppscotch/data"
import IconSquareAsterisk from "~icons/lucide/square-asterisk?raw"
import { isComment } from "./helpers"
const HOPP_PREDEFINED_VARIABLES_REGEX = /(<<\$[a-zA-Z0-9-_]+>>)/g const HOPP_PREDEFINED_VARIABLES_REGEX = /(<<\$[a-zA-Z0-9-_]+>>)/g
const HOPP_PREDEFINED_VARIABLE_HIGHLIGHT = const HOPP_PREDEFINED_VARIABLE_HIGHLIGHT =
@@ -18,13 +20,23 @@ const HOPP_PREDEFINED_VARIABLE_HIGHLIGHT_INVALID = "predefined-variable-invalid"
const getMatchDecorator = () => { const getMatchDecorator = () => {
return new MatchDecorator({ return new MatchDecorator({
regexp: HOPP_PREDEFINED_VARIABLES_REGEX, regexp: HOPP_PREDEFINED_VARIABLES_REGEX,
decoration: (m) => checkPredefinedVariable(m[0]), decoration: (m, view, pos) => {
// Don't highlight if the cursor is inside a comment
if (isComment(view.state, pos)) {
return null
}
return checkPredefinedVariable(m[0])
},
}) })
} }
const cursorTooltipField = () => const cursorTooltipField = () =>
hoverTooltip( hoverTooltip(
(view, pos, side) => { (view, pos, side) => {
// Don't show tooltip if the cursor is inside a comment
if (isComment(view.state, pos)) {
return null
}
const { from, to, text } = view.state.doc.lineAt(pos) const { from, to, text } = view.state.doc.lineAt(pos)
// TODO: When Codemirror 6 allows this to work (not make the // TODO: When Codemirror 6 allows this to work (not make the

View File

@@ -0,0 +1,14 @@
import { syntaxTree } from "@codemirror/language"
import { EditorState } from "@codemirror/state"
/**
* Check if the cursor is inside a comment
* @param state Editor state
* @param pos Position of the cursor
* @return Boolean value indicating if the cursor is inside a comment
*/
export const isComment = (state: EditorState, pos: number) => {
const tree = syntaxTree(state)
const { name } = tree.resolveInner(pos)
return name.endsWith("Comment") || name.endsWith("comment")
}

View File

@@ -377,7 +377,10 @@ export const baseHighlightStyle = HighlightStyle.define([
], ],
color: editorOperatorColor, color: editorOperatorColor,
}, },
{ tag: [t.meta, t.comment], color: editorMetaColor }, {
tag: [t.meta, t.comment],
color: editorMetaColor,
},
{ tag: t.strong, fontWeight: "bold" }, { tag: t.strong, fontWeight: "bold" },
{ tag: t.emphasis, fontStyle: "italic" }, { tag: t.emphasis, fontStyle: "italic" },
{ tag: t.strikethrough, textDecoration: "line-through" }, { tag: t.strikethrough, textDecoration: "line-through" },