import { Controller } from '@hotwired/stimulus';

export default class extends Controller {
  static targets = ['input', 'counter', 'action'];

  declare readonly inputTarget: HTMLInputElement;
  declare readonly counterTarget: HTMLElement;
  declare readonly actionTarget: HTMLInputElement;

  static values = {
    max: Number
  };

  declare readonly maxValue: number;

  connect(): void {
    this.inputTarget.addEventListener('input', this.update.bind(this));
  }

  update(): void {
    this.counterTarget.innerHTML = String(`${this.inputTarget.value.length} / ${this.maxValue}`);

    if (this.inputTarget.value.length > this.maxValue) {
      if (!this.inputTarget.classList.contains('is-invalid') && !this.actionTarget.disabled) {
        this.inputTarget.classList.add('is-invalid');
        this.actionTarget.disabled = true;
      }
    }
    else {
      if (this.inputTarget.classList.contains('is-invalid') && this.actionTarget.disabled) {
        this.inputTarget.classList.remove('is-invalid');
        this.actionTarget.disabled = false;
      }
    }
  }
}

Implement character count as Stimulus controller
Implement character count as Stimulus controller
