//#region src/engine/registry.ts
var elementRegistry = {
	card: {
		list: "card/ListCard",
		tab: "card/TabCard",
		datatable: "card/DatatableCard",
		grid: "card/GridCard",
		info: "card/InfoCard"
	},
	action: {
		button: "action/ButtonAction",
		"button-group": "action/ButtonGroupAction",
		buttongroup: "action/ButtonGroupAction",
		link: "action/LinkAction"
	},
	boolean: {
		checkbox: "boolean/CheckboxBoolean",
		switch: "boolean/SwitchBoolean",
		radio: "boolean/RadioBoolean",
		"icon-toggle": "boolean/IconToggleBoolean"
	},
	builder: {
		"form-builder": "builder/FormBuilder",
		"object-builder": "builder/ObjectBuilder",
		"preset-builder": "builder/PresetBuilder",
		"reactive-canvas-builder": "builder/ReactiveCanvasBuilder",
		"element-list-builder": "builder/ElementListBuilder",
		"quiz-builder": "builder/QuizBuilder",
		"dependency-list-builder": "builder/DependencyListBuilder",
		"grid-builder": "builder/GridBuilder"
	},
	code: {
		"git-editor": "code/GitCodeEditor",
		"file-tree": "code/FileTree",
		"pull-requests-list": "code/PullRequestsList",
		"build-status": "code/BuildStatus",
		"chat-message": "code/ChatMessage"
	},
	"configuration-block": {
		"elements-block": "configuration-block/ElementsBlock",
		repeatable: "configuration-block/RepeatableBlock",
		dialog: "configuration-block/DialogBlock",
		modal: "configuration-block/ModalBlock"
	},
	display: {
		type: "display/TypeDisplay",
		markdown: "display/MarkdownDisplay",
		html: "display/HtmlDisplay",
		iframe: "display/IframeDisplay",
		image: "display/ImageDisplay",
		video: "display/VideoPlayerDisplay",
		banner: "display/BannerDisplay",
		chart: "display/ChartDisplay",
		carousel: "display/CarouselDisplay",
		barcode: "display/BarcodeDisplay",
		qrcode: "display/QrCodeDisplay",
		icon: "display/IconDisplay",
		"progress-bar": "display/ProgressBarDisplay",
		sprite: "display/SpriteDisplay",
		"reactive-canvas": "display/ReactiveCanvasDisplay"
	},
	editor: {
		"code-editor": "editor/CodeEditor",
		"markdown-editor": "editor/MarkdownEditor",
		"html-editor": "editor/HtmlEditor",
		"image-editor": "editor/ImageEditor",
		"rich-text-editor": "editor/RichTextEditor"
	},
	file: {
		upload: "file/UploadFile",
		dropzone: "file/DropzoneFile",
		"asset-picker": "file/AssetPickerFile"
	},
	input: {
		text: "input/TextInput",
		number: "input/NumberInput",
		email: "input/EmailInput",
		password: "input/PasswordInput",
		url: "input/UrlInput",
		tel: "input/TelInput",
		search: "input/SearchInput",
		textarea: "input/TextareaInput",
		"range-slider": "input/RangeSliderInput",
		"barcode-scanner": "input/BarcodeScannerInput"
	},
	"option-select": {
		select: "option-select/SelectOption",
		"select-multiple": "option-select/SelectMultipleOption",
		radio: "option-select/RadioOption",
		checkbox: "option-select/CheckboxOption",
		autocomplete: "option-select/AutoCompleteOption",
		list: "option-select/ListOption",
		"pill-select": "option-select/PillSelectOption"
	},
	picker: {
		"date-picker": "picker/DatePicker",
		"datetime-picker": "picker/DateTimePicker",
		"time-picker": "picker/TimePicker",
		"timezone-picker": "picker/TimezonePicker",
		"color-picker": "picker/ColorPicker",
		"icon-picker": "picker/IconPicker",
		"icon-picker-inline": "picker/IconPickerInline",
		icon: "picker/IconPicker",
		"map-picker": "picker/MapPicker",
		"async-select": "picker/AsyncSelectPicker",
		"data-model": "picker/DataModelPicker",
		"integration-connector": "picker/IntegrationConnectorPicker"
	}
};
/**
* Per-cardType map. Cards have no style discriminator — `cardType`
* alone resolves the renderer.
*/
var cardRegistry = {
	"card-list": "CardListCard",
	"tab-list": "TabListCard",
	"element-list": "ElementListCard",
	"element-display": "ElementDisplayCard",
	datatable: "DataTableCard",
	"info-card": "InfoCard",
	"grid-view": "GridViewCard"
};
/**
* Default style picked when an element JSON omits the dot suffix
* (e.g. `type: "input"` is normalised to `"input.text"`). Each
* ElementCategory must have a default registered.
*/
var elementDefaultStyle = {
	action: "button",
	boolean: "checkbox",
	builder: "form-builder",
	card: "list",
	code: "git-editor",
	"configuration-block": "repeatable",
	display: "type",
	editor: "code-editor",
	file: "upload",
	input: "text",
	"option-select": "select",
	picker: "date-picker"
};
/**
* Returns the relative element path for a given dot-notation `type`
* (e.g. `"input.text"`), or `null` when the type isn't registered.
*
* A bare category (e.g. `"input"`) is auto-completed using the
* category's default style. The loader uses the returned path to look
* up a Vue component module from `import.meta.glob`.
*/
function resolveElementPath(type) {
	const dot = type.indexOf(".");
	const category = dot < 0 ? type : type.slice(0, dot);
	const style = dot < 0 ? elementDefaultStyle[category] ?? "" : type.slice(dot + 1);
	const typeBucket = elementRegistry[category];
	if (!typeBucket) return null;
	if (!style) {
		const fallback = Object.keys(typeBucket)[0];
		return fallback ? typeBucket[fallback] : null;
	}
	return typeBucket[style] ?? null;
}
/**
* Returns the relative card path for a given `cardType`, or `null` if
* unregistered.
*/
function resolveCardPath(cardType) {
	return cardRegistry[cardType] ?? null;
}
//#endregion
export { resolveElementPath as a, resolveCardPath as i, elementDefaultStyle as n, elementRegistry as r, cardRegistry as t };

//# sourceMappingURL=registry-CjoawJ_B.js.map