angular-material-palette-generator
Version:
This package lets you refine the color palettes to be integrated into Sass theme files generated by the Angular CLI (`ng generate @angular/material:theme-color`).
1 lines • 171 kB
Source Map (JSON)
{"version":3,"file":"angular-material-palette-generator.mjs","sources":["../../../projects/angular-material-palette-generator/src/lib/palette-gen-form/palette-gen-form.validator.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-form/palette-gen-form.utils.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier/cubic-bezier.utils.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier/cubic-bezier.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen.utils.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen.config.ts","../../../projects/angular-material-palette-generator/src/lib/palette-matching/palette-matching.utils.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen.service.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier-control-colors/cubic-bezier-control-colors.directive.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier-control-colors/cubic-bezier-control-colors.component.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier-control-colors/cubic-bezier-control-colors.component.html","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier-control/cubic-bezier-control-direction.directive.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier-control/cubic-bezier-control-ripple.directive.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier-control/cubic-bezier-control.utils.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier-control/cubic-bezier-params.pipe.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier-control/cubic-bezier-control.component.ts","../../../projects/angular-material-palette-generator/src/lib/cubic-bezier-control/cubic-bezier-control.component.html","../../../projects/angular-material-palette-generator/src/lib/constrast-ratio/prefer-black-forground-color.pipe.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-overview/palette-gen-overview.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-overview/palette-gen-overview.component.html","../../../projects/angular-material-palette-generator/src/lib/constrast-ratio/wcag-contrast-ratio-compliance.pipe.ts","../../../projects/angular-material-palette-generator/src/lib/palette-matching/palette-matching.config.ts","../../../projects/angular-material-palette-generator/src/lib/palette-matching/pipes/palette-matching-percentage-to-tokens.pipe.ts","../../../projects/angular-material-palette-generator/src/lib/palette-matching/pipes/palette-matching-tokens-to-mirror-color.pipe.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-preview/palette-gen-preview.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-preview/palette-gen-preview.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-renderer/palette-gen-renderer.service.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-renderer/palette-gen-renderer.directive.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-selector/palette-gen-selector-after.directive.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-selector/palette-gen-selector.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-selector/palette-gen-selector.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-content/palette-gen-content.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-content/palette-gen-content.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-form/palette-gen-form.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-form/palette-gen-form.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-import/palette-gen-import.utils.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-import/palette-gen-import.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-import/palette-gen-import.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-logo/palette-gen-logo.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-logo/palette-gen-logo.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-showcase/palette-gen-showcase.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-showcase/palette-gen-showcase.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-snapshots/palette-gen-snapshots.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-snapshots/palette-gen-snapshots.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-container/palette-gen-container.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-container/palette-gen-container.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-overlay/palette-gen-overlay.component.ts","../../../projects/angular-material-palette-generator/src/lib/palette-gen-overlay/palette-gen-overlay.component.html","../../../projects/angular-material-palette-generator/src/lib/palette-gen-overlay/palette-gen-overlay.service.ts","../../../projects/angular-material-palette-generator/src/angular-material-palette-generator.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport const HEX_COLOR_REGEXP = /^#?([0-9abcdef]{3}|[0-9abcdef]{6})$/i;\n\nexport const HEX_COLOR_ERROR_KEY = 'hexColor';\n\nexport const hexColorValidator = (control: AbstractControl): ValidationErrors | null =>\n (control.value as string | null | undefined)?.match(HEX_COLOR_REGEXP) ? null : { [HEX_COLOR_ERROR_KEY]: true };\n","import { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { CubicBezierParams } from '../cubic-bezier/cubic-bezier.types';\nimport { PaletteGenFormValue } from './palette-gen-form.types';\nimport { hexColorValidator } from './palette-gen-form.validator';\n\nconst getDefaultParams = (): CubicBezierParams => ({ p1x: 0, p1y: 0, p2x: 1, p2y: 1 });\n\nexport const getPaletteGenForm = () =>\n new FormGroup({\n color: new FormControl('', [Validators.required, hexColorValidator]),\n start: new FormControl(0, [Validators.required]),\n end: new FormControl(100, [Validators.required]),\n params: new FormControl(getDefaultParams()),\n reverse: new FormControl(false),\n neutral: new FormControl(false),\n });\n\nexport const parsePaletteGenFormValue = (value: string): PaletteGenFormValue | null => {\n try {\n const formValue = JSON.parse(value);\n getPaletteGenForm().setValue(formValue); // This will throw an error if the JSON is invalid\n return formValue;\n } catch {\n return null;\n }\n};\n\nexport const paletteGenFormValuesEqual = (a: PaletteGenFormValue, b: PaletteGenFormValue) =>\n a.color === b.color &&\n a.start === b.start &&\n a.end === b.end &&\n a.reverse === b.reverse &&\n a.neutral === b.neutral &&\n a.params.p1x === b.params.p1x &&\n a.params.p1y === b.params.p1y &&\n a.params.p2x === b.params.p2x &&\n a.params.p2y === b.params.p2y;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// ----\n// NOTE\n// ----\n// Since the \"bezier-easing\" package is NOT ESM, we have copied/pasted the source code directly.\n// - `module.exports` has been replaced by `export default`, and `var` by `const`.\n// - Some types has been inferred.\n\n/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nconst NEWTON_ITERATIONS = 4;\nconst NEWTON_MIN_SLOPE = 0.001;\nconst SUBDIVISION_PRECISION = 0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\n\nconst kSplineTableSize = 11;\nconst kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nconst float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A(aA1: number, aA2: number) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1: number, aA2: number) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1: number) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT: number, aA1: any, aA2: any) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT: number, aA1: any, aA2: any) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(aX: number, aA: number, aB: number, mX1: any, mX2: any) {\n let currentX,\n currentT,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate(aX: number, aGuessT: number, mX1: any, mX2: any) {\n for (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n const currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n const currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing(x: any) {\n return x;\n}\n\nexport default function bezier(mX1: number, mY1: any, mX2: number, mY2: any) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n const sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (let i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX(aX: number) {\n let intervalStart = 0.0;\n let currentSample = 1;\n const lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n const dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n const guessForT = intervalStart + dist * kSampleStepSize;\n\n const initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing(x: number) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0 || x === 1) {\n return x;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n}\n","import { CubicBezierParams } from './cubic-bezier.types';\nimport BezierEasing from './cubic-bezier.utils';\n\nexport const cubicBezierFactory = ({ p1x, p1y, p2x, p2y }: CubicBezierParams) => {\n const cubicBezier = BezierEasing(p1x, p1y, p2x, p2y);\n return (x: number) => cubicBezier(x);\n};\n","import Color from 'colorjs.io';\nimport { cubicBezierFactory } from './cubic-bezier/cubic-bezier';\nimport { CubicBezierParams } from './cubic-bezier/cubic-bezier.types';\nimport { PaletteGenFormValue } from './palette-gen-form/palette-gen-form.types';\nimport { MATERIAL_PALETTE_PERCENTAGES_MAP } from './palette-gen.config';\nimport { PaletteGenData, PaletteGenDataListItem } from './palette-gen.types';\n\nexport const buildPaletteGenFormValue = (\n color: string,\n params: CubicBezierParams = { p1x: 0, p1y: 0, p2x: 1, p2y: 1 },\n neutral = false,\n): PaletteGenFormValue => ({\n color,\n start: 0,\n end: 100,\n params,\n reverse: false,\n neutral,\n});\n\nconst percentageToRgbFactory = ({\n color,\n params,\n reverse,\n}: Pick<PaletteGenFormValue, 'color' | 'params' | 'reverse'>) => {\n const cubicBezier = cubicBezierFactory(params);\n const lightness = reverse\n ? (percent: number) => 1 - cubicBezier(percent / 100)\n : (percent: number) => cubicBezier(percent / 100);\n\n const _color = new Color(color);\n\n return (percent: number) => {\n _color.oklch['l'] = lightness(percent);\n const hex = _color.toString({ format: 'hex' });\n\n if (hex.length === 4) {\n const [, r, g, b] = hex.split('');\n return `#${r}${r}${g}${g}${b}${b}`;\n }\n return hex;\n };\n};\n\nexport const buildPaletteGenData = (formValue: PaletteGenFormValue | undefined): PaletteGenData => {\n if (!formValue) {\n return { list: [], colorMap: {} };\n }\n const { color, start, end, params, reverse, neutral } = formValue;\n\n const percentages = MATERIAL_PALETTE_PERCENTAGES_MAP[neutral ? 'neutral' : 'default'];\n const percentageToRgb = percentageToRgbFactory({ color, params, reverse });\n\n const list = percentages\n .map((percentage) => ({\n percentage,\n adjustedPercentage: start + (percentage / 100) * (end - start),\n }))\n .map(({ percentage, adjustedPercentage }) => ({ percentage, color: percentageToRgb(adjustedPercentage) }));\n\n const colorMap = list.reduce(\n (map, { percentage, color }) => {\n map[percentage] = color;\n return map;\n },\n {} as Record<number, string>,\n );\n\n return { list, colorMap };\n};\n\nexport const buildSassMapStringified = (formValue: PaletteGenFormValue, dataList: PaletteGenDataListItem[]) => {\n const settings = ` // ${JSON.stringify(formValue)}\\n`;\n\n const sassMap = dataList.map(({ percentage, color }) => ` ${percentage}: ${color},\\n`).join('');\n\n return settings + sassMap;\n};\n","import { PaletteGenFormValue } from './palette-gen-form/palette-gen-form.types';\nimport { buildPaletteGenFormValue } from './palette-gen.utils';\nimport { PaletteName } from './palette-matching/palette-matching.types';\n\nexport const PALETTE_FORM_CONTROL_SIZE_DEFAULT = 200;\n\nexport const MATERIAL_PALETTE_PERCENTAGES_MAP = {\n // Works for Material `primary`, `secondary`, `tertiary`, `neutral-variant` and `error` palettes\n default: [0, 10, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 95, 98, 99, 100],\n\n // Works for Material `neutral` palette\n neutral: [0, 4, 6, 10, 12, 17, 20, 22, 24, 25, 30, 35, 40, 50, 60, 70, 80, 87, 90, 92, 94, 95, 96, 98, 99, 100],\n};\n\n// Match `$azure-palette` from https://github.com/angular/components/blob/main/src/material/core/theming/_palettes.scss\nexport const FORM_VALUE_MAP_DEFAULT: Record<PaletteName, PaletteGenFormValue> = {\n primary: buildPaletteGenFormValue('#005cbb', { p1x: 0, p1y: 0.21, p2x: 1, p2y: 1 }),\n secondary: buildPaletteGenFormValue('#565e71', { p1x: 0, p1y: 0.2, p2x: 1, p2y: 1 }),\n tertiary: buildPaletteGenFormValue('#343dff', { p1x: 0, p1y: 0.26, p2x: 1, p2y: 1 }),\n neutral: buildPaletteGenFormValue('#5e5e62', { p1x: 0, p1y: 0.2, p2x: 1, p2y: 1 }, true),\n 'neutral-variant': buildPaletteGenFormValue('#5b5e66', { p1x: 0, p1y: 0.2, p2x: 1, p2y: 1 }),\n error: buildPaletteGenFormValue('#ba1a1a', { p1x: 0, p1y: 0.16, p2x: 0.88, p2y: 1 }),\n};\n","import { PaletteMode, PaletteName } from './palette-matching.types';\n\nexport const PALETTE_MODES: PaletteMode[] = ['light', 'dark'];\n\nexport const PALETTE_NAMES: PaletteName[] = ['primary', 'secondary', 'tertiary', 'neutral', 'neutral-variant', 'error'];\n","\nimport { computed, effect, inject, Injectable, Signal, signal, WritableSignal, DOCUMENT } from '@angular/core';\nimport { PaletteGenFormValue } from './palette-gen-form/palette-gen-form.types';\nimport { getPaletteGenForm } from './palette-gen-form/palette-gen-form.utils';\nimport { PaletteGenFormValueSnapshot } from './palette-gen-snapshots/palette-gen-snapshots.types';\nimport { FORM_VALUE_MAP_DEFAULT, PALETTE_FORM_CONTROL_SIZE_DEFAULT } from './palette-gen.config';\nimport { PaletteGenData, PaletteGenState } from './palette-gen.types';\nimport { buildPaletteGenData, buildSassMapStringified } from './palette-gen.utils';\nimport { PaletteMode, PaletteName } from './palette-matching/palette-matching.types';\nimport { PALETTE_MODES, PALETTE_NAMES } from './palette-matching/palette-matching.utils';\n\n// TODO: need to refactor this service...\n\n// TODO: add a global import...\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaletteGenService {\n private document = inject(DOCUMENT);\n\n private localStorage = this.document.defaultView?.localStorage;\n\n paletteMode = signal<PaletteMode>('light');\n\n paletteName = signal<PaletteName>('primary');\n\n formValueMap = PALETTE_NAMES.reduce(\n (map, paletteName) => {\n map[paletteName] = signal(FORM_VALUE_MAP_DEFAULT[paletteName]);\n return map;\n },\n {} as Record<PaletteName, WritableSignal<PaletteGenFormValue>>,\n );\n\n formValue = computed(() => this.formValueMap[this.paletteName()]);\n\n dataMap = PALETTE_NAMES.reduce(\n (map, paletteName) => {\n map[paletteName] = computed(() => buildPaletteGenData(this.formValueMap[paletteName]()));\n return map;\n },\n {} as Record<PaletteName, Signal<PaletteGenData>>,\n );\n\n formValueSnapshotsMap = PALETTE_NAMES.reduce(\n (map, paletteName) => {\n map[paletteName] = signal([]);\n return map;\n },\n {} as Record<PaletteName, WritableSignal<PaletteGenFormValueSnapshot[]>>,\n );\n\n reset() {\n PALETTE_NAMES.forEach((name) => {\n this.formValueMap[name].set(FORM_VALUE_MAP_DEFAULT[name]);\n this.formValueSnapshotsMap[name].set([]);\n });\n }\n\n controlSize = signal(PALETTE_FORM_CONTROL_SIZE_DEFAULT);\n\n refreshCanvas?: Signal<unknown>;\n\n refreshCanvasOn(trigger: Signal<unknown>) {\n this.refreshCanvas = trigger;\n }\n\n constructor() {\n this.restoreFormValueMap();\n effect(() => this.storeFormValueMap());\n\n this.restorePaletteState();\n effect(() => this.storePaletteState());\n\n this.restoreFormValueSnapshotsMap();\n effect(() => this.storeFormValueSnapshotsMap());\n }\n\n sassMapsToClipboard() {\n const text = Object.entries(this.dataMap)\n .map(([paletteName, data]) => {\n const paletteMap = buildSassMapStringified(this.formValueMap[paletteName as PaletteName](), data().list);\n return `${paletteName}: (\\n${paletteMap}),`;\n })\n .join('\\n');\n\n this.document.defaultView?.navigator.clipboard?.writeText(text);\n }\n\n // ----- FormValueMap storage -----\n\n readonly formValueMapStorageKey = 'pg-palette-gen-service.form-value-map';\n\n private restoreFormValueMap() {\n const value = this.localStorage?.getItem(this.formValueMapStorageKey);\n if (!value) {\n return;\n }\n try {\n const formValueMap: Record<PaletteName, PaletteGenFormValue> = JSON.parse(value);\n\n const form = getPaletteGenForm();\n Object.entries(formValueMap).forEach(([paletteName, formValue]) => {\n form.setValue(formValue); // Validate each `formValue`\n\n this.formValueMap[paletteName as PaletteName].set(formValue);\n });\n } catch (err) {\n this.localStorage?.removeItem(this.formValueMapStorageKey);\n console.error('PaletteGenService: unable to restore FormValueMap', value, err);\n }\n }\n\n private storeFormValueMap() {\n const formValueMap = Object.entries(this.formValueMap).reduce(\n (map, [paletteName, formValue]) => {\n map[paletteName as PaletteName] = formValue();\n return map;\n },\n {} as Record<PaletteName, PaletteGenFormValue>,\n );\n this.localStorage?.setItem(this.formValueMapStorageKey, JSON.stringify(formValueMap));\n }\n\n // ----- FormValueSnapshotsMap storage -----\n\n readonly formValueMapSnapshotsStorageKey = 'pg-palette-gen-service.form-value-snapshots-map';\n\n private restoreFormValueSnapshotsMap() {\n const value = this.localStorage?.getItem(this.formValueMapSnapshotsStorageKey);\n if (!value) {\n return;\n }\n try {\n const formValueSnapshotsMap: Record<PaletteName, PaletteGenFormValueSnapshot[]> = JSON.parse(value);\n\n const form = getPaletteGenForm();\n Object.entries(formValueSnapshotsMap).forEach(([paletteName, snapshots]) => {\n snapshots.forEach((snapshot) => form.setValue(JSON.parse(snapshot.value) as PaletteGenFormValue)); // Validate each `snapshot`\n\n this.formValueSnapshotsMap[paletteName as PaletteName].set(snapshots);\n });\n } catch (err) {\n this.localStorage?.removeItem(this.formValueMapSnapshotsStorageKey);\n console.error('PaletteGenService: unable to restore FormValueSnapshotsMap', value, err);\n }\n }\n\n private storeFormValueSnapshotsMap() {\n const formValueSnapshotsMap = Object.entries(this.formValueSnapshotsMap).reduce(\n (map, [paletteName, snapshots]) => {\n map[paletteName as PaletteName] = snapshots();\n return map;\n },\n {} as Record<PaletteName, PaletteGenFormValueSnapshot[]>,\n );\n this.localStorage?.setItem(this.formValueMapSnapshotsStorageKey, JSON.stringify(formValueSnapshotsMap));\n }\n\n // ----- PaletteState storage -----\n\n readonly paletteStateStorageKey = 'pg-palette-gen-service.palette-state';\n\n private restorePaletteState() {\n const value = this.localStorage?.getItem(this.paletteStateStorageKey);\n if (!value) {\n return;\n }\n try {\n const { mode, name }: PaletteGenState = JSON.parse(value);\n if (PALETTE_MODES.includes(mode) && PALETTE_NAMES.includes(name)) {\n this.paletteMode.set(mode);\n this.paletteName.set(name);\n } else {\n throw new Error('Invalid palette mode and/or name');\n }\n } catch (err) {\n this.localStorage?.removeItem(this.paletteStateStorageKey);\n console.error('PaletteGenService: unable to restore PaletteState', value, err);\n }\n }\n\n private storePaletteState() {\n const paletteState: PaletteGenState = {\n mode: this.paletteMode(),\n name: this.paletteName(),\n };\n this.localStorage?.setItem(this.paletteStateStorageKey, JSON.stringify(paletteState));\n }\n}\n","import { afterRenderEffect, Directive, ElementRef, inject, input, signal } from '@angular/core';\nimport { PaletteGenService } from '../palette-gen.service';\n\n@Directive({\n selector: '[pgCubicBezierControlColors]',\n host: {\n '[style.color]': '\"var(\" + cssVarName() + \")\"',\n },\n})\nexport class CubicBezierControlColorsDirective {\n private host: HTMLElement = inject(ElementRef).nativeElement;\n\n private service = inject(PaletteGenService);\n\n cssVarName = input.required<string>({ alias: 'pgCubicBezierControlColors' });\n\n public rgbColor = signal<string | undefined>(undefined); // Part of the public directive API\n\n constructor() {\n afterRenderEffect(() => {\n this.service.refreshCanvas?.();\n this.cssVarName();\n\n const rgbColor = this.host.computedStyleMap().get('color')?.toString();\n this.rgbColor.set(rgbColor);\n });\n }\n}\n","import { Component, computed, effect, input, output, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { CubicBezierControlColorsDirective } from './cubic-bezier-control-colors.directive';\n\n@Component({\n selector: 'pg-cubic-bezier-control-colors',\n host: {\n class: '.pg-cubic-bezier-control-colors',\n '[attr.role]': '\"presentation\"',\n },\n imports: [CubicBezierControlColorsDirective],\n templateUrl: './cubic-bezier-control-colors.component.html',\n styleUrl: './cubic-bezier-control-colors.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class CubicBezierControlColorsComponent<T extends string> {\n cssVarConfig = input.required<Record<T, string>>();\n\n protected cssVarNames = computed(() => Object.values(this.cssVarConfig()) as string[]);\n\n protected cssVarItems = viewChildren(CubicBezierControlColorsDirective);\n\n protected colorMap = computed<Record<T, string>>(() => {\n const keys = Object.keys(this.cssVarConfig()) as T[];\n return this.cssVarItems().reduce(\n (map, item, index) => {\n const rgbColor = item.rgbColor();\n if (rgbColor) {\n map[keys[index]] = rgbColor;\n }\n return map;\n },\n {} as Record<T, string>,\n );\n });\n\n colorMapChange = output<Record<T, string>>();\n\n constructor() {\n effect(() => this.colorMapChange.emit(this.colorMap()));\n }\n}\n","@for (cssVarName of cssVarNames(); track $index) {\n <i [pgCubicBezierControlColors]=\"cssVarName\"></i>\n}\n","import { Directive, output } from '@angular/core';\nimport { CubicBezierControlDirection } from './cubic-bezier-control.types';\n\n@Directive({\n selector: '[pgCubicBezierControlDirection]',\n host: {\n '(keydown.ArrowUp)': 'emit($event, \"up\")',\n '(keydown.ArrowRight)': 'emit($event, \"right\")',\n '(keydown.ArrowDown)': 'emit($event, \"down\")',\n '(keydown.ArrowLeft)': 'emit($event, \"left\")',\n },\n})\nexport class CubicBezierControlDirectionDirective {\n direction = output<CubicBezierControlDirection>({ alias: 'pgCubicBezierControlDirection' });\n\n protected emit(event: Event, direction: CubicBezierControlDirection) {\n event.preventDefault();\n this.direction.emit(direction);\n }\n}\n","import { booleanAttribute, Directive, inject, input } from '@angular/core';\nimport { MAT_RIPPLE_GLOBAL_OPTIONS, MatRipple, RippleGlobalOptions, RippleRef } from '@angular/material/core';\n\n@Directive({\n selector: '[pgCubicBezierControlRipple]',\n hostDirectives: [MatRipple],\n host: {\n '(focus)': 'launch()',\n '(blur)': 'fadeOut()',\n },\n})\nexport class CubicBezierControlRippleDirective {\n private globalRippleDisabled =\n inject<RippleGlobalOptions>(MAT_RIPPLE_GLOBAL_OPTIONS, { optional: true })?.disabled === true;\n\n private matRipple = inject(MatRipple, { self: true });\n\n private rippleRef?: RippleRef;\n\n enabled = input(true, { transform: booleanAttribute, alias: 'pgCubicBezierControlRipple' });\n\n constructor() {\n this.matRipple.disabled = true; // Prevent the first self-triggered ripple\n\n this.matRipple.color = 'rgb(from var(--mat-sys-primary) r g b / 0.24)';\n this.matRipple.centered = true;\n this.matRipple.unbounded = true;\n this.matRipple.radius = 24;\n }\n\n protected launch() {\n if (this.globalRippleDisabled || !this.enabled()) {\n return;\n }\n this.matRipple.disabled = false;\n this.rippleRef = this.matRipple.launch({ persistent: true });\n }\n\n protected fadeOut() {\n if (!this.rippleRef) {\n return;\n }\n this.rippleRef.fadeOut();\n this.matRipple.disabled = true;\n }\n}\n","import { Point } from '@angular/cdk/drag-drop';\nimport { CubicBezierParams } from '../cubic-bezier/cubic-bezier.types';\nimport { CubicBezierControlColors, CubicBezierControlDirection } from './cubic-bezier-control.types';\n\nexport type CubicBezierParamsToPointsConfig = {\n params: CubicBezierParams;\n size: number;\n};\n\nexport const cubicBezierParamsToPoints = ({\n params: { p1x, p1y, p2x, p2y },\n size,\n}: CubicBezierParamsToPointsConfig): { p1: Point; p2: Point } => {\n const func = (x: number, y: number) => ({ x: x * size, y: y * size });\n return {\n p1: func(p1x, p1y),\n p2: func(p2x, p2y),\n };\n};\n\n// --------------------\n\nexport type PointToCubicBezierParamConfig = {\n point: DOMRect;\n container: DOMRect;\n size: number;\n};\n\nexport const pointToCubicBezierParam = ({ point, container, size }: PointToCubicBezierParamConfig) => {\n const func = (_point: number, _container: number) => Math.round((1000 * (_point - _container)) / size) / 1000;\n return {\n x: func(point.x, container.x),\n y: func(point.y, container.y),\n };\n};\n\n// --------------------\n\nexport class CanvasHandler {\n constructor(\n protected ctx: CanvasRenderingContext2D,\n protected canvasSize: number,\n protected colors: CubicBezierControlColors,\n ) {}\n\n clear() {\n this.ctx.clearRect(0, 0, this.canvasSize, this.canvasSize);\n return this;\n }\n\n linear() {\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.lineWidth = 4;\n this.ctx.lineTo(this.canvasSize, this.canvasSize);\n this.ctx.strokeStyle = this.colors.linearColor;\n this.ctx.stroke();\n return this;\n }\n\n curve(interpolate: (x: number) => number) {\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.lineWidth = 4;\n this.ctx.lineJoin = 'round';\n for (let step = 0; step <= this.canvasSize; step += 1) {\n this.ctx.lineTo(step, interpolate(step / this.canvasSize) * this.canvasSize);\n }\n this.ctx.strokeStyle = this.colors.curveColor;\n this.ctx.stroke();\n return this;\n }\n\n sticks(params: CubicBezierParams) {\n this.ctx.beginPath();\n this.ctx.lineWidth = 1;\n this.ctx.lineCap = 'round';\n\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(this.canvasSize * params.p1x, this.canvasSize * params.p1y);\n\n this.ctx.moveTo(this.canvasSize, this.canvasSize);\n this.ctx.lineTo(this.canvasSize * params.p2x, this.canvasSize * params.p2y);\n\n this.ctx.strokeStyle = this.colors.stickColor;\n this.ctx.stroke();\n return this;\n }\n}\n\n// --------------------\n\nconst movePoint = (\n [x, y]: [x: number, y: number],\n direction: CubicBezierControlDirection,\n delta: number,\n): [x: number, y: number] => {\n const more = (coord: number) => Math.round(Math.min(coord + delta, 1) * 100) / 100;\n const less = (coord: number) => Math.round(Math.max(0, coord - delta) * 100) / 100;\n switch (direction) {\n case 'up':\n return [x, less(y)];\n case 'right':\n return [more(x), y];\n case 'down':\n return [x, more(y)];\n case 'left':\n return [less(x), y];\n }\n};\n\nexport const moveCubicBezierParams = (\n { p1x, p1y, p2x, p2y }: CubicBezierParams,\n p: 'p1' | 'p2',\n direction: CubicBezierControlDirection,\n delta = 0.01,\n): CubicBezierParams => {\n if (p === 'p1') {\n const [x, y] = movePoint([p1x, p1y], direction, delta);\n return { p1x: x, p1y: y, p2x, p2y };\n } else {\n const [x, y] = movePoint([p2x, p2y], direction, delta);\n return { p1x, p1y, p2x: x, p2y: y };\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CubicBezierParams } from '../cubic-bezier/cubic-bezier.types';\n\n@Pipe({\n name: 'cubicBezierParams',\n})\nexport class CubicBezierParamsPipe implements PipeTransform {\n transform({ p1x, p1y, p2x, p2y }: CubicBezierParams, p: 'p1' | 'p2') {\n let x: number;\n let y: number;\n if (p === 'p1') {\n x = p1x;\n y = p1y;\n } else {\n x = p2x;\n y = p2y;\n }\n return `x: ${x.toFixed(2)} - y: ${y.toFixed(2)}`;\n }\n}\n","import { CdkDrag } from '@angular/cdk/drag-drop';\nimport {\n afterRenderEffect,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n signal,\n untracked,\n viewChild,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CubicBezierControlColorsComponent } from '../cubic-bezier-control-colors/cubic-bezier-control-colors.component';\nimport { cubicBezierFactory } from '../cubic-bezier/cubic-bezier';\nimport { CubicBezierParams } from '../cubic-bezier/cubic-bezier.types';\nimport { PALETTE_FORM_CONTROL_SIZE_DEFAULT } from '../palette-gen.config';\nimport { CubicBezierControlDirectionDirective } from './cubic-bezier-control-direction.directive';\nimport { CubicBezierControlRippleDirective } from './cubic-bezier-control-ripple.directive';\nimport { CubicBezierControlColors, CubicBezierControlDirection } from './cubic-bezier-control.types';\nimport {\n CanvasHandler,\n cubicBezierParamsToPoints,\n moveCubicBezierParams,\n pointToCubicBezierParam,\n} from './cubic-bezier-control.utils';\nimport { CubicBezierParamsPipe } from './cubic-bezier-params.pipe';\n\n@Component({\n selector: 'pg-cubic-bezier-control',\n host: {\n class: 'pg-cubic-bezier-control',\n '[class.pg-cubic-bezier-control--disabled]': 'disabled()',\n '[style.--pg-cubic-bezier-control-canvas-size]': 'canvasSize() + \"px\"',\n },\n imports: [\n CdkDrag,\n MatTooltipModule,\n CubicBezierControlColorsComponent,\n CubicBezierControlDirectionDirective,\n CubicBezierControlRippleDirective,\n CubicBezierParamsPipe,\n ],\n templateUrl: './cubic-bezier-control.component.html',\n styleUrl: './cubic-bezier-control.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class CubicBezierControlComponent implements ControlValueAccessor {\n private container: HTMLElement = inject(ElementRef).nativeElement;\n\n params = model<CubicBezierParams>({ p1x: 0, p1y: 0, p2x: 1, p2y: 1 });\n\n private cubicBezier = computed(() => cubicBezierFactory(this.params()));\n\n private canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n private canvasHandler = computed(() => {\n const ctx = this.canvasRef().nativeElement.getContext('2d');\n return ctx ? new CanvasHandler(ctx, this.canvasSize(), this.colorMap()) : undefined;\n });\n\n canvasSize = input(PALETTE_FORM_CONTROL_SIZE_DEFAULT);\n\n private p1 = viewChild.required<ElementRef<HTMLElement>>('p1');\n\n private p2 = viewChild.required<ElementRef<HTMLElement>>('p2');\n\n disabled = model(false);\n\n skipNextPointsUpdate = false;\n\n private cdkDrags = viewChildren(CdkDrag);\n\n constructor() {\n afterRenderEffect(() => this.updatePoints());\n afterRenderEffect(() => this.updateCanvas());\n\n const ngControl = inject(NgControl, { optional: true, self: true });\n if (ngControl) {\n ngControl.valueAccessor = this;\n }\n }\n\n private updatePoints() {\n const params = this.params();\n const size = this.canvasSize();\n\n if (this.skipNextPointsUpdate) {\n this.skipNextPointsUpdate = false;\n return;\n }\n\n const { p1, p2 } = cubicBezierParamsToPoints({ params, size });\n\n const [p1Drag, p2Drag] = untracked(() => this.cdkDrags());\n p1Drag.setFreeDragPosition(p1);\n p2Drag.setFreeDragPosition(p2);\n }\n\n protected updateParam(p: 'p1' | 'p2') {\n const point = this[p]().nativeElement.getBoundingClientRect();\n const container = this.container.getBoundingClientRect();\n const size = this.canvasSize();\n\n this.skipNextPointsUpdate = true;\n this.params.update((params) => {\n const { x, y } = pointToCubicBezierParam({ point, container, size });\n\n const newParams = { ...params };\n if (p === 'p1') {\n newParams.p1x = x;\n newParams.p1y = y;\n } else {\n newParams.p2x = x;\n newParams.p2y = y;\n }\n return newParams;\n });\n this.onChange(this.params());\n this.onTouched();\n }\n\n protected moveParams(p: 'p1' | 'p2', direction: CubicBezierControlDirection) {\n this.params.update((params) => moveCubicBezierParams(params, p, direction));\n this.onChange(this.params());\n this.onTouched();\n }\n\n private updateCanvas() {\n const canvasHandler = this.canvasHandler();\n if (!canvasHandler) {\n console.warn('ColorGenBezierComponent: canvas is not supported');\n return;\n }\n canvasHandler.clear().linear().curve(this.cubicBezier()).sticks(this.params());\n }\n\n // ----- ControlValueAccessor -----\n\n private onChange: (params: CubicBezierParams) => void = () => undefined;\n\n private onTouched: () => void = () => undefined;\n\n registerOnChange(onChange: (params: CubicBezierParams) => undefined): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: () => void): void {\n this.onTouched = onTouched;\n }\n\n writeValue(params: CubicBezierParams | null | undefined): void {\n this.params.set(params ?? { p1x: 0, p1y: 0, p2x: 1, p2y: 1 });\n }\n\n setDisabledState?(disabled: boolean): void {\n this.disabled.set(disabled);\n }\n\n // ----- Material colors in RGB (for the canvas configuration) -----\n\n protected cssVarConfig: CubicBezierControlColors = {\n linearColor: '--mat-sys-surface-container-highest',\n curveColor: '--mat-sys-primary',\n stickColor: '--mat-sys-on-surface-variant',\n };\n\n protected colorMap = signal<typeof this.cssVarConfig>({\n linearColor: 'grey',\n curveColor: 'grey',\n stickColor: 'grey',\n });\n}\n","<canvas #canvas [width]=\"canvasSize()\" [height]=\"canvasSize()\" class=\"pg-cubic-bezier-control__canvas\"></canvas>\n\n<div\n class=\"pg-cubic-bezier-control__point\"\n cdkDrag\n cdkDragBoundary=\".pg-cubic-bezier-control\"\n [cdkDragDisabled]=\"disabled()\"\n (cdkDragMoved)=\"updateParam('p1')\"\n #p1\n>\n <button\n [matTooltip]=\"params() | cubicBezierParams: 'p1'\"\n matTooltipPosition=\"left\"\n [pgCubicBezierControlRipple]=\"!disabled()\"\n (pgCubicBezierControlDirection)=\"moveParams('p1', $event)\"\n >\n p1\n </button>\n</div>\n\n<div\n class=\"pg-cubic-bezier-control__point\"\n cdkDrag\n cdkDragBoundary=\".pg-cubic-bezier-control\"\n [cdkDragDisabled]=\"disabled()\"\n (cdkDragMoved)=\"updateParam('p2')\"\n #p2\n>\n <button\n [matTooltip]=\"params() | cubicBezierParams: 'p2'\"\n matTooltipPosition=\"right\"\n [pgCubicBezierControlRipple]=\"!disabled()\"\n (pgCubicBezierControlDirection)=\"moveParams('p2', $event)\"\n >\n p2\n </button>\n</div>\n\n<pg-cubic-bezier-control-colors [cssVarConfig]=\"cssVarConfig\" (colorMapChange)=\"colorMap.set($event)\" />\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { contrastRatio } from 'wcag-contrast-utils';\n\n@Pipe({\n name: 'preferBlackForgroundColor',\n})\nexport class PreferBlackForgroundColorPipe implements PipeTransform {\n transform(backgroundColor: string): boolean {\n return contrastRatio(backgroundColor, '#fff') < contrastRatio(backgroundColor, '#000');\n }\n}\n","import { TitleCasePipe } from '@angular/common';\nimport { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PreferBlackForgroundColorPipe } from '../constrast-ratio/prefer-black-forground-color.pipe';\nimport { MATERIAL_PALETTE_PERCENTAGES_MAP } from '../palette-gen.config';\nimport { PaletteGenService } from '../palette-gen.service';\nimport { PaletteGenDataListItem } from '../palette-gen.types';\nimport { PaletteName } from '../palette-matching/palette-matching.types';\n\n@Component({\n selector: 'pg-palette-gen-overview',\n host: { class: 'pg-palette-gen-overview' },\n imports: [TitleCasePipe, MatTooltipModule, PreferBlackForgroundColorPipe],\n templateUrl: './palette-gen-overview.component.html',\n styleUrl: './palette-gen-overview.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenOverviewComponent {\n protected service = inject(PaletteGenService);\n\n percentages = MATERIAL_PALETTE_PERCENTAGES_MAP.default;\n\n overview = computed(() => {\n return Object.entries(this.service.dataMap).reduce(\n (acc, [paletteName, data]) => {\n acc.push({ paletteName: paletteName as PaletteName, dataList: data().list });\n return acc;\n },\n [] as { paletteName: PaletteName; dataList: PaletteGenDataListItem[] }[],\n );\n });\n\n compact = input(false);\n}\n","@for (overviewItem of overview(); track $index) {\n <h2 class=\"pg-palette-gen-overview__name\">{{ overviewItem.paletteName | titlecase }}</h2>\n\n <div class=\"pg-palette-gen-overview__list\">\n @for (dataListItem of overviewItem.dataList; track $index) {\n @if (percentages.includes(dataListItem.percentage)) {\n <span\n [matTooltip]=\"dataListItem.color\"\n class=\"pg-palette-gen-overview__item\"\n [class.pg-palette-gen-overview__item--prefer-black]=\"dataListItem.color | preferBlackForgroundColor\"\n [class.pg-palette-gen-overview__item--compact]=\"compact()\"\n [style.background-color]=\"dataListItem.color\"\n >\n {{ dataListItem.percentage }}\n </span>\n }\n }\n </div>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { contrastRatio } from 'wcag-contrast-utils';\n\n// According to WCAG 2.1 guidelines, the required contrast ratios for normal text are:\n// - AA: 4.5\n// - AAA: 7\n\n@Pipe({\n name: 'wcagContrastRatioCompliance',\n})\nexport class WcagContrastRatioCompliancePipe implements PipeTransform {\n transform(colorA: string, colorB?: string) {\n if (!colorB) {\n return undefined;\n }\n\n const ratio = contrastRatio(colorA, colorB);\n if (ratio >= 7) {\n return { icon: 'done_all', label: 'WCAG 2 AAA Compliant' };\n }\n if (ratio >= 4.5) {\n return { icon: 'check', label: 'WCAG 2 AA Compliant' };\n }\n return { icon: 'warning', label: 'Not WCAG Compliant' };\n }\n}\n","import { PalettePercentageMatchingMap, PaletteTokenMatchingMap } from './palette-matching.types';\n\n// DO NOT MODIFY THE FOLLOWING OBJECTS MANUALLY\n// --------------------------------------------\n// The content of following objects has been generated from the script:\n// `<rootDir>/palette-matching/palette-matching.script.ts`\n\nexport const PALETTE_TOKEN_MATCHING_MAP: PaletteTokenMatchingMap = {\n primary: {\n light: {\n '10': ['on-primary-container', 'on-primary-fixed'],\n '30': ['on-primary-fixed-variant'],\n '40': ['primary', 'surface-tint'],\n '80': ['inverse-primary', 'primary-fixed-dim'],\n '90': ['primary-container', 'primary-fixed'],\n '100': ['on-primary'],\n },\n dark: {\n '10': ['on-primary-fixed'],\n '20': ['on-primary'],\n '30': ['primary-container', 'on-primary-fixed-variant'],\n '40': ['inverse-primary'],\n '80': ['primary', 'primary-fixed-dim', 'surface-tint'],\n '90': ['on-primary-container', 'primary-fixed'],\n },\n },\n\n secondary: {\n light: {\n '10': ['on-secondary-container', 'on-secondary-fixed'],\n '30': ['on-secondary-fixed-variant'],\n '40': ['secondary'],\n '80': ['secondary-fixed-dim'],\n '90': ['secondary-container', 'secondary-fixed'],\n '100': ['on-secondary'],\n },\n dark: {\n '10': ['on-secondary-fixed'],\n '20': ['on-secondary'],\n '30': ['secondary-container', 'on-secondary-fixed-variant'],\n '80': ['secondary', 'secondary-fixed-dim'],\n '90': ['on-secondary-container', 'secondary-fixed'],\n },\n },\n\n tertiary: {\n light: {\n '10': ['on-tertiary-container', 'on-tertiary-fixed'],\n '30': ['on-tertiary-fixed-variant'],\n '40': ['tertiary'],\n '80': ['tertiary-fixed-dim'],\n '90': ['tertiary-container', 'tertiary-fixed'],\n '100': ['on-tertiary'],\n },\n dark: {\n '10': ['on-tertiary-fixed'],\n '20': ['on-tertiary'],\n '30': ['tertiary-container', 'on-tertiary-fixed-variant'],\n '80': ['tertiary', 'tertiary-fixed-dim'],\n '90': ['on-tertiary-container', 'tertiary-fixed'],\n },\n },\n\n neutral: {\n light: {\n '0': ['shadow', 'scrim'],\n '10': ['on-background', 'on-surface', 'neutral10'],\n '20': ['inverse-surface'],\n '87': ['surface-dim'],\n '90': ['surface-container-highest'],\n '92': ['surface-container-high'],\n '94': ['surface-container'],\n '95': ['inverse-on-surface'],\n '96': ['surface-container-low'],\n '98': ['background', 'surface', 'surface-bright'],\n '100': ['surface-container-lowest'],\n },\n dark: {\n '0': ['shadow', 'scrim'],\n '4': ['surface-container-lowest'],\n '6': ['background', 'surface', 'surface-dim'],\n '10': ['surface-container-low', 'neutral10'],\n '12': ['surface-container'],\n '17': ['surface-container-high'],\n '20': ['inverse-on-surface'],\n '22': ['surface-container-highest'],\n '24': ['surface-bright'],\n '90': ['on-background', 'on-surface', 'inverse-surface'],\n },\n },\n\n 'neutral-variant': {\n light: {\n '20': ['neutral-variant20'],\n '30': ['on-surface-variant'],\n '50': ['outline'],\n '80': ['outline-variant'],\n '90': ['surface-variant'],\n },\n dark: {\n '20': ['neutral-variant20'],\n '30': ['surface-variant', 'outline-variant'],\n '60': ['outline'],\n '80': ['on-surface-variant'],\n },\n },\n\n error: {\n light: {\n '10': ['on-error-container'],\n '40': ['error'],\n '90': ['error-container'],\n '100': ['on-error'],\n },\n dark: {\n '20': ['on-error'],\n '30': ['error-container'],\n '80': ['error'],\n '90': ['on-error-container'],\n },\n },\n};\n\nexport const PALETTE_PERCENTAGE_MATCHING_MAP: PalettePercentageMatchingMap = {\n primary: {\n light: {\n 'on-primary-container': 10,\n 'on-primary-fixed': 10,\n 'on-primary-fixed-variant': 30,\n primary: 40,\n 'surface-tint': 40,\n 'inverse-primary': 80,\n 'primary-fixed-dim': 80,\n 'primary-container': 90,\n 'primary-fixed': 90,\n 'on-primary': 100,\n },\n dark: {\n 'on-primary-fixed': 10,\n 'on-primary': 20,\n 'primary-container': 30,\n 'on-primary-fixed-variant': 30,\n 'inverse-primary': 40,\n primary: 80,\n 'primary-fixed-dim': 80,\n 'surface-tint': 80,\n 'on-primary-container': 90,\n 'primary-fixed': 90,\n },\n },\n\n secondary: {\n light: {\n 'on-secondary-container': 10,\n 'on-secondary-fixed': 10,\n 'on-secondary-fixed-variant': 30,\n secondary: 40,\n 'secondary-fixed-dim': 80,\n 'secondary-container': 90,\n 'secondary-fixed': 90,\n 'on-secondary': 100,\n },\n dark: {\n 'on-secondary-fixed': 10,\n 'on-secondary': 20,\n 'secondary-container': 30,\n 'on-secondary-fixed-variant': 30,\n secondary: 80,\n 'secondary-fixed-dim': 80,\n 'on-secondary-container': 90,\n 'secondary-fixed': 90,\n },\n },\n\n tertiary: {\n light: {\n 'on-tertiary-container': 10,\n 'on-tertiary-fixed': 10,\n 'on-tertiary-fixed-variant': 30,\n tertiary: 40,\n 'tertiary-fixed-dim': 80,\n 'tertiary-container': 90,\n 'tertiary-fixed': 90,\n 'on-tertiary': 100,\n },\n dark: {\n 'on-tertiary-fixed': 10,\n 'on-tertiary': 20,\n 'tertiary-container': 30,\n 'on-tertiary-fixed-variant': 30,\n tertiary: 80,\n 'tertiary-fixed-dim': 80,\n 'on-tertiary-container': 90,\n 'tertiary-fixed': 90,\n },\n },\n\n neutral: {\n light: {\n shadow: 0,\n scrim: 0,\n 'on-background': 10,\n 'on-surface': 10,\n neutral10: 10,\n 'inverse-surface': 20,\n 'surface-dim': 87,\n 'surface-container-highest': 90,\n 'surface-container-high': 92,\n 'surface-container': 94,\n 'inverse-on-surface': 95,\n 'surface-container-low': 96,\n background: 98,\n surface: 98,\n 'surface-bright': 98,\n 'surface-container-lowest': 100,\n },\n dark: {\n shadow: 0,\n scrim: 0,\n 'surface-container-lowest': 4,\n background: 6,\n surface: 6,\n 'surface-dim': 6,\n 'surface-container-low': 10,\n neutral10: 10,\n 'surface-container': 12,\n 'surface-container-high': 17,\n 'inverse-on-surface': 20,\n 'surface-container-highest': 22,\n 'surface-bright': 24,\n 'on-background': 90,\n 'on-surface': 90,\n 'inverse-surface': 90,\n },\n },\n\n 'neutral-variant': {\n light: {\n 'neutral-variant20': 20,\n 'on-surface-variant': 30,\n outline: 50,\n 'outline-variant': 80,\n 'surface-variant': 90,\n },\n dark: {\n 'neutral-variant20': 20,\n 'surface-variant': 30,\n 'outline-variant': 30,\n outline: 60,\n 'on-surface-variant': 80,\n },\n },\n\n error: {\n light: {\n 'on-error-container': 10,\n error: 40,\n 'error-container': 90,\n 'on-error': 100,\n },\n dark: {\n 'on-error': 20,\n 'error-container': 30,\n error: 80,\n 'on-error-container': 90,\n },\n },\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PALETTE_TOKEN_MATCHING_MAP } from '../palette-matching.config';\nimport { PaletteMatchingConfig } from './palette-matching-config.types';\n\n@Pipe({\n name: 'paletteMatchingPercentageToTokens',\n})\nexport class PaletteMatchingPercentageToTokensPipe implements PipeTransform {\n transform(percentage: number, { name, mode }: PaletteMatchingConfig): string[] {\n if (!name) {\n return [];\n }\n return PALETTE_TOKEN_MATCHING_MAP[name][mode][percentage] ?? [];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PALETTE_PERCENTAGE_MATCHING_MAP } from '../palette-matching.config';\nimport { PaletteMatchingConfig } from './palette-matching-config.types';\n\n@Pipe({\n name: 'paletteMatchingTokensToMirrorColor',\n})\nexport class PaletteMatchingTokensToMirrorColorPipe implements PipeTransform {\n transform(\n tokens: string[],\n { name, mode }: PaletteMatchingConfig,\n colorMap: Record<number, string>,\n ): string | undefined {\n if (!name) {\n return undefined;\n }\n\n for (const token of tokens) {\n const mirrorToken = token.startsWith('on-') ? token.substring(3) : `on-${token}`;\n\n const percentage = PALETTE_PERCENTAGE_MATCHING_MAP[name][mode][mirrorToken];\n if (!percentage) {\n continue;\n }\n\n const color = colorMap[percentage];\n if (color) {\n return color;\n }\n }\n\n return undefined;\n }\n}\n","\nimport { booleanAttribute, Component, computed, inject, input, output, ViewEncapsulation, DOCUMENT } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PreferBlackForgroundColorPipe } from '../constrast-ratio/prefer-black-forground-color.pipe';\nimport { WcagContrastRatioCompliancePipe } from '../constrast-ratio/wcag-contrast-ratio-compliance.pipe';\nimport { PaletteGenFormValue } from '../palette-gen-form/palette-gen-form.types';\nimport { PaletteGenData } from '../palette-gen.types';\nimport { buildPaletteGenData, buildSassMapStringified } from '../palette-gen.utils';\nimport { PaletteMatchingConfig } from '../palette-matching/pipes/palette-matching-config.types';\nimport { PaletteMatchingPercentageToTokensPipe } from '../palette-matching/pipes/palette-matching-percentage-to-tokens.pipe';\nimport { PaletteMatchingTokensToMirrorColorPipe } from '../palette-matching/pipes/palette-matching-tokens-to-mirror-color.pipe';\n\n@Component({\n selector: 'pg-palette-gen-preview',\n host: { class: 'pg-palette-gen-preview' },\n imports: [\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n PaletteMatchingPercentageToTokensPipe,\n PaletteMatchingTokensToMirrorColorPipe,\n PreferBlackForgroundColorPipe,\n WcagContrastRatioCompliancePipe,\n ],\n templateUrl: './palette-gen-preview.component.html',\n styleUrl: './palette-gen-preview.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenPreviewComponent {\n private clipboard = inject(DOCUMENT).defaultView?.navigator.clipboard;\n\n mirrorView = input(false, { transform: booleanAttribute });\n\n formValue = input<PaletteGenFormValue>();\n\n action = output<void>();\n\n compact = input(false);\n\n matchingConfig = input<PaletteMatchingConfig>({ name: undefined, mode: 'light' });\n\n protected data = computed<PaletteGenData>(() => buildPaletteGenData(this.formValue()));\n\n protected sassMapToClipboard() {\n const formValue = this.formValue();\n if (!formValue) {\n return;\n }\n this.clipboard?.writeText(buildSassMapStringified(formValue, this.data().list));\n }\n}\n","@for (listItem of data().list; track $index) {\n <div\n class=\"pg-palette-gen-preview__item\"\n [class.pg-palette-gen-preview__item--mirror]=\"mirrorView()\"\n [style.--pg-palette-gen-preview-space]=\"compact() ? '0rem' : '0.375rem'\"\n [style.backgroundColor]=\"listItem.color\"\n >\n <div class=\"pg-palette-gen-preview__info\">\n <span class=\"pg-palette-gen-preview__percent\">{{ listItem.percentage }}:</span>\n {{ listItem.color }}\n </div>\n\n @let tokens = listItem.percentage | paletteMatchingPercentageToTokens: matchingConfig();\n\n @if (!mirrorView() && tokens.length) {\n @let mirrorColor = tokens | paletteMatchingTokensToMirrorColor: matchingConfig() : data().colorMap;\n\n <div\n class=\"pg-palette-gen-preview__tokens gbl-body-medium\"\n [class.pg-palette-gen-preview__tokens--black]=\"!mirrorColor && (listItem.color | preferBlackForgroundColor)\"\n [style.color]=\"mirrorColor\"\n >\n {{ tokens.join(' | ') }}\n\n @if (listItem.color | wcagContrastRatioCompliance: mirrorColor; as compliance) {\n <mat-icon [attr.aria-label]=\"compliance.label\" [matTooltip]=\"compliance.label\" matTooltipPosition=\"right\">\n {{ compliance.icon }}\n </mat-icon>\n }\n </div>\n }\n </div>\n}\n\n<button\n class=\"pg-palette-gen-preview__action\"\n [class.pg-palette-gen-preview__action--mirror]=\"mirrorView()\"\n matIconButton\n matTooltip=\"Copy Sass map to clipboard\"\n [matTooltipPosition]=\"mirrorView() ? 'right' : 'left'\"\n (click)=\"sassMapToClipboard()\"\n>\n <mat-icon>content_copy</mat-icon>\n</button>\n\n@if (mirrorView()) {\n <button\n class=\"pg-palette-gen-preview__action pg-palette-gen-preview__action--2 pg-palette-gen-preview__action--mirror\"\n matIconButton\n matTooltip=\"Close mirror view\"\n matTooltipPosition=\"right\"\n (click)=\"action.emit()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n} @else {\n <button\n class=\"pg-palette-gen-preview__action pg-palette-gen-preview__action--2\"\n matIconButton\n matTooltip=\"Open mirror view\"\n matTooltipPosition=\"left\"\n (click)=\"action.emit()\"\n >\n <mat-icon>compare</mat-icon>\n </button>\n}\n","\nimport {\n computed,\n effect,\n EffectRef,\n inject,\n Injectable,\n Injector,\n RendererFactory2,\n signal,\n Signal,\n DOCUMENT\n} from '@angular/core';\nimport { PaletteGenService } from '../palette-gen.service';\nimport { PALETTE_PERCENTAGE_MATCHING_MAP } from '../palette-matching/palette-matching.config';\nimport { PaletteName } from '../palette-matching/palette-matching.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaletteGenRendererService {\n private injector = inject(Injector);\n\n private renderer = inject(RendererFactory2).createRenderer(null, null);\n\n private document = inject(DOCUMENT);\n\n protected service = inject(PaletteGenService);\n\n private tokens: Record<PaletteName, Signal<string>> = {\n primary: this.getComputedTokens('primary'),\n secondary: this.getComputedTokens('secondary'),\n tertiary: this.getComputedTokens('tertiary'),\n neutral: this.getComputedTokens('neutral'),\n 'neutral-variant': this.getComputedTokens('neutral-variant'),\n error: this.getComputedTokens('error'),\n };\n\n private getComputedTokens(paletteName: PaletteName) {\n return computed(() => {\n const { colorMap } = this.service.dataMap[paletteName]();\n return Object.entries(PALETTE_PERCENTAGE_MATCHING_MAP[paletteName][this.service.paletteMode()])\n .map(([token, percentage]) => `--mat-sys-${token}: ${colorMap[percentage]}`)\n .join('; ');\n });\n }\n\n getStyle() {\n return [\n this.tokens.primary(),\n this.tokens.secondary(),\n this.tokens.tertiary(),\n this.tokens.neutral(),\n this.tokens['neutral-variant'](),\n this.tokens.error(),\n 'background-color: var(--mat-sys-surface)',\n ].join('; ');\n }\n\n private _isPageSharingActive = signal(false);\n\n isPageSharingActive = this._isPageSharingActive.asReadonly();\n\n private effectRef?: EffectRef;\n\n enablePageSharing() {\n if (this.effectRef) {\n return;\n }\n this.effectRef = effect(\n () => {\n this.renderer.setProperty(this.document.body, 'style', this.getStyle());\n },\n { injector: this.injector },\n );\n\n this._isPageSharingActive.set(true);\n }\n\n disablePageSharing() {\n if (!this.effectRef) {\n return;\n }\n this.renderer.setProperty(this.document.body, 'style', null);\n this.effectRef.destroy();\n this.effectRef = undefined;\n\n this._isPageSharingActive.set(false);\n }\n\n togglePageSharing() {\n if (!this.effectRef) {\n this.enablePageSharing();\n } else {\n this.disablePageSharing();\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { PaletteGenRendererService } from './palette-gen-renderer.service';\n\n@Directive({\n selector: '[pgPaletteGenRenderer]',\n host: {\n '[style]': 'rendererService.getStyle()',\n },\n})\nexport class PaletteGenRendererDirective {\n protected rendererService = inject(PaletteGenRendererService);\n}\n","import { Directive } from '@angular/core';\n\n@Directive({ selector: '[pgPaletteGenSelectorAfter]' })\nexport class PaletteGenSelectorAfterDirective {}\n","import { TitleCasePipe } from '@angular/common';\nimport { booleanAttribute, Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { PaletteGenService } from '../palette-gen.service';\nimport { PaletteMode, PaletteName } from '../palette-matching/palette-matching.types';\nimport { PALETTE_MODES, PALETTE_NAMES } from '../palette-matching/palette-matching.utils';\n\n@Component({\n selector: 'pg-palette-gen-selector',\n host: { class: 'pg-palette-gen-selector' },\n imports: [TitleCasePipe, MatButtonToggleModule, MatFormFieldModule, MatSelectModule],\n templateUrl: './palette-gen-selector.component.html',\n styleUrl: './palette-gen-selector.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenSelectorComponent {\n protected service = inject(PaletteGenService);\n\n protected paletteModes: PaletteMode[] = PALETTE_MODES;\n\n protected paletteNames: PaletteName[] = PALETTE_NAMES;\n\n showPaletteNamesSelector = input(false, { transform: booleanAttribute });\n}\n","<ng-content />\n\n<mat-button-toggle-group aria-label=\"Mode\" hideSingleSelectionIndicator [(value)]=\"service.paletteMode\">\n @for (option of paletteModes; track $index) {\n <mat-button-toggle [value]=\"option\">{{ option | titlecase }}</mat-button-toggle>\n }\n</mat-button-toggle-group>\n\n@if (showPaletteNamesSelector()) {\n <mat-form-field appearance=\"outline\" class=\"pg-palette-gen-selector__no-error\">\n <mat-label>Palette</mat-label>\n <mat-select [(value)]=\"service.paletteName\">\n @for (option of paletteNames; track $index) {\n <mat-option [value]=\"option\">{{ option | titlecase }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n\n<ng-content select=\"[pgPaletteGenSelectorAfter]\" />\n","import { TitleCasePipe } from '@angular/common';\nimport { Component, computed, effect, inject, signal, TemplateRef, viewChild, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PaletteGenFormValue } from '../palette-gen-form/palette-gen-form.types';\nimport { PaletteGenOverviewComponent } from '../palette-gen-overview/palette-gen-overview.component';\nimport { PaletteGenPreviewComponent } from '../palette-gen-preview/palette-gen-preview.component';\nimport { PaletteGenRendererDirective } from '../palette-gen-renderer/palette-gen-renderer.directive';\nimport { PaletteGenSelectorAfterDirective } from '../palette-gen-selector/palette-gen-selector-after.directive';\nimport { PaletteGenSelectorComponent } from '../palette-gen-selector/palette-gen-selector.component';\nimport { PaletteGenService } from '../palette-gen.service';\nimport { PaletteMatchingConfig } from '../palette-matching/pipes/palette-matching-config.types';\n\n@Component({\n selector: 'pg-palette-gen-content',\n host: { class: 'pg-palette-gen-content' },\n imports: [\n TitleCasePipe,\n MatButtonModule,\n MatButtonToggleModule,\n MatDialogModule,\n MatIconModule,\n MatTooltipModule,\n PaletteGenOverviewComponent,\n PaletteGenPreviewComponent,\n PaletteGenRendererDirective,\n PaletteGenSelectorAfterDirective,\n PaletteGenSelectorComponent,\n ],\n templateUrl: './palette-gen-content.component.html',\n styleUrl: './palette-gen-content.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenContentComponent {\n protected service = inject(PaletteGenService);\n\n // ----- View -----\n\n protected viewList = ['palette', 'overview', 'component'] as const;\n\n protected view = signal<(typeof this.viewList)[number]>('palette');\n\n // ----- Mirror -----\n\n protected formValueMirror = signal<PaletteGenFormValue | undefined>(undefined);\n\n protected setMirror() {\n this.formValueMirror.set(this.service.formValue()());\n }\n\n protected unsetMirror() {\n this.formValueMirror.set(undefined);\n }\n\n constructor() {\n effect(() => {\n this.service.paletteName();\n this.unsetMirror();\n });\n }\n\n // ----- Compact -----\n\n protected compact = signal(false);\n\n protected compactAction = computed(() => (this.compact() ? 'Expand preview' : 'Reduce preview'));\n\n protected toggleCompact() {\n this.compact.update((compact) => !compact);\n }\n\n // ----- Preview match -----\n\n protected matchingConfig = computed<PaletteMatchingConfig>(() => ({\n name: this.service.paletteName(),\n mode: this.service.paletteMode(),\n }));\n\n // ----- Reset dialog -----\n\n private resetDialog = inject(MatDialog);\n\n private resetTemplate = viewChild.required<TemplateRef<unknown>>('resetTemplate');\n\n protected openResetDialog() {\n this.resetDialog\n .open(this.resetTemplate(), { width: '420px' })\n .beforeClosed()\n .subscribe((reset: boolean) => !reset || this.service.reset());\n }\n}\n","<pg-palette-gen-selector>\n <button\n type=\"button\"\n matIconButton\n [attr.aria-label]=\"compactAction()\"\n [matTooltip]=\"compactAction()\"\n [disabled]=\"view() === 'component'\"\n (click)=\"toggleCompact()\"\n >\n <mat-icon\n class=\"pg-palette-gen-content__compact-icon\"\n [class.pg-palette-gen-content__compact-icon--active]=\"compact()\"\n >\n keyboard_double_arrow_up\n </mat-icon>\n </button>\n\n <mat-button-toggle-group aria-label=\"View selector\" hideSingleSelectionIndicator [(value)]=\"view\">\n @for (option of viewList; track $index) {\n <mat-button-toggle [value]=\"option\">{{ option | titlecase }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n\n <button\n pgPaletteGenSelectorAfter\n matIconButton\n aria-label=\"Copy all Sass maps to clipboard\"\n matTooltip=\"Copy all Sass maps to clipboard\"\n (click)=\"service.sassMapsToClipboard()\"\n >\n <mat-icon>integration_instructions</mat-icon>\n </button>\n\n <button pgPaletteGenSelectorAfter matIconButton aria-label=\"Reset\" matTooltip=\"Reset\" (click)=\"openResetDialog()\">\n <mat-icon>restart_alt</mat-icon>\n </button>\n</pg-palette-gen-selector>\n\n@switch (view()) {\n @case ('palette') {\n <div class=\"pg-palette-gen-content__previews\">\n <pg-palette-gen-preview\n [matchingConfig]=\"matchingConfig()\"\n [compact]=\"compact()\"\n [formValue]=\"service.formValue()()\"\n (action)=\"setMirror()\"\n />\n\n @if (formValueMirror(); as mirror) {\n <pg-palette-gen-preview [compact]=\"compact()\" [formValue]=\"mirror\" mirrorView (action)=\"unsetMirror()\" />\n }\n </div>\n }\n\n @case ('overview') {\n <pg-palette-gen-overview [compact]=\"compact()\" />\n }\n\n @case ('component') {\n <div class=\"pg-palette-gen-content__renderer\" pgPaletteGenRenderer>\n <ng-content />\n </div>\n }\n}\n\n<ng-template #resetTemplate>\n <div role=\"heading\" aria-level=\"2\" mat-dialog-title>Reset to default palettes?</div>\n\n <mat-dialog-content>All changes will be lost.</mat-dialog-content>\n\n <mat-dialog-actions>\n <button matButton=\"tonal\" [mat-dialog-close]=\"false\">Cancel</button>\n <button matButton=\"filled\" [mat-dialog-close]=\"true\">Reset</button>\n </mat-dialog-actions>\n</ng-template>\n","import { TitleCasePipe } from '@angular/common';\nimport { booleanAttribute, Component, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { filter, startWith } from 'rxjs';\nimport { CubicBezierControlComponent } from '../cubic-bezier-control/cubic-bezier-control.component';\nimport { PaletteGenService } from '../palette-gen.service';\nimport { PaletteName } from '../palette-matching/palette-matching.types';\nimport { PALETTE_NAMES } from '../palette-matching/palette-matching.utils';\nimport { PaletteGenFormValue } from './palette-gen-form.types';\nimport { getPaletteGenForm, paletteGenFormValuesEqual } from './palette-gen-form.utils';\n\n@Component({\n selector: 'pg-palette-gen-form',\n host: {\n class: 'pg-palette-gen-form',\n '[style.--pg-palette-gen-form-control-size]': 'service.controlSize() + \"px\"',\n },\n imports: [\n TitleCasePipe,\n ReactiveFormsModule,\n MatCheckboxModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatSliderModule,\n CubicBezierControlComponent,\n ],\n templateUrl: './palette-gen-form.component.html',\n styleUrl: './palette-gen-form.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenFormComponent {\n protected service = inject(PaletteGenService);\n\n protected paletteNames: PaletteName[] = PALETTE_NAMES;\n\n hidePaletteNamesSelector = input(false, { transform: booleanAttribute });\n\n protected form = getPaletteGenForm();\n\n constructor() {\n this.handleFormStatusChanges(); // Note: must be executed after `this.restore()`\n this.handleServiceFormValue();\n }\n\n private handleFormStatusChanges() {\n this.form.statusChanges\n .pipe(\n takeUntilDestroyed(),\n startWith(this.form.valid ? 'VALID' : 'INVALID'),\n filter((status) => status === 'VALID'),\n )\n .subscribe(() => {\n this.service.formValue().set(this.form.value as PaletteGenFormValue);\n });\n }\n\n private handleServiceFormValue() {\n effect(() => {\n const formValue = this.service.formValue()();\n if (formValue && !paletteGenFormValuesEqual(formValue, this.form.value as PaletteGenFormValue)) {\n this.form.setValue(formValue);\n this.form.updateValueAndValidity();\n }\n });\n }\n}\n","@if (!hidePaletteNamesSelector()) {\n <mat-form-field appearance=\"outline\" class=\"pg-palette-gen-form__name\">\n <mat-label>Palette</mat-label>\n <mat-select [(value)]=\"service.paletteName\">\n @for (option of paletteNames; track $index) {\n <mat-option [value]=\"option\">{{ option | titlecase }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n\n<form [formGroup]=\"form\" class=\"pg-palette-gen-form__form\">\n <mat-form-field appearance=\"outline\" class=\"pg-palette-gen-form__color\">\n <mat-label>Color</mat-label>\n <input [formControl]=\"form.controls.color\" matInput placeholder=\"#666666\" />\n <mat-error>Invalid</mat-error>\n </mat-form-field>\n\n <mat-slider min=\"0\" max=\"100\" step=\"1\" discrete class=\"pg-palette-gen-form__range\">\n <input [formControl]=\"form.controls.start\" matSliderStartThumb />\n <input [formControl]=\"form.controls.end\" matSliderEndThumb />\n </mat-slider>\n\n <pg-cubic-bezier-control [formControl]=\"form.controls.params\" [canvasSize]=\"service.controlSize()\" />\n\n <mat-checkbox [formControl]=\"form.controls.reverse\">Reverse</mat-checkbox>\n\n <mat-checkbox [formControl]=\"form.controls.neutral\">Neutral</mat-checkbox>\n</form>\n","import { PaletteGenFormValue } from '../palette-gen-form/palette-gen-form.types';\nimport { parsePaletteGenFormValue } from '../palette-gen-form/palette-gen-form.utils';\nimport { PaletteName } from '../palette-matching/palette-matching.types';\n\nexport const importTypedFormValue = (input: string | null | undefined) => {\n const formValuesStringified = (input ?? '')\n .split('\\n')\n .filter((line) => line.includes('{')) // Find the line containing a stringified object...\n .map((line) => line.replace('//', '').trim()); // ...Remove the characters defining a Sass comment\n\n const formValues = formValuesStringified.map(parsePaletteGenFormValue).filter((formValue) => formValue !== null);\n\n switch (formValues.length) {\n case 6: {\n // Assuming we get the formValue map in order (primary, secondary, ...)\n return {\n type: 'formValueMap' as const,\n data: {\n primary: formValues[0],\n secondary: formValues[1],\n tertiary: formValues[2],\n neutral: formValues[3],\n 'neutral-variant': formValues[4],\n error: formValues[5],\n } as Record<PaletteName, PaletteGenFormValue>,\n };\n }\n\n case 1: {\n // Assuming we get one formValue\n return {\n type: 'formValue' as const,\n data: formValues[0],\n };\n }\n\n default: {\n // Input is invalid\n return null;\n }\n }\n};\n","import { Component, inject, TemplateRef, viewChild, ViewEncapsulation } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { PaletteGenService } from '../palette-gen.service';\nimport { PaletteName } from '../palette-matching/palette-matching.types';\nimport { importTypedFormValue } from './palette-gen-import.utils';\n\n@Component({\n selector: 'pg-palette-gen-import',\n imports: [ReactiveFormsModule, MatButtonModule, MatDialogModule, MatFormFieldModule, MatIconModule, MatInputModule],\n templateUrl: './palette-gen-import.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenImportComponent {\n private service = inject(PaletteGenService);\n\n private importDialog?: MatDialogRef<unknown>;\n\n private dialog = inject(MatDialog);\n\n private importTemplate = viewChild.required<TemplateRef<unknown>>('importTemplate');\n\n protected importCtrl = new FormControl('');\n\n protected openDialog() {\n this.importDialog = this.dialog.open(this.importTemplate(), { width: 'calc(100% - 3rem)', maxWidth: '960px' });\n }\n\n protected import() {\n const typedFormValue = importTypedFormValue(this.importCtrl.value);\n\n if (typedFormValue === null) {\n this.importCtrl.setErrors({ import: true });\n return;\n }\n\n let importCtrlValueFormatted: string;\n\n switch (typedFormValue.type) {\n case 'formValueMap': {\n Object.entries(typedFormValue.data).forEach(([paletteName, formValue]) => {\n this.service.formValueMap[paletteName as PaletteName].set(formValue);\n });\n\n importCtrlValueFormatted = Object.values(typedFormValue.data)\n .map((formValue) => JSON.stringify(formValue))\n .join('\\n');\n break;\n }\n\n case 'formValue': {\n this.service.formValue().set(typedFormValue.data);\n\n importCtrlValueFormatted = JSON.stringify(typedFormValue.data);\n break;\n }\n }\n\n this.importCtrl.setValue(importCtrlValueFormatted);\n\n this.importDialog?.close();\n }\n}\n","<button type=\"button\" matButton (click)=\"openDialog()\">\n <mat-icon>settings</mat-icon>\n Import settings\n</button>\n\n<ng-template #importTemplate>\n <div role=\"heading\" aria-level=\"2\" mat-dialog-title>Settings</div>\n\n <mat-dialog-content>\n <mat-form-field appearance=\"outline\" style=\"margin-top: 0.25rem; width: 100%\">\n <mat-label>JSON</mat-label>\n <textarea\n [formControl]=\"importCtrl\"\n rows=\"3\"\n cdkTextareaAutosize\n cdkAutosizeMaxRows=\"14\"\n matInput\n (focus)=\"importElement.select()\"\n #importElement\n ></textarea>\n <mat-error>Invalid settings</mat-error>\n </mat-form-field>\n </mat-dialog-content>\n\n <mat-dialog-actions>\n <button matButton=\"tonal\" mat-dialog-close>Close</button>\n <button matButton=\"filled\" [disabled]=\"!importCtrl.value\" (click)=\"import()\">Import</button>\n </mat-dialog-actions>\n</ng-template>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'pg-palette-gen-logo',\n host: { class: 'pg-palette-gen-logo' },\n imports: [MatIconModule, MatTooltipModule],\n templateUrl: './palette-gen-logo.component.html',\n styleUrl: './palette-gen-logo.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenLogoComponent {}\n","<a\n aria-label=\"Angular Material Palette Generator\"\n matTooltip=\"Open on GitHub\"\n class=\"pg-palette-gen-logo__link\"\n href=\"https://github.com/avine/angular-material-palette-generator\"\n target=\"_blank\"\n>\n <mat-icon class=\"pg-palette-gen-logo__icon\">palette</mat-icon>\n\n <span class=\"pg-palette-gen-logo__text\">\n Angular Material<br />\n Palette Generator\n </span>\n</a>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTabsModule } from '@angular/material/tabs';\n\n@Component({\n selector: 'pg-palette-gen-showcase',\n host: { class: 'pg-palette-gen-showcase' },\n imports: [\n ReactiveFormsModule,\n MatBadgeModule,\n MatButtonModule,\n MatCheckboxModule,\n MatChipsModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatProgressBarModule,\n MatRadioModule,\n MatSlideToggleModule,\n MatTabsModule,\n ],\n templateUrl: './palette-gen-showcase.component.html',\n styleUrl: './palette-gen-showcase.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenShowcaseComponent {\n formControl1 = new FormControl('', [Validators.required]);\n formControl2 = new FormControl('', [Validators.required]);\n\n constructor() {\n this.formControl2.markAsTouched();\n }\n}\n","<div class=\"pg-palette-gen-showcase__row\">\n <button matIconButton><mat-icon>home</mat-icon></button>\n <button matFab><mat-icon>home</mat-icon></button>\n <button matButton>Button</button>\n <button matButton=\"tonal\">Button</button>\n <button matButton=\"filled\">Button</button>\n <button matButton=\"elevated\">Button</button>\n <button matButton=\"outlined\">Button</button>\n</div>\n\n<div class=\"pg-palette-gen-showcase__row\">\n <button matIconButton matBadge=\"4\"><mat-icon>home</mat-icon></button>\n <button matFab matBadge=\"4\"><mat-icon>home</mat-icon></button>\n <button matButton matBadge=\"4\">Button</button>\n <button matButton=\"tonal\" matBadge=\"4\">Button</button>\n <button matButton=\"filled\" matBadge=\"4\">Button</button>\n <button matButton=\"elevated\" matBadge=\"4\">Button</button>\n <button matButton=\"outlined\" matBadge=\"4\">Button</button>\n</div>\n\n<div class=\"pg-palette-gen-showcase__row\">\n <button disabled matIconButton><mat-icon>home</mat-icon></button>\n <button disabled matFab><mat-icon>home</mat-icon></button>\n <button disabled matButton>Button</button>\n <button disabled matButton=\"tonal\">Button</button>\n <button disabled matButton=\"filled\">Button</button>\n <button disabled matButton=\"elevated\">Button</button>\n <button disabled matButton=\"outlined\">Button</button>\n</div>\n\n<div class=\"pg-palette-gen-showcase__row\">\n <mat-chip-listbox>\n <mat-chip-option selected>Chip option 1</mat-chip-option>\n <mat-chip-option>Chip option 2</mat-chip-option>\n <mat-chip-option disabled>Chip option 3</mat-chip-option>\n </mat-chip-listbox>\n\n <mat-chip-set>\n <mat-chip>Chip 1</mat-chip>\n <mat-chip>Chip 2</mat-chip>\n <mat-chip disabled>Chip 3</mat-chip>\n </mat-chip-set>\n</div>\n\n<div class=\"pg-palette-gen-showcase__row\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Fill form field</mat-label>\n <input [formControl]=\"formControl1\" matInput placeholder=\"Placeholder\" />\n <mat-icon matSuffix>alternate_email</mat-icon>\n <mat-hint>Hint</mat-hint>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Outline form field</mat-label>\n <input [formControl]=\"formControl2\" matInput placeholder=\"Placeholder\" />\n <mat-icon matSuffix>lock</mat-icon>\n <mat-hint>Hint</mat-hint>\n <mat-error>Field required</mat-error>\n </mat-form-field>\n</div>\n\n<div class=\"pg-palette-gen-showcase__row\">\n <mat-radio-group aria-label=\"Select an option\">\n <mat-radio-button value=\"1\" checked>Radio 1</mat-radio-button>\n <mat-radio-button value=\"2\">Radio 2</mat-radio-button>\n <mat-radio-button value=\"3\" disabled>Radio 3</mat-radio-button>\n </mat-radio-group>\n\n <mat-checkbox checked>Check 1</mat-checkbox>\n <mat-checkbox>Check 2</mat-checkbox>\n <mat-checkbox disabled>Check 3</mat-checkbox>\n</div>\n\n<div class=\"pg-palette-gen-showcase__row\">\n <mat-slide-toggle checked>Slide toggle</mat-slide-toggle>\n <mat-slide-toggle>Slide toggle</mat-slide-toggle>\n <mat-slide-toggle disabled>Slide toggle</mat-slide-toggle>\n</div>\n\n<div class=\"pg-palette-gen-showcase__row pg-palette-gen-showcase__row--nowrap\">\n <mat-progress-bar mode=\"determinate\" value=\"40\" />\n <mat-progress-bar mode=\"indeterminate\" />\n</div>\n\n<div class=\"pg-palette-gen-showcase__row\">\n <mat-tab-group [animationDuration]=\"0\" style=\"width: 100%\">\n <mat-tab label=\"First\"></mat-tab>\n <mat-tab label=\"Second\"></mat-tab>\n <mat-tab label=\"Third\"></mat-tab>\n </mat-tab-group>\n</div>\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PaletteGenService } from '../palette-gen.service';\n\n@Component({\n selector: 'pg-palette-gen-snapshots',\n host: { class: 'pg-palette-gen-snapshots' },\n imports: [MatButtonModule, MatIconModule, MatTooltipModule],\n templateUrl: './palette-gen-snapshots.component.html',\n styleUrl: './palette-gen-snapshots.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenSnapshotsComponent {\n private service = inject(PaletteGenService);\n\n maxSnapshots = input(5);\n\n disabled = input(false);\n\n protected formValueSnapshot = computed(() => JSON.stringify(this.service.formValue()()));\n\n protected snapshots = computed(() => this.service.formValueSnapshotsMap[this.service.paletteName()]);\n\n protected takeSnapshot() {\n this.snapshots().update((snapshots) => [\n ...snapshots,\n {\n id: this.nextSnapshotId,\n value: this.formValueSnapshot(),\n },\n ]);\n }\n\n protected hasSelectedSnapshot = computed(() =>\n this.snapshots()().some(({ value }) => value === this.formValueSnapshot()),\n );\n\n protected removeSelectedSnapshot() {\n this.snapshots().update((snapshots) => snapshots.filter(({ value }) => value !== this.formValueSnapshot()));\n }\n\n protected selectSnapshot(snapshot: string) {\n this.service.formValue().set(JSON.parse(snapshot));\n }\n\n private get nextSnapshotId() {\n const snapshots = this.snapshots()();\n return snapshots.length === 0 ? 1 : snapshots[snapshots.length - 1].id + 1;\n }\n}\n","@let noMoreSnapshots = snapshots()().length >= maxSnapshots();\n\n@if (hasSelectedSnapshot()) {\n <button\n type=\"button\"\n aria-label=\"Remove selected snapshot\"\n matTooltip=\"Remove selected snapshot\"\n matTooltipPosition=\"above\"\n matIconButton\n (click)=\"removeSelectedSnapshot()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n} @else {\n <button\n type=\"button\"\n aria-label=\"Take a snapshot\"\n matTooltip=\"Take a snapshot\"\n matTooltipPosition=\"above\"\n matIconButton\n [disabled]=\"disabled() || noMoreSnapshots\"\n (click)=\"takeSnapshot()\"\n >\n <mat-icon>{{ noMoreSnapshots ? 'no_photography' : 'add_a_photo' }}</mat-icon>\n </button>\n}\n\n@for (snapshot of snapshots()(); track $index) {\n @if (snapshot.value === formValueSnapshot()) {\n <button type=\"button\" matButton=\"filled\" (click)=\"selectSnapshot(snapshot.value)\">{{ snapshot.id }}</button>\n } @else {\n <button type=\"button\" matButton (click)=\"selectSnapshot(snapshot.value)\">{{ snapshot.id }}</button>\n }\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { booleanAttribute, Component, inject, input, signal, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { map, shareReplay } from 'rxjs';\nimport { PaletteGenContentComponent } from '../palette-gen-content/palette-gen-content.component';\nimport { PaletteGenFormComponent } from '../palette-gen-form/palette-gen-form.component';\nimport { PaletteGenImportComponent } from '../palette-gen-import/palette-gen-import.component';\nimport { PaletteGenLogoComponent } from '../palette-gen-logo/palette-gen-logo.component';\nimport { PaletteGenRendererService } from '../palette-gen-renderer/palette-gen-renderer.service';\nimport { PaletteGenShowcaseComponent } from '../palette-gen-showcase/palette-gen-showcase.component';\nimport { PaletteGenSnapshotsComponent } from '../palette-gen-snapshots/palette-gen-snapshots.component';\nimport { PaletteGenService } from '../palette-gen.service';\n\n@Component({\n selector: 'pg-palette-gen-container',\n host: {\n class: 'pg-palette-gen-container',\n '[style.--pg-palette-gen-container-control-size]': 'service.controlSize() + \"px\"',\n },\n imports: [\n MatButtonModule,\n MatIconModule,\n MatSidenavModule,\n MatTooltipModule,\n PaletteGenContentComponent,\n PaletteGenFormComponent,\n PaletteGenImportComponent,\n PaletteGenLogoComponent,\n PaletteGenShowcaseComponent,\n PaletteGenSnapshotsComponent,\n ],\n templateUrl: './palette-gen-container.component.html',\n styleUrl: './palette-gen-container.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenContainerComponent {\n protected service = inject(PaletteGenService);\n\n protected rendererService = inject(PaletteGenRendererService);\n\n hideLogo = input(false, { transform: booleanAttribute });\n\n protected drawerOpened = signal(true);\n\n protected toggleDrawer() {\n this.drawerOpened.update((open) => !open);\n }\n\n private matchDesktop = `(min-width: 840px)`;\n\n protected isDesktop = toSignal(\n inject(BreakpointObserver)\n .observe([this.matchDesktop])\n .pipe(\n takeUntilDestroyed(),\n map(({ breakpoints }) => breakpoints[this.matchDesktop]),\n shareReplay(1),\n ),\n );\n}\n","<mat-drawer-container class=\"pg-palette-gen-container__main\" [hasBackdrop]=\"!isDesktop()\">\n <mat-drawer-content>\n <pg-palette-gen-content class=\"pg-palette-gen-container__content\">\n <ng-content>\n <pg-palette-gen-showcase />\n </ng-content>\n </pg-palette-gen-content>\n </mat-drawer-content>\n\n <mat-drawer position=\"end\" [mode]=\"isDesktop() ? 'side' : 'over'\" [(opened)]=\"drawerOpened\">\n <div class=\"pg-palette-gen-container__aside\">\n <pg-palette-gen-form />\n <pg-palette-gen-import />\n </div>\n </mat-drawer>\n</mat-drawer-container>\n\n<div class=\"pg-palette-gen-container__footer\">\n <pg-palette-gen-snapshots class=\"pg-palette-gen-container__snapshots\" />\n\n @if (!hideLogo()) {\n <pg-palette-gen-logo class=\"pg-palette-gen-container__logo\" />\n }\n\n <div class=\"pg-palette-gen-container__actions\">\n <button\n matIconButton\n aria-label=\"Toggle page sharing\"\n matTooltip=\"Toggle page sharing\"\n (click)=\"rendererService.togglePageSharing()\"\n >\n <mat-icon>{{ rendererService.isPageSharingActive() ? 'stop_screen_share' : 'screen_share' }}</mat-icon>\n </button>\n\n <button matIconButton aria-label=\"Toggle sidebar\" matTooltip=\"Toggle sidebar\" (click)=\"toggleDrawer()\">\n <mat-icon>tune</mat-icon>\n </button>\n </div>\n</div>\n","import { Component, DestroyRef, inject, model, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PaletteGenContentComponent } from '../palette-gen-content/palette-gen-content.component';\nimport { PaletteGenFormComponent } from '../palette-gen-form/palette-gen-form.component';\nimport { PaletteGenImportComponent } from '../palette-gen-import/palette-gen-import.component';\nimport { PaletteGenLogoComponent } from '../palette-gen-logo/palette-gen-logo.component';\nimport { PaletteGenRendererService } from '../palette-gen-renderer/palette-gen-renderer.service';\nimport { PaletteGenShowcaseComponent } from '../palette-gen-showcase/palette-gen-showcase.component';\nimport { PaletteGenSnapshotsComponent } from '../palette-gen-snapshots/palette-gen-snapshots.component';\nimport { PaletteGenService } from '../palette-gen.service';\n\n@Component({\n selector: 'pg-palette-gen-overlay',\n host: {\n class: 'pg-palette-gen-overlay',\n '[style.--pg-palette-gen-overlay-control-size]': 'service.controlSize() + \"px\"',\n },\n imports: [\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n PaletteGenContentComponent,\n PaletteGenFormComponent,\n PaletteGenImportComponent,\n PaletteGenLogoComponent,\n PaletteGenShowcaseComponent,\n PaletteGenSnapshotsComponent,\n ],\n templateUrl: './palette-gen-overlay.component.html',\n styleUrl: './palette-gen-overlay.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaletteGenOverlayComponent {\n protected service = inject(PaletteGenService);\n\n protected rendererService = inject(PaletteGenRendererService);\n\n state = model({ modal: false, details: false });\n\n constructor() {\n this.rendererService.enablePageSharing();\n\n inject(DestroyRef).onDestroy(() => {\n this.rendererService.disablePageSharing();\n });\n }\n\n protected toggleModal() {\n this.state.update(({ modal, details }) => ({ modal: !modal, details }));\n }\n\n protected toggleDetails() {\n this.state.update(({ modal, details }) => ({ modal, details: !details }));\n }\n}\n","<button\n matFab\n aria-label=\"Toggle palette generator\"\n matTooltip=\"Toggle palette generator\"\n class=\"pg-palette-gen-overlay__toggle-modal\"\n (click)=\"toggleModal()\"\n>\n <mat-icon>palette</mat-icon>\n</button>\n\n@let _state = state();\n\n@if (_state.modal) {\n <div class=\"pg-palette-gen-overlay__modal\">\n @if (_state.details) {\n <pg-palette-gen-content class=\"pg-palette-gen-overlay__details\">\n <pg-palette-gen-showcase />\n </pg-palette-gen-content>\n\n <div class=\"pg-palette-gen-overlay__details-footer\">\n <pg-palette-gen-snapshots />\n <pg-palette-gen-logo />\n </div>\n }\n\n <div class=\"pg-palette-gen-overlay__tools\">\n <div class=\"pg-palette-gen-overlay__tools-inner\">\n <pg-palette-gen-form />\n <pg-palette-gen-import />\n </div>\n </div>\n\n <div class=\"pg-palette-gen-overlay__tools-footer\">\n <button matIconButton matTooltip=\"Toggle details\" aria-label=\"Toggle details\" (click)=\"toggleDetails()\">\n <mat-icon\n class=\"pg-palette-gen-overlay__toggle-details-icon\"\n [class.pg-palette-gen-overlay__toggle-details-icon--active]=\"_state.details\"\n >\n chevron_left\n </mat-icon>\n </button>\n\n <button\n matIconButton\n aria-label=\"Toggle page sharing\"\n matTooltip=\"Toggle page sharing\"\n (click)=\"rendererService.togglePageSharing()\"\n >\n <mat-icon>{{ rendererService.isPageSharingActive() ? 'stop_screen_share' : 'screen_share' }}</mat-icon>\n </button>\n\n <!--<button matIconButton aria-label=\"View on GitHub\" matTooltip=\"View on GitHub\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <g fill=\"currentColor\">\n <path\n d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\"\n ></path>\n </g>\n </svg>\n </button>-->\n </div>\n </div>\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { effect, inject, Injectable, Injector } from '@angular/core';\nimport { PaletteGenOverlayComponent } from './palette-gen-overlay.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaletteGenOverlayService {\n private injector = inject(Injector);\n\n private overlay = inject(Overlay);\n\n private overlayRef?: OverlayRef;\n\n enable() {\n if (this.overlayRef) {\n return;\n }\n this.overlayRef = this.overlay.create({ panelClass: 'pg-palette-gen-overlay-panel' });\n const componentPortal = new ComponentPortal(PaletteGenOverlayComponent);\n const componentRef = this.overlayRef.attach(componentPortal);\n\n effect(\n () => {\n const { modal, details } = componentRef.instance.state();\n\n this.overlayRef?.updateSize({\n width: modal && details ? 'calc(100% - 2 * var(--pg-palette-gen-overlay-panel-offset))' : '',\n });\n\n this.overlayRef?.[modal ? 'addPanelClass' : 'removePanelClass']('pg-palette-gen-overlay-panel--active');\n },\n { injector: this.injector },\n );\n }\n\n disable() {\n if (!this.overlayRef) {\n return;\n }\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BezierEasing","i1","i2","i3","i4","i5","i6","i7","i8"],"mappings":"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"}