@hermes-ui/angular 0.2.0 → 0.2.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.
|
@@ -258,10 +258,13 @@ class Color {
|
|
|
258
258
|
*/
|
|
259
259
|
const DEFAULT_OVERRIDES = {
|
|
260
260
|
// primary
|
|
261
|
-
//
|
|
262
|
-
//
|
|
263
|
-
//
|
|
264
|
-
'
|
|
261
|
+
// `--hermes-alias-object-accent-color`, not `-object-interaction-color`: that one is generic
|
|
262
|
+
// interactive text (dropdown items, alert, datagrid…) and is neutral at rest by design — it
|
|
263
|
+
// was the fan-out target here before, and it meant a colorful preset (Hibisco, say) painted
|
|
264
|
+
// every dropdown's resting item text pink, not just the vertical nav icons this was meant for.
|
|
265
|
+
// `interaction-color-selected` stays: a *selected* row taking the family color is normal,
|
|
266
|
+
// expected "recolor" behavior, unlike its resting text.
|
|
267
|
+
'--hermes-alias-primary': ['--hermes-alias-object-accent-color', '--hermes-alias-object-interaction-color-selected'],
|
|
265
268
|
'--hermes-alias-primary-tint': ['--hermes-alias-object-interaction-background-hover'],
|
|
266
269
|
'--hermes-alias-primary-shade': ['--hermes-alias-typography-link-color', '--hermes-alias-object-interaction-primary-hover'],
|
|
267
270
|
'--hermes-alias-primary-dark': [
|
|
@@ -270,6 +273,7 @@ const DEFAULT_OVERRIDES = {
|
|
|
270
273
|
'--hermes-alias-object-interaction-primary-active',
|
|
271
274
|
'--hermes-alias-object-interaction-color-hover',
|
|
272
275
|
'--hermes-alias-object-interaction-color-active',
|
|
276
|
+
'--hermes-alias-object-accent-color-active',
|
|
273
277
|
],
|
|
274
278
|
'--hermes-alias-primary-tint-dark': [
|
|
275
279
|
'--hermes-alias-object-interaction-background-selected',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes-ui-angular-addons-theme-builder.mjs","sources":["../../../addons/theme-builder/utils/types.ts","../../../addons/theme-builder/utils/color.ts","../../../addons/theme-builder/utils/presets.ts","../../../addons/theme-builder/utils/css-generator.ts","../../../addons/theme-builder/utils/wcag.ts","../../../addons/theme-builder/theme-builder.component.ts","../../../addons/theme-builder/theme-builder.component.html","../../../addons/theme-builder/utils/apply-preset.ts","../../../addons/theme-builder/index.ts","../../../addons/theme-builder/hermes-ui-angular-addons-theme-builder.ts"],"sourcesContent":["/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport type { Color } from './color';\r\n\r\nexport interface WcagLevel {\r\n label: string;\r\n score: string;\r\n type: string;\r\n}\r\n\r\nexport interface ContrastResult {\r\n minContrast: { wcag: WcagLevel; score: number };\r\n backgrounds: { name: string; score: number; wcag: WcagLevel }[];\r\n}\r\n\r\n/**\r\n * Per-theme lookup keyed by token group / background name. Defaults to grouped\r\n * color variants (`Color[]`, used by `colorStruct`); pass `Color` for single-value\r\n * structures like `backgrounds`.\r\n */\r\nexport type HermesThemeStructure<T = Color[]> = { light: Record<string, T>; dark: Record<string, T> };\r\n\r\nfunction clamp(value: number, min: number, max: number): number {\r\n return Math.max(min, Math.min(max, value));\r\n}\r\n\r\n/** Normalizes a hue to `[0, 360)` — hue is cyclic, so out-of-range values wrap instead of clamping. */\r\nfunction wrapDegrees(value: number): number {\r\n return ((value % 360) + 360) % 360;\r\n}\r\n\r\n/** HSL color: hue wraps to 0–360, saturation/lightness clamp to 0–100. */\r\nexport class HslColor {\r\n readonly h: number;\r\n readonly s: number;\r\n readonly l: number;\r\n\r\n constructor(h: number, s: number, l: number) {\r\n this.h = wrapDegrees(h);\r\n this.s = clamp(s, 0, 100);\r\n this.l = clamp(l, 0, 100);\r\n }\r\n}\r\n\r\n/** RGB color: red/green/blue clamp to 0–255 and round to whole channel values. */\r\nexport class RgbColor {\r\n readonly r: number;\r\n readonly g: number;\r\n readonly b: number;\r\n\r\n constructor(r: number, g: number, b: number) {\r\n this.r = Math.round(clamp(r, 0, 255));\r\n this.g = Math.round(clamp(g, 0, 255));\r\n this.b = Math.round(clamp(b, 0, 255));\r\n }\r\n}\r\n\r\n/** LinearSRGB color: red/green/blue clamp to 0–1 — continuous linear light, not rounded. */\r\nexport class LinearSrgbColor {\r\n readonly r: number;\r\n readonly g: number;\r\n readonly b: number;\r\n\r\n constructor({ r, g, b }: RgbColor) {\r\n this.r = clamp(this.toLinear(r), 0, 1);\r\n this.g = clamp(this.toLinear(g), 0, 1);\r\n this.b = clamp(this.toLinear(b), 0, 1);\r\n }\r\n\r\n /** Un-gammas an sRGB channel (0–1) to linear light, per IEC 61966-2-1. */\r\n private toLinear(c: number): number {\r\n const s = c / 255;\r\n return s <= 0.04045 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);\r\n }\r\n}\r\n\r\n/** OKLCH color: lightness clamps to 0–1, chroma clamps to ≥0, hue wraps to 0–360. */\r\nexport class OklchColor {\r\n readonly l: number;\r\n readonly c: number;\r\n readonly h: number;\r\n\r\n constructor(l: number, c: number, h: number) {\r\n this.l = clamp(l, 0, 1);\r\n this.c = Math.max(0, c);\r\n this.h = wrapDegrees(h);\r\n }\r\n}\r\n\r\n/** OKLab color: lightness clamps to 0–1; `a`/`b` are unbounded perceptual axes. */\r\nexport class OKLabColor {\r\n readonly l: number;\r\n readonly a: number;\r\n readonly b: number;\r\n\r\n constructor(l: number, a: number, b: number) {\r\n this.l = clamp(l, 0, 1);\r\n this.a = a;\r\n this.b = b;\r\n }\r\n}\r\n\r\nexport interface ThemeColors {\r\n primary?: Color;\r\n info?: Color;\r\n success?: Color;\r\n warning?: Color;\r\n danger?: Color;\r\n}\r\n\r\nexport interface ThemePreset {\r\n name: string;\r\n light: ThemeColors;\r\n dark: ThemeColors;\r\n}\r\n\r\nexport interface ThemeColor {\r\n key: string;\r\n base: Color;\r\n variants: Color[];\r\n contrast: ContrastResult;\r\n}\r\n\r\nexport interface DataRow {\r\n name: string;\r\n role: string;\r\n status: string;\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { HslColor, LinearSrgbColor, OKLabColor, OklchColor, RgbColor } from './types';\r\n\r\n/**\r\n * A single theme token: its CSS custom property name, the original Hermes-provided\r\n * HSL value, and the current (possibly user-edited) color. Colors are stored in HSL;\r\n * RGB and HEX are derived on demand.\r\n */\r\nexport class Color {\r\n private _color?: HslColor;\r\n\r\n /**\r\n * @param name CSS custom property name, e.g. `--hermes-alias-status-info`\r\n * @param originalColor Hermes-provided HSL, e.g. `hsl(198deg 100% 59%)`\r\n */\r\n constructor(\r\n public name: string,\r\n public originalColor: string\r\n ) {}\r\n\r\n /** HSL components. Falls back to parsing `originalColor` when not explicitly set. */\r\n get color(): HslColor {\r\n return this._color ?? this.parseHsl(this.originalColor);\r\n }\r\n\r\n set color(value: HslColor) {\r\n this._color = value;\r\n }\r\n\r\n /** RGB components — HSL is converted to RGB only for relative luminance checks. */\r\n get rgb(): RgbColor {\r\n return this.hslToRgb(this.color);\r\n }\r\n\r\n /** HEX string — used by native color inputs. */\r\n get hex(): string {\r\n return this.hslToHex(this.color);\r\n }\r\n\r\n /** HSL string — used by native color inputs. */\r\n get hsl(): string {\r\n const { h, s, l } = this.color;\r\n return `hsl(${h}deg, ${s}%, ${l}%)`;\r\n }\r\n\r\n /**\r\n * OKLCH components — unlike HSL's `L`, OKLCH's `L` tracks perceived lightness\r\n * uniformly across all hues, which is why it's used for palette/contrast math.\r\n */\r\n get oklch(): OklchColor {\r\n return this.hslToOklch(this.color);\r\n }\r\n\r\n /** OKLCH string, CSS Color 4 syntax. */\r\n get oklchString(): string {\r\n const { l, c, h } = this.oklch;\r\n return `oklch(${Math.round(l * 1000) / 10}% ${Math.round(c * 10000) / 10000} ${Math.round(h * 10) / 10}deg)`;\r\n }\r\n\r\n /** Human-readable variant label derived from the token name suffix, e.g. `Tint dark`. */\r\n get label(): string {\r\n if (this.name.endsWith('-tint-dark')) {\r\n return 'Tint dark';\r\n } else if (this.name.endsWith('-tint')) {\r\n return 'Tint';\r\n } else if (this.name.endsWith('-shade')) {\r\n return 'Shade';\r\n } else if (this.name.endsWith('-dark')) {\r\n return 'Dark';\r\n }\r\n\r\n return 'Base';\r\n }\r\n\r\n get isOriginalColor(): boolean {\r\n // no original color override\r\n if (!this._color) {\r\n return true;\r\n }\r\n\r\n const originalColorHsl = this.parseHsl(this.originalColor);\r\n\r\n return (\r\n this._color.h === originalColorHsl.h &&\r\n this._color.s === originalColorHsl.s &&\r\n this._color.l === originalColorHsl.l\r\n );\r\n }\r\n\r\n static isHex(hex: string): boolean {\r\n return /^#[0-9a-fA-F]{6}$/.test(hex);\r\n }\r\n\r\n static shiftL({ h, s, l }: HslColor, delta: number): HslColor {\r\n return new HslColor(h, s, l + delta);\r\n }\r\n\r\n static hexToHsl(hex: string): HslColor {\r\n const h = hex.replace(/^#/, '');\r\n const full = h.length === 3 ? h[0] + h[0] + h[1] + h[1] + h[2] + h[2] : h;\r\n const n = parseInt(full, 16);\r\n const r = ((n >> 16) & 255) / 255;\r\n const g = ((n >> 8) & 255) / 255;\r\n const b = (n & 255) / 255;\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n const l = (max + min) / 2;\r\n\r\n if (max === min) {\r\n return new HslColor(0, 0, Math.round(l * 10000) / 100);\r\n }\r\n\r\n const d = max - min;\r\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n let hue = 0;\r\n if (max === r) {\r\n hue = ((g - b) / d + (g < b ? 6 : 0)) / 6;\r\n } else if (max === g) {\r\n hue = ((b - r) / d + 2) / 6;\r\n } else {\r\n hue = ((r - g) / d + 4) / 6;\r\n }\r\n\r\n // Round to second decimal. `s` and `l` are between 0 and 1.\r\n const saturation = Math.round(s * 10000) / 100;\r\n const lightness = Math.round(l * 10000) / 100;\r\n\r\n return new HslColor(Math.round(hue * 360), saturation, lightness);\r\n }\r\n\r\n /**\r\n * Converts HSL to OKLCH via linear sRGB and OKLab (CSS Color 4 / Björn Ottosson\r\n * formulas). Goes through OKLCH — not raw HSL — whenever perceptual uniformity\r\n * matters, since HSL's `L` looks lighter or darker depending on hue.\r\n */\r\n hslToOklch(hsl: HslColor): OklchColor {\r\n const linearSrgbColor = new LinearSrgbColor(this.hslToRgb(hsl));\r\n const oklabColor = this.linearSrgbToOklab(linearSrgbColor);\r\n\r\n const c = Math.sqrt(oklabColor.a * oklabColor.a + oklabColor.b * oklabColor.b);\r\n const hue = (Math.atan2(oklabColor.b, oklabColor.a) * 180) / Math.PI;\r\n\r\n return new OklchColor(oklabColor.l, c, hue);\r\n }\r\n\r\n reset(): void {\r\n this._color = undefined;\r\n }\r\n\r\n private hslToHex({ h, s, l }: HslColor): string {\r\n l /= 100;\r\n const a = (s * Math.min(l, 1 - l)) / 100;\r\n const f = (n: number) => {\r\n const k = (n + h / 30) % 12;\r\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\r\n return Math.round(255 * color)\r\n .toString(16)\r\n .padStart(2, '0');\r\n };\r\n return `#${f(0)}${f(8)}${f(4)}`;\r\n }\r\n\r\n /** Converts HSL to RGB — use only for relative luminance calculations. */\r\n private hslToRgb({ h, s, l }: HslColor): RgbColor {\r\n l /= 100;\r\n const a = (s * Math.min(l, 1 - l)) / 100;\r\n const f = (n: number) => {\r\n const k = (n + h / 30) % 12;\r\n return 255 * (l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1));\r\n };\r\n return new RgbColor(f(0), f(8), f(4));\r\n }\r\n\r\n /** Converts linear sRGB (0–1 channels) to OKLab. */\r\n private linearSrgbToOklab({ r, g, b }: LinearSrgbColor): OKLabColor {\r\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\r\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\r\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\r\n\r\n return new OKLabColor(\r\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\r\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\r\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\r\n );\r\n }\r\n\r\n /** Parses a CSS HSL string such as `hsl(198deg 100% 59%)`. */\r\n private parseHsl(input: string): HslColor {\r\n const [h = 0, s = 0, l = 0] = input.match(/[\\d.]+/g)?.map(Number) ?? [];\r\n return new HslColor(h, s, l);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Color } from './color';\r\nimport { DataRow, ThemePreset } from './types';\r\n\r\nexport const DEFAULT_OVERRIDES = {\r\n // primary\r\n // Resting accent — was missing entirely, so switching presets retinted links/buttons but left\r\n // every icon and nav item that reads `--hermes-alias-object-interaction-color` (the vertical\r\n // nav among them) on the shipped default color no matter which preset was active.\r\n '--hermes-alias-primary': ['--hermes-alias-object-interaction-color', '--hermes-alias-object-interaction-color-selected'],\r\n '--hermes-alias-primary-tint': ['--hermes-alias-object-interaction-background-hover'],\r\n '--hermes-alias-primary-shade': ['--hermes-alias-typography-link-color', '--hermes-alias-object-interaction-primary-hover'],\r\n '--hermes-alias-primary-dark': [\r\n '--hermes-alias-typography-link-color-hover',\r\n '--hermes-alias-typography-primary-hover',\r\n '--hermes-alias-object-interaction-primary-active',\r\n '--hermes-alias-object-interaction-color-hover',\r\n '--hermes-alias-object-interaction-color-active',\r\n ],\r\n '--hermes-alias-primary-tint-dark': [\r\n '--hermes-alias-object-interaction-background-selected',\r\n '--hermes-alias-object-interaction-background-shade-active',\r\n '--hermes-alias-object-interaction-primary-secondary-hover',\r\n ],\r\n // info\r\n '--hermes-alias-status-info': ['--hermes-alias-utility-blue'],\r\n '--hermes-alias-status-info-tint': [\r\n '--hermes-alias-object-interaction-info-secondary-hover',\r\n '--hermes-alias-utility-blue-tint',\r\n ],\r\n '--hermes-alias-status-info-shade': [\r\n '--hermes-alias-object-interaction-info-hover',\r\n '--hermes-alias-typography-info-hover',\r\n '--hermes-alias-utility-blue-shade',\r\n ],\r\n '--hermes-alias-status-info-dark': [\r\n '--hermes-alias-object-interaction-info-click',\r\n '--hermes-alias-object-interaction-info-active',\r\n '--hermes-alias-object-interaction-info-selected',\r\n ],\r\n // success\r\n '--hermes-alias-status-success': ['--hermes-alias-utility-green'],\r\n '--hermes-alias-status-success-tint': [\r\n '--hermes-alias-object-interaction-success-secondary-hover',\r\n '--hermes-alias-utility-green-tint',\r\n ],\r\n '--hermes-alias-status-success-shade': [\r\n '--hermes-alias-object-interaction-success-hover',\r\n '--hermes-alias-typography-success-hover',\r\n '--hermes-alias-utility-green-shade',\r\n ],\r\n '--hermes-alias-status-success-dark': [\r\n '--hermes-alias-object-interaction-success-click',\r\n '--hermes-alias-object-interaction-success-active',\r\n ],\r\n // warning\r\n '--hermes-alias-status-warning': ['--hermes-alias-utility-yellow'],\r\n '--hermes-alias-status-warning-tint': [\r\n '--hermes-alias-object-interaction-warning-secondary-hover',\r\n '--hermes-alias-utility-yellow-tint',\r\n ],\r\n '--hermes-alias-status-warning-shade': [\r\n '--hermes-alias-object-interaction-warning-hover',\r\n '--hermes-alias-typography-warning-hover',\r\n '--hermes-alias-utility-yellow-shade',\r\n ],\r\n '--hermes-alias-status-warning-dark': [\r\n '--hermes-alias-object-interaction-warning-click',\r\n '--hermes-alias-object-interaction-warning-active',\r\n ],\r\n //danger\r\n '--hermes-alias-status-danger': ['--hermes-alias-utility-red'],\r\n '--hermes-alias-status-danger-tint': [\r\n '--hermes-alias-object-interaction-danger-secondary-hover',\r\n '--hermes-alias-utility-red-tint',\r\n ],\r\n '--hermes-alias-status-danger-shade': [\r\n '--hermes-alias-object-interaction-danger-hover',\r\n '--hermes-alias-typography-danger-hover',\r\n '--hermes-alias-utility-red-shade',\r\n ],\r\n '--hermes-alias-status-danger-dark': [\r\n '--hermes-alias-object-interaction-danger-click',\r\n '--hermes-alias-object-interaction-danger-active',\r\n ],\r\n};\r\n\r\nexport const BACKGROUND_TOKENS = [\r\n {\r\n name: 'Text',\r\n token: '--hermes-alias-typography-color-100',\r\n },\r\n {\r\n name: 'App Background',\r\n token: '--hermes-alias-object-app-background',\r\n },\r\n {\r\n name: 'Interaction Background',\r\n token: '--hermes-alias-object-interaction-background',\r\n },\r\n {\r\n name: 'Container Background',\r\n token: '--hermes-alias-object-container-background',\r\n },\r\n];\r\n\r\nexport const TOKEN_KEYS = {\r\n baseTokens: [\r\n '--hermes-alias-primary',\r\n '--hermes-alias-status-info',\r\n '--hermes-alias-status-success',\r\n '--hermes-alias-status-warning',\r\n '--hermes-alias-status-danger',\r\n ],\r\n primary: [\r\n '--hermes-alias-primary',\r\n '--hermes-alias-primary-tint',\r\n '--hermes-alias-primary-tint-dark',\r\n '--hermes-alias-primary-shade',\r\n '--hermes-alias-primary-dark',\r\n ],\r\n info: [\r\n '--hermes-alias-status-info',\r\n '--hermes-alias-status-info-tint',\r\n '--hermes-alias-status-info-shade',\r\n '--hermes-alias-status-info-dark',\r\n ],\r\n success: [\r\n '--hermes-alias-status-success',\r\n '--hermes-alias-status-success-tint',\r\n '--hermes-alias-status-success-shade',\r\n '--hermes-alias-status-success-dark',\r\n ],\r\n warning: [\r\n '--hermes-alias-status-warning',\r\n '--hermes-alias-status-warning-tint',\r\n '--hermes-alias-status-warning-shade',\r\n '--hermes-alias-status-warning-dark',\r\n ],\r\n danger: [\r\n '--hermes-alias-status-danger',\r\n '--hermes-alias-status-danger-tint',\r\n '--hermes-alias-status-danger-shade',\r\n '--hermes-alias-status-danger-dark',\r\n ],\r\n};\r\n\r\n/** The default (Evergreen) theme. Acts as the identity preset that resets every color back to its shipped value. */\r\nexport const DEFAULT_PRESET: ThemePreset = {\r\n name: 'Evergreen',\r\n light: null,\r\n dark: null,\r\n};\r\n\r\nexport const PRESETS: ThemePreset[] = [\r\n // The eleven presets below only swap `primary` (the accent) — `info`/`success`/`warning`/\r\n // `danger` are left unset, same as Evergreen, since none of them change the meaning of \"this is\r\n // a success/warning/error state.\" The source theme this was ported from also varies a second,\r\n // `tertiary` color per family, but that one turned out to be a dataviz categorical color with no\r\n // Hermes equivalent yet (see git history if we ever want to revisit it) — not, as first assumed\r\n // here, the vertical nav's background, which stays theme-only in both systems.\r\n {\r\n name: 'Hibisco',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(338deg 62% 47%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(338deg 77% 59%)') },\r\n },\r\n {\r\n name: 'Oceano',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(211deg 62% 43%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(211deg 77% 54%)') },\r\n },\r\n {\r\n name: 'Ipê',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(36deg 70% 34%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(36deg 85% 41%)') },\r\n },\r\n {\r\n name: 'Jabuticaba',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(286deg 45% 48%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(286deg 60% 60%)') },\r\n },\r\n {\r\n name: 'Samambaia',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(132deg 52% 32%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(132deg 67% 38%)') },\r\n },\r\n {\r\n name: 'Anil',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(255deg 55% 56%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(255deg 70% 67%)') },\r\n },\r\n {\r\n name: 'Urucum',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(8deg 64% 45%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(8deg 79% 57%)') },\r\n },\r\n // Ported from the source theme's \"Superman\"/\"Batman\" families (a red-on-blue and a\r\n // yellow-on-graphite accent, respectively) under generic names — this package ships publicly,\r\n // and those are DC Comics character names.\r\n {\r\n name: 'Aviador',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(356deg 78% 45%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(356deg 88% 61%)') },\r\n },\r\n {\r\n name: 'Grafite',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(47deg 91% 27%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(47deg 94% 33%)') },\r\n },\r\n {\r\n name: 'Invencível',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(219deg 80% 50%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(219deg 90% 62%)') },\r\n },\r\n {\r\n name: 'Superchoque',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(41deg 88% 30%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(41deg 93% 36%)') },\r\n },\r\n];\r\n\r\nexport const SAMPLE_ROWS: DataRow[] = [\r\n { name: 'Ada Lovelace', role: 'Engineer', status: 'Active' },\r\n { name: 'Grace Hopper', role: 'Architect', status: 'Active' },\r\n { name: 'Alan Turing', role: 'Researcher', status: 'Inactive' },\r\n { name: 'Linus Torvalds', role: 'Engineer', status: 'Active' },\r\n { name: 'Margaret Hamilton', role: 'Director', status: 'Active' },\r\n];\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Color } from './color';\r\nimport { DEFAULT_OVERRIDES } from './presets';\r\nimport { HermesThemeStructure } from './types';\r\n\r\nexport function generateCSS(colorStruct: HermesThemeStructure, warningTextOverrideEnabled = true): string[] {\r\n const lines: string[] = ['/* Clarity Theme Override — generated by Clarity Theme Builder */'];\r\n const defaultOverrides = new Set<string>();\r\n\r\n for (const theme in colorStruct) {\r\n const changedGroups: { key: string; colors: Color[] }[] = [];\r\n\r\n for (const colorGroupKey in colorStruct[theme]) {\r\n const colorVariants = colorStruct[theme][colorGroupKey] as Color[];\r\n const changedColors = colorVariants.filter(color => !color.isOriginalColor);\r\n\r\n if (changedColors.length) {\r\n changedGroups.push({ key: colorGroupKey, colors: changedColors });\r\n }\r\n }\r\n\r\n if (!changedGroups.length) {\r\n continue;\r\n }\r\n\r\n lines.push(`\\n\\n[hermes-theme~='${theme}'] {`);\r\n\r\n for (const group of changedGroups) {\r\n lines.push(` /* ${group.key} */`);\r\n\r\n for (const color of group.colors) {\r\n lines.push(` ${color.name}: ${color.hsl};`);\r\n\r\n // warning text override — mirrors the same condition applied live in applyPreviewStyles; light theme only\r\n if (warningTextOverrideEnabled && theme === 'light' && color.name === '--hermes-alias-status-warning') {\r\n lines.push(` --hermes-alias-typography-color-black: var(--hermes-alias-typography-color-100);`);\r\n }\r\n\r\n DEFAULT_OVERRIDES[color.name]?.forEach((override: string) => {\r\n const overrideResult = ` ${override}: var(${color.name});`;\r\n\r\n if (!defaultOverrides.has(overrideResult)) {\r\n defaultOverrides.add(overrideResult);\r\n }\r\n });\r\n }\r\n\r\n lines.push('');\r\n }\r\n lines.push(`}`);\r\n }\r\n\r\n if (lines.length === 1) {\r\n lines.push('\\n/* NO changes */');\r\n }\r\n\r\n if (defaultOverrides.size > 0) {\r\n const overrideLines = ['\\n\\n[hermes-theme] {', ...defaultOverrides.values(), '}'];\r\n\r\n return lines.slice(0, 1).concat(overrideLines, lines.slice(1));\r\n }\r\n\r\n return lines;\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\n// WCAG 2.0 contrast formulas extracted from wcag-contrast@3.0.0 (BSD-2-Clause).\r\n\r\nimport { RgbColor, WcagLevel } from './types';\r\n\r\nconst redCoefficient = 0.2126;\r\nconst greenCoefficient = 0.7152;\r\nconst blueCoefficient = 0.0722;\r\nconst lowGammaCoefficient = 12.92;\r\n\r\nfunction adjustGamma(v: number): number {\r\n return Math.pow((v + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nfunction relativeLuminance({ r, g, b }: RgbColor): number {\r\n const colorMap = [r, g, b].map(c => {\r\n const s = c / 255;\r\n return s <= 0.03928 ? s / lowGammaCoefficient : adjustGamma(s);\r\n });\r\n\r\n return colorMap[0] * redCoefficient + colorMap[1] * greenCoefficient + colorMap[2] * blueCoefficient;\r\n}\r\n\r\nexport function contrastRatio(a: RgbColor, b: RgbColor): number {\r\n const l1 = relativeLuminance(a);\r\n const l2 = relativeLuminance(b);\r\n return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);\r\n}\r\n\r\nexport function wcagScore(ratio: number): WcagLevel {\r\n const result = {\r\n label: 'Fail',\r\n score: Math.max(ratio, 0).toFixed(2),\r\n type: 'danger',\r\n };\r\n\r\n if (ratio >= 7) {\r\n result.label = 'AAA';\r\n result.type = 'success';\r\n } else if (ratio >= 4.5) {\r\n result.label = 'AA';\r\n result.type = 'success';\r\n } else if (ratio >= 3) {\r\n result.label = 'AA Large';\r\n result.type = 'warning';\r\n }\r\n\r\n return result;\r\n}\r\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n HermesIcons,\n HermesModule,\n HermesTimelineStepState,\n cogIcon,\n homeIcon,\n moonIcon,\n sunIcon,\n undoIcon,\n userIcon,\n} from '@hermes-ui/angular';\n\nimport { Color } from './utils/color';\nimport { generateCSS } from './utils/css-generator';\nimport {\n BACKGROUND_TOKENS,\n DEFAULT_PRESET,\n DEFAULT_OVERRIDES,\n PRESETS,\n SAMPLE_ROWS,\n TOKEN_KEYS,\n} from './utils/presets';\nimport { HermesThemeStructure, ContrastResult, DataRow, HslColor, ThemeColor, ThemePreset } from './utils/types';\nimport { contrastRatio, wcagScore } from './utils/wcag';\n\n@Component({\n selector: 'hermes-theme-builder',\n templateUrl: './theme-builder.component.html',\n styleUrl: './theme-builder.component.scss',\n imports: [HermesModule, CommonModule, FormsModule],\n})\nexport class ThemeBuilderComponent implements OnInit, AfterViewInit {\n /** Emits the generated CSS override text whenever a color, preset, reset, or override toggle changes. */\n @Output() generatedCSS = new EventEmitter<string>();\n\n @ViewChild('previewWrapper') previewWrapper!: ElementRef<HTMLElement>;\n @ViewChild('previewDarkWrapper') previewDarkWrapper!: ElementRef<HTMLElement>;\n\n // Tracks which preset is active so CSS output can use token refs instead of hex values.\n // Set to null when the user manually edits any color.\n activePreset: ThemePreset | null = null;\n\n activeTheme: 'light' | 'dark' = 'light';\n\n // Forces black text on the warning color for legibility — toggled via the \"Warning text override\" switch.\n warningTextOverrideEnabled = true;\n\n colorStruct: HermesThemeStructure = {\n light: {},\n dark: {},\n };\n\n backgrounds: HermesThemeStructure<Color> = {\n light: {},\n dark: {},\n };\n\n themeColors: ThemeColor[] = [];\n\n // State backing the built-in default preview content.\n breadcrumbs = [\n { label: 'Framework', href: 'javascript://' },\n { label: 'Angular', href: 'javascript://' },\n { label: 'Hermes', href: 'javascript://' },\n ];\n wizardOpen = false;\n rows: DataRow[] = SAMPLE_ROWS;\n description: string;\n stepperForm = {\n account: { fullName: '' },\n confirm: { agree: false },\n };\n\n readonly timelineStates = HermesTimelineStepState;\n\n private _presets: ThemePreset[] = [DEFAULT_PRESET, ...PRESETS];\n\n constructor() {\n HermesIcons.addIcons(sunIcon, moonIcon, undoIcon, homeIcon, cogIcon, userIcon);\n }\n\n /**\n * Presets available in the preset selector. Defaults to Hermes's built-in preset list.\n * The default (Evergreen) preset is always prepended, so it's guaranteed to remain available\n * as a fallback even when a custom list is provided.\n */\n @Input()\n get presets(): ThemePreset[] {\n return this._presets;\n }\n\n set presets(value: ThemePreset[]) {\n this._presets = [DEFAULT_PRESET, ...(value ?? [])];\n }\n\n get isDarkTheme(): boolean {\n return this.activeTheme === 'dark';\n }\n\n get generatedCss(): string {\n return generateCSS(this.colorStruct, this.warningTextOverrideEnabled).join('\\n');\n }\n\n ngOnInit(): void {\n this.activePreset = this.presets?.[0] ?? null;\n }\n\n ngAfterViewInit(): void {\n this.buildColorStructure();\n\n this.applyPreviewStyles();\n }\n\n toggleActiveTheme(): void {\n this.activeTheme = this.activeTheme === 'dark' ? 'light' : 'dark';\n\n this.applyPreviewStyles();\n this.refreshThemeColors();\n }\n\n setCurrentColor(colorVariant: Color, hex: string, colorGroup: Color[] = []): void {\n if (Color.isHex(hex)) {\n colorVariant.color = Color.hexToHsl(hex);\n\n this.colorBuilder(colorVariant, colorGroup);\n\n this.applyPreviewStyles();\n this.refreshThemeColors();\n this.resetActivePreset();\n }\n }\n\n applyPreset(preset: ThemePreset): void {\n this.activePreset = preset;\n\n for (const theme of Object.keys(this.activePreset)) {\n if (theme === 'name') {\n continue;\n }\n\n this.resetAllThemeColors(theme);\n\n if (!this.activePreset[theme]) {\n continue;\n }\n\n for (const activePresetKey of Object.keys(this.activePreset[theme])) {\n const presetColor = this.activePreset[theme][activePresetKey];\n const activeColor = this.colorStruct[theme][activePresetKey].find(c => c.name === presetColor.name);\n\n activeColor.color = presetColor.color;\n\n this.colorBuilder(activeColor, this.colorStruct[theme][activePresetKey], theme === 'dark');\n }\n }\n\n this.applyPreviewStyles();\n this.refreshThemeColors();\n }\n\n resetAllThemeColors(theme: string) {\n for (const key of Object.keys(this.colorStruct[theme])) {\n const tokenGroup = this.colorStruct[theme][key];\n\n for (let i = 0; i < tokenGroup.length; i++) {\n tokenGroup[i].reset();\n }\n }\n }\n\n resetColor($event: Event, color: Color, colorGroup: Color[] = []) {\n $event.stopPropagation();\n color.reset();\n\n colorGroup?.forEach(color => {\n color.reset();\n });\n\n this.applyPreviewStyles();\n this.refreshThemeColors();\n this.resetActivePreset();\n }\n\n onWarningTextOverrideChange(): void {\n this.applyPreviewStyles();\n this.generatedCSS.emit(this.generatedCss);\n }\n\n applyPreviewStyles(): void {\n const el = this.previewWrapper?.nativeElement;\n if (!el) {\n return;\n }\n\n const colorGroups = this.colorStruct[this.activeTheme];\n\n for (const colorGroupKey in colorGroups) {\n const colorVariants = colorGroups[colorGroupKey];\n for (let i = 0; i < colorVariants.length; i++) {\n const color = colorVariants[i] as Color;\n\n el.style.setProperty(color.name, color.hsl);\n\n // warning text override — toggled via the \"Warning text override\" switch; light theme only\n if (color.name === '--hermes-alias-status-warning') {\n const override = '--hermes-alias-typography-color-black';\n\n if (this.activeTheme !== 'light' || !this.warningTextOverrideEnabled || color.isOriginalColor) {\n el.style.removeProperty(override);\n } else {\n el.style.setProperty(override, 'var(--hermes-alias-typography-color-100)');\n }\n }\n\n DEFAULT_OVERRIDES[color.name]?.forEach((override: string) => {\n // remove override if color isOriginalColor\n // another shorter variant is:\n // el.style.setProperty(override, color.isOriginalColor ? null : `var(${color.name})`);\n if (color.isOriginalColor) {\n el.style.removeProperty(override);\n } else {\n el.style.setProperty(override, `var(${color.name})`);\n }\n });\n }\n }\n }\n\n private getContrast(color: Color): ContrastResult {\n const backgrounds: ContrastResult['backgrounds'] = [];\n\n let minScore = 10;\n for (const bgName in this.backgrounds[this.activeTheme]) {\n const background = this.backgrounds[this.activeTheme][bgName];\n\n const score = Math.max(contrastRatio(color.rgb, background.rgb), 0);\n\n if (minScore > score) {\n minScore = score;\n }\n\n backgrounds.push({\n name: bgName,\n score,\n wcag: wcagScore(score),\n });\n }\n\n return {\n minContrast: { wcag: wcagScore(minScore), score: minScore },\n backgrounds,\n };\n }\n\n private refreshThemeColors(): void {\n const themeColors: ThemeColor[] = [];\n const colorGroups = this.colorStruct[this.activeTheme];\n\n for (const key of Object.keys(colorGroups)) {\n const colorGroup = colorGroups[key];\n const baseColor = colorGroup.find(c => c.label === 'Base');\n\n themeColors.push({\n key,\n base: baseColor,\n variants: colorGroup.filter(c => c.label !== 'Base'),\n contrast: this.getContrast(baseColor),\n });\n }\n\n this.themeColors = themeColors;\n this.generatedCSS.emit(this.generatedCss);\n }\n\n private resetActivePreset(): void {\n const themes = Object.values(this.colorStruct) as Record<string, Color[]>[];\n const allOriginal = themes.every(theme => {\n return Object.values(theme).every(colors => {\n return colors.every(color => color.isOriginalColor);\n });\n });\n\n this.activePreset = allOriginal ? (this.presets?.[0] ?? null) : null;\n }\n\n private colorBuilder(colorVariant: Color, colorGroup: Color[], isDarkTheme = this.isDarkTheme) {\n if (TOKEN_KEYS.baseTokens.includes(colorVariant.name)) {\n const baseColorHSL = colorVariant.color;\n\n colorGroup.forEach(item => {\n if (item.name.endsWith('-tint')) {\n item.color = new HslColor(baseColorHSL.h, baseColorHSL.s, isDarkTheme ? 25 : 94);\n } else if (item.name.endsWith('-tint-dark')) {\n item.color = new HslColor(baseColorHSL.h, baseColorHSL.s, isDarkTheme ? 18 : 95);\n } else if (item.name.endsWith('-shade')) {\n item.color = Color.shiftL(baseColorHSL, isDarkTheme ? 7 : -7);\n } else if (item.name.endsWith('-dark')) {\n item.color = Color.shiftL(baseColorHSL, isDarkTheme ? 20 : -10);\n }\n });\n }\n }\n\n private buildColorStructure(): void {\n const lightEl = this.previewWrapper?.nativeElement;\n const darkEl = this.previewDarkWrapper?.nativeElement;\n if (!lightEl || !darkEl) {\n return;\n }\n\n const lightStyles = window.getComputedStyle(lightEl);\n const darkStyles = window.getComputedStyle(darkEl);\n\n for (const key in TOKEN_KEYS) {\n if (key === 'baseTokens') {\n continue;\n }\n\n const tokenGroup = TOKEN_KEYS[key];\n this.colorStruct['light'][key] = [];\n this.colorStruct['dark'][key] = [];\n for (let i = 0; i < tokenGroup.length; i++) {\n this.colorStruct['light'][key].push(new Color(tokenGroup[i], lightStyles.getPropertyValue(tokenGroup[i])));\n this.colorStruct['dark'][key].push(new Color(tokenGroup[i], darkStyles.getPropertyValue(tokenGroup[i])));\n }\n }\n\n BACKGROUND_TOKENS.forEach(bg => {\n this.backgrounds['light'][bg.name] = new Color(bg.token, lightStyles.getPropertyValue(bg.token));\n this.backgrounds['dark'][bg.name] = new Color(bg.token, darkStyles.getPropertyValue(bg.token));\n });\n\n this.refreshThemeColors();\n }\n}\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n\r\n<!-- Preset selector -->\r\n<div class=\"tb-presets\" hermes-layout=\"m-t:lg\">\r\n <div class=\"tb-preset-cards hermes-row\">\r\n @for (preset of presets; track preset.name) {\r\n <a\r\n href=\"javascript://\"\r\n class=\"card clickable tb-preset-card hermes-col-1\"\r\n [class.tb-preset-card-active]=\"activePreset?.name === preset.name\"\r\n (click)=\"applyPreset(preset)\"\r\n >\r\n <div class=\"tb-preset-swatch\" [style.background-color]=\"preset.light?.primary?.hex\"></div>\r\n <div class=\"card-text\">{{ preset.name }}</div>\r\n </a>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- ── Preview DARK card ── -->\r\n<!-- Invisible for filling the dark values on initial load -->\r\n<div style=\"display: none\" #previewDarkWrapper hermes-theme=\"dark\"></div>\r\n\r\n<!-- ── Two-column layout: controls | preview ── -->\r\n<div class=\"tb-layout\" hermes-layout=\"m-t:lg m-b:lg\">\r\n <!-- ── Controls card (sticky left column) ── -->\r\n <div class=\"card tb-controls-card\">\r\n <div class=\"card-block\">\r\n @for (colorGroup of themeColors; track colorGroup.key) {\r\n <div>\r\n <hermes-stack-view>\r\n <hermes-stack-header>\r\n <div class=\"tb-control-header\">\r\n {{ colorGroup.key | uppercase }}\r\n\r\n <hermes-tooltip>\r\n <hermes-label\r\n hermes-layout=\"m:none\"\r\n hermesTooltipTrigger\r\n [hermesText]=\"'Contrast ' + colorGroup.contrast.minContrast.wcag.label\"\r\n [hermesBadgeText]=\"colorGroup.contrast.minContrast.wcag.score\"\r\n [hermesColor]=\"colorGroup.contrast.minContrast.wcag.type\"\r\n >\r\n </hermes-label>\r\n <hermes-tooltip-content hermesPosition=\"right\" hermesSize=\"lg\">\r\n <div class=\"tb-wcag-container\">\r\n @for (background of colorGroup.contrast.backgrounds; track background.name) {\r\n <div class=\"tb-wcag-item\">\r\n {{ background.name }}:\r\n <hermes-label\r\n hermes-layout=\"m:none\"\r\n hermesType=\"solid\"\r\n [hermesText]=\"background.wcag.label\"\r\n [hermesBadgeText]=\"background.wcag.score\"\r\n [hermesColor]=\"background.wcag.type\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n </hermes-tooltip-content>\r\n </hermes-tooltip>\r\n </div>\r\n </hermes-stack-header>\r\n <hermes-stack-block [hermesStackViewLevel]=\"1\">\r\n <hermes-stack-label class=\"tb-stack-label\">{{ colorGroup.base.label }}</hermes-stack-label>\r\n <hermes-stack-content style=\"width: 52%\">\r\n <div class=\"tb-color-input-wrap\">\r\n <input\r\n type=\"color\"\r\n class=\"tb-color-picker\"\r\n [value]=\"colorGroup.base.hex\"\r\n [attr.aria-label]=\"colorGroup.key + ' ' + colorGroup.base.label + ' color picker'\"\r\n (input)=\"\r\n setCurrentColor(\r\n colorGroup.base,\r\n $any($event.target).value,\r\n colorStruct[activeTheme][colorGroup.key]\r\n )\r\n \"\r\n />\r\n <input\r\n readonly\r\n type=\"text\"\r\n class=\"tb-hex-input\"\r\n [value]=\"colorGroup.base.hex\"\r\n [attr.aria-label]=\"colorGroup.key + ' ' + colorGroup.base.label + ' color hex value'\"\r\n />\r\n <button\r\n *ngIf=\"!colorGroup.base.isOriginalColor\"\r\n class=\"btn btn-sm btn-icon btn-primary\"\r\n (click)=\"resetColor($event, colorGroup.base, colorStruct[activeTheme][colorGroup.key])\"\r\n title=\"Back to original color\"\r\n >\r\n <hermes-icon shape=\"undo\"></hermes-icon>\r\n </button>\r\n </div>\r\n </hermes-stack-content>\r\n\r\n @for (colorVariant of colorGroup.variants; track colorVariant.label) {\r\n <hermes-stack-block [hermesStackViewLevel]=\"2\">\r\n <hermes-stack-label>{{ colorVariant.label }}</hermes-stack-label>\r\n <hermes-stack-content>\r\n <div class=\"tb-color-input-wrap\">\r\n <input\r\n type=\"color\"\r\n class=\"tb-color-picker\"\r\n [value]=\"colorVariant.hex\"\r\n [attr.aria-label]=\"colorGroup.key + ' ' + colorVariant.label + ' color picker'\"\r\n (input)=\"setCurrentColor(colorVariant, $any($event.target).value)\"\r\n />\r\n <input\r\n readonly\r\n type=\"text\"\r\n class=\"tb-hex-input\"\r\n [value]=\"colorVariant.hex\"\r\n [attr.aria-label]=\"colorGroup.key + ' ' + colorVariant.label + ' color hex value'\"\r\n />\r\n <button\r\n *ngIf=\"!colorVariant.isOriginalColor\"\r\n class=\"btn btn-sm btn-icon btn-primary\"\r\n (click)=\"resetColor($event, colorVariant)\"\r\n title=\"Back to original color\"\r\n >\r\n <hermes-icon shape=\"undo\"></hermes-icon>\r\n </button>\r\n </div>\r\n </hermes-stack-content>\r\n </hermes-stack-block>\r\n }\r\n </hermes-stack-block>\r\n </hermes-stack-view>\r\n\r\n @if (colorGroup.key === 'warning' && !colorGroup.base.isOriginalColor) {\r\n <hermes-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n hermesToggle\r\n [(ngModel)]=\"warningTextOverrideEnabled\"\r\n (ngModelChange)=\"onWarningTextOverrideChange()\"\r\n />\r\n <label>Light Theme Warning Text Override</label>\r\n </hermes-toggle-wrapper>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- end controls card -->\r\n\r\n <!-- ── Preview card (right column) ── -->\r\n <div class=\"card tb-preview-card\">\r\n <div class=\"card-header\">\r\n Live Preview:\r\n <button\r\n class=\"btn btn-outline-neutral\"\r\n [attr.aria-label]=\"'Switch to ' + (isDarkTheme ? 'light' : 'dark') + ' theme'\"\r\n (click)=\"toggleActiveTheme()\"\r\n >\r\n <hermes-icon [shape]=\"isDarkTheme ? 'moon' : 'sun'\" [solid]=\"true\" [size]=\"'md'\"></hermes-icon>\r\n {{ isDarkTheme ? 'Dark' : 'Light' }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"card-block tb-preview-sandbox\" #previewWrapper [attr.hermes-theme]=\"activeTheme\">\r\n <ng-content></ng-content>\r\n\r\n <!-- Breadcrumbs -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Breadcrumbs</p>\r\n <div class=\"tb-preview-row\">\r\n <hermes-breadcrumbs [items]=\"breadcrumbs\"></hermes-breadcrumbs>\r\n </div>\r\n </div>\r\n\r\n <!-- Buttons -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Buttons</p>\r\n <div class=\"tb-preview-row\">\r\n <button class=\"btn btn-primary\">Primary</button>\r\n <button class=\"btn\">Primary Outline</button>\r\n <button class=\"btn btn-link\">Primary FLAT</button>\r\n <button class=\"btn btn-info\">Info</button>\r\n <button class=\"btn btn-info-outline\">Info Outline</button>\r\n <button class=\"btn btn-link-info\">Info Flat</button>\r\n <button class=\"btn btn-danger\">Danger</button>\r\n <button class=\"btn btn-success\">Success</button>\r\n <button class=\"btn btn-warning\">Warning</button>\r\n <button class=\"btn btn-primary\" disabled>Disabled</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Badges & Labels -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Badges & Labels</p>\r\n <div class=\"tb-preview-row\">\r\n <hermes-label\r\n [hermesType]=\"'outlined'\"\r\n [hermesClickable]=\"true\"\r\n [hermesColor]=\"'info'\"\r\n [hermesText]=\"'info'\"\r\n [hermesBadgeText]=\"'99+'\"\r\n />\r\n <hermes-label [hermesType]=\"'outlined'\" [hermesColor]=\"'danger'\" [hermesText]=\"'danger'\" [hermesBadgeText]=\"'99+'\" />\r\n <hermes-label [hermesType]=\"'outlined'\" [hermesColor]=\"'success'\" [hermesText]=\"'success'\" [hermesBadgeText]=\"'99+'\" />\r\n <hermes-label\r\n [hermesType]=\"'outlined'\"\r\n [hermesClickable]=\"true\"\r\n [hermesColor]=\"'warning'\"\r\n [hermesText]=\"'warning'\"\r\n [hermesBadgeText]=\"'99+'\"\r\n />\r\n\r\n <hermes-label [hermesType]=\"'solid'\" [hermesColor]=\"'info'\" [hermesText]=\"'info'\" [hermesBadgeText]=\"'99+'\" />\r\n <hermes-label\r\n [hermesType]=\"'solid'\"\r\n [hermesClickable]=\"true\"\r\n [hermesColor]=\"'danger'\"\r\n [hermesText]=\"'danger'\"\r\n [hermesBadgeText]=\"'99+'\"\r\n />\r\n <hermes-label\r\n [hermesType]=\"'solid'\"\r\n [hermesClickable]=\"true\"\r\n [hermesColor]=\"'success'\"\r\n [hermesText]=\"'success'\"\r\n [hermesBadgeText]=\"'99+'\"\r\n />\r\n <hermes-label [hermesType]=\"'solid'\" [hermesColor]=\"'warning'\" [hermesText]=\"'warning'\" [hermesBadgeText]=\"'99+'\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Alerts -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Alerts</p>\r\n <hermes-alert [hermesAlertType]=\"'info'\">\r\n <hermes-alert-item><span class=\"alert-text\">This is an info alert.</span></hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'success'\">\r\n <hermes-alert-item><span class=\"alert-text\">Operation completed successfully.</span></hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'warning'\">\r\n <hermes-alert-item><span class=\"alert-text\">Please review before proceeding.</span></hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'danger'\">\r\n <hermes-alert-item><span class=\"alert-text\">Something went wrong.</span></hermes-alert-item>\r\n </hermes-alert>\r\n </div>\r\n\r\n <!-- App-Level Alerts -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">App-Level Alerts</p>\r\n <hermes-alert [hermesAlertType]=\"'info'\" [hermesAlertAppLevel]=\"true\">\r\n <hermes-alert-item>\r\n <span class=\"alert-text\">This is an app level info.</span>\r\n <div class=\"alert-actions\">\r\n <button class=\"btn alert-action\"><hermes-icon shape=\"user\"></hermes-icon>Thanks</button>\r\n </div>\r\n </hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'danger'\" [hermesAlertAppLevel]=\"true\">\r\n <hermes-alert-item>\r\n <span class=\"alert-text\">This is an app level alert.</span>\r\n <div class=\"alert-actions\">\r\n <button class=\"btn alert-action\"><hermes-icon shape=\"user\"></hermes-icon>Fix</button>\r\n </div>\r\n </hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'warning'\" [hermesAlertAppLevel]=\"true\">\r\n <hermes-alert-item>\r\n <span class=\"alert-text\">This is an app level warning.</span>\r\n <div class=\"alert-actions\">\r\n <button class=\"btn alert-action\"><hermes-icon shape=\"user\"></hermes-icon>Check</button>\r\n </div>\r\n </hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'success'\" [hermesAlertAppLevel]=\"true\">\r\n <hermes-alert-item>\r\n <span class=\"alert-text\">This is an app level success.</span>\r\n <div class=\"alert-actions\">\r\n <button class=\"btn alert-action\"><hermes-icon shape=\"user\"></hermes-icon>Great</button>\r\n </div>\r\n </hermes-alert-item>\r\n </hermes-alert>\r\n </div>\r\n\r\n <!-- Forms -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Form Controls</p>\r\n <form hermesForm #tbForm=\"ngForm\" hermesLayout=\"horizontal\">\r\n <hermes-input-container>\r\n <label>Text input</label>\r\n <input hermesInput type=\"text\" placeholder=\"Enter value...\" />\r\n </hermes-input-container>\r\n <hermes-checkbox-container>\r\n <label>Checkbox</label>\r\n <hermes-checkbox-wrapper>\r\n <input type=\"checkbox\" hermesCheckbox checked />\r\n <label>Checkbox (checked)</label>\r\n </hermes-checkbox-wrapper>\r\n <hermes-checkbox-wrapper>\r\n <input type=\"checkbox\" hermesCheckbox />\r\n <label>Checkbox (unchecked)</label>\r\n </hermes-checkbox-wrapper>\r\n </hermes-checkbox-container>\r\n <hermes-radio-container>\r\n <label>Radio</label>\r\n <hermes-radio-wrapper>\r\n <input type=\"radio\" hermesRadio name=\"r1\" value=\"a\" checked />\r\n <label>Radio A</label>\r\n </hermes-radio-wrapper>\r\n <hermes-radio-wrapper>\r\n <input type=\"radio\" hermesRadio name=\"r1\" value=\"b\" />\r\n <label>Radio B</label>\r\n </hermes-radio-wrapper>\r\n </hermes-radio-container>\r\n <hermes-toggle-container>\r\n <label>Toggle</label>\r\n <hermes-toggle-wrapper>\r\n <input type=\"checkbox\" hermesToggle checked />\r\n <label>Toggle (on)</label>\r\n </hermes-toggle-wrapper>\r\n </hermes-toggle-container>\r\n\r\n <hermes-textarea-container>\r\n <label>Textarea</label>\r\n <textarea hermesTextarea [(ngModel)]=\"description\" name=\"description\" required></textarea>\r\n <hermes-control-helper>Please provide a description.</hermes-control-helper>\r\n <hermes-control-error *hermesIfError=\"'required'\">You must provide a description!</hermes-control-error>\r\n </hermes-textarea-container>\r\n </form>\r\n </div>\r\n\r\n <!-- Accordion -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Accordion</p>\r\n <hermes-accordion>\r\n <hermes-accordion-panel [hermesAccordionPanelOpen]=\"true\">\r\n <hermes-accordion-title>Panel One</hermes-accordion-title>\r\n <hermes-accordion-content>Content for the first accordion panel.</hermes-accordion-content>\r\n </hermes-accordion-panel>\r\n <hermes-accordion-panel>\r\n <hermes-accordion-title>Panel Two</hermes-accordion-title>\r\n <hermes-accordion-content>Content for the second accordion panel.</hermes-accordion-content>\r\n </hermes-accordion-panel>\r\n </hermes-accordion>\r\n </div>\r\n\r\n <!-- Tree view -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Tree View</p>\r\n <hermes-tree>\r\n <hermes-tree-node [hermesExpanded]=\"true\">\r\n Root Node\r\n <hermes-tree-node [hermesSelected]=\"1\"> Child One </hermes-tree-node>\r\n <hermes-tree-node>\r\n Child Two\r\n <hermes-tree-node>Grandchild</hermes-tree-node>\r\n </hermes-tree-node>\r\n </hermes-tree-node>\r\n </hermes-tree>\r\n </div>\r\n\r\n <!-- Progress bar -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Progress Bar</p>\r\n <hermes-progress-bar hermesValue=\"20\" hermesMax=\"100\"></hermes-progress-bar>\r\n <hermes-progress-bar hermesValue=\"55\" hermesMax=\"100\" hermesColor=\"warning\" hermesLabeled></hermes-progress-bar>\r\n <hermes-progress-bar hermesValue=\"80\" hermesMax=\"100\" hermesColor=\"success\"></hermes-progress-bar>\r\n <hermes-progress-bar hermesValue=\"40\" hermesMax=\"100\" hermesColor=\"danger\"></hermes-progress-bar>\r\n </div>\r\n\r\n <!-- Vertical nav -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Vertical Navigation</p>\r\n <div class=\"tb-nav-preview-wrap\">\r\n <hermes-vertical-nav [hermesVerticalNavCollapsible]=\"true\">\r\n <hermes-vertical-nav-group hermesVerticalNavGroupExpanded>\r\n <hermes-icon shape=\"home\" hermesVerticalNavIcon></hermes-icon>\r\n Dashboard\r\n <hermes-vertical-nav-group-children>\r\n <a hermesVerticalNavLink href=\"javascript:void(0)\" class=\"active\">Overview</a>\r\n <a hermesVerticalNavLink href=\"javascript:void(0)\">Analytics</a>\r\n </hermes-vertical-nav-group-children>\r\n </hermes-vertical-nav-group>\r\n <hermes-vertical-nav-group>\r\n <hermes-icon shape=\"cog\" hermesVerticalNavIcon></hermes-icon>\r\n Settings\r\n <hermes-vertical-nav-group-children>\r\n <a hermesVerticalNavLink href=\"javascript:void(0)\">Profile</a>\r\n <a hermesVerticalNavLink href=\"javascript:void(0)\">Security</a>\r\n </hermes-vertical-nav-group-children>\r\n </hermes-vertical-nav-group>\r\n </hermes-vertical-nav>\r\n </div>\r\n </div>\r\n\r\n <!-- Stepper -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Stepper</p>\r\n <form hermesStepper #tbStepperForm=\"ngForm\">\r\n <hermes-stepper-panel ngModelGroup=\"account\">\r\n <hermes-step-title>Account Details</hermes-step-title>\r\n <hermes-step-description>Tell us about yourself</hermes-step-description>\r\n <hermes-step-content>\r\n <hermes-input-container>\r\n <label>Full Name</label>\r\n <input hermesInput name=\"fullName\" [(ngModel)]=\"stepperForm.account.fullName\" />\r\n </hermes-input-container>\r\n <button hermesStepButton=\"next\">Next</button>\r\n </hermes-step-content>\r\n </hermes-stepper-panel>\r\n\r\n <hermes-stepper-panel ngModelGroup=\"confirm\">\r\n <hermes-step-title>Confirmation</hermes-step-title>\r\n <hermes-step-description>Review and submit</hermes-step-description>\r\n <hermes-step-content>\r\n <hermes-checkbox-container>\r\n <hermes-checkbox-wrapper>\r\n <input type=\"checkbox\" hermesCheckbox name=\"agree\" [(ngModel)]=\"stepperForm.confirm.agree\" />\r\n <label>I agree to the terms</label>\r\n </hermes-checkbox-wrapper>\r\n </hermes-checkbox-container>\r\n <button hermesStepButton=\"previous\">Previous</button>\r\n <button hermesStepButton=\"submit\">Submit</button>\r\n </hermes-step-content>\r\n </hermes-stepper-panel>\r\n </form>\r\n </div>\r\n\r\n <!-- Datagrid -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Datagrid</p>\r\n <hermes-datagrid [hermesDgSelectionType]=\"'multi'\">\r\n <hermes-dg-column>Name</hermes-dg-column>\r\n <hermes-dg-column>Role</hermes-dg-column>\r\n <hermes-dg-column>Status</hermes-dg-column>\r\n @for (row of rows; track row.name) {\r\n <hermes-dg-row [hermesDgItem]=\"row\">\r\n <hermes-dg-cell>{{ row.name }}</hermes-dg-cell>\r\n <hermes-dg-cell>{{ row.role }}</hermes-dg-cell>\r\n <hermes-dg-cell>\r\n <span\r\n class=\"badge\"\r\n [class.badge-success]=\"row.status === 'Active'\"\r\n [class.badge-danger]=\"row.status === 'Inactive'\"\r\n >\r\n {{ row.status }}\r\n </span>\r\n </hermes-dg-cell>\r\n </hermes-dg-row>\r\n }\r\n <hermes-dg-footer>{{ rows.length }} users</hermes-dg-footer>\r\n </hermes-datagrid>\r\n </div>\r\n\r\n <!-- Tabs -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Tabs</p>\r\n <hermes-tabs>\r\n <hermes-tab>\r\n <button hermesTabLink>Dashboard</button>\r\n <hermes-tab-content>\r\n <p>Content for the Dashboard tab.</p>\r\n </hermes-tab-content>\r\n </hermes-tab>\r\n <hermes-tab>\r\n <button hermesTabLink>Management</button>\r\n <hermes-tab-content>\r\n <p>Content for the Management tab.</p>\r\n </hermes-tab-content>\r\n </hermes-tab>\r\n <hermes-tab>\r\n <button hermesTabLink>Settings</button>\r\n <hermes-tab-content>\r\n <p>Content for the Settings tab.</p>\r\n </hermes-tab-content>\r\n </hermes-tab>\r\n </hermes-tabs>\r\n </div>\r\n\r\n <!-- Timeline -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Timeline</p>\r\n <hermes-timeline>\r\n <hermes-timeline-step [hermesState]=\"timelineStates.SUCCESS\">\r\n <hermes-timeline-step-header>11:59 am</hermes-timeline-step-header>\r\n <hermes-timeline-step-title>Add KMS</hermes-timeline-step-title>\r\n <hermes-timeline-step-description>Root CA certificate requested.</hermes-timeline-step-description>\r\n </hermes-timeline-step>\r\n <hermes-timeline-step [hermesState]=\"timelineStates.CURRENT\">\r\n <hermes-timeline-step-header>12:04 pm</hermes-timeline-step-header>\r\n <hermes-timeline-step-title>Make KMS trust vCenter</hermes-timeline-step-title>\r\n <hermes-timeline-step-description>\r\n Upload the certificate to the KMS to complete the connection.\r\n </hermes-timeline-step-description>\r\n </hermes-timeline-step>\r\n <hermes-timeline-step [hermesState]=\"timelineStates.NOT_STARTED\">\r\n <hermes-timeline-step-header>--:-- --</hermes-timeline-step-header>\r\n <hermes-timeline-step-title>Enable Encryption</hermes-timeline-step-title>\r\n <hermes-timeline-step-description>Not started yet.</hermes-timeline-step-description>\r\n </hermes-timeline-step>\r\n </hermes-timeline>\r\n </div>\r\n\r\n <!-- Wizard launcher -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Wizard</p>\r\n <button class=\"btn btn-outline\" (click)=\"wizardOpen = true\">Open Wizard</button>\r\n <hermes-wizard [(hermesWizardOpen)]=\"wizardOpen\" hermesWizardSize=\"md\">\r\n <hermes-wizard-title>Sample Wizard</hermes-wizard-title>\r\n <hermes-wizard-button [type]=\"'cancel'\">Cancel</hermes-wizard-button>\r\n <hermes-wizard-button [type]=\"'previous'\">Back</hermes-wizard-button>\r\n <hermes-wizard-button [type]=\"'next'\">Next</hermes-wizard-button>\r\n <hermes-wizard-button [type]=\"'finish'\">Finish</hermes-wizard-button>\r\n <hermes-wizard-page>\r\n <ng-template hermesPageTitle>Step 1: Introduction</ng-template>\r\n Welcome to the wizard. This step introduces the process.\r\n </hermes-wizard-page>\r\n <hermes-wizard-page>\r\n <ng-template hermesPageTitle>Step 2: Configuration</ng-template>\r\n Configure the required options in this step.\r\n </hermes-wizard-page>\r\n <hermes-wizard-page>\r\n <ng-template hermesPageTitle>Step 3: Confirm</ng-template>\r\n Review your choices and click Finish.\r\n </hermes-wizard-page>\r\n </hermes-wizard>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- end preview card -->\r\n</div>\r\n<!-- end .tb-layout -->\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Color } from './color';\r\nimport { DEFAULT_OVERRIDES, TOKEN_KEYS } from './presets';\r\nimport { HslColor, ThemeColors, ThemePreset } from './types';\r\n\r\nconst GROUP_KEYS = Object.keys(TOKEN_KEYS).filter(key => key !== 'baseTokens') as (keyof ThemeColors)[];\r\n\r\nfunction hslString({ h, s, l }: HslColor): string {\r\n return `hsl(${h}deg, ${s}%, ${l}%)`;\r\n}\r\n\r\n/** Same lightness-shift formula `ThemeBuilderComponent` uses to derive tint/tint-dark/shade/dark from a base color. */\r\nfunction deriveVariant(name: string, base: HslColor, isDarkTheme: boolean): HslColor | null {\r\n if (name.endsWith('-tint-dark')) {\r\n return new HslColor(base.h, base.s, isDarkTheme ? 18 : 95);\r\n }\r\n if (name.endsWith('-tint')) {\r\n return new HslColor(base.h, base.s, isDarkTheme ? 25 : 94);\r\n }\r\n if (name.endsWith('-shade')) {\r\n return Color.shiftL(base, isDarkTheme ? 7 : -7);\r\n }\r\n if (name.endsWith('-dark')) {\r\n return Color.shiftL(base, isDarkTheme ? 20 : -10);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/** Clears every custom property `applyThemePreset` can set, restoring `el`'s shipped/default colors. */\r\nfunction clearThemeProperties(el: HTMLElement): void {\r\n for (const key of GROUP_KEYS) {\r\n TOKEN_KEYS[key].forEach((name: string) => el.style.removeProperty(name));\r\n }\r\n\r\n Object.values(DEFAULT_OVERRIDES).forEach((targets: string[]) => targets.forEach(target => el.style.removeProperty(target)));\r\n}\r\n\r\n/**\r\n * Applies a theme-builder preset's colors directly onto `el` as inline CSS custom properties —\r\n * the same mechanism `ThemeBuilderComponent` uses on its own preview sandbox. An inline style\r\n * always outranks the attribute-selector rules that ship the default/dark-theme tokens, so this\r\n * reskins whatever `el` themes (e.g. `document.body` reskins the whole page).\r\n *\r\n * Pass the identity preset (`light`/`dark`: null, see `DEFAULT_PRESET`) to clear every override\r\n * and fall back to the shipped defaults.\r\n */\r\nexport function applyThemePreset(el: HTMLElement, preset: ThemePreset, theme: 'light' | 'dark'): void {\r\n clearThemeProperties(el);\r\n\r\n const overrides = preset[theme];\r\n if (!overrides) {\r\n return;\r\n }\r\n\r\n const isDarkTheme = theme === 'dark';\r\n\r\n for (const groupKey of GROUP_KEYS) {\r\n const base = overrides[groupKey] as Color | undefined;\r\n if (!base) {\r\n continue;\r\n }\r\n\r\n el.style.setProperty(base.name, base.hsl);\r\n DEFAULT_OVERRIDES[base.name]?.forEach((target: string) => el.style.setProperty(target, `var(${base.name})`));\r\n\r\n TOKEN_KEYS[groupKey].forEach((name: string) => {\r\n if (name === base.name) {\r\n return;\r\n }\r\n\r\n const variant = deriveVariant(name, base.color, isDarkTheme);\r\n if (!variant) {\r\n return;\r\n }\r\n\r\n el.style.setProperty(name, hslString(variant));\r\n DEFAULT_OVERRIDES[name]?.forEach((target: string) => el.style.setProperty(target, `var(${name})`));\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nexport { ThemeBuilderComponent } from './theme-builder.component';\r\nexport { applyThemePreset } from './utils/apply-preset';\r\nexport { Color } from './utils/color';\r\nexport { DEFAULT_PRESET, PRESETS } from './utils/presets';\r\nexport { ThemeColor, ThemeColors, ThemePreset } from './utils/types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hermes-ui-angular-addons-theme-builder.mjs","sources":["../../../addons/theme-builder/utils/types.ts","../../../addons/theme-builder/utils/color.ts","../../../addons/theme-builder/utils/presets.ts","../../../addons/theme-builder/utils/css-generator.ts","../../../addons/theme-builder/utils/wcag.ts","../../../addons/theme-builder/theme-builder.component.ts","../../../addons/theme-builder/theme-builder.component.html","../../../addons/theme-builder/utils/apply-preset.ts","../../../addons/theme-builder/index.ts","../../../addons/theme-builder/hermes-ui-angular-addons-theme-builder.ts"],"sourcesContent":["/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport type { Color } from './color';\r\n\r\nexport interface WcagLevel {\r\n label: string;\r\n score: string;\r\n type: string;\r\n}\r\n\r\nexport interface ContrastResult {\r\n minContrast: { wcag: WcagLevel; score: number };\r\n backgrounds: { name: string; score: number; wcag: WcagLevel }[];\r\n}\r\n\r\n/**\r\n * Per-theme lookup keyed by token group / background name. Defaults to grouped\r\n * color variants (`Color[]`, used by `colorStruct`); pass `Color` for single-value\r\n * structures like `backgrounds`.\r\n */\r\nexport type HermesThemeStructure<T = Color[]> = { light: Record<string, T>; dark: Record<string, T> };\r\n\r\nfunction clamp(value: number, min: number, max: number): number {\r\n return Math.max(min, Math.min(max, value));\r\n}\r\n\r\n/** Normalizes a hue to `[0, 360)` — hue is cyclic, so out-of-range values wrap instead of clamping. */\r\nfunction wrapDegrees(value: number): number {\r\n return ((value % 360) + 360) % 360;\r\n}\r\n\r\n/** HSL color: hue wraps to 0–360, saturation/lightness clamp to 0–100. */\r\nexport class HslColor {\r\n readonly h: number;\r\n readonly s: number;\r\n readonly l: number;\r\n\r\n constructor(h: number, s: number, l: number) {\r\n this.h = wrapDegrees(h);\r\n this.s = clamp(s, 0, 100);\r\n this.l = clamp(l, 0, 100);\r\n }\r\n}\r\n\r\n/** RGB color: red/green/blue clamp to 0–255 and round to whole channel values. */\r\nexport class RgbColor {\r\n readonly r: number;\r\n readonly g: number;\r\n readonly b: number;\r\n\r\n constructor(r: number, g: number, b: number) {\r\n this.r = Math.round(clamp(r, 0, 255));\r\n this.g = Math.round(clamp(g, 0, 255));\r\n this.b = Math.round(clamp(b, 0, 255));\r\n }\r\n}\r\n\r\n/** LinearSRGB color: red/green/blue clamp to 0–1 — continuous linear light, not rounded. */\r\nexport class LinearSrgbColor {\r\n readonly r: number;\r\n readonly g: number;\r\n readonly b: number;\r\n\r\n constructor({ r, g, b }: RgbColor) {\r\n this.r = clamp(this.toLinear(r), 0, 1);\r\n this.g = clamp(this.toLinear(g), 0, 1);\r\n this.b = clamp(this.toLinear(b), 0, 1);\r\n }\r\n\r\n /** Un-gammas an sRGB channel (0–1) to linear light, per IEC 61966-2-1. */\r\n private toLinear(c: number): number {\r\n const s = c / 255;\r\n return s <= 0.04045 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);\r\n }\r\n}\r\n\r\n/** OKLCH color: lightness clamps to 0–1, chroma clamps to ≥0, hue wraps to 0–360. */\r\nexport class OklchColor {\r\n readonly l: number;\r\n readonly c: number;\r\n readonly h: number;\r\n\r\n constructor(l: number, c: number, h: number) {\r\n this.l = clamp(l, 0, 1);\r\n this.c = Math.max(0, c);\r\n this.h = wrapDegrees(h);\r\n }\r\n}\r\n\r\n/** OKLab color: lightness clamps to 0–1; `a`/`b` are unbounded perceptual axes. */\r\nexport class OKLabColor {\r\n readonly l: number;\r\n readonly a: number;\r\n readonly b: number;\r\n\r\n constructor(l: number, a: number, b: number) {\r\n this.l = clamp(l, 0, 1);\r\n this.a = a;\r\n this.b = b;\r\n }\r\n}\r\n\r\nexport interface ThemeColors {\r\n primary?: Color;\r\n info?: Color;\r\n success?: Color;\r\n warning?: Color;\r\n danger?: Color;\r\n}\r\n\r\nexport interface ThemePreset {\r\n name: string;\r\n light: ThemeColors;\r\n dark: ThemeColors;\r\n}\r\n\r\nexport interface ThemeColor {\r\n key: string;\r\n base: Color;\r\n variants: Color[];\r\n contrast: ContrastResult;\r\n}\r\n\r\nexport interface DataRow {\r\n name: string;\r\n role: string;\r\n status: string;\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { HslColor, LinearSrgbColor, OKLabColor, OklchColor, RgbColor } from './types';\r\n\r\n/**\r\n * A single theme token: its CSS custom property name, the original Hermes-provided\r\n * HSL value, and the current (possibly user-edited) color. Colors are stored in HSL;\r\n * RGB and HEX are derived on demand.\r\n */\r\nexport class Color {\r\n private _color?: HslColor;\r\n\r\n /**\r\n * @param name CSS custom property name, e.g. `--hermes-alias-status-info`\r\n * @param originalColor Hermes-provided HSL, e.g. `hsl(198deg 100% 59%)`\r\n */\r\n constructor(\r\n public name: string,\r\n public originalColor: string\r\n ) {}\r\n\r\n /** HSL components. Falls back to parsing `originalColor` when not explicitly set. */\r\n get color(): HslColor {\r\n return this._color ?? this.parseHsl(this.originalColor);\r\n }\r\n\r\n set color(value: HslColor) {\r\n this._color = value;\r\n }\r\n\r\n /** RGB components — HSL is converted to RGB only for relative luminance checks. */\r\n get rgb(): RgbColor {\r\n return this.hslToRgb(this.color);\r\n }\r\n\r\n /** HEX string — used by native color inputs. */\r\n get hex(): string {\r\n return this.hslToHex(this.color);\r\n }\r\n\r\n /** HSL string — used by native color inputs. */\r\n get hsl(): string {\r\n const { h, s, l } = this.color;\r\n return `hsl(${h}deg, ${s}%, ${l}%)`;\r\n }\r\n\r\n /**\r\n * OKLCH components — unlike HSL's `L`, OKLCH's `L` tracks perceived lightness\r\n * uniformly across all hues, which is why it's used for palette/contrast math.\r\n */\r\n get oklch(): OklchColor {\r\n return this.hslToOklch(this.color);\r\n }\r\n\r\n /** OKLCH string, CSS Color 4 syntax. */\r\n get oklchString(): string {\r\n const { l, c, h } = this.oklch;\r\n return `oklch(${Math.round(l * 1000) / 10}% ${Math.round(c * 10000) / 10000} ${Math.round(h * 10) / 10}deg)`;\r\n }\r\n\r\n /** Human-readable variant label derived from the token name suffix, e.g. `Tint dark`. */\r\n get label(): string {\r\n if (this.name.endsWith('-tint-dark')) {\r\n return 'Tint dark';\r\n } else if (this.name.endsWith('-tint')) {\r\n return 'Tint';\r\n } else if (this.name.endsWith('-shade')) {\r\n return 'Shade';\r\n } else if (this.name.endsWith('-dark')) {\r\n return 'Dark';\r\n }\r\n\r\n return 'Base';\r\n }\r\n\r\n get isOriginalColor(): boolean {\r\n // no original color override\r\n if (!this._color) {\r\n return true;\r\n }\r\n\r\n const originalColorHsl = this.parseHsl(this.originalColor);\r\n\r\n return (\r\n this._color.h === originalColorHsl.h &&\r\n this._color.s === originalColorHsl.s &&\r\n this._color.l === originalColorHsl.l\r\n );\r\n }\r\n\r\n static isHex(hex: string): boolean {\r\n return /^#[0-9a-fA-F]{6}$/.test(hex);\r\n }\r\n\r\n static shiftL({ h, s, l }: HslColor, delta: number): HslColor {\r\n return new HslColor(h, s, l + delta);\r\n }\r\n\r\n static hexToHsl(hex: string): HslColor {\r\n const h = hex.replace(/^#/, '');\r\n const full = h.length === 3 ? h[0] + h[0] + h[1] + h[1] + h[2] + h[2] : h;\r\n const n = parseInt(full, 16);\r\n const r = ((n >> 16) & 255) / 255;\r\n const g = ((n >> 8) & 255) / 255;\r\n const b = (n & 255) / 255;\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n const l = (max + min) / 2;\r\n\r\n if (max === min) {\r\n return new HslColor(0, 0, Math.round(l * 10000) / 100);\r\n }\r\n\r\n const d = max - min;\r\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n let hue = 0;\r\n if (max === r) {\r\n hue = ((g - b) / d + (g < b ? 6 : 0)) / 6;\r\n } else if (max === g) {\r\n hue = ((b - r) / d + 2) / 6;\r\n } else {\r\n hue = ((r - g) / d + 4) / 6;\r\n }\r\n\r\n // Round to second decimal. `s` and `l` are between 0 and 1.\r\n const saturation = Math.round(s * 10000) / 100;\r\n const lightness = Math.round(l * 10000) / 100;\r\n\r\n return new HslColor(Math.round(hue * 360), saturation, lightness);\r\n }\r\n\r\n /**\r\n * Converts HSL to OKLCH via linear sRGB and OKLab (CSS Color 4 / Björn Ottosson\r\n * formulas). Goes through OKLCH — not raw HSL — whenever perceptual uniformity\r\n * matters, since HSL's `L` looks lighter or darker depending on hue.\r\n */\r\n hslToOklch(hsl: HslColor): OklchColor {\r\n const linearSrgbColor = new LinearSrgbColor(this.hslToRgb(hsl));\r\n const oklabColor = this.linearSrgbToOklab(linearSrgbColor);\r\n\r\n const c = Math.sqrt(oklabColor.a * oklabColor.a + oklabColor.b * oklabColor.b);\r\n const hue = (Math.atan2(oklabColor.b, oklabColor.a) * 180) / Math.PI;\r\n\r\n return new OklchColor(oklabColor.l, c, hue);\r\n }\r\n\r\n reset(): void {\r\n this._color = undefined;\r\n }\r\n\r\n private hslToHex({ h, s, l }: HslColor): string {\r\n l /= 100;\r\n const a = (s * Math.min(l, 1 - l)) / 100;\r\n const f = (n: number) => {\r\n const k = (n + h / 30) % 12;\r\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\r\n return Math.round(255 * color)\r\n .toString(16)\r\n .padStart(2, '0');\r\n };\r\n return `#${f(0)}${f(8)}${f(4)}`;\r\n }\r\n\r\n /** Converts HSL to RGB — use only for relative luminance calculations. */\r\n private hslToRgb({ h, s, l }: HslColor): RgbColor {\r\n l /= 100;\r\n const a = (s * Math.min(l, 1 - l)) / 100;\r\n const f = (n: number) => {\r\n const k = (n + h / 30) % 12;\r\n return 255 * (l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1));\r\n };\r\n return new RgbColor(f(0), f(8), f(4));\r\n }\r\n\r\n /** Converts linear sRGB (0–1 channels) to OKLab. */\r\n private linearSrgbToOklab({ r, g, b }: LinearSrgbColor): OKLabColor {\r\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\r\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\r\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\r\n\r\n return new OKLabColor(\r\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\r\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\r\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\r\n );\r\n }\r\n\r\n /** Parses a CSS HSL string such as `hsl(198deg 100% 59%)`. */\r\n private parseHsl(input: string): HslColor {\r\n const [h = 0, s = 0, l = 0] = input.match(/[\\d.]+/g)?.map(Number) ?? [];\r\n return new HslColor(h, s, l);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Color } from './color';\r\nimport { DataRow, ThemePreset } from './types';\r\n\r\nexport const DEFAULT_OVERRIDES = {\r\n // primary\r\n // `--hermes-alias-object-accent-color`, not `-object-interaction-color`: that one is generic\r\n // interactive text (dropdown items, alert, datagrid…) and is neutral at rest by design — it\r\n // was the fan-out target here before, and it meant a colorful preset (Hibisco, say) painted\r\n // every dropdown's resting item text pink, not just the vertical nav icons this was meant for.\r\n // `interaction-color-selected` stays: a *selected* row taking the family color is normal,\r\n // expected \"recolor\" behavior, unlike its resting text.\r\n '--hermes-alias-primary': ['--hermes-alias-object-accent-color', '--hermes-alias-object-interaction-color-selected'],\r\n '--hermes-alias-primary-tint': ['--hermes-alias-object-interaction-background-hover'],\r\n '--hermes-alias-primary-shade': ['--hermes-alias-typography-link-color', '--hermes-alias-object-interaction-primary-hover'],\r\n '--hermes-alias-primary-dark': [\r\n '--hermes-alias-typography-link-color-hover',\r\n '--hermes-alias-typography-primary-hover',\r\n '--hermes-alias-object-interaction-primary-active',\r\n '--hermes-alias-object-interaction-color-hover',\r\n '--hermes-alias-object-interaction-color-active',\r\n '--hermes-alias-object-accent-color-active',\r\n ],\r\n '--hermes-alias-primary-tint-dark': [\r\n '--hermes-alias-object-interaction-background-selected',\r\n '--hermes-alias-object-interaction-background-shade-active',\r\n '--hermes-alias-object-interaction-primary-secondary-hover',\r\n ],\r\n // info\r\n '--hermes-alias-status-info': ['--hermes-alias-utility-blue'],\r\n '--hermes-alias-status-info-tint': [\r\n '--hermes-alias-object-interaction-info-secondary-hover',\r\n '--hermes-alias-utility-blue-tint',\r\n ],\r\n '--hermes-alias-status-info-shade': [\r\n '--hermes-alias-object-interaction-info-hover',\r\n '--hermes-alias-typography-info-hover',\r\n '--hermes-alias-utility-blue-shade',\r\n ],\r\n '--hermes-alias-status-info-dark': [\r\n '--hermes-alias-object-interaction-info-click',\r\n '--hermes-alias-object-interaction-info-active',\r\n '--hermes-alias-object-interaction-info-selected',\r\n ],\r\n // success\r\n '--hermes-alias-status-success': ['--hermes-alias-utility-green'],\r\n '--hermes-alias-status-success-tint': [\r\n '--hermes-alias-object-interaction-success-secondary-hover',\r\n '--hermes-alias-utility-green-tint',\r\n ],\r\n '--hermes-alias-status-success-shade': [\r\n '--hermes-alias-object-interaction-success-hover',\r\n '--hermes-alias-typography-success-hover',\r\n '--hermes-alias-utility-green-shade',\r\n ],\r\n '--hermes-alias-status-success-dark': [\r\n '--hermes-alias-object-interaction-success-click',\r\n '--hermes-alias-object-interaction-success-active',\r\n ],\r\n // warning\r\n '--hermes-alias-status-warning': ['--hermes-alias-utility-yellow'],\r\n '--hermes-alias-status-warning-tint': [\r\n '--hermes-alias-object-interaction-warning-secondary-hover',\r\n '--hermes-alias-utility-yellow-tint',\r\n ],\r\n '--hermes-alias-status-warning-shade': [\r\n '--hermes-alias-object-interaction-warning-hover',\r\n '--hermes-alias-typography-warning-hover',\r\n '--hermes-alias-utility-yellow-shade',\r\n ],\r\n '--hermes-alias-status-warning-dark': [\r\n '--hermes-alias-object-interaction-warning-click',\r\n '--hermes-alias-object-interaction-warning-active',\r\n ],\r\n //danger\r\n '--hermes-alias-status-danger': ['--hermes-alias-utility-red'],\r\n '--hermes-alias-status-danger-tint': [\r\n '--hermes-alias-object-interaction-danger-secondary-hover',\r\n '--hermes-alias-utility-red-tint',\r\n ],\r\n '--hermes-alias-status-danger-shade': [\r\n '--hermes-alias-object-interaction-danger-hover',\r\n '--hermes-alias-typography-danger-hover',\r\n '--hermes-alias-utility-red-shade',\r\n ],\r\n '--hermes-alias-status-danger-dark': [\r\n '--hermes-alias-object-interaction-danger-click',\r\n '--hermes-alias-object-interaction-danger-active',\r\n ],\r\n};\r\n\r\nexport const BACKGROUND_TOKENS = [\r\n {\r\n name: 'Text',\r\n token: '--hermes-alias-typography-color-100',\r\n },\r\n {\r\n name: 'App Background',\r\n token: '--hermes-alias-object-app-background',\r\n },\r\n {\r\n name: 'Interaction Background',\r\n token: '--hermes-alias-object-interaction-background',\r\n },\r\n {\r\n name: 'Container Background',\r\n token: '--hermes-alias-object-container-background',\r\n },\r\n];\r\n\r\nexport const TOKEN_KEYS = {\r\n baseTokens: [\r\n '--hermes-alias-primary',\r\n '--hermes-alias-status-info',\r\n '--hermes-alias-status-success',\r\n '--hermes-alias-status-warning',\r\n '--hermes-alias-status-danger',\r\n ],\r\n primary: [\r\n '--hermes-alias-primary',\r\n '--hermes-alias-primary-tint',\r\n '--hermes-alias-primary-tint-dark',\r\n '--hermes-alias-primary-shade',\r\n '--hermes-alias-primary-dark',\r\n ],\r\n info: [\r\n '--hermes-alias-status-info',\r\n '--hermes-alias-status-info-tint',\r\n '--hermes-alias-status-info-shade',\r\n '--hermes-alias-status-info-dark',\r\n ],\r\n success: [\r\n '--hermes-alias-status-success',\r\n '--hermes-alias-status-success-tint',\r\n '--hermes-alias-status-success-shade',\r\n '--hermes-alias-status-success-dark',\r\n ],\r\n warning: [\r\n '--hermes-alias-status-warning',\r\n '--hermes-alias-status-warning-tint',\r\n '--hermes-alias-status-warning-shade',\r\n '--hermes-alias-status-warning-dark',\r\n ],\r\n danger: [\r\n '--hermes-alias-status-danger',\r\n '--hermes-alias-status-danger-tint',\r\n '--hermes-alias-status-danger-shade',\r\n '--hermes-alias-status-danger-dark',\r\n ],\r\n};\r\n\r\n/** The default (Evergreen) theme. Acts as the identity preset that resets every color back to its shipped value. */\r\nexport const DEFAULT_PRESET: ThemePreset = {\r\n name: 'Evergreen',\r\n light: null,\r\n dark: null,\r\n};\r\n\r\nexport const PRESETS: ThemePreset[] = [\r\n // The eleven presets below only swap `primary` (the accent) — `info`/`success`/`warning`/\r\n // `danger` are left unset, same as Evergreen, since none of them change the meaning of \"this is\r\n // a success/warning/error state.\" The source theme this was ported from also varies a second,\r\n // `tertiary` color per family, but that one turned out to be a dataviz categorical color with no\r\n // Hermes equivalent yet (see git history if we ever want to revisit it) — not, as first assumed\r\n // here, the vertical nav's background, which stays theme-only in both systems.\r\n {\r\n name: 'Hibisco',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(338deg 62% 47%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(338deg 77% 59%)') },\r\n },\r\n {\r\n name: 'Oceano',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(211deg 62% 43%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(211deg 77% 54%)') },\r\n },\r\n {\r\n name: 'Ipê',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(36deg 70% 34%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(36deg 85% 41%)') },\r\n },\r\n {\r\n name: 'Jabuticaba',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(286deg 45% 48%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(286deg 60% 60%)') },\r\n },\r\n {\r\n name: 'Samambaia',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(132deg 52% 32%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(132deg 67% 38%)') },\r\n },\r\n {\r\n name: 'Anil',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(255deg 55% 56%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(255deg 70% 67%)') },\r\n },\r\n {\r\n name: 'Urucum',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(8deg 64% 45%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(8deg 79% 57%)') },\r\n },\r\n // Ported from the source theme's \"Superman\"/\"Batman\" families (a red-on-blue and a\r\n // yellow-on-graphite accent, respectively) under generic names — this package ships publicly,\r\n // and those are DC Comics character names.\r\n {\r\n name: 'Aviador',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(356deg 78% 45%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(356deg 88% 61%)') },\r\n },\r\n {\r\n name: 'Grafite',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(47deg 91% 27%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(47deg 94% 33%)') },\r\n },\r\n {\r\n name: 'Invencível',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(219deg 80% 50%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(219deg 90% 62%)') },\r\n },\r\n {\r\n name: 'Superchoque',\r\n light: { primary: new Color('--hermes-alias-primary', 'hsl(41deg 88% 30%)') },\r\n dark: { primary: new Color('--hermes-alias-primary', 'hsl(41deg 93% 36%)') },\r\n },\r\n];\r\n\r\nexport const SAMPLE_ROWS: DataRow[] = [\r\n { name: 'Ada Lovelace', role: 'Engineer', status: 'Active' },\r\n { name: 'Grace Hopper', role: 'Architect', status: 'Active' },\r\n { name: 'Alan Turing', role: 'Researcher', status: 'Inactive' },\r\n { name: 'Linus Torvalds', role: 'Engineer', status: 'Active' },\r\n { name: 'Margaret Hamilton', role: 'Director', status: 'Active' },\r\n];\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Color } from './color';\r\nimport { DEFAULT_OVERRIDES } from './presets';\r\nimport { HermesThemeStructure } from './types';\r\n\r\nexport function generateCSS(colorStruct: HermesThemeStructure, warningTextOverrideEnabled = true): string[] {\r\n const lines: string[] = ['/* Clarity Theme Override — generated by Clarity Theme Builder */'];\r\n const defaultOverrides = new Set<string>();\r\n\r\n for (const theme in colorStruct) {\r\n const changedGroups: { key: string; colors: Color[] }[] = [];\r\n\r\n for (const colorGroupKey in colorStruct[theme]) {\r\n const colorVariants = colorStruct[theme][colorGroupKey] as Color[];\r\n const changedColors = colorVariants.filter(color => !color.isOriginalColor);\r\n\r\n if (changedColors.length) {\r\n changedGroups.push({ key: colorGroupKey, colors: changedColors });\r\n }\r\n }\r\n\r\n if (!changedGroups.length) {\r\n continue;\r\n }\r\n\r\n lines.push(`\\n\\n[hermes-theme~='${theme}'] {`);\r\n\r\n for (const group of changedGroups) {\r\n lines.push(` /* ${group.key} */`);\r\n\r\n for (const color of group.colors) {\r\n lines.push(` ${color.name}: ${color.hsl};`);\r\n\r\n // warning text override — mirrors the same condition applied live in applyPreviewStyles; light theme only\r\n if (warningTextOverrideEnabled && theme === 'light' && color.name === '--hermes-alias-status-warning') {\r\n lines.push(` --hermes-alias-typography-color-black: var(--hermes-alias-typography-color-100);`);\r\n }\r\n\r\n DEFAULT_OVERRIDES[color.name]?.forEach((override: string) => {\r\n const overrideResult = ` ${override}: var(${color.name});`;\r\n\r\n if (!defaultOverrides.has(overrideResult)) {\r\n defaultOverrides.add(overrideResult);\r\n }\r\n });\r\n }\r\n\r\n lines.push('');\r\n }\r\n lines.push(`}`);\r\n }\r\n\r\n if (lines.length === 1) {\r\n lines.push('\\n/* NO changes */');\r\n }\r\n\r\n if (defaultOverrides.size > 0) {\r\n const overrideLines = ['\\n\\n[hermes-theme] {', ...defaultOverrides.values(), '}'];\r\n\r\n return lines.slice(0, 1).concat(overrideLines, lines.slice(1));\r\n }\r\n\r\n return lines;\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\n// WCAG 2.0 contrast formulas extracted from wcag-contrast@3.0.0 (BSD-2-Clause).\r\n\r\nimport { RgbColor, WcagLevel } from './types';\r\n\r\nconst redCoefficient = 0.2126;\r\nconst greenCoefficient = 0.7152;\r\nconst blueCoefficient = 0.0722;\r\nconst lowGammaCoefficient = 12.92;\r\n\r\nfunction adjustGamma(v: number): number {\r\n return Math.pow((v + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nfunction relativeLuminance({ r, g, b }: RgbColor): number {\r\n const colorMap = [r, g, b].map(c => {\r\n const s = c / 255;\r\n return s <= 0.03928 ? s / lowGammaCoefficient : adjustGamma(s);\r\n });\r\n\r\n return colorMap[0] * redCoefficient + colorMap[1] * greenCoefficient + colorMap[2] * blueCoefficient;\r\n}\r\n\r\nexport function contrastRatio(a: RgbColor, b: RgbColor): number {\r\n const l1 = relativeLuminance(a);\r\n const l2 = relativeLuminance(b);\r\n return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);\r\n}\r\n\r\nexport function wcagScore(ratio: number): WcagLevel {\r\n const result = {\r\n label: 'Fail',\r\n score: Math.max(ratio, 0).toFixed(2),\r\n type: 'danger',\r\n };\r\n\r\n if (ratio >= 7) {\r\n result.label = 'AAA';\r\n result.type = 'success';\r\n } else if (ratio >= 4.5) {\r\n result.label = 'AA';\r\n result.type = 'success';\r\n } else if (ratio >= 3) {\r\n result.label = 'AA Large';\r\n result.type = 'warning';\r\n }\r\n\r\n return result;\r\n}\r\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n HermesIcons,\n HermesModule,\n HermesTimelineStepState,\n cogIcon,\n homeIcon,\n moonIcon,\n sunIcon,\n undoIcon,\n userIcon,\n} from '@hermes-ui/angular';\n\nimport { Color } from './utils/color';\nimport { generateCSS } from './utils/css-generator';\nimport {\n BACKGROUND_TOKENS,\n DEFAULT_PRESET,\n DEFAULT_OVERRIDES,\n PRESETS,\n SAMPLE_ROWS,\n TOKEN_KEYS,\n} from './utils/presets';\nimport { HermesThemeStructure, ContrastResult, DataRow, HslColor, ThemeColor, ThemePreset } from './utils/types';\nimport { contrastRatio, wcagScore } from './utils/wcag';\n\n@Component({\n selector: 'hermes-theme-builder',\n templateUrl: './theme-builder.component.html',\n styleUrl: './theme-builder.component.scss',\n imports: [HermesModule, CommonModule, FormsModule],\n})\nexport class ThemeBuilderComponent implements OnInit, AfterViewInit {\n /** Emits the generated CSS override text whenever a color, preset, reset, or override toggle changes. */\n @Output() generatedCSS = new EventEmitter<string>();\n\n @ViewChild('previewWrapper') previewWrapper!: ElementRef<HTMLElement>;\n @ViewChild('previewDarkWrapper') previewDarkWrapper!: ElementRef<HTMLElement>;\n\n // Tracks which preset is active so CSS output can use token refs instead of hex values.\n // Set to null when the user manually edits any color.\n activePreset: ThemePreset | null = null;\n\n activeTheme: 'light' | 'dark' = 'light';\n\n // Forces black text on the warning color for legibility — toggled via the \"Warning text override\" switch.\n warningTextOverrideEnabled = true;\n\n colorStruct: HermesThemeStructure = {\n light: {},\n dark: {},\n };\n\n backgrounds: HermesThemeStructure<Color> = {\n light: {},\n dark: {},\n };\n\n themeColors: ThemeColor[] = [];\n\n // State backing the built-in default preview content.\n breadcrumbs = [\n { label: 'Framework', href: 'javascript://' },\n { label: 'Angular', href: 'javascript://' },\n { label: 'Hermes', href: 'javascript://' },\n ];\n wizardOpen = false;\n rows: DataRow[] = SAMPLE_ROWS;\n description: string;\n stepperForm = {\n account: { fullName: '' },\n confirm: { agree: false },\n };\n\n readonly timelineStates = HermesTimelineStepState;\n\n private _presets: ThemePreset[] = [DEFAULT_PRESET, ...PRESETS];\n\n constructor() {\n HermesIcons.addIcons(sunIcon, moonIcon, undoIcon, homeIcon, cogIcon, userIcon);\n }\n\n /**\n * Presets available in the preset selector. Defaults to Hermes's built-in preset list.\n * The default (Evergreen) preset is always prepended, so it's guaranteed to remain available\n * as a fallback even when a custom list is provided.\n */\n @Input()\n get presets(): ThemePreset[] {\n return this._presets;\n }\n\n set presets(value: ThemePreset[]) {\n this._presets = [DEFAULT_PRESET, ...(value ?? [])];\n }\n\n get isDarkTheme(): boolean {\n return this.activeTheme === 'dark';\n }\n\n get generatedCss(): string {\n return generateCSS(this.colorStruct, this.warningTextOverrideEnabled).join('\\n');\n }\n\n ngOnInit(): void {\n this.activePreset = this.presets?.[0] ?? null;\n }\n\n ngAfterViewInit(): void {\n this.buildColorStructure();\n\n this.applyPreviewStyles();\n }\n\n toggleActiveTheme(): void {\n this.activeTheme = this.activeTheme === 'dark' ? 'light' : 'dark';\n\n this.applyPreviewStyles();\n this.refreshThemeColors();\n }\n\n setCurrentColor(colorVariant: Color, hex: string, colorGroup: Color[] = []): void {\n if (Color.isHex(hex)) {\n colorVariant.color = Color.hexToHsl(hex);\n\n this.colorBuilder(colorVariant, colorGroup);\n\n this.applyPreviewStyles();\n this.refreshThemeColors();\n this.resetActivePreset();\n }\n }\n\n applyPreset(preset: ThemePreset): void {\n this.activePreset = preset;\n\n for (const theme of Object.keys(this.activePreset)) {\n if (theme === 'name') {\n continue;\n }\n\n this.resetAllThemeColors(theme);\n\n if (!this.activePreset[theme]) {\n continue;\n }\n\n for (const activePresetKey of Object.keys(this.activePreset[theme])) {\n const presetColor = this.activePreset[theme][activePresetKey];\n const activeColor = this.colorStruct[theme][activePresetKey].find(c => c.name === presetColor.name);\n\n activeColor.color = presetColor.color;\n\n this.colorBuilder(activeColor, this.colorStruct[theme][activePresetKey], theme === 'dark');\n }\n }\n\n this.applyPreviewStyles();\n this.refreshThemeColors();\n }\n\n resetAllThemeColors(theme: string) {\n for (const key of Object.keys(this.colorStruct[theme])) {\n const tokenGroup = this.colorStruct[theme][key];\n\n for (let i = 0; i < tokenGroup.length; i++) {\n tokenGroup[i].reset();\n }\n }\n }\n\n resetColor($event: Event, color: Color, colorGroup: Color[] = []) {\n $event.stopPropagation();\n color.reset();\n\n colorGroup?.forEach(color => {\n color.reset();\n });\n\n this.applyPreviewStyles();\n this.refreshThemeColors();\n this.resetActivePreset();\n }\n\n onWarningTextOverrideChange(): void {\n this.applyPreviewStyles();\n this.generatedCSS.emit(this.generatedCss);\n }\n\n applyPreviewStyles(): void {\n const el = this.previewWrapper?.nativeElement;\n if (!el) {\n return;\n }\n\n const colorGroups = this.colorStruct[this.activeTheme];\n\n for (const colorGroupKey in colorGroups) {\n const colorVariants = colorGroups[colorGroupKey];\n for (let i = 0; i < colorVariants.length; i++) {\n const color = colorVariants[i] as Color;\n\n el.style.setProperty(color.name, color.hsl);\n\n // warning text override — toggled via the \"Warning text override\" switch; light theme only\n if (color.name === '--hermes-alias-status-warning') {\n const override = '--hermes-alias-typography-color-black';\n\n if (this.activeTheme !== 'light' || !this.warningTextOverrideEnabled || color.isOriginalColor) {\n el.style.removeProperty(override);\n } else {\n el.style.setProperty(override, 'var(--hermes-alias-typography-color-100)');\n }\n }\n\n DEFAULT_OVERRIDES[color.name]?.forEach((override: string) => {\n // remove override if color isOriginalColor\n // another shorter variant is:\n // el.style.setProperty(override, color.isOriginalColor ? null : `var(${color.name})`);\n if (color.isOriginalColor) {\n el.style.removeProperty(override);\n } else {\n el.style.setProperty(override, `var(${color.name})`);\n }\n });\n }\n }\n }\n\n private getContrast(color: Color): ContrastResult {\n const backgrounds: ContrastResult['backgrounds'] = [];\n\n let minScore = 10;\n for (const bgName in this.backgrounds[this.activeTheme]) {\n const background = this.backgrounds[this.activeTheme][bgName];\n\n const score = Math.max(contrastRatio(color.rgb, background.rgb), 0);\n\n if (minScore > score) {\n minScore = score;\n }\n\n backgrounds.push({\n name: bgName,\n score,\n wcag: wcagScore(score),\n });\n }\n\n return {\n minContrast: { wcag: wcagScore(minScore), score: minScore },\n backgrounds,\n };\n }\n\n private refreshThemeColors(): void {\n const themeColors: ThemeColor[] = [];\n const colorGroups = this.colorStruct[this.activeTheme];\n\n for (const key of Object.keys(colorGroups)) {\n const colorGroup = colorGroups[key];\n const baseColor = colorGroup.find(c => c.label === 'Base');\n\n themeColors.push({\n key,\n base: baseColor,\n variants: colorGroup.filter(c => c.label !== 'Base'),\n contrast: this.getContrast(baseColor),\n });\n }\n\n this.themeColors = themeColors;\n this.generatedCSS.emit(this.generatedCss);\n }\n\n private resetActivePreset(): void {\n const themes = Object.values(this.colorStruct) as Record<string, Color[]>[];\n const allOriginal = themes.every(theme => {\n return Object.values(theme).every(colors => {\n return colors.every(color => color.isOriginalColor);\n });\n });\n\n this.activePreset = allOriginal ? (this.presets?.[0] ?? null) : null;\n }\n\n private colorBuilder(colorVariant: Color, colorGroup: Color[], isDarkTheme = this.isDarkTheme) {\n if (TOKEN_KEYS.baseTokens.includes(colorVariant.name)) {\n const baseColorHSL = colorVariant.color;\n\n colorGroup.forEach(item => {\n if (item.name.endsWith('-tint')) {\n item.color = new HslColor(baseColorHSL.h, baseColorHSL.s, isDarkTheme ? 25 : 94);\n } else if (item.name.endsWith('-tint-dark')) {\n item.color = new HslColor(baseColorHSL.h, baseColorHSL.s, isDarkTheme ? 18 : 95);\n } else if (item.name.endsWith('-shade')) {\n item.color = Color.shiftL(baseColorHSL, isDarkTheme ? 7 : -7);\n } else if (item.name.endsWith('-dark')) {\n item.color = Color.shiftL(baseColorHSL, isDarkTheme ? 20 : -10);\n }\n });\n }\n }\n\n private buildColorStructure(): void {\n const lightEl = this.previewWrapper?.nativeElement;\n const darkEl = this.previewDarkWrapper?.nativeElement;\n if (!lightEl || !darkEl) {\n return;\n }\n\n const lightStyles = window.getComputedStyle(lightEl);\n const darkStyles = window.getComputedStyle(darkEl);\n\n for (const key in TOKEN_KEYS) {\n if (key === 'baseTokens') {\n continue;\n }\n\n const tokenGroup = TOKEN_KEYS[key];\n this.colorStruct['light'][key] = [];\n this.colorStruct['dark'][key] = [];\n for (let i = 0; i < tokenGroup.length; i++) {\n this.colorStruct['light'][key].push(new Color(tokenGroup[i], lightStyles.getPropertyValue(tokenGroup[i])));\n this.colorStruct['dark'][key].push(new Color(tokenGroup[i], darkStyles.getPropertyValue(tokenGroup[i])));\n }\n }\n\n BACKGROUND_TOKENS.forEach(bg => {\n this.backgrounds['light'][bg.name] = new Color(bg.token, lightStyles.getPropertyValue(bg.token));\n this.backgrounds['dark'][bg.name] = new Color(bg.token, darkStyles.getPropertyValue(bg.token));\n });\n\n this.refreshThemeColors();\n }\n}\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n\r\n<!-- Preset selector -->\r\n<div class=\"tb-presets\" hermes-layout=\"m-t:lg\">\r\n <div class=\"tb-preset-cards hermes-row\">\r\n @for (preset of presets; track preset.name) {\r\n <a\r\n href=\"javascript://\"\r\n class=\"card clickable tb-preset-card hermes-col-1\"\r\n [class.tb-preset-card-active]=\"activePreset?.name === preset.name\"\r\n (click)=\"applyPreset(preset)\"\r\n >\r\n <div class=\"tb-preset-swatch\" [style.background-color]=\"preset.light?.primary?.hex\"></div>\r\n <div class=\"card-text\">{{ preset.name }}</div>\r\n </a>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- ── Preview DARK card ── -->\r\n<!-- Invisible for filling the dark values on initial load -->\r\n<div style=\"display: none\" #previewDarkWrapper hermes-theme=\"dark\"></div>\r\n\r\n<!-- ── Two-column layout: controls | preview ── -->\r\n<div class=\"tb-layout\" hermes-layout=\"m-t:lg m-b:lg\">\r\n <!-- ── Controls card (sticky left column) ── -->\r\n <div class=\"card tb-controls-card\">\r\n <div class=\"card-block\">\r\n @for (colorGroup of themeColors; track colorGroup.key) {\r\n <div>\r\n <hermes-stack-view>\r\n <hermes-stack-header>\r\n <div class=\"tb-control-header\">\r\n {{ colorGroup.key | uppercase }}\r\n\r\n <hermes-tooltip>\r\n <hermes-label\r\n hermes-layout=\"m:none\"\r\n hermesTooltipTrigger\r\n [hermesText]=\"'Contrast ' + colorGroup.contrast.minContrast.wcag.label\"\r\n [hermesBadgeText]=\"colorGroup.contrast.minContrast.wcag.score\"\r\n [hermesColor]=\"colorGroup.contrast.minContrast.wcag.type\"\r\n >\r\n </hermes-label>\r\n <hermes-tooltip-content hermesPosition=\"right\" hermesSize=\"lg\">\r\n <div class=\"tb-wcag-container\">\r\n @for (background of colorGroup.contrast.backgrounds; track background.name) {\r\n <div class=\"tb-wcag-item\">\r\n {{ background.name }}:\r\n <hermes-label\r\n hermes-layout=\"m:none\"\r\n hermesType=\"solid\"\r\n [hermesText]=\"background.wcag.label\"\r\n [hermesBadgeText]=\"background.wcag.score\"\r\n [hermesColor]=\"background.wcag.type\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n </hermes-tooltip-content>\r\n </hermes-tooltip>\r\n </div>\r\n </hermes-stack-header>\r\n <hermes-stack-block [hermesStackViewLevel]=\"1\">\r\n <hermes-stack-label class=\"tb-stack-label\">{{ colorGroup.base.label }}</hermes-stack-label>\r\n <hermes-stack-content style=\"width: 52%\">\r\n <div class=\"tb-color-input-wrap\">\r\n <input\r\n type=\"color\"\r\n class=\"tb-color-picker\"\r\n [value]=\"colorGroup.base.hex\"\r\n [attr.aria-label]=\"colorGroup.key + ' ' + colorGroup.base.label + ' color picker'\"\r\n (input)=\"\r\n setCurrentColor(\r\n colorGroup.base,\r\n $any($event.target).value,\r\n colorStruct[activeTheme][colorGroup.key]\r\n )\r\n \"\r\n />\r\n <input\r\n readonly\r\n type=\"text\"\r\n class=\"tb-hex-input\"\r\n [value]=\"colorGroup.base.hex\"\r\n [attr.aria-label]=\"colorGroup.key + ' ' + colorGroup.base.label + ' color hex value'\"\r\n />\r\n <button\r\n *ngIf=\"!colorGroup.base.isOriginalColor\"\r\n class=\"btn btn-sm btn-icon btn-primary\"\r\n (click)=\"resetColor($event, colorGroup.base, colorStruct[activeTheme][colorGroup.key])\"\r\n title=\"Back to original color\"\r\n >\r\n <hermes-icon shape=\"undo\"></hermes-icon>\r\n </button>\r\n </div>\r\n </hermes-stack-content>\r\n\r\n @for (colorVariant of colorGroup.variants; track colorVariant.label) {\r\n <hermes-stack-block [hermesStackViewLevel]=\"2\">\r\n <hermes-stack-label>{{ colorVariant.label }}</hermes-stack-label>\r\n <hermes-stack-content>\r\n <div class=\"tb-color-input-wrap\">\r\n <input\r\n type=\"color\"\r\n class=\"tb-color-picker\"\r\n [value]=\"colorVariant.hex\"\r\n [attr.aria-label]=\"colorGroup.key + ' ' + colorVariant.label + ' color picker'\"\r\n (input)=\"setCurrentColor(colorVariant, $any($event.target).value)\"\r\n />\r\n <input\r\n readonly\r\n type=\"text\"\r\n class=\"tb-hex-input\"\r\n [value]=\"colorVariant.hex\"\r\n [attr.aria-label]=\"colorGroup.key + ' ' + colorVariant.label + ' color hex value'\"\r\n />\r\n <button\r\n *ngIf=\"!colorVariant.isOriginalColor\"\r\n class=\"btn btn-sm btn-icon btn-primary\"\r\n (click)=\"resetColor($event, colorVariant)\"\r\n title=\"Back to original color\"\r\n >\r\n <hermes-icon shape=\"undo\"></hermes-icon>\r\n </button>\r\n </div>\r\n </hermes-stack-content>\r\n </hermes-stack-block>\r\n }\r\n </hermes-stack-block>\r\n </hermes-stack-view>\r\n\r\n @if (colorGroup.key === 'warning' && !colorGroup.base.isOriginalColor) {\r\n <hermes-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n hermesToggle\r\n [(ngModel)]=\"warningTextOverrideEnabled\"\r\n (ngModelChange)=\"onWarningTextOverrideChange()\"\r\n />\r\n <label>Light Theme Warning Text Override</label>\r\n </hermes-toggle-wrapper>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- end controls card -->\r\n\r\n <!-- ── Preview card (right column) ── -->\r\n <div class=\"card tb-preview-card\">\r\n <div class=\"card-header\">\r\n Live Preview:\r\n <button\r\n class=\"btn btn-outline-neutral\"\r\n [attr.aria-label]=\"'Switch to ' + (isDarkTheme ? 'light' : 'dark') + ' theme'\"\r\n (click)=\"toggleActiveTheme()\"\r\n >\r\n <hermes-icon [shape]=\"isDarkTheme ? 'moon' : 'sun'\" [solid]=\"true\" [size]=\"'md'\"></hermes-icon>\r\n {{ isDarkTheme ? 'Dark' : 'Light' }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"card-block tb-preview-sandbox\" #previewWrapper [attr.hermes-theme]=\"activeTheme\">\r\n <ng-content></ng-content>\r\n\r\n <!-- Breadcrumbs -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Breadcrumbs</p>\r\n <div class=\"tb-preview-row\">\r\n <hermes-breadcrumbs [items]=\"breadcrumbs\"></hermes-breadcrumbs>\r\n </div>\r\n </div>\r\n\r\n <!-- Buttons -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Buttons</p>\r\n <div class=\"tb-preview-row\">\r\n <button class=\"btn btn-primary\">Primary</button>\r\n <button class=\"btn\">Primary Outline</button>\r\n <button class=\"btn btn-link\">Primary FLAT</button>\r\n <button class=\"btn btn-info\">Info</button>\r\n <button class=\"btn btn-info-outline\">Info Outline</button>\r\n <button class=\"btn btn-link-info\">Info Flat</button>\r\n <button class=\"btn btn-danger\">Danger</button>\r\n <button class=\"btn btn-success\">Success</button>\r\n <button class=\"btn btn-warning\">Warning</button>\r\n <button class=\"btn btn-primary\" disabled>Disabled</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Badges & Labels -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Badges & Labels</p>\r\n <div class=\"tb-preview-row\">\r\n <hermes-label\r\n [hermesType]=\"'outlined'\"\r\n [hermesClickable]=\"true\"\r\n [hermesColor]=\"'info'\"\r\n [hermesText]=\"'info'\"\r\n [hermesBadgeText]=\"'99+'\"\r\n />\r\n <hermes-label [hermesType]=\"'outlined'\" [hermesColor]=\"'danger'\" [hermesText]=\"'danger'\" [hermesBadgeText]=\"'99+'\" />\r\n <hermes-label [hermesType]=\"'outlined'\" [hermesColor]=\"'success'\" [hermesText]=\"'success'\" [hermesBadgeText]=\"'99+'\" />\r\n <hermes-label\r\n [hermesType]=\"'outlined'\"\r\n [hermesClickable]=\"true\"\r\n [hermesColor]=\"'warning'\"\r\n [hermesText]=\"'warning'\"\r\n [hermesBadgeText]=\"'99+'\"\r\n />\r\n\r\n <hermes-label [hermesType]=\"'solid'\" [hermesColor]=\"'info'\" [hermesText]=\"'info'\" [hermesBadgeText]=\"'99+'\" />\r\n <hermes-label\r\n [hermesType]=\"'solid'\"\r\n [hermesClickable]=\"true\"\r\n [hermesColor]=\"'danger'\"\r\n [hermesText]=\"'danger'\"\r\n [hermesBadgeText]=\"'99+'\"\r\n />\r\n <hermes-label\r\n [hermesType]=\"'solid'\"\r\n [hermesClickable]=\"true\"\r\n [hermesColor]=\"'success'\"\r\n [hermesText]=\"'success'\"\r\n [hermesBadgeText]=\"'99+'\"\r\n />\r\n <hermes-label [hermesType]=\"'solid'\" [hermesColor]=\"'warning'\" [hermesText]=\"'warning'\" [hermesBadgeText]=\"'99+'\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Alerts -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Alerts</p>\r\n <hermes-alert [hermesAlertType]=\"'info'\">\r\n <hermes-alert-item><span class=\"alert-text\">This is an info alert.</span></hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'success'\">\r\n <hermes-alert-item><span class=\"alert-text\">Operation completed successfully.</span></hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'warning'\">\r\n <hermes-alert-item><span class=\"alert-text\">Please review before proceeding.</span></hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'danger'\">\r\n <hermes-alert-item><span class=\"alert-text\">Something went wrong.</span></hermes-alert-item>\r\n </hermes-alert>\r\n </div>\r\n\r\n <!-- App-Level Alerts -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">App-Level Alerts</p>\r\n <hermes-alert [hermesAlertType]=\"'info'\" [hermesAlertAppLevel]=\"true\">\r\n <hermes-alert-item>\r\n <span class=\"alert-text\">This is an app level info.</span>\r\n <div class=\"alert-actions\">\r\n <button class=\"btn alert-action\"><hermes-icon shape=\"user\"></hermes-icon>Thanks</button>\r\n </div>\r\n </hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'danger'\" [hermesAlertAppLevel]=\"true\">\r\n <hermes-alert-item>\r\n <span class=\"alert-text\">This is an app level alert.</span>\r\n <div class=\"alert-actions\">\r\n <button class=\"btn alert-action\"><hermes-icon shape=\"user\"></hermes-icon>Fix</button>\r\n </div>\r\n </hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'warning'\" [hermesAlertAppLevel]=\"true\">\r\n <hermes-alert-item>\r\n <span class=\"alert-text\">This is an app level warning.</span>\r\n <div class=\"alert-actions\">\r\n <button class=\"btn alert-action\"><hermes-icon shape=\"user\"></hermes-icon>Check</button>\r\n </div>\r\n </hermes-alert-item>\r\n </hermes-alert>\r\n <hermes-alert [hermesAlertType]=\"'success'\" [hermesAlertAppLevel]=\"true\">\r\n <hermes-alert-item>\r\n <span class=\"alert-text\">This is an app level success.</span>\r\n <div class=\"alert-actions\">\r\n <button class=\"btn alert-action\"><hermes-icon shape=\"user\"></hermes-icon>Great</button>\r\n </div>\r\n </hermes-alert-item>\r\n </hermes-alert>\r\n </div>\r\n\r\n <!-- Forms -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Form Controls</p>\r\n <form hermesForm #tbForm=\"ngForm\" hermesLayout=\"horizontal\">\r\n <hermes-input-container>\r\n <label>Text input</label>\r\n <input hermesInput type=\"text\" placeholder=\"Enter value...\" />\r\n </hermes-input-container>\r\n <hermes-checkbox-container>\r\n <label>Checkbox</label>\r\n <hermes-checkbox-wrapper>\r\n <input type=\"checkbox\" hermesCheckbox checked />\r\n <label>Checkbox (checked)</label>\r\n </hermes-checkbox-wrapper>\r\n <hermes-checkbox-wrapper>\r\n <input type=\"checkbox\" hermesCheckbox />\r\n <label>Checkbox (unchecked)</label>\r\n </hermes-checkbox-wrapper>\r\n </hermes-checkbox-container>\r\n <hermes-radio-container>\r\n <label>Radio</label>\r\n <hermes-radio-wrapper>\r\n <input type=\"radio\" hermesRadio name=\"r1\" value=\"a\" checked />\r\n <label>Radio A</label>\r\n </hermes-radio-wrapper>\r\n <hermes-radio-wrapper>\r\n <input type=\"radio\" hermesRadio name=\"r1\" value=\"b\" />\r\n <label>Radio B</label>\r\n </hermes-radio-wrapper>\r\n </hermes-radio-container>\r\n <hermes-toggle-container>\r\n <label>Toggle</label>\r\n <hermes-toggle-wrapper>\r\n <input type=\"checkbox\" hermesToggle checked />\r\n <label>Toggle (on)</label>\r\n </hermes-toggle-wrapper>\r\n </hermes-toggle-container>\r\n\r\n <hermes-textarea-container>\r\n <label>Textarea</label>\r\n <textarea hermesTextarea [(ngModel)]=\"description\" name=\"description\" required></textarea>\r\n <hermes-control-helper>Please provide a description.</hermes-control-helper>\r\n <hermes-control-error *hermesIfError=\"'required'\">You must provide a description!</hermes-control-error>\r\n </hermes-textarea-container>\r\n </form>\r\n </div>\r\n\r\n <!-- Accordion -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Accordion</p>\r\n <hermes-accordion>\r\n <hermes-accordion-panel [hermesAccordionPanelOpen]=\"true\">\r\n <hermes-accordion-title>Panel One</hermes-accordion-title>\r\n <hermes-accordion-content>Content for the first accordion panel.</hermes-accordion-content>\r\n </hermes-accordion-panel>\r\n <hermes-accordion-panel>\r\n <hermes-accordion-title>Panel Two</hermes-accordion-title>\r\n <hermes-accordion-content>Content for the second accordion panel.</hermes-accordion-content>\r\n </hermes-accordion-panel>\r\n </hermes-accordion>\r\n </div>\r\n\r\n <!-- Tree view -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Tree View</p>\r\n <hermes-tree>\r\n <hermes-tree-node [hermesExpanded]=\"true\">\r\n Root Node\r\n <hermes-tree-node [hermesSelected]=\"1\"> Child One </hermes-tree-node>\r\n <hermes-tree-node>\r\n Child Two\r\n <hermes-tree-node>Grandchild</hermes-tree-node>\r\n </hermes-tree-node>\r\n </hermes-tree-node>\r\n </hermes-tree>\r\n </div>\r\n\r\n <!-- Progress bar -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Progress Bar</p>\r\n <hermes-progress-bar hermesValue=\"20\" hermesMax=\"100\"></hermes-progress-bar>\r\n <hermes-progress-bar hermesValue=\"55\" hermesMax=\"100\" hermesColor=\"warning\" hermesLabeled></hermes-progress-bar>\r\n <hermes-progress-bar hermesValue=\"80\" hermesMax=\"100\" hermesColor=\"success\"></hermes-progress-bar>\r\n <hermes-progress-bar hermesValue=\"40\" hermesMax=\"100\" hermesColor=\"danger\"></hermes-progress-bar>\r\n </div>\r\n\r\n <!-- Vertical nav -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Vertical Navigation</p>\r\n <div class=\"tb-nav-preview-wrap\">\r\n <hermes-vertical-nav [hermesVerticalNavCollapsible]=\"true\">\r\n <hermes-vertical-nav-group hermesVerticalNavGroupExpanded>\r\n <hermes-icon shape=\"home\" hermesVerticalNavIcon></hermes-icon>\r\n Dashboard\r\n <hermes-vertical-nav-group-children>\r\n <a hermesVerticalNavLink href=\"javascript:void(0)\" class=\"active\">Overview</a>\r\n <a hermesVerticalNavLink href=\"javascript:void(0)\">Analytics</a>\r\n </hermes-vertical-nav-group-children>\r\n </hermes-vertical-nav-group>\r\n <hermes-vertical-nav-group>\r\n <hermes-icon shape=\"cog\" hermesVerticalNavIcon></hermes-icon>\r\n Settings\r\n <hermes-vertical-nav-group-children>\r\n <a hermesVerticalNavLink href=\"javascript:void(0)\">Profile</a>\r\n <a hermesVerticalNavLink href=\"javascript:void(0)\">Security</a>\r\n </hermes-vertical-nav-group-children>\r\n </hermes-vertical-nav-group>\r\n </hermes-vertical-nav>\r\n </div>\r\n </div>\r\n\r\n <!-- Stepper -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Stepper</p>\r\n <form hermesStepper #tbStepperForm=\"ngForm\">\r\n <hermes-stepper-panel ngModelGroup=\"account\">\r\n <hermes-step-title>Account Details</hermes-step-title>\r\n <hermes-step-description>Tell us about yourself</hermes-step-description>\r\n <hermes-step-content>\r\n <hermes-input-container>\r\n <label>Full Name</label>\r\n <input hermesInput name=\"fullName\" [(ngModel)]=\"stepperForm.account.fullName\" />\r\n </hermes-input-container>\r\n <button hermesStepButton=\"next\">Next</button>\r\n </hermes-step-content>\r\n </hermes-stepper-panel>\r\n\r\n <hermes-stepper-panel ngModelGroup=\"confirm\">\r\n <hermes-step-title>Confirmation</hermes-step-title>\r\n <hermes-step-description>Review and submit</hermes-step-description>\r\n <hermes-step-content>\r\n <hermes-checkbox-container>\r\n <hermes-checkbox-wrapper>\r\n <input type=\"checkbox\" hermesCheckbox name=\"agree\" [(ngModel)]=\"stepperForm.confirm.agree\" />\r\n <label>I agree to the terms</label>\r\n </hermes-checkbox-wrapper>\r\n </hermes-checkbox-container>\r\n <button hermesStepButton=\"previous\">Previous</button>\r\n <button hermesStepButton=\"submit\">Submit</button>\r\n </hermes-step-content>\r\n </hermes-stepper-panel>\r\n </form>\r\n </div>\r\n\r\n <!-- Datagrid -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Datagrid</p>\r\n <hermes-datagrid [hermesDgSelectionType]=\"'multi'\">\r\n <hermes-dg-column>Name</hermes-dg-column>\r\n <hermes-dg-column>Role</hermes-dg-column>\r\n <hermes-dg-column>Status</hermes-dg-column>\r\n @for (row of rows; track row.name) {\r\n <hermes-dg-row [hermesDgItem]=\"row\">\r\n <hermes-dg-cell>{{ row.name }}</hermes-dg-cell>\r\n <hermes-dg-cell>{{ row.role }}</hermes-dg-cell>\r\n <hermes-dg-cell>\r\n <span\r\n class=\"badge\"\r\n [class.badge-success]=\"row.status === 'Active'\"\r\n [class.badge-danger]=\"row.status === 'Inactive'\"\r\n >\r\n {{ row.status }}\r\n </span>\r\n </hermes-dg-cell>\r\n </hermes-dg-row>\r\n }\r\n <hermes-dg-footer>{{ rows.length }} users</hermes-dg-footer>\r\n </hermes-datagrid>\r\n </div>\r\n\r\n <!-- Tabs -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Tabs</p>\r\n <hermes-tabs>\r\n <hermes-tab>\r\n <button hermesTabLink>Dashboard</button>\r\n <hermes-tab-content>\r\n <p>Content for the Dashboard tab.</p>\r\n </hermes-tab-content>\r\n </hermes-tab>\r\n <hermes-tab>\r\n <button hermesTabLink>Management</button>\r\n <hermes-tab-content>\r\n <p>Content for the Management tab.</p>\r\n </hermes-tab-content>\r\n </hermes-tab>\r\n <hermes-tab>\r\n <button hermesTabLink>Settings</button>\r\n <hermes-tab-content>\r\n <p>Content for the Settings tab.</p>\r\n </hermes-tab-content>\r\n </hermes-tab>\r\n </hermes-tabs>\r\n </div>\r\n\r\n <!-- Timeline -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Timeline</p>\r\n <hermes-timeline>\r\n <hermes-timeline-step [hermesState]=\"timelineStates.SUCCESS\">\r\n <hermes-timeline-step-header>11:59 am</hermes-timeline-step-header>\r\n <hermes-timeline-step-title>Add KMS</hermes-timeline-step-title>\r\n <hermes-timeline-step-description>Root CA certificate requested.</hermes-timeline-step-description>\r\n </hermes-timeline-step>\r\n <hermes-timeline-step [hermesState]=\"timelineStates.CURRENT\">\r\n <hermes-timeline-step-header>12:04 pm</hermes-timeline-step-header>\r\n <hermes-timeline-step-title>Make KMS trust vCenter</hermes-timeline-step-title>\r\n <hermes-timeline-step-description>\r\n Upload the certificate to the KMS to complete the connection.\r\n </hermes-timeline-step-description>\r\n </hermes-timeline-step>\r\n <hermes-timeline-step [hermesState]=\"timelineStates.NOT_STARTED\">\r\n <hermes-timeline-step-header>--:-- --</hermes-timeline-step-header>\r\n <hermes-timeline-step-title>Enable Encryption</hermes-timeline-step-title>\r\n <hermes-timeline-step-description>Not started yet.</hermes-timeline-step-description>\r\n </hermes-timeline-step>\r\n </hermes-timeline>\r\n </div>\r\n\r\n <!-- Wizard launcher -->\r\n <div class=\"tb-preview-section\">\r\n <p hermes-text=\"subsection uppercase bold\">Wizard</p>\r\n <button class=\"btn btn-outline\" (click)=\"wizardOpen = true\">Open Wizard</button>\r\n <hermes-wizard [(hermesWizardOpen)]=\"wizardOpen\" hermesWizardSize=\"md\">\r\n <hermes-wizard-title>Sample Wizard</hermes-wizard-title>\r\n <hermes-wizard-button [type]=\"'cancel'\">Cancel</hermes-wizard-button>\r\n <hermes-wizard-button [type]=\"'previous'\">Back</hermes-wizard-button>\r\n <hermes-wizard-button [type]=\"'next'\">Next</hermes-wizard-button>\r\n <hermes-wizard-button [type]=\"'finish'\">Finish</hermes-wizard-button>\r\n <hermes-wizard-page>\r\n <ng-template hermesPageTitle>Step 1: Introduction</ng-template>\r\n Welcome to the wizard. This step introduces the process.\r\n </hermes-wizard-page>\r\n <hermes-wizard-page>\r\n <ng-template hermesPageTitle>Step 2: Configuration</ng-template>\r\n Configure the required options in this step.\r\n </hermes-wizard-page>\r\n <hermes-wizard-page>\r\n <ng-template hermesPageTitle>Step 3: Confirm</ng-template>\r\n Review your choices and click Finish.\r\n </hermes-wizard-page>\r\n </hermes-wizard>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- end preview card -->\r\n</div>\r\n<!-- end .tb-layout -->\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Color } from './color';\r\nimport { DEFAULT_OVERRIDES, TOKEN_KEYS } from './presets';\r\nimport { HslColor, ThemeColors, ThemePreset } from './types';\r\n\r\nconst GROUP_KEYS = Object.keys(TOKEN_KEYS).filter(key => key !== 'baseTokens') as (keyof ThemeColors)[];\r\n\r\nfunction hslString({ h, s, l }: HslColor): string {\r\n return `hsl(${h}deg, ${s}%, ${l}%)`;\r\n}\r\n\r\n/** Same lightness-shift formula `ThemeBuilderComponent` uses to derive tint/tint-dark/shade/dark from a base color. */\r\nfunction deriveVariant(name: string, base: HslColor, isDarkTheme: boolean): HslColor | null {\r\n if (name.endsWith('-tint-dark')) {\r\n return new HslColor(base.h, base.s, isDarkTheme ? 18 : 95);\r\n }\r\n if (name.endsWith('-tint')) {\r\n return new HslColor(base.h, base.s, isDarkTheme ? 25 : 94);\r\n }\r\n if (name.endsWith('-shade')) {\r\n return Color.shiftL(base, isDarkTheme ? 7 : -7);\r\n }\r\n if (name.endsWith('-dark')) {\r\n return Color.shiftL(base, isDarkTheme ? 20 : -10);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/** Clears every custom property `applyThemePreset` can set, restoring `el`'s shipped/default colors. */\r\nfunction clearThemeProperties(el: HTMLElement): void {\r\n for (const key of GROUP_KEYS) {\r\n TOKEN_KEYS[key].forEach((name: string) => el.style.removeProperty(name));\r\n }\r\n\r\n Object.values(DEFAULT_OVERRIDES).forEach((targets: string[]) => targets.forEach(target => el.style.removeProperty(target)));\r\n}\r\n\r\n/**\r\n * Applies a theme-builder preset's colors directly onto `el` as inline CSS custom properties —\r\n * the same mechanism `ThemeBuilderComponent` uses on its own preview sandbox. An inline style\r\n * always outranks the attribute-selector rules that ship the default/dark-theme tokens, so this\r\n * reskins whatever `el` themes (e.g. `document.body` reskins the whole page).\r\n *\r\n * Pass the identity preset (`light`/`dark`: null, see `DEFAULT_PRESET`) to clear every override\r\n * and fall back to the shipped defaults.\r\n */\r\nexport function applyThemePreset(el: HTMLElement, preset: ThemePreset, theme: 'light' | 'dark'): void {\r\n clearThemeProperties(el);\r\n\r\n const overrides = preset[theme];\r\n if (!overrides) {\r\n return;\r\n }\r\n\r\n const isDarkTheme = theme === 'dark';\r\n\r\n for (const groupKey of GROUP_KEYS) {\r\n const base = overrides[groupKey] as Color | undefined;\r\n if (!base) {\r\n continue;\r\n }\r\n\r\n el.style.setProperty(base.name, base.hsl);\r\n DEFAULT_OVERRIDES[base.name]?.forEach((target: string) => el.style.setProperty(target, `var(${base.name})`));\r\n\r\n TOKEN_KEYS[groupKey].forEach((name: string) => {\r\n if (name === base.name) {\r\n return;\r\n }\r\n\r\n const variant = deriveVariant(name, base.color, isDarkTheme);\r\n if (!variant) {\r\n return;\r\n }\r\n\r\n el.style.setProperty(name, hslString(variant));\r\n DEFAULT_OVERRIDES[name]?.forEach((target: string) => el.style.setProperty(target, `var(${name})`));\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nexport { ThemeBuilderComponent } from './theme-builder.component';\r\nexport { applyThemePreset } from './utils/apply-preset';\r\nexport { Color } from './utils/color';\r\nexport { DEFAULT_PRESET, PRESETS } from './utils/presets';\r\nexport { ThemeColor, ThemeColors, ThemePreset } from './utils/types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -82,19 +82,23 @@
|
|
|
82
82
|
--hermes-vertical-nav-child-icon-color: #{tokens.$hermes-alias-typography-color-300};
|
|
83
83
|
|
|
84
84
|
// Glifo na cor da marca em todos os itens: é ele que dá à coluna a leitura de navegação.
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
// `object.accent`, e não `object.interaction.color` — aquele é texto interativo genérico
|
|
86
|
+
// (dropdown, alert, datagrid...) e fica neutro em repouso de propósito; o glifo daqui é uma
|
|
87
|
+
// das poucas coisas que devem ficar coloridas o tempo todo, não só ao selecionar/passar o
|
|
88
|
+
// mouse (ver o comentário em `tokens.ts`).
|
|
89
|
+
--hermes-vertical-nav-icon-color: #{tokens.$hermes-alias-object-accent-color};
|
|
90
|
+
--hermes-vertical-nav-icon-active-color: #{tokens.$hermes-alias-object-accent-color-active};
|
|
87
91
|
|
|
88
92
|
// Véu da cor da marca, e não um degrau neutro: o degrau neutro vizinho vale, em vários temas,
|
|
89
93
|
// a própria cor da barra, e o item em hover pintava o que já estava lá.
|
|
90
94
|
--hermes-vertical-nav-hover-bg-color: color-mix(
|
|
91
95
|
in srgb,
|
|
92
|
-
#{tokens.$hermes-alias-object-
|
|
96
|
+
#{tokens.$hermes-alias-object-accent-color} 14%,
|
|
93
97
|
transparent
|
|
94
98
|
);
|
|
95
99
|
--hermes-vertical-nav-active-bg-color: color-mix(
|
|
96
100
|
in srgb,
|
|
97
|
-
#{tokens.$hermes-alias-object-
|
|
101
|
+
#{tokens.$hermes-alias-object-accent-color} 26%,
|
|
98
102
|
transparent
|
|
99
103
|
);
|
|
100
104
|
// O selecionado é só a tinta, sem faixa lateral. O que o distingue do hover é o peso do texto
|
|
@@ -114,9 +118,9 @@
|
|
|
114
118
|
--hermes-vertical-nav-overlay-z-index: 1000;
|
|
115
119
|
|
|
116
120
|
// Vertical Nav - Trigger
|
|
117
|
-
--hermes-vertical-nav-toggle-icon-color: #{tokens.$hermes-alias-object-
|
|
121
|
+
--hermes-vertical-nav-toggle-icon-color: #{tokens.$hermes-alias-object-accent-color};
|
|
118
122
|
--hermes-vertical-nav-toggle-icon-hover-color: #{tokens.$hermes-alias-object-interaction-color-hover};
|
|
119
|
-
--hermes-vertical-nav-toggle-icon-active-color: #{tokens.$hermes-alias-object-
|
|
123
|
+
--hermes-vertical-nav-toggle-icon-active-color: #{tokens.$hermes-alias-object-accent-color-active};
|
|
120
124
|
--hermes-vertical-nav-toggle-icon-disabled-color: #{tokens.$hermes-alias-object-interaction-color-disabled};
|
|
121
125
|
--hermes-vertical-nav-trigger-divider-border-color: #{tokens.$hermes-alias-object-border-color};
|
|
122
126
|
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes-ui-angular-addons-theme-builder.d.ts","sources":["../../../addons/theme-builder/utils/types.ts","../../../addons/theme-builder/utils/color.ts","../../../addons/theme-builder/theme-builder.component.ts","../../../addons/theme-builder/utils/apply-preset.ts","../../../addons/theme-builder/utils/presets.ts"],"mappings":";;;;UASiB,SAAS;;;;AAIzB;UAEgB,cAAc;AAC7B;cAAqB,SAAS;;;AAC9B;;;cAAkD,SAAS;AAAE;AAC9D;AAED;;;;AAIG;KACS,oBAAoB,KAAK,KAAK;AAAQ,WAAO,MAAM;AAAa,UAAM,MAAM;;AAWxF;AACA,cAAa,QAAQ;AACnB;AACA;AACA;;AAOD;AAED;AACA,cAAa,QAAQ;AACnB;AACA;AACA;;AAOD;AAqBD;AACA,cAAa,UAAU;AACrB;AACA;AACA;;AAOD;UAegB,WAAW;cAChB,KAAK;WACR,KAAK;cACF,KAAK;cACL,KAAK;aACN,KAAK;AACf;UAEgB,WAAW;;WAEnB,WAAW;UACZ,WAAW;AAClB;UAEgB,UAAU;;UAEnB,KAAK;cACD,KAAK;cACL,cAAc;AACzB;UAEgB,OAAO;;;;AAIvB;;AC3HD;;;;AAIG;AACH,cAAa,KAAK;AAQP;AACA;;AANT;;;AAGG;AAEM;;iBAKI,QAAQ;AAIrB,qBAAiB,QAAQ;;eAKd,QAAQ;;;;;AAenB;;;AAGG;iBACU,UAAU;;;;;;AAwCvB;AAIA,+BAA2B,QAAQ,kBAAkB,QAAQ;AAI7D,kCAA8B,QAAQ;AAiCtC;;;;AAIG;AACH,oBAAgB,QAAQ,GAAG,UAAU;AAUrC;AAIA;;AAcA;;AAWA;;AAaA;AAID;;AClKD,cAMa,qBAAsB,YAAW,MAAM,EAAE,aAAa;;AAEvD,kBAAY,YAAA;AAEO,oBAAiB,UAAU,CAAC,WAAW;AACnC,wBAAqB,UAAU,CAAC,WAAW;AAI5E,kBAAc,WAAW;AAEzB;AAGA;iBAEa,oBAAoB;AAKjC,iBAAa,oBAAoB,CAAC,KAAK;iBAK1B,UAAU;;;;AAOrB;AACF;UACM,OAAO;;;;;;;;;AAKX;oCAEqB,uBAAA;;;AAQvB;;;;AAIG;AACH,mBACe,WAAW;AAI1B,uBAAmB,WAAW;;;AAY9B;AAIA;AAMA;AAOA,kCAA8B,KAAK,4BAA2B,KAAK;AAYnE,wBAAoB,WAAW;;AAsC/B,uBAAmB,KAAK,SAAS,KAAK,eAAc,KAAK;AAazD;AAKA;AAwCA;AA0BA;AAoBA;AAWA;AAkBA;yCAhRW,qBAAqB;2CAArB,qBAAqB;AA+SjC;;AC5SD;;;;;;;;AAQG;AACH,iBAAgB,gBAAgB,KAAK,WAAW,UAAU,WAAW;;
|
|
1
|
+
{"version":3,"file":"hermes-ui-angular-addons-theme-builder.d.ts","sources":["../../../addons/theme-builder/utils/types.ts","../../../addons/theme-builder/utils/color.ts","../../../addons/theme-builder/theme-builder.component.ts","../../../addons/theme-builder/utils/apply-preset.ts","../../../addons/theme-builder/utils/presets.ts"],"mappings":";;;;UASiB,SAAS;;;;AAIzB;UAEgB,cAAc;AAC7B;cAAqB,SAAS;;;AAC9B;;;cAAkD,SAAS;AAAE;AAC9D;AAED;;;;AAIG;KACS,oBAAoB,KAAK,KAAK;AAAQ,WAAO,MAAM;AAAa,UAAM,MAAM;;AAWxF;AACA,cAAa,QAAQ;AACnB;AACA;AACA;;AAOD;AAED;AACA,cAAa,QAAQ;AACnB;AACA;AACA;;AAOD;AAqBD;AACA,cAAa,UAAU;AACrB;AACA;AACA;;AAOD;UAegB,WAAW;cAChB,KAAK;WACR,KAAK;cACF,KAAK;cACL,KAAK;aACN,KAAK;AACf;UAEgB,WAAW;;WAEnB,WAAW;UACZ,WAAW;AAClB;UAEgB,UAAU;;UAEnB,KAAK;cACD,KAAK;cACL,cAAc;AACzB;UAEgB,OAAO;;;;AAIvB;;AC3HD;;;;AAIG;AACH,cAAa,KAAK;AAQP;AACA;;AANT;;;AAGG;AAEM;;iBAKI,QAAQ;AAIrB,qBAAiB,QAAQ;;eAKd,QAAQ;;;;;AAenB;;;AAGG;iBACU,UAAU;;;;;;AAwCvB;AAIA,+BAA2B,QAAQ,kBAAkB,QAAQ;AAI7D,kCAA8B,QAAQ;AAiCtC;;;;AAIG;AACH,oBAAgB,QAAQ,GAAG,UAAU;AAUrC;AAIA;;AAcA;;AAWA;;AAaA;AAID;;AClKD,cAMa,qBAAsB,YAAW,MAAM,EAAE,aAAa;;AAEvD,kBAAY,YAAA;AAEO,oBAAiB,UAAU,CAAC,WAAW;AACnC,wBAAqB,UAAU,CAAC,WAAW;AAI5E,kBAAc,WAAW;AAEzB;AAGA;iBAEa,oBAAoB;AAKjC,iBAAa,oBAAoB,CAAC,KAAK;iBAK1B,UAAU;;;;AAOrB;AACF;UACM,OAAO;;;;;;;;;AAKX;oCAEqB,uBAAA;;;AAQvB;;;;AAIG;AACH,mBACe,WAAW;AAI1B,uBAAmB,WAAW;;;AAY9B;AAIA;AAMA;AAOA,kCAA8B,KAAK,4BAA2B,KAAK;AAYnE,wBAAoB,WAAW;;AAsC/B,uBAAmB,KAAK,SAAS,KAAK,eAAc,KAAK;AAazD;AAKA;AAwCA;AA0BA;AAoBA;AAWA;AAkBA;yCAhRW,qBAAqB;2CAArB,qBAAqB;AA+SjC;;AC5SD;;;;;;;;AAQG;AACH,iBAAgB,gBAAgB,KAAK,WAAW,UAAU,WAAW;;ACwGrE;AACA,cAAa,cAAc,EAAE,WAI5B;AAED,cAAa,OAAO,EAAE,WAAW;;","names":[]}
|