/**
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
*/
/**
* @module template/template
* @publicApi
*/
import { Plugin, type PluginDependenciesOf } from "@ckeditor/ckeditor5-core";
import { TemplateEditing } from "./templateediting.js";
import { TemplateUI } from "./templateui.js";
/**
* The template feature.
*
* For a detailed overview, check the {@glink features/template Content templates} feature guide.
*/
export declare class Template extends Plugin {
	/**
	* @inheritDoc
	*/
	static get requires(): PluginDependenciesOf<[TemplateEditing, TemplateUI]>;
	/**
	* @inheritDoc
	*/
	static get pluginName(): "Template";
	/**
	* @inheritDoc
	*/
	static override get isOfficialPlugin(): true;
	/**
	* @inheritDoc
	*/
	static override get isPremiumPlugin(): true;
}
/**
* The configuration of the template feature.
*
* ```ts
* ClassicEditor
*	.create( {
* 		template: ... // Template feature configuration.
*	} )
*	.then( ... )
*	.catch( ... );
*```
* See {@link module:core/editor/editorconfig~EditorConfig all editor options}.
*/
export interface TemplateConfig {
	/**
	* A list of all template definitions to be displayed in the `'insertTemplate'` UI dropdown.
	*
	* An example configuration:
	*
	* ```json
	* {
	* 	template: {
	* 		definitions: [
	* 			{
	* 				title: 'Issue acknowledgement (plain text)',
	* 				data: 'Dear customer, thank you for your report! The issue is currently being worked on by our development team.'
	* 			},
	* 			{
	* 				title: 'Signature (multi-line)',
	* 				data: '<p><b>Jane Doe</b></p><p>Marketing Specialist at <a href="https://example.com>Example.com</a></p>',
	* 				description: 'Author signature with the link to the website.'
	* 			},
	* 			{
	* 				title: 'Example table',
	* 				data: '<table><tr><td>Cell #1</td><td></td></tr><tr><td></td><td>Cell #2</td></tr></table>',
	* 				icon: '<svg viewBox="0 0 45 45" xmlns="http://www.w3.org/2000/svg">...</svg>',
	* 				description: 'This template inserts a table.'
	* 			},
	* 			{
	* 				title: 'Insert userAgent data',
	* 				data: navigator.userAgent
	* 			},
	* 			{
	* 				title: 'Insert translate to English link (function)',
	* 				data: () => '<a href="' + location.href + '/en" title="Translate to English">Translate to English</a>'
	* 			},
	* 			// ...
	* 		]
	* 	}
	* }
	* ```
	*/
	definitions?: Array<TemplateDefinition>;
}
/**
* An object describing a single template definition.
*
* ```json
* {
* // Mandatory fields:
* 	title: 'Example template',
* 	data: '<table><tr><td>Cell #1</td><td></td></tr><tr><td></td><td>Cell #2</td></tr></table>',
*
* 	// Optional configuration:
* 	icon: '<svg viewBox="0 0 45 45" xmlns="http://www.w3.org/2000/svg">...</svg>',
* 	description: 'This template inserts a table.'
* }
* ```
*/
export type TemplateDefinition = {
	/**
	* The title of the template.
	*/
	title: string;
	/**
	* An HTML string to be inserted into the document or a callback function that returns an HTML string
	* to be inserted into the document when the template is selected.
	*/
	data: (() => string) | string;
	/**
	* An optional SVG string representing the icon of the template. The default size of the icon is 45x45 pixels.
	* Be sure to set the correct `viewBox` attribute in the icon source. If not provided, a generic icon will be used instead.
	*/
	icon?: string;
	/**
	* An optional long description of the template presented to the users.
	*/
	description?: string;
};
