type EditorFeatureMap = { imageExport?: boolean; advancedColors?: boolean; unlimitedRate?: boolean; newTemplateButton?: boolean; predefinedTemplatesButton?: boolean; gridNavigation?: boolean; editorThemes?: boolean; }; export type PdfBuilderCompanyData = { name?: string; address?: string; city?: string; siret?: string; tva?: string; rcs?: string; capital?: string; email?: string; phone?: string; [key: string]: string | undefined; }; export interface PdfBuilderExistingTemplate { id?: string | number; template_id?: string | number; template_data?: unknown; name?: string; description?: string; showGuides?: boolean; snapToGrid?: boolean; marginTop?: number; marginBottom?: number; marginLeft?: number; marginRight?: number; [key: string]: unknown; } export interface PdfBuilderData { nonce?: string; ajaxUrl?: string; templateId?: string | number | null; isEditing?: boolean; auto_save_interval?: number; existingTemplate?: PdfBuilderExistingTemplate; hasExistingData?: boolean; canvasSettings?: unknown; documentTypeTemplatesPremium?: unknown[]; dynamicTextTemplatesPremium?: unknown[]; mentionsTemplatesPremium?: unknown[]; license?: { isPremium?: boolean; }; features?: EditorFeatureMap; company?: PdfBuilderCompanyData; previewOrderData?: unknown; } export interface EditorFeatureFlags { isPremium: boolean; canUseImageExport: boolean; canUseAdvancedColors: boolean; canUseUnlimitedRate: boolean; canCreateNewTemplate: boolean; canUsePredefinedTemplates: boolean; canUseGridNavigation: boolean; canUseEditorThemes: boolean; } export function getPdfBuilderData(): PdfBuilderData { return (globalThis as { pdfBuilderData?: PdfBuilderData }).pdfBuilderData ?? {}; } export function ensurePdfBuilderData(): PdfBuilderData { const globalScope = globalThis as { pdfBuilderData?: PdfBuilderData }; if (!globalScope.pdfBuilderData) { globalScope.pdfBuilderData = {}; } return globalScope.pdfBuilderData; } export function updatePdfBuilderData( updater: (data: PdfBuilderData) => void, ): PdfBuilderData { const editorData = ensurePdfBuilderData(); updater(editorData); return editorData; } export function getEditorFeatureFlags(): EditorFeatureFlags { const editorData = getPdfBuilderData(); const features = editorData.features ?? {}; const isPremium = editorData.license?.isPremium === true; return { isPremium, canUseImageExport: isPremium && features.imageExport === true, canUseAdvancedColors: isPremium && features.advancedColors === true, canUseUnlimitedRate: isPremium && features.unlimitedRate === true, canCreateNewTemplate: isPremium && features.newTemplateButton === true, canUsePredefinedTemplates: isPremium && features.predefinedTemplatesButton === true, canUseGridNavigation: isPremium && features.gridNavigation === true, canUseEditorThemes: isPremium && features.editorThemes === true, }; }