UNPKG

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
{"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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"}