import * as _nuxt_schema from '@nuxt/schema';
interface PageTypeConfig {
id: string;
label: string;
icon?: string;
/** SVG path string rendered in the dark sidebar (e.g. '') */
svgPath?: string;
/** Short description shown on the dashboard card */
desc?: string;
}
interface NavSectionItem {
label: string;
/** Route path, e.g. '/admin/templates' */
to: string;
/** SVG path string for the icon */
svgPath?: string;
}
interface PlanConfig {
value: string;
title: string;
subtitle?: string;
price: string;
features?: string[];
popular?: boolean;
}
interface SectionFieldConfig {
type: 'text' | 'textarea' | 'color' | 'image' | 'boolean' | 'select' | 'cards';
label: string;
options?: Array<{
value: string;
label: string;
icon?: string;
}>;
i18n?: boolean;
group?: string;
}
interface SectionConfig {
label: string;
icon?: string;
/**
* Which group this section appears in inside the editor's "Add section" picker.
* Use one of the built-in group names: 'Hero', 'Content', 'Showcase', 'Pricing & Info', 'Conversion'.
* Any other string creates a new group automatically (e.g. 'My Components').
* Defaults to 'Custom' if omitted.
*/
group?: string;
defaultProps: Record;
fields: Record;
}
interface ModuleOptions {
/** Branding shown in the admin navbar */
branding?: {
name?: string;
logoUrl?: string;
};
/** Page type cards shown on the dashboard */
pageTypes?: PageTypeConfig[];
/** Plans shown on the account page */
plans?: PlanConfig[];
/** Route to redirect to when not authenticated */
loginRoute?: string;
/** Supabase table names */
tables?: {
pages?: string;
users?: string;
components?: string;
};
/** Supabase storage bucket for file uploads */
storageBucket?: string;
/**
* Extra nav links shown under a "Contenu" section in the sidebar.
* e.g. [{ label: 'Templates', to: '/admin/templates', svgPath: '' }]
*/
navSections?: NavSectionItem[];
/**
* Extra section definitions merged with the module defaults.
* Keys must match component names in components/sections/ of the consuming app.
* e.g. { MyCustomSection: { label: 'Custom', icon: '✨', defaultProps: {}, fields: {} } }
*/
extraSections?: Record;
/**
* Base path for all admin routes.
* Defaults to '/admin'. Change this if your app already uses /admin for something else.
* e.g. '/cms' → routes become /cms, /cms/setup, /cms/editor/:id, etc.
*/
basePath?: string;
/**
* Wrap the editor preview with your site's real navbar and/or footer so pages
* look exactly as they will on the frontend.
* Use the registered Vue component name (the name Nuxt auto-imports it as).
*
* e.g. { navbar: 'AppNavbar', footer: 'AppFooter' }
*
* The components must be globally available in the consuming app
* (e.g. placed in ~/components/ so Nuxt auto-imports them).
*/
previewShell?: {
navbar?: string;
footer?: string;
};
/**
* Languages available in the editor's i18n switcher.
* Defaults to ['fr', 'ar', 'en']. Set to ['fr'] for French-only projects.
*/
langs?: string[];
/**
* Contact page configuration. Adds a /contact route to the admin.
* When formAction is set, the contact link appears automatically in the sidebar.
*/
contact?: {
/** Formspark or any POST form endpoint (e.g. 'https://submit-form.com/xxx') */
formAction?: string;
/** Phone number displayed as a tel: link */
phone?: string;
/** Social icon links. `icon` = @nuxt/icon name (e.g. 'fa6-brands:instagram') */
socials?: Array<{
icon: string;
href: string;
}>;
};
/**
* Feature flags to enable/disable optional functionality.
* All features are disabled by default.
*/
features?: {
/** Enable AI content generation and SEO audit in the editor. Requires OPENROUTER_API_KEY. */
ai?: boolean;
/**
* OpenRouter model ID to use for AI CSS/JS and component generation.
* Defaults to 'google/gemini-2.5-flash'. Find IDs at openrouter.ai/models.
* e.g. 'google/gemini-2.5-pro', 'openai/gpt-4o', 'openai/gpt-4o-mini'
*/
aiModel?: string;
};
}
declare const _default: _nuxt_schema.NuxtModule;
export { _default as default };
export type { ModuleOptions, NavSectionItem, PageTypeConfig, PlanConfig, SectionConfig, SectionFieldConfig };