import ApiReference_default from "../../components/ApiReference.vue.js";
import { createApp, createSSRApp, h, reactive } from "vue";
import "@scalar/schemas/api-reference";
import { createHead } from "@unhead/vue/client";
//#region src/standalone/lib/html-api.ts
/**
* Create (and mount) a new Scalar API Reference
*
* @example createApiReference({ url: '/scalar.json' }).mount('#app')
* @example createApiReference('#app', { url: '/scalar.json' })
* @example createApiReference(document.getElementById('app'), { url: '/scalar.json' })
*/
var createApiReference = (elementOrSelectorOrConfig, optionalConfiguration) => {
	const idPrefix = "scalar-refs";
	const props = reactive({ configuration: optionalConfiguration ?? elementOrSelectorOrConfig ?? {} });
	const createReferenceApp = (isSsr = false) => {
		const referenceApp = isSsr ? createSSRApp(() => h(ApiReference_default, props)) : createApp(() => h(ApiReference_default, props));
		referenceApp.use(createHead());
		referenceApp.config.idPrefix = idPrefix;
		return referenceApp;
	};
	const mountElement = optionalConfiguration ? typeof elementOrSelectorOrConfig === "string" ? document.querySelector(elementOrSelectorOrConfig) : elementOrSelectorOrConfig : null;
	let app = createReferenceApp(!!optionalConfiguration && !!mountElement && mountElement.children.length > 0);
	if (optionalConfiguration) if (mountElement) app.mount(mountElement);
	else console.error("Could not find a mount point for API References:", elementOrSelectorOrConfig);
	const abortController = new AbortController();
	const listenerOptions = {
		capture: false,
		signal: abortController.signal
	};
	/**
	* Reload the API Reference
	* @deprecated
	*/
	document.addEventListener("scalar:reload-references", () => {
		console.warn("scalar:reload-references event has been deprecated, please use the scalarInstance.app.mount method instead.");
		if (!props.configuration) return;
		const currentElement = typeof elementOrSelectorOrConfig === "string" ? document.querySelector(elementOrSelectorOrConfig) : elementOrSelectorOrConfig;
		if (!currentElement) return;
		if (currentElement && !document.body.contains(currentElement)) document.body.appendChild(currentElement);
		app.unmount();
		app = createReferenceApp();
		app.mount(currentElement);
	}, listenerOptions);
	/** Destroy the current API Reference instance */
	const destroy = () => {
		abortController.abort();
		props.configuration = {};
		app.unmount();
	};
	/**
	* Allow user to destroy the API Reference
	* @deprecated
	*/
	document.addEventListener("scalar:destroy-references", () => {
		console.warn("scalar:destroy-references event has been deprecated, please use scalarInstance.destroy instead.");
		destroy();
	}, listenerOptions);
	/**
	* Allow user to update configuration
	* @deprecated
	*/
	document.addEventListener("scalar:update-references-config", (ev) => {
		console.warn("scalar:update-references-config event has been deprecated, please use scalarInstance.updateConfiguration instead.");
		if ("detail" in ev) Object.assign(props, ev.detail);
	}, listenerOptions);
	return {
		app,
		getConfiguration: () => props.configuration ?? {},
		updateConfiguration: (newConfig) => {
			props.configuration = newConfig;
		},
		destroy
	};
};
//#endregion
export { createApiReference };

//# sourceMappingURL=html-api.js.map