{"version":3,"sources":["../../src/plugins/index.ts","../../src/core/Plugin.ts","../../src/plugins/core/Dependency.ts","../../src/plugins/core/StartEndDate.ts","../../src/plugins/core/Sequence.ts","../../src/plugins/core/Transformer.ts","../../src/plugins/core/Aria.ts","../../src/plugins/core/AutoFocus.ts","../../src/plugins/core/Tooltip.ts","../../src/plugins/core/DefaultSubmit.ts","../../src/plugins/core/FieldStatus.ts","../../src/plugins/core/Declarative.ts","../../src/plugins/core/CharCounter.ts","../../src/plugins/core/Summary.ts","../../src/plugins/core/PasswordStrength.ts","../../src/plugins/core/Excluded.ts","../../src/plugins/core/Trigger.ts","../../src/plugins/core/Message.ts","../../src/plugins/core/Icon.ts","../../src/plugins/core/SubmitButton.ts","../../src/plugins/frameworks/Bootstrap5.ts","../../src/plugins/frameworks/Bulma.ts","../../src/plugins/frameworks/Tailwind.ts"],"sourcesContent":["// src/plugins/index.ts\n// Core plugins\nexport { Dependency } from \"./core/Dependency\";\nexport type { DependencyOptions } from \"./core/Dependency\";\nexport { StartEndDate } from \"./core/StartEndDate\";\nexport type { StartEndDateOptions } from \"./core/StartEndDate\";\nexport { Sequence } from \"./core/Sequence\";\nexport type { SequenceOptions } from \"./core/Sequence\";\nexport { Transformer } from \"./core/Transformer\";\nexport type { TransformerOptions } from \"./core/Transformer\";\nexport { Aria } from \"./core/Aria\";\nexport type { AriaOptions } from \"./core/Aria\";\nexport { AutoFocus } from \"./core/AutoFocus\";\nexport type { AutoFocusOptions } from \"./core/AutoFocus\";\nexport { Tooltip } from \"./core/Tooltip\";\nexport type { TooltipOptions, TooltipPlacement, TooltipTrigger } from \"./core/Tooltip\";\nexport { DefaultSubmit } from \"./core/DefaultSubmit\";\nexport type { DefaultSubmitOptions } from \"./core/DefaultSubmit\";\nexport { FieldStatus } from \"./core/FieldStatus\";\nexport type { FieldStatusOptions, FieldValidationStatus } from \"./core/FieldStatus\";\nexport { Declarative } from \"./core/Declarative\";\nexport type { DeclarativeOptions } from \"./core/Declarative\";\nexport { CharCounter } from \"./core/CharCounter\";\nexport type { CharCounterOptions } from \"./core/CharCounter\";\nexport { Summary } from \"./core/Summary\";\nexport type { SummaryOptions } from \"./core/Summary\";\nexport { PasswordStrength } from \"./core/PasswordStrength\";\nexport type { PasswordStrengthOptions } from \"./core/PasswordStrength\";\nexport { Excluded } from \"./core/Excluded\";\nexport type { ExcludedOptions } from \"./core/Excluded\";\nexport { Trigger } from \"./core/Trigger\";\nexport type { TriggerOptions } from \"./core/Trigger\";\nexport { Message } from \"./core/Message\";\nexport type { MessageOptions } from \"./core/Message\";\nexport { Icon } from \"./core/Icon\";\nexport type { IconOptions } from \"./core/Icon\";\nexport { SubmitButton } from \"./core/SubmitButton\";\nexport type { SubmitButtonOptions } from \"./core/SubmitButton\";\n\n// Framework plugins\nexport { Bootstrap5 } from \"./frameworks/Bootstrap5\";\nexport type { Bootstrap5Options } from \"./frameworks/Bootstrap5\";\nexport { Bulma } from \"./frameworks/Bulma\";\nexport type { BulmaOptions } from \"./frameworks/Bulma\";\nexport { Tailwind } from \"./frameworks/Tailwind\";\nexport type { TailwindOptions } from \"./frameworks/Tailwind\";\n","// src/core/Plugin.ts\nimport type { Core } from \"./Core\";\n\nexport abstract class Plugin<T extends Record<string, unknown> = Record<string, unknown>> {\n  /** Options passed by the user when instantiating the plugin */\n  readonly opts: T;\n  /** Set by Core.registerPlugin() before install() is called */\n  protected core!: Core;\n  private _enabled = true;\n\n  constructor(opts?: Partial<T>) {\n    this.opts = (opts ?? {}) as T;\n  }\n\n  /** Called by Core.registerPlugin() — gives plugin access to the core instance */\n  setCore(core: Core): void {\n    this.core = core;\n  }\n\n  /** Called after setCore(). Add event listeners and filters here. */\n  install(): void {}\n\n  /** Called by Core.deregisterPlugin() and Core.destroy(). Remove everything install() added. */\n  uninstall(): void {}\n\n  /** Re-enable after disable() */\n  enable(): void {\n    this._enabled = true;\n  }\n\n  /** Temporarily suspend plugin without uninstalling */\n  disable(): void {\n    this._enabled = false;\n  }\n\n  isEnabled(): boolean {\n    return this._enabled;\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface DependencyOptions {\n  /** Map of field name → space-separated list of dependent fields to revalidate */\n  [field: string]: string;\n}\n\nexport class Dependency extends Plugin<DependencyOptions> {\n  /** Fields currently being revalidated by this plugin — prevents infinite loops */\n  private revalidating = new Set<string>();\n\n  private onFieldValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { field } = payload as { field: string; result: string; elements: HTMLElement[] };\n\n    // If this field was triggered by a dependency chain, skip to prevent loops\n    if (this.revalidating.has(field)) return;\n\n    const depString = this.opts[field];\n    if (!depString) return;\n\n    const deps = depString\n      .split(\" \")\n      .map((s) => s.trim())\n      .filter(Boolean);\n\n    for (const dep of deps) {\n      if (this.revalidating.has(dep)) continue;\n      this.revalidating.add(dep);\n      this.core.resetField(dep);\n      void this.core.validateField(dep).finally(() => {\n        this.revalidating.delete(dep);\n      });\n    }\n  };\n\n  install(): void {\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.revalidating.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ValidatorInput } from \"../../core/types\";\n\nexport interface StartEndDateOptions {\n  /** Date format string. Supported tokens: YYYY, MM, DD. Separator: `-` or `/`. */\n  format: string;\n  startDate: {\n    /** Name of the start date field */\n    field: string;\n    /** Error message shown on the start date field when start > end */\n    message: string;\n  };\n  endDate: {\n    /** Name of the end date field */\n    field: string;\n    /** Error message shown on the end date field when end < start */\n    message: string;\n  };\n  [key: string]: unknown;\n}\n\n/** Parse a date string according to a format string. Returns NaN on failure. */\nfunction parseDate(value: string, format: string): number {\n  const sep = /[-/]/.exec(format)?.[0] ?? \"-\";\n  const fParts = format.split(sep);\n  const vParts = value.split(sep);\n  if (vParts.length !== 3) return NaN;\n  const yIdx = fParts.indexOf(\"YYYY\");\n  const mIdx = fParts.indexOf(\"MM\");\n  const dIdx = fParts.indexOf(\"DD\");\n  if (yIdx < 0 || mIdx < 0 || dIdx < 0) return NaN;\n  const y = parseInt(vParts[yIdx], 10);\n  const m = parseInt(vParts[mIdx], 10);\n  const d = parseInt(vParts[dIdx], 10);\n  const ts = Date.UTC(y, m - 1, d);\n  const dt = new Date(ts);\n  if (dt.getUTCFullYear() !== y || dt.getUTCMonth() !== m - 1 || dt.getUTCDate() !== d) return NaN;\n  return ts;\n}\n\nexport class StartEndDate extends Plugin<StartEndDateOptions> {\n  private readonly _id = Math.random().toString(36).slice(2, 8);\n\n  /** Validator key added to the start date field */\n  private get startKey(): string {\n    return `__startEndDate_s_${this._id}_${this.opts.startDate.field}`;\n  }\n  /** Validator key added to the end date field */\n  private get endKey(): string {\n    return `__startEndDate_e_${this._id}_${this.opts.endDate.field}`;\n  }\n\n  /** Prevent recursive cross-revalidation */\n  private revalidating = new Set<string>();\n\n  private onFieldValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { field } = payload as { field: string; result: string };\n    // If this field was triggered by a cross-revalidation from this plugin, stop here\n    if (this.revalidating.has(field)) return;\n\n    if (field === this.opts.startDate.field && !this.revalidating.has(this.opts.endDate.field)) {\n      this.revalidating.add(this.opts.endDate.field);\n      this.core.resetField(this.opts.endDate.field);\n      void this.core.validateField(this.opts.endDate.field).finally(() => {\n        this.revalidating.delete(this.opts.endDate.field);\n      });\n    } else if (field === this.opts.endDate.field && !this.revalidating.has(this.opts.startDate.field)) {\n      this.revalidating.add(this.opts.startDate.field);\n      this.core.resetField(this.opts.startDate.field);\n      void this.core.validateField(this.opts.startDate.field).finally(() => {\n        this.revalidating.delete(this.opts.startDate.field);\n      });\n    }\n  };\n\n  install(): void {\n    const { format, startDate, endDate } = this.opts;\n    const form = this.core.form;\n\n    // Register validator factories for cross-field comparison\n    this.core.registerValidator(this.startKey, () => ({\n      validate: (input: ValidatorInput) => {\n        const endEl = form.querySelector<HTMLInputElement>(`[name=\"${endDate.field}\"]`);\n        if (!endEl?.value) return { valid: true };\n        const start = parseDate(input.value, format);\n        const end = parseDate(endEl.value, format);\n        if (isNaN(start) || isNaN(end)) return { valid: true };\n        return { valid: start <= end };\n      },\n    }));\n\n    this.core.registerValidator(this.endKey, () => ({\n      validate: (input: ValidatorInput) => {\n        const startEl = form.querySelector<HTMLInputElement>(`[name=\"${startDate.field}\"]`);\n        if (!startEl?.value) return { valid: true };\n        const start = parseDate(startEl.value, format);\n        const end = parseDate(input.value, format);\n        if (isNaN(start) || isNaN(end)) return { valid: true };\n        return { valid: start <= end };\n      },\n    }));\n\n    // Merge cross-field validators into both fields\n    this.core.addField(startDate.field, {\n      validators: { [this.startKey]: { message: startDate.message } },\n    });\n    this.core.addField(endDate.field, {\n      validators: { [this.endKey]: { message: endDate.message } },\n    });\n\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.core.removeValidator(this.opts.startDate.field, this.startKey);\n    this.core.removeValidator(this.opts.endDate.field, this.endKey);\n    this.core.deregisterValidator(this.startKey);\n    this.core.deregisterValidator(this.endKey);\n    this.revalidating.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload, ValidationStatus } from \"../../core/types\";\n\nexport interface SequenceOptions {\n  enabled?: boolean;\n  [key: string]: unknown;\n}\n\nexport class Sequence extends Plugin<SequenceOptions> {\n  private previousResults = new Map<string, Record<string, ValidationStatus>>();\n\n  constructor(opts?: SequenceOptions) {\n    super({ enabled: true, ...opts });\n  }\n\n  private onValidatorValidated = (payload: unknown): void => {\n    const { field, validator, result } = payload as {\n      field: string;\n      validator: string;\n      result: { status: ValidationStatus };\n    };\n    if (!this.previousResults.has(field)) {\n      this.previousResults.set(field, {});\n    }\n    const pr = this.previousResults.get(field);\n    if (pr) pr[validator] = result.status;\n  };\n\n  private shouldValidate = (defaultValue: unknown, field: unknown, validator: unknown): boolean => {\n    if (!this.opts.enabled) return defaultValue as boolean;\n\n    const fieldName = field as string;\n    const validatorName = validator as string;\n    const fieldOpts = this.core.getFields()[fieldName];\n    if (!fieldOpts) return defaultValue as boolean;\n\n    const validatorNames = Object.keys(fieldOpts.validators);\n    const currentIndex = validatorNames.indexOf(validatorName);\n    if (currentIndex === 0) return defaultValue as boolean;\n\n    const prevRun = this.previousResults.get(fieldName) ?? {};\n    for (const prev of validatorNames.slice(0, currentIndex)) {\n      const opts = fieldOpts.validators[prev];\n      if (opts.enabled === false) continue;\n      if (prevRun[prev] === \"Invalid\") return false;\n    }\n\n    return defaultValue as boolean;\n  };\n\n  /** Post-validation filter: clear messages after the first failure (by definition order). */\n  private trimToFirstFailure = (payload: unknown): unknown => {\n    if (!this.opts.enabled) return payload;\n    const p = payload as ElementValidatedPayload;\n    if (p.valid) return payload;\n\n    const fieldOpts = this.core.getFields()[p.field];\n    if (!fieldOpts) return payload;\n\n    const orderedNames = Object.keys(fieldOpts.validators);\n    const firstFailedName = orderedNames.find(\n      (name) => p.validators[name] && !p.validators[name].valid,\n    );\n    if (!firstFailedName) return payload;\n\n    const trimmedValidators: ElementValidatedPayload[\"validators\"] = {};\n    for (const [name, result] of Object.entries(p.validators)) {\n      trimmedValidators[name] =\n        name === firstFailedName ? result : { ...result, message: \"\" };\n    }\n    return { ...p, validators: trimmedValidators };\n  };\n\n  install(): void {\n    this.core.on(\"core.validator.validated\", this.onValidatorValidated);\n    this.core.registerFilter(\"field-should-validate\", this.shouldValidate);\n    this.core.registerFilter(\"element-validated\", this.trimToFirstFailure);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.validator.validated\", this.onValidatorValidated);\n    this.core.deregisterFilter(\"field-should-validate\", this.shouldValidate);\n    this.core.deregisterFilter(\"element-validated\", this.trimToFirstFailure);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface TransformerOptions {\n  /**\n   * Map of field name → map of validator name → transform function.\n   * The function receives (field, element, validator) and returns the transformed string value.\n   */\n  [field: string]: {\n    [validator: string]: (\n      field: string,\n      element: HTMLElement,\n      validator: string,\n    ) => string;\n  };\n}\n\nexport class Transformer extends Plugin<TransformerOptions> {\n  private valueFilter = (\n    defaultValue: unknown,\n    field: unknown,\n    element: unknown,\n    validator: unknown,\n  ): unknown => {\n    if (!this.isEnabled()) return defaultValue;\n    const fn = this.opts[field as string]?.[validator as string];\n    if (typeof fn !== \"function\") return defaultValue;\n    return fn(field as string, element as HTMLElement, validator as string);\n  };\n\n  install(): void {\n    this.core.registerFilter(\"field-value\", this.valueFilter);\n  }\n\n  uninstall(): void {\n    this.core.deregisterFilter(\"field-value\", this.valueFilter);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload, ValidationStatus } from \"../../core/types\";\n\nexport interface AriaOptions {\n  [key: string]: unknown;\n}\n\nexport class Aria extends Plugin<AriaOptions> {\n  private readonly _id = Math.random().toString(36).slice(2, 8);\n  private containerIds = new Map<string, string>();\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n    element.setAttribute(\"aria-invalid\", valid ? \"false\" : \"true\");\n  };\n\n  private onFieldValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { field, result, elements } = payload as {\n      field: string;\n      result: ValidationStatus;\n      elements: HTMLElement[];\n    };\n\n    if (result === \"Invalid\") {\n      let container: HTMLElement | null = null;\n      for (const el of elements) {\n        const sibling = el.nextElementSibling as HTMLElement | null;\n        if (sibling?.classList.contains(\"vd-plugins-message-container\")) {\n          container = sibling;\n          break;\n        }\n      }\n\n      if (container) {\n        if (!this.containerIds.has(field)) {\n          this.containerIds.set(field, `fv-aria-${this._id}-${field}-messages`);\n        }\n        const id = this.containerIds.get(field)!;\n        container.id = id;\n        container.setAttribute(\"role\", \"alert\");\n        for (const el of elements) {\n          el.setAttribute(\"aria-describedby\", id);\n        }\n      }\n    } else {\n      // Find and clean up the message container if it exists\n      let container: HTMLElement | null = null;\n      for (const el of elements) {\n        const sibling = el.nextElementSibling as HTMLElement | null;\n        if (sibling?.classList.contains(\"vd-plugins-message-container\")) {\n          container = sibling;\n          break;\n        }\n      }\n      if (container) {\n        container.removeAttribute(\"id\");\n        container.removeAttribute(\"role\");\n      }\n      this.containerIds.delete(field);\n      for (const el of elements) {\n        el.removeAttribute(\"aria-describedby\");\n      }\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { field, elements } = payload as { field: string; elements: HTMLElement[] };\n    this.containerIds.delete(field);\n    for (const el of elements) {\n      el.removeAttribute(\"aria-invalid\");\n      el.removeAttribute(\"aria-describedby\");\n    }\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    this.containerIds.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ValidationStatus } from \"../../core/types\";\n\nexport interface AutoFocusOptions {\n  /** Called before focusing the first invalid element. */\n  onPrefocus?: (payload: { field: string; element: HTMLElement }) => void;\n  [key: string]: unknown;\n}\n\nexport class AutoFocus extends Plugin<AutoFocusOptions> {\n  private fieldStatuses = new Map<string, ValidationStatus>();\n\n  constructor(opts?: Partial<AutoFocusOptions>) {\n    super(opts);\n    if (opts?.enabled === false) {\n      this.disable();\n    }\n  }\n\n  private onFieldValidated = (payload: unknown): void => {\n    const { field, result } = payload as { field: string; result: ValidationStatus };\n    this.fieldStatuses.set(field, result);\n  };\n\n  private onFormInvalid = (): void => {\n    if (!this.isEnabled()) return;\n\n    const fields = this.core.getFields();\n    for (const field of Object.keys(fields)) {\n      if (this.fieldStatuses.get(field) === \"Invalid\") {\n        const elements = this.core.getElements(field);\n        const firstElement = elements[0];\n        if (!firstElement) continue;\n\n        if (this.opts.onPrefocus) {\n          this.opts.onPrefocus({ field, element: firstElement });\n        }\n\n        firstElement.focus();\n        return;\n      }\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.fieldStatuses.delete(field);\n  };\n\n  private onFormValidating = (): void => {\n    this.fieldStatuses.clear();\n  };\n\n  private onFormReset = (): void => {\n    this.fieldStatuses.clear();\n  };\n\n  install(): void {\n    this.core.on(\"core.form.validating\", this.onFormValidating);\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n    this.core.on(\"core.form.invalid\", this.onFormInvalid);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n    this.core.on(\"core.form.reset\", this.onFormReset);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.form.validating\", this.onFormValidating);\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.core.off(\"core.form.invalid\", this.onFormInvalid);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    this.core.off(\"core.form.reset\", this.onFormReset);\n    this.fieldStatuses.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport type TooltipPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type TooltipTrigger = \"hover\" | \"click\";\n\nexport interface TooltipOptions {\n  /** Where the tooltip appears relative to the field element. Default: 'top' */\n  placement?: TooltipPlacement;\n  /** What triggers the tooltip. Default: 'hover' */\n  trigger?: TooltipTrigger;\n  [key: string]: unknown;\n}\n\nexport class Tooltip extends Plugin<TooltipOptions> {\n  private tip: HTMLElement | null = null;\n  private messages = new Map<HTMLElement, string>();\n  private currentElement: HTMLElement | null = null;\n  private triggerListeners = new Map<\n    HTMLElement,\n    { show: (e: MouseEvent) => void; hide?: () => void }\n  >();\n\n  constructor(opts?: TooltipOptions) {\n    super({ placement: \"top\", trigger: \"hover\", ...opts });\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid, validators } = payload as ElementValidatedPayload;\n\n    if (!valid) {\n      const firstFailing = Object.values(validators).find((r) => !r.valid && r.message);\n      if (firstFailing) {\n        this.messages.set(element, firstFailing.message);\n        this.attachTrigger(element);\n      }\n    } else {\n      if (this.currentElement === element) {\n        this.hideTip();\n      }\n      this.messages.delete(element);\n      this.detachTrigger(element);\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    for (const el of elements) {\n      if (this.currentElement === el) this.hideTip();\n      this.messages.delete(el);\n      this.detachTrigger(el);\n    }\n  };\n\n  private onDocumentClicked = (): void => {\n    this.hideTip();\n  };\n\n  private attachTrigger(element: HTMLElement): void {\n    if (this.triggerListeners.has(element)) return;\n    const trigger = this.opts.trigger ?? \"hover\";\n\n    if (trigger === \"hover\") {\n      const show = () => this.showTip(element);\n      const hide = () => this.hideTip();\n      element.addEventListener(\"mouseenter\", show);\n      element.addEventListener(\"mouseleave\", hide);\n      this.triggerListeners.set(element, { show, hide });\n    } else {\n      const show = (e: MouseEvent) => {\n        e.stopPropagation();\n        this.showTip(element);\n      };\n      element.addEventListener(\"click\", show);\n      this.triggerListeners.set(element, { show });\n    }\n  }\n\n  private detachTrigger(element: HTMLElement): void {\n    const listeners = this.triggerListeners.get(element);\n    if (!listeners) return;\n    const trigger = this.opts.trigger ?? \"hover\";\n    if (trigger === \"hover\") {\n      element.removeEventListener(\"mouseenter\", listeners.show);\n      if (listeners.hide) element.removeEventListener(\"mouseleave\", listeners.hide);\n    } else {\n      element.removeEventListener(\"click\", listeners.show);\n    }\n    this.triggerListeners.delete(element);\n  }\n\n  private showTip(element: HTMLElement): void {\n    const message = this.messages.get(element);\n    if (!message || !this.tip) return;\n\n    this.currentElement = element;\n    this.tip.textContent = message;\n    this.tip.classList.add(\"vd-plugins-tooltip--show\");\n\n    const rect = element.getBoundingClientRect();\n    const tipRect = this.tip.getBoundingClientRect();\n    const scrollTop = window.scrollY ?? 0;\n    const scrollLeft = window.scrollX ?? 0;\n    const placement = this.opts.placement ?? \"top\";\n\n    let top = 0;\n    let left = 0;\n    switch (placement) {\n      case \"bottom\":\n        top = rect.bottom + scrollTop;\n        left = rect.left + rect.width / 2 - tipRect.width / 2 + scrollLeft;\n        break;\n      case \"left\":\n        top = rect.top + rect.height / 2 - tipRect.height / 2 + scrollTop;\n        left = rect.left - tipRect.width + scrollLeft;\n        break;\n      case \"right\":\n        top = rect.top + rect.height / 2 - tipRect.height / 2 + scrollTop;\n        left = rect.right + scrollLeft;\n        break;\n      case \"top\":\n      default:\n        top = rect.top - tipRect.height + scrollTop;\n        left = rect.left + rect.width / 2 - tipRect.width / 2 + scrollLeft;\n        break;\n    }\n    this.tip.style.top = `${top}px`;\n    this.tip.style.left = `${left}px`;\n  }\n\n  private hideTip(): void {\n    this.currentElement = null;\n    if (!this.tip) return;\n    this.tip.classList.remove(\"vd-plugins-tooltip--show\");\n    this.tip.textContent = \"\";\n  }\n\n  install(): void {\n    this.tip = document.createElement(\"div\");\n    this.tip.className = `vd-plugins-tooltip vd-plugins-tooltip--${this.opts.placement ?? \"top\"}`;\n    document.body.appendChild(this.tip);\n\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n\n    if ((this.opts.trigger ?? \"hover\") === \"click\") {\n      document.addEventListener(\"click\", this.onDocumentClicked);\n    }\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n\n    if ((this.opts.trigger ?? \"hover\") === \"click\") {\n      document.removeEventListener(\"click\", this.onDocumentClicked);\n    }\n\n    for (const element of [...this.triggerListeners.keys()]) {\n      this.detachTrigger(element);\n    }\n\n    this.messages.clear();\n    this.currentElement = null;\n    if (this.tip) this.tip.parentNode?.removeChild(this.tip);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface DefaultSubmitOptions {\n  [key: string]: unknown;\n}\n\nexport class DefaultSubmit extends Plugin<DefaultSubmitOptions> {\n  constructor(opts?: DefaultSubmitOptions) {\n    super(opts);\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private onFormValid = (): void => {\n    if (!this.isEnabled()) return;\n    this.core.form.submit();\n  };\n\n  install(): void {\n    if (this.core.form.querySelectorAll('[name=\"submit\"]').length > 0) {\n      throw new Error(\n        'DefaultSubmit: do not use \"submit\" as the name of a submit button — it shadows form.submit()',\n      );\n    }\n    this.core.on(\"core.form.valid\", this.onFormValid);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.form.valid\", this.onFormValid);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ValidationStatus } from \"../../core/types\";\n\nexport type FieldValidationStatus = ValidationStatus | \"Validating\";\n\nexport interface FieldStatusOptions {\n  onStatusChanged?: (areFieldsValid: boolean) => void;\n  [key: string]: unknown;\n}\n\nexport class FieldStatus extends Plugin<FieldStatusOptions> {\n  private statuses = new Map<string, FieldValidationStatus>();\n\n  constructor(opts?: FieldStatusOptions) {\n    super(opts);\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private onFieldAdded = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.statuses.set(field, \"NotValidated\");\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.statuses.delete(field);\n    this.notifyStatusChanged();\n  };\n\n  private onFieldValidating = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.statuses.set(field, \"Validating\");\n    this.notifyStatusChanged();\n  };\n\n  private onFieldValidated = (payload: unknown): void => {\n    const { field, result } = payload as { field: string; result: ValidationStatus };\n    this.statuses.set(field, result);\n    this.notifyStatusChanged();\n  };\n\n  private onFormReset = (): void => {\n    for (const field of this.statuses.keys()) {\n      this.statuses.set(field, \"NotValidated\");\n    }\n    this.notifyStatusChanged();\n  };\n\n  private notifyStatusChanged(): void {\n    if (!this.isEnabled()) return;\n    this.opts.onStatusChanged?.(this.areFieldsValid());\n  }\n\n  areFieldsValid(): boolean {\n    return Array.from(this.statuses.values()).every(\n      (s) => s === \"Valid\" || s === \"NotValidated\",\n    );\n  }\n\n  getStatuses(): Map<string, FieldValidationStatus> {\n    return this.isEnabled() ? this.statuses : new Map();\n  }\n\n  install(): void {\n    // Seed statuses for fields that were added before this plugin was installed\n    for (const field of Object.keys(this.core.getFields())) {\n      this.statuses.set(field, \"NotValidated\");\n    }\n    this.core.on(\"core.field.added\", this.onFieldAdded);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n    this.core.on(\"core.field.validating\", this.onFieldValidating);\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n    this.core.on(\"core.form.reset\", this.onFormReset);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.added\", this.onFieldAdded);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    this.core.off(\"core.field.validating\", this.onFieldValidating);\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.core.off(\"core.form.reset\", this.onFormReset);\n    this.statuses.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { FieldOptions, ValidatorOptions } from \"../../core/types\";\n\nexport interface DeclarativeOptions {\n  /** Attribute prefix for validators. Default: \"data-vd-\" */\n  prefix?: string;\n  /** Map HTML5 attributes (required, type, minlength, etc.) to validators. Default: false */\n  html5Input?: boolean;\n  [key: string]: unknown;\n}\n\nexport class Declarative extends Plugin<DeclarativeOptions> {\n  /** Fields whose declarative attrs have already been processed — prevents infinite loops */\n  private addedFields = new Set<string>();\n\n  constructor(opts?: DeclarativeOptions) {\n    super({ prefix: \"data-vd-\", html5Input: false, ...opts });\n    if (opts?.enabled === false) this.disable();\n  }\n\n  install(): void {\n    const existingFields = this.core.getFields();\n    const parsed = this.parseAllElements();\n\n    for (const [field, { validators, selector }] of Object.entries(parsed)) {\n      // Normalize: any validator with no explicit `enabled` defaults to false\n      for (const v of Object.keys(validators)) {\n        if (validators[v].enabled === undefined) {\n          validators[v].enabled = false;\n        }\n      }\n\n      const existing = existingFields[field];\n      if (existing) {\n        // Field already defined programmatically — only add validators NOT already there\n        const extra: Record<string, ValidatorOptions> = {};\n        for (const [v, vopts] of Object.entries(validators)) {\n          if (!existing.validators[v]) extra[v] = vopts;\n        }\n        if (Object.keys(extra).length > 0) {\n          this.addedFields.add(field);\n          this.core.addField(field, { validators: extra });\n        }\n      } else {\n        // Purely declarative field — add it fresh\n        this.addedFields.add(field);\n        const fieldOpts: FieldOptions = { validators };\n        if (selector) fieldOpts.selector = selector;\n        this.core.addField(field, fieldOpts);\n      }\n    }\n\n    this.core.on(\"core.field.added\", this.onFieldAdded);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  uninstall(): void {\n    this.addedFields.clear();\n    this.core.off(\"core.field.added\", this.onFieldAdded);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  private onFieldAdded = (payload: unknown): void => {\n    const { field, elements, options } = payload as {\n      field: string;\n      elements: HTMLElement[];\n      options: FieldOptions;\n    };\n    if (!elements || elements.length === 0 || this.addedFields.has(field)) return;\n    this.addedFields.add(field);\n\n    const allDeclarative: Record<string, ValidatorOptions> = {};\n    for (const el of elements) {\n      const { validators } = this.parseElement(el);\n      Object.assign(allDeclarative, validators);\n    }\n    if (Object.keys(allDeclarative).length === 0) return;\n\n    // Normalize enabled flag\n    for (const v of Object.keys(allDeclarative)) {\n      if (allDeclarative[v].enabled === undefined) allDeclarative[v].enabled = false;\n    }\n\n    // Only add validators not already in the programmatic config\n    const extra: Record<string, ValidatorOptions> = {};\n    for (const [v, vopts] of Object.entries(allDeclarative)) {\n      if (!options.validators?.[v]) extra[v] = vopts;\n    }\n    if (Object.keys(extra).length > 0) {\n      this.core.addField(field, { validators: extra });\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.addedFields.delete(field);\n  };\n\n  /** Scan form for all elements with [name] or [prefix+field], parse each one. */\n  private parseAllElements(): Record<string, { validators: Record<string, ValidatorOptions>; selector?: string }> {\n    const prefix = this.opts.prefix as string;\n    const result: Record<string, { validators: Record<string, ValidatorOptions>; selector?: string }> = {};\n    const elements = Array.from(\n      this.core.form.querySelectorAll<HTMLElement>(`[name], [${prefix}field]`),\n    );\n    for (const el of elements) {\n      const { validators } = this.parseElement(el);\n      if (Object.keys(validators).length === 0) continue;\n      const name = el.getAttribute(\"name\");\n      const fvField = el.getAttribute(`${prefix}field`);\n      const field = name ?? fvField ?? \"\";\n      if (!field) continue;\n      // If element has no name attribute, we need a custom selector to find it\n      const selector = !name && fvField ? `[${prefix}field=\"${fvField}\"]` : undefined;\n      if (result[field]) {\n        result[field].validators = { ...result[field].validators, ...validators };\n      } else {\n        result[field] = { validators: { ...validators }, selector };\n      }\n    }\n    return result;\n  }\n\n  /** Parse data-vd-* attributes (and html5 attrs if enabled) from a single element. */\n  parseElement(el: HTMLElement): { validators: Record<string, ValidatorOptions> } {\n    const prefix = this.opts.prefix as string;\n    const html5Input = this.opts.html5Input as boolean;\n    // Escape any regex metacharacters in the prefix (e.g. the hyphens in \"data-vd-\")\n    const escapedPrefix = prefix.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    const reg = new RegExp(`^${escapedPrefix}([a-z0-9-]+)(___)?([a-z0-9-]+)?$`);\n    const opts: Record<string, Record<string, unknown>> = {};\n    const type = el.getAttribute(\"type\");\n\n    // ── HTML5 attribute mappings ────────────────────────────────────────────\n    if (html5Input) {\n      if (el.hasAttribute(\"required\")) {\n        opts.notEmpty = { ...opts.notEmpty, enabled: true };\n      }\n      if (type === \"email\") {\n        opts.email = { ...opts.email, enabled: true };\n      }\n      if (type === \"url\") {\n        opts.uri = { ...opts.uri, enabled: true };\n      }\n      if (type === \"range\") {\n        const min = el.getAttribute(\"min\");\n        const max = el.getAttribute(\"max\");\n        opts.between = {\n          ...opts.between,\n          enabled: true,\n          ...(min !== null ? { min: parseFloat(min) } : {}),\n          ...(max !== null ? { max: parseFloat(max) } : {}),\n        };\n      }\n      const minlength = el.getAttribute(\"minlength\");\n      if (minlength !== null) {\n        opts.stringLength = { ...opts.stringLength, enabled: true, min: parseInt(minlength, 10) };\n      }\n      const maxlength = el.getAttribute(\"maxlength\");\n      if (maxlength !== null) {\n        opts.stringLength = { ...opts.stringLength, enabled: true, max: parseInt(maxlength, 10) };\n      }\n      const pattern = el.getAttribute(\"pattern\");\n      if (pattern !== null) {\n        opts.regexp = { ...opts.regexp, enabled: true, regexp: pattern };\n      }\n      const minVal = el.getAttribute(\"min\");\n      if (minVal !== null && type !== \"date\" && type !== \"range\") {\n        opts.greaterThan = { ...opts.greaterThan, enabled: true, min: parseFloat(minVal) };\n      }\n      const maxVal = el.getAttribute(\"max\");\n      if (maxVal !== null && type !== \"date\" && type !== \"range\") {\n        opts.lessThan = { ...opts.lessThan, enabled: true, max: parseFloat(maxVal) };\n      }\n    }\n\n    // ── data-vd-* attribute parsing ─────────────────────────────────────────\n    for (const attr of Array.from(el.attributes)) {\n      const match = reg.exec(attr.name);\n      if (!match) continue;\n      const validatorName = this.toCamelCase(match[1]);\n      // Skip data-vd-field — it names the field, it's not a validator\n      if (validatorName === \"field\") continue;\n      const optionName = match[3] ? this.toCamelCase(match[3]) : null;\n      if (!opts[validatorName]) opts[validatorName] = {};\n      if (optionName) {\n        opts[validatorName][optionName] = this.normalizeValue(attr.value);\n      } else {\n        // Base attribute: data-vd-{validator} — sets enabled flag\n        if (opts[validatorName].enabled !== true) {\n          opts[validatorName].enabled = attr.value === \"\" || attr.value === \"true\";\n        }\n      }\n    }\n\n    return { validators: opts as Record<string, ValidatorOptions> };\n  }\n\n  /** Coerce attribute string values to their natural types. */\n  private normalizeValue(value: string): boolean | number | string {\n    if (value === \"true\" || value === \"\") return true;\n    if (value === \"false\") return false;\n    const num = Number(value);\n    if (!isNaN(num) && value.trim() !== \"\") return num;\n    return value;\n  }\n\n  private toCamelCase(input: string): string {\n    return input.replace(/-([a-z])/g, (_, char: string) => char.toUpperCase());\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface CharCounterOptions {\n  enabled?: boolean;\n  /** CSS selector for the counter container. Defaults to \".vd-plugins-char-counter\" within the field's parent. */\n  container?: string;\n  /** Function to format the counter text. Defaults to \"current / max\". */\n  renderCount?: (current: number, max: number) => string;\n  /** CSS class added to the container when the character count exceeds max. */\n  exceededClass?: string;\n  /** Only apply the counter to these field names. Defaults to all fields with a stringLength max. */\n  fields?: string[];\n  [key: string]: unknown;\n}\n\ninterface CounterState {\n  container: HTMLElement;\n  max: number;\n  listener: EventListener;\n}\n\nexport class CharCounter extends Plugin<CharCounterOptions> {\n  private counters = new Map<HTMLElement, CounterState>();\n\n  constructor(opts?: CharCounterOptions) {\n    super(opts);\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private renderCount(current: number, max: number): string {\n    return this.opts.renderCount ? this.opts.renderCount(current, max) : `${current} / ${max}`;\n  }\n\n  private getMax(field: string): number | null {\n    const validators = this.core.getFields()[field]?.validators ?? {};\n    const sl = validators.stringLength as { max?: number } | undefined;\n    return sl?.max ?? null;\n  }\n\n  private shouldTrack(field: string): boolean {\n    if (this.opts.fields && !this.opts.fields.includes(field)) return false;\n    return this.getMax(field) !== null;\n  }\n\n  private attachToField(field: string, elements: HTMLElement[]): void {\n    if (!this.shouldTrack(field)) return;\n    const max = this.getMax(field)!;\n\n    for (const el of elements) {\n      // Find the counter container\n      const containerSelector = this.opts.container ?? \".vd-plugins-char-counter\";\n      const container = (el.closest(\"div, fieldset, li\") ?? el.parentNode)?.querySelector<HTMLElement>(\n        containerSelector,\n      );\n      if (!container) continue;\n\n      // Set initial count\n      const input = el as HTMLInputElement;\n      container.textContent = this.renderCount(input.value?.length ?? 0, max);\n\n      const listener: EventListener = () => {\n        if (!this.isEnabled()) return;\n        const current = (el as HTMLInputElement).value?.length ?? 0;\n        container.textContent = this.renderCount(current, max);\n        const exceededClass = this.opts.exceededClass ?? \"vd-plugins-char-counter--exceeded\";\n        if (current > max) {\n          container.classList.add(exceededClass);\n        } else {\n          container.classList.remove(exceededClass);\n        }\n      };\n\n      el.addEventListener(\"input\", listener);\n      this.counters.set(el, { container, max, listener });\n    }\n  }\n\n  private detachFromField(elements: HTMLElement[]): void {\n    for (const el of elements) {\n      const state = this.counters.get(el);\n      if (state) {\n        el.removeEventListener(\"input\", state.listener);\n        state.container.textContent = \"\";\n        this.counters.delete(el);\n      }\n    }\n  }\n\n  private onFieldAdded = (payload: unknown): void => {\n    const { field, elements } = payload as { field: string; elements: HTMLElement[] };\n    this.attachToField(field, elements);\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    this.detachFromField(elements);\n  };\n\n  install(): void {\n    this.core.on(\"core.field.added\", this.onFieldAdded);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n\n    // Seed fields already registered before install\n    for (const [field, elements] of Object.entries(this.core.getFields()).map(([f]) => [\n      f,\n      this.core.getElements(f),\n    ] as [string, HTMLElement[]])) {\n      this.attachToField(field, elements);\n    }\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.added\", this.onFieldAdded);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    for (const [el, state] of this.counters) {\n      el.removeEventListener(\"input\", state.listener);\n      state.container.textContent = \"\";\n    }\n    this.counters.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface SummaryOptions {\n  enabled?: boolean;\n  /** CSS selector for the summary container element. Default: \".vd-plugins-summary\" */\n  container?: string;\n  /** Renders the title line. Return empty string to omit. */\n  renderTitle?: () => string;\n  /** Renders a single error item. Receives field name and message. */\n  renderItem?: (field: string, message: string) => string;\n  /** Scroll the container into view after rendering. Default: false */\n  autoScroll?: boolean;\n  [key: string]: unknown;\n}\n\nexport class Summary extends Plugin<SummaryOptions> {\n  /** Last known error messages: field → message[] */\n  private messages = new Map<string, string[]>();\n\n  constructor(opts?: SummaryOptions) {\n    super(opts);\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private getContainer(): HTMLElement | null {\n    const selector = this.opts.container ?? \".vd-plugins-summary\";\n    return document.querySelector<HTMLElement>(selector);\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    const { field, validators } = payload as ElementValidatedPayload;\n    const errors = Object.values(validators)\n      .filter((r) => !r.valid && r.message)\n      .map((r) => r.message);\n    if (errors.length > 0) {\n      this.messages.set(field, errors);\n    } else {\n      this.messages.delete(field);\n    }\n  };\n\n  private onFormInvalid = (): void => {\n    if (!this.isEnabled()) return;\n    const container = this.getContainer();\n    if (!container) return;\n\n    const renderItem = this.opts.renderItem ?? ((_field, msg) => msg);\n    const renderTitle =\n      this.opts.renderTitle ?? (() => \"Please fix the following errors:\");\n\n    const allErrors: Array<{ field: string; message: string }> = [];\n    for (const [field, msgs] of this.messages) {\n      for (const msg of msgs) {\n        allErrors.push({ field, message: msg });\n      }\n    }\n\n    if (allErrors.length === 0) {\n      container.innerHTML = \"\";\n      return;\n    }\n\n    const title = renderTitle();\n    const items = allErrors\n      .map(({ field, message }) => `<li>${renderItem(field, message)}</li>`)\n      .join(\"\");\n\n    container.innerHTML = `${title ? `<p>${title}</p>` : \"\"}<ul>${items}</ul>`;\n\n    if (this.opts.autoScroll) {\n      container.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    }\n  };\n\n  private onFormClear = (): void => {\n    this.messages.clear();\n    const container = this.getContainer();\n    if (container) container.innerHTML = \"\";\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.form.invalid\", this.onFormInvalid);\n    this.core.on(\"core.form.valid\", this.onFormClear);\n    this.core.on(\"core.form.reset\", this.onFormClear);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.form.invalid\", this.onFormInvalid);\n    this.core.off(\"core.form.valid\", this.onFormClear);\n    this.core.off(\"core.form.reset\", this.onFormClear);\n    this.onFormClear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ValidatorFactory, ValidatorInput } from \"../../core/types\";\n\nexport interface PasswordStrengthOptions {\n  /** The field name to evaluate password strength for */\n  field: string;\n  /** Error message when score is below minScore. Default: 'The password is not strong enough' */\n  message?: string;\n  /** Minimum required score (0–4). Default: 3 */\n  minScore?: number;\n  /** Called after each evaluation */\n  onScore?: (payload: { field: string; score: number; valid: boolean }) => void;\n  [key: string]: unknown;\n}\n\nfunction scorePassword(password: string): number {\n  if (!password) return 0;\n  let score = 0;\n  if (password.length >= 8) score++;\n  if (/[A-Z]/.test(password)) score++;\n  if (/[0-9]/.test(password)) score++;\n  if (/[^A-Za-z0-9]/.test(password)) score++;\n  return score;\n}\n\nexport class PasswordStrength extends Plugin<PasswordStrengthOptions> {\n  private readonly _id = Math.random().toString(36).slice(2, 8);\n  private get validatorName(): string {\n    return `__pwStr_${this._id}`;\n  }\n\n  private buildFactory(): ValidatorFactory {\n    const field = this.opts.field;\n    const minScore = this.opts.minScore ?? 3;\n    const message = this.opts.message ?? \"The password is not strong enough\";\n    const onScore = this.opts.onScore;\n\n    return () => ({\n      validate(input: ValidatorInput) {\n        const score = scorePassword(input.value);\n        const valid = score >= minScore;\n        if (onScore) {\n          onScore({ field, score, valid });\n        }\n        return { valid, message: valid ? \"\" : message };\n      },\n    });\n  }\n\n  install(): void {\n    this.core.registerValidator(this.validatorName, this.buildFactory());\n    this.core.addField(this.opts.field, {\n      validators: {\n        [this.validatorName]: {},\n      },\n    });\n  }\n\n  uninstall(): void {\n    this.core.removeValidator(this.opts.field, this.validatorName);\n    this.core.deregisterValidator(this.validatorName);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\ntype ExcludedFn = (field: string, element: HTMLElement) => boolean;\n\nexport interface ExcludedOptions {\n  excluded?: string | ExcludedFn;\n  [key: string]: unknown;\n}\n\nexport class Excluded extends Plugin<ExcludedOptions> {\n  private isExcluded = (\n    defaultValue: unknown,\n    field: unknown,\n    _validator: unknown,\n    element: unknown,\n  ): boolean => {\n    if (!this.isEnabled()) return defaultValue as boolean;\n    const el = element as HTMLElement;\n    const fieldName = field as string;\n    const { excluded } = this.opts;\n\n    // Default: exclude disabled and hidden inputs\n    const input = el as HTMLInputElement;\n    if (input.disabled || input.type === \"hidden\") return false;\n\n    if (!excluded) return defaultValue as boolean;\n\n    if (typeof excluded === \"function\") {\n      return excluded(fieldName, el) ? false : (defaultValue as boolean);\n    }\n\n    if (typeof excluded === \"string\") {\n      return el.matches(excluded) ? false : (defaultValue as boolean);\n    }\n\n    return defaultValue as boolean;\n  };\n\n  install(): void {\n    this.core.registerFilter(\"field-should-validate\", this.isExcluded);\n  }\n\n  uninstall(): void {\n    this.core.deregisterFilter(\"field-should-validate\", this.isExcluded);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface TriggerOptions {\n  /** DOM event name or map of field→event. Use false to disable for a field. */\n  event?: string | Record<string, string | false>;\n  /** Debounce delay in milliseconds */\n  delay?: number;\n  [key: string]: unknown;\n}\n\ninterface Handler {\n  element: HTMLElement;\n  event: string;\n  listener: EventListener;\n}\n\nexport class Trigger extends Plugin<TriggerOptions> {\n  private handlers: Handler[] = [];\n  private timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n  constructor(opts?: TriggerOptions) {\n    super({ event: \"input\", delay: 0, ...opts });\n  }\n\n  private onFieldAdded = (payload: unknown): void => {\n    const { field, elements } = payload as { field: string; elements: HTMLElement[] };\n    this.attachToElements(field, elements);\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    this.detachFromElements(elements);\n  };\n\n  private getEventForField(field: string): string | false {\n    const { event } = this.opts;\n    if (!event) return \"input\";\n    if (typeof event === \"string\") return event;\n    return event[field] ?? \"input\";\n  }\n\n  private attachToElements(field: string, elements: HTMLElement[]): void {\n    const eventName = this.getEventForField(field);\n    if (eventName === false) return;\n\n    for (const el of elements) {\n      const listener: EventListener = () => {\n        if (!this.isEnabled()) return;\n        const delay = this.opts.delay ?? 0;\n        if (delay > 0) {\n          clearTimeout(this.timers.get(field));\n          this.timers.set(\n            field,\n            setTimeout(() => {\n              this.core.resetField(field);\n              this.core.validateField(field);\n            }, delay),\n          );\n        } else {\n          this.core.resetField(field);\n          void this.core.validateField(field);\n        }\n      };\n      el.addEventListener(eventName, listener);\n      this.handlers.push({ element: el, event: eventName, listener });\n    }\n  }\n\n  private detachFromElements(elements: HTMLElement[]): void {\n    this.handlers = this.handlers.filter(({ element, event, listener }) => {\n      if (elements.includes(element)) {\n        element.removeEventListener(event, listener);\n        return false;\n      }\n      return true;\n    });\n  }\n\n  install(): void {\n    this.core.on(\"core.field.added\", this.onFieldAdded);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n\n    // Attach to fields already present when the plugin is registered\n    for (const field of Object.keys(this.core.getFields())) {\n      this.attachToElements(field, this.core.getElements(field));\n    }\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.added\", this.onFieldAdded);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    for (const { element, event, listener } of this.handlers) {\n      element.removeEventListener(event, listener);\n    }\n    this.handlers = [];\n    for (const timer of this.timers.values()) clearTimeout(timer);\n    this.timers.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface MessageOptions {\n  /** CSS selector for a custom message container. If omitted, a div is inserted after the field. */\n  container?: string;\n  /** CSS class added to the message container element */\n  clazz?: string;\n  /** When true, only the first error message is shown per field. Default: false. */\n  first?: boolean;\n  [key: string]: unknown;\n}\n\nexport class Message extends Plugin<MessageOptions> {\n  /** Map from field element → message container element */\n  private containers = new Map<HTMLElement, HTMLElement>();\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid, validators } = payload as ElementValidatedPayload;\n\n    let container = this.containers.get(element);\n    if (!container) {\n      container = document.createElement(\"div\");\n      container.className = this.opts.clazz ?? \"vd-plugins-message-container\";\n\n      const customContainer = this.opts.container\n        ? document.querySelector(this.opts.container)\n        : null;\n\n      if (customContainer) {\n        customContainer.appendChild(container);\n      } else {\n        element.parentNode?.insertBefore(container, element.nextSibling);\n      }\n      this.containers.set(element, container);\n    }\n\n    container.innerHTML = \"\";\n    if (!valid) {\n      const failing = Object.values(validators).filter((r) => !r.valid && r.message);\n      const toRender = this.opts.first ? failing.slice(0, 1) : failing;\n      for (const result of toRender) {\n        const msg = document.createElement(\"div\");\n        msg.className = \"vd-plugins-message\";\n        msg.textContent = result.message;\n        container.appendChild(msg);\n      }\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    for (const el of elements) {\n      const container = this.containers.get(el);\n      if (container) {\n        container.parentNode?.removeChild(container);\n        this.containers.delete(el);\n      }\n    }\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    for (const container of this.containers.values()) {\n      container.parentNode?.removeChild(container);\n    }\n    this.containers.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface IconOptions {\n  valid?: string;\n  invalid?: string;\n  validating?: string;\n  [key: string]: unknown;\n}\n\nexport class Icon extends Plugin<IconOptions> {\n  private icons = new Map<HTMLElement, HTMLElement>();\n\n  constructor(opts?: IconOptions) {\n    super({ valid: \"✓\", invalid: \"✗\", validating: \"…\", ...opts });\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n\n    let icon = this.icons.get(element);\n    if (!icon) {\n      icon = document.createElement(\"span\");\n      icon.className = \"vd-plugins-icon\";\n      element.parentNode?.insertBefore(icon, element.nextSibling);\n      this.icons.set(element, icon);\n    }\n\n    icon.classList.remove(\"vd-plugins-icon--valid\", \"vd-plugins-icon--invalid\");\n    if (valid) {\n      icon.classList.add(\"vd-plugins-icon--valid\");\n      icon.textContent = this.opts.valid ?? \"✓\";\n    } else {\n      icon.classList.add(\"vd-plugins-icon--invalid\");\n      icon.textContent = this.opts.invalid ?? \"✗\";\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    for (const el of elements) {\n      const icon = this.icons.get(el);\n      if (icon) {\n        icon.parentNode?.removeChild(icon);\n        this.icons.delete(el);\n      }\n    }\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    for (const icon of this.icons.values()) {\n      icon.parentNode?.removeChild(icon);\n    }\n    this.icons.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface SubmitButtonOptions {\n  /** CSS selector for submit button(s). Defaults to [type=\"submit\"]. */\n  selector?: string;\n  [key: string]: unknown;\n}\n\nexport class SubmitButton extends Plugin<SubmitButtonOptions> {\n  constructor(opts?: SubmitButtonOptions) {\n    super({ selector: '[type=\"submit\"]', ...opts });\n  }\n\n  private getButtons(): HTMLButtonElement[] {\n    const selector = this.opts.selector ?? '[type=\"submit\"]';\n    return Array.from(this.core.form.querySelectorAll<HTMLButtonElement>(selector));\n  }\n\n  private onValidating = (): void => {\n    if (!this.isEnabled()) return;\n    for (const btn of this.getButtons()) btn.disabled = true;\n  };\n\n  private onDone = (): void => {\n    if (!this.isEnabled()) return;\n    for (const btn of this.getButtons()) btn.disabled = false;\n  };\n\n  install(): void {\n    this.core.on(\"core.form.validating\", this.onValidating);\n    this.core.on(\"core.form.valid\", this.onDone);\n    this.core.on(\"core.form.invalid\", this.onDone);\n    this.core.on(\"core.form.notvalidated\", this.onDone);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.form.validating\", this.onValidating);\n    this.core.off(\"core.form.valid\", this.onDone);\n    this.core.off(\"core.form.invalid\", this.onDone);\n    this.core.off(\"core.form.notvalidated\", this.onDone);\n    // Re-enable buttons when uninstalling\n    for (const btn of this.getButtons()) btn.disabled = false;\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface Bootstrap5Options {\n  validClass?: string;\n  invalidClass?: string;\n  [key: string]: unknown;\n}\n\nexport class Bootstrap5 extends Plugin<Bootstrap5Options> {\n  private trackedElements = new Set<HTMLElement>();\n\n  constructor(opts?: Bootstrap5Options) {\n    super({ validClass: \"is-valid\", invalidClass: \"is-invalid\", ...opts });\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n    const validClass = this.opts.validClass ?? \"is-valid\";\n    const invalidClass = this.opts.invalidClass ?? \"is-invalid\";\n\n    element.classList.toggle(validClass, valid);\n    element.classList.toggle(invalidClass, !valid);\n    this.trackedElements.add(element);\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    const validClass = this.opts.validClass ?? \"is-valid\";\n    const invalidClass = this.opts.invalidClass ?? \"is-invalid\";\n    for (const el of this.trackedElements) {\n      el.classList.remove(validClass, invalidClass);\n    }\n    this.trackedElements.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface BulmaOptions {\n  validClass?: string;\n  invalidClass?: string;\n  [key: string]: unknown;\n}\n\nexport class Bulma extends Plugin<BulmaOptions> {\n  private trackedElements = new Set<HTMLElement>();\n\n  constructor(opts?: BulmaOptions) {\n    super({ validClass: \"is-success\", invalidClass: \"is-danger\", ...opts });\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n    const validClass = this.opts.validClass ?? \"is-success\";\n    const invalidClass = this.opts.invalidClass ?? \"is-danger\";\n    element.classList.toggle(validClass, valid);\n    element.classList.toggle(invalidClass, !valid);\n    this.trackedElements.add(element);\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    const v = this.opts.validClass ?? \"is-success\";\n    const i = this.opts.invalidClass ?? \"is-danger\";\n    for (const el of this.trackedElements) {\n      el.classList.remove(v, i);\n    }\n    this.trackedElements.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface TailwindOptions {\n  /** Space-separated Tailwind classes for valid state */\n  validClass?: string;\n  /** Space-separated Tailwind classes for invalid state */\n  invalidClass?: string;\n  [key: string]: unknown;\n}\n\nexport class Tailwind extends Plugin<TailwindOptions> {\n  private trackedElements = new Set<HTMLElement>();\n\n  private applyClasses(element: HTMLElement, valid: boolean): void {\n    const validClasses = (this.opts.validClass ?? \"\").split(\" \").filter(Boolean);\n    const invalidClasses = (this.opts.invalidClass ?? \"\").split(\" \").filter(Boolean);\n    if (valid) {\n      element.classList.add(...validClasses);\n      element.classList.remove(...invalidClasses);\n    } else {\n      element.classList.add(...invalidClasses);\n      element.classList.remove(...validClasses);\n    }\n    this.trackedElements.add(element);\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n    this.applyClasses(element, valid);\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    const validClasses = (this.opts.validClass ?? \"\").split(\" \").filter(Boolean);\n    const invalidClasses = (this.opts.invalidClass ?? \"\").split(\" \").filter(Boolean);\n    for (const el of this.trackedElements) {\n      el.classList.remove(...validClasses, ...invalidClasses);\n    }\n    this.trackedElements.clear();\n  }\n}\n"],"mappings":"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","names":[]}