/*!
* Bootstrap Native ESM v5.1.9 (https://thednp.github.io/bootstrap.native/)
* Copyright 2026 © thednp
* Licensed under MIT (https://github.com/thednp/bootstrap.native/blob/master/LICENSE)
*/
"use strict";

import { MouseEvent, PointerEvent, TouchEvent } from "@thednp/shorty";
import PositionObserver from "@thednp/position-observer";

//#region src/interface/baseComponent.d.ts
interface BaseOptions {
  [key: string]: unknown;
}
//#endregion
//#region src/components/base-component.d.ts
/** Returns a new `BaseComponent` instance. */
declare class BaseComponent {
  element: Element;
  options?: BaseOptions;
  /**
   * @param target `Element` or selector string
   * @param config component instance options
   */
  constructor(target: Element | string, config?: BaseOptions);
  get version(): string;
  get name(): string;
  get defaults(): {};
  /** just to have something to extend from */
  _toggleEventListeners: () => void;
  /** Removes component from target element. */
  dispose(): void;
}
//#endregion
//#region src/components/alert.d.ts
/** Creates a new Alert instance. */
declare class Alert extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Alert;
  static getInstance: (element: Element) => Alert | null;
  dismiss: HTMLElement | null;
  constructor(target: Element | string);
  /** Returns component name string. */
  get name(): string;
  /**
   * Public method that hides the `.alert` element from the user,
   * disposes the instance once animation is complete, then
   * removes the element from the DOM.
   */
  close: (e?: PointerEvent<HTMLElement>) => void;
  /**
   * Toggle on / off the `click` event listener.
   *
   * @param add when `true`, event listener is added
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Remove the component from target element. */
  dispose(): void;
}
//#endregion
//#region src/components/button.d.ts
/** Creates a new `Button` instance. */
declare class Button extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Button;
  static getInstance: (element: Element) => Button | null;
  isActive: boolean;
  element: HTMLElement;
  /**
   * @param target usually a `.btn` element
   */
  constructor(target: Element | string);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Toggles the state of the target button.
   *
   * @param e usually `click` Event object
   */
  toggle: (e?: PointerEvent<HTMLElement>) => void;
  /**
   * Toggles on/off the `click` event listener.
   *
   * @param add when `true`, event listener is added
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Removes the `Button` component from the target element. */
  dispose(): void;
}
//#endregion
//#region src/interface/carousel.d.ts
interface CarouselOptions extends BaseOptions {
  pause: boolean | "hover";
  keyboard: boolean;
  touch: boolean;
  interval: number | boolean;
}
//#endregion
//#region src/components/carousel.d.ts
/** Creates a new `Carousel` instance. */
declare class Carousel extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Carousel;
  static getInstance: (element: Element) => Carousel | null;
  element: HTMLElement;
  options: CarouselOptions;
  direction: "right" | "left";
  index: number;
  isTouch: boolean;
  slides: HTMLCollectionOf<HTMLElement>;
  controls: HTMLElement[];
  indicator: HTMLElement | null;
  indicators: HTMLElement[];
  /**
   * @param target mostly a `.carousel` element
   * @param config instance options
   */
  constructor(target: Element | string, config?: Partial<CarouselOptions>);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Returns component default options.
   */
  get defaults(): CarouselOptions;
  /**
   * Check if instance is paused.
   */
  get isPaused(): boolean;
  /**
   * Check if instance is animating.
   */
  get isAnimating(): boolean;
  /** Slide automatically through items. */
  cycle(): void;
  /** Pause the automatic cycle. */
  pause(): void;
  /** Slide to the next item. */
  next(): void;
  /** Slide to the previous item. */
  prev(): void;
  /**
   * Jump to the item with the `idx` index.
   *
   * @param idx the index of the item to jump to
   */
  to(idx: number): void;
  /**
   * Toggles all event listeners for the `Carousel` instance.
   *
   * @param add when `TRUE` event listeners are added
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Remove `Carousel` component from target. */
  dispose(): void;
}
//#endregion
//#region src/interface/collapse.d.ts
interface CollapseOptions extends BaseOptions {
  parent: string | HTMLElement | null;
}
//#endregion
//#region src/components/collapse.d.ts
/** Returns a new `Colapse` instance. */
declare class Collapse extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Collapse;
  static getInstance: (element: Element) => Collapse | null;
  element: HTMLElement;
  options: CollapseOptions;
  parent: Element | null;
  triggers: Element[];
  /**
   * @param target and `Element` that matches the selector
   * @param config instance options
   */
  constructor(target: Element | string, config?: Partial<CollapseOptions>);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Returns component default options.
   */
  get defaults(): {
    parent: null;
  };
  /** Hides the collapse. */
  hide(): void;
  /** Shows the collapse. */
  show(): void;
  /** Toggles the visibility of the collapse. */
  toggle(): void;
  /**
   * Toggles on/off the event listener(s) of the `Collapse` instance.
   *
   * @param add when `true`, the event listener is added
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Remove the `Collapse` component from the target `Element`. */
  dispose(): void;
}
//#endregion
//#region src/interface/dropdown.d.ts
interface DropdownOptions extends BaseOptions {
  offset: number;
  display: string | "dynamic" | "static";
}
//#endregion
//#region src/components/dropdown.d.ts
/** Returns a new Dropdown instance. */
declare class Dropdown extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Dropdown;
  static getInstance: (element: Element) => Dropdown | null;
  element: HTMLElement;
  options: DropdownOptions;
  open: boolean;
  parentElement: HTMLElement;
  menu: HTMLElement;
  _observer: PositionObserver;
  /**
   * @param target Element or string selector
   * @param config the instance options
   */
  constructor(target: Element | string, config?: Partial<DropdownOptions>);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Returns component default options.
   */
  get defaults(): {
    offset: number;
    display: string;
  };
  /** Shows/hides the dropdown menu to the user. */
  toggle(): void;
  /** Shows the dropdown menu to the user. */
  show(): void;
  /** Hides the dropdown menu from the user. */
  hide(): void;
  /**
   * Toggles on/off the `click` event listener of the `Dropdown`.
   *
   * @param add when `true`, it will add the event listener
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Removes the `Dropdown` component from the target element. */
  dispose(): void;
}
//#endregion
//#region src/interface/modal.d.ts
interface ModalOptions extends BaseOptions {
  backdrop: boolean | "static";
  keyboard: boolean;
}
//#endregion
//#region src/components/modal.d.ts
/** Returns a new `Modal` instance. */
declare class Modal extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Modal;
  static getInstance: (element: Element) => Modal | null;
  element: HTMLElement;
  options: ModalOptions;
  modalDialog: HTMLElement;
  triggers: HTMLElement[];
  isStatic: boolean;
  hasFade: boolean;
  relatedTarget: EventTarget & HTMLElement | null;
  _observer: ResizeObserver;
  /**
   * @param target usually the `.modal` element
   * @param config instance options
   */
  constructor(target: Element | string, config?: Partial<ModalOptions>);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Returns component default options.
   */
  get defaults(): {
    backdrop: boolean;
    keyboard: boolean;
  };
  /** Toggles the visibility of the modal. */
  toggle(): void;
  /** Shows the modal to the user. */
  show(): void;
  /** Hide the modal from the user. */
  hide(): void;
  /**
   * Updates the modal layout.
   */
  update: () => void;
  /**
   * Toggles on/off the `click` event listener of the `Modal` instance.
   *
   * @param add when `true`, event listener(s) is/are added
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Removes the `Modal` component from target element. */
  dispose(): void;
}
//#endregion
//#region src/interface/offcanvas.d.ts
interface OffcanvasOptions extends BaseOptions {
  backdrop: boolean | "static";
  keyboard: boolean;
}
//#endregion
//#region src/components/offcanvas.d.ts
/** Returns a new `Offcanvas` instance. */
declare class Offcanvas extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Offcanvas;
  static getInstance: (element: Element) => Offcanvas | null;
  element: HTMLElement;
  options: OffcanvasOptions;
  triggers: HTMLElement[];
  relatedTarget: EventTarget & HTMLElement | undefined;
  /**
   * @param target usually an `.offcanvas` element
   * @param config instance options
   */
  constructor(target: Element | string, config?: Partial<OffcanvasOptions>);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Returns component default options.
   */
  get defaults(): {
    backdrop: boolean;
    keyboard: boolean;
    scroll: boolean;
  };
  /** Shows or hides the offcanvas from the user. */
  toggle(): void;
  /** Shows the offcanvas to the user. */
  show(): void;
  /** Hides the offcanvas from the user. */
  hide(): void;
  /**
   * Toggles on/off the `click` event listeners.
   *
   * @param self the `Offcanvas` instance
   * @param add when *true*, listeners are added
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Removes the `Offcanvas` from the target element. */
  dispose(): void;
}
//#endregion
//#region src/interface/tooltip.d.ts
interface TooltipOptions extends BaseOptions {
  template: string | HTMLElement;
  title: string | HTMLElement;
  customClass: string;
  trigger: string;
  placement: "top" | "bottom" | "left" | "right";
  sanitizeFn?: (str: string) => string;
  animation: boolean;
  delay: number;
  content: string | HTMLElement;
  dismissible: boolean;
  btnClose: string | HTMLElement;
}
//#endregion
//#region src/components/tooltip.d.ts
/** Creates a new `Tooltip` instance. */
declare class Tooltip extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Tooltip;
  static getInstance: (element: Element) => Tooltip | null;
  static styleTip: (self: Tooltip) => void;
  element: Element & HTMLOrSVGElement;
  options: TooltipOptions;
  btn?: HTMLElement;
  tooltip: HTMLElement;
  container: HTMLElement;
  offsetParent: Element | Window;
  arrow: HTMLElement;
  enabled: boolean;
  id: string;
  _observer: PositionObserver;
  /**
   * @param target the target element
   * @param config the instance options
   */
  constructor(target: Element | string, config?: Partial<TooltipOptions>);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Returns component default options.
   */
  get defaults(): TooltipOptions;
  /** Handles the focus event on iOS. */
  handleFocus: () => void;
  /** Shows the tooltip. */
  handleShow: () => void;
  show(): void;
  /** Hides the tooltip. */
  handleHide: () => void;
  hide(): void;
  /** Updates the tooltip position. */
  update: () => void;
  /** Toggles the tooltip visibility. */
  toggle: () => void;
  /** Enables the tooltip. */
  enable(): void;
  /** Disables the tooltip. */
  disable(): void;
  /** Toggles the `disabled` property. */
  toggleEnabled(): void;
  /**
   * Handles the `touchstart` event listener for `Tooltip`
   *
   * @this {Tooltip}
   * @param {TouchEvent} e the `Event` object
   */
  handleTouch: ({
    target
  }: TouchEvent) => void;
  /**
   * Toggles on/off the `Tooltip` event listeners.
   *
   * @param add when `true`, event listeners are added
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Removes the `Tooltip` from the target element. */
  dispose(): void;
}
//#endregion
//#region src/interface/popover.d.ts
interface PopoverOptions extends TooltipOptions {
  title: string | HTMLElement;
  content: string | HTMLElement;
  btnClose: string | HTMLElement;
  dismissible: boolean;
}
//#endregion
//#region src/components/popover.d.ts
/** Returns a new `Popover` instance. */
declare class Popover extends Tooltip {
  static selector: string;
  static init: (element: Element) => Popover;
  static getInstance: (element: Element) => Popover | null;
  static styleTip: (self: Tooltip) => void;
  options: PopoverOptions;
  /**
   * @param target the target element
   * @param config the instance options
   */
  constructor(target: Element | string, config?: Partial<PopoverOptions>);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Returns component default options.
   */
  get defaults(): PopoverOptions;
  show: () => void;
}
//#endregion
//#region src/interface/scrollspy.d.ts
interface ScrollSpyOptions extends BaseOptions {
  offset: number;
  target: HTMLElement | string;
  threshold: number | number[];
  rootMargin: string;
}
//#endregion
//#region src/components/scrollspy.d.ts
/** Returns a new `ScrollSpy` instance. */
declare class ScrollSpy extends BaseComponent {
  static selector: string;
  static init: (element: Element) => ScrollSpy;
  static getInstance: (element: Element) => ScrollSpy | null;
  element: HTMLElement;
  options: ScrollSpyOptions;
  target: HTMLElement;
  scrollTarget: HTMLElement;
  _itemsLength: number;
  _activeItem: HTMLElement | null;
  _observables: Map<HTMLElement, HTMLElement>;
  _observer: PositionObserver;
  /**
   * @param target the target element
   * @param config the instance options
   */
  constructor(target: Element | string, config?: Partial<ScrollSpyOptions>);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Returns component default options.
   */
  get defaults(): Partial<ScrollSpyOptions>;
  /** Updates all items. */
  refresh: () => void;
  /**
   * This method provides an event handle
   * for scrollspy
   * @param e the event listener object
   */
  _scrollTo: (e: MouseEvent<HTMLAnchorElement>) => void;
  /**
   * Toggles on/off the component observer.
   *
   * @param self the ScrollSpy instance
   * @param add when `true`, listener is added
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Removes `ScrollSpy` from the target element. */
  dispose(): void;
}
//#endregion
//#region src/components/tab.d.ts
/** Creates a new `Tab` instance. */
declare class Tab extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Tab;
  static getInstance: (element: Element) => Tab | null;
  element: HTMLElement;
  nav: HTMLElement | null;
  content: HTMLElement | null;
  tabContent: HTMLElement | null;
  nextContent: HTMLElement | null;
  dropdown: HTMLElement | null;
  /** @param target the target element */
  constructor(target: Element | string);
  /**
   * Returns component name string.
   */
  get name(): string;
  /** Shows the tab to the user. */
  show(): void;
  /**
   * Toggles on/off the `click` event listener.
   *
   * @param add when `true`, event listener is added
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Removes the `Tab` component from the target element. */
  dispose(): void;
}
//#endregion
//#region src/interface/toast.d.ts
interface ToastOptions extends BaseOptions {
  animation: boolean;
  autohide: boolean;
  delay: number;
}
//#endregion
//#region src/components/toast.d.ts
/** Creates a new `Toast` instance. */
declare class Toast extends BaseComponent {
  static selector: string;
  static init: (element: Element) => Toast;
  static getInstance: (element: Element) => Toast | null;
  element: HTMLElement;
  options: ToastOptions;
  dismiss: HTMLElement | null;
  triggers: HTMLElement[];
  relatedTarget: HTMLElement | null;
  /**
   * @param target the target `.toast` element
   * @param config the instance options
   */
  constructor(target: Element | string, config?: Partial<ToastOptions>);
  /**
   * Returns component name string.
   */
  get name(): string;
  /**
   * Returns component default options.
   */
  get defaults(): {
    animation: boolean;
    autohide: boolean;
    delay: number;
  };
  /**
   * Returns *true* when toast is visible.
   */
  get isShown(): boolean;
  /** Shows the toast. */
  show: () => void;
  /** Hides the toast. */
  hide: () => void;
  /**
   * Toggles on/off the `click` event listener.
   *
   * @param add when `true`, it will add the listener
   */
  _toggleEventListeners: (add?: boolean) => void;
  /** Removes the `Toast` component from the target element. */
  dispose(): void;
}
//#endregion
//#region src/util/init.d.ts
/**
 * Initialize all BSN components for a target container.
 *
 * @param context parent `Node`
 */
declare const initCallback: (context?: ParentNode) => void;
/**
 * Remove all BSN components for a target container.
 *
 * @param context parent `Node`
 */
declare const removeDataAPI: (context?: ParentNode) => void;
//#endregion
export { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip, initCallback, removeDataAPI };
//# sourceMappingURL=index.d.ts.ma