import type { ArcgisArcadeEditor } from "./components/arcgis-arcade-editor/customElement.js";
import type { ArcgisCodeEditor } from "./components/arcgis-code-editor/customElement.js";
import type { CodeEditorShell } from "./components/arcgis-code-editor-shell/customElement.js";
import type { ArcgisCodeViewer } from "./components/arcgis-code-viewer/customElement.js";
import type { ArcgisSqlExpressionEditor } from "./components/arcgis-sql-expression-editor/customElement.js";

/**
 * Place in this file any utility functions you wish to expose for the consumers
 * of your package
 */
export { getAssetPath, setAssetPath } from './runtime';
/** @public */
export { arcade } from './utils/arcade-monaco/arcade-defaults';
/** @public */
export { sqlExpression } from './utils/sql-expr-monaco/sql-expr-defaults';
/** @public */
export type { Diagnostic } from '@arcgis/arcade-languageservice';
/** @public */
export type * from './utils/index';
/** @public */
export type * from './utils/profile/types';


export interface ArcgisArcadeEditorCustomEvent<T> extends CustomEvent<T> {
  detail: T;
  target: ArcgisArcadeEditor;
  currentTarget: ArcgisArcadeEditor;
}
export interface ArcgisCodeEditorCustomEvent<T> extends CustomEvent<T> {
  detail: T;
  target: ArcgisCodeEditor;
  currentTarget: ArcgisCodeEditor;
}
export interface ArcgisSqlExpressionEditorCustomEvent<T> extends CustomEvent<T> {
  detail: T;
  target: ArcgisSqlExpressionEditor;
  currentTarget: ArcgisSqlExpressionEditor;
}

export { ToEvents, TargetedEvent } from "@arcgis/lumina";

declare global {
  interface HTMLElementTagNameMap {
    "arcgis-arcade-editor": ArcgisArcadeEditor;
    "arcgis-code-editor": ArcgisCodeEditor;
    "arcgis-code-editor-shell": CodeEditorShell;
    "arcgis-code-viewer": ArcgisCodeViewer;
    "arcgis-sql-expression-editor": ArcgisSqlExpressionEditor;
  }

  type HTMLArcgisArcadeEditorElementEventMap = ArcgisArcadeEditor["@eventTypes"];
  type HTMLArcgisArcadeEditorElement = ArcgisArcadeEditor;


  type HTMLArcgisCodeEditorElementEventMap = ArcgisCodeEditor["@eventTypes"];
  type HTMLArcgisCodeEditorElement = ArcgisCodeEditor;


  type HTMLArcgisCodeEditorShellElement = CodeEditorShell;


  type HTMLArcgisCodeViewerElement = ArcgisCodeViewer;


  type HTMLArcgisSqlExpressionEditorElementEventMap = ArcgisSqlExpressionEditor["@eventTypes"];
  type HTMLArcgisSqlExpressionEditorElement = ArcgisSqlExpressionEditor;


}