chore: environment highlight colour schema update (#4464)
Co-authored-by: jamesgeorge007 <25279263+jamesgeorge007@users.noreply.github.com>
This commit is contained in:
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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']
|
||||||
|
|||||||
@@ -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 = (
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
|
}
|
||||||
@@ -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" },
|
||||||
|
|||||||
Reference in New Issue
Block a user