/* UiLibraryNext custom elements bundle */

import { Components, JSX } from "../types/components";

interface BalButton extends Components.BalButton, HTMLElement {}
export const BalButton: {
  prototype: BalButton;
  new (): BalButton;
};

interface BalCard extends Components.BalCard, HTMLElement {}
export const BalCard: {
  prototype: BalCard;
  new (): BalCard;
};

interface BalCardActions extends Components.BalCardActions, HTMLElement {}
export const BalCardActions: {
  prototype: BalCardActions;
  new (): BalCardActions;
};

interface BalCardButton extends Components.BalCardButton, HTMLElement {}
export const BalCardButton: {
  prototype: BalCardButton;
  new (): BalCardButton;
};

interface BalCardContent extends Components.BalCardContent, HTMLElement {}
export const BalCardContent: {
  prototype: BalCardContent;
  new (): BalCardContent;
};

interface BalCardHeading extends Components.BalCardHeading, HTMLElement {}
export const BalCardHeading: {
  prototype: BalCardHeading;
  new (): BalCardHeading;
};

interface BalCardStep extends Components.BalCardStep, HTMLElement {}
export const BalCardStep: {
  prototype: BalCardStep;
  new (): BalCardStep;
};

interface BalCardSteps extends Components.BalCardSteps, HTMLElement {}
export const BalCardSteps: {
  prototype: BalCardSteps;
  new (): BalCardSteps;
};

interface BalCardSubtitle extends Components.BalCardSubtitle, HTMLElement {}
export const BalCardSubtitle: {
  prototype: BalCardSubtitle;
  new (): BalCardSubtitle;
};

interface BalCardTitle extends Components.BalCardTitle, HTMLElement {}
export const BalCardTitle: {
  prototype: BalCardTitle;
  new (): BalCardTitle;
};

interface BalCheckbox extends Components.BalCheckbox, HTMLElement {}
export const BalCheckbox: {
  prototype: BalCheckbox;
  new (): BalCheckbox;
};

interface BalDropdown extends Components.BalDropdown, HTMLElement {}
export const BalDropdown: {
  prototype: BalDropdown;
  new (): BalDropdown;
};

interface BalField extends Components.BalField, HTMLElement {}
export const BalField: {
  prototype: BalField;
  new (): BalField;
};

interface BalIcon extends Components.BalIcon, HTMLElement {}
export const BalIcon: {
  prototype: BalIcon;
  new (): BalIcon;
};

interface BalInput extends Components.BalInput, HTMLElement {}
export const BalInput: {
  prototype: BalInput;
  new (): BalInput;
};

interface BalSelect extends Components.BalSelect, HTMLElement {}
export const BalSelect: {
  prototype: BalSelect;
  new (): BalSelect;
};

interface BalSelectOption extends Components.BalSelectOption, HTMLElement {}
export const BalSelectOption: {
  prototype: BalSelectOption;
  new (): BalSelectOption;
};

interface BalSpinner extends Components.BalSpinner, HTMLElement {}
export const BalSpinner: {
  prototype: BalSpinner;
  new (): BalSpinner;
};

interface BalText extends Components.BalText, HTMLElement {}
export const BalText: {
  prototype: BalText;
  new (): BalText;
};

/**
 * Utility to define all custom elements within this package using the tag name provided in the component's source. 
 * When defining each custom element, it will also check it's safe to define by:
 *
 * 1. Ensuring the "customElements" registry is available in the global context (window).
 * 2. The component tag name is not already defined.
 *
 * Use the standard [customElements.define()](https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define) 
 * method instead to define custom elements individually, or to provide a different tag name.
 */
export declare const defineCustomElements: (opts?: any) => void;

/**
 * Used to manually set the base path where assets can be found.
 * If the script is used as "module", it's recommended to use "import.meta.url",
 * such as "setAssetPath(import.meta.url)". Other options include
 * "setAssetPath(document.currentScript.src)", or using a bundler's replace plugin to
 * dynamically set the path at build time, such as "setAssetPath(process.env.ASSET_PATH)".
 * But do note that this configuration depends on how your script is bundled, or lack of
 * bunding, and where your assets can be loaded from. Additionally custom bundling
 * will have to ensure the static assets are copied to its build directory.
 */
export declare const setAssetPath: (path: string) => void;

export { Components, JSX };

export * from '../types';
