{"version":3,"sources":["../../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/main/index.ts","../../src/titlebar/theme-config.ts"],"sourcesContent":["/* ---------------------------------------------------------------------------------------------\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 = /(&amp;)?(&amp;)([^\\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 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) 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"]}