{"version":3,"file":"acrodata-gradient-picker.mjs","sources":["../../../projects/gradient-picker/src/lib/form-controls/gradient-form-group.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-input-field.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-unit-input.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-checkbox.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-radio.ts","../../../projects/gradient-picker/src/lib/form-controls/gradient-icon-button.ts","../../../projects/gradient-picker/src/lib/gradient-colorpicker.ts","../../../projects/gradient-picker/src/lib/gradient-colorpicker.html","../../../projects/gradient-picker/src/lib/utils.ts","../../../projects/gradient-picker/src/lib/gradient-stops.ts","../../../projects/gradient-picker/src/lib/gradient-stops.html","../../../projects/gradient-picker/src/lib/conic-gradient-picker.ts","../../../projects/gradient-picker/src/lib/conic-gradient-picker.html","../../../projects/gradient-picker/src/lib/linear-gradient-picker.ts","../../../projects/gradient-picker/src/lib/linear-gradient-picker.html","../../../projects/gradient-picker/src/lib/radial-gradient-picker.ts","../../../projects/gradient-picker/src/lib/radial-gradient-picker.html","../../../projects/gradient-picker/src/lib/gradient-picker.ts","../../../projects/gradient-picker/src/lib/gradient-picker.html","../../../projects/gradient-picker/src/public-api.ts","../../../projects/gradient-picker/src/acrodata-gradient-picker.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'gradient-form-group',\n  imports: [],\n  template: `\n    @if (label) {\n      <label class=\"gradient-form-label\" for=\"\" [title]=\"label\">{{ label }}</label>\n    }\n    <ng-content />\n  `,\n  styleUrl: './gradient-form-group.scss',\n  host: {\n    class: 'gradient-form-group',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientFormGroup {\n  @Input() label = '';\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'gradient-input-field',\n  imports: [],\n  template: `\n    <ng-content />\n  `,\n  styleUrl: './gradient-input-field.scss',\n  host: {\n    class: 'gradient-input-field',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientInputField {}\n","import { resolveLength } from '@acrodata/gradient-parser';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'gradient-unit-input',\n  imports: [FormsModule],\n  template: `\n    <input type=\"number\" [(ngModel)]=\"value\" (change)=\"onValueChange()\" />\n    <select [(ngModel)]=\"unit\" (change)=\"onValueChange()\">\n      @for (unit of units; track $index) {\n        <option [value]=\"unit\">{{ unit }}</option>\n      }\n    </select>\n  `,\n  styleUrl: './gradient-unit-input.scss',\n  host: {\n    class: 'gradient-unit-input',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientUnitInput),\n      multi: true,\n    },\n  ],\n})\nexport class GradientUnitInput implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  @Input() units: string[] = [];\n\n  value: number | null = null;\n\n  unit = '';\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    const vu = resolveLength(value);\n    if (vu) {\n      this.value = vu.value;\n      this.unit = vu.unit;\n    }\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onValueChange() {\n    const value = this.value != null ? this.value + this.unit : '';\n    this.onChange(value);\n  }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: '[gradientCheckbox]',\n  imports: [],\n  template: `\n    <ng-content />\n  `,\n  styleUrl: './gradient-checkbox.scss',\n  host: {\n    class: 'gradient-checkbox',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientCheckbox {}\n","/* eslint-disable @angular-eslint/no-output-native */\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  Directive,\n  EventEmitter,\n  forwardRef,\n  inject,\n  InjectionToken,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nlet nextUniqueId = 0;\n\nexport class GradientRadioChange {\n  constructor(\n    public source: GradientRadioButton,\n    public value: any\n  ) {}\n}\n\nexport const GRADIENT_RADIO_GROUP = new InjectionToken<GradientRadioGroup>('GradientRadioGroup');\n\n@Directive({\n  selector: 'gradient-radio-group',\n  standalone: true,\n  host: {\n    class: 'gradient-radio-group',\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientRadioGroup),\n      multi: true,\n    },\n    {\n      provide: GRADIENT_RADIO_GROUP,\n      useExisting: GradientRadioGroup,\n    },\n  ],\n})\nexport class GradientRadioGroup implements AfterContentInit, OnDestroy, ControlValueAccessor {\n  private _changeDetector = inject(ChangeDetectorRef);\n\n  private _isInitialized = false;\n\n  @ContentChildren(forwardRef(() => GradientRadioButton), { descendants: true })\n  _radios!: QueryList<GradientRadioButton>;\n\n  @Input()\n  get name() {\n    return this._name;\n  }\n  set name(value: string) {\n    this._name = value;\n    this._updateRadioButtonNames();\n  }\n  private _name = `gradient-radio-group-${nextUniqueId++}`;\n\n  @Input()\n  get value() {\n    return this._value;\n  }\n  set value(newValue: any) {\n    if (this._value !== newValue) {\n      // Set this before proceeding to ensure no circular loop occurs with selection.\n      this._value = newValue;\n\n      this._updateSelectedRadioFromValue();\n      this._checkSelectedRadioButton();\n    }\n  }\n  private _value: any = null;\n\n  @Input()\n  get selected() {\n    return this._selected;\n  }\n  set selected(selected: GradientRadioButton | null) {\n    this._selected = selected;\n    this.value = selected ? selected.value : null;\n    this._checkSelectedRadioButton();\n  }\n  private _selected: GradientRadioButton | null = null;\n\n  @Input({ transform: booleanAttribute })\n  get required() {\n    return this._required;\n  }\n  set required(value: boolean) {\n    this._required = value;\n    this._markRadiosForCheck();\n  }\n  private _required = false;\n\n  @Input({ transform: booleanAttribute })\n  get disabled() {\n    return this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = value;\n    this._markRadiosForCheck();\n  }\n  private _disabled = false;\n\n  @Output() readonly change = new EventEmitter<GradientRadioChange>();\n\n  private _buttonChanges = Subscription.EMPTY;\n\n  _onChange: (value: any) => void = () => {};\n  _onTouched: () => void = () => {};\n\n  ngAfterContentInit() {\n    this._isInitialized = true;\n\n    this._buttonChanges = this._radios.changes.subscribe(() => {\n      if (this.selected && !this._radios.find(radio => radio === this.selected)) {\n        this._selected = null;\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._buttonChanges.unsubscribe();\n  }\n\n  _checkSelectedRadioButton() {\n    if (this._selected && !this._selected.checked) {\n      this._selected.checked = true;\n    }\n  }\n\n  _emitChangeEvent(): void {\n    if (this._isInitialized) {\n      this.change.emit(new GradientRadioChange(this._selected!, this.value));\n    }\n  }\n\n  _markRadiosForCheck() {\n    if (this._radios) {\n      this._radios.forEach(radio => radio._markForCheck());\n    }\n  }\n\n  writeValue(value: any): void {\n    this.value = value;\n    this._changeDetector.markForCheck();\n  }\n\n  registerOnChange(fn: (value: any) => void): void {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this._changeDetector.markForCheck();\n  }\n\n  private _updateRadioButtonNames(): void {\n    if (this._radios) {\n      this._radios.forEach(radio => {\n        radio.name = this.name;\n        radio._markForCheck();\n      });\n    }\n  }\n\n  private _updateSelectedRadioFromValue(): void {\n    // If the value already matches the selected radio, do nothing.\n    const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n\n    if (this._radios && !isAlreadySelected) {\n      this._selected = null;\n      this._radios.forEach(radio => {\n        radio.checked = this.value === radio.value;\n        if (radio.checked) {\n          this._selected = radio;\n        }\n      });\n    }\n  }\n}\n\n@Component({\n  selector: 'gradient-radio-button',\n  standalone: true,\n  template: `\n    <input\n      type=\"radio\"\n      [id]=\"inputId\"\n      [name]=\"name\"\n      [attr.name]=\"name\"\n      [attr.value]=\"value\"\n      [checked]=\"checked\"\n      [disabled]=\"disabled\"\n      [required]=\"required\"\n      (change)=\"_onInputChange($event)\"\n    />\n    <label [for]=\"inputId\">\n      <ng-content />\n    </label>\n  `,\n  styleUrl: './gradient-radio.scss',\n  host: {\n    class: 'gradient-radio-button',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientRadioButton implements OnInit, OnDestroy {\n  private _changeDetector = inject(ChangeDetectorRef);\n  private _radioDispatcher = inject(UniqueSelectionDispatcher);\n\n  private _uniqueId = `gradient-radio-${++nextUniqueId}`;\n\n  @Input() id = this._uniqueId;\n\n  @Input() name = '';\n\n  @Input({ transform: booleanAttribute })\n  get checked() {\n    return this._checked;\n  }\n  set checked(value: boolean) {\n    if (this._checked !== value) {\n      this._checked = value;\n      if (value && this.radioGroup && this.radioGroup.value !== this.value) {\n        this.radioGroup.selected = this;\n      } else if (!value && this.radioGroup && this.radioGroup.value === this.value) {\n        // When unchecking the selected radio button, update the selected radio\n        // property on the group.\n        this.radioGroup.selected = null;\n      }\n\n      if (value) {\n        // Notify all radio buttons with the same name to un-check.\n        this._radioDispatcher.notify(this.id, this.name);\n      }\n      this._changeDetector.markForCheck();\n    }\n  }\n  private _checked = false;\n\n  @Input()\n  get value() {\n    return this._value;\n  }\n  set value(value: any) {\n    if (this._value !== value) {\n      this._value = value;\n      if (this.radioGroup !== null) {\n        if (!this.checked) {\n          // Update checked when the value changed to match the radio group's value\n          this.checked = this.radioGroup.value === value;\n        }\n        if (this.checked) {\n          this.radioGroup.selected = this;\n        }\n      }\n    }\n  }\n  private _value: any = null;\n\n  @Input({ transform: booleanAttribute })\n  get required() {\n    return this._required || (this.radioGroup !== null && this.radioGroup.required);\n  }\n  set required(value: boolean) {\n    if (value !== this._required) {\n      this._changeDetector.markForCheck();\n    }\n    this._required = value;\n  }\n  private _required = false;\n\n  @Input({ transform: booleanAttribute })\n  get disabled() {\n    return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);\n  }\n  set disabled(value: boolean) {\n    this._setDisabled(value);\n  }\n  private _disabled = false;\n\n  @Output() readonly change = new EventEmitter<GradientRadioChange>();\n\n  radioGroup = inject(GRADIENT_RADIO_GROUP, { optional: true });\n\n  get inputId() {\n    return `${this.id || this._uniqueId}-input`;\n  }\n\n  private _removeUniqueSelectionListener: () => void = () => {};\n\n  ngOnInit(): void {\n    if (this.radioGroup) {\n      // If the radio is inside a radio group, determine if it should be checked\n      this.checked = this.radioGroup.value === this._value;\n\n      if (this.checked) {\n        this.radioGroup.selected = this;\n      }\n\n      // Copy name from parent radio group\n      this.name = this.radioGroup.name;\n    }\n\n    this._removeUniqueSelectionListener = this._radioDispatcher.listen((id, name) => {\n      if (id !== this.id && name === this.name) {\n        this.checked = false;\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._removeUniqueSelectionListener();\n  }\n\n  private _emitChangeEvent(): void {\n    this.change.emit(new GradientRadioChange(this, this.value));\n  }\n\n  _onInputChange(event: Event) {\n    event.stopPropagation();\n\n    if (!this.checked && !this.disabled) {\n      const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n      this.checked = true;\n      this._emitChangeEvent();\n\n      if (this.radioGroup) {\n        this.radioGroup._onChange(this.value);\n        if (groupValueChanged) {\n          this.radioGroup._emitChangeEvent();\n        }\n      }\n    }\n  }\n\n  _markForCheck() {\n    this._changeDetector.markForCheck();\n  }\n\n  protected _setDisabled(value: boolean) {\n    if (this._disabled !== value) {\n      this._disabled = value;\n      this._changeDetector.markForCheck();\n    }\n  }\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n  selector: 'gradient-icon-button',\n  imports: [],\n  template: `\n    <ng-content />\n  `,\n  styleUrl: './gradient-icon-button.scss',\n  host: {\n    class: 'gradient-icon-button',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientIconButton {}\n","import { ColorPicker } from '@acrodata/color-picker';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  forwardRef,\n  inject,\n  Input,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'gradient-colorpicker-toggle',\n  imports: [],\n  template: `\n    <button\n      type=\"button\"\n      [class.gradient-colorpicker-empty-color]=\"!color\"\n      [style.background-color]=\"color\"\n      (click)=\"onClick($event)\"\n      (dblclick)=\"onDblClick($event)\"\n    >\n      toggle\n    </button>\n  `,\n  host: {\n    class: 'gradient-colorpicker-toggle',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GradientColorpickerToggle implements OnInit {\n  private cdr = inject(ChangeDetectorRef);\n  private elementRef = inject(ElementRef);\n\n  @Input('for') colorpicker: GradientColorpicker | null = null;\n\n  @Input() triggerEvent: 'click' | 'dblclick' = 'click';\n\n  @Input() overlayOrigin: CdkOverlayOrigin | ElementRef | HTMLElement = this.elementRef;\n\n  @Input() color = '';\n\n  ngOnInit(): void {\n    if (this.colorpicker) {\n      this.colorpicker.overlayOrigin = this.overlayOrigin;\n    }\n  }\n\n  onClick(e: MouseEvent) {\n    if (this.colorpicker && this.triggerEvent === 'click') {\n      this.colorpicker.overlayOrigin = this.overlayOrigin;\n      this.colorpicker.toggle();\n    }\n  }\n\n  onDblClick(e: MouseEvent) {\n    if (this.colorpicker && this.triggerEvent === 'dblclick') {\n      this.colorpicker.overlayOrigin = this.overlayOrigin;\n      this.colorpicker.toggle();\n    }\n  }\n}\n\n@Component({\n  selector: 'gradient-colorpicker',\n  imports: [FormsModule, ColorPicker, CdkConnectedOverlay],\n  templateUrl: './gradient-colorpicker.html',\n  styleUrl: './gradient-colorpicker.scss',\n  host: {\n    class: 'gradient-colorpicker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientColorpicker),\n      multi: true,\n    },\n  ],\n})\nexport class GradientColorpicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n  private elementRef = inject(ElementRef);\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  @Input() overlayOrigin: CdkOverlayOrigin | ElementRef | HTMLElement = this.elementRef;\n\n  isOpen = false;\n\n  color = '';\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    if (value) {\n      this.color = value;\n    }\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onColorChange(color: string) {\n    this.onChange(color);\n  }\n\n  open() {\n    this.isOpen = true;\n    this.cdr.markForCheck();\n  }\n\n  close() {\n    this.isOpen = false;\n    this.cdr.markForCheck();\n  }\n\n  toggle() {\n    this.isOpen = !this.isOpen;\n    this.cdr.markForCheck();\n  }\n}\n","<ng-template\n  cdkConnectedOverlay\n  [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n  [cdkConnectedOverlayOpen]=\"isOpen\"\n  (overlayOutsideClick)=\"close()\"\n  (detach)=\"close()\"\n>\n  <color-picker [value]=\"color\" (valueChange)=\"onColorChange($event)\" />\n</ng-template>\n","import { ColorStop } from '@acrodata/gradient-parser';\nimport { TinyColor } from '@ctrl/tinycolor';\n\n/**\n * Reorder an element at a specified index by condition\n *\n * @param array The original array\n * @param index The element at this index will be checked and moved to its correct sorted location.\n * @param compareWith1 The comparison function used to determine if the element needs to move left.\n * @param compareWith2 The comparison function used to determine if the element needs to move right.\n * @param callback The callback function after the elements have been swapped.\n * @returns\n */\nexport function reorderElementByCondition<T = any>(\n  array: T[] = [],\n  index = 0,\n  compareWith1: (a: T, b: T) => boolean = (a, b) => a < b,\n  compareWith2: (a: T, b: T) => boolean = (a, b) => a > b,\n  callback?: (newIndex: number) => void\n): T[] {\n  // Make a copy to avoid modifying the original array reference\n  const newArr = [...array];\n\n  if (index < 0 || index >= newArr.length) {\n    return array;\n  }\n\n  // Now, we need to move this potentially out-of-place element\n  // to its correct sorted position.\n  // This is essentially an insertion sort pass for a single element.\n\n  let i = index;\n\n  while (i > 0 && compareWith1(newArr[i], newArr[i - 1])) {\n    // Swap elements\n    [newArr[i], newArr[i - 1]] = [newArr[i - 1], newArr[i]];\n    i--;\n    callback?.(i);\n  }\n\n  while (i < newArr.length - 1 && compareWith2(newArr[i], newArr[i + 1])) {\n    // Swap elements\n    [newArr[i], newArr[i + 1]] = [newArr[i + 1], newArr[i]];\n    i++;\n    callback?.(i);\n  }\n\n  return newArr;\n}\n\n/**\n * Linearly interpolate between two colors.\n *\n * @param fromColor The starting color in any format supported by TinyColor.\n * @param toColor The ending color in any format supported by TinyColor.\n * @param percentage The interpolation percentage between 0 (`fromColor`) and 1 (`toColor`)\n * @returns\n */\nexport function interpolateColor(fromColor: string, toColor: string, percentage = 0.5) {\n  const c1 = new TinyColor(fromColor);\n  const c2 = new TinyColor(toColor);\n\n  // Convert to premultiplied alpha\n  const c1_pre = {\n    r: c1.r * c1.a,\n    g: c1.g * c1.a,\n    b: c1.b * c1.a,\n    a: c1.a,\n  };\n  const c2_pre = {\n    r: c2.r * c2.a,\n    g: c2.g * c2.a,\n    b: c2.b * c2.a,\n    a: c2.a,\n  };\n\n  // Linearly interpolate the premultiplied RGBA components\n  const interpolatedR_pre = c1_pre.r * (1 - percentage) + c2_pre.r * percentage;\n  const interpolatedG_pre = c1_pre.g * (1 - percentage) + c2_pre.g * percentage;\n  const interpolatedB_pre = c1_pre.b * (1 - percentage) + c2_pre.b * percentage;\n  const interpolatedA = c1_pre.a * (1 - percentage) + c2_pre.a * percentage;\n\n  // Convert back to non-premultiplied alpha format (if alpha is not 0)\n  const finalR = interpolatedA > 0 ? interpolatedR_pre / interpolatedA : 0;\n  const finalG = interpolatedA > 0 ? interpolatedG_pre / interpolatedA : 0;\n  const finalB = interpolatedA > 0 ? interpolatedB_pre / interpolatedA : 0;\n\n  const finalColor = new TinyColor({\n    r: Math.round(finalR),\n    g: Math.round(finalG),\n    b: Math.round(finalB),\n    a: interpolatedA,\n  });\n\n  return interpolatedA === 1 ? finalColor.toHexString() : finalColor.toRgbString();\n}\n\n/**\n * Fill undefined offset in stops.\n *\n * @param stops\n * @returns\n */\nexport function fillUndefinedOffsets(stops: ColorStop[]): ColorStop[] {\n  if (stops.length === 0) return stops;\n\n  // Ensure the start and end positions are defined.\n  if (!stops[0] || stops[0].offset == null) {\n    stops[0].offset = { value: 0, unit: '%' };\n  }\n  const lastIndex = stops.length - 1;\n  if (!stops[lastIndex] || stops[lastIndex].offset == null) {\n    stops[lastIndex].offset = { value: 100, unit: '%' };\n  }\n\n  stops.forEach((item, index) => {\n    if (item.offset != null) return;\n\n    // Find the nearest defined offset to the left of the current item by using\n    // findIndex to search backward from the current index.\n    const startIndex = stops\n      .slice(0, index)\n      .reverse()\n      .findIndex(x => x.offset != null);\n    const prevDefinedIndex = index - 1 - startIndex;\n    const startOffsetValue = stops[prevDefinedIndex].offset!.value;\n\n    // Find the nearest defined offset to the right of the current item by using\n    // findIndex to search forward from the current index.\n    const endIndex = stops.slice(index + 1).findIndex(x => x.offset != null);\n    const nextDefinedIndex = index + 1 + endIndex;\n    const endOffsetValue = stops[nextDefinedIndex].offset!.value;\n\n    // Calculate the number of gaps between two defined values.\n    const totalGaps = nextDefinedIndex - prevDefinedIndex;\n    const totalDifference = endOffsetValue - startOffsetValue;\n\n    // Calculate the index of the current undefined value within the entire gaps.\n    const gapIndex = index - prevDefinedIndex;\n    const newOffsetValue = startOffsetValue + (gapIndex / totalGaps) * totalDifference;\n\n    item.offset = { value: newOffsetValue, unit: '%' };\n  });\n\n  return stops;\n}\n\n/**\n * Reverse the color stops array.\n *\n * @param stops\n * @returns\n */\nexport function reverseColorStops(stops: ColorStop[]) {\n  return stops.reverse().map(stop => {\n    if (stop.offset?.value != null) {\n      stop.offset.value = 100 - stop.offset.value;\n    }\n    return stop;\n  });\n}\n\n/**\n * Convert angle to percentage (e.g. `45deg`, `0.25turn`, `3.14rad`, `100grad`).\n *\n * @param value\n * @param unit\n * @returns\n */\nexport function angleToPercentage(value: number, unit: string) {\n  let degrees;\n  switch (unit) {\n    case 'deg':\n      degrees = value;\n      break;\n    case 'rad':\n      degrees = value * (180 / Math.PI);\n      break;\n    case 'turn':\n      degrees = value * 360;\n      break;\n    case 'grad':\n      degrees = value * 0.9;\n      break;\n    default:\n      return value;\n  }\n\n  // Calculate the percentage within 360 degrees and ensure the\n  // percentage value is between 0 and 100.\n  let percentage = (degrees / 360) * 100;\n\n  // Handle negative values or values exceeding 360 degrees by using\n  // the modulo operator to constrain the angle within [0, 360).\n  if (percentage < 0) {\n    percentage = (percentage % 100) + 100;\n  } else if (percentage >= 100) {\n    percentage = percentage % 100;\n  }\n\n  return percentage;\n}\n\n/**\n * Convert angle values in the gradient stops array to percentages.\n *\n * @param stops\n * @returns\n */\nexport function convertAngleToPercentage(stops: ColorStop[]) {\n  return stops.map(stop => {\n    if (stop.offset && angleUnits.includes(stop.offset.unit)) {\n      const { value, unit } = stop.offset;\n      stop.offset.value = angleToPercentage(value, unit);\n      stop.offset.unit = '%';\n    }\n    return stop;\n  });\n}\n\nexport const angleUnits = ['deg', 'rad', 'turn', 'grad'];\nexport const lengthUnits = ['%', 'px', 'em', 'rem', 'vw', 'vh', 'ch'];\n\nexport const positionXKeywords = ['left', 'center', 'right'];\nexport const positionYKeywords = ['top', 'center', 'bottom'];\n\nexport const rectangularColorSpaces = [\n  'srgb',\n  'srgb-linear',\n  'display-p3',\n  'a98-rgb',\n  'prophoto-rgb',\n  'rec2020',\n  'lab',\n  'oklab',\n  'xyz',\n  'xyz-d50',\n  'xyz-d65',\n];\nexport const polarColorSpaces = ['hsl', 'hwb', 'lch', 'oklch'];\nexport const hueInterpolationMethods = [\n  'shorter hue',\n  'longer hue',\n  'increasing hue',\n  'decreasing hue',\n];\n","import { ColorStop } from '@acrodata/gradient-parser';\nimport { CdkDrag, CdkDragEnd, CdkDragMove } from '@angular/cdk/drag-drop';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport {\n  AfterViewInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { GradientIconButton, GradientInputField } from './form-controls';\nimport { GradientColorpicker, GradientColorpickerToggle } from './gradient-colorpicker';\nimport {\n  convertAngleToPercentage,\n  fillUndefinedOffsets,\n  interpolateColor,\n  reorderElementByCondition,\n} from './utils';\n\nexport interface SliderColorStop extends ColorStop {\n  id: number;\n  offset: { value: number; unit: string };\n  position: { x: number; y: number };\n}\n\nlet uniqueIdCounter = 0;\n\n@Component({\n  selector: 'gradient-stops',\n  imports: [\n    FormsModule,\n    CdkDrag,\n    CdkOverlayOrigin,\n    GradientColorpicker,\n    GradientColorpickerToggle,\n    GradientInputField,\n    GradientIconButton,\n  ],\n  templateUrl: './gradient-stops.html',\n  styleUrl: './gradient-stops.scss',\n  host: {\n    class: 'gradient-stops',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientStops),\n      multi: true,\n    },\n  ],\n})\nexport class GradientStops implements ControlValueAccessor, OnChanges, AfterViewInit, OnDestroy {\n  private cdr = inject(ChangeDetectorRef);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  @ViewChild('sliderTrack') track?: ElementRef<HTMLElement>;\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  @Input() colorStops: ColorStop[] = [];\n\n  @Output() colorStopsChange = new EventEmitter<ColorStop[]>();\n\n  sliderColorStops: SliderColorStop[] = [];\n\n  trackWidth = 0;\n\n  gradientColor = '';\n\n  isDragging = false;\n\n  selectedStop?: SliderColorStop;\n\n  private observer?: ResizeObserver;\n\n  private onChange: (value: ColorStop[]) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['colorStops']) {\n      this.getStops();\n      this.getGradientColor();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.observer = new ResizeObserver(() => {\n      this.getStops();\n      this.getGradientColor();\n    });\n    this.observer.observe(this.track!.nativeElement);\n  }\n\n  ngOnDestroy(): void {\n    this.observer?.disconnect();\n    this.observer = undefined;\n  }\n\n  writeValue(value: any): void {\n    if (Array.isArray(value)) {\n      this.colorStops = value;\n      this.getStops();\n      this.getGradientColor();\n    }\n  }\n\n  registerOnChange(fn: (value: ColorStop[]) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  getStops() {\n    if (!this.track) return;\n\n    this.trackWidth = this.track.nativeElement.offsetWidth;\n\n    this.sliderColorStops = fillUndefinedOffsets(convertAngleToPercentage(this.colorStops)).map(\n      stop => {\n        const offset = stop.offset || { value: 0, unit: '%' };\n        const posX = Math.min(\n          offset.unit === '%' ? (offset.value / 100) * this.trackWidth : offset.value,\n          this.trackWidth\n        );\n        return {\n          ...stop,\n          id: uniqueIdCounter++,\n          offset,\n          position: { x: posX, y: 0 },\n        };\n      }\n    );\n\n    this.selectedStop = undefined;\n\n    this.cdr.markForCheck();\n  }\n\n  getGradientColor(stops = this.sliderColorStops) {\n    const colors = stops.map(({ color, offset }) => `${color} ${offset.value}${offset.unit}`);\n    this.gradientColor = `linear-gradient(to right, ${colors.join(',')})`;\n    this.cdr.markForCheck();\n  }\n\n  getInsertStopColor(offsetX: number) {\n    const prevStop = this.sliderColorStops.filter(s => s.position.x < offsetX).pop();\n    const nextStop = this.sliderColorStops.filter(s => s.position.x > offsetX).shift();\n    if (prevStop && nextStop) {\n      const percentage =\n        (offsetX - prevStop.position.x) / (nextStop.position.x - prevStop.position.x);\n      return interpolateColor(prevStop.color, nextStop.color, percentage);\n    } else if (prevStop) {\n      return prevStop.color;\n    } else if (nextStop) {\n      return nextStop.color;\n    } else {\n      return '#000000';\n    }\n  }\n\n  getNewStopOffsetX(stops = this.sliderColorStops) {\n    if (stops.length === 0) return 0;\n\n    if (stops.length === 1) {\n      const newOffset = stops[0].offset.value < 50 ? 100 : 0;\n      return (newOffset / 100) * this.trackWidth;\n    }\n\n    const currentIndex = this.selectedStop\n      ? stops.findIndex(stop => stop === this.selectedStop)\n      : 0;\n    const neighborIndex = currentIndex === stops.length - 1 ? currentIndex - 1 : currentIndex + 1;\n    const newOffset = (stops[currentIndex].offset.value + stops[neighborIndex].offset.value) / 2;\n    return (newOffset / 100) * this.trackWidth;\n  }\n\n  addStop(e?: MouseEvent) {\n    const offsetX = e ? e.offsetX : this.getNewStopOffsetX();\n    const newStop = {\n      id: uniqueIdCounter++,\n      color: this.getInsertStopColor(offsetX),\n      offset: { value: Math.round((offsetX / this.trackWidth) * 100), unit: '%' },\n      position: { x: Math.round(offsetX), y: 0 },\n    };\n\n    this.selectedStop = newStop;\n    this.sliderColorStops.push(newStop);\n    this.sliderColorStops.sort(this.sortFn);\n\n    this.getGradientColor();\n    this.onStopsChange();\n  }\n\n  onDragMove(e: CdkDragMove, stop: SliderColorStop, index: number) {\n    const position = e.source.getFreeDragPosition();\n    const xPercent = Math.round((position.x / this.trackWidth) * 100);\n    stop.offset.value = stop.offset.unit === '%' ? xPercent : position.x;\n    stop.position.x = position.x;\n\n    const stops = reorderElementByCondition<SliderColorStop>(\n      this.sliderColorStops,\n      index,\n      (a, b) => a.position.x < b.position.x,\n      (a, b) => a.position.x > b.position.x\n    );\n    this.getGradientColor(stops);\n    this.onStopsChange();\n  }\n\n  onDragEnd(e: CdkDragEnd, stop: SliderColorStop) {\n    this.sliderColorStops.sort(this.sortFn);\n    this.restoreFocus(`#gradient-colorpicker-toggle-${stop.id} button`);\n    this.onStopsChange();\n\n    this.isDragging = false;\n    this.cdr.markForCheck();\n  }\n\n  onDragHandleDown(e: MouseEvent, stop: SliderColorStop) {\n    e.stopPropagation();\n    this.selectedStop = stop;\n    this.isDragging = true;\n    this.cdr.markForCheck();\n  }\n\n  onDragHandleUp(e: MouseEvent) {\n    e.stopPropagation();\n    this.isDragging = false;\n    this.cdr.markForCheck();\n  }\n\n  onStopItemClick(stop: SliderColorStop) {\n    this.selectedStop = stop;\n  }\n\n  onStopColorChange(stop: SliderColorStop) {\n    this.getGradientColor();\n    this.onStopsChange();\n  }\n\n  onStopOffsetChange(stop: SliderColorStop) {\n    stop.offset.value = Math.min(\n      stop.offset.unit === '%' ? 100 : this.trackWidth,\n      Math.max(0, stop.offset.value)\n    );\n    stop.position = {\n      x: stop.offset.unit === '%' ? (stop.offset.value / 100) * this.trackWidth : stop.offset.value,\n      y: 0,\n    };\n\n    this.sliderColorStops.sort(this.sortFn);\n    this.restoreFocus(`#gradient-stop-item-offset-${stop.id}`);\n    this.getGradientColor();\n    this.onStopsChange();\n  }\n\n  onStopRemove(stop: SliderColorStop) {\n    if (this.sliderColorStops.length === 1) return;\n\n    this.sliderColorStops = this.sliderColorStops.filter(s => s !== stop);\n    this.selectedStop = undefined;\n    this.getGradientColor();\n    this.onStopsChange();\n  }\n\n  onStopsChange() {\n    this.colorStops.forEach(() => this.colorStops.pop());\n    this.sliderColorStops.forEach((stop, i) => {\n      this.colorStops[i] = { color: stop.color, offset: stop.offset };\n    });\n    this.colorStops.sort(this.sortFn);\n    this.onChange(this.colorStops);\n    this.colorStopsChange.next(this.colorStops);\n  }\n\n  /** Move selected stop by arrow keys. */\n  moveStop(e: Event, stop: SliderColorStop, index: number, step: number) {\n    e.preventDefault();\n\n    stop.offset.value = Math.min(\n      stop.offset.unit === '%' ? 100 : this.trackWidth,\n      Math.max(0, stop.offset.value + step)\n    );\n    stop.position = {\n      x: stop.offset.unit === '%' ? (stop.offset.value / 100) * this.trackWidth : stop.offset.value,\n      y: 0,\n    };\n\n    const stops = reorderElementByCondition<SliderColorStop>(\n      this.sliderColorStops,\n      index,\n      (a, b) => a.position.x < b.position.x,\n      (a, b) => a.position.x > b.position.x,\n      () => {\n        this.sliderColorStops.sort(this.sortFn);\n        this.restoreFocus(`#gradient-colorpicker-toggle-${stop.id} button`);\n      }\n    );\n    this.getGradientColor(stops);\n    this.onStopsChange();\n  }\n\n  /** Restoring focus to the selected stop after sorting. */\n  restoreFocus(selector: string) {\n    setTimeout(() => {\n      const el = this.elementRef.nativeElement.querySelector(selector) as HTMLElement;\n      el.focus();\n    });\n  }\n\n  /** Comparison function to sort color stops by their offset values. */\n  sortFn = (a: ColorStop, b: ColorStop) => {\n    const aOffset = a.offset!;\n    const bOffset = b.offset!;\n    if (aOffset.unit === bOffset.unit) {\n      return aOffset.value - bOffset.value;\n    } else {\n      const aVal = aOffset.unit === '%' ? (aOffset.value / 100) * this.trackWidth : aOffset.value;\n      const bVal = bOffset.unit === '%' ? (bOffset.value / 100) * this.trackWidth : bOffset.value;\n      return aVal - bVal;\n    }\n  };\n}\n","<div class=\"gradient-stops-slider\" [class.is-dragging]=\"isDragging\">\n  <div class=\"gradient-stops-slider-bar\" (pointerdown)=\"addStop($event)\">\n    <div class=\"gradient-stops-slider-bar-bg\" [style.background-image]=\"gradientColor\"></div>\n  </div>\n\n  <div #sliderTrack class=\"gradient-stops-slider-track\">\n    @for (stop of sliderColorStops; track stop.id) {\n      <div\n        class=\"gradient-stops-slider-pointer\"\n        cdkDrag\n        cdkDragLockAxis=\"x\"\n        [cdkDragBoundary]=\"sliderTrack\"\n        [cdkDragFreeDragPosition]=\"stop.position\"\n        (cdkDragMoved)=\"onDragMove($event, stop, $index)\"\n        (cdkDragEnded)=\"onDragEnd($event, stop)\"\n      >\n        <div\n          #sliderThumb\n          class=\"gradient-stops-slider-thumb\"\n          [class.gradient-stops-slider-thumb-active]=\"stop === selectedStop\"\n          (pointerdown)=\"onDragHandleDown($event, stop)\"\n          (pointerup)=\"onDragHandleUp($event)\"\n        >\n          <gradient-colorpicker-toggle\n            [id]=\"'gradient-colorpicker-toggle-' + stop.id\"\n            [for]=\"gc\"\n            [color]=\"stop.color\"\n            [overlayOrigin]=\"sliderThumb\"\n            triggerEvent=\"dblclick\"\n            (keydown.backspace)=\"onStopRemove(stop)\"\n            (keydown.delete)=\"onStopRemove(stop)\"\n            (keydown.arrowup)=\"moveStop($event, stop, $index, 1)\"\n            (keydown.arrowright)=\"moveStop($event, stop, $index, 1)\"\n            (keydown.arrowdown)=\"moveStop($event, stop, $index, -1)\"\n            (keydown.arrowleft)=\"moveStop($event, stop, $index, -1)\"\n          />\n          <gradient-colorpicker\n            #gc\n            [(ngModel)]=\"stop.color\"\n            (ngModelChange)=\"onStopColorChange(stop)\"\n          />\n        </div>\n      </div>\n    }\n  </div>\n</div>\n\n<div class=\"gradient-stop-list-wrapper\">\n  <div class=\"gradient-stop-list-header\">\n    <span>Stops</span>\n    <gradient-icon-button>\n      <button type=\"button\" (click)=\"addStop()\" title=\"Add stop\" aria-label=\"Add stop\">\n        <svg viewBox=\"0 0 24 24\">\n          <path\n            fill=\"currentColor\"\n            d=\"M12 6a.5.5 0 0 1 .5.5v5h5a.5.5 0 0 1 0 1h-5v5a.5.5 0 0 1-1 0v-5h-5a.5.5 0 0 1 0-1h5v-5A.5.5 0 0 1 12 6\"\n            clip-rule=\"evenodd\"\n          />\n        </svg>\n      </button>\n    </gradient-icon-button>\n  </div>\n  <div class=\"gradient-stop-list-body\">\n    <ul class=\"gradient-stop-list\">\n      @for (stop of sliderColorStops; track stop.id) {\n        <li\n          class=\"gradient-stop-item\"\n          [class.gradient-stop-item-active]=\"stop === selectedStop\"\n          (pointerdown)=\"onStopItemClick(stop)\"\n        >\n          <gradient-input-field\n            class=\"gradient-stop-item-color\"\n            cdkOverlayOrigin\n            #colorField=\"cdkOverlayOrigin\"\n          >\n            <gradient-colorpicker-toggle\n              [for]=\"gc\"\n              [color]=\"stop.color\"\n              [overlayOrigin]=\"colorField\"\n            />\n            <gradient-colorpicker\n              #gc\n              [(ngModel)]=\"stop.color\"\n              (ngModelChange)=\"onStopColorChange(stop)\"\n            />\n            <input type=\"text\" [(ngModel)]=\"stop.color\" (change)=\"onStopColorChange(stop)\" />\n          </gradient-input-field>\n          <gradient-input-field class=\"gradient-stop-item-offset\">\n            <input\n              [id]=\"'gradient-stop-item-offset-' + stop.id\"\n              type=\"number\"\n              [min]=\"0\"\n              [max]=\"stop.offset.unit === '%' ? 100 : null\"\n              [(ngModel)]=\"stop.offset.value\"\n              (change)=\"onStopOffsetChange(stop)\"\n            />\n            <select [(ngModel)]=\"stop.offset.unit\" (change)=\"onStopOffsetChange(stop)\">\n              <option value=\"%\">%</option>\n              <option value=\"px\">px</option>\n            </select>\n          </gradient-input-field>\n          <gradient-icon-button>\n            @if (sliderColorStops.length > 1) {\n              <button\n                type=\"button\"\n                (click)=\"onStopRemove(stop)\"\n                title=\"Remove stop\"\n                aria-label=\"Remove stop\"\n              >\n                <svg viewBox=\"0 0 24 24\">\n                  <path\n                    fill=\"currentColor\"\n                    d=\"M6 12a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11A.5.5 0 0 1 6 12\"\n                  />\n                </svg>\n              </button>\n            }\n          </gradient-icon-button>\n        </li>\n      }\n    </ul>\n  </div>\n</div>\n","import {\n  ConicGradientResult,\n  parseConicGradient,\n  stringifyConicGradient,\n} from '@acrodata/gradient-parser';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  GradientCheckbox,\n  GradientFormGroup,\n  GradientIconButton,\n  GradientInputField,\n  GradientUnitInput,\n} from './form-controls';\nimport { GradientStops } from './gradient-stops';\nimport {\n  angleUnits,\n  hueInterpolationMethods,\n  lengthUnits,\n  polarColorSpaces,\n  positionXKeywords,\n  positionYKeywords,\n  rectangularColorSpaces,\n  reverseColorStops,\n} from './utils';\n\n@Component({\n  selector: 'conic-gradient-picker',\n  imports: [\n    FormsModule,\n    GradientStops,\n    GradientInputField,\n    GradientFormGroup,\n    GradientUnitInput,\n    GradientCheckbox,\n    GradientIconButton,\n  ],\n  templateUrl: './conic-gradient-picker.html',\n  styleUrl: './conic-gradient-picker.scss',\n  host: {\n    class: 'conic-gradient-picker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ConicGradientPicker),\n      multi: true,\n    },\n  ],\n})\nexport class ConicGradientPicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  @Input()\n  get value() {\n    return this._value;\n  }\n  set value(newVal: string) {\n    if (newVal !== this._value) {\n      this._value = newVal || 'conic-gradient(transparent, #000000)';\n      this.conicGradient = parseConicGradient(this._value);\n      this.cdr.markForCheck();\n    }\n  }\n  private _value = '';\n\n  @Output() valueChange = new EventEmitter<string>();\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  conicGradient: ConicGradientResult = {\n    repeating: false,\n    angle: '0deg',\n    position: {\n      x: { type: 'keyword', value: 'center' },\n      y: { type: 'keyword', value: 'center' },\n    },\n    stops: [{ color: 'transparent' }, { color: '#000000' }],\n  };\n\n  angleUnits = angleUnits;\n\n  lengthUnits = lengthUnits;\n\n  posXOptions = positionXKeywords;\n\n  posYOptions = positionYKeywords;\n\n  colorSpaceOptgroups = [\n    { label: 'Rectangular', options: rectangularColorSpaces },\n    { label: 'Polar', options: polarColorSpaces },\n  ];\n\n  hueInterpolationMethodOptions = hueInterpolationMethods;\n\n  get isPolarColorSpace() {\n    return polarColorSpaces.includes(this.conicGradient.color?.space || '');\n  }\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    this.value = value;\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onGradientChange() {\n    this._value = stringifyConicGradient(this.conicGradient);\n    this.valueChange.emit(this._value);\n    this.onChange(this._value);\n  }\n\n  reverseStops() {\n    this.conicGradient.stops = reverseColorStops(this.conicGradient.stops);\n    this.onGradientChange();\n  }\n\n  onColorSpaceChange() {\n    if (!this.isPolarColorSpace && this.conicGradient.color) {\n      this.conicGradient.color.method = undefined;\n    }\n    this.onGradientChange();\n  }\n\n  switchPositionType() {\n    const hasKeywordPosition =\n      this.conicGradient.position.x.type === 'keyword' ||\n      this.conicGradient.position.y.type === 'keyword';\n    if (hasKeywordPosition) {\n      this.conicGradient.position = {\n        x: { type: 'length', value: '50%' },\n        y: { type: 'length', value: '50%' },\n      };\n    } else {\n      this.conicGradient.position = {\n        x: { type: 'keyword', value: 'center' },\n        y: { type: 'keyword', value: 'center' },\n      };\n    }\n    this.onGradientChange();\n  }\n}\n","<gradient-form-group label=\"Angle\">\n  <gradient-unit-input\n    [units]=\"angleUnits\"\n    [(ngModel)]=\"conicGradient.angle\"\n    (ngModelChange)=\"onGradientChange()\"\n  />\n</gradient-form-group>\n\n<gradient-form-group label=\"Position\">\n  @if (conicGradient.position.x.type === 'keyword') {\n    <gradient-input-field>\n      <select [(ngModel)]=\"conicGradient.position.x.value\" (change)=\"onGradientChange()\">\n        @for (posX of posXOptions; track $index) {\n          <option [value]=\"posX\">{{ posX }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  } @else {\n    <gradient-unit-input\n      [units]=\"lengthUnits\"\n      [(ngModel)]=\"conicGradient.position.x.value\"\n      (change)=\"onGradientChange()\"\n    />\n  }\n  @if (conicGradient.position.y.type === 'keyword') {\n    <gradient-input-field>\n      <select [(ngModel)]=\"conicGradient.position.y.value\" (change)=\"onGradientChange()\">\n        @for (posY of posYOptions; track $index) {\n          <option [value]=\"posY\">{{ posY }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  } @else {\n    <gradient-unit-input\n      [units]=\"lengthUnits\"\n      [(ngModel)]=\"conicGradient.position.y.value\"\n      (change)=\"onGradientChange()\"\n    />\n  }\n\n  <gradient-icon-button>\n    <button\n      type=\"button\"\n      (click)=\"switchPositionType()\"\n      title=\"Switch position type\"\n      aria-label=\"Switch position type\"\n    >\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M18.5 10c-.3 0-.5.2-.5.5V16c0 .6-.4 1-1 1H6.8l1.6-1.6c.2-.2.2-.5 0-.7s-.5-.2-.7 0l-2.5 2.5c-.2.2-.2.5 0 .7l2.5 2.5c.2.2.5.2.7 0s.2-.5 0-.7L6.8 18H17c1.1 0 2-.9 2-2v-5.5c0-.3-.2-.5-.5-.5m-13 4c.3 0 .5-.2.5-.5V8c0-.6.4-1 1-1h10.2l-1.6 1.6c-.2.2-.2.5 0 .7s.5.2.7 0l2.5-2.5c.2-.2.2-.5 0-.7l-2.5-2.5c-.2-.2-.5-.2-.7 0s-.2.5 0 .7L17.2 6H7c-1.1 0-2 .9-2 2v5.5c0 .3.2.5.5.5\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n@if (conicGradient.color) {\n  <gradient-form-group label=\"Color interpolation\">\n    <gradient-input-field>\n      <select [(ngModel)]=\"conicGradient.color.space\" (change)=\"onColorSpaceChange()\">\n        @for (colorSpaceGroup of colorSpaceOptgroups; track $index) {\n          <optgroup [label]=\"colorSpaceGroup.label\">\n            @for (colorSpace of colorSpaceGroup.options; track $index) {\n              <option [value]=\"colorSpace\">{{ colorSpace }}</option>\n            }\n          </optgroup>\n        }\n      </select>\n    </gradient-input-field>\n    @if (isPolarColorSpace) {\n      <gradient-input-field>\n        <select [(ngModel)]=\"conicGradient.color.method\" (change)=\"onGradientChange()\">\n          @for (hueInterp of hueInterpolationMethodOptions; track $index) {\n            <option [value]=\"hueInterp\">{{ hueInterp }}</option>\n          }\n        </select>\n      </gradient-input-field>\n    }\n  </gradient-form-group>\n}\n\n<gradient-form-group>\n  <label gradientCheckbox>\n    <input type=\"checkbox\" [(ngModel)]=\"conicGradient.repeating\" (change)=\"onGradientChange()\" />\n    <span>Repeat</span>\n  </label>\n\n  <gradient-icon-button>\n    <button type=\"button\" (click)=\"reverseStops()\" title=\"Reverse stops\" aria-label=\"Reverse stops\">\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M8.354 6.354a.5.5 0 1 0-.708-.708l-2.5 2.5a.5.5 0 0 0 0 .708l2.5 2.5a.5.5 0 0 0 .708-.708L6.707 9H18.5a.5.5 0 0 0 0-1H6.707zm7.292 7a.5.5 0 0 1 .708-.708l2.5 2.5a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708-.708L17.293 16H5.5a.5.5 0 0 1 0-1h11.793z\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n<gradient-stops [ngModel]=\"conicGradient.stops\" (ngModelChange)=\"onGradientChange()\" />\n","import {\n  LinearGradientResult,\n  parseLinearGradient,\n  stringifyLinearGradient,\n} from '@acrodata/gradient-parser';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  GradientCheckbox,\n  GradientFormGroup,\n  GradientIconButton,\n  GradientInputField,\n  GradientUnitInput,\n} from './form-controls';\nimport { GradientStops } from './gradient-stops';\nimport {\n  angleUnits,\n  hueInterpolationMethods,\n  polarColorSpaces,\n  rectangularColorSpaces,\n  reverseColorStops,\n} from './utils';\n\n@Component({\n  selector: 'linear-gradient-picker',\n  imports: [\n    FormsModule,\n    GradientStops,\n    GradientInputField,\n    GradientFormGroup,\n    GradientUnitInput,\n    GradientCheckbox,\n    GradientIconButton,\n  ],\n  templateUrl: './linear-gradient-picker.html',\n  styleUrl: './linear-gradient-picker.scss',\n  host: {\n    class: 'linear-gradient-picker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => LinearGradientPicker),\n      multi: true,\n    },\n  ],\n})\nexport class LinearGradientPicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  @Input()\n  get value() {\n    return this._value;\n  }\n  set value(newVal: string) {\n    if (newVal !== this._value) {\n      this._value = newVal || 'linear-gradient(transparent, #000000)';\n      this.linearGradient = parseLinearGradient(this._value);\n      this.cdr.markForCheck();\n    }\n  }\n  private _value = '';\n\n  @Output() valueChange = new EventEmitter<string>();\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  linearGradient: LinearGradientResult = {\n    repeating: false,\n    orientation: { type: 'directional', value: 'bottom' },\n    stops: [{ color: 'transparent' }, { color: '#000000' }],\n  };\n\n  angleUnits = angleUnits;\n\n  directionOptions = [\n    { label: '↑ top', value: 'top' },\n    { label: '↗ top right', value: 'top right' },\n    { label: '→ right', value: 'right' },\n    { label: '↘ bottom right', value: 'bottom right' },\n    { label: '↓ bottom', value: 'bottom' },\n    { label: '↙ bottom left', value: 'bottom left' },\n    { label: '← left', value: 'left' },\n    { label: '↖ top left', value: 'top left' },\n  ];\n\n  colorSpaceOptgroups = [\n    { label: 'Rectangular', options: rectangularColorSpaces },\n    { label: 'Polar', options: polarColorSpaces },\n  ];\n\n  hueInterpolationMethodOptions = hueInterpolationMethods;\n\n  get isPolarColorSpace() {\n    return polarColorSpaces.includes(this.linearGradient.color?.space || '');\n  }\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    this.value = value;\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onGradientChange() {\n    this._value = stringifyLinearGradient(this.linearGradient);\n    this.valueChange.emit(this._value);\n    this.onChange(this._value);\n  }\n\n  reverseStops() {\n    this.linearGradient.stops = reverseColorStops(this.linearGradient.stops);\n    this.onGradientChange();\n  }\n\n  onColorSpaceChange() {\n    if (!this.isPolarColorSpace && this.linearGradient.color) {\n      this.linearGradient.color.method = undefined;\n    }\n    this.onGradientChange();\n  }\n\n  switchOrientationType() {\n    const isAngularOrientation = this.linearGradient.orientation.type === 'angular';\n    this.linearGradient.orientation.type = isAngularOrientation ? 'directional' : 'angular';\n    this.linearGradient.orientation.value = isAngularOrientation ? 'bottom' : '180deg';\n    this.onGradientChange();\n  }\n}\n","<gradient-form-group label=\"Angle\">\n  @if (linearGradient.orientation.type === 'angular') {\n    <gradient-unit-input\n      [units]=\"angleUnits\"\n      [(ngModel)]=\"linearGradient.orientation.value\"\n      (ngModelChange)=\"onGradientChange()\"\n    />\n  } @else {\n    <gradient-input-field>\n      <select [(ngModel)]=\"linearGradient.orientation.value\" (change)=\"onGradientChange()\">\n        @for (direction of directionOptions; track $index) {\n          <option [value]=\"direction.value\">{{ direction.label }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  }\n\n  <gradient-icon-button>\n    <button\n      type=\"button\"\n      (click)=\"switchOrientationType()\"\n      title=\"Switch orientation type\"\n      aria-label=\"Switch orientation type\"\n    >\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M18.5 10c-.3 0-.5.2-.5.5V16c0 .6-.4 1-1 1H6.8l1.6-1.6c.2-.2.2-.5 0-.7s-.5-.2-.7 0l-2.5 2.5c-.2.2-.2.5 0 .7l2.5 2.5c.2.2.5.2.7 0s.2-.5 0-.7L6.8 18H17c1.1 0 2-.9 2-2v-5.5c0-.3-.2-.5-.5-.5m-13 4c.3 0 .5-.2.5-.5V8c0-.6.4-1 1-1h10.2l-1.6 1.6c-.2.2-.2.5 0 .7s.5.2.7 0l2.5-2.5c.2-.2.2-.5 0-.7l-2.5-2.5c-.2-.2-.5-.2-.7 0s-.2.5 0 .7L17.2 6H7c-1.1 0-2 .9-2 2v5.5c0 .3.2.5.5.5\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n@if (linearGradient.color) {\n  <gradient-form-group label=\"Color interpolation\">\n    <gradient-input-field>\n      <select [(ngModel)]=\"linearGradient.color.space\" (change)=\"onColorSpaceChange()\">\n        @for (colorSpaceGroup of colorSpaceOptgroups; track $index) {\n          <optgroup [label]=\"colorSpaceGroup.label\">\n            @for (colorSpace of colorSpaceGroup.options; track $index) {\n              <option [value]=\"colorSpace\">{{ colorSpace }}</option>\n            }\n          </optgroup>\n        }\n      </select>\n    </gradient-input-field>\n    @if (isPolarColorSpace) {\n      <gradient-input-field>\n        <select [(ngModel)]=\"linearGradient.color.method\" (change)=\"onGradientChange()\">\n          @for (hueInterp of hueInterpolationMethodOptions; track $index) {\n            <option [value]=\"hueInterp\">{{ hueInterp }}</option>\n          }\n        </select>\n      </gradient-input-field>\n    }\n  </gradient-form-group>\n}\n\n<gradient-form-group>\n  <label gradientCheckbox>\n    <input type=\"checkbox\" [(ngModel)]=\"linearGradient.repeating\" (change)=\"onGradientChange()\" />\n    <span>Repeat</span>\n  </label>\n\n  <gradient-icon-button>\n    <button type=\"button\" (click)=\"reverseStops()\" title=\"Reverse stops\" aria-label=\"Reverse stops\">\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M8.354 6.354a.5.5 0 1 0-.708-.708l-2.5 2.5a.5.5 0 0 0 0 .708l2.5 2.5a.5.5 0 0 0 .708-.708L6.707 9H18.5a.5.5 0 0 0 0-1H6.707zm7.292 7a.5.5 0 0 1 .708-.708l2.5 2.5a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708-.708L17.293 16H5.5a.5.5 0 0 1 0-1h11.793z\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n<gradient-stops [ngModel]=\"linearGradient.stops\" (ngModelChange)=\"onGradientChange()\" />\n","import {\n  parseRadialGradient,\n  RadialGradientResult,\n  stringifyRadialGradient,\n} from '@acrodata/gradient-parser';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  GradientCheckbox,\n  GradientFormGroup,\n  GradientIconButton,\n  GradientInputField,\n  GradientRadioButton,\n  GradientRadioGroup,\n  GradientUnitInput,\n} from './form-controls';\nimport { GradientStops } from './gradient-stops';\nimport {\n  hueInterpolationMethods,\n  lengthUnits,\n  polarColorSpaces,\n  positionXKeywords,\n  positionYKeywords,\n  rectangularColorSpaces,\n  reverseColorStops,\n} from './utils';\n\n@Component({\n  selector: 'radial-gradient-picker',\n  imports: [\n    FormsModule,\n    GradientStops,\n    GradientInputField,\n    GradientFormGroup,\n    GradientUnitInput,\n    GradientCheckbox,\n    GradientRadioGroup,\n    GradientRadioButton,\n    GradientIconButton,\n  ],\n  templateUrl: './radial-gradient-picker.html',\n  styleUrl: './radial-gradient-picker.scss',\n  host: {\n    class: 'radial-gradient-picker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => RadialGradientPicker),\n      multi: true,\n    },\n  ],\n})\nexport class RadialGradientPicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  @Input()\n  get value() {\n    return this._value;\n  }\n  set value(newVal: string) {\n    if (newVal !== this._value) {\n      this._value = newVal || 'radial-gradient(transparent, #000000)';\n      this.radialGradient = parseRadialGradient(this.value);\n      this.cdr.markForCheck();\n    }\n  }\n  private _value = '';\n\n  @Output() valueChange = new EventEmitter<string>();\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  radialGradient: RadialGradientResult = {\n    repeating: false,\n    shape: 'ellipse',\n    size: [{ type: 'keyword', value: 'farthest-corner' }],\n    position: {\n      x: { type: 'keyword', value: 'center' },\n      y: { type: 'keyword', value: 'center' },\n    },\n    stops: [{ color: 'transparent' }, { color: '#000000' }],\n  };\n\n  sizeKeywords = ['farthest-corner', 'farthest-side', 'closest-corner', 'closest-side'];\n\n  lengthUnits = lengthUnits;\n\n  posXOptions = positionXKeywords;\n\n  posYOptions = positionYKeywords;\n\n  colorSpaceOptgroups = [\n    { label: 'Rectangular', options: rectangularColorSpaces },\n    { label: 'Polar', options: polarColorSpaces },\n  ];\n\n  hueInterpolationMethodOptions = hueInterpolationMethods;\n\n  get isPolarColorSpace() {\n    return polarColorSpaces.includes(this.radialGradient.color?.space || '');\n  }\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    this.value = value;\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onGradientChange() {\n    this._value = stringifyRadialGradient(this.radialGradient);\n    this.valueChange.emit(this._value);\n    this.onChange(this._value);\n  }\n\n  reverseStops() {\n    this.radialGradient.stops = reverseColorStops(this.radialGradient.stops);\n    this.onGradientChange();\n  }\n\n  onColorSpaceChange() {\n    if (!this.isPolarColorSpace && this.radialGradient.color) {\n      this.radialGradient.color.method = undefined;\n    }\n    this.onGradientChange();\n  }\n\n  correctSizeByShape() {\n    if (this.radialGradient.shape === 'ellipse') {\n      this.radialGradient.size = [\n        { type: 'length', value: '50%' },\n        { type: 'length', value: '50%' },\n      ];\n    } else {\n      this.radialGradient.size = [{ type: 'length', value: '50px' }];\n    }\n  }\n\n  switchShape() {\n    const hasLengthSize = this.radialGradient.size.some(size => size.type === 'length');\n    if (hasLengthSize) {\n      this.correctSizeByShape();\n    }\n    this.onGradientChange();\n  }\n\n  switchSizeType() {\n    const hasKeywordSize = this.radialGradient.size.some(size => size.type === 'keyword');\n    if (hasKeywordSize) {\n      this.correctSizeByShape();\n    } else {\n      this.radialGradient.size = [{ type: 'keyword', value: 'farthest-corner' }];\n    }\n    this.onGradientChange();\n  }\n\n  switchPositionType() {\n    const hasKeywordPosition =\n      this.radialGradient.position.x.type === 'keyword' ||\n      this.radialGradient.position.y.type === 'keyword';\n    if (hasKeywordPosition) {\n      this.radialGradient.position = {\n        x: { type: 'length', value: '50%' },\n        y: { type: 'length', value: '50%' },\n      };\n    } else {\n      this.radialGradient.position = {\n        x: { type: 'keyword', value: 'center' },\n        y: { type: 'keyword', value: 'center' },\n      };\n    }\n    this.onGradientChange();\n  }\n}\n","<gradient-form-group label=\"Shape\">\n  <gradient-radio-group [(ngModel)]=\"radialGradient.shape\" (change)=\"switchShape()\">\n    <gradient-radio-button value=\"ellipse\">Ellipse</gradient-radio-button>\n    <gradient-radio-button value=\"circle\">Circle</gradient-radio-button>\n  </gradient-radio-group>\n</gradient-form-group>\n\n<gradient-form-group label=\"Size\">\n  @for (size of radialGradient.size; track $index) {\n    @if (size.type === 'keyword') {\n      <gradient-input-field>\n        <select [(ngModel)]=\"size.value\" (change)=\"onGradientChange()\">\n          @for (sk of sizeKeywords; track $index) {\n            <option [value]=\"sk\">{{ sk }}</option>\n          }\n        </select>\n      </gradient-input-field>\n    } @else {\n      <gradient-unit-input\n        [units]=\"lengthUnits\"\n        [(ngModel)]=\"size.value\"\n        (change)=\"onGradientChange()\"\n      />\n    }\n  }\n\n  <gradient-icon-button>\n    <button\n      type=\"button\"\n      (click)=\"switchSizeType()\"\n      title=\"Switch size type\"\n      aria-label=\"Switch size type\"\n    >\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M18.5 10c-.3 0-.5.2-.5.5V16c0 .6-.4 1-1 1H6.8l1.6-1.6c.2-.2.2-.5 0-.7s-.5-.2-.7 0l-2.5 2.5c-.2.2-.2.5 0 .7l2.5 2.5c.2.2.5.2.7 0s.2-.5 0-.7L6.8 18H17c1.1 0 2-.9 2-2v-5.5c0-.3-.2-.5-.5-.5m-13 4c.3 0 .5-.2.5-.5V8c0-.6.4-1 1-1h10.2l-1.6 1.6c-.2.2-.2.5 0 .7s.5.2.7 0l2.5-2.5c.2-.2.2-.5 0-.7l-2.5-2.5c-.2-.2-.5-.2-.7 0s-.2.5 0 .7L17.2 6H7c-1.1 0-2 .9-2 2v5.5c0 .3.2.5.5.5\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n<gradient-form-group label=\"Position\">\n  @if (radialGradient.position.x.type === 'keyword') {\n    <gradient-input-field>\n      <select [(ngModel)]=\"radialGradient.position.x.value\" (change)=\"onGradientChange()\">\n        @for (posX of posXOptions; track $index) {\n          <option [value]=\"posX\">{{ posX }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  } @else {\n    <gradient-unit-input\n      [units]=\"lengthUnits\"\n      [(ngModel)]=\"radialGradient.position.x.value\"\n      (change)=\"onGradientChange()\"\n    />\n  }\n  @if (radialGradient.position.y.type === 'keyword') {\n    <gradient-input-field>\n      <select [(ngModel)]=\"radialGradient.position.y.value\" (change)=\"onGradientChange()\">\n        @for (posY of posYOptions; track $index) {\n          <option [value]=\"posY\">{{ posY }}</option>\n        }\n      </select>\n    </gradient-input-field>\n  } @else {\n    <gradient-unit-input\n      [units]=\"lengthUnits\"\n      [(ngModel)]=\"radialGradient.position.y.value\"\n      (change)=\"onGradientChange()\"\n    />\n  }\n\n  <gradient-icon-button>\n    <button\n      type=\"button\"\n      (click)=\"switchPositionType()\"\n      title=\"Switch position type\"\n      aria-label=\"Switch position type\"\n    >\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M18.5 10c-.3 0-.5.2-.5.5V16c0 .6-.4 1-1 1H6.8l1.6-1.6c.2-.2.2-.5 0-.7s-.5-.2-.7 0l-2.5 2.5c-.2.2-.2.5 0 .7l2.5 2.5c.2.2.5.2.7 0s.2-.5 0-.7L6.8 18H17c1.1 0 2-.9 2-2v-5.5c0-.3-.2-.5-.5-.5m-13 4c.3 0 .5-.2.5-.5V8c0-.6.4-1 1-1h10.2l-1.6 1.6c-.2.2-.2.5 0 .7s.5.2.7 0l2.5-2.5c.2-.2.2-.5 0-.7l-2.5-2.5c-.2-.2-.5-.2-.7 0s-.2.5 0 .7L17.2 6H7c-1.1 0-2 .9-2 2v5.5c0 .3.2.5.5.5\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n@if (radialGradient.color) {\n  <gradient-form-group label=\"Color interpolation\">\n    <gradient-input-field>\n      <select [(ngModel)]=\"radialGradient.color.space\" (change)=\"onColorSpaceChange()\">\n        @for (colorSpaceGroup of colorSpaceOptgroups; track $index) {\n          <optgroup [label]=\"colorSpaceGroup.label\">\n            @for (colorSpace of colorSpaceGroup.options; track $index) {\n              <option [value]=\"colorSpace\">{{ colorSpace }}</option>\n            }\n          </optgroup>\n        }\n      </select>\n    </gradient-input-field>\n    @if (isPolarColorSpace) {\n      <gradient-input-field>\n        <select [(ngModel)]=\"radialGradient.color.method\" (change)=\"onGradientChange()\">\n          @for (hueInterp of hueInterpolationMethodOptions; track $index) {\n            <option [value]=\"hueInterp\">{{ hueInterp }}</option>\n          }\n        </select>\n      </gradient-input-field>\n    }\n  </gradient-form-group>\n}\n\n<gradient-form-group>\n  <label gradientCheckbox>\n    <input type=\"checkbox\" [(ngModel)]=\"radialGradient.repeating\" (change)=\"onGradientChange()\" />\n    <span>Repeat</span>\n  </label>\n\n  <gradient-icon-button>\n    <button type=\"button\" (click)=\"reverseStops()\" title=\"Reverse stops\" aria-label=\"Reverse stops\">\n      <svg viewBox=\"0 0 24 24\">\n        <path\n          fill=\"currentColor\"\n          d=\"M8.354 6.354a.5.5 0 1 0-.708-.708l-2.5 2.5a.5.5 0 0 0 0 .708l2.5 2.5a.5.5 0 0 0 .708-.708L6.707 9H18.5a.5.5 0 0 0 0-1H6.707zm7.292 7a.5.5 0 0 1 .708-.708l2.5 2.5a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708-.708L17.293 16H5.5a.5.5 0 0 1 0-1h11.793z\"\n        />\n      </svg>\n    </button>\n  </gradient-icon-button>\n</gradient-form-group>\n\n<gradient-stops [ngModel]=\"radialGradient.stops\" (ngModelChange)=\"onGradientChange()\" />\n","import { GradientType, parseGradient, stringifyGradient } from '@acrodata/gradient-parser';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ConicGradientPicker } from './conic-gradient-picker';\nimport { GradientFormGroup, GradientRadioButton, GradientRadioGroup } from './form-controls';\nimport { LinearGradientPicker } from './linear-gradient-picker';\nimport { RadialGradientPicker } from './radial-gradient-picker';\n\n@Component({\n  selector: 'gradient-picker',\n  imports: [\n    FormsModule,\n    LinearGradientPicker,\n    RadialGradientPicker,\n    ConicGradientPicker,\n    GradientFormGroup,\n    GradientRadioGroup,\n    GradientRadioButton,\n  ],\n  templateUrl: './gradient-picker.html',\n  styleUrl: './gradient-picker.scss',\n  host: {\n    class: 'gradient-picker',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GradientPicker),\n      multi: true,\n    },\n  ],\n})\nexport class GradientPicker implements ControlValueAccessor {\n  private cdr = inject(ChangeDetectorRef);\n\n  types = [\n    { label: 'Linear', value: 'linear' },\n    { label: 'Radial', value: 'radial' },\n    { label: 'Conic', value: 'conic' },\n  ];\n\n  type: GradientType = 'linear';\n\n  gradient = {\n    linear: 'linear-gradient(transparent, #000000)',\n    radial: 'radial-gradient(transparent, #000000)',\n    conic: 'conic-gradient(transparent, #000000)',\n  };\n\n  @Input()\n  get value() {\n    return this._value;\n  }\n  set value(newVal: string) {\n    if (newVal !== this._value) {\n      if (!newVal) {\n        this.type = 'linear';\n      } else if (newVal.includes('linear')) {\n        this.type = 'linear';\n      } else if (newVal.includes('radial')) {\n        this.type = 'radial';\n      } else if (newVal.includes('conic')) {\n        this.type = 'conic';\n      }\n      this._value = this.gradient[this.type] = newVal || 'linear-gradient(transparent, #000000)';\n      this.cdr.markForCheck();\n    }\n  }\n  private _value = this.gradient[this.type];\n\n  @Output() valueChange = new EventEmitter<string>();\n\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  private onChange: (value: string) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(value: any): void {\n    this.value = value;\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this.cdr.markForCheck();\n  }\n\n  onValueChange() {\n    this._value = this.gradient[this.type];\n    this.valueChange.emit(this._value);\n    this.onChange(this._value);\n  }\n\n  onTypeChange() {\n    // Preserve the color stops when switching types\n    const { repeating, color, stops } = parseGradient(this.value)!;\n\n    const result = parseGradient(this.gradient[this.type])!;\n    result.repeating = repeating;\n    result.color = color;\n    result.stops = stops;\n    this.gradient[this.type] = stringifyGradient(result);\n\n    this.onValueChange();\n  }\n}\n","<gradient-form-group label=\"Type\">\n  <gradient-radio-group [(ngModel)]=\"type\" (ngModelChange)=\"onTypeChange()\">\n    @for (t of types; track $index) {\n      <gradient-radio-button [value]=\"t.value\">{{ t.label }}</gradient-radio-button>\n    }\n  </gradient-radio-group>\n</gradient-form-group>\n\n@if (type === 'linear') {\n  <linear-gradient-picker [(ngModel)]=\"gradient.linear\" (ngModelChange)=\"onValueChange()\" />\n} @else if (type === 'radial') {\n  <radial-gradient-picker [(ngModel)]=\"gradient.radial\" (ngModelChange)=\"onValueChange()\" />\n} @else if (type === 'conic') {\n  <conic-gradient-picker [(ngModel)]=\"gradient.conic\" (ngModelChange)=\"onValueChange()\" />\n}\n","/*\n * Public API Surface of gradient-picker\n */\n\nexport * from './lib/gradient-picker';\nexport * from './lib/gradient-stops';\nexport * from './lib/gradient-colorpicker';\nexport * from './lib/linear-gradient-picker';\nexport * from './lib/radial-gradient-picker';\nexport * from './lib/conic-gradient-picker';\nexport * from './lib/form-controls';\nexport * from './lib/utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}