{"version":3,"file":"moxa-formoxa-mx-ip-input.mjs","sources":["../../../../libs/formoxa/mx-ip-input/src/lib/components/mx-ip-input.ts","../../../../libs/formoxa/mx-ip-input/src/lib/components/mx-ipv4-input.component.ts","../../../../libs/formoxa/mx-ip-input/src/lib/components/mx-ipv6-input.component.ts","../../../../libs/formoxa/mx-ip-input/src/lib/validators/mx-ip-input.validator.ts","../../../../libs/formoxa/mx-ip-input/src/moxa-formoxa-mx-ip-input.ts"],"sourcesContent":["import { ElementRef, inject } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\n\nexport class MxIpInput {\n  _elRef = inject(ElementRef<HTMLElement>);\n  fb = inject(FormBuilder);\n\n  static nextId = 0;\n  ipBlocks: number;\n  ipMaxLength: number;\n  form: FormGroup;\n  defaultValue: string[];\n\n  get ipBlocksArray() {\n    return this.form.get('ipBlocks') as FormArray;\n  }\n\n  constructor(ipBlocks: number, ipMaxLength: number) {\n    this.ipBlocks = ipBlocks;\n    this.ipMaxLength = ipMaxLength;\n    this.defaultValue = Array(this.ipBlocks).fill('');\n    this.form = this.fb.group({\n      ipBlocks: this.fb.array(this.defaultValue)\n    });\n  }\n\n  onKeyup(event: KeyboardEvent, idxBlocks: number) {\n    const target = event.target as HTMLInputElement;\n    const specialKeys =\n      event.key === 'Backspace' || event.key === 'ArrowLeft' || event.key === 'ArrowRight' || event.key === '.';\n    if (\n      !specialKeys &&\n      target.selectionStart === this.ipMaxLength &&\n      this.ipBlocksArray.value[idxBlocks].length === this.ipMaxLength\n    ) {\n      this.focusNextInput(idxBlocks);\n    }\n  }\n\n  onKeydown(event: KeyboardEvent, idxBlocks: number) {\n    const target = event.target as HTMLInputElement;\n\n    if (event.key === 'Backspace' && target.selectionStart === 0 && !this.ipBlocksArray.value[idxBlocks].length) {\n      this.focusPrevInput(idxBlocks);\n    }\n    if (event.key === 'ArrowLeft' && target.selectionStart === 0) {\n      this.focusPrevInput(idxBlocks);\n      this.cancelEvent(event);\n    }\n    if (\n      event.key === '.' &&\n      this.ipBlocksArray.value[idxBlocks].length &&\n      target.selectionStart === this.ipBlocksArray.value[idxBlocks].length\n    ) {\n      this.focusNextInput(idxBlocks);\n    }\n    if (event.key === 'ArrowRight' && target.selectionStart === this.ipBlocksArray.value[idxBlocks].length) {\n      this.focusNextInput(idxBlocks);\n      this.cancelEvent(event);\n    }\n  }\n\n  private focusPrevInput(idx: number) {\n    if (idx > 0) {\n      const input = this._elRef.nativeElement.querySelectorAll('input')[idx - 1];\n      input.focus();\n      input.select();\n    }\n  }\n\n  private focusNextInput(idx: number) {\n    if (idx + 1 < this.ipBlocks) {\n      const input = this._elRef.nativeElement.querySelectorAll('input')[idx + 1];\n      input.select();\n    }\n  }\n\n  private cancelEvent(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n  }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { ChangeDetectionStrategy, Component, HostBinding, Input, OnDestroy, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MxNumberOnlyDirective } from '@moxa/formoxa/mx-number-only';\nimport { Subject } from 'rxjs';\nimport { MxIpInput } from './mx-ip-input';\n\nconst IP_BLOCKS = 4;\nconst IP_MAX_LENGTH = 3;\n\n@Component({\n  selector: 'mx-ipv4-input',\n  imports: [FormsModule, ReactiveFormsModule, MatInputModule, MxNumberOnlyDirective],\n  styleUrl: './mx-ipv4-input.component.scss',\n  providers: [\n    {\n      provide: MatFormFieldControl,\n      useExisting: forwardRef(() => MxIpv4InputComponent)\n    }\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div role=\"group\" [formGroup]=\"form\" class=\"mx-ip-input__container\">\n      @for (block of ipBlocksArray.controls; track block; let i = $index; let last = $last) {\n        <ng-container formArrayName=\"ipBlocks\">\n          <input\n            matInput\n            class=\"mx-ip-input__input\"\n            [formControlName]=\"i\"\n            [maxlength]=\"ipMaxLength\"\n            [readonly]=\"readonly\"\n            (input)=\"handleInput()\"\n            (keydown)=\"onKeydown($event, i)\"\n            (keyup)=\"onKeyup($event, i)\"\n            mxNumberOnly\n          />\n          @if (!last) {\n            <span class=\"mx-ip-input__spacer\" [class.mx-ip-input__spacer--disabled]=\"disabled\">{{ mergeString }}</span>\n          }\n        </ng-container>\n      }\n    </div>\n  `\n})\nexport class MxIpv4InputComponent\n  extends MxIpInput\n  implements ControlValueAccessor, MatFormFieldControl<string>, OnDestroy\n{\n  ngControl = inject(NgControl, { self: true, optional: true });\n  fm = inject(FocusMonitor);\n\n  stateChanges = new Subject<void>();\n  focused = false;\n  touched = false;\n  controlType = 'mx-ip-input';\n  describedBy = '';\n  shouldLabelFloat = true;\n  mergeString = '.';\n\n  @HostBinding() id = `mx-ip-input-${MxIpv4InputComponent.nextId++}`;\n  @HostBinding('class') class = 'mx-ip-input';\n\n  @Input()\n  get value(): string {\n    if (\n      this.ipBlocksArray.value &&\n      Array.isArray(this.ipBlocksArray.value) &&\n      this.ipBlocksArray.value.some((block) => !!block)\n    ) {\n      return this.ipBlocksArray.value.join(this.mergeString);\n    }\n    return '';\n  }\n  set value(ip: string) {\n    if (!ip) {\n      this.ipBlocksArray.setValue(this.defaultValue);\n      return;\n    }\n\n    const output = ip.split(this.mergeString);\n    if (output.length !== IP_BLOCKS) {\n      throw new Error('Invalid IPV4');\n    }\n    this.ipBlocksArray.setValue(output);\n  }\n\n  @Input()\n  get placeholder() {\n    return this._placeholder;\n  }\n  set placeholder(plh) {\n    this._placeholder = plh;\n    this.stateChanges.next();\n  }\n  private _placeholder = '';\n\n  @Input()\n  get required(): boolean {\n    return this._required;\n  }\n  set required(req: BooleanInput) {\n    this._required = coerceBooleanProperty(req);\n    this.stateChanges.next();\n  }\n  private _required = false;\n\n  @Input()\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(value: BooleanInput) {\n    this._disabled = coerceBooleanProperty(value);\n    this._disabled ? this.form.disable() : this.form.enable();\n    this.stateChanges.next();\n  }\n  private _disabled = false;\n\n  @Input()\n  get errorState(): boolean {\n    return this._errorState || (!!this.ngControl?.invalid && this.touched);\n  }\n  set errorState(value: boolean) {\n    this._errorState = value;\n  }\n  private _errorState = false;\n\n  @Input() readonly = false;\n\n  get empty(): boolean {\n    return !this.value;\n  }\n\n  private onChange!: (value: string) => void;\n  private onTouched!: () => void;\n\n  constructor() {\n    super(IP_BLOCKS, IP_MAX_LENGTH);\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n\n    this.fm.monitor(this._elRef.nativeElement, true).subscribe((origin: any) => {\n      const isFocused = !!origin;\n\n      if (isFocused) {\n        if (!this.focused) {\n          this.focused = true;\n          this.stateChanges.next();\n        }\n      } else {\n        this.touched = true;\n        this.focused = false;\n        this.stateChanges.next();\n        if (this.onTouched) {\n          this.onTouched();\n        }\n      }\n    });\n  }\n\n  ngDoCheck() {\n    if (this.ngControl && this.ngControl.control) {\n      this.touched = this.ngControl.control.touched;\n      this.stateChanges.next();\n    }\n  }\n\n  setDescribedByIds(ids: string[]): void {\n    const controlElement = this._elRef.nativeElement.querySelector('.mx-ip-input__container')!;\n    controlElement.setAttribute('aria-describedby', ids.join(' '));\n  }\n\n  onContainerClick(event: MouseEvent): void {\n    if ((event.target as Element).tagName.toLowerCase() !== 'input') {\n      this._elRef.nativeElement?.querySelector('input')?.focus();\n    }\n  }\n  ngOnDestroy(): void {\n    this.stateChanges.complete();\n  }\n  writeValue(data: string): void {\n    this.value = data;\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n    this.stateChanges.next();\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  handleInput() {\n    if (this.onChange) {\n      this.onChange(this.value);\n    }\n  }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { ChangeDetectionStrategy, Component, HostBinding, Input, OnDestroy, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { Subject } from 'rxjs';\nimport { MxIpInput } from './mx-ip-input';\n\nconst IP_BLOCKS = 8;\nconst IP_MAX_LENGTH = 4;\n@Component({\n  selector: 'mx-ipv6-input',\n  imports: [FormsModule, ReactiveFormsModule, MatInputModule],\n  providers: [\n    {\n      provide: MatFormFieldControl,\n      useExisting: forwardRef(() => MxIpv6InputComponent)\n    }\n  ],\n  template: `\n    <div role=\"group\" [formGroup]=\"form\" class=\"mx-ip-input__container\">\n      @for (block of ipBlocksArray.controls; track block; let i = $index; let last = $last) {\n        <ng-container formArrayName=\"ipBlocks\">\n          <input\n            matInput\n            class=\"mx-ip-input__input\"\n            [formControlName]=\"i\"\n            [maxlength]=\"ipMaxLength\"\n            [readonly]=\"readonly\"\n            (input)=\"handleInput()\"\n            (keydown)=\"onKeydown($event, i)\"\n            (keyup)=\"onKeyup($event, i)\"\n            oninput=\"this.value = this.value.replace(/[^0-9a-fA-F\\\\\\\\]/g, '')\"\n          />\n          @if (!last) {\n            <span class=\"mx-ip-input__spacer\" [class.mx-ip-input__spacer--disabled]=\"disabled\">{{ mergeString }}</span>\n          }\n        </ng-container>\n      }\n    </div>\n  `,\n  styleUrl: './mx-ipv4-input.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MxIpv6InputComponent\n  extends MxIpInput\n  implements ControlValueAccessor, MatFormFieldControl<string>, OnDestroy\n{\n  ngControl = inject(NgControl, { self: true, optional: true });\n  fm = inject(FocusMonitor);\n\n  stateChanges = new Subject<void>();\n  focused = false;\n  touched = false;\n  controlType = 'mx-ip-input';\n  describedBy = '';\n  shouldLabelFloat = true;\n  mergeString = ':';\n\n  @HostBinding() id = `mx-ip-input-${MxIpv6InputComponent.nextId++}`;\n  @HostBinding('class') class = 'mx-ip-input';\n\n  @Input()\n  get value(): string {\n    if (\n      this.ipBlocksArray.value &&\n      Array.isArray(this.ipBlocksArray.value) &&\n      this.ipBlocksArray.value.some((block) => !!block)\n    ) {\n      return this.ipBlocksArray.value.join(this.mergeString);\n    }\n    return '';\n  }\n  set value(ip: string) {\n    if (!ip) {\n      this.ipBlocksArray.setValue(this.defaultValue);\n      return;\n    }\n\n    const output = this.ipv6FormatConvertor.CompressedToFull(ip).split(this.mergeString);\n    if (output.length !== IP_BLOCKS) {\n      throw new Error('Invalid IPV6');\n    }\n    this.ipBlocksArray.setValue(output);\n  }\n\n  @Input()\n  get placeholder() {\n    return this._placeholder;\n  }\n  set placeholder(plh) {\n    this._placeholder = plh;\n    this.stateChanges.next();\n  }\n  private _placeholder = '';\n\n  @Input()\n  get required(): boolean {\n    return this._required;\n  }\n  set required(req: BooleanInput) {\n    this._required = coerceBooleanProperty(req);\n    this.stateChanges.next();\n  }\n  private _required = false;\n\n  @Input()\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(value: BooleanInput) {\n    this._disabled = coerceBooleanProperty(value);\n    this._disabled ? this.form.disable() : this.form.enable();\n    this.stateChanges.next();\n  }\n  private _disabled = false;\n\n  @Input()\n  get errorState(): boolean {\n    return this._errorState || (!!this.ngControl?.invalid && this.touched);\n  }\n  set errorState(value: boolean) {\n    this._errorState = value;\n  }\n  private _errorState = false;\n\n  @Input() readonly = false;\n\n  get empty(): boolean {\n    return !this.value;\n  }\n\n  private onChange!: (value: string) => void;\n  private onTouched!: () => void;\n\n  constructor() {\n    super(IP_BLOCKS, IP_MAX_LENGTH);\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n\n    this.fm.monitor(this._elRef.nativeElement, true).subscribe((origin: any) => {\n      const isFocused = !!origin;\n\n      if (isFocused) {\n        if (!this.focused) {\n          this.focused = true;\n          this.stateChanges.next();\n        }\n      } else {\n        this.touched = true;\n        this.focused = false;\n        this.stateChanges.next();\n        if (this.onTouched) {\n          this.onTouched();\n        }\n      }\n    });\n  }\n\n  ngDoCheck() {\n    if (this.ngControl && this.ngControl.control) {\n      this.touched = this.ngControl.control.touched;\n      this.stateChanges.next();\n    }\n  }\n\n  setDescribedByIds(ids: string[]): void {\n    const controlElement = this._elRef.nativeElement.querySelector('.mx-ip-input__container')!;\n    controlElement.setAttribute('aria-describedby', ids.join(' '));\n  }\n\n  onContainerClick(event: MouseEvent): void {\n    if ((event.target as Element).tagName.toLowerCase() !== 'input') {\n      this._elRef.nativeElement?.querySelector('input')?.focus();\n    }\n  }\n  ngOnDestroy(): void {\n    this.stateChanges.complete();\n  }\n  writeValue(data: string): void {\n    this.value = data;\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n    this.stateChanges.next();\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  handleInput() {\n    if (this.onChange) {\n      this.onChange(this.value);\n    }\n  }\n\n  ipv6FormatConvertor = {\n    CompressedToFull: (cmpdIp: string) => {\n      // Check if there's a \"::\" indicating zero compression\n      if (cmpdIp.indexOf('::') !== -1) {\n        const parts = cmpdIp.split('::');\n        const left = parts[0].split(':').filter(Boolean); // Left side of \"::\"\n        const right = parts[1].split(':').filter(Boolean); // Right side of \"::\"\n\n        // Calculate the number of zero groups\n        const missingGroups = IP_BLOCKS - (left.length + right.length);\n        const zeroGroups = new Array(missingGroups).fill('0000');\n\n        // Combine left side, zero groups, and right side\n        cmpdIp = [...left, ...zeroGroups, ...right].join(':');\n      }\n\n      // Ensure each group is exactly four hexadecimal digits\n      cmpdIp = cmpdIp\n        .split(':')\n        .map((group) => group.padStart(4, '0'))\n        .join(':');\n\n      return cmpdIp;\n    },\n    fullToCompressed: (fullIp: string) => {}\n  };\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport class MxIpInputValidators {\n  static ipv4(control: AbstractControl): ValidationErrors | null {\n    if (!control.value) {\n      return null;\n    }\n\n    return isIpFormat(control.value, UNICAST_IPV4) ? null : { ipv4: true };\n  }\n  static ipv6(control: AbstractControl): ValidationErrors | null {\n    if (!control.value) {\n      return null;\n    }\n\n    return isIpFormat(control.value, UNICAST_IPV6) ? null : { ipv6: true };\n  }\n  static simpleIpv6(control: AbstractControl): ValidationErrors | null {\n    if (!control.value) {\n      return null;\n    }\n\n    return isIpFormat(control.value, SIMPLE_IPV6) ? null : { simpleIpv6: true };\n  }\n}\n\nconst UNICAST_IPV4 =\n  '^(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\\\.((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\\\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$';\nconst SIMPLE_IPV6 = '^(([0-9a-fA-F]{1,4}:){1,7}|:)(:[0-9a-fA-F]{1,4}){0,6}$';\nconst UNICAST_IPV6 =\n  '^((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|' +\n  '(([0-9A-Fa-f]{1,4}:){1,7}:)|' +\n  '(([0-9A-Fa-f]{1,4}:){1,6}:[0-9A-Fa-f]{1,4})|' +\n  '(([0-9A-Fa-f]{1,4}:){1,5}(:[0-9A-Fa-f]{1,4}){1,2})|' +\n  '(([0-9A-Fa-f]{1,4}:){1,4}(:[0-9A-Fa-f]{1,4}){1,3})|' +\n  '(([0-9A-Fa-f]{1,4}:){1,3}(:[0-9A-Fa-f]{1,4}){1,4})|' +\n  '(([0-9A-Fa-f]{1,4}:){1,2}(:[0-9A-Fa-f]{1,4}){1,5})|' +\n  '([0-9A-Fa-f]{1,4}:)((:[0-9A-Fa-f]{1,4}){1,6})|' +\n  '(:((:[0-9A-Fa-f]{1,4}){1,7}|:))|' +\n  '(fe80:(:[0-9A-Fa-f]{0,4}){0,4}%[0-9a-zA-Z]{1,})|' +\n  '(::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|' +\n  '(([0-9A-Fa-f]{1,4}:){1,4}:((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))$';\n\nconst isIpFormat = (ipAddress: string, regExp: string) => {\n  const ipPattern = new RegExp(regExp);\n  return ipPattern.test(ipAddress);\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["IP_BLOCKS","IP_MAX_LENGTH"],"mappings":"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"}