From cd9ac9d6cf9a65474d7ede7443c60fd462dab799 Mon Sep 17 00:00:00 2001 From: kotaindah55 Date: Tue, 4 Mar 2025 17:01:04 +0200 Subject: [PATCH] feat: add some utilities to handle highlight color customization --- .../createCSSRuleFromColorConfig.ts | 8 ++++++++ src/color-management/createColorConfig.ts | 5 +++++ src/color-management/getDefaultColorConfigs.ts | 15 +++++++++++++++ src/color-management/index.ts | 4 ++++ src/color-management/takeBuiltinColor.ts | 3 +++ 5 files changed, 35 insertions(+) create mode 100644 src/color-management/createCSSRuleFromColorConfig.ts create mode 100644 src/color-management/createColorConfig.ts create mode 100644 src/color-management/getDefaultColorConfigs.ts create mode 100644 src/color-management/index.ts create mode 100644 src/color-management/takeBuiltinColor.ts diff --git a/src/color-management/createCSSRuleFromColorConfig.ts b/src/color-management/createCSSRuleFromColorConfig.ts new file mode 100644 index 0000000..cbef08b --- /dev/null +++ b/src/color-management/createCSSRuleFromColorConfig.ts @@ -0,0 +1,8 @@ +import { ColorConfig } from "src/types"; + +export function createCSSRuleFromColorConfig(config: ColorConfig) { + let selector = `.cm-custom-highlight-${config.tag}, .markdown-rendered mark.custom-highlight-${config.tag}, .menu-item-${config.tag}>.menu-item-title`, + prop = "background-color", + color = config.color; + return `${selector}{${prop}:color(from ${color} srgb r g b/var(--hl-opacity));}` +} \ No newline at end of file diff --git a/src/color-management/createColorConfig.ts b/src/color-management/createColorConfig.ts new file mode 100644 index 0000000..d6ff834 --- /dev/null +++ b/src/color-management/createColorConfig.ts @@ -0,0 +1,5 @@ +import { ColorConfig } from "src/types"; + +export function createColorConfig(tag: string, color: string, name: string, showInMenu = true): ColorConfig { + return { tag, color, name, showInMenu } +} \ No newline at end of file diff --git a/src/color-management/getDefaultColorConfigs.ts b/src/color-management/getDefaultColorConfigs.ts new file mode 100644 index 0000000..fc20c99 --- /dev/null +++ b/src/color-management/getDefaultColorConfigs.ts @@ -0,0 +1,15 @@ +import { ColorConfig } from "src/types"; +import { takeBuiltinColor } from "src/color-management"; + +export function getDefaultColorConfigs() { + let configs: ColorConfig[] = [], + predefinedTags = ["red", "orange", "yellow", "green", "cyan", "blue", "purple", "pink"], + predefinedNames = ["Red", "Orange", "Yellow", "Green", "Cyan", "Blue", "Purple", "Pink"]; + for (let i = 0; i < predefinedTags.length; i++) { + let tag = predefinedTags[i], + name = predefinedNames[i], + color = takeBuiltinColor(tag) ?? "#ffffff"; + configs.push({ tag, name, color, showInMenu: true }); + } + return configs; +} \ No newline at end of file diff --git a/src/color-management/index.ts b/src/color-management/index.ts new file mode 100644 index 0000000..aa9a771 --- /dev/null +++ b/src/color-management/index.ts @@ -0,0 +1,4 @@ +export * from "./createCSSRuleFromColorConfig"; +export * from "./takeBuiltinColor"; +export * from "./getDefaultColorConfigs"; +export * from "./createColorConfig"; \ No newline at end of file diff --git a/src/color-management/takeBuiltinColor.ts b/src/color-management/takeBuiltinColor.ts new file mode 100644 index 0000000..7d740d3 --- /dev/null +++ b/src/color-management/takeBuiltinColor.ts @@ -0,0 +1,3 @@ +export function takeBuiltinColor(color: string) { + return document.body.computedStyleMap().get(`--color-${color}`)?.toString(); +} \ No newline at end of file