/* eslint-disable import/no-duplicates */

declare const ASSETS_PATH: string
declare const DATA_PATH: string
declare interface Window {
  // extend the window
  ROOT_LOCATION: string
  CONFIG_LOCATION: string
  VARSCONFIG_LOCATION: string
	SERVCONFIG_LOCATION: string
}

// with vite-plugin-md, markdowns can be treat as Vue components
declare module '*.md' {
  import { ComponentOptions } from 'vue'
  const component: ComponentOptions
  export default component
}
/*
declare module '*.vue' {
  import Vue from 'vue'
  export default Vue
}
*/
declare const _APP_VERSION: string
/*
 * Keep states in the global scope to be reusable across Vue instances.
 *
 * @see   {@link /createGlobalState}
 * @param stateFactory A factory function to create the state
*/
/*
declare function createGlobalState<T extends object>(
  stateFactory: () => T
): () => T
*/
interface EventTarget {
  value: EventTarget|null
  name: string| null
  /**
     * Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.
     *
     * The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.
     *
     * When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.
     *
     * When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.
     *
     * When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.
     *
     * The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.
     */
  addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void
  /**
     * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.
     */
  dispatchEvent(event: Event): boolean
  /**
     * Removes the event listener in target's event listener list with the same type, callback, and options.
     */
  removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void
}
