{"version":3,"file":"ngxpert-input-otp.mjs","sources":["../../../../projects/ngxpert/input-otp/src/lib/control-value-signal.ts","../../../../projects/ngxpert/input-otp/src/lib/components/input-otp/input-otp.component.ts","../../../../projects/ngxpert/input-otp/src/lib/components/input-otp/input-otp.component.html","../../../../projects/ngxpert/input-otp/src/lib/regexp.ts","../../../../projects/ngxpert/input-otp/src/public-api.ts","../../../../projects/ngxpert/input-otp/src/ngxpert-input-otp.ts"],"sourcesContent":["import { computed, type Injector, type Signal, untracked } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl } from '@angular/forms';\nimport { startWith } from 'rxjs';\n\n/**\n * Returns a signal that contains the value of a control (or a form).\n * @param control\n * @param injector\n */\nexport function getControlValueSignal<T>(\n  control: FormControl<T>,\n  injector: Injector,\n): Signal<T | undefined> {\n  const valueChanges = computed(() => {\n    return untracked(() =>\n      toSignal(control.valueChanges.pipe(startWith(control.value)), {\n        injector,\n        initialValue: undefined,\n      }),\n    );\n  });\n\n  return computed(() => valueChanges()());\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  linkedSignal,\n  OnDestroy,\n  output,\n  Renderer2,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormControl,\n  FormsModule,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ReactiveFormsModule,\n  ValidationErrors,\n  Validator,\n} from '@angular/forms';\nimport { InputOTPInputsOutputs, OTPSlot } from '../../types';\nimport { DOCUMENT } from '@angular/common';\nimport { getControlValueSignal } from '../../control-value-signal';\n\n// TODO: Fix password manager badge tracking\n// const PWM_BADGE_MARGIN_RIGHT = 18;\nconst PWM_BADGE_SPACE_WIDTH_PX = 40;\nconst PWM_BADGE_SPACE_WIDTH = `${PWM_BADGE_SPACE_WIDTH_PX}px`;\n\n// TODO: Fix password manager badge tracking\n// const PASSWORD_MANAGERS_SELECTORS = [\n//   '[data-lastpass-icon-root]', // LastPass\n//   'com-1password-button', // 1Password\n//   '[data-dashlanecreated]', // Dashlane\n//   '[style$=\"2147483647 !important;\"]', // Bitwarden\n// ].join(',');\n\n@Component({\n  selector: 'input-otp',\n  imports: [FormsModule, ReactiveFormsModule],\n  templateUrl: './input-otp.component.html',\n  exportAs: 'inputOtp',\n  styleUrls: ['./input-otp.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: InputOTPComponent,\n      multi: true,\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: InputOTPComponent,\n      multi: true,\n    },\n  ],\n  host: {\n    '[id]': 'id',\n  },\n})\nexport class InputOTPComponent\n  implements\n    AfterViewInit,\n    OnDestroy,\n    ControlValueAccessor,\n    Validator,\n    InputOTPInputsOutputs\n{\n  static nextId = 0;\n  readonly idNextId = `input-otp-${InputOTPComponent.nextId++}`;\n  id = input<string | undefined>(this.idNextId);\n  name = input<string | undefined>();\n  containerRef = viewChild<ElementRef<HTMLDivElement>>('containerRef');\n  inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n\n  maxLength = input.required<number>();\n  textAlign = input<'left' | 'center' | 'right'>('left');\n  pattern = input<string | RegExp>();\n  placeholder = input<string>();\n  inputMode = input<'numeric' | 'text'>('numeric');\n  disabled = input<boolean>(false);\n  autoComplete = input<string>();\n  pushPasswordManagerStrategy = input<'increase-width' | 'none'>(\n    'increase-width',\n  );\n  containerClass = input<string>();\n  complete = output<string>();\n\n  mirrorSelectionStart = signal<number | null>(null);\n  mirrorSelectionEnd = signal<number | null>(null);\n  isFocused = signal(false);\n  isHovering = signal(false);\n  hasPWMBadge = signal(false);\n  hasPWMBadgeSpace = signal(false);\n  done = signal(false);\n  formControl = new FormControl('');\n  value = getControlValueSignal(this.formControl, inject(Injector));\n  slots = computed<OTPSlot[]>(() => {\n    const slots: OTPSlot[] = [];\n    for (let i = 0; i < this.maxLength(); i++) {\n      const mirrorSelectionStart = this.mirrorSelectionStart();\n      const mirrorSelectionEnd = this.mirrorSelectionEnd();\n      const isActive =\n        this.isFocused() &&\n        mirrorSelectionStart !== null &&\n        mirrorSelectionEnd !== null &&\n        ((mirrorSelectionStart === mirrorSelectionEnd &&\n          i === mirrorSelectionStart) ||\n          (i >= mirrorSelectionStart && i < mirrorSelectionEnd));\n\n      const value = this.value();\n      const char = value && value[i] !== undefined ? value[i] : null;\n      const placeholderChar =\n        value && value[0] !== undefined\n          ? null\n          : (this.placeholder()?.[i] ?? null);\n      slots.push({\n        char,\n        placeholderChar,\n        isActive,\n        hasFakeCaret: isActive && char === null,\n      });\n    }\n    return slots;\n  });\n\n  private resizeObserver?: ResizeObserver;\n  private previousValue: string | null | undefined;\n  private document = inject(DOCUMENT);\n  private renderer2 = inject(Renderer2);\n  private isIOS = false;\n  private inputMetadataRef = linkedSignal<{\n    prev: [\n      number | null,\n      number | null,\n      'none' | 'forward' | 'backward' | null,\n    ];\n  }>(() => ({\n    prev: [\n      this.inputRef()?.nativeElement?.selectionStart ?? null,\n      this.inputRef()?.nativeElement?.selectionEnd ?? null,\n      this.inputRef()?.nativeElement?.selectionDirection ?? 'none',\n    ],\n  }));\n  private onDocumentSelectionChange?: () => void;\n\n  constructor() {\n    this.formControl.addValidators([this.validate.bind(this)]);\n    effect(() => {\n      const newValue = this.value();\n      if (\n        this.previousValue !== null &&\n        this.previousValue !== undefined &&\n        this.previousValue.length < this.maxLength() &&\n        this.formControl.valid\n      ) {\n        // formControl.valid is true if the value is valid, so we can safely emit the value\n        this.valueOrFocusedChanged();\n\n        if (\n          newValue !== null &&\n          newValue !== undefined &&\n          newValue.length === this.maxLength()\n        ) {\n          this.complete.emit(newValue);\n        }\n      }\n      this.previousValue = newValue;\n    });\n\n    effect(() => {\n      const disabled = this.disabled();\n      if (disabled) {\n        this.formControl.disable();\n      } else {\n        this.formControl.enable();\n      }\n    });\n  }\n\n  writeValue(value: string): void {\n    this.formControl.setValue(value);\n  }\n  registerOnChange(fn: (value: string | null) => void): void {\n    this.formControl.valueChanges.subscribe(fn);\n  }\n  registerOnTouched(fn: () => void): void {\n    this.formControl.valueChanges.subscribe(fn);\n  }\n  setDisabledState(isDisabled: boolean): void {\n    if (isDisabled) {\n      this.formControl.disable();\n    } else {\n      this.formControl.enable();\n    }\n  }\n  validate(control: AbstractControl<string | null>): ValidationErrors | null {\n    const value = control.value;\n    if (value?.length !== this.maxLength()) {\n      return { length: true };\n    }\n    const pattern = this.pattern();\n    const regexp = typeof pattern === 'string' ? new RegExp(pattern) : pattern;\n    if (value?.length > 0 && !regexp?.test(value)) {\n      return { pattern: true };\n    }\n    return null;\n  }\n\n  private valueOrFocusedChanged() {\n    // Forcefully remove :autofill state\n    this.inputRef()?.nativeElement?.dispatchEvent(new Event('input'));\n\n    // Update the selection state\n    const s = this.inputRef()?.nativeElement?.selectionStart;\n    const e = this.inputRef()?.nativeElement?.selectionEnd;\n    const dir = this.inputRef()?.nativeElement?.selectionDirection;\n    if (\n      s !== null &&\n      s !== undefined &&\n      e !== null &&\n      e !== undefined &&\n      dir !== null &&\n      dir !== undefined\n    ) {\n      this.mirrorSelectionStart.set(s);\n      this.mirrorSelectionEnd.set(e);\n      this.inputMetadataRef.set({ prev: [s, e, dir] });\n    }\n  }\n\n  rootStyle = computed<Record<string, string>>(() => ({\n    position: 'relative',\n    cursor: this.disabled() ? 'default' : 'text',\n    userSelect: 'none',\n    WebkitUserSelect: 'none',\n    pointerEvents: 'none',\n  }));\n\n  inputStyle = computed<Record<string, string | undefined>>(() => {\n    const willPushPWMBadge =\n      this.pushPasswordManagerStrategy() !== 'none' &&\n      this.hasPWMBadge() &&\n      this.hasPWMBadgeSpace();\n\n    return {\n      position: 'absolute',\n      inset: '0',\n      width: willPushPWMBadge\n        ? `calc(100% + ${PWM_BADGE_SPACE_WIDTH})`\n        : '100%',\n      clipPath: willPushPWMBadge\n        ? `inset(0 ${PWM_BADGE_SPACE_WIDTH} 0 0)`\n        : undefined,\n      height: '100%',\n      display: 'flex',\n      // textAlign: this.textAlign(),\n      opacity: '1',\n      color: 'transparent',\n      pointerEvents: 'all',\n      background: 'transparent',\n      caretColor: 'transparent',\n      border: '0 solid transparent',\n      outline: '0 solid transparent',\n      boxShadow: 'none',\n      lineHeight: '1',\n      letterSpacing: '-0.5em',\n      fontSize: 'var(--root-height)',\n      fontFamily: 'monospace',\n      fontVariantNumeric: 'tabular-nums',\n    };\n  });\n\n  ngAfterViewInit() {\n    this.setupResizeObserver();\n    const onDocumentSelectionChange = () => {\n      const input = this.inputRef()?.nativeElement;\n      if (this.document.activeElement !== input) {\n        this.mirrorSelectionStart.set(null);\n        this.mirrorSelectionEnd.set(null);\n        return;\n      }\n\n      // Aliases\n      const _s = input.selectionStart;\n      const _e = input.selectionEnd;\n      const _dir = input.selectionDirection;\n      const _ml = input.maxLength;\n      const _val = input.value;\n      const _prev = this.inputMetadataRef().prev;\n\n      // Algorithm\n      let start = -1;\n      let end = -1;\n      let direction: 'forward' | 'backward' | 'none' | undefined;\n      if (_val.length !== 0 && _s !== null && _e !== null) {\n        const isSingleCaret = _s === _e;\n        const isInsertMode = _s === _val.length && _val.length < _ml;\n\n        if (isSingleCaret && !isInsertMode) {\n          const c = _s;\n          if (c === 0) {\n            start = 0;\n            end = 1;\n            direction = 'forward';\n          } else if (c === _ml) {\n            start = c - 1;\n            end = c;\n            direction = 'backward';\n          } else if (_ml > 1 && _val.length > 1) {\n            let offset = 0;\n            if (_prev[0] !== null && _prev[1] !== null) {\n              direction = c < _prev[1] ? 'backward' : 'forward';\n              const wasPreviouslyInserting =\n                _prev[0] === _prev[1] && _prev[0] < _ml;\n              if (direction === 'backward' && !wasPreviouslyInserting) {\n                offset = -1;\n              }\n            }\n\n            start = offset + c;\n            end = offset + c + 1;\n          }\n        }\n\n        if (start !== -1 && end !== -1 && start !== end) {\n          input.setSelectionRange(start, end, direction);\n        }\n      }\n\n      // Finally, update the state\n      const s = start !== -1 ? start : _s;\n      const e = end !== -1 ? end : _e;\n      const dir = direction ?? _dir;\n      this.mirrorSelectionStart.set(s);\n      this.mirrorSelectionEnd.set(e);\n      // Store the previous selection value\n      this.inputMetadataRef.set({ prev: [s, e, dir] });\n    };\n    this.document.addEventListener(\n      'selectionchange',\n      onDocumentSelectionChange,\n      {\n        capture: true,\n      },\n    );\n\n    // Set initial mirror state\n    onDocumentSelectionChange();\n    this.onDocumentSelectionChange = onDocumentSelectionChange;\n    if (this.document.activeElement === this.inputRef()?.nativeElement) {\n      this.changeFocus(true);\n    }\n    // Apply needed styles\n    if (!this.document.getElementById('input-otp-style')) {\n      const styleEl = this.document.createElement('style');\n      styleEl.id = 'input-otp-style';\n      this.document.head.appendChild(styleEl);\n\n      if (styleEl.sheet) {\n        const autofillStyles =\n          'background: transparent !important; color: transparent !important; border-color: transparent !important; opacity: 0 !important; box-shadow: none !important; -webkit-box-shadow: none !important; -webkit-text-fill-color: transparent !important;';\n\n        this.safeInsertRule(\n          styleEl.sheet,\n          '[data-input-otp]::selection { background: transparent !important; color: transparent !important; }',\n        );\n        this.safeInsertRule(\n          styleEl.sheet,\n          `[data-input-otp]:autofill { ${autofillStyles} }`,\n        );\n        this.safeInsertRule(\n          styleEl.sheet,\n          `[data-input-otp]:-webkit-autofill { ${autofillStyles} }`,\n        );\n        // iOS\n        this.safeInsertRule(\n          styleEl.sheet,\n          `@supports (-webkit-touch-callout: none) { [data-input-otp] { letter-spacing: -.6em !important; font-weight: 100 !important; font-stretch: ultra-condensed; font-optical-sizing: none !important; left: -1px !important; right: 1px !important; } }`,\n        );\n        // PWM badges\n        this.safeInsertRule(\n          styleEl.sheet,\n          `[data-input-otp] + * { pointer-events: all !important; }`,\n        );\n      }\n    }\n    // Track root height\n    const updateRootHeight = () => {\n      if (this.containerRef()?.nativeElement) {\n        this.renderer2.setStyle(\n          this.containerRef()?.nativeElement,\n          '--root-height',\n          `${this.inputRef()?.nativeElement.clientHeight}px`,\n        );\n      }\n    };\n    updateRootHeight();\n  }\n\n  private safeInsertRule(sheet: CSSStyleSheet, rule: string) {\n    try {\n      sheet.insertRule(rule);\n    } catch {\n      console.error('input-otp could not insert CSS rule:', rule);\n    }\n  }\n\n  ngOnDestroy() {\n    this.resizeObserver?.disconnect();\n    if (this.onDocumentSelectionChange) {\n      this.document.removeEventListener(\n        'selectionchange',\n        this.onDocumentSelectionChange,\n        { capture: true },\n      );\n    }\n  }\n\n  onMouseEnter() {\n    this.isHovering.set(true);\n  }\n\n  onMouseLeave() {\n    this.isHovering.set(false);\n  }\n\n  onFocus() {\n    this.changeFocus(true);\n  }\n\n  onBlur() {\n    this.changeFocus(false);\n  }\n\n  private changeFocus(value: boolean) {\n    this.isFocused.set(value);\n    this.valueOrFocusedChanged();\n  }\n\n  private setupResizeObserver() {\n    if (typeof ResizeObserver === 'undefined') return;\n    const input = this.inputRef()?.nativeElement;\n    if (!input) return;\n\n    this.resizeObserver = new ResizeObserver(() => {\n      const container = this.containerRef()?.nativeElement;\n      if (container) {\n        container.style.setProperty('--root-height', `${input.clientHeight}px`);\n      }\n    });\n\n    this.resizeObserver.observe(input);\n  }\n}\n","<div\n  #containerRef\n  [class]=\"containerClass()\"\n  data-input-otp-container\n  [style]=\"rootStyle()\"\n>\n  <ng-content></ng-content>\n  <div\n    [style]=\"{\n      position: 'absolute',\n      inset: 0,\n      pointerEvents: 'none',\n    }\"\n  >\n    <input\n      #inputRef\n      data-input-otp\n      [id]=\"id() ?? idNextId\"\n      [name]=\"name() ?? ''\"\n      [attr.data-input-otp-placeholder-shown]=\"formControl.value?.length === 0 || undefined\"\n      [attr.data-input-otp-mss]=\"mirrorSelectionStart() || undefined\"\n      [attr.data-input-otp-mse]=\"mirrorSelectionEnd() || undefined\"\n      [inputMode]=\"inputMode()\"\n      [pattern]=\"pattern() ?? ''\"\n      [ariaPlaceholder]=\"placeholder()\"\n      [style]=\"inputStyle()\"\n      [maxLength]=\"maxLength()\"\n      [formControl]=\"formControl\"\n      (mouseenter)=\"onMouseEnter()\"\n      (mouseleave)=\"onMouseLeave()\"\n      (focus)=\"onFocus()\"\n      (blur)=\"onBlur()\"\n      [autocomplete]=\"autoComplete() || 'one-time-code'\"\n    />\n  </div>\n</div>\n","export const REGEXP_ONLY_DIGITS = '^\\\\d+$';\nexport const REGEXP_ONLY_CHARS = '^[a-zA-Z]+$';\nexport const REGEXP_ONLY_DIGITS_AND_CHARS = '^[a-zA-Z0-9]+$';\n","/*\n * Public API Surface of input-otp\n */\nexport * from './lib/components/input-otp/input-otp.component';\nexport * from './lib/types';\nexport * from './lib/regexp';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}