/* GesDiscComponents custom elements bundle */

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * 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 interface SetPlatformOptions {
  raf?: (c: FrameRequestCallback) => number;
  ael?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
  rel?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
  ce?: (eventName: string, opts?: any) => CustomEvent;
}
export declare const setPlatformOptions: (opts: SetPlatformOptions) => void;

export type { Components, JSX };

export * from '../dist/types/components';
