{"version":3,"file":"touchspin-angular.mjs","sources":["../../src/touch-spin.component.ts","../../src/types.ts","../../src/public-api.ts","../../src/touchspin-angular.ts"],"sourcesContent":["/**\n * TouchSpin Angular Component (Renderer-agnostic)\n *\n * Standalone component implementing ControlValueAccessor for Angular forms.\n * Use per-renderer exports instead of this directly.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  type AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  type ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  inject,\n  type OnChanges,\n  type OnDestroy,\n  Output,\n  PLATFORM_ID,\n  type SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { TouchSpinCoreOptions, TouchSpinCorePublicAPI } from '@touchspin/core';\nimport { TouchSpin as TouchSpinCore } from '@touchspin/core';\nimport type { TouchSpinChangeMeta, TouchSpinHandle } from './types';\n\n@Component({\n  selector: 'touch-spin',\n  standalone: true,\n  template: `\n    <div [class]=\"wrapperClass\" [attr.data-testid]=\"testId\">\n      <input\n        #input\n        type=\"number\"\n        [name]=\"name\"\n        [attr.id]=\"id\"\n        [class]=\"inputClass\"\n        [disabled]=\"disabled\"\n        [readonly]=\"readOnly\"\n        [attr.data-testid]=\"inputTestId\"\n        [attr.role]=\"'spinbutton'\"\n        [attr.aria-valuenow]=\"currentValue\"\n        [attr.aria-valuemin]=\"min\"\n        [attr.aria-valuemax]=\"max\"\n        [attr.aria-label]=\"ariaLabel\"\n        [attr.aria-labelledby]=\"ariaLabelledBy\"\n        (blur)=\"onInputBlur()\"\n        (focus)=\"onInputFocus()\"\n      />\n      @if (name) {\n        <input type=\"hidden\" [name]=\"name + '_display'\" [value]=\"currentValue\" />\n      }\n    </div>\n  `,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => TouchSpinComponent),\n      multi: true,\n    },\n  ],\n})\nexport class TouchSpinComponent\n  implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy, TouchSpinHandle\n{\n  private platformId = inject(PLATFORM_ID);\n  private isBrowser = isPlatformBrowser(this.platformId);\n  private cdr = inject(ChangeDetectorRef);\n\n  @ViewChild('input', { static: true }) inputRef!: ElementRef<HTMLInputElement>;\n\n  // Core settings\n  @Input() min?: number;\n  @Input() max?: number;\n  @Input() step?: number;\n  @Input() decimals?: number;\n  @Input() prefix?: string;\n  @Input() suffix?: string;\n\n  // Controlled/default value\n  private _value: number | null = null;\n  private _defaultValue: number | null = null;\n  private hasAppliedDefault = false;\n  private pendingExternalValue: number | null = null;\n  private controlledMode: 'none' | 'forms' | 'input' = 'none';\n\n  @Input()\n  set value(value: number | null | undefined) {\n    if (value === undefined || value === null) {\n      this._value = null;\n      if (this.controlledMode === 'input') {\n        this.controlledMode = 'none';\n      }\n      return;\n    }\n\n    if (this._value === value && this.controlledMode === 'input') {\n      return;\n    }\n\n    this._value = value;\n    this.controlledMode = 'input';\n    this.hasAppliedDefault = true;\n    this.applyExternalValue(value);\n  }\n\n  get value(): number | null | undefined {\n    return this._value ?? undefined;\n  }\n\n  @Input()\n  set defaultValue(value: number | null | undefined) {\n    if (value === undefined || value === null) {\n      this._defaultValue = null;\n      return;\n    }\n\n    this._defaultValue = value;\n\n    if (this.controlledMode !== 'none') {\n      return;\n    }\n\n    if (this.hasAppliedDefault && this.internalValue === value) {\n      return;\n    }\n\n    this.hasAppliedDefault = true;\n    this.applyExternalValue(value);\n  }\n\n  get defaultValue(): number | null | undefined {\n    return this._defaultValue ?? undefined;\n  }\n\n  // State\n  @Input() disabled = false;\n  @Input() readOnly = false;\n\n  // Form\n  @Input() name?: string;\n  @Input() id?: string;\n\n  // Styling\n  @Input() class?: string;\n  @Input() inputClass?: string;\n\n  // Test ID\n  @Input('data-testid') testId?: string;\n\n  // Advanced\n  @Input() coreOptions?: Partial<TouchSpinCoreOptions>;\n\n  // ARIA\n  @Input() ariaLabel?: string;\n  @Input() ariaLabelledBy?: string;\n\n  // Renderer (injected by per-renderer wrappers)\n  @Input() renderer: any;\n\n  // Events\n  @Output() valueChange = new EventEmitter<number>();\n  @Output() change = new EventEmitter<{ value: number; meta: TouchSpinChangeMeta }>();\n  @Output() blurred = new EventEmitter<void>();\n  @Output() focused = new EventEmitter<void>();\n  @Output() onMin = new EventEmitter<void>();\n  @Output() onMax = new EventEmitter<void>();\n  @Output() onStartSpin = new EventEmitter<void>();\n  @Output() onStopSpin = new EventEmitter<void>();\n  @Output() onStartUpSpin = new EventEmitter<void>();\n  @Output() onStartDownSpin = new EventEmitter<void>();\n  @Output() onStopUpSpin = new EventEmitter<void>();\n  @Output() onStopDownSpin = new EventEmitter<void>();\n  @Output() onSpeedChange = new EventEmitter<void>();\n\n  // Internal state\n  private instance: TouchSpinCorePublicAPI | null = null;\n  private internalValue = 0;\n  private changeListener: (() => void) | null = null;\n  private touchSpinEventListeners: Array<{ event: string; handler: () => void; element: HTMLElement }> = [];\n\n  // ControlValueAccessor callbacks\n  private onChange: (value: number) => void = () => {};\n  onTouched: () => void = () => {};\n\n  get currentValue(): number {\n    return this.instance?.getValue() ?? this.internalValue;\n  }\n\n  get wrapperClass(): string {\n    return this.class || '';\n  }\n\n  get inputTestId(): string | undefined {\n    return this.testId ? `${this.testId}-input` : undefined;\n  }\n\n  ngAfterViewInit(): void {\n    if (!this.isBrowser) return;\n\n    this.initializeTouchSpin();\n    // Trigger change detection to update ARIA attributes after initialization\n    this.cdr.detectChanges();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.instance) {\n      // Update settings when inputs change (but not on first change)\n      const settingsChanges: Record<string, any> = {};\n      let hasSettingsChanges = false;\n\n      if (changes['min'] && !changes['min'].firstChange && this.min !== undefined) {\n        settingsChanges.min = this.min;\n        hasSettingsChanges = true;\n      }\n      if (changes['max'] && !changes['max'].firstChange && this.max !== undefined) {\n        settingsChanges.max = this.max;\n        hasSettingsChanges = true;\n      }\n      if (changes['step'] && !changes['step'].firstChange && this.step !== undefined) {\n        settingsChanges.step = this.step;\n        hasSettingsChanges = true;\n      }\n      if (changes['decimals'] && !changes['decimals'].firstChange && this.decimals !== undefined) {\n        settingsChanges.decimals = this.decimals;\n        hasSettingsChanges = true;\n      }\n      if (changes['prefix'] && !changes['prefix'].firstChange && this.prefix !== undefined) {\n        settingsChanges.prefix = this.prefix;\n        hasSettingsChanges = true;\n      }\n      if (changes['suffix'] && !changes['suffix'].firstChange && this.suffix !== undefined) {\n        settingsChanges.postfix = this.suffix;\n        hasSettingsChanges = true;\n      }\n\n      if (hasSettingsChanges) {\n        this.instance.updateSettings(settingsChanges);\n      }\n    }\n\n    // Update disabled/readonly state\n    if (changes['disabled'] && !changes['disabled'].firstChange) {\n      this.inputRef.nativeElement.disabled = this.disabled;\n    }\n    if (changes['readOnly'] && !changes['readOnly'].firstChange) {\n      this.inputRef.nativeElement.readOnly = this.readOnly;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.cleanup();\n  }\n\n  // ControlValueAccessor implementation\n  writeValue(value: number | null | undefined): void {\n    const numValue = value ?? 0;\n    this.controlledMode = 'forms';\n    this.hasAppliedDefault = true;\n    this.applyExternalValue(numValue);\n  }\n\n  registerOnChange(fn: (value: number) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    if (this.inputRef?.nativeElement) {\n      this.inputRef.nativeElement.disabled = isDisabled;\n    }\n  }\n\n  // Imperative methods (TouchSpinHandle interface)\n  focus(): void {\n    this.inputRef?.nativeElement.focus();\n  }\n\n  blur(): void {\n    this.inputRef?.nativeElement.blur();\n  }\n\n  increment(): void {\n    this.instance?.upOnce();\n  }\n\n  decrement(): void {\n    this.instance?.downOnce();\n  }\n\n  getValue(): number {\n    return this.currentValue;\n  }\n\n  setValue(value: number): void {\n    this.instance?.setValue(value);\n  }\n\n  startUpSpin(): void {\n    this.instance?.startUpSpin();\n  }\n\n  startDownSpin(): void {\n    this.instance?.startDownSpin();\n  }\n\n  stopSpin(): void {\n    this.instance?.stopSpin();\n  }\n\n  updateSettings(opts: Partial<TouchSpinCoreOptions>): void {\n    this.instance?.updateSettings(opts);\n  }\n\n  getCore(): TouchSpinCorePublicAPI | null {\n    return this.instance;\n  }\n\n\n\n  // Internal helpers\n  private applyExternalValue(rawValue: number): void {\n    const normalized = Number(rawValue);\n    if (Number.isNaN(normalized)) {\n      return;\n    }\n\n    this.internalValue = normalized;\n\n    if (this.instance) {\n      const currentValue = this.instance.getValue();\n      if (currentValue === normalized) {\n        this.pendingExternalValue = null;\n        return;\n      }\n\n      this.pendingExternalValue = normalized;\n      this.instance.setValue(normalized);\n\n      queueMicrotask(() => {\n        if (this.pendingExternalValue === normalized) {\n          this.pendingExternalValue = null;\n        }\n      });\n\n      return;\n    }\n\n    if (this.inputRef?.nativeElement) {\n      const input = this.inputRef.nativeElement;\n      if (Number(input.value) === normalized) {\n        this.pendingExternalValue = null;\n        return;\n      }\n\n      this.pendingExternalValue = normalized;\n      input.value = String(normalized);\n\n      queueMicrotask(() => {\n        if (this.pendingExternalValue === normalized) {\n          this.pendingExternalValue = null;\n        }\n      });\n\n      return;\n    }\n\n    this.pendingExternalValue = null;\n  }\n\n  private initializeTouchSpin(): void {\n    const input = this.inputRef.nativeElement;\n\n    // Set initial value\n    input.value = String(this.internalValue);\n\n    // Build init options\n    const initOptions: Record<string, any> = {\n      renderer: this.renderer,\n    };\n\n    if (this.min !== undefined) initOptions.min = this.min;\n    if (this.max !== undefined) initOptions.max = this.max;\n    if (this.step !== undefined) initOptions.step = this.step;\n    if (this.decimals !== undefined) initOptions.decimals = this.decimals;\n    if (this.prefix !== undefined) initOptions.prefix = this.prefix;\n    if (this.suffix !== undefined) initOptions.postfix = this.suffix;\n    if (this.coreOptions) Object.assign(initOptions, this.coreOptions);\n\n    // Initialize TouchSpin\n    this.instance = TouchSpinCore(input, initOptions);\n\n    // Subscribe to changes\n    this.changeListener = () => {\n      const numValue = Number(input.value);\n\n      this.internalValue = numValue;\n\n      if (this.pendingExternalValue !== null && numValue === this.pendingExternalValue) {\n        this.pendingExternalValue = null;\n        return;\n      }\n\n      this.pendingExternalValue = null;\n\n      // Notify Angular forms\n      this.onChange(numValue);\n\n      // Emit value change event\n      this.valueChange.emit(numValue);\n\n      // Emit detailed change event with metadata\n      this.change.emit({\n        value: numValue,\n        meta: {\n          source: 'user',\n          action: 'input',\n        },\n      });\n    };\n\n    input.addEventListener('change', this.changeListener);\n\n    // TouchSpin event listeners\n    const touchSpinEvents = [\n      { event: 'touchspin.on.min', handler: () => this.onMin.emit() },\n      { event: 'touchspin.on.max', handler: () => this.onMax.emit() },\n      { event: 'touchspin.on.startspin', handler: () => this.onStartSpin.emit() },\n      { event: 'touchspin.on.stopspin', handler: () => this.onStopSpin.emit() },\n      { event: 'touchspin.on.startupspin', handler: () => this.onStartUpSpin.emit() },\n      { event: 'touchspin.on.startdownspin', handler: () => this.onStartDownSpin.emit() },\n      { event: 'touchspin.on.stopupspin', handler: () => this.onStopUpSpin.emit() },\n      { event: 'touchspin.on.stopdownspin', handler: () => this.onStopDownSpin.emit() },\n      { event: 'touchspin.on.speedchange', handler: () => this.onSpeedChange.emit() },\n    ];\n\n    touchSpinEvents.forEach(({ event, handler }) => {\n      input.addEventListener(event, handler);\n    });\n\n    // Store cleanup functions\n    this.touchSpinEventListeners = touchSpinEvents.map(({ event, handler }) => ({\n      event,\n      handler,\n      element: input\n    }));\n  }\n\n  private cleanup(): void {\n    if (this.changeListener && this.inputRef?.nativeElement) {\n      this.inputRef.nativeElement.removeEventListener('change', this.changeListener);\n      this.changeListener = null;\n    }\n\n    // Clean up TouchSpin event listeners\n    this.touchSpinEventListeners.forEach(({ event, handler, element }) => {\n      element.removeEventListener(event, handler);\n    });\n    this.touchSpinEventListeners = [];\n\n    if (this.instance) {\n      this.instance.destroy();\n      this.instance = null;\n    }\n  }\n\n  onInputFocus(): void {\n    this.focused.emit();\n  }\n\n  onInputBlur(): void {\n    this.onTouched();\n    this.blurred.emit();\n  }\n}\n","/**\n * TouchSpin Angular - Type Definitions\n */\n\nimport type { TouchSpinCoreOptions, TouchSpinCorePublicAPI } from '@touchspin/core';\n\n/**\n * Change metadata for TouchSpin events\n */\nexport interface TouchSpinChangeMeta {\n  source: 'user' | 'programmatic';\n  action: 'input' | 'increment' | 'decrement' | 'setValue';\n}\n\n/**\n * Inputs accepted by TouchSpin component\n */\nexport interface TouchSpinInputs {\n  /** Current value (controlled mode – pair with valueChange) */\n  value?: number | null;\n\n  /** Initial value (uncontrolled mode, applied once until overridden) */\n  defaultValue?: number | null;\n\n  /** Minimum value */\n  min?: number;\n\n  /** Maximum value */\n  max?: number;\n\n  /** Step increment/decrement amount */\n  step?: number;\n\n  /** Number of decimal places */\n  decimals?: number;\n\n  /** Prefix text/symbol */\n  prefix?: string;\n\n  /** Suffix text/symbol */\n  suffix?: string;\n\n  /** Disabled state */\n  disabled?: boolean;\n\n  /** Readonly state */\n  readOnly?: boolean;\n\n  /** Form control name */\n  name?: string;\n\n  /** Element ID */\n  id?: string;\n\n  /** CSS class for wrapper */\n  class?: string;\n\n  /** CSS class for input element */\n  inputClass?: string;\n\n  /** ARIA label for accessibility */\n  ariaLabel?: string;\n\n  /** ARIA labelledby for accessibility */\n  ariaLabelledBy?: string;\n\n  /** Additional core options */\n  coreOptions?: Partial<TouchSpinCoreOptions>;\n}\n\n/**\n* Outputs (events) emitted by TouchSpin component\n*/\nexport interface TouchSpinOutputs {\n/** Emitted when value changes (simple number value) */\nvalueChange: number;\n\n/** Emitted when value changes (detailed with metadata) */\nchange: { value: number; meta: TouchSpinChangeMeta };\n\n/** Emitted when input loses focus */\nblurred: void;\n\n/** Emitted when input gains focus */\nfocused: void;\n\n  /** Emitted when minimum boundary is reached */\n  onMin: void;\n\n  /** Emitted when maximum boundary is reached */\n  onMax: void;\n\n  /** Emitted when spinning starts */\n  onStartSpin: void;\n\n  /** Emitted when spinning stops */\n  onStopSpin: void;\n\n  /** Emitted when upward spinning starts */\n  onStartUpSpin: void;\n\n  /** Emitted when downward spinning starts */\n  onStartDownSpin: void;\n\n  /** Emitted when upward spinning stops */\n  onStopUpSpin: void;\n\n  /** Emitted when downward spinning stops */\n  onStopDownSpin: void;\n\n  /** Emitted when spin speed increases */\n  onSpeedChange: void;\n}\n\n/**\n* Imperative handle for programmatic control\n*/\nexport interface TouchSpinHandle {\n/** Focus the input */\nfocus(): void;\n\n/** Blur the input */\nblur(): void;\n\n/** Increment value by step */\nincrement(): void;\n\n/** Decrement value by step */\ndecrement(): void;\n\n/** Get current value */\ngetValue(): number;\n\n/** Set value programmatically */\nsetValue(value: number): void;\n\n/** Start continuous upward spinning */\nstartUpSpin(): void;\n\n  /** Start continuous downward spinning */\n  startDownSpin(): void;\n\n  /** Stop any continuous spinning */\n  stopSpin(): void;\n\n  /** Update settings at runtime */\n  updateSettings(opts: Partial<TouchSpinCoreOptions>): void;\n\n  /** Get core API instance */\n  getCore(): TouchSpinCorePublicAPI | null;\n}\n\nexport const TOUCH_SPIN_INPUTS = [\n  'value',\n  'defaultValue',\n  'min',\n  'max',\n  'step',\n  'decimals',\n  'prefix',\n  'suffix',\n  'disabled',\n  'readOnly',\n  'name',\n  'id',\n  'class',\n  'inputClass',\n  'testId: data-testid',\n  'coreOptions',\n  'ariaLabel',\n  'ariaLabelledBy',\n  'renderer',\n] as const;\n\nexport const TOUCH_SPIN_OUTPUTS = [\n  'valueChange',\n  'change',\n  'blurred',\n  'focused',\n  'onMin',\n  'onMax',\n  'onStartSpin',\n  'onStopSpin',\n  'onStartUpSpin',\n  'onStartDownSpin',\n  'onStopUpSpin',\n  'onStopDownSpin',\n  'onSpeedChange'\n] as const;\n","/**\n * @touchspin/angular - Main public API\n *\n * Note: This is the root export. Users should import from per-renderer subpaths:\n * - @touchspin/angular/bootstrap3\n * - @touchspin/angular/bootstrap4\n * - @touchspin/angular/bootstrap5\n * - @touchspin/angular/tailwind\n * - @touchspin/angular/vanilla\n */\n\n// Export core component (not typically used directly)\nexport { TouchSpinComponent } from './touch-spin.component';\n\n// Export types\nexport type {\n  TouchSpinChangeMeta,\n  TouchSpinHandle,\n  TouchSpinInputs,\n  TouchSpinOutputs,\n} from './types';\n\nexport { TOUCH_SPIN_INPUTS, TOUCH_SPIN_OUTPUTS } from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TouchSpinCore"],"mappings":"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"}