custom-electron-titlebar 4.2.8 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -12
- package/index.d.mts +684 -0
- package/index.d.ts +684 -3
- package/index.js +5207 -175
- package/index.js.map +1 -0
- package/index.mjs +5219 -0
- package/index.mjs.map +1 -0
- package/main/index.d.mts +21 -0
- package/main/index.d.ts +21 -3
- package/main/index.js +793 -175
- package/main/index.js.map +1 -0
- package/main/index.mjs +785 -0
- package/main/index.mjs.map +1 -0
- package/package.json +40 -32
- package/base/browser/browser.d.ts +0 -26
- package/base/browser/browser.js +0 -317
- package/base/browser/event.d.ts +0 -12
- package/base/browser/event.js +0 -215
- package/base/browser/keyboardEvent.d.ts +0 -38
- package/base/browser/keyboardEvent.js +0 -462
- package/base/browser/mouseEvent.d.ts +0 -61
- package/base/browser/mouseEvent.js +0 -327
- package/base/browser/touch.d.ts +0 -39
- package/base/browser/touch.js +0 -454
- package/base/common/arrays.d.ts +0 -10
- package/base/common/arrays.js +0 -210
- package/base/common/async.d.ts +0 -35
- package/base/common/async.js +0 -280
- package/base/common/charCode.d.ts +0 -405
- package/base/common/charCode.js +0 -9
- package/base/common/color.d.ts +0 -159
- package/base/common/color.js +0 -708
- package/base/common/decorators.d.ts +0 -6
- package/base/common/decorators.js +0 -300
- package/base/common/dom.d.ts +0 -221
- package/base/common/dom.js +0 -1476
- package/base/common/event.d.ts +0 -213
- package/base/common/event.js +0 -804
- package/base/common/iterator.d.ts +0 -69
- package/base/common/iterator.js +0 -380
- package/base/common/keyCodes.d.ts +0 -478
- package/base/common/keyCodes.js +0 -477
- package/base/common/lifecycle.d.ts +0 -17
- package/base/common/lifecycle.js +0 -258
- package/base/common/linkedList.d.ts +0 -17
- package/base/common/linkedList.js +0 -319
- package/base/common/platform.d.ts +0 -36
- package/base/common/platform.js +0 -314
- package/base/common/strings.d.ts +0 -23
- package/base/common/strings.js +0 -273
- package/consts.d.ts +0 -58
- package/consts.js +0 -317
- package/main/attach-titlebar-to-window.d.ts +0 -3
- package/main/attach-titlebar-to-window.js +0 -210
- package/main/setup-titlebar.d.ts +0 -2
- package/main/setup-titlebar.js +0 -255
- package/menubar/index.d.ts +0 -86
- package/menubar/index.js +0 -1119
- package/menubar/menu/index.d.ts +0 -46
- package/menubar/menu/index.js +0 -565
- package/menubar/menu/item.d.ts +0 -67
- package/menubar/menu/item.js +0 -575
- package/menubar/menu/separator.d.ts +0 -11
- package/menubar/menu/separator.js +0 -213
- package/menubar/menu/submenu.d.ts +0 -32
- package/menubar/menu/submenu.js +0 -372
- package/menubar/menubar-options.d.ts +0 -47
- package/menubar/menubar-options.js +0 -9
- package/titlebar/index.d.ts +0 -105
- package/titlebar/index.js +0 -703
- package/titlebar/options.d.ts +0 -89
- package/titlebar/options.js +0 -9
- package/titlebar/themebar.d.ts +0 -20
- package/titlebar/themebar.js +0 -267
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/main/index.ts","../../src/base/common/color.ts","../../src/base/common/platform.ts","../../src/consts.ts","../../src/main/attach-titlebar-to-window.ts","../../src/main/setup-titlebar.ts","../../src/types/ipc-contract.ts","../../src/titlebar/theme-config.ts"],"sourcesContent":["/* ---------------------------------------------------------------------------------------------\n * Copyright (c) AlexTorresDev. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *-------------------------------------------------------------------------------------------- */\n\nimport attachTitlebarToWindow from './attach-titlebar-to-window'\nimport type { AttachTitlebarToWindowOptions } from './attach-titlebar-to-window'\nimport setupTitlebar, { setThemeConfig } from './setup-titlebar'\nimport { BrowserWindow } from 'electron'\nimport * as fs from 'fs/promises'\nimport { normalizeThemeConfig } from 'titlebar/theme-config'\n\nexport interface SetupAndAttachTitlebarOptions extends AttachTitlebarToWindowOptions {\n\tsetupGlobal?: boolean\n}\n\nexport async function setupTitlebarAndAttachToWindow(browserWindow: BrowserWindow, options: SetupAndAttachTitlebarOptions = {}) {\n\tif (options.setupGlobal !== false) {\n\t\tsetupTitlebar()\n\t}\n\n\t// Load theme config from file if path provided\n\tif (options.themeConfigPath) {\n\t\ttry {\n\t\t\tconst raw = await fs.readFile(options.themeConfigPath, 'utf8')\n\t\t\tconst parsed = JSON.parse(raw)\n\t\t\tconst normalized = normalizeThemeConfig(parsed)\n\t\t\tif (normalized.warnings.length) {\n\t\t\t\tconsole.warn(`[custom-electron-titlebar] Theme config from ${options.themeConfigPath}:`, normalized.warnings.join('; '))\n\t\t\t}\n\t\t\tif (normalized.config) {\n\t\t\t\tsetThemeConfig(normalized.config)\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(`[custom-electron-titlebar] Failed to load theme config from ${options.themeConfigPath}:`, err)\n\t\t}\n\t}\n\n\treturn attachTitlebarToWindow(browserWindow, options)\n}\n\nexport {\n\tsetupTitlebar,\n\tattachTitlebarToWindow\n}\n\nexport type {\n\tAttachTitlebarToWindowOptions\n}\n","/* ---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *-------------------------------------------------------------------------------------------- */\n\n/* eslint-disable no-inner-declarations */\n/* eslint-disable indent */\n\nimport { CharCode } from 'base/common/charCode'\n\nfunction roundFloat(number: number, decimalPoints: number): number {\n\tconst decimal = Math.pow(10, decimalPoints)\n\treturn Math.round(number * decimal) / decimal\n}\n\nexport class RGBA {\n\t/**\n\t * Red: integer in [0-255]\n\t */\n\treadonly r: number\n\n\t/**\n\t * Green: integer in [0-255]\n\t */\n\treadonly g: number\n\n\t/**\n\t * Blue: integer in [0-255]\n\t */\n\treadonly b: number\n\n\t/**\n\t * Alpha: float in [0-1]\n\t */\n\treadonly a: number\n\n\tconstructor(r: number, g: number, b: number, a = 1) {\n\t\tthis.r = Math.min(255, Math.max(0, r)) | 0\n\t\tthis.g = Math.min(255, Math.max(0, g)) | 0\n\t\tthis.b = Math.min(255, Math.max(0, b)) | 0\n\t\tthis.a = roundFloat(Math.max(Math.min(1, a), 0), 3)\n\t}\n\n\tstatic equals(a: RGBA, b: RGBA): boolean {\n\t\treturn a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a\n\t}\n}\n\nexport class HSLA {\n\t/**\n\t * Hue: integer in [0, 360]\n\t */\n\treadonly h: number\n\n\t/**\n\t * Saturation: float in [0, 1]\n\t */\n\treadonly s: number\n\n\t/**\n\t * Luminosity: float in [0, 1]\n\t */\n\treadonly l: number\n\n\t/**\n\t * Alpha: float in [0, 1]\n\t */\n\treadonly a: number\n\n\tconstructor(h: number, s: number, l: number, a: number) {\n\t\tthis.h = Math.max(Math.min(360, h), 0) | 0\n\t\tthis.s = roundFloat(Math.max(Math.min(1, s), 0), 3)\n\t\tthis.l = roundFloat(Math.max(Math.min(1, l), 0), 3)\n\t\tthis.a = roundFloat(Math.max(Math.min(1, a), 0), 3)\n\t}\n\n\tstatic equals(a: HSLA, b: HSLA): boolean {\n\t\treturn a.h === b.h && a.s === b.s && a.l === b.l && a.a === b.a\n\t}\n\n\t/**\n\t * Converts an RGB color value to HSL. Conversion formula\n\t * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n\t * Assumes r, g, and b are contained in the set [0, 255] and\n\t * returns h in the set [0, 360], s, and l in the set [0, 1].\n\t */\n\tstatic fromRGBA(rgba: RGBA): HSLA {\n\t\tconst r = rgba.r / 255\n\t\tconst g = rgba.g / 255\n\t\tconst b = rgba.b / 255\n\t\tconst a = rgba.a\n\n\t\tconst max = Math.max(r, g, b)\n\t\tconst min = Math.min(r, g, b)\n\t\tlet h = 0\n\t\tlet s = 0\n\t\tconst l = (min + max) / 2\n\t\tconst chroma = max - min\n\n\t\tif (chroma > 0) {\n\t\t\ts = Math.min((l <= 0.5 ? chroma / (2 * l) : chroma / (2 - (2 * l))), 1)\n\n\t\t\tswitch (max) {\n\t\t\t\tcase r: h = (g - b) / chroma + (g < b ? 6 : 0); break\n\t\t\t\tcase g: h = (b - r) / chroma + 2; break\n\t\t\t\tcase b: h = (r - g) / chroma + 4; break\n\t\t\t}\n\n\t\t\th *= 60\n\t\t\th = Math.round(h)\n\t\t}\n\t\treturn new HSLA(h, s, l, a)\n\t}\n\n\tprivate static _hue2rgb(p: number, q: number, t: number): number {\n\t\tif (t < 0) {\n\t\t\tt += 1\n\t\t}\n\t\tif (t > 1) {\n\t\t\tt -= 1\n\t\t}\n\t\tif (t < 1 / 6) {\n\t\t\treturn p + (q - p) * 6 * t\n\t\t}\n\t\tif (t < 1 / 2) {\n\t\t\treturn q\n\t\t}\n\t\tif (t < 2 / 3) {\n\t\t\treturn p + (q - p) * (2 / 3 - t) * 6\n\t\t}\n\t\treturn p\n\t}\n\n\t/**\n\t * Converts an HSL color value to RGB. Conversion formula\n\t * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n\t * Assumes h in the set [0, 360] s, and l are contained in the set [0, 1] and\n\t * returns r, g, and b in the set [0, 255].\n\t */\n\tstatic toRGBA(hsla: HSLA): RGBA {\n\t\tconst h = hsla.h / 360\n\t\tconst { s, l, a } = hsla\n\t\tlet r: number, g: number, b: number\n\n\t\tif (s === 0) {\n\t\t\tr = g = b = l // achromatic\n\t\t} else {\n\t\t\tconst q = l < 0.5 ? l * (1 + s) : l + s - l * s\n\t\t\tconst p = 2 * l - q\n\t\t\tr = HSLA._hue2rgb(p, q, h + 1 / 3)\n\t\t\tg = HSLA._hue2rgb(p, q, h)\n\t\t\tb = HSLA._hue2rgb(p, q, h - 1 / 3)\n\t\t}\n\n\t\treturn new RGBA(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), a)\n\t}\n}\n\nexport class HSVA {\n\t/**\n\t * Hue: integer in [0, 360]\n\t */\n\treadonly h: number\n\n\t/**\n\t * Saturation: float in [0, 1]\n\t */\n\treadonly s: number\n\n\t/**\n\t * Value: float in [0, 1]\n\t */\n\treadonly v: number\n\n\t/**\n\t * Alpha: float in [0, 1]\n\t */\n\treadonly a: number\n\n\tconstructor(h: number, s: number, v: number, a: number) {\n\t\tthis.h = Math.max(Math.min(360, h), 0) | 0\n\t\tthis.s = roundFloat(Math.max(Math.min(1, s), 0), 3)\n\t\tthis.v = roundFloat(Math.max(Math.min(1, v), 0), 3)\n\t\tthis.a = roundFloat(Math.max(Math.min(1, a), 0), 3)\n\t}\n\n\tstatic equals(a: HSVA, b: HSVA): boolean {\n\t\treturn a.h === b.h && a.s === b.s && a.v === b.v && a.a === b.a\n\t}\n\n\t// from http://www.rapidtables.com/convert/color/rgb-to-hsv.htm\n\tstatic fromRGBA(rgba: RGBA): HSVA {\n\t\tconst r = rgba.r / 255\n\t\tconst g = rgba.g / 255\n\t\tconst b = rgba.b / 255\n\t\tconst cmax = Math.max(r, g, b)\n\t\tconst cmin = Math.min(r, g, b)\n\t\tconst delta = cmax - cmin\n\t\tconst s = cmax === 0 ? 0 : (delta / cmax)\n\t\tlet m: number\n\n\t\tif (delta === 0) {\n\t\t\tm = 0\n\t\t} else if (cmax === r) {\n\t\t\tm = ((((g - b) / delta) % 6) + 6) % 6\n\t\t} else if (cmax === g) {\n\t\t\tm = ((b - r) / delta) + 2\n\t\t} else {\n\t\t\tm = ((r - g) / delta) + 4\n\t\t}\n\n\t\treturn new HSVA(Math.round(m * 60), s, cmax, rgba.a)\n\t}\n\n\t// from http://www.rapidtables.com/convert/color/hsv-to-rgb.htm\n\tstatic toRGBA(hsva: HSVA): RGBA {\n\t\tconst { h, s, v, a } = hsva\n\t\tconst c = v * s\n\t\tconst x = c * (1 - Math.abs((h / 60) % 2 - 1))\n\t\tconst m = v - c\n\t\tlet [r, g, b] = [0, 0, 0]\n\n\t\tif (h < 60) {\n\t\t\tr = c\n\t\t\tg = x\n\t\t} else if (h < 120) {\n\t\t\tr = x\n\t\t\tg = c\n\t\t} else if (h < 180) {\n\t\t\tg = c\n\t\t\tb = x\n\t\t} else if (h < 240) {\n\t\t\tg = x\n\t\t\tb = c\n\t\t} else if (h < 300) {\n\t\t\tr = x\n\t\t\tb = c\n\t\t} else if (h < 360) {\n\t\t\tr = c\n\t\t\tb = x\n\t\t}\n\n\t\tr = Math.round((r + m) * 255)\n\t\tg = Math.round((g + m) * 255)\n\t\tb = Math.round((b + m) * 255)\n\n\t\treturn new RGBA(r, g, b, a)\n\t}\n}\n\nexport class Color {\n\tstatic fromHex(hex: string): Color {\n\t\treturn Color.Format.CSS.parseHex(hex) || Color.RED\n\t}\n\n\treadonly rgba: RGBA\n\tprivate _hsla?: HSLA\n\tget hsla(): HSLA {\n\t\tif (this._hsla) {\n\t\t\treturn this._hsla\n\t\t} else {\n\t\t\treturn HSLA.fromRGBA(this.rgba)\n\t\t}\n\t}\n\n\tprivate _hsva?: HSVA\n\tget hsva(): HSVA {\n\t\tif (this._hsva) {\n\t\t\treturn this._hsva\n\t\t}\n\t\treturn HSVA.fromRGBA(this.rgba)\n\t}\n\n\tconstructor(arg: RGBA | HSLA | HSVA) {\n\t\tif (!arg) {\n\t\t\tthrow new Error('Color needs a value')\n\t\t} else if (arg instanceof RGBA) {\n\t\t\tthis.rgba = arg\n\t\t} else if (arg instanceof HSLA) {\n\t\t\tthis._hsla = arg\n\t\t\tthis.rgba = HSLA.toRGBA(arg)\n\t\t} else if (arg instanceof HSVA) {\n\t\t\tthis._hsva = arg\n\t\t\tthis.rgba = HSVA.toRGBA(arg)\n\t\t} else {\n\t\t\tthrow new Error('Invalid color ctor argument')\n\t\t}\n\t}\n\n\tequals(other: Color): boolean {\n\t\treturn !!other && RGBA.equals(this.rgba, other.rgba) && HSLA.equals(this.hsla, other.hsla) && HSVA.equals(this.hsva, other.hsva)\n\t}\n\n\t/**\n\t * http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t * Returns the number in the set [0, 1]. O => Darkest Black. 1 => Lightest white.\n\t */\n\tgetRelativeLuminance(): number {\n\t\tconst R = Color._relativeLuminanceForComponent(this.rgba.r)\n\t\tconst G = Color._relativeLuminanceForComponent(this.rgba.g)\n\t\tconst B = Color._relativeLuminanceForComponent(this.rgba.b)\n\t\tconst luminance = 0.2126 * R + 0.7152 * G + 0.0722 * B\n\n\t\treturn roundFloat(luminance, 4)\n\t}\n\n\tprivate static _relativeLuminanceForComponent(color: number): number {\n\t\tconst c = color / 255\n\t\treturn (c <= 0.03928) ? c / 12.92 : Math.pow(((c + 0.055) / 1.055), 2.4)\n\t}\n\n\t/**\n\t * http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t * Returns the contrast ration number in the set [1, 21].\n\t */\n\tgetContrastRatio(another: Color): number {\n\t\tconst lum1 = this.getRelativeLuminance()\n\t\tconst lum2 = another.getRelativeLuminance()\n\t\treturn lum1 > lum2 ? (lum1 + 0.05) / (lum2 + 0.05) : (lum2 + 0.05) / (lum1 + 0.05)\n\t}\n\n\t/**\n\t *\thttp://24ways.org/2010/calculating-color-contrast\n\t * Return 'true' if darker color otherwise 'false'\n\t */\n\tisDarker(): boolean {\n\t\tconst yiq = (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1000\n\t\treturn yiq < 128\n\t}\n\n\t/**\n\t *\thttp://24ways.org/2010/calculating-color-contrast\n\t * Return 'true' if lighter color otherwise 'false'\n\t */\n\tisLighter(): boolean {\n\t\tconst yiq = (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1000\n\t\treturn yiq >= 128\n\t}\n\n\tisLighterThan(another: Color): boolean {\n\t\tconst lum1 = this.getRelativeLuminance()\n\t\tconst lum2 = another.getRelativeLuminance()\n\t\treturn lum1 > lum2\n\t}\n\n\tisDarkerThan(another: Color): boolean {\n\t\tconst lum1 = this.getRelativeLuminance()\n\t\tconst lum2 = another.getRelativeLuminance()\n\t\treturn lum1 < lum2\n\t}\n\n\tlighten(factor: number): Color {\n\t\treturn new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l + this.hsla.l * factor, this.hsla.a))\n\t}\n\n\tdarken(factor: number): Color {\n\t\treturn new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l - this.hsla.l * factor, this.hsla.a))\n\t}\n\n\ttransparent(factor: number): Color {\n\t\tconst { r, g, b, a } = this.rgba\n\t\treturn new Color(new RGBA(r, g, b, a * factor))\n\t}\n\n\tisTransparent(): boolean {\n\t\treturn this.rgba.a === 0\n\t}\n\n\tisOpaque(): boolean {\n\t\treturn this.rgba.a === 1\n\t}\n\n\topposite(): Color {\n\t\treturn new Color(new RGBA(255 - this.rgba.r, 255 - this.rgba.g, 255 - this.rgba.b, this.rgba.a))\n\t}\n\n\tblend(c: Color): Color {\n\t\tconst rgba = c.rgba\n\n\t\t// Convert to 0..1 opacity\n\t\tconst thisA = this.rgba.a\n\t\tconst colorA = rgba.a\n\n\t\tconst a = thisA + colorA * (1 - thisA)\n\t\tif (a < 1e-6) {\n\t\t\treturn Color.TRANSPARENT\n\t\t}\n\n\t\tconst r = this.rgba.r * thisA / a + rgba.r * colorA * (1 - thisA) / a\n\t\tconst g = this.rgba.g * thisA / a + rgba.g * colorA * (1 - thisA) / a\n\t\tconst b = this.rgba.b * thisA / a + rgba.b * colorA * (1 - thisA) / a\n\n\t\treturn new Color(new RGBA(r, g, b, a))\n\t}\n\n\tflatten(...backgrounds: Color[]): Color {\n\t\tconst background = backgrounds.reduceRight((accumulator, color) => {\n\t\t\treturn Color._flatten(color, accumulator)\n\t\t})\n\t\treturn Color._flatten(this, background)\n\t}\n\n\tprivate static _flatten(foreground: Color, background: Color) {\n\t\tconst backgroundAlpha = 1 - foreground.rgba.a\n\t\treturn new Color(new RGBA(\n\t\t\tbackgroundAlpha * background.rgba.r + foreground.rgba.a * foreground.rgba.r,\n\t\t\tbackgroundAlpha * background.rgba.g + foreground.rgba.a * foreground.rgba.g,\n\t\t\tbackgroundAlpha * background.rgba.b + foreground.rgba.a * foreground.rgba.b\n\t\t))\n\t}\n\n\ttoString(): string {\n\t\treturn '' + Color.Format.CSS.format(this)\n\t}\n\n\tstatic getLighterColor(of: Color, relative: Color, factor?: number): Color {\n\t\tif (of.isLighterThan(relative)) {\n\t\t\treturn of\n\t\t}\n\t\tfactor = factor || 0.5\n\t\tconst lum1 = of.getRelativeLuminance()\n\t\tconst lum2 = relative.getRelativeLuminance()\n\t\tfactor = factor * (lum2 - lum1) / lum2\n\t\treturn of.lighten(factor)\n\t}\n\n\tstatic getDarkerColor(of: Color, relative: Color, factor?: number): Color {\n\t\tif (of.isDarkerThan(relative)) {\n\t\t\treturn of\n\t\t}\n\t\tfactor = factor || 0.5\n\t\tconst lum1 = of.getRelativeLuminance()\n\t\tconst lum2 = relative.getRelativeLuminance()\n\t\tfactor = factor * (lum1 - lum2) / lum1\n\t\treturn of.darken(factor)\n\t}\n\n\tstatic readonly WHITE = new Color(new RGBA(255, 255, 255, 1))\n\tstatic readonly BLACK = new Color(new RGBA(0, 0, 0, 1))\n\tstatic readonly RED = new Color(new RGBA(255, 0, 0, 1))\n\tstatic readonly BLUE = new Color(new RGBA(0, 0, 255, 1))\n\tstatic readonly GREEN = new Color(new RGBA(0, 255, 0, 1))\n\tstatic readonly CYAN = new Color(new RGBA(0, 255, 255, 1))\n\tstatic readonly LIGHTGREY = new Color(new RGBA(211, 211, 211, 1))\n\tstatic readonly TRANSPARENT = new Color(new RGBA(0, 0, 0, 0))\n}\n\nexport namespace Color {\n\texport namespace Format {\n\t\texport namespace CSS {\n\n\t\t\texport function formatRGB(color: Color): string {\n\t\t\t\tif (color.rgba.a === 1) {\n\t\t\t\t\treturn `rgb(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b})`\n\t\t\t\t}\n\n\t\t\t\treturn Color.Format.CSS.formatRGBA(color)\n\t\t\t}\n\n\t\t\texport function formatRGBA(color: Color): string {\n\t\t\t\treturn `rgba(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b}, ${+(color.rgba.a).toFixed(2)})`\n\t\t\t}\n\n\t\t\texport function formatHSL(color: Color): string {\n\t\t\t\tif (color.hsla.a === 1) {\n\t\t\t\t\treturn `hsl(${color.hsla.h}, ${(color.hsla.s * 100).toFixed(2)}%, ${(color.hsla.l * 100).toFixed(2)}%)`\n\t\t\t\t}\n\n\t\t\t\treturn Color.Format.CSS.formatHSLA(color)\n\t\t\t}\n\n\t\t\texport function formatHSLA(color: Color): string {\n\t\t\t\treturn `hsla(${color.hsla.h}, ${(color.hsla.s * 100).toFixed(2)}%, ${(color.hsla.l * 100).toFixed(2)}%, ${color.hsla.a.toFixed(2)})`\n\t\t\t}\n\n\t\t\tfunction _toTwoDigitHex(n: number): string {\n\t\t\t\tconst r = n.toString(16)\n\t\t\t\treturn r.length !== 2 ? '0' + r : r\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Formats the color as #RRGGBB\n\t\t\t */\n\t\t\texport function formatHex(color: Color): string {\n\t\t\t\treturn `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}`\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Formats the color as #RRGGBBAA\n\t\t\t * If 'compact' is set, colors without transparancy will be printed as #RRGGBB\n\t\t\t */\n\t\t\texport function formatHexA(color: Color, compact = false): string {\n\t\t\t\tif (compact && color.rgba.a === 1) {\n\t\t\t\t\treturn Color.Format.CSS.formatHex(color)\n\t\t\t\t}\n\n\t\t\t\treturn `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}${_toTwoDigitHex(Math.round(color.rgba.a * 255))}`\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * The default format will use HEX if opaque and RGBA otherwise.\n\t\t\t */\n\t\t\texport function format(color: Color): string | null {\n\t\t\t\tif (!color) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tif (color.isOpaque()) {\n\t\t\t\t\treturn Color.Format.CSS.formatHex(color)\n\t\t\t\t}\n\n\t\t\t\treturn Color.Format.CSS.formatRGBA(color)\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Converts an Hex color value to a Color.\n\t\t\t * returns r, g, and b are contained in the set [0, 255]\n\t\t\t * @param hex string (#RGB, #RGBA, #RRGGBB or #RRGGBBAA).\n\t\t\t */\n\t\t\texport function parseHex(hex: string): Color | null {\n\t\t\t\tif (!hex) {\n\t\t\t\t\t// Invalid color\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tconst length = hex.length\n\n\t\t\t\tif (length === 0) {\n\t\t\t\t\t// Invalid color\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tif (hex.charCodeAt(0) !== CharCode.Hash) {\n\t\t\t\t\t// Does not begin with a #\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tif (length === 7) {\n\t\t\t\t\t// #RRGGBB format\n\t\t\t\t\tconst r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2))\n\t\t\t\t\tconst g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4))\n\t\t\t\t\tconst b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6))\n\t\t\t\t\treturn new Color(new RGBA(r, g, b, 1))\n\t\t\t\t}\n\n\t\t\t\tif (length === 9) {\n\t\t\t\t\t// #RRGGBBAA format\n\t\t\t\t\tconst r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2))\n\t\t\t\t\tconst g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4))\n\t\t\t\t\tconst b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6))\n\t\t\t\t\tconst a = 16 * _parseHexDigit(hex.charCodeAt(7)) + _parseHexDigit(hex.charCodeAt(8))\n\t\t\t\t\treturn new Color(new RGBA(r, g, b, a / 255))\n\t\t\t\t}\n\n\t\t\t\tif (length === 4) {\n\t\t\t\t\t// #RGB format\n\t\t\t\t\tconst r = _parseHexDigit(hex.charCodeAt(1))\n\t\t\t\t\tconst g = _parseHexDigit(hex.charCodeAt(2))\n\t\t\t\t\tconst b = _parseHexDigit(hex.charCodeAt(3))\n\t\t\t\t\treturn new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b))\n\t\t\t\t}\n\n\t\t\t\tif (length === 5) {\n\t\t\t\t\t// #RGBA format\n\t\t\t\t\tconst r = _parseHexDigit(hex.charCodeAt(1))\n\t\t\t\t\tconst g = _parseHexDigit(hex.charCodeAt(2))\n\t\t\t\t\tconst b = _parseHexDigit(hex.charCodeAt(3))\n\t\t\t\t\tconst a = _parseHexDigit(hex.charCodeAt(4))\n\t\t\t\t\treturn new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b, (16 * a + a) / 255))\n\t\t\t\t}\n\n\t\t\t\t// Invalid color\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tfunction _parseHexDigit(charCode: CharCode): number {\n\t\t\t\tswitch (charCode) {\n\t\t\t\t\tcase CharCode.Digit0: return 0\n\t\t\t\t\tcase CharCode.Digit1: return 1\n\t\t\t\t\tcase CharCode.Digit2: return 2\n\t\t\t\t\tcase CharCode.Digit3: return 3\n\t\t\t\t\tcase CharCode.Digit4: return 4\n\t\t\t\t\tcase CharCode.Digit5: return 5\n\t\t\t\t\tcase CharCode.Digit6: return 6\n\t\t\t\t\tcase CharCode.Digit7: return 7\n\t\t\t\t\tcase CharCode.Digit8: return 8\n\t\t\t\t\tcase CharCode.Digit9: return 9\n\t\t\t\t\tcase CharCode.a: return 10\n\t\t\t\t\tcase CharCode.A: return 10\n\t\t\t\t\tcase CharCode.b: return 11\n\t\t\t\t\tcase CharCode.B: return 11\n\t\t\t\t\tcase CharCode.c: return 12\n\t\t\t\t\tcase CharCode.C: return 12\n\t\t\t\t\tcase CharCode.d: return 13\n\t\t\t\t\tcase CharCode.D: return 13\n\t\t\t\t\tcase CharCode.e: return 14\n\t\t\t\t\tcase CharCode.E: return 14\n\t\t\t\t\tcase CharCode.f: return 15\n\t\t\t\t\tcase CharCode.F: return 15\n\t\t\t\t}\n\t\t\t\treturn 0\n\t\t\t}\n\t\t}\n\t}\n}","/* eslint-disable indent */\n/* ---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *-------------------------------------------------------------------------------------------- */\n\nlet _isWindows = false\nlet _isMacintosh = false\nlet _isLinux = false\nlet _isFreeBSD = false\nlet _isNative = false\nlet _isWeb = false\n\nexport interface IProcessEnvironment {\n\t[key: string]: string;\n}\n\ninterface INodeProcess {\n\tplatform: string;\n\tenv: IProcessEnvironment;\n\tgetuid(): number;\n\tnextTick: Function;\n\tversions?: {\n\t\telectron?: string;\n\t};\n\ttype?: string;\n\n}\ndeclare let process: INodeProcess\ndeclare let global: any\n\ninterface INavigator {\n\tuserAgent: string;\n\tlanguage: string;\n}\ndeclare let navigator: INavigator\ndeclare let self: any\n\nconst isElectronRenderer = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions.electron !== 'undefined' && process.type === 'renderer')\n\n// OS detection\nif (typeof navigator === 'object' && !isElectronRenderer) {\n\tconst userAgent = navigator.userAgent\n\t_isWindows = userAgent.indexOf('Windows') >= 0\n\t_isMacintosh = userAgent.indexOf('Macintosh') >= 0\n\t_isLinux = userAgent.indexOf('Linux') >= 0\n\t_isFreeBSD = userAgent.indexOf('FreeBSD') >= 0\n\t_isWeb = true\n} else if (typeof process === 'object') {\n\t_isWindows = (process.platform === 'win32')\n\t_isMacintosh = (process.platform === 'darwin')\n\t_isLinux = (process.platform === 'linux')\n\t_isFreeBSD = (process.platform === 'freebsd')\n\t_isNative = true\n}\n\nexport const enum Platform {\n\tWeb,\n\tMac,\n\tLinux,\n\tFreeBSD,\n\tWindows\n}\nexport function PlatformToString(platform: Platform) {\n\tswitch (platform) {\n\t\tcase Platform.Web: return 'Web'\n\t\tcase Platform.Mac: return 'Mac'\n\t\tcase Platform.Linux: return 'Linux'\n\t\tcase Platform.FreeBSD: return 'FreeBSD'\n\t\tcase Platform.Windows: return 'Windows'\n\t}\n}\n\nlet _platform: Platform = Platform.Web\nif (_isNative) {\n\tif (_isMacintosh) {\n\t\t_platform = Platform.Mac\n\t} else if (_isWindows) {\n\t\t_platform = Platform.Windows\n\t} else if (_isLinux) {\n\t\t_platform = Platform.Linux\n\t} else if (_isFreeBSD) {\n\t\t_platform = Platform.FreeBSD\n\t}\n}\n\nexport const isWindows = _isWindows\nexport const isMacintosh = _isMacintosh\nexport const isLinux = _isLinux\nexport const isFreeBSD = _isFreeBSD\nexport const isNative = _isNative\nexport const isWeb = _isWeb\nexport const platform = _platform\n\nexport function isRootUser(): boolean {\n\treturn _isNative && !_isWindows && (process.getuid() === 0)\n}\n\nconst g = typeof global === 'object' ? global : {} as any\nconst _globals = (typeof self === 'object' ? self : g)\nexport const globals: any = _globals\n\nlet _setImmediate: ((callback: (...args: any[]) => void) => number) | null = null\nexport function setImmediate(callback: (...args: any[]) => void): number {\n\tif (_setImmediate === null) {\n\t\tif (globals.setImmediate) {\n\t\t\t_setImmediate = globals.setImmediate.bind(globals)\n\t\t} else if (typeof process !== 'undefined' && typeof process.nextTick === 'function') {\n\t\t\t_setImmediate = process.nextTick.bind(process)\n\t\t} else {\n\t\t\t_setImmediate = globals.setTimeout.bind(globals)\n\t\t}\n\t}\n\treturn _setImmediate!(callback)\n}\n\nexport const enum OperatingSystem {\n\tWindows = 1,\n\tMacintosh = 2,\n\tLinux = 3,\n\tFreeBSD = 4\n}\n\nconst _wl = _isWindows ? OperatingSystem.Windows : OperatingSystem.Linux | OperatingSystem.FreeBSD\nexport const OS = (_isMacintosh ? OperatingSystem.Macintosh : _wl)\n\nexport const enum AccessibilitySupport {\n\t/**\n\t * This should be the browser case where it is not known if a screen reader is attached or no.\n\t */\n\tUnknown = 0,\n\tDisabled = 1,\n\tEnabled = 2\n}","/* ---------------------------------------------------------------------------------------------\n * Copyright (c) AlexTorresDev. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *-------------------------------------------------------------------------------------------- */\n\nimport { Color } from 'base/common/color'\nimport { PlatformToString, isMacintosh, isWindows, platform } from 'base/common/platform'\nimport { IMenuIcons } from 'menubar'\n\nexport const INACTIVE_FOREGROUND_DARK = Color.fromHex('#222222')\nexport const ACTIVE_FOREGROUND_DARK = Color.fromHex('#333333')\nexport const INACTIVE_FOREGROUND = Color.fromHex('#EEEEEE')\nexport const ACTIVE_FOREGROUND = Color.fromHex('#FFFFFF')\nexport const DEFAULT_ITEM_SELECTOR = Color.fromHex('#0000001F')\n\nexport const IS_MAC_BIGSUR_OR_LATER = isMacintosh && parseInt(process.getSystemVersion().split('.')[0]) >= 11\nexport const BOTTOM_TITLEBAR_HEIGHT = 60\nexport const TOP_TITLEBAR_HEIGHT_MAC = IS_MAC_BIGSUR_OR_LATER ? 28 : 22\nexport const TOP_TITLEBAR_HEIGHT_WIN = 30\n\nexport const WINDOW_MIN_WIDTH = 400\nexport const WINDOW_MIN_HEIGHT = 270\n\nexport const MENU_MNEMONIC_REGEX = /\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/\nexport const MENU_ESCAPED_MNEMONIC_REGEX = /(&)?(&)([^\\s&])/g\n\ninterface ITitlebarIcons extends IMenuIcons {\n\tlinux: {\n\t\tminimize: string\n\t\tmaximize: string\n\t\trestore: string\n\t\tclose: string\n\t},\n\tfreebsd: {\n\t\tminimize: string\n\t\tmaximize: string\n\t\trestore: string\n\t\tclose: string\n\t},\n\twindows: {\n\t\tminimize: string\n\t\tmaximize: string\n\t\trestore: string\n\t\tclose: string\n\t}\n}\n\nexport const menuIcons: ITitlebarIcons = {\n\tsubmenuIndicator: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" /><polyline points=\"9 6 15 12 9 18\" /></svg>',\n\tcheckbox: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M5 12l5 5l10 -10\" /></svg>',\n\tradioChecked: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path fill=\"currentColor\" d=\"M10,5 C7.2,5 5,7.2 5,10 C5,12.8 7.2,15 10,15 C12.8,15 15,12.8 15,10 C15,7.2 12.8,5 10,5 L10,5 Z M10,0 C4.5,0 0,4.5 0,10 C0,15.5 4.5,20 10,20 C15.5,20 20,15.5 20,10 C20,4.5 15.5,0 10,0 L10,0 Z M10,18 C5.6,18 2,14.4 2,10 C2,5.6 5.6,2 10,2 C14.4,2 18,5.6 18,10 C18,14.4 14.4,18 10,18 L10,18 Z\" /></svg>',\n\tradioUnchecked: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path fill=\"currentColor\" d=\"M10,0 C4.5,0 0,4.5 0,10 C0,15.5 4.5,20 10,20 C15.5,20 20,15.5 20,10 C20,4.5 15.5,0 10,0 L10,0 Z M10,18 C5.6,18 2,14.4 2,10 C2,5.6 5.6,2 10,2 C14.4,2 18,5.6 18,10 C18,14.4 14.4,18 10,18 L10,18 Z\" /></svg>',\n\tlinux: {\n\t\tminimize: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M11,4.9v1.1H0V4.399h11z\"/></svg>',\n\t\tmaximize: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M0,1.7v7.6C0,10.2,0.8,11,1.7,11h7.6c0.9,0,1.7-0.8,1.7-1.7V1.7C11,0.8,10.2,0,9.3,0H1.7C0.8,0,0,0.8,0,1.7z M8.8,9.9H2.2c-0.6,0-1.1-0.5-1.1-1.1V2.2c0-0.6,0.5-1.1,1.1-1.1h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7C9.9,9.4,9.4,9.9,8.8,9.9z\"/></svg>',\n\t\trestore: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M7.9,2.2h-7C0.4,2.2,0,2.6,0,3.1v7C0,10.6,0.4,11,0.9,11h7c0.5,0,0.9-0.4,0.9-0.9v-7C8.8,2.6,8.4,2.2,7.9,2.2z M7.7,9.6 c0,0.2-0.1,0.3-0.3,0.3h-6c-0.2,0-0.3-0.1-0.3-0.3v-6c0-0.2,0.1-0.3,0.3-0.3h6c0.2,0,0.3,0.1,0.3,0.3V9.6z M10,0.9 c0,0.5-0.4,0.9-0.9,0.9h-2.1 c-0.5,0-0.9-0.4-0.9-0.9V0.9c0-0.5,0.4-0.9,0.9-0.9h2.1C9.6,0,10,0.4,10,0.9z\"/></svg>',\n\t\tclose: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M6.279 5.5L11 10.221l-.779.779L5.5 6.279.779 11 0 10.221 4.721 5.5 0 .779.779 0 5.5 4.721 10.221 0 11 .779 6.279 5.5z\"/></svg>'\n\t},\n\tfreebsd: {\n\t\tminimize: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M11,4.9v1.1H0V4.399h11z\"/></svg>',\n\t\tmaximize: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M0,1.7v7.6C0,10.2,0.8,11,1.7,11h7.6c0.9,0,1.7-0.8,1.7-1.7V1.7C11,0.8,10.2,0,9.3,0H1.7C0.8,0,0,0.8,0,1.7z M8.8,9.9H2.2c-0.6,0-1.1-0.5-1.1-1.1V2.2c0-0.6,0.5-1.1,1.1-1.1h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7C9.9,9.4,9.4,9.9,8.8,9.9z\"/></svg>',\n\t\trestore: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M7.9,2.2h-7C0.4,2.2,0,2.6,0,3.1v7C0,10.6,0.4,11,0.9,11h7c0.5,0,0.9-0.4,0.9-0.9v-7C8.8,2.6,8.4,2.2,7.9,2.2z M7.7,9.6 c0,0.2-0.1,0.3-0.3,0.3h-6c-0.2,0-0.3-0.1-0.3-0.3v-6c0-0.2,0.1-0.3,0.3-0.3h6c0.2,0,0.3,0.1,0.3,0.3V9.6z M10,0.9 c0,0.5-0.4,0.9-0.9,0.9h-2.1 c-0.5,0-0.9-0.4-0.9-0.9V0.9c0-0.5,0.4-0.9,0.9-0.9h2.1C9.6,0,10,0.4,10,0.9z\"/></svg>',\n\t\tclose: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M6.279 5.5L11 10.221l-.779.779L5.5 6.279.779 11 0 10.221 4.721 5.5 0 .779.779 0 5.5 4.721 10.221 0 11 .779 6.279 5.5z\"/></svg>'\n\t},\n\twindows: {\n\t\tminimize: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M11,4.9v1.1H0V4.399h11z\"/></svg>',\n\t\tmaximize: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M0,1.7v7.6C0,10.2,0.8,11,1.7,11h7.6c0.9,0,1.7-0.8,1.7-1.7V1.7C11,0.8,10.2,0,9.3,0H1.7C0.8,0,0,0.8,0,1.7z M8.8,9.9H2.2c-0.6,0-1.1-0.5-1.1-1.1V2.2c0-0.6,0.5-1.1,1.1-1.1h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7C9.9,9.4,9.4,9.9,8.8,9.9z\"/></svg>',\n\t\trestore: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M7.9,2.2h-7C0.4,2.2,0,2.6,0,3.1v7C0,10.6,0.4,11,0.9,11h7c0.5,0,0.9-0.4,0.9-0.9v-7C8.8,2.6,8.4,2.2,7.9,2.2z M7.7,9.6 c0,0.2-0.1,0.3-0.3,0.3h-6c-0.2,0-0.3-0.1-0.3-0.3v-6c0-0.2,0.1-0.3,0.3-0.3h6c0.2,0,0.3,0.1,0.3,0.3V9.6z\"/><path d=\"M10,0H3.5v1.1h6.1c0.2,0,0.3,0.1,0.3,0.3v6.1H11V1C11,0.4,10.6,0,10,0z\"/></svg>',\n\t\tclose: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 11 11\"><path d=\"M6.279 5.5L11 10.221l-.779.779L5.5 6.279.779 11 0 10.221 4.721 5.5 0 .779.779 0 5.5 4.721 10.221 0 11 .779 6.279 5.5z\"/></svg>'\n\t}\n}\n\nexport function getPx(value: number): string {\n\treturn `${value}px`\n}\n\n/**\n * Handles mnemonics for menu items. Depending on OS:\n * - Windows: Supported via & character (replace && with &)\n * - Linux: Supported via & character (replace && with &)\n * - FreeBSD: Supported via & character (replace && with &)\n * - macOS: Unsupported (replace && with empty string)\n */\nexport function mnemonicMenuLabel(label: string, forceDisableMnemonics?: boolean): string {\n\tif (isMacintosh || forceDisableMnemonics) {\n\t\treturn label.replace(/\\(&&\\w\\)|&&/g, '').replace(/&/g, isMacintosh ? '&' : '&&')\n\t}\n\n\treturn label.replace(/&&|&/g, m => m === '&' ? '&&' : '&')\n}\n\n/**\n * Handles mnemonics for buttons. Depending on OS:\n * - Windows: Supported via & character (replace && with & and & with && for escaping)\n * - Linux: Supported via _ character (replace && with _)\n * - FreeBSD: Supported via _ character (replace && with _)\n * - macOS: Unsupported (replace && with empty string)\n */\nexport function mnemonicButtonLabel(label: string, forceDisableMnemonics?: boolean): string {\n\tif (isMacintosh || forceDisableMnemonics) {\n\t\treturn label.replace(/\\(&&\\w\\)|&&/g, '')\n\t}\n\n\tif (isWindows) {\n\t\treturn label.replace(/&&|&/g, m => m === '&' ? '&&' : '&')\n\t}\n\n\treturn label.replace(/&&/g, '_')\n}\n\nexport function cleanMnemonic(label: string): string {\n\tconst regex = MENU_MNEMONIC_REGEX\n\n\tconst matches = regex.exec(label)\n\tif (!matches) {\n\t\treturn label\n\t}\n\n\tconst mnemonicInText = !matches[1]\n\n\treturn label.replace(regex, mnemonicInText ? '$2$3' : '').trim()\n}\n\nexport function parseAccelerator(accelerator: Electron.Accelerator | string): string {\n\tlet acc = accelerator.toString()\n\n\tif (!isMacintosh) {\n\t\tacc = acc.replace(/(Cmd)|(Command)/gi, '')\n\t} else {\n\t\tacc = acc.replace(/(Ctrl)|(Control)/gi, '')\n\t}\n\n\tacc = acc.replace(/(Or)/gi, '')\n\n\treturn acc\n}\n\nexport function applyFill(element: HTMLElement | undefined | null, svgColor: Color | undefined, fgColor: Color | undefined, color = true) {\n\tlet fillColor = ''\n\n\tif (svgColor) fillColor = svgColor.toString()\n\telse if (fgColor) fillColor = fgColor.toString()\n\n\tif (element && element !== null) {\n\t\tif (color) element.style.color = fillColor\n\t\telse element.style.backgroundColor = fillColor\n\t}\n}\n\nexport function loadWindowIcons(icons: string | undefined): any {\n\tif (!icons) return\n\n\tconst jWindowsIcons = require(icons)\n\n\treturn {\n\t\ticons: jWindowsIcons,\n\t\tplatformIcons: jWindowsIcons[PlatformToString(platform).toLocaleLowerCase()]\n\t}\n}\n","/* ---------------------------------------------------------------------------------------------\n * Copyright (c) AlexTorresDev. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *-------------------------------------------------------------------------------------------- */\nimport { WINDOW_MIN_HEIGHT, WINDOW_MIN_WIDTH } from 'consts'\nimport { BrowserWindow } from 'electron'\n\nexport interface AttachTitlebarToWindowOptions {\n\tminWidth?: number\n\tminHeight?: number\n\t/**\n\t * Absolute path to a theme config JSON file to load in main and deliver to renderer.\n\t */\n\tthemeConfigPath?: string\n}\n\ntype DetachListeners = () => void\n\nconst attachedWindows = new WeakMap<BrowserWindow, DetachListeners>()\n\nexport default (browserWindow: BrowserWindow, options: AttachTitlebarToWindowOptions = {}): DetachListeners => {\n\tconst existingDetach = attachedWindows.get(browserWindow)\n\tif (existingDetach) {\n\t\treturn existingDetach\n\t}\n\n\t// Use window's current size as minimum if not explicitly provided\n\tconst [windowWidth, windowHeight] = browserWindow.getSize()\n\tconst minWidth = Number.isFinite(options.minWidth) \n\t\t? Math.max(0, Math.floor(options.minWidth!)) \n\t\t: Math.max(windowWidth, WINDOW_MIN_WIDTH)\n\tconst minHeight = Number.isFinite(options.minHeight) \n\t\t? Math.max(0, Math.floor(options.minHeight!)) \n\t\t: Math.max(windowHeight, WINDOW_MIN_HEIGHT)\n\tbrowserWindow.setMinimumSize(minWidth, minHeight)\n\n\tconst emit = (channel: string, value: boolean) => {\n\t\tif (!browserWindow.isDestroyed()) {\n\t\t\tbrowserWindow.webContents.send(channel, value)\n\t\t}\n\t}\n\n\tconst onEnterFullScreen = () => emit('window-fullscreen', true)\n\tconst onLeaveFullScreen = () => emit('window-fullscreen', false)\n\tconst onFocus = () => emit('window-focus', true)\n\tconst onBlur = () => emit('window-focus', false)\n\tconst onMaximize = () => emit('window-maximize', true)\n\tconst onUnmaximize = () => emit('window-maximize', false)\n\n\tbrowserWindow.on('enter-full-screen', onEnterFullScreen)\n\tbrowserWindow.on('leave-full-screen', onLeaveFullScreen)\n\tbrowserWindow.on('focus', onFocus)\n\tbrowserWindow.on('blur', onBlur)\n\tbrowserWindow.on('maximize', onMaximize)\n\tbrowserWindow.on('unmaximize', onUnmaximize)\n\n\tconst detach = () => {\n\t\tbrowserWindow.removeListener('enter-full-screen', onEnterFullScreen)\n\t\tbrowserWindow.removeListener('leave-full-screen', onLeaveFullScreen)\n\t\tbrowserWindow.removeListener('focus', onFocus)\n\t\tbrowserWindow.removeListener('blur', onBlur)\n\t\tbrowserWindow.removeListener('maximize', onMaximize)\n\t\tbrowserWindow.removeListener('unmaximize', onUnmaximize)\n\t\tattachedWindows.delete(browserWindow)\n\t}\n\n\tattachedWindows.set(browserWindow, detach)\n\tbrowserWindow.once('closed', detach)\n\n\treturn detach\n}","/* ---------------------------------------------------------------------------------------------\n * Copyright (c) AlexTorresDev. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *-------------------------------------------------------------------------------------------- */\n\nimport {\n BrowserWindow,\n IpcMainEvent,\n IpcMainInvokeEvent,\n Menu,\n MenuItem,\n TitleBarOverlay,\n ipcMain\n} from 'electron'\nimport { IpcChannels, WindowEventName } from 'types/ipc-contract'\nimport { TitlebarThemeConfig } from 'titlebar/options'\n\nlet titlebarSetupDone = false\nlet cachedThemeConfig: TitlebarThemeConfig | null = null\n\nexport default () => {\n if (process.type !== 'browser') return\n if (titlebarSetupDone) return\n titlebarSetupDone = true\n\n // Send menu to renderer title bar process\n ipcMain.handle(IpcChannels.REQUEST_APPLICATION_MENU, async () =>\n JSON.parse(\n JSON.stringify(\n Menu.getApplicationMenu(),\n (key: string, value: unknown) =>\n key !== 'commandsMap' && key !== 'menu' ? value : undefined\n )\n )\n )\n\n // Handle window events\n ipcMain.on(\n IpcChannels.WINDOW_EVENT,\n (event: IpcMainEvent, eventName: WindowEventName) => {\n const window = BrowserWindow.fromWebContents(event.sender)\n\n if (!window) return\n\n switch (eventName) {\n case 'window-minimize':\n window.minimize()\n break\n case 'window-maximize':\n window.isMaximized() ? window.unmaximize() : window.maximize()\n break\n case 'window-close':\n window.close()\n break\n }\n }\n )\n\n // Handle menu events\n ipcMain.on(\n IpcChannels.MENU_EVENT,\n (event: IpcMainEvent, commandId: number) => {\n const item = getMenuItemByCommandId(commandId, Menu.getApplicationMenu())\n if (item)\n item.click(\n undefined,\n BrowserWindow.fromWebContents(event.sender),\n event.sender\n )\n }\n )\n\n // Handle the minimum size.\n ipcMain.on(\n IpcChannels.SET_MINIMUM_SIZE,\n (event: IpcMainEvent, width: number, height: number) => {\n const window = BrowserWindow.fromWebContents(event.sender)\n if (!window) return\n\n const normalizedWidth = Number.isFinite(width)\n ? Math.max(0, Math.floor(width))\n : 0\n const normalizedHeight = Number.isFinite(height)\n ? Math.max(0, Math.floor(height))\n : 0\n window.setMinimumSize(normalizedWidth, normalizedHeight)\n }\n )\n\n // Handle menu item icon requests (async)\n ipcMain.handle(\n IpcChannels.REQUEST_MENU_ICON,\n async (event: IpcMainInvokeEvent, commandId: number) => {\n const item = getMenuItemByCommandId(commandId, Menu.getApplicationMenu())\n if (item && item.icon && typeof item.icon !== 'string') {\n return item.icon.toDataURL()\n }\n return null\n }\n )\n\n ipcMain.handle(\n IpcChannels.GET_WINDOW_MAXIMIZED,\n (event: IpcMainInvokeEvent) => {\n const window = BrowserWindow.fromWebContents(event.sender)\n return window ? window.isMaximized() : false\n }\n )\n\n ipcMain.handle(\n IpcChannels.UPDATE_WINDOW_CONTROLS,\n (event: IpcMainInvokeEvent, args: TitleBarOverlay) => {\n return updateWindowControls(event, args)\n }\n )\n\n ipcMain.on(\n IpcChannels.UPDATE_WINDOW_CONTROLS,\n (event: IpcMainEvent, args: TitleBarOverlay) => {\n event.returnValue = updateWindowControls(event, args)\n }\n )\n\n ipcMain.handle(IpcChannels.GET_THEME_CONFIG, async () => {\n return cachedThemeConfig\n })\n}\n\nexport function setThemeConfig(config: TitlebarThemeConfig | null): void {\n cachedThemeConfig = config\n}\n\nfunction updateWindowControls(\n event: IpcMainEvent | IpcMainInvokeEvent,\n args: TitleBarOverlay\n): boolean {\n const window = BrowserWindow.fromWebContents(event.sender)\n try {\n if (window) window.setTitleBarOverlay(args)\n return true\n } catch (_) {\n return false\n }\n}\n\nfunction getMenuItemByCommandId(\n commandId: number,\n menu: Electron.Menu | null\n): MenuItem | undefined {\n if (!menu) return undefined\n\n for (const item of menu.items) {\n if (item.submenu) {\n const submenuItem = getMenuItemByCommandId(commandId, item.submenu)\n if (submenuItem) return submenuItem\n } else if (item.commandId === commandId) return item\n }\n\n return undefined\n}\n","/* ---------------------------------------------------------------------------------------------\n * Copyright (c) AlexTorresDev. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *-------------------------------------------------------------------------------------------- */\n\nimport { TitleBarOverlay } from 'electron'\n\n/**\n * Central IPC contract defining all channels and their payloads\n * Ensures type-safe communication between main and renderer processes\n */\n\n// Window event names\nexport type WindowEventName = 'window-minimize' | 'window-maximize' | 'window-close'\n\n// IPC Channel definitions with Request/Response types\nexport interface IpcContract {\n\t// Window state queries (async - use invoke)\n\t'window-event:is-maximized': {\n\t\trequest: void\n\t\tresponse: boolean\n\t}\n\n\t// Title bar overlay update (async - use invoke)\n\t'update-window-controls': {\n\t\trequest: TitleBarOverlay\n\t\tresponse: boolean\n\t}\n\n\t// Menu icon request (async - use invoke)\n\t'menu-icon:request': {\n\t\trequest: number // commandId\n\t\tresponse: string | null // dataURL or null\n\t}\n\n\t// Application menu request (async - use invoke)\n\t'request-application-menu': {\n\t\trequest: void\n\t\tresponse: Electron.Menu\n\t}\n\n\t// Theme configuration delivery (async - use invoke)\n\t'theme-config:get': {\n\t\trequest: void\n\t\tresponse: Record<string, unknown> | null // normalized theme config\n\t}\n}\n\n// Fire-and-forget channels (use send/on)\nexport interface IpcFireAndForgetContract {\n\t// Window control events\n\t'window-event': {\n\t\tpayload: WindowEventName\n\t}\n\t// Menu item click events\n\t'menu-event': {\n\t\tpayload: number // commandId\n\t}\n\t// Minimum size setter\n\t'window-set-minimumSize': {\n\t\tpayload: [number, number] // [width, height]\n\t}\n\t// Title bar overlay update (sync alternative)\n\t'update-window-controls': {\n\t\tpayload: TitleBarOverlay\n\t}\n}\n\n/**\n * Type-safe channel name extractors\n */\nexport const IpcChannels = {\n\t// Async (invoke/handle)\n\tGET_WINDOW_MAXIMIZED: 'window-event:is-maximized' as const,\n\tUPDATE_WINDOW_CONTROLS: 'update-window-controls' as const,\n\tREQUEST_MENU_ICON: 'menu-icon:request' as const,\n\tREQUEST_APPLICATION_MENU: 'request-application-menu' as const,\n\n\t// Fire-and-forget (send/on)\n\tWINDOW_EVENT: 'window-event' as const,\n\tMENU_EVENT: 'menu-event' as const,\n\tSET_MINIMUM_SIZE: 'window-set-minimumSize' as const,\n\tGET_THEME_CONFIG: 'theme-config:get' as const,\n} as const\n\n/**\n * Extract response type for a given channel\n */\nexport type IpcResponse<C extends keyof IpcContract> = IpcContract[C]['response']\nexport type IpcRequest<C extends keyof IpcContract> = IpcContract[C]['request']\n","/* ---------------------------------------------------------------------------------------------\n * Copyright (c) AlexTorresDev. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *-------------------------------------------------------------------------------------------- */\n\nimport { TitlebarThemeConfig, TitlebarThemeColors } from './options'\n\nexport const TITLEBAR_THEME_CONFIG_VERSION = 1 as const\n\ntype UnknownRecord = Record<string, unknown>\n\nexport interface VersionedTitlebarThemeConfig extends TitlebarThemeConfig {\n\tversion?: number\n}\n\nexport interface ThemeConfigNormalizationResult {\n\tconfig: TitlebarThemeConfig | null\n\twarnings: string[]\n}\n\nfunction asRecord(input: unknown): UnknownRecord | null {\n\tif (!input || typeof input !== 'object' || Array.isArray(input)) {\n\t\treturn null\n\t}\n\n\treturn input as UnknownRecord\n}\n\nfunction asString(input: unknown): string | undefined {\n\tif (typeof input !== 'string') {\n\t\treturn undefined\n\t}\n\n\tconst value = input.trim()\n\treturn value.length ? value : undefined\n}\n\nfunction asFiniteNumber(input: unknown): number | undefined {\n\tif (typeof input !== 'number' || !Number.isFinite(input)) {\n\t\treturn undefined\n\t}\n\n\treturn input\n}\n\nfunction sanitizeColors(input: unknown): TitlebarThemeColors | undefined {\n\tconst source = asRecord(input)\n\tif (!source) {\n\t\treturn undefined\n\t}\n\n\tconst colors: TitlebarThemeColors = {\n\t\ttitlebar: asString(source.titlebar),\n\t\ttitlebarForeground: asString(source.titlebarForeground),\n\t\tmenuBar: asString(source.menuBar),\n\t\tmenuItemSelection: asString(source.menuItemSelection),\n\t\tmenuSeparator: asString(source.menuSeparator),\n\t\tsvg: asString(source.svg)\n\t}\n\n\tconst hasAnyColor = !!(\n\t\tcolors.titlebar ||\n\t\tcolors.titlebarForeground ||\n\t\tcolors.menuBar ||\n\t\tcolors.menuItemSelection ||\n\t\tcolors.menuSeparator ||\n\t\tcolors.svg\n\t)\n\n\treturn hasAnyColor ? colors : undefined\n}\n\nexport function normalizeThemeConfig(input: unknown): ThemeConfigNormalizationResult {\n\tconst warnings: string[] = []\n\tconst source = asRecord(input)\n\tif (!source) {\n\t\treturn { config: null, warnings: ['Theme config must be a JSON object.'] }\n\t}\n\n\tconst requestedVersion = asFiniteNumber(source.version)\n\tif (requestedVersion !== undefined && requestedVersion !== TITLEBAR_THEME_CONFIG_VERSION) {\n\t\twarnings.push(`Theme config version ${requestedVersion} is not fully supported. Falling back to v${TITLEBAR_THEME_CONFIG_VERSION} compatible fields.`)\n\t}\n\n\tconst config: VersionedTitlebarThemeConfig = {\n\t\tfontFamily: asString(source.fontFamily),\n\t\tfontSize: asFiniteNumber(source.fontSize),\n\t\tcolors: sanitizeColors(source.colors)\n\t}\n\n\tconst hasConfig = !!(config.fontFamily || config.fontSize !== undefined || config.colors)\n\tif (!hasConfig) {\n\t\treturn { config: null, warnings: warnings.concat('No supported theme fields found in config.') }\n\t}\n\n\treturn { config, warnings }\n}\n"],"mappings":"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","names":["Color","Format","CSS"]}
|