diff --git a/.cursorrules b/.cursorrules index 691feb1..ffe5012 100644 --- a/.cursorrules +++ b/.cursorrules @@ -1,23 +1,169 @@ # Beefree SDK Integration Best Practices -This file contains best practices and guidelines for implementing Beefree SDK features across all applications. +This document serves as a comprehensive reference guide for implementing Beefree SDK features. Use this as a knowledge base when working with the Beefree SDK integration in this project. ## Table of Contents -1. [Export Endpoints (Content Services API)](#export-endpoints-content-services-api) -2. [Template Catalog API](#template-catalog-api) -3. [Loading the Beefree SDK](#loading-the-beefree-sdk) -4. [Loading Templates in the Builder](#loading-templates-in-the-builder) -5. [onChange and onSave Callbacks](#onchange-and-onsave-callbacks) -6. [Configuration Toggles](#configuration-toggles) -7. [HTML Import Functionality](#html-import-functionality) -8. [Brand Styles API](#brand-styles-api) -9. [Error Handling](#error-handling) -10. [TypeScript Best Practices](#typescript-best-practices) +1. [Static Template System](#static-template-system) ⭐ **NEW** +2. [Export Endpoints (Content Services API)](#export-endpoints-content-services-api) +3. [Template Catalog API](#template-catalog-api) +4. [Loading the Beefree SDK](#loading-the-beefree-sdk) +5. [Loading Templates in the Builder](#loading-templates-in-the-builder) +6. [onChange and onSave Callbacks](#onchange-and-onsave-callbacks) +7. [Configuration Toggles](#configuration-toggles) +8. [HTML Import Functionality](#html-import-functionality) +9. [Brand Styles API](#brand-styles-api) +10. [Error Handling](#error-handling) +11. [TypeScript Best Practices](#typescript-best-practices) + +--- + +## Static Template System + +### Overview +This application uses a static template system where all templates and their exports (HTML, PDF, PNG, TXT) are pre-generated at build time. This eliminates the need for real-time API calls during export operations and provides a faster, more predictable user experience. + +### Key Concepts + +**IMPORTANT**: User edits made in the Beefree SDK editor are NOT saved to the static export files. Exports always show the original template. Users are warned about this with alert dialogs before each export. + +### Architecture + +``` +public/templates/ +├── index.json # Template catalog +├── beefree-sdk-demo-template.json # Template metadata + JSON +├── thanksgiving-travel.json +├── ...other templates... +└── exports/ + ├── beefree-sdk-demo-template.html # Pre-generated HTML + ├── beefree-sdk-demo-template.pdf # Pre-generated PDF + ├── beefree-sdk-demo-template.png # Pre-generated image + ├── beefree-sdk-demo-template.txt # Pre-generated text + └── ...other exports... +``` + +### Local Templates Service + +The `src/services/localTemplates.ts` service provides functions to load static templates: + +```typescript +// Load all templates from index +export async function loadAllTemplates(): Promise { + const index = await loadTemplatesIndex(); + return index.templates; +} + +// Load single template +export async function loadTemplate(templateId: string): Promise { + const response = await fetch(`/templates/${templateId}.json`); + return response.json(); +} + +// Load pre-generated exports +export async function loadTemplateHtml(templateId: string): Promise { + const response = await fetch(`/templates/exports/${templateId}.html`); + return response.text(); +} + +export function getTemplatePdfUrl(templateId: string): string { + return `/templates/exports/${templateId}.pdf`; +} + +export function getTemplateImageUrl(templateId: string): string { + return `/templates/exports/${templateId}.png`; +} +``` + +### Auto-Select Initial Template + +The app automatically selects the initial template on load: + +```typescript +// In App.tsx +useEffect(() => { + const loadInitialTemplate = async () => { + try { + const initialTemplateId = 'beefree-sdk-demo-template'; + const templateData = await loadTemplate(initialTemplateId); + + setSelectedTemplate({ + id: templateData.id, + name: templateData.name, + display_name: templateData.display_name || templateData.name, + title: templateData.title, + json_data: templateData.json_data, + data: { templateId: templateData.id } + }); + } catch (err) { + console.error('Failed to load initial template:', err); + } + }; + + loadInitialTemplate(); +}, []); // Run once on mount +``` + +### Export Handlers + +All export handlers follow the same pattern: + +```typescript +const handleGetHtml = async () => { + const templateId = (selectedTemplate?.data as any)?.templateId; + if (!templateId) { + alert('Template ID not found'); + return; + } + + // Warn user about static export + alert('⚠️ Warning: This will export the ORIGINAL template. Any changes you made in the editor will NOT be included.'); + + setExportType('html'); + setExportModalOpen(true); + setExportLoading(true); + + try { + // Load pre-generated static HTML file + const html = await loadTemplateHtml(templateId); + + setExportContent(html); + setExportLoading(false); + } catch (err: unknown) { + const errorMessage = err instanceof Error ? err.message : 'Unknown error'; + console.error('HTML export error:', err); + alert('Failed to export HTML: ' + errorMessage); + setExportModalOpen(false); + } +}; +``` + +### Benefits + +1. **No API Calls During Export** - Faster export operations +2. **Predictable File Sizes** - All exports pre-generated +3. **No API Rate Limits** - Static files served from CDN +4. **Offline Capable** - Works without internet (after initial load) +5. **Simple Deployment** - Just static files on Vercel + +### Limitations + +1. **User Edits Not Saved** - Exports always show original template +2. **Storage Requirements** - All export formats stored as static files + +### Best Practices + +1. **Always warn users** - Show alert before export that edits won't be included +2. **Version control** - Commit all generated files to git +3. **Clear communication** - Document the static export behavior in UI + +> **Note**: If you want to see sample code for real-time Content Services API integration, visit the official Beefree SDK code samples repository. --- ## Export Endpoints (Content Services API) +> **Note**: This section is kept for reference only. The current application uses pre-generated static exports instead of real-time Content Services API calls. For working examples of Content Services API integration, visit the official Beefree SDK code samples repository. + ### Overview The Content Services API provides endpoints to export Beefree designs to various formats: HTML, Plain Text, PDF, and Image. The key to making these work correctly is understanding the proper request/response flow and data handling. @@ -631,7 +777,7 @@ onSave: ( ) => { const parsedJson = typeof jsonFile === 'string' ? JSON.parse(jsonFile) : jsonFile; - // Log template JSON to browser console + // Log the template JSON to browser console console.log('💾 onSave - Template JSON:', parsedJson); if (htmlFile) { console.log('💾 onSave - HTML:', htmlFile); @@ -690,7 +836,7 @@ useEffect(() => { const currentConfig: BeefreeConfig = configText ? JSON.parse(configText) : { container: 'beefree-react-demo' }; if (enabled) { - currentConfig.customCss = "https://zairro.github.io/beefree-custom-css/beefree-custom-design.css"; + currentConfig.customCss = "/assets/css/beefree-custom-design.css"; } else { delete currentConfig.customCss; } @@ -721,14 +867,14 @@ const handleCustomCssToggle = (enabled: boolean) => { **Property**: `customCss: string` -**When enabled**: Adds external CSS URL to beeConfig +**When enabled**: Adds local CSS file URL to beeConfig **When disabled**: Removes `customCss` property ```typescript // Enabled { container: 'beefree-react-demo', - customCss: "https://zairro.github.io/beefree-custom-css/beefree-custom-design.css" + customCss: "/assets/css/beefree-custom-design.css" } // Disabled @@ -849,7 +995,7 @@ const handleHtmlImport = async (html) => { }); if (!response.ok) { - const errorData = await response.json(); + const errorData = await response.json().catch(() => ({ error: 'Failed to import HTML' })); throw new Error(errorData.error || 'Failed to import HTML'); } @@ -1109,8 +1255,8 @@ app.post('/apply-brand-styles', async (req, res) => { 1. **Always validate configuration** before making API calls 2. **Use try-catch blocks** for async operations -3. **Provide user-friendly error messages** -4. **Log detailed errors** for debugging +3. **Provide user-friendly error messages** with `alert()` for critical failures +4. **Log detailed errors** to console for debugging 5. **Handle network failures gracefully** ### Frontend Error Handling Pattern diff --git a/README.md b/README.md index 9bb05c7..b1dc65e 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,6 @@ A comprehensive demonstration of Beefree SDK integration featuring Template Catalog, Content Services exports, HTML Import, configuration toggles, and real-time change tracking. -**Ready for team review** ✅ - All documentation updated, security best practices applied, clean code standards enforced. - ![Beefree SDK](https://d15k2d11r6t6rl.cloudfront.net/pub/bfra/bs0kfqbg/tqu/rwx/rj4/Logo%20version%3DColored%2C%20Name%3DOn.svg) --- @@ -19,24 +17,14 @@ A comprehensive demonstration of Beefree SDK integration featuring Template Cata - Module grouping configuration - Editable beeConfig with live preview -### 📚 Template Catalog -- Browse 10 professional templates -- One-click template loading -- Seamless template switching - -### 📤 Content Services Exports -- **HTML Export** - Download responsive HTML -- **Plain Text Export** - Text-only version -- **PDF Export** - Auto-generates PDF with custom page settings -- **Image Export** - Creates PNG thumbnail - -> **Smart Auto-Generation**: PDF and Image exports automatically generate HTML first - no manual steps needed! - ### 📥 HTML Import - Load sample newsletter template - Converts HTML → Beefree JSON - One-click import +### 📤 Exports +Content Services API exports are emulated. This means that all exports are static files generated at build time. User edits in the editor are NOT included in exports. A warning is displayed before each export. If you want to see some sample code to interact with Content Services API, head to the official SDK code sample official repo. + ### 🎨 Configuration Toggles - **Apply Custom CSS** - Inject external CSS stylesheet - **Move Sidebar** - Toggle sidebar position (left/right) @@ -105,7 +93,15 @@ playground-demo/ │ └── App.css # Global styles │ ├── public/ -│ └── template.json # Default template +│ ├── template.json # Initial template (loaded on app start) +│ └── templates/ # Static template exports +│ ├── index.json # Template catalog index +│ ├── *.json # Template metadata + JSON +│ └── exports/ # Pre-generated exports +│ ├── *.html # HTML versions +│ ├── *.txt # Plain text versions +│ ├── *.pdf # PDF versions +│ └── *.png # Image versions │ ├── proxy-server.js # Express server (local dev) ├── vercel.json # Vercel configuration @@ -119,28 +115,17 @@ playground-demo/ - **React 18** + **TypeScript** - UI framework - **Vite** - Build tool and dev server - **Beefree SDK 9.2.1** - Email/page builder -- **Vercel Serverless Functions** - Backend +- **Node.js/Express** - Backend - **Axios** - HTTP client --- ## 📊 API Endpoints -### Serverless Functions (8 total) - | Endpoint | Method | Purpose | |----------|--------|---------| | `/proxy/bee-auth` | POST | Authenticate with Beefree | -| `/api/templates` | GET | List templates from catalog | -| `/api/templates/{id}` | GET | Get single template | | `/v1/html-importer` | POST | Convert HTML to Beefree JSON | -| `/v1/message/html` | POST | Export template to HTML | -| `/v1/message/plain-text` | POST | Export template to plain text | -| `/v1/message/pdf` | POST | Export HTML to PDF | -| `/v1/message/image` | POST | Export HTML to PNG image | - -**Vercel Free Tier:** 12 function limit -**Current Usage:** 8 functions ✅ --- @@ -148,45 +133,33 @@ playground-demo/ ### Template Loading Flow ``` -1. User selects template from dropdown +1. App loads → Initial template auto-selected (beefree-sdk-demo-template) ↓ -2. Fetch full template via /api/templates/{id} +2. User can select different template from dropdown ↓ -3. Call window.loadTemplate(templateData) +3. Load template JSON from /templates/{id}.json ↓ -4. Beefree SDK loads template into editor +4. Call window.loadTemplate(templateData) ↓ -5. User can edit and export -``` - -### Export Flow (HTML, Plain Text) -``` -1. User clicks Export → HTML - ↓ -2. Modal opens with "Exporting..." +5. Beefree SDK loads template into editor ↓ -3. Send currentJson to /v1/message/html - ↓ -4. API returns HTML - ↓ -5. Display in modal with download button +6. User can edit (edits NOT saved to exports) ``` -### Export Flow (PDF, Image) - With Auto-HTML +### Export Flow (All Formats) ``` -1. User clicks Export → PDF - ↓ -2. Modal opens with "Creating PDF..." +1. User clicks Export → [Format] ↓ -3. Check if HTML exists - - NO: Auto-generate HTML first ✨ - - YES: Use existing HTML +2. Warning alert: "User edits NOT included" ↓ -4. Send HTML to /v1/message/pdf +3. User confirms ↓ -5. API returns PDF URL +4. Load pre-generated static file from /templates/exports/ ↓ -6. Display "Open PDF" button in modal +5. Display in modal + - HTML/Text: Show in textarea + - PDF: Show "Open PDF" button + - Image: Show thumbnail ``` ### Configuration Toggles Flow @@ -451,18 +424,18 @@ PORT=3001 ### Local Testing Checklist -- [ ] Builder initializes with default template -- [ ] Template dropdown shows 10 templates +- [ ] Builder initializes with "Beefree SDK Demo Template" auto-selected +- [ ] Template dropdown shows 9 templates - [ ] Selecting template loads it in editor - [ ] Custom CSS toggle works (check JSON updates) - [ ] Move Sidebar toggle works (sidebar moves left/right) - [ ] Group Content Tiles toggle works (modules grouped) - [ ] onChange logs template JSON to console when editing - [ ] onSave logs template JSON to console when saving -- [ ] Export HTML works -- [ ] Export Plain Text works -- [ ] Export PDF works (auto-generates HTML) -- [ ] Export Image works (auto-generates HTML) +- [ ] Export HTML shows warning, then displays pre-generated HTML +- [ ] Export Plain Text shows warning, then displays pre-generated text +- [ ] Export PDF shows warning, then displays PDF link +- [ ] Export Image shows warning, then displays pre-generated image - [ ] Import HTML loads sample newsletter - [ ] Edit beeConfig + Apply changes restarts editor @@ -500,17 +473,21 @@ See LICENSE file for details. ## 🎉 Features Highlights -✅ **8 Serverless Functions** - Under Vercel free tier limit -✅ **Auto-HTML Generation** - PDF/Image exports just work -✅ **3 Configuration Toggles** - CSS, Sidebar, Module Groups -✅ **onChange/onSave Callbacks** - Template changes logged to console -✅ **500px Config Sidebar** - Comfortable JSON editing -✅ **Modal-Based Exports** - Professional UX -✅ **Sample Newsletter** - One-click HTML import -✅ **Fully Commented Code** - Easy to understand and extend -✅ **Security Best Practices** - Secure API key management -✅ **Clean Code Standards** - TypeScript, async/await, error handling -✅ **Vercel Ready** - Deploy in minutes +✅ **Static Template System** - 9 pre-exported templates with all formats +✅ **Auto-Selected Initial Template** - Ready to use on app load +✅ **Static Export System** - Pre-generated HTML, PDF, PNG, TXT files +✅ **Export Warnings** - Clear alerts that user edits aren't included +✅ **3 Configuration Toggles** - CSS, Sidebar, Module Groups +✅ **onChange/onSave Callbacks** - Template changes logged to console +✅ **500px Config Sidebar** - Comfortable JSON editing +✅ **Modal-Based Exports** - Professional UX +✅ **Sample Newsletter** - One-click HTML import +✅ **Fully Commented Code** - Easy to understand and extend +✅ **Security Best Practices** - Secure API key management +✅ **Clean Code Standards** - TypeScript, async/await, error handling +✅ **No Dark Mode** - Clean light theme only +✅ **No User Tracking** - Privacy-focused +✅ **Vercel Ready** - Deploy in minutes Built with ❤️ using Beefree SDK diff --git a/api/proxy/__tests__/bee-auth.test.js b/api/proxy/__tests__/bee-auth.test.js new file mode 100644 index 0000000..ca3f70c --- /dev/null +++ b/api/proxy/__tests__/bee-auth.test.js @@ -0,0 +1,146 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import axios from 'axios'; +import handler from '../bee-auth.js'; + +vi.mock('axios'); + +describe('bee-auth endpoint', () => { + let mockReq; + let mockRes; + + beforeEach(() => { + vi.clearAllMocks(); + + mockReq = { + method: 'POST', + body: {}, + }; + + mockRes = { + status: vi.fn().mockReturnThis(), + json: vi.fn(), + }; + + // Set environment variables + process.env.BEE_CLIENT_ID = 'test-client-id'; + process.env.BEE_CLIENT_SECRET = 'test-client-secret'; + }); + + it('should return 405 for non-POST requests', async () => { + mockReq.method = 'GET'; + + await handler(mockReq, mockRes); + + expect(mockRes.status).toHaveBeenCalledWith(405); + expect(mockRes.json).toHaveBeenCalledWith({ error: 'Method not allowed' }); + }); + + it('should authenticate successfully with default uid', async () => { + const mockAuthResponse = { + data: { + token: 'test-token-123', + access_token: 'access-token-456', + }, + }; + + axios.post.mockResolvedValue(mockAuthResponse); + + mockReq.body = {}; + + await handler(mockReq, mockRes); + + expect(axios.post).toHaveBeenCalledWith( + 'https://auth.getbee.io/loginV2', + { + client_id: 'test-client-id', + client_secret: 'test-client-secret', + uid: 'demo-user', + }, + { headers: { 'Content-Type': 'application/json' } } + ); + + expect(mockRes.json).toHaveBeenCalledWith(mockAuthResponse.data); + }); + + it('should authenticate successfully with custom uid', async () => { + const mockAuthResponse = { + data: { + token: 'test-token-789', + access_token: 'access-token-012', + }, + }; + + axios.post.mockResolvedValue(mockAuthResponse); + + mockReq.body = { uid: 'custom-user-123' }; + + await handler(mockReq, mockRes); + + expect(axios.post).toHaveBeenCalledWith( + 'https://auth.getbee.io/loginV2', + { + client_id: 'test-client-id', + client_secret: 'test-client-secret', + uid: 'custom-user-123', + }, + { headers: { 'Content-Type': 'application/json' } } + ); + + expect(mockRes.json).toHaveBeenCalledWith(mockAuthResponse.data); + }); + + it('should handle authentication errors', async () => { + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + + axios.post.mockRejectedValue(new Error('Network error')); + + mockReq.body = { uid: 'test-user' }; + + await handler(mockReq, mockRes); + + expect(mockRes.status).toHaveBeenCalledWith(500); + expect(mockRes.json).toHaveBeenCalledWith({ error: 'Failed to authenticate' }); + expect(consoleErrorSpy).toHaveBeenCalledWith('Auth error:', 'Network error'); + + consoleErrorSpy.mockRestore(); + }); + + it('should handle axios errors with response', async () => { + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + + const axiosError = new Error('Request failed'); + axiosError.response = { + status: 401, + data: { message: 'Invalid credentials' }, + }; + + axios.post.mockRejectedValue(axiosError); + + await handler(mockReq, mockRes); + + expect(mockRes.status).toHaveBeenCalledWith(500); + expect(mockRes.json).toHaveBeenCalledWith({ error: 'Failed to authenticate' }); + + consoleErrorSpy.mockRestore(); + }); + + it('should use environment variables for authentication', async () => { + const mockAuthResponse = { data: { token: 'test' } }; + axios.post.mockResolvedValue(mockAuthResponse); + + process.env.BEE_CLIENT_ID = 'custom-client-id'; + process.env.BEE_CLIENT_SECRET = 'custom-secret'; + + await handler(mockReq, mockRes); + + expect(axios.post).toHaveBeenCalledWith( + 'https://auth.getbee.io/loginV2', + { + client_id: 'custom-client-id', + client_secret: 'custom-secret', + uid: 'demo-user', + }, + { headers: { 'Content-Type': 'application/json' } } + ); + }); +}); diff --git a/api/templates/[id].js b/api/templates/[id].js deleted file mode 100644 index bed823b..0000000 --- a/api/templates/[id].js +++ /dev/null @@ -1,64 +0,0 @@ -import axios from 'axios'; - -/** - * Template Catalog - Get Single Template - * - * GET /api/templates/{id} - * - * Purpose: Fetch full template details including json_data - * - * URL Parameters: - * - id: Template ID or slug - * - * Response: Template object with full JSON data - * - * Environment Variables Required: - * - TEMPLATE_CATALOG_API_TOKEN - * - * External API: https://api.getbee.io/v1/catalog/templates/{id} - */ -export default async function handler(req, res) { - if (req.method !== 'GET') { - return res.status(405).json({ error: 'Method not allowed' }); - } - - try { - const TEMPLATE_CATALOG_API_TOKEN = process.env.TEMPLATE_CATALOG_API_TOKEN; - const TEMPLATE_CATALOG_API_URL = process.env.TEMPLATE_CATALOG_API_URL || 'https://api.getbee.io/v1/catalog'; - - if (!TEMPLATE_CATALOG_API_TOKEN) { - return res.status(500).json({ error: 'Template Catalog API Token not configured' }); - } - - // Vercel dynamic route: [id].js extracts ID from URL - const { id } = req.query; - - if (!id) { - return res.status(400).json({ error: 'Template ID is required' }); - } - - const apiUrl = `${TEMPLATE_CATALOG_API_URL}/templates/${id}`; - console.log('Fetching template:', apiUrl); - - const response = await axios.get(apiUrl, { - headers: { - 'Authorization': `Bearer ${TEMPLATE_CATALOG_API_TOKEN}`, - 'Content-Type': 'application/json' - } - }); - - console.log('Template fetched successfully:', id); - res.json(response.data); - } catch (error) { - console.error('Template fetch error:', { - id: req.query.id, - message: error.message, - status: error.response?.status, - data: error.response?.data - }); - res.status(error.response?.status || 500).json({ - error: error.response?.data?.message || error.message || 'Failed to fetch template' - }); - } -} - diff --git a/api/templates/index.js b/api/templates/index.js deleted file mode 100644 index bab140d..0000000 --- a/api/templates/index.js +++ /dev/null @@ -1,74 +0,0 @@ -import axios from 'axios'; - -/** - * Template Catalog - Get Templates List - * - * GET /api/templates?limit=10&offset=0&category=...&collection=... - * - * Purpose: Fetch templates from Beefree Template Catalog API - * - * Query Parameters: - * - limit: Number of templates to return (default: 20) - * - offset: Pagination offset (default: 0) - * - category: Filter by category ID - * - collection: Filter by collection ID - * - designer: Filter by designer ID - * - tag: Filter by tag - * - * Response: Array of templates with metadata - * - * Environment Variables Required: - * - TEMPLATE_CATALOG_API_TOKEN - * - * External API: https://api.getbee.io/v1/catalog/templates - */ -export default async function handler(req, res) { - if (req.method !== 'GET') { - return res.status(405).json({ error: 'Method not allowed' }); - } - - try { - const TEMPLATE_CATALOG_API_TOKEN = process.env.TEMPLATE_CATALOG_API_TOKEN; - const TEMPLATE_CATALOG_API_URL = process.env.TEMPLATE_CATALOG_API_URL || 'https://api.getbee.io/v1/catalog'; - - if (!TEMPLATE_CATALOG_API_TOKEN) { - return res.status(500).json({ error: 'Template Catalog API Token not configured' }); - } - - // Extract query parameters for filtering and pagination - const { category, collection, designer, tag, limit = 20, offset = 0 } = req.query; - - const params = new URLSearchParams(); - if (category) params.append('category', category); - if (collection) params.append('collection', collection); - if (designer) params.append('designer', designer); - if (tag) params.append('tag', tag); - params.append('limit', String(limit)); - params.append('offset', String(offset)); - - const queryString = params.toString(); - const apiUrl = `${TEMPLATE_CATALOG_API_URL}/templates?${queryString}`; - - console.log('Fetching templates from:', apiUrl); - - const response = await axios.get(apiUrl, { - headers: { - 'Authorization': `Bearer ${TEMPLATE_CATALOG_API_TOKEN}`, - 'Content-Type': 'application/json' - } - }); - - console.log('Templates fetched successfully:', response.data?.length || 'unknown count'); - res.json(response.data); - } catch (error) { - console.error('Templates API error:', { - message: error.message, - status: error.response?.status, - data: error.response?.data - }); - res.status(error.response?.status || 500).json({ - error: error.response?.data?.message || error.message || 'Failed to fetch templates' - }); - } -} - diff --git a/api/v1/__tests__/html-importer.test.js b/api/v1/__tests__/html-importer.test.js new file mode 100644 index 0000000..260a32e --- /dev/null +++ b/api/v1/__tests__/html-importer.test.js @@ -0,0 +1,208 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import axios from 'axios'; +import handler from '../html-importer.js'; + +vi.mock('axios'); + +describe('html-importer endpoint', () => { + let mockReq; + let mockRes; + + beforeEach(() => { + vi.clearAllMocks(); + + mockReq = { + method: 'POST', + body: { html: 'User HTML that will be ignored' }, + }; + + mockRes = { + status: vi.fn().mockReturnThis(), + json: vi.fn(), + }; + + // Set environment variables + process.env.HTML_IMPORTER_API_KEY = 'test-api-key'; + process.env.HTML_IMPORTER_URL = 'https://api.getbee.io/v1/conversion/html-to-json'; + + // Mock console.log to suppress output during tests + vi.spyOn(console, 'log').mockImplementation(() => {}); + }); + + it('should return 405 for non-POST requests', async () => { + mockReq.method = 'GET'; + + await handler(mockReq, mockRes); + + expect(mockRes.status).toHaveBeenCalledWith(405); + expect(mockRes.json).toHaveBeenCalledWith({ error: 'Method not allowed' }); + }); + + it('should return 500 if HTML_IMPORTER_API_KEY is not configured', async () => { + delete process.env.HTML_IMPORTER_API_KEY; + + await handler(mockReq, mockRes); + + expect(mockRes.status).toHaveBeenCalledWith(500); + expect(mockRes.json).toHaveBeenCalledWith({ error: 'HTML Importer API Key not configured' }); + }); + + it('should convert hardcoded sample HTML successfully', async () => { + const mockConvertedJson = { + data: { + page: { + body: { content: {} }, + rows: [], + }, + }, + }; + + axios.post.mockResolvedValue(mockConvertedJson); + + await handler(mockReq, mockRes); + + // Should call axios with hardcoded HTML (not from request body) + expect(axios.post).toHaveBeenCalledWith( + 'https://api.getbee.io/v1/conversion/html-to-json', + expect.stringContaining(''), // Hardcoded sample HTML + { + headers: { + 'Authorization': 'Bearer test-api-key', + 'Content-Type': 'text/html', + }, + timeout: 30000, + maxContentLength: Infinity, + maxBodyLength: Infinity, + } + ); + + expect(mockRes.json).toHaveBeenCalledWith(mockConvertedJson.data); + }); + + it('should ignore user-provided HTML and only convert hardcoded sample', async () => { + const mockConvertedJson = { data: { page: {} } }; + axios.post.mockResolvedValue(mockConvertedJson); + + mockReq.body = { html: 'Malicious HTML' }; + + await handler(mockReq, mockRes); + + // Verify the hardcoded sample HTML is used (starts with ) + const calledHtml = axios.post.mock.calls[0][1]; + expect(calledHtml).toContain(''); + expect(calledHtml).toContain('Beefree SDK Newsletter'); + expect(calledHtml).not.toContain('Malicious HTML'); + }); + + it('should handle 413 Payload Too Large error', async () => { + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + + const error = new Error('Payload too large'); + error.response = { status: 413, data: {} }; + axios.post.mockRejectedValue(error); + + await handler(mockReq, mockRes); + + expect(mockRes.status).toHaveBeenCalledWith(413); + expect(mockRes.json).toHaveBeenCalledWith({ error: 'HTML content too large' }); + + consoleErrorSpy.mockRestore(); + }); + + it('should handle 422 Invalid HTML error', async () => { + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + + const error = new Error('Invalid HTML'); + error.response = { + status: 422, + data: { message: 'HTML syntax error' }, + }; + axios.post.mockRejectedValue(error); + + await handler(mockReq, mockRes); + + expect(mockRes.status).toHaveBeenCalledWith(422); + expect(mockRes.json).toHaveBeenCalledWith({ + error: 'Invalid HTML format: HTML syntax error', + }); + + consoleErrorSpy.mockRestore(); + }); + + it('should handle timeout error (ECONNABORTED)', async () => { + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + + const error = new Error('Timeout'); + error.code = 'ECONNABORTED'; + axios.post.mockRejectedValue(error); + + await handler(mockReq, mockRes); + + expect(mockRes.status).toHaveBeenCalledWith(408); + expect(mockRes.json).toHaveBeenCalledWith({ error: 'Request timeout - HTML processing took too long' }); + + consoleErrorSpy.mockRestore(); + }); + + it('should handle general errors', async () => { + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + + const error = new Error('Network error'); + axios.post.mockRejectedValue(error); + + await handler(mockReq, mockRes); + + expect(mockRes.status).toHaveBeenCalledWith(500); + expect(mockRes.json).toHaveBeenCalledWith({ + error: 'Failed to import HTML: Network error', + }); + + consoleErrorSpy.mockRestore(); + }); + + it('should use default HTML_IMPORTER_URL if not provided', async () => { + delete process.env.HTML_IMPORTER_URL; + + const mockConvertedJson = { data: { page: {} } }; + axios.post.mockResolvedValue(mockConvertedJson); + + await handler(mockReq, mockRes); + + expect(axios.post).toHaveBeenCalledWith( + 'https://api.getbee.io/v1/conversion/html-to-json', + expect.any(String), + expect.any(Object) + ); + }); + + it('should use custom HTML_IMPORTER_URL if provided', async () => { + process.env.HTML_IMPORTER_URL = 'https://custom-api.example.com/convert'; + + const mockConvertedJson = { data: { page: {} } }; + axios.post.mockResolvedValue(mockConvertedJson); + + await handler(mockReq, mockRes); + + expect(axios.post).toHaveBeenCalledWith( + 'https://custom-api.example.com/convert', + expect.any(String), + expect.any(Object) + ); + }); + + it('should send hardcoded sample HTML with correct structure', async () => { + const mockConvertedJson = { data: { page: {} } }; + axios.post.mockResolvedValue(mockConvertedJson); + + await handler(mockReq, mockRes); + + const calledHtml = axios.post.mock.calls[0][1]; + + // Verify sample HTML structure + expect(calledHtml).toContain(''); + expect(calledHtml).toContain('Beefree SDK Newsletter'); + expect(calledHtml).toContain('Recipe of the month'); + expect(calledHtml).toContain('Industry news'); + expect(calledHtml).toContain('Changelog highlights'); + }); +}); diff --git a/api/v1/html-importer.js b/api/v1/html-importer.js index dd55922..02e2f2e 100644 --- a/api/v1/html-importer.js +++ b/api/v1/html-importer.js @@ -2,70 +2,463 @@ import axios from 'axios'; /** * HTML Importer Endpoint - * + * * POST /v1/html-importer - * - * Purpose: Convert raw HTML emails to Beefree-compatible JSON - * - * Request Body: - * { html: '...' } - * - * Response: Beefree template JSON - * + * + * Purpose: Convert predefined sample HTML newsletter to Beefree-compatible JSON + * + * Security: + * - Only converts hardcoded sample HTML (no arbitrary HTML conversion) + * - Request body is ignored to prevent API abuse + * - Prevents unauthorized use of paid HTML-to-JSON service + * * Environment Variables Required: * - HTML_IMPORTER_API_KEY - * + * * External API: https://api.getbee.io/v1/conversion/html-to-json * Content-Type: text/html (NOT application/json!) - * - * Security: - * - Sanitizes HTML to remove scripts, iframes, event handlers - * - 500KB size limit - * - 30 second timeout */ /** - * HTML Sanitization Function - * Removes potentially dangerous HTML elements and attributes + * Hardcoded Sample HTML Newsletter + * This is the ONLY HTML that can be converted via this endpoint + * Any HTML sent from the frontend is ignored */ -const sanitizeHtml = (html) => { - if (typeof html !== 'string') { - return { content: '', wasModified: false }; - } +const SAMPLE_NEWSLETTER_HTML = ` + + + Beefree SDK Newsletter + + + + + + + + + + + + + + + +`; export default async function handler(req, res) { if (req.method !== 'POST') { @@ -80,27 +473,15 @@ export default async function handler(req, res) { return res.status(500).json({ error: 'HTML Importer API Key not configured' }); } - const { html } = req.body; - - if (!html || typeof html !== 'string') { - return res.status(400).json({ error: 'HTML content is required' }); - } - - console.log('Processing HTML import request...'); - console.log('HTML content length:', html.length, 'characters'); - - // Sanitize HTML - const sanitizationResult = sanitizeHtml(html); - const sanitizedHtml = sanitizationResult.content; + // SECURITY: Ignore any HTML from request body + // Only convert the hardcoded sample HTML to prevent API abuse + console.log('Processing sample HTML import request...'); + console.log('Using hardcoded sample newsletter HTML'); - if (sanitizedHtml.length > 500000) { // 500KB limit - return res.status(413).json({ error: 'HTML content too large (max 500KB)' }); - } - - // Call Beefree HTML Importer API + // Call Beefree HTML Importer API with hardcoded HTML const response = await axios.post( HTML_IMPORTER_URL, - sanitizedHtml, + SAMPLE_NEWSLETTER_HTML, { headers: { 'Authorization': `Bearer ${HTML_IMPORTER_API_KEY}`, @@ -116,18 +497,18 @@ export default async function handler(req, res) { res.json(response.data); } catch (error) { console.error('HTML import error:', error.response?.data || error.message); - + if (error.response?.status === 413) { res.status(413).json({ error: 'HTML content too large' }); } else if (error.response?.status === 422) { - res.status(422).json({ - error: 'Invalid HTML format: ' + (error.response?.data?.message || 'Please check the HTML content') + res.status(422).json({ + error: 'Invalid HTML format: ' + (error.response?.data?.message || 'Please check the HTML content') }); } else if (error.code === 'ECONNABORTED') { res.status(408).json({ error: 'Request timeout - HTML processing took too long' }); } else { - res.status(500).json({ - error: 'Failed to import HTML: ' + (error.response?.data?.message || error.message) + res.status(500).json({ + error: 'Failed to import HTML: ' + (error.response?.data?.message || error.message) }); } } diff --git a/api/v1/message/html.js b/api/v1/message/html.js deleted file mode 100644 index 6f20818..0000000 --- a/api/v1/message/html.js +++ /dev/null @@ -1,56 +0,0 @@ -import axios from 'axios'; - -/** - * Content Services - HTML Export - * - * POST /v1/message/html - * - * Purpose: Convert Beefree template JSON to HTML email - * - * Request Body: Template JSON (the entire template object) - * - * Response: HTML string (may be wrapped in JSON with body.html) - * - * Environment Variables Required: - * - CS_API_TOKEN (Content Services API token) - * - * External API: https://api.getbee.io/v1/message/html - * - * Note: Response handling on frontend checks for both: - * - Plain HTML string - * - JSON-wrapped HTML in body.html property - */ -export default async function handler(req, res) { - if (req.method !== 'POST') { - return res.status(405).json({ error: 'Method not allowed' }); - } - - // Ensure Bearer prefix on token - const CS_API_TOKEN = process.env.CS_API_TOKEN; - const CS_AUTH = CS_API_TOKEN?.startsWith('Bearer ') ? CS_API_TOKEN : (CS_API_TOKEN ? `Bearer ${CS_API_TOKEN}` : ''); - - if (!CS_AUTH) { - console.error('CS_API_TOKEN not configured'); - return res.status(500).json({ error: 'CS_API_TOKEN is not configured' }); - } - - try { - console.log('HTML export requested'); - const payload = typeof req.body === 'string' ? req.body : JSON.stringify(req.body); - - const response = await axios.post('https://api.getbee.io/v1/message/html', payload, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': CS_AUTH - } - }); - - console.log('HTML export successful'); - res.status(200).send(response.data); - } catch (error) { - const details = error.response?.data || error.message || 'Unknown error'; - console.error('HTML export error:', details); - res.status(500).json({ message: 'Error exporting to HTML', details }); - } -} - diff --git a/api/v1/message/image.js b/api/v1/message/image.js deleted file mode 100644 index 88f7ea6..0000000 --- a/api/v1/message/image.js +++ /dev/null @@ -1,63 +0,0 @@ -import axios from 'axios'; - -/** - * Content Services - Image Export (Thumbnail) - * - * POST /v1/message/image - * - * Purpose: Convert HTML email to PNG thumbnail image - * - * IMPORTANT: This endpoint requires HTML, NOT template JSON! - * Frontend auto-generates HTML first if not already done. - * - * Request Body: - * { - * "html": "...", - * "file_type": "png", // or "jpg" - * "size": "1000" // Width in pixels - * } - * - * Response: Binary PNG data (arraybuffer) - * Frontend converts to Blob and creates object URL for display - * - * Environment Variables Required: - * - CS_API_TOKEN (Content Services API token) - * - * External API: https://api.getbee.io/v1/message/image - */ -export default async function handler(req, res) { - if (req.method !== 'POST') { - return res.status(405).json({ error: 'Method not allowed' }); - } - - const CS_API_TOKEN = process.env.CS_API_TOKEN; - const CS_AUTH = CS_API_TOKEN?.startsWith('Bearer ') ? CS_API_TOKEN : (CS_API_TOKEN ? `Bearer ${CS_API_TOKEN}` : ''); - - if (!CS_AUTH) { - console.error('CS_API_TOKEN not configured'); - return res.status(500).json({ error: 'CS_API_TOKEN is not configured' }); - } - - try { - console.log('Image export requested'); - const payload = typeof req.body === 'string' ? req.body : JSON.stringify(req.body); - - const response = await axios.post('https://api.getbee.io/v1/message/image', payload, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': CS_AUTH - }, - responseType: 'arraybuffer' - }); - - console.log('Image export successful'); - res.setHeader('Content-Type', 'image/png'); - res.setHeader('Content-Disposition', 'inline'); - res.status(200).send(response.data); - } catch (error) { - const details = error.response?.data || error.message || 'Unknown error'; - console.error('Image export error:', details); - res.status(500).json({ message: 'Error exporting to image', details }); - } -} - diff --git a/api/v1/message/pdf.js b/api/v1/message/pdf.js deleted file mode 100644 index f6c7f04..0000000 --- a/api/v1/message/pdf.js +++ /dev/null @@ -1,60 +0,0 @@ -import axios from 'axios'; - -/** - * Content Services - PDF Export - * - * POST /v1/message/pdf - * - * Purpose: Convert HTML email to PDF - * - * IMPORTANT: This endpoint requires HTML, NOT template JSON! - * Frontend auto-generates HTML first if not already done. - * - * Request Body: - * { - * "html": "...", - * "page_size": "Full", // or "A4", "Letter", etc. - * "page_orientation": "landscape" // or "portrait" - * } - * - * Response: - * { body: { url: "https://..." } } // PDF download URL - * - * Environment Variables Required: - * - CS_API_TOKEN (Content Services API token) - * - * External API: https://api.getbee.io/v1/message/pdf - */ -export default async function handler(req, res) { - if (req.method !== 'POST') { - return res.status(405).json({ error: 'Method not allowed' }); - } - - const CS_API_TOKEN = process.env.CS_API_TOKEN; - const CS_AUTH = CS_API_TOKEN?.startsWith('Bearer ') ? CS_API_TOKEN : (CS_API_TOKEN ? `Bearer ${CS_API_TOKEN}` : ''); - - if (!CS_AUTH) { - console.error('CS_API_TOKEN not configured'); - return res.status(500).json({ error: 'CS_API_TOKEN is not configured' }); - } - - try { - console.log('PDF export requested'); - const payload = typeof req.body === 'string' ? req.body : JSON.stringify(req.body); - - const response = await axios.post('https://api.getbee.io/v1/message/pdf', payload, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': CS_AUTH - } - }); - - console.log('PDF export successful'); - res.status(200).send(response.data); - } catch (error) { - const details = error.response?.data || error.message || 'Unknown error'; - console.error('PDF export error:', details); - res.status(500).json({ message: 'Error exporting to PDF', details }); - } -} - diff --git a/api/v1/message/plain-text.js b/api/v1/message/plain-text.js deleted file mode 100644 index 39bb43c..0000000 --- a/api/v1/message/plain-text.js +++ /dev/null @@ -1,35 +0,0 @@ -import axios from 'axios'; - -export default async function handler(req, res) { - if (req.method !== 'POST') { - return res.status(405).json({ error: 'Method not allowed' }); - } - - const CS_API_TOKEN = process.env.CS_API_TOKEN; - const CS_AUTH = CS_API_TOKEN?.startsWith('Bearer ') ? CS_API_TOKEN : (CS_API_TOKEN ? `Bearer ${CS_API_TOKEN}` : ''); - - if (!CS_AUTH) { - console.error('CS_API_TOKEN not configured'); - return res.status(500).json({ error: 'CS_API_TOKEN is not configured' }); - } - - try { - console.log('Plain text export requested'); - const payload = typeof req.body === 'string' ? req.body : JSON.stringify(req.body); - - const response = await axios.post('https://api.getbee.io/v1/message/plain-text', payload, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': CS_AUTH - } - }); - - console.log('Plain text export successful'); - res.status(200).send(response.data); - } catch (error) { - const details = error.response?.data || error.message || 'Unknown error'; - console.error('Plain text export error:', details); - res.status(500).json({ message: 'Error exporting to plain text', details }); - } -} - diff --git a/claude.md b/docs/AI_GUIDELINES.md similarity index 84% rename from claude.md rename to docs/AI_GUIDELINES.md index 8ae8569..b553b12 100644 --- a/claude.md +++ b/docs/AI_GUIDELINES.md @@ -3,21 +3,167 @@ This document serves as a comprehensive reference guide for implementing Beefree SDK features. Use this as a knowledge base when working with the Beefree SDK integration in this project. ## Table of Contents -1. [Export Endpoints (Content Services API)](#export-endpoints-content-services-api) -2. [Template Catalog API](#template-catalog-api) -3. [Loading the Beefree SDK](#loading-the-beefree-sdk) -4. [Loading Templates in the Builder](#loading-templates-in-the-builder) -5. [onChange and onSave Callbacks](#onchange-and-onsave-callbacks) -6. [Configuration Toggles](#configuration-toggles) -7. [HTML Import Functionality](#html-import-functionality) -8. [Brand Styles API](#brand-styles-api) -9. [Error Handling](#error-handling) -10. [TypeScript Best Practices](#typescript-best-practices) +1. [Static Template System](#static-template-system) ⭐ **IN USE** +2. [Export Endpoints (Content Services API)](#export-endpoints-content-services-api) _(Reference Only)_ +3. [Template Catalog API](#template-catalog-api) _(Reference Only - Not Used)_ +4. [Loading the Beefree SDK](#loading-the-beefree-sdk) +5. [Loading Templates in the Builder](#loading-templates-in-the-builder) +6. [onChange and onSave Callbacks](#onchange-and-onsave-callbacks) +7. [Configuration Toggles](#configuration-toggles) +8. [HTML Import Functionality](#html-import-functionality) ⭐ **IN USE** +9. [Brand Styles API](#brand-styles-api) _(Reference Only - Not Used)_ +10. [Error Handling](#error-handling) +11. [TypeScript Best Practices](#typescript-best-practices) + +--- + +## Static Template System + +### Overview +This application uses a static template system where all templates and their exports (HTML, PDF, PNG, TXT) are pre-generated at build time. This eliminates the need for real-time API calls during export operations and provides a faster, more predictable user experience. + +### Key Concepts + +**IMPORTANT**: User edits made in the Beefree SDK editor are NOT saved to the static export files. Exports always show the original template. Users are warned about this with alert dialogs before each export. + +### Architecture + +``` +public/templates/ +├── index.json # Template catalog +├── beefree-sdk-demo-template.json # Template metadata + JSON +├── thanksgiving-travel.json +├── ...other templates... +└── exports/ + ├── beefree-sdk-demo-template.html # Pre-generated HTML + ├── beefree-sdk-demo-template.pdf # Pre-generated PDF + ├── beefree-sdk-demo-template.png # Pre-generated image + ├── beefree-sdk-demo-template.txt # Pre-generated text + └── ...other exports... +``` + +### Local Templates Service + +The `src/services/localTemplates.ts` service provides functions to load static templates: + +```typescript +// Load all templates from index +export async function loadAllTemplates(): Promise { + const index = await loadTemplatesIndex(); + return index.templates; +} + +// Load single template +export async function loadTemplate(templateId: string): Promise { + const response = await fetch(`/templates/${templateId}.json`); + return response.json(); +} + +// Load pre-generated exports +export async function loadTemplateHtml(templateId: string): Promise { + const response = await fetch(`/templates/exports/${templateId}.html`); + return response.text(); +} + +export function getTemplatePdfUrl(templateId: string): string { + return `/templates/exports/${templateId}.pdf`; +} + +export function getTemplateImageUrl(templateId: string): string { + return `/templates/exports/${templateId}.png`; +} +``` + +### Auto-Select Initial Template + +The app automatically selects the initial template on load: + +```typescript +// In App.tsx +useEffect(() => { + const loadInitialTemplate = async () => { + try { + const initialTemplateId = 'beefree-sdk-demo-template'; + const templateData = await loadTemplate(initialTemplateId); + + setSelectedTemplate({ + id: templateData.id, + name: templateData.name, + display_name: templateData.display_name || templateData.name, + title: templateData.title, + json_data: templateData.json_data, + data: { templateId: templateData.id } + }); + } catch (err) { + console.error('Failed to load initial template:', err); + } + }; + + loadInitialTemplate(); +}, []); // Run once on mount +``` + +### Export Handlers + +All export handlers follow the same pattern: + +```typescript +const handleGetHtml = async () => { + const templateId = (selectedTemplate?.data as any)?.templateId; + if (!templateId) { + alert('Template ID not found'); + return; + } + + // Warn user about static export + alert('⚠️ Warning: This will export the ORIGINAL template. Any changes you made in the editor will NOT be included.'); + + setExportType('html'); + setExportModalOpen(true); + setExportLoading(true); + + try { + // Load pre-generated static HTML file + const html = await loadTemplateHtml(templateId); + + setExportContent(html); + setExportLoading(false); + } catch (err: unknown) { + const errorMessage = err instanceof Error ? err.message : 'Unknown error'; + console.error('HTML export error:', err); + alert('Failed to export HTML: ' + errorMessage); + setExportModalOpen(false); + } +}; +``` + +### Benefits + +1. **No API Calls During Export** - Faster export operations +2. **Predictable File Sizes** - All exports pre-generated +3. **No API Rate Limits** - Static files served from CDN +4. **Offline Capable** - Works without internet (after initial load) +5. **Simple Deployment** - Just static files on Vercel + +### Limitations + +1. **User Edits Not Saved** - Exports always show original template +2. **Storage Requirements** - All export formats stored as static files + +### Best Practices + +1. **Always warn users** - Show alert before export that edits won't be included +2. **Version control** - Commit all generated files to git +3. **Clear communication** - Document the static export behavior in UI + +> **Note**: If you want to see sample code for real-time Content Services API integration, visit the official Beefree SDK code samples repository. --- ## Export Endpoints (Content Services API) +> **Note**: This section is kept for reference only. The current application uses pre-generated static exports instead of real-time Content Services API calls. For working examples of Content Services API integration, visit the official Beefree SDK code samples repository. + ### Overview The Content Services API provides endpoints to export Beefree designs to various formats: HTML, Plain Text, PDF, and Image. The key to making these work correctly is understanding the proper request/response flow and data handling. @@ -232,6 +378,8 @@ const CS_AUTH = RAW_CS_TOKEN.startsWith('Bearer ') ? RAW_CS_TOKEN : (RAW_CS_TOKE ## Template Catalog API +> **⚠️ NOTE:** This section is for **reference only**. This app uses **local static templates** from `public/templates/`, NOT the Template Catalog API! + ### Authentication Template Catalog API uses Bearer token authentication: @@ -690,7 +838,7 @@ useEffect(() => { const currentConfig: BeefreeConfig = configText ? JSON.parse(configText) : { container: 'beefree-react-demo' }; if (enabled) { - currentConfig.customCss = "https://zairro.github.io/beefree-custom-css/beefree-custom-design.css"; + currentConfig.customCss = "/assets/css/beefree-custom-design.css"; } else { delete currentConfig.customCss; } @@ -721,14 +869,14 @@ const handleCustomCssToggle = (enabled: boolean) => { **Property**: `customCss: string` -**When enabled**: Adds external CSS URL to beeConfig +**When enabled**: Adds local CSS file URL to beeConfig **When disabled**: Removes `customCss` property ```typescript // Enabled { container: 'beefree-react-demo', - customCss: "https://zairro.github.io/beefree-custom-css/beefree-custom-design.css" + customCss: "/assets/css/beefree-custom-design.css" } // Disabled @@ -990,6 +1138,8 @@ app.post('/v1/html-importer', async (req, res) => { ## Brand Styles API +> **⚠️ NOTE:** This section is for **reference only**. This app does NOT use the Brand Styles API! + ### Overview The Brand Styles API applies consistent branding (fonts, colors, etc.) to templates. @@ -1196,27 +1346,50 @@ app.post('/api/endpoint', async (req, res) => { Always use environment variables for sensitive data: ```bash +# ===== REQUIRED (for this app) ===== # Beefree SDK Authentication BEE_CLIENT_ID=your_client_id BEE_CLIENT_SECRET=your_client_secret -# Template Catalog API -TEMPLATE_CATALOG_API_TOKEN=your_catalog_token +# ===== OPTIONAL (for this app) ===== +# HTML Importer API (only needed for "Import HTML" feature) +HTML_IMPORTER_API_KEY=your_importer_key -# Content Services API -CS_API_TOKEN=your_cs_token +# ===== NOT USED (by this app) ===== +# Template Catalog API - NOT NEEDED (app uses local templates) +# TEMPLATE_CATALOG_API_TOKEN=your_catalog_token -# Brand Styles API -BRAND_STYLE_API_TOKEN=your_brand_token +# Content Services API - NOT NEEDED (app uses pre-generated exports) +# CS_API_TOKEN=your_cs_token -# HTML Importer API -HTML_IMPORTER_API_KEY=your_importer_key +# Brand Styles API - NOT USED (feature not implemented) +# BRAND_STYLE_API_TOKEN=your_brand_token ``` --- ## Quick Reference: API Endpoints +### Endpoints Used by This App + +| Feature | Endpoint | Method | Input | Output | +|---------|----------|--------|-------|--------| +| Auth (LoginV2) | `https://auth.getbee.io/loginV2` | POST | client_id, client_secret, uid | Token | +| HTML Import | `/v1/conversion/html-to-json` | POST | HTML string (text/html) | Template JSON | + +### Static File Endpoints (This App) + +| Feature | Path | Method | Notes | +|---------|------|--------|-------| +| Template List | `/templates/index.json` | GET | Static file | +| Get Template | `/templates/{id}.json` | GET | Static file | +| HTML Export | `/templates/exports/{id}.html` | GET | Pre-generated static file | +| Plain Text Export | `/templates/exports/{id}.txt` | GET | Pre-generated static file | +| PDF Export | `/templates/exports/{id}.pdf` | GET | Pre-generated static file | +| Image Export | `/templates/exports/{id}.png` | GET | Pre-generated static file | + +### API Endpoints (Reference Only - Not Used) + | Feature | Endpoint | Method | Input | Output | |---------|----------|--------|-------|--------| | HTML Export | `/v1/message/html` | POST | Template JSON | HTML string (may be wrapped in JSON) | @@ -1226,8 +1399,6 @@ HTML_IMPORTER_API_KEY=your_importer_key | Get Templates | `/v1/catalog/templates` | GET | Query params | Templates array | | Get Template | `/v1/catalog/templates/:id` | GET | Template ID | Template JSON | | Brand Styles | `/v1/template/brand` | POST | Template + styles | Styled template JSON | -| HTML Import | `/v1/conversion/html-to-json` | POST | HTML string (text/html) | Template JSON | -| Auth (LoginV2) | `https://auth.getbee.io/loginV2` | POST | client_id, client_secret, uid | Token | --- diff --git a/docs/CONTRIBUTION-GUIDE.md b/docs/CONTRIBUTION-GUIDE.md index e025d7d..88c3ac6 100644 --- a/docs/CONTRIBUTION-GUIDE.md +++ b/docs/CONTRIBUTION-GUIDE.md @@ -11,16 +11,8 @@ playground-demo/ ├── api/ # Vercel Serverless Functions (Backend) │ ├── proxy/ │ │ └── bee-auth.js # Beefree SDK authentication -│ ├── templates/ -│ │ ├── index.js # Get templates list -│ │ └── [id].js # Get single template by ID │ └── v1/ -│ ├── html-importer.js # Convert HTML to Beefree JSON -│ └── message/ -│ ├── html.js # Export to HTML -│ ├── plain-text.js # Export to plain text -│ ├── pdf.js # Export to PDF -│ └── image.js # Export to thumbnail image +│ └── html-importer.js # Convert HTML to Beefree JSON │ ├── src/ # Frontend (React + TypeScript + Vite) │ ├── components/ @@ -33,15 +25,29 @@ playground-demo/ │ │ ├── sampleHtml.ts # Newsletter template HTML constant │ │ └── ExportResultModal.css # Export modal styles │ ├── services/ -│ │ └── api.ts # API client utilities +│ │ ├── api.ts # API client utilities +│ │ └── localTemplates.ts # Local template loading │ ├── types/ │ │ └── index.ts # TypeScript type definitions +│ ├── utils/ +│ │ └── exportHelpers.ts # Export helper functions │ ├── App.tsx # Root component (orchestrates everything) │ ├── App.css # Global styles │ ├── main.tsx # React entry point │ └── index.css # Base CSS reset │ ├── public/ +│ ├── assets/ +│ │ └── css/ +│ │ └── beefree-custom-design.css # Custom CSS for SDK +│ ├── templates/ # Static template files +│ │ ├── index.json # Template catalog +│ │ ├── *.json # Template JSON files +│ │ └── exports/ # Pre-generated exports +│ │ ├── *.html # HTML exports +│ │ ├── *.txt # Plain text exports +│ │ ├── *.pdf # PDF exports +│ │ └── *.png # Image exports │ └── template.json # Default template loaded on init │ ├── proxy-server.js # Express server for local development @@ -102,13 +108,18 @@ cp env.example .env Edit `.env` and add your API keys: ``` +# REQUIRED (for Beefree SDK) BEE_CLIENT_ID=your_client_id BEE_CLIENT_SECRET=your_client_secret -TEMPLATE_CATALOG_API_TOKEN=your_catalog_token -CS_API_TOKEN=your_cs_token + +# OPTIONAL (only for HTML Import feature) HTML_IMPORTER_API_KEY=your_importer_key ``` +**📝 Note:** This app uses **local static templates** from `public/templates/` and **pre-generated exports** from `public/templates/exports/`, so it does NOT need: +- ~~TEMPLATE_CATALOG_API_TOKEN~~ (not used) +- ~~CS_API_TOKEN~~ (not used) + 4. **Start development servers** Terminal 1 - Frontend: @@ -213,29 +224,30 @@ http://localhost:5173 --- -### 2. **Template Catalog Integration** (`src/components/TemplateTopBar.tsx`) +### 2. **Local Template System** (`src/services/localTemplates.ts`, `src/components/TemplateTopBar.tsx`) + +**⚠️ IMPORTANT:** This app uses **local static templates**, NOT the Template Catalog API! **Flow:** -1. Component mounts → Fetches templates via `/api/templates?limit=10` -2. Displays 10 templates in dropdown -3. User selects template → Fetches full template details via `/api/templates/{id}` -4. Calls `onTemplateSelect` → Triggers `window.loadTemplate()` in BeefreeEditor -5. Template loads into editor - -**API Endpoints:** -- `GET /api/templates?limit=10` - List templates -- `GET /api/templates/{id}` - Get single template with full JSON data - -**Backend Files:** -- `api/templates/index.js` - List templates endpoint -- `api/templates/[id].js` - Single template endpoint - -**Response Handling:** -The code handles multiple response shapes from the Template Catalog API: -```javascript -// Various shapes the API might return -templatesArray = data.results || data.templates || data.items || data.data || data -``` +1. Component mounts → Calls `getTemplates()` from `localTemplates.ts` +2. Fetches `/templates/index.json` (static file) +3. Displays templates in dropdown +4. User selects template → Calls `getTemplateById(id)` +5. Fetches `/templates/{id}.json` (static file) +6. Calls `onTemplateSelect` → Triggers `window.loadTemplate()` in BeefreeEditor +7. Template loads into editor + +**Template Files Location:** +- `public/templates/index.json` - List of available templates +- `public/templates/*.json` - Individual template JSON files + +**Export Files Location:** +- `public/templates/exports/*.html` - Pre-generated HTML exports +- `public/templates/exports/*.txt` - Pre-generated plain text exports +- `public/templates/exports/*.pdf` - Pre-generated PDF exports +- `public/templates/exports/*.png` - Pre-generated image exports + +**⚠️ CRITICAL:** Exports show the ORIGINAL template, NOT user edits! --- @@ -302,100 +314,77 @@ Clicking "Reset" loads default config with: ### 5. **Export Functionality** (All 4 Types) -All exports follow the same pattern but handle different content types. +**⚠️ IMPORTANT:** This app uses **pre-generated static exports**, NOT Content Services API! -#### **A. HTML Export** (`src/App.tsx` lines 100-144) +All exports load pre-generated files from `public/templates/exports/` directory. + +**⚠️ CRITICAL WARNING:** Exports display the ORIGINAL template as it was loaded from the template catalog. They do NOT include any user edits made in the editor! + +#### **A. HTML Export** **Flow:** 1. User clicks "Export" → "HTML" -2. Open export modal with loading state -3. Send `currentJson` (template JSON) to `/v1/message/html` -4. API returns HTML (may be wrapped in JSON) -5. Parse response to extract HTML string -6. Store in `lastHtmlRef` (for PDF/Image use) -7. Display in modal with download button +2. Gets current template ID from state +3. Fetches `/templates/exports/{template-id}.html` (static file) +4. Display in modal with download button -**Backend:** -- `api/v1/message/html.js` -- Forwards to `https://api.getbee.io/v1/message/html` +**File Location:** `public/templates/exports/*.html` --- -#### **B. Plain Text Export** (`src/App.tsx` lines 150-184) +#### **B. Plain Text Export** **Flow:** 1. User clicks "Export" → "Plain Text" -2. Send `currentJson` to `/v1/message/plain-text` -3. API returns plain text string +2. Gets current template ID from state +3. Fetches `/templates/exports/{template-id}.txt` (static file) 4. Display in modal with download button -**Backend:** -- `api/v1/message/plain-text.js` -- Forwards to `https://api.getbee.io/v1/message/plain-text` +**File Location:** `public/templates/exports/*.txt` --- -#### **C. PDF Export** (`src/App.tsx` lines 191-259) - -**IMPORTANT: PDF requires HTML (not JSON)!** +#### **C. PDF Export** **Flow:** 1. User clicks "Export" → "PDF" -2. **Auto-check if HTML exists in `lastHtmlRef`** - - If NO: First call `/v1/message/html` to generate HTML - - If YES: Use existing HTML -3. Send HTML + parameters to `/v1/message/pdf`: - ```json - { - "page_size": "Full", - "page_orientation": "landscape", - "html": "..." - } - ``` -4. API returns JSON with `body.url` (PDF download link) -5. Display "Open PDF" button in modal - -**Backend:** -- `api/v1/message/pdf.js` -- Forwards to `https://api.getbee.io/v1/message/pdf` +2. Gets current template ID from state +3. Opens `/templates/exports/{template-id}.pdf` in new tab (static file) -**UX Improvement:** -- No error message if HTML doesn't exist! -- Modal shows "Creating PDF..." while auto-generating HTML -- Seamless one-click experience +**File Location:** `public/templates/exports/*.pdf` --- -#### **D. Image Export** (`src/App.tsx` lines 266-334) - -**IMPORTANT: Image requires HTML (not JSON)!** +#### **D. Image Export** **Flow:** 1. User clicks "Export" → "Thumbnail Image" -2. **Auto-check if HTML exists in `lastHtmlRef`** - - If NO: First call `/v1/message/html` to generate HTML - - If YES: Use existing HTML -3. Send HTML + parameters to `/v1/message/image`: - ```json - { - "file_type": "png", - "size": "1000", - "html": "..." - } - ``` -4. API returns **binary data** (arraybuffer) -5. Convert to Blob → Create object URL -6. Display image in modal with download button +2. Gets current template ID from state +3. Fetches `/templates/exports/{template-id}.png` (static file) +4. Display image in modal with download button -**Backend:** -- `api/v1/message/image.js` -- Forwards to `https://api.getbee.io/v1/message/image` -- Uses `responseType: 'arraybuffer'` for binary data +**File Location:** `public/templates/exports/*.png` -**UX Improvement:** -- No error message if HTML doesn't exist! -- Modal shows "Creating Thumbnail..." while auto-generating HTML -- Seamless one-click experience +--- + +### **Generating Exports** + +Pre-generated exports are created using the `npm run export-templates` script, which: +1. Reads all templates from `public/templates/*.json` +2. Calls Beefree Content Services API to generate exports +3. Saves exports to `public/templates/exports/` +4. Updates `public/templates/index.json` with export file paths + +**Script Location:** `scripts/export-templates.js` + +**Run Command:** +```bash +npm run export-templates +``` + +**Requirements:** +- `BEE_CLIENT_ID` and `BEE_CLIENT_SECRET` in `.env` +- (Optional) `CS_API_TOKEN` for Content Services API --- @@ -472,7 +461,6 @@ window.loadTemplate(importedData); // Loads into editor - Frontend: `http://localhost:5173` (Vite) - Backend: `http://localhost:3001` (Express) - Vite proxies API calls: - - `/api/*` → `http://localhost:3001` - `/proxy/*` → `http://localhost:3001` - `/v1/*` → `http://localhost:3001` @@ -480,11 +468,12 @@ window.loadTemplate(importedData); // Loads into editor - Frontend: Static files served by Vercel - Backend: Serverless functions in `/api` directory - `vercel.json` routes requests: - - `/v1/message/*` → `/api/v1/message/*` - `/v1/*` → `/api/v1/*` - `/proxy/*` → `/api/proxy/*` -### Serverless Functions (8 Total) +### Serverless Functions (2 Total) + +**⚠️ IMPORTANT:** This app only has 2 API endpoints! Templates and exports are static files. **1. Authentication** (`api/proxy/bee-auth.js`) ```javascript @@ -494,21 +483,9 @@ Returns: { token, ... } Forwards to: https://auth.getbee.io/loginV2 ``` -**2. Template List** (`api/templates/index.js`) -```javascript -GET /api/templates?limit=10&offset=0 -Returns: Array of templates -Forwards to: https://api.getbee.io/v1/catalog/templates -``` - -**3. Single Template** (`api/templates/[id].js`) -```javascript -GET /api/templates/{id} -Returns: Template with json_data -Forwards to: https://api.getbee.io/v1/catalog/templates/{id} -``` +**Purpose:** Authenticate with Beefree SDK and get token for SDK initialization. -**4. HTML Importer** (`api/v1/html-importer.js`) +**2. HTML Importer** (`api/v1/html-importer.js`) ```javascript POST /v1/html-importer Body: { html: '...' } @@ -517,32 +494,23 @@ Forwards to: https://api.getbee.io/v1/conversion/html-to-json Content-Type: text/html ``` -**5-8. Content Services Exports** (`api/v1/message/*.js`) -```javascript -// HTML -POST /v1/message/html -Body: Template JSON -Returns: HTML string (may be wrapped in JSON) +**Purpose:** Convert HTML to Beefree JSON format for loading into editor. -// Plain Text -POST /v1/message/plain-text -Body: Template JSON -Returns: Plain text string +### Static File Serving -// PDF -POST /v1/message/pdf -Body: { html, page_size, page_orientation } -Returns: { body: { url: 'pdf-download-url' } } +**Templates:** +- `GET /templates/index.json` - List of available templates +- `GET /templates/{id}.json` - Individual template JSON -// Image -POST /v1/message/image -Body: { html, file_type, size } -Returns: Binary PNG data (arraybuffer) -``` +**Exports:** +- `GET /templates/exports/{id}.html` - HTML export +- `GET /templates/exports/{id}.txt` - Plain text export +- `GET /templates/exports/{id}.pdf` - PDF export +- `GET /templates/exports/{id}.png` - Image export ### Authorization Headers -All external Beefree API calls use Bearer token authentication: +Beefree API calls use Bearer token authentication: ```javascript headers: { 'Authorization': `Bearer ${API_TOKEN}`, @@ -620,7 +588,7 @@ onChange: (json) => { **Custom CSS Toggle Logic:** ```javascript // Toggle ON -currentConfig.customCss = "https://zairro.github.io/beefree-custom-css/beefree-custom-design.css"; +currentConfig.customCss = "/assets/css/beefree-custom-design.css"; // Toggle OFF delete currentConfig.customCss; @@ -784,19 +752,23 @@ Vercel automatically detects: Go to: Project Settings → Environment Variables ``` +# REQUIRED (for Beefree SDK) BEE_CLIENT_ID=your_client_id BEE_CLIENT_SECRET=your_client_secret -TEMPLATE_CATALOG_API_TOKEN=your_catalog_token -CS_API_TOKEN=your_content_services_token + +# OPTIONAL (only for HTML Import feature) HTML_IMPORTER_API_KEY=your_importer_key ``` **Optional (have defaults):** ``` -TEMPLATE_CATALOG_API_URL=https://api.getbee.io/v1/catalog HTML_IMPORTER_URL=https://api.getbee.io/v1/conversion/html-to-json ``` +**📝 Note:** This app uses **local static templates** and **pre-generated exports**, so it does NOT need: +- ~~TEMPLATE_CATALOG_API_TOKEN~~ (not used) +- ~~CS_API_TOKEN~~ (not used) + **IMPORTANT:** After adding/changing environment variables, click "Redeploy"! ### Deployment Process @@ -824,9 +796,9 @@ git push origin main ### Function Limits **Vercel Free Tier:** Max 12 serverless functions -**Current Usage:** 8 functions ✅ +**Current Usage:** 2 functions ✅ -If you need to add more endpoints, consolidate related endpoints into one file with dynamic routing. +Plenty of room for expansion if needed! ### Debugging Vercel Deployments @@ -842,8 +814,8 @@ If you need to add more endpoints, consolidate related endpoints into one file w **Common Issues:** - **"No template loaded"**: Missing initial template in `/public/template.json` -- **"Failed to fetch templates"**: Check `TEMPLATE_CATALOG_API_TOKEN` -- **"Failed to export"**: Check `CS_API_TOKEN` +- **"Templates not loading"**: Check that `public/templates/index.json` and template files deployed correctly +- **"Exports not working"**: Check that `public/templates/exports/` directory deployed correctly - **"Failed to import HTML"**: Check `HTML_IMPORTER_API_KEY` --- @@ -1008,65 +980,51 @@ After deployment, test the same checklist on your Vercel URL. **Common Issues:** 1. **APIs not working** → Check environment variables in Vercel 2. **404 on API calls** → Check `vercel.json` rewrites -3. **Builder loads but template catalog fails** → Check `TEMPLATE_CATALOG_API_TOKEN` +3. **Builder loads but templates don't** → Check `public/templates/` files deployed correctly --- ## 📝 Making Changes -### Adding a New Export Type - -1. **Create serverless function:** -```javascript -// api/v1/message/new-type.js -import axios from 'axios'; - -export default async function handler(req, res) { - const CS_API_TOKEN = process.env.CS_API_TOKEN; - const CS_AUTH = CS_API_TOKEN?.startsWith('Bearer ') - ? CS_API_TOKEN - : `Bearer ${CS_API_TOKEN}`; - - const response = await axios.post( - 'https://api.getbee.io/v1/message/new-type', - req.body, - { headers: { 'Authorization': CS_AUTH } } - ); - - res.json(response.data); -} -``` +### Adding New Templates -2. **Add to ExportDropdown.tsx:** -```javascript - +1. **Add template JSON file:** +```bash +# Add your template JSON to public/templates/ +public/templates/my-new-template.json ``` -3. **Add handler in App.tsx:** -```javascript -const handleGetNewType = async () => { - // Similar pattern to handleGetHtml -}; +2. **Generate exports:** +```bash +npm run export-templates ``` +This will automatically: +- Generate HTML, PDF, Image, and Text exports +- Update `public/templates/index.json` -4. **Update vercel.json if needed:** -```json -{ - "source": "/v1/message/new-type", - "destination": "/api/v1/message/new-type" -} +3. **Commit and deploy:** +```bash +git add public/templates/ +git commit -m "Add new template" +git push origin main ``` -### Adding a New Template Catalog Filter +### Regenerating All Exports -1. **Update API call in TemplateTopBar.tsx:** -```javascript -const response = await axios.get('/api/templates?limit=10&category=newsletter'); +If template files change: +```bash +npm run export-templates ``` -2. **Backend automatically forwards** query parameters to Beefree API +This script: +- Reads all templates from `public/templates/*.json` +- Calls Beefree Content Services API +- Saves exports to `public/templates/exports/` +- Updates template index + +**Requirements:** +- `BEE_CLIENT_ID` and `BEE_CLIENT_SECRET` in `.env` +- (Optional) `CS_API_TOKEN` for Content Services API ### Modifying the Sample Newsletter @@ -1081,6 +1039,29 @@ export const SAMPLE_NEWSLETTER_HTML = `...`; - Maintain responsive table structure - Test with HTML Importer API before committing +### Adding a New API Endpoint + +If you need to add a new backend endpoint: + +1. **Create serverless function:** +```javascript +// api/your-endpoint.js +export default async function handler(req, res) { + // Your logic here + res.json({ success: true }); +} +``` + +2. **Update vercel.json if needed:** +```json +{ + "source": "/your-path", + "destination": "/api/your-endpoint" +} +``` + +3. **Add frontend handler in appropriate component** + --- ## 🐛 Debugging Tips @@ -1122,14 +1103,15 @@ console.error('Export error:', error.response?.data || error.message); - Invalid credentials - Fix: Check .env file or Vercel env vars -**"Template Catalog API Token not configured"** -- Missing TEMPLATE_CATALOG_API_TOKEN -- Fix: Add to Vercel environment variables +**"Templates not loading"** +- Missing `public/templates/index.json` +- Template JSON files not deployed +- Fix: Check that template files exist and are committed -**PDF/Image export fails** -- Missing CS_API_TOKEN -- HTML generation failed -- Fix: Check CS_API_TOKEN, try exporting HTML first manually +**"Exports not working"** +- Missing export files in `public/templates/exports/` +- Export files not deployed +- Fix: Run `npm run export-templates` and commit the exports --- @@ -1187,9 +1169,9 @@ HTML Importer sanitizes input to prevent XSS: ### Beefree Documentation - **SDK Docs**: https://docs.beefree.io/beefree-sdk -- **Template Catalog API**: https://docs.beefree.io/beefree-sdk/apis/template-catalog-api -- **Content Services API**: https://docs.beefree.io/beefree-sdk/apis/content-services-api - **HTML Importer**: https://docs.beefree.io/beefree-sdk/apis/html-importer-api +- **Content Services API**: https://docs.beefree.io/beefree-sdk/apis/content-services-api (used by export-templates script) +- **Template Catalog API**: https://docs.beefree.io/beefree-sdk/apis/template-catalog-api (not used in this app) ### Vercel Documentation - **Serverless Functions**: https://vercel.com/docs/functions @@ -1389,14 +1371,20 @@ A: Yes! Just update to Vercel Pro and you get more functions (100+), longer time This playground demonstrates: - ✅ Beefree SDK integration -- ✅ Template Catalog API -- ✅ Content Services API (all export types) -- ✅ HTML Importer API +- ✅ Local template system (static files) +- ✅ Pre-generated exports (HTML, PDF, Image, Text) +- ✅ HTML Importer API - ✅ Custom CSS injection - ✅ Editable beeConfig - ✅ Vercel serverless deployment All built with clean code, inline comments, and maintainable patterns! +**Key Architecture:** +- Templates served as static JSON files from `public/templates/` +- Exports pre-generated and served from `public/templates/exports/` +- Only 2 API endpoints (authentication + HTML importer) +- Fast, scalable, and cost-effective! + Happy coding! 🚀 diff --git a/docs/DEPLOYMENT-CHECKLIST.md b/docs/DEPLOYMENT-CHECKLIST.md index 3abc57d..92ba9de 100644 --- a/docs/DEPLOYMENT-CHECKLIST.md +++ b/docs/DEPLOYMENT-CHECKLIST.md @@ -39,17 +39,19 @@ Go to: **Project Settings → Environment Variables** Add these (copy from your `.env` file): -#### Required Variables +#### Required Variables (2 only!) - [ ] `BEE_CLIENT_ID` - Beefree SDK client ID - [ ] `BEE_CLIENT_SECRET` - Beefree SDK client secret -- [ ] `TEMPLATE_CATALOG_API_TOKEN` - Template Catalog API token -- [ ] `CS_API_TOKEN` - Content Services API token -- [ ] `HTML_IMPORTER_API_KEY` - HTML Importer API key -#### Optional Variables (Have Defaults) -- [ ] `TEMPLATE_CATALOG_API_URL` (default: `https://api.getbee.io/v1/catalog`) -- [ ] `HTML_IMPORTER_URL` (default: `https://api.getbee.io/v1/conversion/html-to-json`) -- [ ] `PORT` (only for local dev, Vercel ignores this) +#### Optional Variables +- [ ] `HTML_IMPORTER_API_KEY` - HTML Importer API key (only needed for "Import HTML" feature) +- [ ] `HTML_IMPORTER_URL` - Custom HTML importer endpoint (default: `https://api.getbee.io/v1/conversion/html-to-json`) + +**📝 Note:** This app uses **local static templates** and **pre-generated exports**, so these are NOT needed: +- ~~TEMPLATE_CATALOG_API_TOKEN~~ (not used) +- ~~TEMPLATE_CATALOG_API_URL~~ (not used) +- ~~CS_API_TOKEN~~ (not used) +- ~~PORT~~ (Vercel auto-assigns ports) **Important Settings:** - Set for **all environments** (Production, Preview, Development) @@ -227,9 +229,9 @@ playground-demo/ - Look for error message **Common Causes:** -- Missing `TEMPLATE_CATALOG_API_TOKEN` in Vercel -- Wrong token value -- Token not set for "Production" environment +- Templates are loaded from local files (`public/templates/index.json`) +- Check that template files deployed correctly to Vercel +- Check browser console for file loading errors **Fix:** 1. Verify token in Vercel environment variables @@ -247,14 +249,14 @@ playground-demo/ 3. Check Vercel function logs for that specific export **Common Causes:** -- Missing `CS_API_TOKEN` in Vercel -- Wrong token value -- Routing issue in `vercel.json` +- Exports are pre-generated static files in `public/templates/exports/` +- Check that export files deployed correctly to Vercel +- **Note:** Exports show the ORIGINAL template, NOT user edits **Fix:** -1. Verify `CS_API_TOKEN` in Vercel -2. Check `vercel.json` has correct rewrites -3. Click "Redeploy" +1. Verify `public/templates/exports/` directory exists in deployment +2. Check browser Network tab for 404 errors on export files +3. User edits are NOT saved - this is expected behavior --- diff --git a/docs/DOCUMENTATION_AUDIT.md b/docs/DOCUMENTATION_AUDIT.md new file mode 100644 index 0000000..2fd067b --- /dev/null +++ b/docs/DOCUMENTATION_AUDIT.md @@ -0,0 +1,272 @@ +# Documentation Audit Report + +**Date:** December 18, 2025 +**Status:** 🔴 Major discrepancies found - updates required + +--- + +## Executive Summary + +After thorough examination of the codebase, **significant discrepancies** were found between documentation and actual implementation. The app has evolved from using Template Catalog API and Content Services API to using **static local templates** with **pre-generated exports**. + +### Critical Findings + +1. ❌ **No Template Catalog API** - Uses local static templates (`public/templates/`) +2. ❌ **No Content Services API** - Uses pre-generated static exports +3. ❌ **No export API endpoints** - Only `bee-auth` and `html-importer` exist +4. ❌ **Only 2 environment variables needed** - Not 5 as documented +5. ⚠️ **Export behavior changed** - Exports original template, NOT user edits + +--- + +## Current vs. Documented Architecture + +### What ACTUALLY Exists + +**Environment Variables (2 only):** +```bash +BEE_CLIENT_ID=xxx +BEE_CLIENT_SECRET=xxx +HTML_IMPORTER_API_KEY=xxx # Optional, only for HTML import +``` + +**API Endpoints (2 only):** +- `api/proxy/bee-auth.js` - Beefree SDK authentication +- `api/v1/html-importer.js` - HTML to JSON conversion + +**Features:** +- ✅ Local template catalog (9 templates in `public/templates/`) +- ✅ Pre-generated exports (HTML, Plain Text, PDF, Image) +- ✅ 3 configuration toggles (Custom CSS, Move Sidebar, Group Content Tiles) +- ✅ HTML Import (sample newsletter only) +- ✅ onChange/onSave callbacks +- ✅ Editable beeConfig sidebar +- ✅ Unit tests (93 tests) + +### What Documentation Claims + +**Environment Variables (5 - WRONG):** +```bash +BEE_CLIENT_ID +BEE_CLIENT_SECRET +TEMPLATE_CATALOG_API_TOKEN # ❌ NOT USED +CS_API_TOKEN # ❌ NOT USED +HTML_IMPORTER_API_KEY +``` + +**API Endpoints (many - WRONG):** +- ❌ `api/templates/index.js` - Does NOT exist +- ❌ `api/templates/[id].js` - Does NOT exist +- ❌ `api/v1/message/*.js` - Does NOT exist (no export endpoints) +- ✅ `api/proxy/bee-auth.js` - Exists +- ✅ `api/v1/html-importer.js` - Exists + +--- + +## File-by-File Analysis + +### ✅ CORRECT DOCS + +None - all docs need updates + +### 🔴 MAJOR ISSUES + +#### 1. docs/QUICK-START.md +**Lines 23-31: Environment Variables** +- ❌ Lists 5 env vars (should be 2-3) +- ❌ Mentions TEMPLATE_CATALOG_API_TOKEN (not used) +- ❌ Mentions CS_API_TOKEN (not used) + +**Lines 82-89: Troubleshooting** +- ❌ Mentions Template Catalog API (not used) +- ❌ Mentions Content Services API (not used) + +#### 2. docs/CONTRIBUTION-GUIDE.md +**Backend API Functions section:** +- ❌ Lists `api/templates/index.js` (does NOT exist) +- ❌ Lists `api/templates/[id].js` (does NOT exist) +- ❌ Lists `api/v1/message/*.js` (does NOT exist) +- ❌ Describes Template Catalog API integration (not used) +- ❌ Describes Content Services API (not used) + +**Export Functionality:** +- ❌ Implies exports use Content Services API +- ✅ Should document: Exports are pre-generated static files +- ✅ Should document: WARNING - exports do NOT include user edits + +#### 3. docs/AI_GUIDELINES.md +**Static Template System section:** +- ❌ May reference old API-based templates +- ✅ Needs to clarify local template system + +**Export Endpoints:** +- ❌ References non-existent export API endpoints +- ✅ Should document static file exports + +#### 4. docs/SECURITY.md +**API Keys section:** +- ❌ Lists 5 API keys (should be 2-3) +- ❌ Includes unused TEMPLATE_CATALOG_API_TOKEN +- ❌ Includes unused CS_API_TOKEN + +#### 5. docs/DEPLOYMENT-CHECKLIST.md +**Environment Variables:** +- ❌ Lists all 5 env vars (should be 2-3) +- ❌ Instructions for unused API tokens + +#### 6. docs/FEATURES-VERIFICATION.md +**Export Testing:** +- ❌ May not mention that exports are static +- ❌ Doesn't warn that user edits are NOT included + +#### 7. docs/INDEX.md +**Backend API Functions:** +- ❌ Lists non-existent endpoints +- ❌ References Template Catalog API +- ❌ References Content Services API + +#### 8. docs/CODING-STANDARDS.md +**Likely OK** - General standards, not feature-specific + +--- + +## Specific Corrections Needed + +### Environment Variables + +**REMOVE from all docs:** +```bash +TEMPLATE_CATALOG_API_TOKEN=xxx # ❌ NOT USED +TEMPLATE_CATALOG_API_URL=xxx # ❌ NOT USED +CS_API_TOKEN=xxx # ❌ NOT USED +PORT=3001 # ❌ NOT DOCUMENTED IN CODE +``` + +**KEEP (actually used):** +```bash +BEE_CLIENT_ID=xxx # ✅ Required +BEE_CLIENT_SECRET=xxx # ✅ Required +HTML_IMPORTER_API_KEY=xxx # ✅ Optional (only for HTML import) +HTML_IMPORTER_URL=xxx # ✅ Optional (defaults to Beefree API) +``` + +### API Endpoints + +**REMOVE all references to:** +- `api/templates/` directory +- `api/v1/message/` directory +- Template Catalog API +- Content Services API +- Any export API endpoints + +**DOCUMENT only:** +- `api/proxy/bee-auth.js` - SDK authentication +- `api/v1/html-importer.js` - HTML to JSON conversion +- Local template system (`public/templates/`) +- Pre-generated static exports + +### Features + +**ADD clarifications:** +1. Templates are loaded from `public/templates/index.json` +2. Exports are pre-generated static files in `public/templates/exports/` +3. **CRITICAL**: Exports do NOT include user edits (shows original template) +4. HTML Import only works with hardcoded sample newsletter +5. Only 2 required env vars (BEE_CLIENT_ID, BEE_CLIENT_SECRET) + +--- + +## Documentation Update Priority + +### 🔴 **HIGH PRIORITY** (Incorrect/Misleading) + +1. **env.example** - Remove unused vars +2. **docs/QUICK-START.md** - Fix env vars, remove API references +3. **docs/SECURITY.md** - Update API keys list +4. **docs/DEPLOYMENT-CHECKLIST.md** - Fix env vars +5. **docs/CONTRIBUTION-GUIDE.md** - Major rewrite of API/export sections + +### 🟡 **MEDIUM PRIORITY** (Needs Clarification) + +6. **docs/FEATURES-VERIFICATION.md** - Add export warnings +7. **docs/AI_GUIDELINES.md** - Clarify static template system +8. **docs/INDEX.md** - Update API endpoint list + +### 🟢 **LOW PRIORITY** (Minor Updates) + +9. **docs/CODING-STANDARDS.md** - Verify examples match current code +10. **docs/testing/** - Already accurate (recently created) + +--- + +## Recommended Actions + +### Immediate (Today) + +1. ✅ Update `env.example` - remove unused variables +2. ✅ Update `docs/QUICK-START.md` - fix environment setup +3. ✅ Update `docs/SECURITY.md` - correct API keys list + +### Short-term (This Week) + +4. ✅ Rewrite `docs/CONTRIBUTION-GUIDE.md` backend section +5. ✅ Update `docs/DEPLOYMENT-CHECKLIST.md` +6. ✅ Add export warnings to `docs/FEATURES-VERIFICATION.md` + +### Nice to Have + +7. ✅ Create architecture diagram showing local template system +8. ✅ Add troubleshooting for "exports don't show my changes" +9. ✅ Document the static export generation process (if applicable) + +--- + +## Verification Checklist + +After updates, verify: + +- [ ] env.example has only required variables +- [ ] No docs mention Template Catalog API +- [ ] No docs mention Content Services API +- [ ] No docs mention api/templates/ endpoints +- [ ] No docs mention api/v1/message/ endpoints +- [ ] All docs correctly state: 2 required env vars +- [ ] Export warnings are prominent +- [ ] Local template system is explained +- [ ] Static file structure is documented + +--- + +## Impact Assessment + +**User Confusion Risk:** 🔴 **HIGH** +- Users will try to get API tokens they don't need +- Users will expect exports to include their edits (they don't) +- Users will look for API files that don't exist + +**Developer Onboarding Risk:** 🔴 **HIGH** +- New developers will waste time on nonexistent features +- Architecture docs don't match reality +- Code navigation will be confusing + +**Deployment Risk:** 🟡 **MEDIUM** +- Extra env vars won't break anything (ignored) +- Missing required vars will break auth +- Documentation divergence will cause support issues + +--- + +## Next Steps + +1. **Review this audit** with team +2. **Prioritize** which docs to update first +3. **Assign** documentation updates +4. **Update** env.example immediately (critical) +5. **Test** setup flow with corrected docs +6. **Verify** no broken references remain + +--- + +**Audit Completed By:** Claude Code +**Codebase Version:** Current (Dec 18, 2025) +**Total Issues Found:** 40+ incorrect references across 8 files diff --git a/docs/DOCUMENTATION_REORGANIZATION.md b/docs/DOCUMENTATION_REORGANIZATION.md new file mode 100644 index 0000000..75ec36c --- /dev/null +++ b/docs/DOCUMENTATION_REORGANIZATION.md @@ -0,0 +1,200 @@ +# Documentation Reorganization Summary + +## Overview + +Successfully reorganized all project documentation into a clean, logical structure with a single source of truth in the `docs/` folder. + +## Changes Made + +### 📁 New Structure + +``` +Root: + README.md # Main entry point, project overview + +docs/ + ├── INDEX.md # Documentation navigation hub + ├── QUICK-START.md # 5-minute setup guide + ├── CONTRIBUTION-GUIDE.md # Complete architecture guide + ├── CODING-STANDARDS.md # Best practices and clean code + ├── AI_GUIDELINES.md # AI/Claude Code integration guide (formerly claude.md) + ├── SECURITY.md # Security best practices + ├── DEPLOYMENT-CHECKLIST.md # Vercel deployment guide + ├── FEATURES-VERIFICATION.md # Feature testing guide + └── testing/ + ├── TESTING.md # Complete testing guide + ├── QUICK_TEST_GUIDE.md # Quick test reference + └── TEST_SUMMARY.md # Test coverage summary +``` + +### 🔄 Files Moved + +| Original Location | New Location | Notes | +|-------------------|--------------|-------| +| `claude.md` | `docs/AI_GUIDELINES.md` | Renamed for clarity | +| `TESTING.md` | `docs/testing/TESTING.md` | Organized by category | +| `TEST_SUMMARY.md` | `docs/testing/TEST_SUMMARY.md` | Organized by category | +| `QUICK_TEST_GUIDE.md` | `docs/testing/QUICK_TEST_GUIDE.md` | Organized by category | + +### 🗑️ Files Removed + +- `docs/README.md` - Duplicate, only root README.md remains + +### ✏️ Files Updated + +- **[docs/INDEX.md](docs/INDEX.md)** - Complete rewrite with new structure + - Added testing section + - Updated all file paths + - Added AI_GUIDELINES.md reference + - Reorganized by categories + - Added documentation structure diagram + +## Benefits + +✅ **Single Source of Truth** - All docs in `docs/` except main README.md +✅ **Cleaner Root** - Only essential files in root directory +✅ **Better Organization** - Testing docs grouped in subdirectory +✅ **Easier Navigation** - Clear hierarchy and categories +✅ **Improved Scalability** - Easy to add new doc categories +✅ **Clear Naming** - AI_GUIDELINES.md is more descriptive than claude.md +✅ **Standard Convention** - Follows common open-source project patterns + +## Documentation Categories + +### 🏠 Root Level +- **README.md** - Project overview, quick start, features list + +### 📚 docs/ (Main Documentation) +- **INDEX.md** - Documentation hub and navigation +- **QUICK-START.md** - Getting started in 5 minutes +- **CONTRIBUTION-GUIDE.md** - Architecture and development guide +- **CODING-STANDARDS.md** - Code quality and best practices +- **AI_GUIDELINES.md** - AI/Claude Code integration patterns +- **SECURITY.md** - Security guidelines and best practices +- **DEPLOYMENT-CHECKLIST.md** - Deployment process +- **FEATURES-VERIFICATION.md** - Manual feature testing + +### 🧪 docs/testing/ (Testing Documentation) +- **TESTING.md** - Complete testing guide +- **QUICK_TEST_GUIDE.md** - Quick reference for running tests +- **TEST_SUMMARY.md** - Test coverage and results + +## Finding Documentation + +### Quick Access + +**From Root:** +```bash +# Main entry point +cat README.md + +# Documentation hub +cat docs/INDEX.md + +# Quick setup +cat docs/QUICK-START.md +``` + +**For Testing:** +```bash +# Quick test commands +cat docs/testing/QUICK_TEST_GUIDE.md + +# Full testing guide +cat docs/testing/TESTING.md + +# Test coverage +cat docs/testing/TEST_SUMMARY.md +``` + +### By Topic + +- **Setup** → README.md → docs/QUICK-START.md +- **Architecture** → docs/CONTRIBUTION-GUIDE.md +- **Testing** → docs/testing/QUICK_TEST_GUIDE.md +- **Deployment** → docs/DEPLOYMENT-CHECKLIST.md +- **AI Integration** → docs/AI_GUIDELINES.md +- **Code Quality** → docs/CODING-STANDARDS.md + +## Cross-References Updated + +All internal documentation links have been updated to reflect the new structure: + +- ✅ docs/INDEX.md - All links updated +- ✅ Testing docs - Cross-references updated where needed +- ✅ No broken links + +## Verification + +```bash +# Check root structure +ls -1 *.md +# Output: README.md only + +# Check docs structure +ls -1 docs/*.md +# Output: 8 main documentation files + +# Check testing subdirectory +ls -1 docs/testing/*.md +# Output: 3 testing-related files +``` + +## Impact on Users + +### Developers +- Clear separation between setup (README.md) and detailed docs (docs/) +- Testing documentation grouped logically +- AI guidelines renamed for clarity + +### Contributors +- Single location for all documentation (docs/) +- Easier to find and update docs +- Clear categorization by purpose + +### New Team Members +- Start with README.md in root +- Navigate via docs/INDEX.md +- Progressive learning path clearly defined + +## Migration Guide + +### For Links in Code/Comments + +No changes needed - code doesn't reference documentation files. + +### For Bookmarks/References + +Update any bookmarks from: +- `claude.md` → `docs/AI_GUIDELINES.md` +- `TESTING.md` → `docs/testing/TESTING.md` +- `TEST_SUMMARY.md` → `docs/testing/TEST_SUMMARY.md` +- `QUICK_TEST_GUIDE.md` → `docs/testing/QUICK_TEST_GUIDE.md` + +### For CI/CD Scripts + +No changes needed - npm test scripts unchanged. + +## Future Additions + +The new structure makes it easy to add: +- `docs/api/` - API documentation +- `docs/deployment/` - Platform-specific deployment guides +- `docs/troubleshooting/` - Common issues and solutions +- `docs/examples/` - Code examples and tutorials + +## Documentation Standards + +All documentation now follows consistent patterns: +1. **Location** - Single source in docs/ (except README.md) +2. **Naming** - Descriptive, UPPERCASE.md format +3. **Organization** - Categorized in subdirectories +4. **Navigation** - Via docs/INDEX.md hub +5. **Cross-refs** - Relative links within docs/ + +--- + +**Completed:** December 18, 2025 +**Status:** ✅ Production Ready + +All documentation is now organized, consolidated, and easy to navigate! diff --git a/docs/FEATURES-VERIFICATION.md b/docs/FEATURES-VERIFICATION.md index 7d7b48a..394ddb9 100644 --- a/docs/FEATURES-VERIFICATION.md +++ b/docs/FEATURES-VERIFICATION.md @@ -4,20 +4,37 @@ Use this guide to verify all features work correctly after deployment or changes --- +## ⚠️ IMPORTANT ARCHITECTURE NOTES + +This app uses a **static file-based architecture**, NOT API-based: + +1. **Templates:** Served as static JSON files from `public/templates/` +2. **Exports:** Pre-generated static files in `public/templates/exports/` +3. **API Endpoints:** Only 2 (authentication + HTML importer) + +**CRITICAL LIMITATION:** +- Exports show the ORIGINAL template as loaded from files +- Exports do NOT include user edits made in the editor +- This is by design to avoid API costs and improve performance + +--- + ## 🎯 Complete Feature List ### Core Features (Must Work) 1. ✅ Beefree SDK Editor Initialization -2. ✅ Template Catalog Integration +2. ✅ Local Template System (Static Files) 3. ✅ Template Loading 4. ✅ Custom CSS Toggle 5. ✅ BeeConfig Editor -6. ✅ HTML Export -7. ✅ Plain Text Export -8. ✅ PDF Export (with auto-HTML) -9. ✅ Image Export (with auto-HTML) +6. ✅ HTML Export (Pre-generated) +7. ✅ Plain Text Export (Pre-generated) +8. ✅ PDF Export (Pre-generated) +9. ✅ Image Export (Pre-generated) 10. ✅ HTML Import (Sample Newsletter) +**⚠️ IMPORTANT:** This app uses **local static templates** and **pre-generated exports**, NOT API-based systems! + --- ## 🧪 Testing Each Feature @@ -47,27 +64,29 @@ Use this guide to verify all features work correctly after deployment or changes --- -### 2. Template Catalog Integration ✅ +### 2. Local Template System ✅ + +**⚠️ IMPORTANT:** Templates are loaded from **static files** in `public/templates/`, NOT from an API! **Expected Behavior:** - Template dropdown shows "Choose a template..." by default -- Click dropdown → See 10 template names +- Click dropdown → See list of template names - Names are readable (not IDs or undefined) **How to Test:** 1. Look at top bar 2. Click "Template:" dropdown -3. Count templates (should be 10) +3. Verify templates are listed **Success Criteria:** -- Dropdown populates within 1 second -- 10 templates listed -- Template names are descriptive +- Dropdown populates instantly +- Templates listed with descriptive names +- Template names match files in `public/templates/` **If It Fails:** -- Check browser console Network tab for `/api/templates` error -- Verify `TEMPLATE_CATALOG_API_TOKEN` in environment -- Check Vercel function logs for `api/templates/index.js` +- Check browser console Network tab for `/templates/index.json` error (404) +- Verify `public/templates/index.json` exists +- Check that template files deployed correctly --- @@ -91,9 +110,9 @@ Use this guide to verify all features work correctly after deployment or changes - Selected template name shows on right **If It Fails:** -- Check browser console for `/api/templates/{id}` error -- Verify template has `json_data` property -- Check Vercel function logs for `api/templates/[id].js` +- Check browser console for `/templates/{id}.json` error (404) +- Verify template JSON file exists in `public/templates/` +- Check that template file is valid JSON --- @@ -162,112 +181,128 @@ Use this guide to verify all features work correctly after deployment or changes ### 6. HTML Export ✅ +**⚠️ IMPORTANT:** HTML exports are **pre-generated static files**, NOT generated from API! + +**⚠️ CRITICAL WARNING:** Export shows the ORIGINAL template, NOT user edits made in the editor! + **Expected Behavior:** - Click "Export" → "HTML" - Modal opens with "Exporting HTML..." -- HTML code appears in textarea +- Pre-generated HTML appears in textarea - "Download HTML" button available - Modal can be closed with X or outside click **How to Test:** -1. Click "Export" dropdown button -2. Click "HTML" -3. Wait for modal -4. Check HTML content +1. Select a template from dropdown +2. Click "Export" dropdown button +3. Click "HTML" +4. Check HTML content in modal **Success Criteria:** - Modal opens immediately -- HTML appears within 1-2 seconds +- HTML appears instantly (static file) - HTML is valid (contains ``, ``, etc.) - Download button works +- **HTML matches ORIGINAL template, not any edits** **If It Fails:** -- Check "No template loaded" error → Template didn't load -- Check browser console for `/v1/message/html` 404 -- Verify `CS_API_TOKEN` in environment -- Check Vercel function logs for `api/v1/message/html.js` +- Check "No template selected" error → Select a template first +- Check browser console for `/templates/exports/{id}.html` 404 +- Verify export file exists in `public/templates/exports/` +- Run `npm run export-templates` to regenerate exports --- ### 7. Plain Text Export ✅ +**⚠️ IMPORTANT:** Plain text exports are **pre-generated static files**, NOT generated from API! + +**⚠️ CRITICAL WARNING:** Export shows the ORIGINAL template, NOT user edits made in the editor! + **Expected Behavior:** - Click "Export" → "Plain Text" - Modal opens -- Plain text version appears +- Pre-generated plain text appears - "Download Text" button works **How to Test:** -1. Click "Export" → "Plain Text" -2. Check text content -3. Click download +1. Select a template from dropdown +2. Click "Export" → "Plain Text" +3. Check text content +4. Click download **Success Criteria:** - Text is readable (no HTML tags) -- Preserves content from template +- Preserves content from ORIGINAL template - Download creates .txt file +- **Text matches ORIGINAL template, not any edits** **If It Fails:** -- Same debugging as HTML Export -- Check `api/v1/message/plain-text.js` logs +- Check "No template selected" error → Select a template first +- Check browser console for `/templates/exports/{id}.txt` 404 +- Verify export file exists in `public/templates/exports/` +- Run `npm run export-templates` to regenerate exports --- -### 8. PDF Export (with Auto-HTML Generation) ✅ +### 8. PDF Export ✅ + +**⚠️ IMPORTANT:** PDF exports are **pre-generated static files**, NOT generated from API! + +**⚠️ CRITICAL WARNING:** Export shows the ORIGINAL template, NOT user edits made in the editor! **Expected Behavior:** - Click "Export" → "PDF" -- Modal opens with "Creating PDF..." -- HTML auto-generates in background (if needed) -- PDF link appears -- "Open PDF in New Tab" opens PDF +- Pre-generated PDF opens in new tab instantly **How to Test:** -1. **Without HTML:** Click "Export" → "PDF" (before exporting HTML) -2. Should still work! (auto-generates HTML) -3. Wait 3-5 seconds -4. PDF link appears +1. Select a template from dropdown +2. Click "Export" → "PDF" +3. New tab opens with PDF **Success Criteria:** -- No error about "Convert to HTML first" -- Modal shows "Creating PDF..." during generation -- PDF link works -- PDF renders correctly +- PDF opens instantly (static file) +- PDF renders correctly in browser +- **PDF matches ORIGINAL template, not any edits** **If It Fails:** -- Check HTML auto-generation step (should see network call to `/v1/message/html`) -- Check `/v1/message/pdf` endpoint -- Verify `CS_API_TOKEN` in environment -- Check Vercel logs for both html.js and pdf.js +- Check "No template selected" error → Select a template first +- Check browser console for `/templates/exports/{id}.pdf` 404 +- Verify export file exists in `public/templates/exports/` +- Run `npm run export-templates` to regenerate exports --- -### 9. Image Export (with Auto-HTML Generation) ✅ +### 9. Image Export ✅ + +**⚠️ IMPORTANT:** Image exports are **pre-generated static files**, NOT generated from API! + +**⚠️ CRITICAL WARNING:** Export shows the ORIGINAL template, NOT user edits made in the editor! **Expected Behavior:** - Click "Export" → "Thumbnail Image" -- Modal opens with "Creating Thumbnail..." -- HTML auto-generates if needed -- Thumbnail image appears +- Modal opens +- Pre-generated thumbnail image appears - "Download Image" button works **How to Test:** -1. **Without HTML:** Click "Export" → "Thumbnail Image" -2. Should still work! (auto-generates HTML) -3. Wait 2-4 seconds -4. Thumbnail appears in modal +1. Select a template from dropdown +2. Click "Export" → "Thumbnail Image" +3. Check image in modal +4. Click download **Success Criteria:** -- No error about "Convert to HTML first" -- Modal shows "Creating Thumbnail..." during generation +- Modal opens immediately +- Image appears instantly (static file) - Image displays correctly - Download creates .png file +- **Image matches ORIGINAL template, not any edits** **If It Fails:** -- Check HTML auto-generation (network tab) -- Check `/v1/message/image` endpoint -- Verify image Content-Type is `image/png` -- Check Vercel logs for both html.js and image.js +- Check "No template selected" error → Select a template first +- Check browser console for `/templates/exports/{id}.png` 404 +- Verify export file exists in `public/templates/exports/` +- Run `npm run export-templates` to regenerate exports --- @@ -391,19 +426,23 @@ Use this guide to verify all features work correctly after deployment or changes ### Load Times (Expected) +**⚠️ Note:** Using static files instead of APIs makes this app MUCH faster! + | Operation | Time | Notes | |-----------|------|-------| | Initial page load | 1-2s | Includes SDK initialization | | Authentication | 100-200ms | Cached by Vercel | -| Template list fetch | 400-600ms | 10 templates | -| Single template fetch | 400-600ms | With JSON data | -| HTML export | 1-2s | Template → HTML | -| Plain text export | 1-2s | Template → Text | -| PDF export | 3-5s | HTML generation + PDF | -| Image export | 2-4s | HTML generation + Image | -| HTML import | 3-6s | HTML → JSON conversion | +| Template list fetch | <50ms | Static file (index.json) | +| Single template fetch | <100ms | Static JSON file | +| HTML export | <100ms | Pre-generated static file | +| Plain text export | <100ms | Pre-generated static file | +| PDF export | <100ms | Pre-generated static file | +| Image export | <100ms | Pre-generated static file | +| HTML import | 3-6s | API call to HTML Importer | + +**MUCH faster than API-based approach!** ✅ -**All within acceptable ranges for Vercel free tier!** ✅ +**Note:** Exports don't include user edits, so they're instant but show original template only. --- @@ -412,14 +451,14 @@ Use this guide to verify all features work correctly after deployment or changes ### Cannot Deploy If These Fail: 1. **Builder initialization** - Core functionality -2. **HTML export** - Required for PDF/Image -3. **Template loading** - From catalog or import +2. **Template loading** - From local files +3. **Authentication** - Required for SDK ### Can Deploy If These Have Issues: -1. Template Catalog - Can use HTML import instead -2. Custom CSS - Nice to have -3. PDF/Image exports - HTML export still works +1. **Exports** - Static files might be missing, can regenerate with `npm run export-templates` +2. **Custom CSS** - Nice to have feature +3. **HTML Import** - Optional feature, requires API key --- diff --git a/docs/INDEX.md b/docs/INDEX.md index ea6de8c..7cc738a 100644 --- a/docs/INDEX.md +++ b/docs/INDEX.md @@ -8,9 +8,9 @@ Welcome to the Beefree SDK Playground documentation! This guide helps you find t **New to the project?** Start here: -1. **`QUICK-START.md`** - Get up and running in 5 minutes -2. **`README.md`** (root) - Project overview, features, and quick reference -3. **`CONTRIBUTION-GUIDE.md`** - Detailed architecture and how everything works +1. **[QUICK-START.md](QUICK-START.md)** - Get up and running in 5 minutes +2. **[README.md](../README.md)** (root) - Project overview, features, and quick reference +3. **[CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md)** - Detailed architecture and how everything works --- @@ -18,42 +18,66 @@ Welcome to the Beefree SDK Playground documentation! This guide helps you find t ### For Developers -- **`CONTRIBUTION-GUIDE.md`** - Complete architecture guide +- **[CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md)** - Complete architecture guide - Project structure - Component breakdown - API integration details - How features work together - Debugging tips -- **`CODING-STANDARDS.md`** - Best practices and clean code +- **[CODING-STANDARDS.md](CODING-STANDARDS.md)** - Best practices and clean code - TypeScript guidelines - React patterns - Error handling - Code style -- **`SECURITY.md`** - Security best practices +- **[AI_GUIDELINES.md](AI_GUIDELINES.md)** - AI/Claude Code integration guidelines + - Beefree SDK best practices + - Static template system + - Export endpoints + - Configuration patterns + +- **[SECURITY.md](SECURITY.md)** - Security best practices - API key management - Input validation - XSS prevention - Security checklist -### For Deployment +### For Testing -- **`DEPLOYMENT-CHECKLIST.md`** - Vercel deployment guide - - Pre-deployment checklist - - Environment variables setup - - Post-deployment testing +- **[testing/TESTING.md](testing/TESTING.md)** - Complete testing guide + - Test structure and organization + - Running tests (all modes) + - Writing new tests + - Mocking strategies + - CI/CD integration + - Best practices + +- **[testing/QUICK_TEST_GUIDE.md](testing/QUICK_TEST_GUIDE.md)** - Quick test reference + - Quick commands + - Test results summary - Troubleshooting - - Vercel-specific details -### For Testing +- **[testing/TEST_SUMMARY.md](testing/TEST_SUMMARY.md)** - Test coverage summary + - Detailed test breakdown + - Coverage statistics + - Test infrastructure -- **`FEATURES-VERIFICATION.md`** - Complete testing guide +- **[FEATURES-VERIFICATION.md](FEATURES-VERIFICATION.md)** - Feature testing guide - Step-by-step feature testing - Expected behavior - Success criteria - Debugging steps +### For Deployment + +- **[DEPLOYMENT-CHECKLIST.md](DEPLOYMENT-CHECKLIST.md)** - Vercel deployment guide + - Pre-deployment checklist + - Environment variables setup + - Post-deployment testing + - Troubleshooting + - Vercel-specific details + --- ## 🎯 Quick Reference @@ -61,7 +85,7 @@ Welcome to the Beefree SDK Playground documentation! This guide helps you find t ### Setup ```bash git clone -cd playground-demo +cd playground npm install cp env.example .env # Edit .env with your credentials @@ -69,25 +93,40 @@ npm run dev # Terminal 1 npm run dev:proxy # Terminal 2 ``` +### Testing +```bash +npm test # Watch mode +npm run test:ui # Visual UI +npm run test:run # Single run +npm run test:coverage # Coverage report +``` + ### Key Features -- ✅ Template Catalog integration -- ✅ 4 Export types (HTML, Plain Text, PDF, Image) -- ✅ HTML Import +- ✅ Local template system (static files) +- ✅ Pre-generated exports (HTML, Plain Text, PDF, Image) +- ✅ HTML Import (optional - requires API key) - ✅ 3 Configuration toggles (CSS, Sidebar, Module Groups) - ✅ onChange/onSave callbacks with console logging - ✅ Editable beeConfig sidebar +- ✅ Comprehensive unit tests (93 tests) + +**⚠️ IMPORTANT:** This app uses local static templates and pre-generated exports, NOT API-based systems! ### Documentation Files | File | Purpose | Audience | |------|---------|----------| -| `README.md` (root) | Project overview | Everyone | -| `QUICK-START.md` | 5-minute setup | New developers | -| `CONTRIBUTION-GUIDE.md` | Architecture details | Contributors | -| `CODING-STANDARDS.md` | Best practices | Developers | -| `SECURITY.md` | Security guidelines | All team members | -| `DEPLOYMENT-CHECKLIST.md` | Deployment guide | DevOps/Deployers | -| `FEATURES-VERIFICATION.md` | Testing guide | QA/Testers | +| [README.md](../README.md) | Project overview | Everyone | +| [QUICK-START.md](QUICK-START.md) | 5-minute setup | New developers | +| [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) | Architecture details | Contributors | +| [CODING-STANDARDS.md](CODING-STANDARDS.md) | Best practices | Developers | +| [AI_GUIDELINES.md](AI_GUIDELINES.md) | AI integration guide | AI/Developers | +| [SECURITY.md](SECURITY.md) | Security guidelines | All team members | +| [DEPLOYMENT-CHECKLIST.md](DEPLOYMENT-CHECKLIST.md) | Deployment guide | DevOps/Deployers | +| [testing/TESTING.md](testing/TESTING.md) | Complete testing guide | Developers/QA | +| [testing/QUICK_TEST_GUIDE.md](testing/QUICK_TEST_GUIDE.md) | Quick test reference | Developers | +| [testing/TEST_SUMMARY.md](testing/TEST_SUMMARY.md) | Test coverage summary | Developers/QA | +| [FEATURES-VERIFICATION.md](FEATURES-VERIFICATION.md) | Feature testing | QA/Testers | --- @@ -95,13 +134,16 @@ npm run dev:proxy # Terminal 2 ### "How do I..." -- **...set up the project?** → `QUICK-START.md` -- **...understand the architecture?** → `CONTRIBUTION-GUIDE.md` -- **...add a new feature?** → `CONTRIBUTION-GUIDE.md` + `CODING-STANDARDS.md` -- **...deploy to Vercel?** → `DEPLOYMENT-CHECKLIST.md` -- **...handle API keys securely?** → `SECURITY.md` -- **...write clean code?** → `CODING-STANDARDS.md` -- **...test features?** → `FEATURES-VERIFICATION.md` +- **...set up the project?** → [QUICK-START.md](QUICK-START.md) +- **...understand the architecture?** → [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) +- **...add a new feature?** → [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) + [CODING-STANDARDS.md](CODING-STANDARDS.md) +- **...run tests?** → [testing/QUICK_TEST_GUIDE.md](testing/QUICK_TEST_GUIDE.md) +- **...write tests?** → [testing/TESTING.md](testing/TESTING.md) +- **...deploy to Vercel?** → [DEPLOYMENT-CHECKLIST.md](DEPLOYMENT-CHECKLIST.md) +- **...handle API keys securely?** → [SECURITY.md](SECURITY.md) +- **...write clean code?** → [CODING-STANDARDS.md](CODING-STANDARDS.md) +- **...test features?** → [FEATURES-VERIFICATION.md](FEATURES-VERIFICATION.md) +- **...use AI guidelines?** → [AI_GUIDELINES.md](AI_GUIDELINES.md) --- @@ -110,55 +152,63 @@ npm run dev:proxy # Terminal 2 ### For Different Roles **🆕 New Developers:** -1. Start with `QUICK-START.md` -2. Then read `README.md` (root) +1. Start with [QUICK-START.md](QUICK-START.md) +2. Then read [README.md](../README.md) (root) 3. Browse inline comments while coding -4. Reference `CONTRIBUTION-GUIDE.md` as needed +4. Reference [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) as needed **🔧 Contributors:** -1. Read `CONTRIBUTION-GUIDE.md` thoroughly +1. Read [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) thoroughly 2. Check inline comments in files you're editing -3. Follow `CODING-STANDARDS.md` guidelines -4. Reference `README.md` for API patterns +3. Follow [CODING-STANDARDS.md](CODING-STANDARDS.md) guidelines +4. Reference [README.md](../README.md) for API patterns + +**🧪 QA/Testers:** +1. Use [testing/QUICK_TEST_GUIDE.md](testing/QUICK_TEST_GUIDE.md) for running tests +2. Read [FEATURES-VERIFICATION.md](FEATURES-VERIFICATION.md) for manual testing +3. Check [testing/TEST_SUMMARY.md](testing/TEST_SUMMARY.md) for coverage +4. Report issues with console logs **🚀 DevOps/Deployers:** -1. Read `DEPLOYMENT-CHECKLIST.md` +1. Read [DEPLOYMENT-CHECKLIST.md](DEPLOYMENT-CHECKLIST.md) 2. Follow step-by-step checklist 3. Check Vercel function logs for issues -**🧪 QA/Testers:** -1. Use `FEATURES-VERIFICATION.md` -2. Follow testing checklist -3. Report issues with console logs - **👥 Project Leads:** -1. Read `README.md` (root) for feature overview -2. Skim `CONTRIBUTION-GUIDE.md` for architecture -3. Use `DEPLOYMENT-CHECKLIST.md` for deployment -4. Share `QUICK-START.md` with new team members +1. Read [README.md](../README.md) (root) for feature overview +2. Skim [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) for architecture +3. Use [DEPLOYMENT-CHECKLIST.md](DEPLOYMENT-CHECKLIST.md) for deployment +4. Share [QUICK-START.md](QUICK-START.md) with new team members + +**🤖 AI/Claude Code:** +1. Primary reference: [AI_GUIDELINES.md](AI_GUIDELINES.md) +2. Code patterns: [CODING-STANDARDS.md](CODING-STANDARDS.md) +3. Architecture: [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) --- ## 🎓 Learning Path ### Beginner -1. Read `QUICK-START.md` (get it running) +1. Read [QUICK-START.md](QUICK-START.md) (get it running) 2. Play with the UI (try all features) -3. Read `README.md` (root) (understand what's possible) +3. Read [README.md](../README.md) (root) (understand what's possible) 4. Browse inline comments (see how it works) ### Intermediate -1. Read `CONTRIBUTION-GUIDE.md` sections 1-6 +1. Read [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) sections 1-6 2. Study component files with comments 3. Make small changes (try adding a button) -4. Deploy to Vercel using `DEPLOYMENT-CHECKLIST.md` +4. Run tests with [testing/QUICK_TEST_GUIDE.md](testing/QUICK_TEST_GUIDE.md) +5. Deploy to Vercel using [DEPLOYMENT-CHECKLIST.md](DEPLOYMENT-CHECKLIST.md) ### Advanced -1. Read entire `CONTRIBUTION-GUIDE.md` +1. Read entire [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) 2. Understand all patterns (window functions, auto-HTML, etc.) -3. Add new Beefree API integrations -4. Optimize performance -5. Help other contributors +3. Write unit tests following [testing/TESTING.md](testing/TESTING.md) +4. Add new Beefree API integrations +5. Optimize performance +6. Help other contributors --- @@ -177,12 +227,20 @@ All source files have comprehensive inline comments: - `src/components/ExportResultModal.tsx` - Export results display - `src/components/HtmlImportModal.tsx` - HTML import modal -**Backend API Functions:** -- `api/proxy/bee-auth.js` - Authentication -- `api/templates/index.js` - List templates -- `api/templates/[id].js` - Get single template -- `api/v1/html-importer.js` - HTML to JSON conversion -- `api/v1/message/*.js` - All export endpoints +**Backend API Functions (Only 2!):** +- `api/proxy/bee-auth.js` - Authentication (REQUIRED) +- `api/v1/html-importer.js` - HTML to JSON conversion (OPTIONAL - for HTML Import feature) + +**Static File Serving:** +- `public/templates/index.json` - Template catalog +- `public/templates/*.json` - Individual templates +- `public/templates/exports/*.html|txt|pdf|png` - Pre-generated exports + +**Test Files:** +- `src/services/__tests__/` - Service tests +- `src/components/__tests__/` - Component tests +- `src/utils/__tests__/` - Utility tests +- `api/*/__tests__/` - Backend tests --- @@ -194,9 +252,9 @@ All source files have comprehensive inline comments: - SDK Configuration: https://docs.beefree.io/beefree-sdk/reference/sdk-configuration **Beefree APIs:** -- Template Catalog: https://docs.beefree.io/beefree-sdk/apis/template-catalog-api -- Content Services: https://docs.beefree.io/beefree-sdk/apis/content-services-api -- HTML Importer: https://docs.beefree.io/beefree-sdk/apis/html-importer-api +- HTML Importer: https://docs.beefree.io/beefree-sdk/apis/html-importer-api (USED - for HTML Import feature) +- Template Catalog: https://docs.beefree.io/beefree-sdk/apis/template-catalog-api (NOT USED - app uses local templates) +- Content Services: https://docs.beefree.io/beefree-sdk/apis/content-services-api (NOT USED - app uses pre-generated exports) **Vercel:** - Serverless Functions: https://vercel.com/docs/functions @@ -208,6 +266,10 @@ All source files have comprehensive inline comments: - TypeScript: https://www.typescriptlang.org/docs - Vite: https://vitejs.dev/guide +**Testing:** +- Vitest: https://vitest.dev/ +- React Testing Library: https://testing-library.com/react + --- ## 📝 Documentation Standards @@ -226,12 +288,32 @@ All documentation follows these principles: When updating code: -1. **Update relevant docs** - If you change architecture, update `CONTRIBUTION-GUIDE.md` +1. **Update relevant docs** - If you change architecture, update [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) 2. **Add examples** - Show how to use new features 3. **Keep it concise** - Remove outdated information 4. **Test instructions** - Verify all commands work +5. **Update tests** - Write tests for new features --- -**Need help?** Check the relevant documentation file or see `CONTRIBUTION-GUIDE.md` for debugging tips. +## 📁 Documentation Structure + +``` +docs/ +├── INDEX.md # This file - documentation overview +├── QUICK-START.md # 5-minute setup guide +├── CONTRIBUTION-GUIDE.md # Complete architecture guide +├── CODING-STANDARDS.md # Best practices and standards +├── AI_GUIDELINES.md # AI/Claude Code integration guide +├── SECURITY.md # Security best practices +├── DEPLOYMENT-CHECKLIST.md # Vercel deployment guide +├── FEATURES-VERIFICATION.md # Feature testing guide +└── testing/ + ├── TESTING.md # Complete testing guide + ├── QUICK_TEST_GUIDE.md # Quick test reference + └── TEST_SUMMARY.md # Test coverage summary +``` + +--- +**Need help?** Check the relevant documentation file or see [CONTRIBUTION-GUIDE.md](CONTRIBUTION-GUIDE.md) for debugging tips. diff --git a/docs/QUICK-START.md b/docs/QUICK-START.md index 668b854..bc78a8d 100644 --- a/docs/QUICK-START.md +++ b/docs/QUICK-START.md @@ -23,15 +23,18 @@ cp env.example .env Edit `.env` with your Beefree credentials from [developers.beefree.io](https://developers.beefree.io): ```bash +# REQUIRED (2 credentials only!) BEE_CLIENT_ID=your_client_id BEE_CLIENT_SECRET=your_client_secret -TEMPLATE_CATALOG_API_TOKEN=your_catalog_token -CS_API_TOKEN=your_cs_token + +# OPTIONAL (only for HTML Import feature) HTML_IMPORTER_API_KEY=your_importer_key ``` **⚠️ Security:** Never commit `.env` file! It's already in `.gitignore`. +**📝 Note:** This app uses **local static templates** (no Template Catalog API needed). Exports are **pre-generated files** (no Content Services API needed). + --- ## 3️⃣ Start Development @@ -81,12 +84,14 @@ Open `http://localhost:5173` in your browser. - ✅ Check browser console for errors **Template dropdown empty?** -- ✅ Check `TEMPLATE_CATALOG_API_TOKEN` in `.env` -- ✅ Check terminal running `npm run dev:proxy` for errors +- ✅ Check that `public/templates/index.json` exists +- ✅ Check browser console for loading errors +- ✅ Templates are loaded from local files (no API needed) **Exports not working?** -- ✅ Check `CS_API_TOKEN` in `.env` -- ✅ Restart `npm run dev:proxy` +- ✅ Exports are pre-generated static files from `public/templates/exports/` +- ✅ **NOTE:** Exports show the ORIGINAL template, NOT your edits +- ✅ Check browser console for file loading errors **Still stuck?** Check [`CONTRIBUTION-GUIDE.md`](./CONTRIBUTION-GUIDE.md) for detailed debugging tips. diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index ea6de8c..0000000 --- a/docs/README.md +++ /dev/null @@ -1,237 +0,0 @@ -# 📚 Documentation Overview - -Welcome to the Beefree SDK Playground documentation! This guide helps you find the right document for your needs. - ---- - -## 🚀 Getting Started - -**New to the project?** Start here: - -1. **`QUICK-START.md`** - Get up and running in 5 minutes -2. **`README.md`** (root) - Project overview, features, and quick reference -3. **`CONTRIBUTION-GUIDE.md`** - Detailed architecture and how everything works - ---- - -## 📖 Core Documentation - -### For Developers - -- **`CONTRIBUTION-GUIDE.md`** - Complete architecture guide - - Project structure - - Component breakdown - - API integration details - - How features work together - - Debugging tips - -- **`CODING-STANDARDS.md`** - Best practices and clean code - - TypeScript guidelines - - React patterns - - Error handling - - Code style - -- **`SECURITY.md`** - Security best practices - - API key management - - Input validation - - XSS prevention - - Security checklist - -### For Deployment - -- **`DEPLOYMENT-CHECKLIST.md`** - Vercel deployment guide - - Pre-deployment checklist - - Environment variables setup - - Post-deployment testing - - Troubleshooting - - Vercel-specific details - -### For Testing - -- **`FEATURES-VERIFICATION.md`** - Complete testing guide - - Step-by-step feature testing - - Expected behavior - - Success criteria - - Debugging steps - ---- - -## 🎯 Quick Reference - -### Setup -```bash -git clone -cd playground-demo -npm install -cp env.example .env -# Edit .env with your credentials -npm run dev # Terminal 1 -npm run dev:proxy # Terminal 2 -``` - -### Key Features -- ✅ Template Catalog integration -- ✅ 4 Export types (HTML, Plain Text, PDF, Image) -- ✅ HTML Import -- ✅ 3 Configuration toggles (CSS, Sidebar, Module Groups) -- ✅ onChange/onSave callbacks with console logging -- ✅ Editable beeConfig sidebar - -### Documentation Files - -| File | Purpose | Audience | -|------|---------|----------| -| `README.md` (root) | Project overview | Everyone | -| `QUICK-START.md` | 5-minute setup | New developers | -| `CONTRIBUTION-GUIDE.md` | Architecture details | Contributors | -| `CODING-STANDARDS.md` | Best practices | Developers | -| `SECURITY.md` | Security guidelines | All team members | -| `DEPLOYMENT-CHECKLIST.md` | Deployment guide | DevOps/Deployers | -| `FEATURES-VERIFICATION.md` | Testing guide | QA/Testers | - ---- - -## 🔍 Finding Information - -### "How do I..." - -- **...set up the project?** → `QUICK-START.md` -- **...understand the architecture?** → `CONTRIBUTION-GUIDE.md` -- **...add a new feature?** → `CONTRIBUTION-GUIDE.md` + `CODING-STANDARDS.md` -- **...deploy to Vercel?** → `DEPLOYMENT-CHECKLIST.md` -- **...handle API keys securely?** → `SECURITY.md` -- **...write clean code?** → `CODING-STANDARDS.md` -- **...test features?** → `FEATURES-VERIFICATION.md` - ---- - -## 🗺️ Documentation Roadmap - -### For Different Roles - -**🆕 New Developers:** -1. Start with `QUICK-START.md` -2. Then read `README.md` (root) -3. Browse inline comments while coding -4. Reference `CONTRIBUTION-GUIDE.md` as needed - -**🔧 Contributors:** -1. Read `CONTRIBUTION-GUIDE.md` thoroughly -2. Check inline comments in files you're editing -3. Follow `CODING-STANDARDS.md` guidelines -4. Reference `README.md` for API patterns - -**🚀 DevOps/Deployers:** -1. Read `DEPLOYMENT-CHECKLIST.md` -2. Follow step-by-step checklist -3. Check Vercel function logs for issues - -**🧪 QA/Testers:** -1. Use `FEATURES-VERIFICATION.md` -2. Follow testing checklist -3. Report issues with console logs - -**👥 Project Leads:** -1. Read `README.md` (root) for feature overview -2. Skim `CONTRIBUTION-GUIDE.md` for architecture -3. Use `DEPLOYMENT-CHECKLIST.md` for deployment -4. Share `QUICK-START.md` with new team members - ---- - -## 🎓 Learning Path - -### Beginner -1. Read `QUICK-START.md` (get it running) -2. Play with the UI (try all features) -3. Read `README.md` (root) (understand what's possible) -4. Browse inline comments (see how it works) - -### Intermediate -1. Read `CONTRIBUTION-GUIDE.md` sections 1-6 -2. Study component files with comments -3. Make small changes (try adding a button) -4. Deploy to Vercel using `DEPLOYMENT-CHECKLIST.md` - -### Advanced -1. Read entire `CONTRIBUTION-GUIDE.md` -2. Understand all patterns (window functions, auto-HTML, etc.) -3. Add new Beefree API integrations -4. Optimize performance -5. Help other contributors - ---- - -## 📑 Code Documentation - -### Inline Comments - -All source files have comprehensive inline comments: - -**Frontend Components:** -- `src/App.tsx` - Main application logic -- `src/components/BeefreeEditor.tsx` - SDK initialization -- `src/components/BeeConfigSidebar.tsx` - Config editor -- `src/components/TemplateTopBar.tsx` - Template selector & toggles -- `src/components/ExportDropdown.tsx` - Export menu -- `src/components/ExportResultModal.tsx` - Export results display -- `src/components/HtmlImportModal.tsx` - HTML import modal - -**Backend API Functions:** -- `api/proxy/bee-auth.js` - Authentication -- `api/templates/index.js` - List templates -- `api/templates/[id].js` - Get single template -- `api/v1/html-importer.js` - HTML to JSON conversion -- `api/v1/message/*.js` - All export endpoints - ---- - -## 🔗 External Documentation - -**Beefree SDK:** -- Main Docs: https://docs.beefree.io/beefree-sdk -- API Reference: https://docs.beefree.io/beefree-sdk/reference -- SDK Configuration: https://docs.beefree.io/beefree-sdk/reference/sdk-configuration - -**Beefree APIs:** -- Template Catalog: https://docs.beefree.io/beefree-sdk/apis/template-catalog-api -- Content Services: https://docs.beefree.io/beefree-sdk/apis/content-services-api -- HTML Importer: https://docs.beefree.io/beefree-sdk/apis/html-importer-api - -**Vercel:** -- Serverless Functions: https://vercel.com/docs/functions -- Environment Variables: https://vercel.com/docs/environment-variables -- Deployments: https://vercel.com/docs/deployments - -**React & TypeScript:** -- React Docs: https://react.dev -- TypeScript: https://www.typescriptlang.org/docs -- Vite: https://vitejs.dev/guide - ---- - -## 📝 Documentation Standards - -All documentation follows these principles: - -1. **Clear and Concise** - Easy to scan and understand -2. **Actionable** - Step-by-step instructions -3. **Up-to-Date** - Reflects current codebase -4. **Well-Organized** - Logical structure with clear headings -5. **Examples Included** - Code examples where helpful - ---- - -## 🤝 Contributing to Documentation - -When updating code: - -1. **Update relevant docs** - If you change architecture, update `CONTRIBUTION-GUIDE.md` -2. **Add examples** - Show how to use new features -3. **Keep it concise** - Remove outdated information -4. **Test instructions** - Verify all commands work - ---- - -**Need help?** Check the relevant documentation file or see `CONTRIBUTION-GUIDE.md` for debugging tips. - diff --git a/docs/SECURITY.md b/docs/SECURITY.md index baff47f..98c533c 100644 --- a/docs/SECURITY.md +++ b/docs/SECURITY.md @@ -109,14 +109,19 @@ cp env.example .env ### Required Variables ``` +# REQUIRED (for Beefree SDK) BEE_CLIENT_ID BEE_CLIENT_SECRET -TEMPLATE_CATALOG_API_TOKEN -CS_API_TOKEN + +# OPTIONAL (only for HTML Import feature) HTML_IMPORTER_API_KEY -BRAND_STYLE_API_TOKEN (optional) ``` +**Note:** This app uses **local static templates** and **pre-generated exports**, so it does NOT need: +- ~~TEMPLATE_CATALOG_API_TOKEN~~ (not used) +- ~~CS_API_TOKEN~~ (not used) +- ~~BRAND_STYLE_API_TOKEN~~ (not used) + --- ## 📝 Secrets in Code Review diff --git a/docs/testing/QUICK_TEST_GUIDE.md b/docs/testing/QUICK_TEST_GUIDE.md new file mode 100644 index 0000000..00b89c0 --- /dev/null +++ b/docs/testing/QUICK_TEST_GUIDE.md @@ -0,0 +1,172 @@ +# Quick Test Guide + +## Running Tests - Quick Commands + +```bash +# Run all tests (watch mode) +npm test + +# Run all tests once (for CI/CD) +npm run test:run + +# Open visual test UI in browser +npm run test:ui + +# Generate coverage report +npm run test:coverage +``` + +## Test Results + +``` +✅ 93 tests passing +✅ 8 test files +✅ Frontend: 71 tests +✅ Backend: 17 tests +✅ Duration: ~2 seconds +``` + +## What's Tested + +### Frontend ✅ +- **Services** (16 tests) + - Local templates loading + - Authentication API + +- **Utils** (14 tests) + - Export helpers + - Template ID validation + - Error handling + +- **Components** (46 tests) + - Export dropdown + - Export result modal + - HTML import modal + +### Backend ✅ +- **API Endpoints** (17 tests) + - Beefree authentication + - HTML importer + - Error handling + - Security validation + +## Test File Locations + +``` +src/ + services/__tests__/ + ✅ localTemplates.test.ts (13 tests) + ✅ api.test.ts (3 tests) + + utils/__tests__/ + ✅ exportHelpers.test.ts (14 tests) + + components/__tests__/ + ✅ ExportDropdown.test.tsx (12 tests) + ✅ ExportResultModal.test.tsx (20 tests) + ✅ HtmlImportModal.test.tsx (14 tests) + +api/ + proxy/__tests__/ + ✅ bee-auth.test.js (6 tests) + + v1/__tests__/ + ✅ html-importer.test.js (11 tests) +``` + +## Coverage Reports + +After running `npm run test:coverage`: + +- **Terminal**: Shows coverage summary +- **HTML Report**: Open `coverage/index.html` in browser +- **JSON Report**: `coverage/coverage-final.json` + +## Visual Test UI + +Run `npm run test:ui` and open: +``` +http://localhost:51204/__vitest__/ +``` + +Features: +- 🎯 Click on tests to see details +- 📊 View test execution timeline +- 🔍 Search and filter tests +- 🐛 Debug failing tests +- 📈 See code coverage inline + +## Writing New Tests + +### Component Test Template +```typescript +import { describe, it, expect } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import MyComponent from '../MyComponent'; + +describe('MyComponent', () => { + it('should render correctly', () => { + render(); + expect(screen.getByText('Hello')).toBeInTheDocument(); + }); +}); +``` + +### Service Test Template +```typescript +import { describe, it, expect, vi } from 'vitest'; +import { myService } from '../myService'; + +describe('myService', () => { + it('should fetch data', async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => ({ data: 'test' }) + }); + + const result = await myService.getData(); + expect(result).toEqual({ data: 'test' }); + }); +}); +``` + +## Troubleshooting + +### Tests not running? +```bash +# Reinstall dependencies +npm install + +# Clear cache +rm -rf node_modules .vitest +npm install +``` + +### Import errors? +Check that test files are in `__tests__` folders with `.test.ts` or `.test.tsx` extension. + +### Mock not working? +Make sure to call `vi.clearAllMocks()` in `beforeEach()`: +```typescript +beforeEach(() => { + vi.clearAllMocks(); +}); +``` + +## Documentation + +📚 **Full documentation**: [TESTING.md](TESTING.md) +📊 **Test summary**: [TEST_SUMMARY.md](TEST_SUMMARY.md) + +## Key Points + +✅ All 93 tests passing +✅ Fast execution (~2 seconds) +✅ Easy to run (`npm test`) +✅ Visual UI available (`npm run test:ui`) +✅ Coverage reports (`npm run test:coverage`) +✅ Well documented (TESTING.md) + +--- + +**Need help?** See [TESTING.md](TESTING.md) for complete guide. diff --git a/docs/testing/TESTING.md b/docs/testing/TESTING.md new file mode 100644 index 0000000..6bbc954 --- /dev/null +++ b/docs/testing/TESTING.md @@ -0,0 +1,375 @@ +# Testing Guide + +This document provides comprehensive information about the testing infrastructure for this Beefree SDK integration application. + +## Table of Contents + +- [Overview](#overview) +- [Test Structure](#test-structure) +- [Running Tests](#running-tests) +- [Test Coverage](#test-coverage) +- [Writing Tests](#writing-tests) +- [Troubleshooting](#troubleshooting) + +## Overview + +This application uses [Vitest](https://vitest.dev/) as the testing framework, along with: + +- **@testing-library/react** - React component testing utilities +- **@testing-library/jest-dom** - Custom DOM matchers +- **@testing-library/user-event** - User interaction simulation +- **jsdom** - DOM implementation for Node.js +- **vitest/ui** - Visual test UI + +## Test Structure + +``` +. +├── src/ +│ ├── services/ +│ │ ├── __tests__/ +│ │ │ ├── localTemplates.test.ts +│ │ │ └── api.test.ts +│ ├── utils/ +│ │ └── __tests__/ +│ │ └── exportHelpers.test.ts +│ ├── components/ +│ │ └── __tests__/ +│ │ ├── ExportDropdown.test.tsx +│ │ ├── ExportResultModal.test.tsx +│ │ └── HtmlImportModal.test.tsx +│ └── tests/ +│ ├── setup.ts # Test setup and global mocks +│ └── mocks/ +│ └── handlers.ts # Mock data for tests +├── api/ +│ ├── proxy/ +│ │ └── __tests__/ +│ │ └── bee-auth.test.js +│ └── v1/ +│ └── __tests__/ +│ └── html-importer.test.js +└── vitest.config.ts # Vitest configuration +``` + +## Running Tests + +### All Tests + +Run all tests in watch mode: + +```bash +npm test +``` + +### Single Run + +Run all tests once (useful for CI/CD): + +```bash +npm run test:run +``` + +### Visual UI + +Run tests with the Vitest UI: + +```bash +npm run test:ui +``` + +This will open a browser with an interactive test UI at `http://localhost:51204/__vitest__/` + +### Coverage Report + +Generate test coverage report: + +```bash +npm run test:coverage +``` + +Coverage reports are generated in: +- Terminal output +- `coverage/` directory (HTML report) + +## Test Coverage + +### Frontend Tests + +#### Services +- **localTemplates.ts** (100%) + - ✅ loadTemplatesIndex() + - ✅ loadTemplate() + - ✅ URL generators (HTML, PDF, Image, Text) + - ✅ loadTemplateHtml() + - ✅ loadTemplatePlainText() + - ✅ loadAllTemplates() + +- **api.ts** (100%) + - ✅ authAPI.getToken() with default uid + - ✅ authAPI.getToken() with custom uid + - ✅ Error handling + +#### Utils +- **exportHelpers.ts** (100%) + - ✅ getTemplateId() + - ✅ validateTemplateId() + - ✅ showExportWarning() + - ✅ handleExportError() + - ✅ getTemplateDisplayName() + +#### Components +- **ExportDropdown.tsx** (95%) + - ✅ Renders export button + - ✅ Toggles dropdown menu + - ✅ Calls export handlers (HTML, Text, Image, PDF) + - ✅ Closes after selection + - ✅ Disables during loading + - ✅ Shows loading spinners + - ✅ Renders documentation link + - ✅ Closes on outside click + +- **ExportResultModal.tsx** (95%) + - ✅ HTML export modal + - ✅ Plain text export modal + - ✅ PDF export modal + - ✅ Image export modal + - ✅ Loading states + - ✅ Download functionality + - ✅ Modal interactions (close, overlay click) + +- **HtmlImportModal.tsx** (100%) + - ✅ Renders sample HTML preview + - ✅ Loads sample HTML + - ✅ Shows loading state + - ✅ Handles errors + - ✅ Modal interactions (close, escape key) + +### Backend Tests + +#### API Endpoints +- **bee-auth.js** (100%) + - ✅ POST only (405 for other methods) + - ✅ Authenticates with default uid + - ✅ Authenticates with custom uid + - ✅ Error handling + - ✅ Uses environment variables + +- **html-importer.js** (100%) + - ✅ POST only (405 for other methods) + - ✅ Validates API key configuration + - ✅ Converts hardcoded sample HTML + - ✅ Ignores user-provided HTML (security) + - ✅ Handles errors (413, 422, timeout, general) + - ✅ Uses custom/default API URL + +## Writing Tests + +### Test File Naming + +- Test files should be named `*.test.ts` or `*.test.tsx` +- Place test files in `__tests__` directories next to the code they test + +### Component Test Example + +```typescript +import { describe, it, expect, vi } from 'vitest'; +import { render, screen, fireEvent } from '@testing-library/react'; +import MyComponent from '../MyComponent'; + +describe('MyComponent', () => { + it('should render correctly', () => { + render(); + expect(screen.getByText('Test')).toBeInTheDocument(); + }); + + it('should handle click events', () => { + const handleClick = vi.fn(); + render(); + + fireEvent.click(screen.getByRole('button')); + expect(handleClick).toHaveBeenCalled(); + }); +}); +``` + +### Service Test Example + +```typescript +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { myService } from '../myService'; + +describe('myService', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('should fetch data successfully', async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => ({ data: 'test' }), + }); + + const result = await myService.getData(); + expect(result).toEqual({ data: 'test' }); + }); + + it('should handle errors', async () => { + global.fetch = vi.fn().mockResolvedValue({ ok: false }); + + await expect(myService.getData()).rejects.toThrow(); + }); +}); +``` + +### Backend Endpoint Test Example + +```javascript +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import handler from '../my-endpoint.js'; + +describe('my-endpoint', () => { + let mockReq, mockRes; + + beforeEach(() => { + mockReq = { method: 'POST', body: {} }; + mockRes = { + status: vi.fn().mockReturnThis(), + json: vi.fn(), + }; + }); + + it('should handle POST requests', async () => { + await handler(mockReq, mockRes); + expect(mockRes.json).toHaveBeenCalledWith({ success: true }); + }); +}); +``` + +## Mocking + +### Global Mocks + +Global mocks are set up in [src/tests/setup.ts](src/tests/setup.ts): + +```typescript +// Mock window.alert +global.alert = vi.fn(); + +// Mock window.BeePlugin +global.BeePlugin = { + start: vi.fn(), +}; + +// Mock fetch +global.fetch = vi.fn(); + +// Mock URL.createObjectURL +global.URL.createObjectURL = vi.fn(() => 'blob:mock-url'); +``` + +### Mock Data + +Reusable mock data is stored in [src/tests/mocks/handlers.ts](src/tests/mocks/handlers.ts): + +```typescript +export const mockTemplate = { + id: 'test-template-1', + name: 'Test Template', + json_data: { /* ... */ }, +}; +``` + +## Test Configuration + +### vitest.config.ts + +```typescript +export default defineConfig({ + plugins: [react()], + test: { + globals: true, + environment: 'jsdom', + setupFiles: ['./src/tests/setup.ts'], + css: true, + coverage: { + provider: 'v8', + reporter: ['text', 'json', 'html'], + exclude: [ + 'node_modules/', + 'src/tests/', + '**/*.d.ts', + '**/*.config.*', + 'dist/', + ], + }, + }, +}); +``` + +## Troubleshooting + +### Tests Not Running + +1. Ensure all dependencies are installed: + ```bash + npm install + ``` + +2. Check that test files match the naming convention (`*.test.ts` or `*.test.tsx`) + +### Import Errors + +If you see module resolution errors: + +1. Check the import paths in your test files +2. Ensure `vitest.config.ts` has the correct `resolve.alias` configuration + +### Mock Issues + +If mocks aren't working: + +1. Clear mock calls with `vi.clearAllMocks()` in `beforeEach()` +2. Ensure mocks are set up before the test runs +3. Check that you're using `vi.fn()` instead of `jest.fn()` + +### Coverage Not Generating + +Ensure you have the coverage provider installed: + +```bash +npm install --save-dev @vitest/coverage-v8 +``` + +## CI/CD Integration + +For continuous integration, use: + +```bash +npm run test:run +``` + +This runs all tests once and exits with a status code: +- `0` = all tests passed +- `1` = one or more tests failed + +## Best Practices + +1. **Write tests alongside code** - Create tests as you develop features +2. **Test behavior, not implementation** - Focus on what the code does, not how +3. **Use descriptive test names** - Make it clear what's being tested +4. **Keep tests independent** - Each test should run in isolation +5. **Mock external dependencies** - Don't rely on real APIs or databases +6. **Aim for high coverage** - Target 80%+ code coverage +7. **Test edge cases** - Include error conditions and boundary values + +## Resources + +- [Vitest Documentation](https://vitest.dev/) +- [React Testing Library](https://testing-library.com/react) +- [Testing Library Queries](https://testing-library.com/docs/queries/about) +- [Vitest API Reference](https://vitest.dev/api/) + +--- + +For questions or issues with tests, please create an issue in the repository. diff --git a/docs/testing/TEST_SUMMARY.md b/docs/testing/TEST_SUMMARY.md new file mode 100644 index 0000000..d9880f7 --- /dev/null +++ b/docs/testing/TEST_SUMMARY.md @@ -0,0 +1,245 @@ +# Test Suite Summary + +## Overview + +A comprehensive test suite has been implemented for the Beefree SDK integration application covering both frontend and backend components. + +## Test Results + +``` +✅ Test Files: 8 passed (8) +✅ Tests: 93 passed (93) +⏱️ Duration: 2.18s +``` + +## Test Coverage + +### Frontend Tests (6 test files, 71 tests) + +#### Services (2 files, 16 tests) +- **[src/services/__tests__/localTemplates.test.ts](src/services/__tests__/localTemplates.test.ts)** - 13 tests ✅ + - loadTemplatesIndex() - success and error cases + - loadTemplate() - success and error cases + - URL generators for HTML, PDF, Image, Plain Text exports + - loadTemplateHtml() and loadTemplatePlainText() + - loadAllTemplates() + +- **[src/services/__tests__/api.test.ts](src/services/__tests__/api.test.ts)** - 3 tests ✅ + - authAPI.getToken() with default uid + - authAPI.getToken() with custom uid + - Error handling + +#### Utils (1 file, 14 tests) +- **[src/utils/__tests__/exportHelpers.test.ts](src/utils/__tests__/exportHelpers.test.ts)** - 14 tests ✅ + - getTemplateId() - various input scenarios + - validateTemplateId() - valid and invalid cases + - showExportWarning() - alert and console logging + - handleExportError() - Error instance and unknown types + - getTemplateDisplayName() - fallback logic for display_name, name, title + +#### Components (3 files, 46 tests) +- **[src/components/__tests__/ExportDropdown.test.tsx](src/components/__tests__/ExportDropdown.test.tsx)** - 12 tests ✅ + - Render export button + - Toggle dropdown menu + - Export handlers (HTML, Plain Text, Image, PDF) + - Close after selection + - Disable during loading + - Documentation link + - Click outside to close + +- **[src/components/__tests__/ExportResultModal.test.tsx](src/components/__tests__/ExportResultModal.test.tsx)** - 20 tests ✅ + - HTML export modal and download + - Plain text export modal and download + - PDF export modal and link + - Image export modal and download + - Loading states for all export types + - Modal interactions (close button, overlay click, footer close) + - Footer buttons visibility + +- **[src/components/__tests__/HtmlImportModal.test.tsx](src/components/__tests__/HtmlImportModal.test.tsx)** - 14 tests ✅ + - Render modal with sample HTML + - Load sample HTML + - Loading state during import + - Error handling (Error instance and unknown types) + - Modal close interactions + - Escape key handling + - Error clearing on modal close + +### Backend Tests (2 test files, 17 tests) + +#### API Endpoints (2 files, 17 tests) +- **[api/proxy/__tests__/bee-auth.test.js](api/proxy/__tests__/bee-auth.test.js)** - 6 tests ✅ + - POST method only (405 for others) + - Authentication with default uid + - Authentication with custom uid + - Error handling (network errors, axios errors) + - Environment variable usage + +- **[api/v1/__tests__/html-importer.test.js](api/v1/__tests__/html-importer.test.js)** - 11 tests ✅ + - POST method only (405 for others) + - API key validation + - Hardcoded sample HTML conversion + - Security: Ignores user-provided HTML + - Error handling (413 Payload Too Large, 422 Invalid HTML, timeout, general errors) + - Custom/default API URL usage + +## Test Infrastructure + +### Configuration Files +- **[vitest.config.ts](vitest.config.ts)** - Vitest configuration with jsdom environment +- **[src/tests/setup.ts](src/tests/setup.ts)** - Global test setup and mocks +- **[src/tests/mocks/handlers.ts](src/tests/mocks/handlers.ts)** - Reusable mock data + +### Test Scripts (package.json) +```json +{ + "test": "vitest", // Run tests in watch mode + "test:ui": "vitest --ui", // Visual test UI + "test:run": "vitest run", // Single run (for CI/CD) + "test:coverage": "vitest run --coverage" // Generate coverage report +} +``` + +## Running Tests + +### Watch Mode (Development) +```bash +npm test +``` + +### Single Run (CI/CD) +```bash +npm run test:run +``` + +### Visual UI +```bash +npm run test:ui +``` +Opens browser at `http://localhost:51204/__vitest__/` + +### Coverage Report +```bash +npm run test:coverage +``` +Generates reports in `coverage/` directory + +## Key Testing Patterns + +### Component Testing +```typescript +import { render, screen, fireEvent } from '@testing-library/react'; + +render(); +expect(screen.getByText('text')).toBeInTheDocument(); +fireEvent.click(screen.getByRole('button')); +``` + +### Service Testing +```typescript +global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockData, +}); + +const result = await service.getData(); +expect(result).toEqual(mockData); +``` + +### Backend Testing +```javascript +const mockReq = { method: 'POST', body: {} }; +const mockRes = { + status: vi.fn().mockReturnThis(), + json: vi.fn(), +}; + +await handler(mockReq, mockRes); +expect(mockRes.json).toHaveBeenCalledWith(expected); +``` + +## Mocking Strategy + +### Global Mocks (setup.ts) +- `window.alert` - Prevents alerts during tests +- `window.BeePlugin` - Mocks Beefree SDK +- `global.fetch` - Mocks API calls +- `URL.createObjectURL` - Mocks blob URLs + +### Module Mocks +- `axios` - Mocked for API service tests +- Component dependencies - Isolated for unit testing + +## Test Organization + +``` +src/ +├── services/__tests__/ +├── utils/__tests__/ +├── components/__tests__/ +└── tests/ + ├── setup.ts + └── mocks/ + +api/ +├── proxy/__tests__/ +└── v1/__tests__/ +``` + +## Documentation + +Comprehensive testing guide available in **[TESTING.md](TESTING.md)** covering: +- Test structure and organization +- Running tests (all modes) +- Writing new tests +- Mocking strategies +- Troubleshooting +- CI/CD integration +- Best practices + +## Dependencies + +### Testing Framework +- **vitest** (4.0.16) - Fast Vite-native test framework +- **@vitest/ui** (4.0.16) - Visual test UI + +### React Testing +- **@testing-library/react** (16.3.1) - React component testing +- **@testing-library/jest-dom** (6.9.1) - Custom DOM matchers +- **@testing-library/user-event** (14.6.1) - User interaction simulation + +### Environment +- **jsdom** (27.3.0) - DOM implementation for Node.js +- **happy-dom** (20.0.11) - Alternative DOM implementation + +### Backend Testing +- **supertest** (7.1.4) - HTTP assertions (installed, not yet used) +- **@types/express** (5.0.6) - TypeScript types for Express +- **@types/supertest** (6.0.3) - TypeScript types for Supertest + +## Future Enhancements + +The following components were not included in the initial test suite but can be added: + +1. **TemplateTopBar.tsx** - Template selection and actions +2. **BeeConfigSidebar.tsx** - Configuration editor +3. **BeefreeEditor.tsx** - Beefree SDK editor wrapper +4. **App.tsx** - Main application component +5. **proxy-server.js** - Express proxy server + +These were excluded because: +- They involve complex integration with the Beefree SDK +- They require extensive DOM manipulation and UI testing +- The core business logic they contain is already tested through services and utilities + +## Conclusion + +The test suite provides: +- ✅ **93 passing tests** across frontend and backend +- ✅ **Comprehensive coverage** of services, utilities, and components +- ✅ **Easy-to-run** commands for development and CI/CD +- ✅ **Well-documented** testing patterns and practices +- ✅ **Robust mocking** strategy for external dependencies +- ✅ **Fast execution** (2.18s for full suite) + +The testing infrastructure is production-ready and provides a solid foundation for maintaining code quality as the application evolves. diff --git a/env.example b/env.example index 05e7011..baac19d 100644 --- a/env.example +++ b/env.example @@ -1,17 +1,9 @@ -# Beefree SDK Credentials +# Beefree SDK Credentials (REQUIRED) BEE_CLIENT_ID='YOUR-CLIENT-ID' BEE_CLIENT_SECRET='YOUR-CLIENT-SECRET' -# Template Catalog API -TEMPLATE_CATALOG_API_URL='https://api.getbee.io/v1/catalog' -TEMPLATE_CATALOG_API_TOKEN='YOUR-TEMPLATE-CATALOG-API' - -# Content Services API (for exports) -CS_API_TOKEN=YOUR-CONTENT-SERVICES-API-KEY' - -# HTML Importer API (for importing HTML emails) +# HTML Importer API (OPTIONAL - only needed for "Import HTML" feature) HTML_IMPORTER_API_KEY='YOUR-HTML-IMPORTER-API-KEY' -# Server Port -PORT=3001 - +# Advanced Configuration (OPTIONAL) +# HTML_IMPORTER_URL='https://api.getbee.io/v1/conversion/html-to-json' # Custom HTML importer endpoint diff --git a/index.html b/index.html index e4b78ea..6897e27 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - Vite + React + TS + Beefree SDK Playground
diff --git a/package-lock.json b/package-lock.json index 9bac181..7d9a6c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,22 +14,45 @@ "dotenv": "^16.3.1", "express": "^4.18.2", "react": "^18.2.0", - "react-dom": "^18.2.0", - "resend": "^6.4.2" + "react-dom": "^18.2.0" }, "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.1", + "@testing-library/user-event": "^14.6.1", + "@types/express": "^5.0.6", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", + "@types/supertest": "^6.0.3", "@typescript-eslint/eslint-plugin": "^6.14.0", "@typescript-eslint/parser": "^6.14.0", "@vitejs/plugin-react": "^4.2.1", + "@vitest/ui": "^4.0.16", "eslint": "^8.55.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", + "happy-dom": "^20.0.11", + "jsdom": "^27.3.0", + "supertest": "^7.1.4", "typescript": "^5.2.2", - "vite": "^5.0.8" + "vite": "^5.0.8", + "vitest": "^4.0.16" } }, + "node_modules/@acemir/cssom": { + "version": "0.9.29", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.29.tgz", + "integrity": "sha512-G90x0VW+9nW4dFajtjCoT+NM0scAfH9Mb08IcjgFHYbfiL/lU04dTF9JuVOi3/OH+DJCQdcIseSXkdCB9Ky6JA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", + "dev": true, + "license": "MIT" + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -44,6 +67,61 @@ "node": ">=6.0.0" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.1.tgz", + "integrity": "sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "lru-cache": "^11.2.4" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.7.6", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.6.tgz", + "integrity": "sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.4" + } + }, + "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -298,6 +376,16 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", @@ -357,6 +445,141 @@ "load-script": "^2.0.0" } }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.21.tgz", + "integrity": "sha512-plP8N8zKfEZ26figX4Nvajx8DuzfuRpLTqglQ5d0chfnt35Qt3X+m6ASZ+rG0D0kxe/upDVNwSIVJP5n4FuNfw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -646,6 +869,23 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/netbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", @@ -663,6 +903,23 @@ "node": ">=12" } }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/openbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", @@ -680,6 +937,23 @@ "node": ">=12" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", @@ -936,6 +1210,19 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -974,6 +1261,23 @@ "node": ">= 8" } }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", + "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", @@ -1275,12 +1579,111 @@ "win32" ] }, - "node_modules/@stablelib/base64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/base64/-/base64-1.0.1.tgz", - "integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==", + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, "license": "MIT" }, + "node_modules/@testing-library/react": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.1.tgz", + "integrity": "sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1326,37 +1729,137 @@ "@babel/types": "^7.28.2" } }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.19.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz", - "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" } }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", + "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz", + "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { "version": "18.3.24", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.24.tgz", "integrity": "sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==", @@ -1384,6 +1887,58 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@types/superagent": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", + "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/supertest": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", + "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, + "node_modules/@types/whatwg-mimetype": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz", + "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", @@ -1610,6 +2165,112 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/@vitest/expect": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.16.tgz", + "integrity": "sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.0.16", + "@vitest/utils": "4.0.16", + "chai": "^6.2.1", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.16.tgz", + "integrity": "sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.16.tgz", + "integrity": "sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.0.16", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.16.tgz", + "integrity": "sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.16", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.16.tgz", + "integrity": "sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.0.16.tgz", + "integrity": "sha512-rkoPH+RqWopVxDnCBE/ysIdfQ2A7j1eDmW8tCxxrR9nnFBa9jKf86VgsSAzxBd1x+ny0GC4JgiD3SNfRHv3pOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.0.16", + "fflate": "^0.8.2", + "flatted": "^3.3.3", + "pathe": "^2.0.3", + "sirv": "^3.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "4.0.16" + } + }, + "node_modules/@vitest/utils": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.16.tgz", + "integrity": "sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.16", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1646,6 +2307,16 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1696,6 +2367,16 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -1712,6 +2393,23 @@ "node": ">=8" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1719,9 +2417,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -1736,6 +2434,16 @@ "dev": true, "license": "MIT" }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -1900,6 +2608,16 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chai": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", + "integrity": "sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1949,6 +2667,16 @@ "node": ">= 0.8" } }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1999,6 +2727,13 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -2027,6 +2762,42 @@ "node": ">= 8" } }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.5.tgz", + "integrity": "sha512-GlsEptulso7Jg0VaOZ8BXQi3AkYM5BOJKEO/rjMidSCq70FkIC5y0eawrCXeYzxgt3OCf4Ls+eoxN+/05vN0Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^4.1.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.21", + "css-tree": "^3.1.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -2034,6 +2805,30 @@ "dev": true, "license": "MIT" }, + "node_modules/data-urls": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", + "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/data-urls/node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/debug": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", @@ -2052,6 +2847,13 @@ } } }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2077,6 +2879,16 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -2087,6 +2899,17 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2113,6 +2936,14 @@ "node": ">=6.0.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/dotenv": { "version": "16.6.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", @@ -2161,6 +2992,19 @@ "node": ">= 0.8" } }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -2179,6 +3023,13 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -2206,12 +3057,6 @@ "node": ">= 0.4" } }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "license": "MIT" - }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -2468,9 +3313,19 @@ "node": ">=4.0" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", @@ -2487,6 +3342,16 @@ "node": ">= 0.6" } }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", @@ -2599,11 +3464,12 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-sha256": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", - "integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==", - "license": "Unlicense" + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.19.1", @@ -2615,6 +3481,13 @@ "reusify": "^1.0.4" } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2749,6 +3622,24 @@ "node": ">= 6" } }, + "node_modules/formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2966,6 +3857,31 @@ "dev": true, "license": "MIT" }, + "node_modules/happy-dom": { + "version": "20.0.11", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.0.11.tgz", + "integrity": "sha512-QsCdAUHAmiDeKeaNojb1OHOPF7NjcWPBR7obdu3NwH2a/oyQaLg5d0aaCy/9My6CdPChYF07dvz5chaXBGaD4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^20.0.0", + "@types/whatwg-mimetype": "^3.0.2", + "whatwg-mimetype": "^3.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/happy-dom/node_modules/@types/node": { + "version": "20.19.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", + "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3015,6 +3931,19 @@ "node": ">= 0.4" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -3031,6 +3960,34 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3080,6 +4037,16 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3150,6 +4117,13 @@ "node": ">=8" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3164,9 +4138,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -3176,6 +4150,56 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.3.0.tgz", + "integrity": "sha512-GtldT42B8+jefDUC4yUKAvsaOrH7PDHmZxZXNgF2xMmymjUbRYJvpAybZAKEmXDGTM0mCsz8duOa4vTm5AY2Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@acemir/cssom": "^0.9.28", + "@asamuzakjp/dom-selector": "^6.7.6", + "cssstyle": "^5.3.4", + "data-urls": "^6.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.1.0", + "ws": "^8.18.3", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -3298,6 +4322,27 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -3307,6 +4352,13 @@ "node": ">= 0.4" } }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -3391,6 +4443,16 @@ "node": ">= 0.6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -3407,6 +4469,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3476,6 +4548,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -3561,6 +4644,19 @@ "node": ">=6" } }, + "node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -3616,6 +4712,13 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3675,6 +4778,36 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -3719,12 +4852,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "license": "MIT" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3795,6 +4922,14 @@ "react": "^18.3.1" } }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", @@ -3805,30 +4940,28 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resend": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/resend/-/resend-6.4.2.tgz", - "integrity": "sha512-YnxmwneltZtjc7Xff+8ZjG1/xPLdstCiqsedgO/JxWTf7vKRAPCx6CkhQ3ZXskG0mrmf8+I5wr/wNRd8PQMUfw==", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, "license": "MIT", "dependencies": { - "svix": "1.76.1" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@react-email/render": "*" - }, - "peerDependenciesMeta": { - "@react-email/render": { - "optional": true - } + "node": ">=8" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "node_modules/resolve-from": { @@ -3960,6 +5093,19 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -4146,6 +5292,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -4166,6 +5334,13 @@ "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -4175,6 +5350,13 @@ "node": ">= 0.8" } }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4188,6 +5370,19 @@ "node": ">=8" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4201,6 +5396,54 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/superagent": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.2.3.tgz", + "integrity": "sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.1", + "cookiejar": "^2.1.4", + "debug": "^4.3.7", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.4", + "formidable": "^3.5.4", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.2" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/supertest": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.4.tgz", + "integrity": "sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^10.2.3" + }, + "engines": { + "node": ">=14.18.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4214,19 +5457,12 @@ "node": ">=8" } }, - "node_modules/svix": { - "version": "1.76.1", - "resolved": "https://registry.npmjs.org/svix/-/svix-1.76.1.tgz", - "integrity": "sha512-CRuDWBTgYfDnBLRaZdKp9VuoPcNUq9An14c/k+4YJ15Qc5Grvf66vp0jvTltd4t7OIRj+8lM1DAgvSgvf7hdLw==", - "license": "MIT", - "dependencies": { - "@stablelib/base64": "^1.0.0", - "@types/node": "^22.7.5", - "es6-promise": "^4.2.8", - "fast-sha256": "^1.3.0", - "url-parse": "^1.5.10", - "uuid": "^10.0.0" - } + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" }, "node_modules/text-table": { "version": "0.2.0", @@ -4235,13 +5471,108 @@ "dev": true, "license": "MIT" }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, - "license": "MIT", - "dependencies": { + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinyrainbow": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", + "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.19" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", + "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { "is-number": "^7.0.0" }, "engines": { @@ -4257,6 +5588,42 @@ "node": ">=0.6" } }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", + "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -4327,6 +5694,7 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, "license": "MIT" }, "node_modules/unpipe": { @@ -4379,16 +5747,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -4398,19 +5756,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -4421,9 +5766,9 @@ } }, "node_modules/vite": { - "version": "5.4.19", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", - "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -4480,38 +5825,811 @@ } } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" + "node_modules/vitest": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.16.tgz", + "integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.0.16", + "@vitest/mocker": "4.0.16", + "@vitest/pretty-format": "4.0.16", + "@vitest/runner": "4.0.16", + "@vitest/snapshot": "4.0.16", + "@vitest/spy": "4.0.16", + "@vitest/utils": "4.0.16", + "es-module-lexer": "^1.7.0", + "expect-type": "^1.2.2", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^3.10.0", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3", + "vite": "^6.0.0 || ^7.0.0", + "why-is-node-running": "^2.3.0" }, "bin": { - "node-which": "bin/node-which" + "vitest": "vitest.mjs" }, "engines": { - "node": ">= 8" + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.0.16", + "@vitest/browser-preview": "4.0.16", + "@vitest/browser-webdriverio": "4.0.16", + "@vitest/ui": "4.0.16", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "node_modules/vitest/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], "dev": true, - "license": "ISC" + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.16.tgz", + "integrity": "sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.0.16", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/vitest/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", + "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz", + "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" }, "node_modules/yallist": { "version": "3.1.1", diff --git a/package.json b/package.json index d45db24..baa8666 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,11 @@ "dev:proxy": "node proxy-server.js", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" + "preview": "vite preview", + "test": "vitest", + "test:ui": "vitest --ui", + "test:run": "vitest run", + "test:coverage": "vitest run --coverage" }, "dependencies": { "@beefree.io/sdk": "9.2.1", @@ -20,15 +24,25 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.1", + "@testing-library/user-event": "^14.6.1", + "@types/express": "^5.0.6", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", + "@types/supertest": "^6.0.3", "@typescript-eslint/eslint-plugin": "^6.14.0", "@typescript-eslint/parser": "^6.14.0", "@vitejs/plugin-react": "^4.2.1", + "@vitest/ui": "^4.0.16", "eslint": "^8.55.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", + "happy-dom": "^20.0.11", + "jsdom": "^27.3.0", + "supertest": "^7.1.4", "typescript": "^5.2.2", - "vite": "^5.0.8" + "vite": "^5.0.8", + "vitest": "^4.0.16" } } diff --git a/proxy-server.js b/proxy-server.js index bb6df80..c7f15b8 100644 --- a/proxy-server.js +++ b/proxy-server.js @@ -8,43 +8,23 @@ dotenv.config(); const app = express(); const PORT = process.env.PORT || 3001; +// Constants +const MAX_PAYLOAD_SIZE = '50mb'; +const MAX_HTML_SIZE = 500000; // 500KB + app.use(cors()); // Increase payload limit for large template JSON data -app.use(express.json({ limit: '50mb' })); -app.use(express.urlencoded({ limit: '50mb', extended: true })); -app.use(express.text({ type: ['text/*', 'application/xhtml+xml', 'application/xml'], limit: '50mb' })); +app.use(express.json({ limit: MAX_PAYLOAD_SIZE })); +app.use(express.urlencoded({ limit: MAX_PAYLOAD_SIZE, extended: true })); +app.use(express.text({ type: ['text/*', 'application/xhtml+xml', 'application/xml'], limit: MAX_PAYLOAD_SIZE })); const BEE_CLIENT_ID = process.env.BEE_CLIENT_ID; const BEE_CLIENT_SECRET = process.env.BEE_CLIENT_SECRET; const TEMPLATE_CATALOG_API_URL = process.env.TEMPLATE_CATALOG_API_URL || 'https://api.getbee.io/v1/catalog'; const TEMPLATE_CATALOG_API_TOKEN = process.env.TEMPLATE_CATALOG_API_TOKEN; -const CS_API_TOKEN = process.env.CS_API_TOKEN; -const RAW_CS_TOKEN = CS_API_TOKEN || ''; -const CS_AUTH = RAW_CS_TOKEN.startsWith('Bearer ') ? RAW_CS_TOKEN : (RAW_CS_TOKEN ? `Bearer ${RAW_CS_TOKEN}` : ''); const HTML_IMPORTER_API_KEY = process.env.HTML_IMPORTER_API_KEY; const HTML_IMPORTER_URL = process.env.HTML_IMPORTER_URL || 'https://api.getbee.io/v1/conversion/html-to-json'; -// Cache for performance optimization -const cache = new Map(); -const CACHE_DURATION = 5 * 60 * 1000; // 5 minutes - -function getCacheKey(url, body) { - return `${url}:${JSON.stringify(body)}`; -} - -function getFromCache(key) { - const cached = cache.get(key); - if (cached && Date.now() - cached.timestamp < CACHE_DURATION) { - return cached.data; - } - cache.delete(key); - return null; -} - -function setCache(key, data) { - cache.set(key, { data, timestamp: Date.now() }); -} - // V2 Auth Endpoint app.post('/proxy/bee-auth', async (req, res) => { try { @@ -68,58 +48,6 @@ app.post('/proxy/bee-auth', async (req, res) => { }); // Template Catalog API endpoints (note: Vite rewrites /api -> '') -app.get('/templates', async (req, res) => { - try { - if (!TEMPLATE_CATALOG_API_TOKEN) { - return res.status(500).json({ error: 'Template Catalog API Token not configured' }); - } - - const { category, collection, designer, tag, limit = 20, offset = 0 } = req.query; - - const params = new URLSearchParams(); - if (category) params.append('category', category); - if (collection) params.append('collection', collection); - if (designer) params.append('designer', designer); - if (tag) params.append('tag', tag); - if (limit) params.append('limit', limit); - if (offset) params.append('offset', offset); - - const response = await axios.get(`${TEMPLATE_CATALOG_API_URL}/templates?${params.toString()}`, { - headers: { - 'Authorization': `Bearer ${TEMPLATE_CATALOG_API_TOKEN}`, - 'Content-Type': 'application/json' - } - }); - - res.json(response.data); - } catch (error) { - console.error('Template catalog error:', error.message); - res.status(500).json({ error: 'Failed to fetch templates' }); - } -}); - -app.get('/templates/:id', async (req, res) => { - try { - if (!TEMPLATE_CATALOG_API_TOKEN) { - return res.status(500).json({ error: 'Template Catalog API Token not configured' }); - } - - const { id } = req.params; - - const response = await axios.get(`${TEMPLATE_CATALOG_API_URL}/templates/${id}`, { - headers: { - 'Authorization': `Bearer ${TEMPLATE_CATALOG_API_TOKEN}`, - 'Content-Type': 'application/json' - } - }); - - res.json(response.data); - } catch (error) { - console.error('Template fetch error:', error.message); - res.status(500).json({ error: 'Failed to fetch template' }); - } -}); - app.get('/categories', async (req, res) => { try { if (!TEMPLATE_CATALOG_API_TOKEN) { @@ -266,67 +194,6 @@ app.get('/tags', async (req, res) => { } }); -// Helper to forward POST requests to Content Services API (v1) -const forwardPost = async (targetUrl, req, res, responseType = 'json') => { - if (!CS_AUTH) { - res.status(500).json({ error: 'CS_API_TOKEN is not configured' }); - return; - } - try { - const payload = typeof req.body === 'string' ? req.body : JSON.stringify(req.body); - const response = await axios.post(targetUrl, payload, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': CS_AUTH - }, - responseType - }); - - if (responseType === 'arraybuffer') { - res.setHeader('Content-Type', 'image/png'); - res.setHeader('Content-Disposition', 'inline'); - res.status(200).send(response.data); - return; - } - res.status(200).send(response.data); - } catch (error) { - const details = (error && error.response && error.response.data) || error.message || 'Unknown error'; - console.error('CS API forward error:', details); - res.status(500).json({ message: `Error exporting from ${targetUrl}`, details }); - } -}; - -// Content Services API Export Endpoints -app.post('/v1/message/html', async (req, res) => { - await forwardPost('https://api.getbee.io/v1/message/html', req, res); -}); - -app.post('/v1/message/plain-text', async (req, res) => { - await forwardPost('https://api.getbee.io/v1/message/plain-text', req, res); -}); - -app.post('/v1/message/pdf', async (req, res) => { - await forwardPost('https://api.getbee.io/v1/message/pdf', req, res); -}); - -// Image (returns binary) -app.post('/v1/message/image', async (req, res) => { - await forwardPost('https://api.getbee.io/v1/message/image', req, res, 'arraybuffer'); -}); - -// Cache management endpoints -app.get('/cache/status', (req, res) => { - res.json({ - size: cache.size, - keys: Array.from(cache.keys()).slice(0, 10) // Show first 10 keys - }); -}); - -app.post('/cache/clear', (req, res) => { - cache.clear(); - res.json({ message: 'Cache cleared' }); -}); - // HTML Sanitization function const sanitizeHtml = (html) => { if (typeof html !== 'string') { @@ -387,7 +254,7 @@ app.post('/v1/html-importer', async (req, res) => { const sanitizationResult = sanitizeHtml(html); const sanitizedHtml = sanitizationResult.content; - if (sanitizedHtml.length > 500000) { // 500KB limit + if (sanitizedHtml.length > MAX_HTML_SIZE) { return res.status(413).json({ error: 'HTML content too large (max 500KB)' }); } @@ -427,16 +294,6 @@ app.post('/v1/html-importer', async (req, res) => { } }); -// Auto-cleanup expired cache entries every 10 minutes -setInterval(() => { - const now = Date.now(); - for (const [key, value] of cache.entries()) { - if (now - value.timestamp > CACHE_DURATION) { - cache.delete(key); - } - } -}, 10 * 60 * 1000); - app.listen(PORT, () => { console.log(`Proxy server running on http://localhost:${PORT}`); }); diff --git a/public/assets/css/beefree-custom-design.css b/public/assets/css/beefree-custom-design.css new file mode 100644 index 0000000..1be20e2 --- /dev/null +++ b/public/assets/css/beefree-custom-design.css @@ -0,0 +1,329 @@ +/* + * Simplified Green Theme for Beefree SDK + * + * Following Beefree SDK Custom CSS Best Practices: + * - Only using --cs suffix classes + * - Using body.bee--cs prefix for specificity + * - Avoiding global styles + * - No styling of stage elements + */ + +@import url('https://fonts.googleapis.com/css2?family=Dancing+Script:wght@400;500;600;700&family=Kalam:wght@300;400;700&display=swap'); + +/* Color Variables */ +:root { + --green-primary: #1DB954; + --green-hover: #1ED760; + --green-light: #E8F5E9; + --green-border: #A5D6A7; + --text-dark: #191414; + --text-light: #FFFFFF; + --bg-white: #FFFFFF; + --bg-light: #F5F5F5; +} + +/* Base - Cursive font ONLY for UI elements, NOT template content */ +.widget-bar.widget-bar--cs, +.widget-bar.widget-bar--cs *, +.header--cs, +.header--cs * { + font-family: 'Kalam', 'Dancing Script', cursive, sans-serif; +} + +/* Stage - DO NOT style - let template remain unchanged */ +/* Removed stage styling to prevent affecting template design */ + +/* ============================================ + TOP BAR / HEADER + ============================================ */ + +/* Header buttons - Green with cursive font */ +body.bee--cs .button-primary--cs, +.header--cs .btn-primary { + background-color: var(--green-primary) !important; + color: var(--text-light) !important; + border-radius: 500px !important; + padding: 8px 16px !important; + font-family: 'Kalam', cursive, sans-serif !important; + font-weight: 600 !important; + font-size: 13px !important; +} + +body.bee--cs .button-primary--cs:hover, +.header--cs .btn-primary:hover { + background-color: var(--green-hover) !important; +} + +/* ============================================ + SIDEBAR / WIDGET BAR + ============================================ */ + +/* Widget bar - Light background, no black */ +.widget-bar.widget-bar--cs { + background-color: var(--bg-white) !important; +} + +/* Tabs - Light background with dark text */ +.widget-bar.widget-bar--cs .tabset__tab--cs:not(.active) { + background-color: var(--bg-light) !important; +} + +.widget-bar.widget-bar--cs .tabset__tab--cs:not(.active) a { + color: var(--text-dark) !important; +} + +.widget-bar.widget-bar--cs .tabset__tab--cs.active { + background-color: var(--bg-white) !important; +} + +.widget-bar.widget-bar--cs .tabset__tab--cs.active a { + color: var(--text-dark) !important; + border-bottom-color: var(--green-primary) !important; +} + +/* Tab icons */ +.widget-bar.widget-bar--cs .tabset__tab--cs:not(.active) svg path { + fill: var(--text-dark) !important; +} + +.widget-bar.widget-bar--cs .tabset__tab--cs.active svg path { + fill: var(--green-primary) !important; +} + +/* Collapsible section titles - Light background, dark text */ +.widget-bar.widget-bar--cs .widgets-section__title--cs { + background-color: var(--bg-white) !important; + color: var(--text-dark) !important; + border-bottom: 1px solid var(--green-border) !important; +} + +/* ============================================ + CONTENT TILES - Light green like blue example + ============================================ */ + +.sidebar-draggable--cs, +.sidebar-draggable-heading--cs, +.sidebar-draggable-paragraph--cs, +.sidebar-draggable-button--cs, +.sidebar-draggable-image--cs, +.sidebar-draggable-list--cs, +.sidebar-draggable-divider--cs, +.sidebar-draggable-spacer--cs, +.sidebar-draggable-social--cs, +.sidebar-draggable-html--cs, +.sidebar-draggable-video--cs, +.sidebar-draggable-form--cs, +.sidebar-draggable-icons--cs, +.sidebar-draggable-menu--cs, +.sidebar-draggable-carousel--cs, +.sidebar-draggable-text--cs { + background-color: var(--green-light) !important; + border: 2px solid var(--green-primary) !important; + border-radius: 8px !important; + color: var(--green-primary) !important; + font-weight: 600 !important; +} + +/* Content tile text and icons - GREEN for noticeable branding */ +.sidebar-draggable--cs *, +.sidebar-draggable-heading--cs *, +.sidebar-draggable-paragraph--cs *, +.sidebar-draggable-button--cs *, +.sidebar-draggable-image--cs *, +.sidebar-draggable-list--cs *, +.sidebar-draggable-divider--cs *, +.sidebar-draggable-spacer--cs *, +.sidebar-draggable-social--cs *, +.sidebar-draggable-html--cs *, +.sidebar-draggable-video--cs *, +.sidebar-draggable-form--cs *, +.sidebar-draggable-icons--cs *, +.sidebar-draggable-menu--cs *, +.sidebar-draggable-carousel--cs *, +.sidebar-draggable-text--cs * { + color: var(--green-primary) !important; +} + +/* Content tile icons - GREEN for noticeable branding */ +.sidebar-draggable--cs svg path, +.sidebar-draggable-heading--cs svg path, +.sidebar-draggable-paragraph--cs svg path, +.sidebar-draggable-button--cs svg path, +.sidebar-draggable-image--cs svg path, +.sidebar-draggable-list--cs svg path, +.sidebar-draggable-divider--cs svg path, +.sidebar-draggable-spacer--cs svg path, +.sidebar-draggable-social--cs svg path, +.sidebar-draggable-html--cs svg path, +.sidebar-draggable-video--cs svg path, +.sidebar-draggable-form--cs svg path, +.sidebar-draggable-icons--cs svg path, +.sidebar-draggable-menu--cs svg path, +.sidebar-draggable-carousel--cs svg path, +.sidebar-draggable-text--cs svg path { + fill: var(--green-primary) !important; +} + +/* Content tile hover - Darker green background, keep green text */ +.sidebar-draggable--cs:hover, +.sidebar-draggable-heading--cs:hover, +.sidebar-draggable-paragraph--cs:hover, +.sidebar-draggable-button--cs:hover, +.sidebar-draggable-image--cs:hover, +.sidebar-draggable-list--cs:hover, +.sidebar-draggable-divider--cs:hover, +.sidebar-draggable-spacer--cs:hover, +.sidebar-draggable-social--cs:hover, +.sidebar-draggable-html--cs:hover, +.sidebar-draggable-video--cs:hover, +.sidebar-draggable-form--cs:hover, +.sidebar-draggable-icons--cs:hover, +.sidebar-draggable-menu--cs:hover, +.sidebar-draggable-carousel--cs:hover, +.sidebar-draggable-text--cs:hover { + background-color: rgba(29, 185, 84, 0.2) !important; + border-color: var(--green-hover) !important; + border-width: 2px !important; +} + +/* Hovered tiles keep green text */ +.sidebar-draggable--cs:hover *, +.sidebar-draggable-heading--cs:hover *, +.sidebar-draggable-paragraph--cs:hover *, +.sidebar-draggable-button--cs:hover *, +.sidebar-draggable-image--cs:hover *, +.sidebar-draggable-list--cs:hover *, +.sidebar-draggable-divider--cs:hover *, +.sidebar-draggable-spacer--cs:hover *, +.sidebar-draggable-social--cs:hover *, +.sidebar-draggable-html--cs:hover *, +.sidebar-draggable-video--cs:hover *, +.sidebar-draggable-form--cs:hover *, +.sidebar-draggable-icons--cs:hover *, +.sidebar-draggable-menu--cs:hover *, +.sidebar-draggable-carousel--cs:hover *, +.sidebar-draggable-text--cs:hover * { + color: var(--green-primary) !important; +} + +.sidebar-draggable--cs:hover svg path, +.sidebar-draggable-heading--cs:hover svg path, +.sidebar-draggable-paragraph--cs:hover svg path, +.sidebar-draggable-button--cs:hover svg path, +.sidebar-draggable-image--cs:hover svg path, +.sidebar-draggable-list--cs:hover svg path, +.sidebar-draggable-divider--cs:hover svg path, +.sidebar-draggable-spacer--cs:hover svg path, +.sidebar-draggable-social--cs:hover svg path, +.sidebar-draggable-html--cs:hover svg path, +.sidebar-draggable-video--cs:hover svg path, +.sidebar-draggable-form--cs:hover svg path, +.sidebar-draggable-icons--cs:hover svg path, +.sidebar-draggable-menu--cs:hover svg path, +.sidebar-draggable-carousel--cs:hover svg path, +.sidebar-draggable-text--cs:hover svg path { + fill: var(--green-primary) !important; +} + +/* ============================================ + PROPERTIES PANEL + ============================================ */ + +/* Properties panel - Light background, dark text */ +.widget-bar.widget-bar--cs .properties-panel__title--cs, +.panel__title--cs { + background-color: var(--bg-white) !important; + color: var(--text-dark) !important; + border-bottom: 1px solid var(--green-border) !important; +} + +/* Labels - Dark text */ +.widget__label, +.widget__label--textbox { + color: var(--text-dark) !important; +} + +/* Inputs - Light background, dark text */ +.input-text--cs, +.input-text-boxed--cs, +.number-selector--cs { + background-color: var(--bg-white) !important; + border: 1px solid var(--green-border) !important; + color: var(--text-dark) !important; +} + +.input-text--cs:focus, +.input-text-boxed--cs:focus, +.number-selector--cs:focus { + border-color: var(--green-primary) !important; +} + +/* Selects - Light background, dark text */ +.widget-bar.widget-bar--cs select, +.line-height-select--cs { + background-color: var(--bg-white) !important; + border: 1px solid var(--green-border) !important; + color: var(--text-dark) !important; +} + +/* ============================================ + BUTTONS + ============================================ */ + +/* Plus/Minus buttons - Green icons only, no hover */ +body.bee--cs .number-selector--cs button, +body.bee--cs .button-icon--cs, +body.bee--cs .button-small--cs { + background-color: transparent !important; + color: var(--green-primary) !important; + border: none !important; +} + +body.bee--cs .number-selector--cs button:hover, +body.bee--cs .button-icon--cs:hover, +body.bee--cs .button-small--cs:hover { + background-color: transparent !important; + color: var(--green-primary) !important; + transform: none !important; +} + +body.bee--cs .number-selector--cs button svg path, +body.bee--cs .button-icon--cs svg path { + fill: var(--green-primary) !important; +} + +/* ============================================ + ROWS - Remove text input, keep dropdown only + ============================================ */ + +/* Hide row name input fields */ +.widget-bar.widget-bar--cs [class*="row"] input[type="text"], +.widget-bar.widget-bar--cs [class*="row-name"] input { + display: none !important; +} + +/* ============================================ + WIDGET BAR ONLY - Ensure light backgrounds + ============================================ */ + +/* Remove dark backgrounds ONLY in widget bar, NOT in stage */ +.widget-bar.widget-bar--cs [style*="background-color: #121212"], +.widget-bar.widget-bar--cs [style*="background-color: #191414"] { + background-color: var(--bg-white) !important; + color: var(--text-dark) !important; +} + +/* Ensure text is dark on light backgrounds ONLY in widget bar */ +.widget-bar.widget-bar--cs [style*="background-color: #fff"], +.widget-bar.widget-bar--cs [style*="background-color: white"], +.widget-bar.widget-bar--cs [style*="background-color: rgb(255"] { + color: var(--text-dark) !important; +} + +.widget-bar.widget-bar--cs [style*="background-color: #fff"] *, +.widget-bar.widget-bar--cs [style*="background-color: white"] * { + color: var(--text-dark) !important; +} + +/* IMPORTANT: Do NOT style anything in the stage/page-stage area */ +/* This ensures the template design remains completely unchanged */ diff --git a/public/templates/beefree-sdk-demo-template.json b/public/templates/beefree-sdk-demo-template.json new file mode 100644 index 0000000..6d6c033 --- /dev/null +++ b/public/templates/beefree-sdk-demo-template.json @@ -0,0 +1,3105 @@ +{ + "id": "beefree-sdk-demo-template", + "name": "Beefree SDK Demo Template", + "display_name": "Beefree SDK Demo Template", + "title": "Beefree SDK Demo Template", + "json_data": { + "page": { + "body": { + "container": { + "style": { + "background-color": "#FFFFFF" + } + }, + "content": { + "computedStyle": { + "linkColor": "#0068A5", + "messageBackgroundColor": "transparent", + "messageWidth": "600px" + }, + "style": { + "color": "#000000", + "font-family": "Arial, Helvetica Neue, Helvetica, sans-serif" + } + }, + "webFonts": [] + }, + "description": "", + "rows": [ + { + "columns": [ + { + "grid-columns": 7, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "183.328px" + }, + "image": { + "alt": "", + "height": "36.2031px", + "href": "", + "percWidth": 63, + "prefix": "", + "src": "https://d15k2d11r6t6rl.cloudfront.net/pub/bfra/bs0kfqbg/tqu/rwx/rj4/Logo%20version%3DColored%2C%20Name%3DOn.svg", + "target": "_self", + "width": "183.328px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "f8bd6594-7fd3-4374-867e-ce3bfb80bbd2" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "24px", + "padding-left": "0px", + "padding-right": "60px", + "padding-top": "20px" + }, + "uuid": "aac1083b-fa96-4f17-8485-63b6bb4c66f8" + }, + { + "grid-columns": 5, + "modules": [ + { + "descriptor": { + "button": { + "href": "https://example.com/", + "label": "

Get started

", + "style": { + "background-color": "#7747FF", + "border-bottom": "0px solid #FFFFFF", + "border-left": "0px solid #FFFFFF", + "border-radius": "4px", + "border-right": "0px solid #FFFFFF", + "border-top": "0px solid #FFFFFF", + "color": "#FFFFFF", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "200%", + "padding-bottom": "14px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "14px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 60, + "width": 119 + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "14eddea8-d132-40c4-a312-8ba2847354d1" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "24px", + "padding-left": "60px", + "padding-right": "0px", + "padding-top": "20px" + }, + "uuid": "bec7e18f-03db-4aa0-813e-c6e7bb5431ee" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "fb6fad26-5d89-4706-b525-e675efa11b1d" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#82EDA8", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "38px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "center" + }, + "text": "The best embeddable
drag-and-drop email builder
for SaaS
", + "title": "h1" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "c48ee5e7-66b3-4bbb-aed6-717f9ea8982d" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#FFFFFF", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "center" + }, + "text": "Intuitive visual no-code builders for email,
landing pages, popups.
", + "title": "h2" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "4px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "587bcbcf-d25f-4bc2-b156-a75bb025895f" + } + ], + "style": { + "background-color": "#341C78", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "24px" + }, + "uuid": "25dc09bf-c2da-4617-81ad-a8b44b35a744" + } + ], + "container": { + "style": { + "background-color": "#341C78", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "d220e164-33f1-4a63-996f-b1fc2550151c" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Designed to embed seamlessly into SaaS products, offering
a delightful end-user experience.

", + "style": { + "color": "#FFFFFF", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "02e3c479-1c34-4802-b0f2-9e413c1a488f" + }, + { + "descriptor": { + "button": { + "href": "https://example.com/", + "label": "

Get started

", + "style": { + "background-color": "#82EDA8", + "border-bottom": "0px solid #26045D", + "border-left": "0px solid #26045D", + "border-radius": "4px", + "border-right": "0px solid #26045D", + "border-top": "0px solid #26045D", + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "200%", + "padding-bottom": "11px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "11px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 54, + "width": 119 + }, + "style": { + "padding-bottom": "29px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "2b056f08-5045-4228-ab70-6e4f11c0bbfb" + } + ], + "style": { + "background-color": "#341C78", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "4px" + }, + "uuid": "912c3372-6dfd-44c4-be3d-5502b2b9e95b" + } + ], + "container": { + "style": { + "background-color": "#341C78", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "2496250c-6824-47ef-a2b4-decb96317d5c" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "left" + }, + "text": "Add a catchy title here", + "title": "h2" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "af3dd6d5-efe5-46de-acd5-d13d0364d9ee" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Drag in a Paragraph block and start typing.

", + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "fce42308-1271-49e2-9a6a-6d1d42f86d4a" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "3px", + "padding-left": "0px", + "padding-right": "26px", + "padding-top": "29px" + }, + "uuid": "d2b217a9-927e-41c5-9fe5-9978ce12351b" + }, + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Column 1

", + "style": { + "color": "#140231", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "14px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "22px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "4c221506-f461-45e6-93fd-2c84a983a817" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

👉 Column name

", + "style": { + "color": "#140231", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "14px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "17px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "4edbb9c5-0f62-432d-90e7-9deb65319d6f" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "3px", + "padding-left": "26px", + "padding-right": "25px", + "padding-top": "29px" + }, + "uuid": "48dafa14-cb8c-494b-ae33-d84c47ce3d03" + }, + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Column 2

", + "style": { + "color": "#140231", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "14px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "22px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "80d4be1e-a45e-4395-b153-dea1e32c04d5" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Column purpose

", + "style": { + "color": "#140231", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "14px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "17px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "56b53dee-0025-47ed-b54b-ac710b7c4b29" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "3px", + "padding-left": "25px", + "padding-right": "33px", + "padding-top": "29px" + }, + "uuid": "126704d3-2ac0-4440-bdf7-4c29a71b25c4" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "5a85a328-af29-4541-8244-fa371aff52db" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "list": { + "computedStyle": { + "linkColor": "#FFFFFF", + "listStyleType": "disc", + "startList": 1 + }, + "html": "
  • Use a List block to organize ideas and steps
", + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "left" + }, + "tag": "ul" + }, + "style": { + "padding-bottom": "9px", + "padding-left": "20px", + "padding-right": "15px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-list", + "uuid": "8cfab226-5e94-43b6-856c-f696e7cec525" + }, + { + "descriptor": { + "button": { + "href": "https://example.com/", + "label": "

Add CTA to your design

", + "style": { + "background-color": "#82EDA8", + "border-bottom": "0px solid #26045D", + "border-left": "0px solid #26045D", + "border-radius": "4px", + "border-right": "0px solid #26045D", + "border-top": "0px solid #26045D", + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "200%", + "padding-bottom": "11px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "11px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 54, + "width": 207 + }, + "style": { + "padding-bottom": "45px", + "padding-left": "0px", + "padding-right": "50px", + "padding-top": "9px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "20d37bbd-76a3-4b49-82dc-b9f3d0e34ca1" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "3px" + }, + "uuid": "5c565e9e-09f6-4cd9-a8ff-d5cb66524290" + }, + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

✏️ Click to edit

", + "style": { + "color": "#140231", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "14px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "15px", + "padding-right": "28px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "eb7ba287-4c5c-4093-a6ff-37e805e7c667" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

📊 Create a table

", + "style": { + "color": "#140231", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "14px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "45px", + "padding-left": "50px", + "padding-right": "28px", + "padding-top": "9px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a46151e5-3859-45fb-b67d-8c2cff5d00d8" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "3px" + }, + "uuid": "8de3000b-7864-4157-8879-6185a764710e" + }, + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Edit content

", + "style": { + "color": "#140231", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "14px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "28px", + "padding-right": "60px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "1b6f1bb3-6668-4d00-9ece-9d43db1fe75f" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Copy this

", + "style": { + "color": "#140231", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "14px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "45px", + "padding-left": "28px", + "padding-right": "60px", + "padding-top": "9px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a1876343-3ca5-4011-bd34-56bb522aad60" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "3px" + }, + "uuid": "0aea9af2-8ce3-4c46-8ba0-82be4dcb1b4d" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "432c0274-4c5f-47c6-940e-8690160cb61a" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "232px" + }, + "image": { + "alt": "", + "height": "190px", + "href": "", + "percWidth": 94, + "prefix": "", + "src": "https://d15k2d11r6t6rl.cloudfront.net/pub/bfra/bs0kfqbg/iw4/or1/vtf/64dc88ecdc475efb34b6df2e_Reduce-churn.svg", + "target": "_self", + "width": "187px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "27px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "3bd0a0d1-e827-4d17-acff-15eff915e12c" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "29px", + "padding-left": "29px", + "padding-right": "24px", + "padding-top": "45px" + }, + "uuid": "222d7088-c7fd-4b57-8184-fd65c3d244a3" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "left" + }, + "text": "Engagement, Speed & Reliability", + "title": "h2" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "e3eb5bd6-586e-451f-ae8e-1b73eec347c3" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Beefree SDK boosts user engagement, reduces churn, integrates in under 30 days, is fully customizable and low-maintenance, and delivers enterprise-grade security with high uptime.

", + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "4c7fb83f-30e3-482c-a42c-faa0bebba38c" + }, + { + "descriptor": { + "button": { + "href": "https://example.com/", + "label": "

Learn more

", + "style": { + "background-color": "#82EDA8", + "border-bottom": "0px solid #26045D", + "border-left": "0px solid #26045D", + "border-radius": "4px", + "border-right": "0px solid #26045D", + "border-top": "0px solid #26045D", + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "200%", + "padding-bottom": "11px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "11px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 54, + "width": 121 + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "6px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "69bf4958-1526-473d-9d7f-1e4cbbbd35bf" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "29px", + "padding-left": "24px", + "padding-right": "17px", + "padding-top": "45px" + }, + "uuid": "47f80e63-595b-4c2c-9ab4-e63b60a4c686" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "f35192a1-7036-4e3d-934e-0224b74f2464" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "left" + }, + "text": "Developer control & flexibility", + "title": "h2" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "66971be4-671a-428a-a3ab-4863c2aa5f71" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Beefree SDK lets you control branding and features, extend functionality with APIs and custom tools, and integrate AI to speed up content creation.

", + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "0bfe19a7-2fdd-447c-a3d4-6af23756ceed" + }, + { + "descriptor": { + "button": { + "href": "https://example.com/", + "label": "

Learn more

", + "style": { + "background-color": "#82EDA8", + "border-bottom": "0px solid #26045D", + "border-left": "0px solid #26045D", + "border-radius": "4px", + "border-right": "0px solid #26045D", + "border-top": "0px solid #26045D", + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "200%", + "padding-bottom": "11px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "11px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 54, + "width": 121 + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "6px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "9863cfe9-289e-4203-a2cb-9c78c95ed33f" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "29px", + "padding-left": "0px", + "padding-right": "10px", + "padding-top": "29px" + }, + "uuid": "cd5d4757-4790-4c43-95a7-e47d90f74d72" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "290px" + }, + "image": { + "alt": "", + "height": "886px", + "href": "", + "percWidth": 100, + "prefix": "", + "src": "https://d15k2d11r6t6rl.cloudfront.net/pub/bfra/bs0kfqbg/562/siy/aum/64df272b8ccc30bf92508329_Embed-Beefree-SDK.webp", + "target": "_self", + "width": "1076px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "1px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "3f6cf2b4-927c-40d8-844a-18be12171141" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "29px", + "padding-left": "10px", + "padding-right": "0px", + "padding-top": "29px" + }, + "uuid": "61a15a86-b082-4846-a1e6-bfa20388688b" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "a152f4c5-2263-4455-84c6-1275f047e088" + }, + { + "columns": [ + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "31px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "center" + }, + "text": "1,100+", + "title": "h1" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "17px", + "padding-right": "37px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "4369db48-9239-45f2-afd4-6eb63328715c" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

SaaS platforms use Beefree SDK

", + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "29px", + "padding-left": "0px", + "padding-right": "21px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "ffee6d5f-e335-49fa-9835-3c1490115d32" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "29px" + }, + "uuid": "89264bb1-7154-4567-932a-a44f9ff0859d" + }, + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "31px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "center" + }, + "text": "80%", + "title": "h1" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "37px", + "padding-right": "41px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "c1a69cdf-284c-4ca4-ae89-39f6d2eabd21" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

integrate
in ≤ 3 weeks

", + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "29px", + "padding-left": "21px", + "padding-right": "34px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "91413069-e858-406b-9ae3-5daccac177c1" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "29px" + }, + "uuid": "5b86b2f2-27f1-444b-b42d-0224538b8b8d" + }, + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "31px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "center" + }, + "text": "65%", + "title": "h1" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "41px", + "padding-right": "40px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "8063f8d7-77f5-417c-81a8-d28bfb33fc7b" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

see ROI
in 6 months

", + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "29px", + "padding-left": "34px", + "padding-right": "30px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "1f8fb268-8912-4e55-ae9d-95e442855a8e" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "29px" + }, + "uuid": "12c7ae4e-0bb9-4872-8d8e-bd3c79b4d918" + }, + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "31px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "center" + }, + "text": "89%", + "title": "h1" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "40px", + "padding-right": "30px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "b2ede1ee-42d5-4bc9-b09f-2782a43783e4" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

would recommend it

", + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "29px", + "padding-left": "30px", + "padding-right": "10px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "766512be-9744-49fe-bd03-2860cb9401d5" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "29px" + }, + "uuid": "4142deea-28a5-4be2-974e-c7ecdf4be5e6" + } + ], + "container": { + "style": { + "background-color": "#7747FF", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "50f8912b-07bc-4e33-a642-a5be605628af" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "232px" + }, + "image": { + "alt": "", + "height": "369px", + "href": "", + "percWidth": 94, + "prefix": "", + "src": "https://d15k2d11r6t6rl.cloudfront.net/pub/bfra/bs0kfqbg/q1k/d6z/jkj/669e32e8e547a118b6f327b9_home-embedded-illustration.svg", + "target": "_self", + "width": "430px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "69px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "38bb0b40-33a7-48ce-b6b2-3eea7e35cac8" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "11px", + "padding-left": "29px", + "padding-right": "24px", + "padding-top": "29px" + }, + "uuid": "92fc542e-d792-41af-960e-1797df979d98" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "left" + }, + "text": "Faster, Cleaner, Smarter Design", + "title": "h2" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "5ab4426f-f380-4d19-a722-f03e4e5eb546" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Enhance your editor with tools like File Manager and Template Catalog API for smooth workflows. Use AddOns and reusable content blocks to speed creation and maintain consistent designs. Import HTML and create custom extensions to fully adapt the editor to your product.

", + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "643d2089-7b98-47c2-9d4a-6bd820774046" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "11px", + "padding-left": "24px", + "padding-right": "7px", + "padding-top": "29px" + }, + "uuid": "092c7fb5-855b-421b-87db-525550c6a3a2" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "7c7b2360-cfba-4a80-8598-b5c00ff31ac3" + }, + { + "columns": [ + { + "grid-columns": 7, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "background-color": "#FFFFFF", + "height": "20px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "c1b173ef-bb30-4bec-b2ce-2ffe6d670255" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "29px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "11px" + }, + "uuid": "6608d2d8-4ffc-4aa9-a1eb-fdccb645a00b" + }, + { + "grid-columns": 5, + "modules": [ + { + "descriptor": { + "button": { + "href": "https://example.com/", + "label": "

Learn more

", + "style": { + "background-color": "#82EDA8", + "border-bottom": "0px solid #26045D", + "border-left": "0px solid #26045D", + "border-radius": "4px", + "border-right": "0px solid #26045D", + "border-top": "0px solid #26045D", + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "200%", + "padding-bottom": "11px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "11px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 54, + "width": 121 + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "a7e70847-57ce-4fd5-87cd-30d2ca24aad9" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "29px", + "padding-left": "0px", + "padding-right": "60px", + "padding-top": "11px" + }, + "uuid": "d23a277c-0af8-47ca-852b-3d8626b4739d" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "1b50c332-0ffa-4f02-a203-c46102a83d42" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "left" + }, + "text": "Security, stability, scalability", + "title": "h2" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "8947ae3f-888c-41af-9335-e013bae44d70" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Beefree SDK runs on AWS auto-scaling infrastructure, offers enterprise-grade security and compliance, and is built to support SaaS products at any stage of growth.

", + "style": { + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "09d5d9fa-45f1-4f22-a014-49622398df87" + }, + { + "descriptor": { + "button": { + "href": "https://example.com/", + "label": "

Learn more

", + "style": { + "background-color": "#82EDA8", + "border-bottom": "0px solid #26045D", + "border-left": "0px solid #26045D", + "border-radius": "4px", + "border-right": "0px solid #26045D", + "border-top": "0px solid #26045D", + "color": "#26045D", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "200%", + "padding-bottom": "11px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "11px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 54, + "width": 121 + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "6px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "5d903154-ab67-4754-8086-58d36de71a9f" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "29px", + "padding-left": "0px", + "padding-right": "25px", + "padding-top": "29px" + }, + "uuid": "1aa990ca-fbbe-439d-ae33-f746f3e7b7fb" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "232px" + }, + "image": { + "alt": "", + "height": "106px", + "href": "", + "percWidth": 94, + "prefix": "", + "src": "https://d15k2d11r6t6rl.cloudfront.net/pub/bfra/bs0kfqbg/g8z/194/6dd/64b9111e969d284608ead891_image.svg", + "target": "_self", + "width": "106px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "17px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "398b1ac2-e518-48b9-a1d0-8b5f89a307bd" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "29px", + "padding-left": "25px", + "padding-right": "29px", + "padding-top": "29px" + }, + "uuid": "58c6edef-4bf4-437f-abdc-423d6a8abe9b" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "5ce4ee13-5ded-4e68-b975-37377748311a" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Urbanist, Arial", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#FFFFFF", + "text-align": "left" + }, + "text": "Give your users a seamless experience", + "title": "h2" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "3005ae4a-dcf8-471e-a452-e3079e5577f5" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "0px", + "padding-right": "60px", + "padding-top": "29px" + }, + "uuid": "8aa2ee99-7fb0-4c89-8905-84c269cb450a" + } + ], + "container": { + "style": { + "background-color": "#7747FF", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "bfbe4f51-e728-454b-b7b8-4a80d6828f2a" + }, + { + "columns": [ + { + "grid-columns": 1, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "16px" + }, + "image": { + "alt": "", + "height": "24px", + "href": "", + "percWidth": 36, + "prefix": "", + "src": "https://beefree.imgdist.com/public/default-rows-images/check.png", + "target": "_self", + "width": "24px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "1px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "bd894297-6334-4bb1-8c61-b8da7a3419c4" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "0px", + "padding-right": "5px", + "padding-top": "9px" + }, + "uuid": "ee66aad9-2c10-4362-a967-09bd01cbdaa3" + }, + { + "grid-columns": 5, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Clean, intuitive UX

", + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Arial, Helvetica, sans-serif", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "954ecbb0-19e2-4bcf-8c9b-f0936c7bde21" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "5px", + "padding-right": "0px", + "padding-top": "9px" + }, + "uuid": "9cb65228-e25a-4a25-8afa-d6a803959358" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "background-color": "#7747FF", + "height": "20px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "c1de4887-a43d-44d6-9fea-a6ef8b5e1077" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "9px" + }, + "uuid": "3d7c0d69-ed1d-4f5e-a7b4-dc272a8539ae" + } + ], + "container": { + "style": { + "background-color": "#7747FF", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "b7b8294d-f8a4-4859-bc65-e48f43da5fe6" + }, + { + "columns": [ + { + "grid-columns": 1, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "16px" + }, + "image": { + "alt": "", + "height": "24px", + "href": "", + "percWidth": 36, + "prefix": "", + "src": "https://beefree.imgdist.com/public/default-rows-images/check.png", + "target": "_self", + "width": "24px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "1px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "59bb81b5-f749-4fe0-874a-f0eab8124299" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "0px", + "padding-right": "5px", + "padding-top": "9px" + }, + "uuid": "bc0efa02-1d43-4ff6-b2f7-3d462bfb8794" + }, + { + "grid-columns": 5, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Drag-and-drop, no-code content creation

", + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Arial, Helvetica, sans-serif", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a7c28c91-604c-4ffa-b705-eb8e2505802f" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "5px", + "padding-right": "0px", + "padding-top": "9px" + }, + "uuid": "90236fb4-37ef-4c42-b594-6ff947f339a7" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "background-color": "#7747FF", + "height": "20px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "b7e8aa8e-64ef-44c3-9f50-96a0a6c98279" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "9px" + }, + "uuid": "175cce32-e8df-4c58-ba17-41541426ad13" + } + ], + "container": { + "style": { + "background-color": "#7747FF", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "c0af51f6-a23b-452f-aa16-c95ea788584a" + }, + { + "columns": [ + { + "grid-columns": 1, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "16px" + }, + "image": { + "alt": "", + "height": "24px", + "href": "", + "percWidth": 36, + "prefix": "", + "src": "https://beefree.imgdist.com/public/default-rows-images/check.png", + "target": "_self", + "width": "24px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "1px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "0725dba5-23b8-413c-bc01-8ffbbfbeb991" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "0px", + "padding-right": "5px", + "padding-top": "9px" + }, + "uuid": "e892853c-fbae-4fc6-a9e4-5457a59f0cc7" + }, + { + "grid-columns": 5, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

Outlook-ready email rendering

", + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Arial, Helvetica, sans-serif", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "ee16dc47-66cc-456c-beaa-be81af41ebf6" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "5px", + "padding-right": "0px", + "padding-top": "9px" + }, + "uuid": "e1823780-89d7-4880-b23e-189b1833e2fe" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "background-color": "#7747FF", + "height": "20px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "d999c32a-518a-4fe1-b24a-a445751753d5" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "9px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "9px" + }, + "uuid": "0ebd9bd8-c586-46a0-b0e1-19380ff09e86" + } + ], + "container": { + "style": { + "background-color": "#7747FF", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "2c1aab57-7d60-4b23-bb99-02d5529dd02c" + }, + { + "columns": [ + { + "grid-columns": 1, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "16px" + }, + "image": { + "alt": "", + "height": "24px", + "href": "", + "percWidth": 36, + "prefix": "", + "src": "https://beefree.imgdist.com/public/default-rows-images/check.png", + "target": "_self", + "width": "24px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "1px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "d991853f-035a-437f-9267-d82960512a14" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "30px", + "padding-left": "0px", + "padding-right": "5px", + "padding-top": "9px" + }, + "uuid": "317033d2-9d4a-46a4-8bd1-553501ece486" + }, + { + "grid-columns": 11, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

AI text assistant built-in for faster writing, translation & tone suggestions

", + "style": { + "color": "#FBF9FF", + "direction": "ltr", + "font-family": "Arial, Helvetica, sans-serif", + "font-size": "16px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "3619872f-37dc-426d-9e1c-24cafcd665b3" + } + ], + "style": { + "background-color": "#7747FF", + "padding-bottom": "30px", + "padding-left": "5px", + "padding-right": "60px", + "padding-top": "9px" + }, + "uuid": "38412965-fcdf-41bd-a871-09294a0517d9" + } + ], + "container": { + "style": { + "background-color": "#7747FF", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "b6621533-5c72-497d-a401-50c0bd1c5de2" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "180px" + }, + "image": { + "alt": "", + "height": "141px", + "href": "", + "percWidth": 30, + "prefix": "", + "src": "https://d15k2d11r6t6rl.cloudfront.net/pub/bfra/bs0kfqbg/tqu/rwx/rj4/Logo%20version%3DColored%2C%20Name%3DOn.svg", + "target": "_self", + "width": "714px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "c6261d03-1c64-48db-b571-10ce308722d7" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false, + "iconsDefaultWidth": 32, + "padding": "0 2px 0 2px" + }, + "iconsList": { + "icons": [ + { + "id": "7fd95f45-af2f-4912-a1d9-4a94c507e4e6", + "image": { + "alt": "social icon", + "href": "https://www.facebook.com/", + "prefix": "https://www.facebook.com/", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-dark-gray/facebook@2x.png", + "target": "_blank", + "title": "social icon" + }, + "name": "social icon", + "text": "", + "type": "follow" + }, + { + "id": "4d817841-afc6-41d9-a91d-23cf1e68893b", + "image": { + "alt": "social icon", + "href": "https://www.twitter.com/", + "prefix": "https://www.twitter.com/", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-dark-gray/twitter@2x.png", + "target": "_blank", + "title": "social icon" + }, + "name": "social icon", + "text": "", + "type": "follow" + }, + { + "id": "a5abb011-0113-4ef0-a73c-ae795357d6ba", + "image": { + "alt": "social icon", + "href": "https://www.linkedin.com/", + "prefix": "https://www.linkedin.com/", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-dark-gray/linkedin@2x.png", + "target": "_blank", + "title": "social icon" + }, + "name": "social icon", + "text": "", + "type": "follow" + }, + { + "id": "718f188f-a6e5-4916-b999-491e918d5d50", + "image": { + "alt": "social icon", + "href": "https://www.instagram.com/", + "prefix": "https://www.instagram.com/", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-dark-gray/instagram@2x.png", + "target": "_blank", + "title": "social icon" + }, + "name": "social icon", + "text": "", + "type": "follow" + } + ] + }, + "style": { + "padding-bottom": "7px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-social", + "uuid": "15241fb2-4c2a-41bf-9202-5fc2c2c64553" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "30px" + }, + "uuid": "765dffa2-8197-489c-9222-5d1a38fe6760" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "f2e96f75-6a42-4cde-9164-d7302fd74e6d" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#444A5B" + }, + "html": "

About usBlogServicesUnsubscribe

", + "style": { + "color": "#444A5B", + "direction": "ltr", + "font-family": "Inter, Arial", + "font-size": "14px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "2px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "8c1ab68d-00d4-4f06-96c1-b02fb27b7a64" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#FFFFFF" + }, + "html": "

© Bee Content Design, Inc. San Francisco, CA | Part of Growens

", + "style": { + "color": "#444A5B", + "direction": "ltr", + "font-family": "Arial, Helvetica, sans-serif", + "font-size": "14px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "180%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "2px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "aa5a965c-492c-44c5-8ab2-f352bb2a02f6" + } + ], + "style": { + "background-color": "#FFFFFF", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "7px" + }, + "uuid": "4d8b2d24-2575-4da7-85a1-364cf654d535" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "600px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "3600e3f7-570a-4ca0-b1b2-aca4af261dad" + } + ], + "template": { + "version": "2.0.0" + }, + "title": "" + }, + "comments": {} + } +} \ No newline at end of file diff --git a/public/templates/black-friday-watch-sale.json b/public/templates/black-friday-watch-sale.json new file mode 100644 index 0000000..21e6874 --- /dev/null +++ b/public/templates/black-friday-watch-sale.json @@ -0,0 +1,2654 @@ +{ + "id": "black-friday-watch-sale", + "name": "Black Friday Watch Sale", + "display_name": "Black Friday Watch Sale", + "title": "Black Friday Watch Sale", + "designer": { + "avatar_url": "https://d1oco4z2z1fhwp.cloudfront.net/designers/LuanaLiguori.png", + "description": "Hello, I'm Luana, a graphic and web designer with 8+ years of experience, specializing in email and landing page design. My approach is marked by precision, proactive problem-solving, and strong collaboration. I create visually impactful designs that align with marketing strategies, including social media graphics, blog covers, and presentations. I also offer custom design services tailored to clients' unique needs.", + "short_description": "", + "display_name": "Luana Liguori", + "id": "luana-liguori" + }, + "tags": [ + "Black Friday", + "Fall" + ], + "thumbnail": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/7566.jpg", + "json_data": { + "comments": {}, + "page": { + "body": { + "container": { + "style": { + "background-color": "#ffffff" + } + }, + "content": { + "computedStyle": { + "linkColor": "#000000", + "messageBackgroundColor": "#ffffff", + "messageWidth": "640px" + }, + "style": { + "color": "#000000", + "font-family": "Montserrat, Trebuchet MS, Lucida Grande, Lucida Sans Unicode, Lucida Sans, Tahoma, sans-serif" + } + }, + "type": "mailup-bee-page-properties", + "webFonts": [ + { + "fontFamily": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "name": "Montserrat", + "url": "https://fonts.googleapis.com/css?family=Montserrat" + } + ] + }, + "description": "", + "rows": [ + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "120px" + }, + "image": { + "alt": "Your-Logo", + "height": "371px", + "href": "http://www.example.com/", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/7566/logo.png", + "target": "_self", + "width": "400px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "62b30ee1-6a49-498e-9e00-767b2dfbd77d" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid #FFFFFF", + "width": "100%" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "ae0b08bd-61e4-4bcc-93c8-ba9e0c746414" + }, + { + "descriptor": { + "computedStyle": { + "hamburger": { + "backgroundColor": "#ffffff", + "foregroundColor": "#000000", + "iconSize": "36px", + "mobile": true + }, + "layout": "horizontal", + "linkColor": "#ffffff", + "menuItemsSpacing": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "10px" + }, + "separator": "" + }, + "menuItemsList": { + "items": [ + { + "link": { + "href": "http://www.example.com/", + "target": "_self", + "title": "" + }, + "text": "WATCHES" + }, + { + "link": { + "href": "http://www.example.com/", + "target": "_self", + "title": "" + }, + "text": "SUNGLASSES" + }, + { + "link": { + "href": "http://www.example.com/", + "target": "_self", + "title": "" + }, + "text": "JEWELRY" + }, + { + "link": { + "href": "http://www.example.com/", + "target": "_self", + "title": "" + }, + "text": "BLOG" + } + ] + }, + "style": { + "color": "#ffffff", + "font-family": "inherit", + "font-size": "14px", + "letter-spacing": "2px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-menu", + "uuid": "5aa2c597-59e8-4182-aee3-40b11080ad7d" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid #FFFFFF", + "width": "100%" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "39eeebcf-58ed-4b73-9c4c-a014e568e0b6" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "25px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "122332e4-4006-4ed9-8a48-3692e616e2e4" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#a5a5a5", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "17px", + "font-weight": "400", + "letter-spacing": "1px", + "line-height": "150%", + "link-color": "#a5a5a5", + "text-align": "center" + }, + "text": "​Save the date - November 25th", + "title": "h1" + }, + "mobileStyle": { + "font-size": "17px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "c03ae2e4-3aad-4723-8535-0680cee26536" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "60px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "76748a66-451b-4134-a3af-8a0dab694a40" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "40px", + "font-weight": "400", + "letter-spacing": "5px", + "line-height": "150%", + "link-color": "#ffffff", + "text-align": "center" + }, + "text": "  BLACK  ", + "title": "h1" + }, + "mobileStyle": { + "font-size": "40px", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "44579000-a270-4a7e-9bf0-eb3f42624fc3" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "100px", + "font-weight": "400", + "letter-spacing": "10px", + "line-height": "150%", + "link-color": "#ffffff", + "text-align": "center" + }, + "text": "FRIDAY", + "title": "h1" + }, + "mobileStyle": { + "font-size": "50px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "3810a0c1-de31-4929-ba1b-06e3e754ca8e" + }, + { + "descriptor": { + "spacer": { + "style": { + "height": "40px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "f1d0e97c-c243-4faf-b4c4-456cfe6304ce" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "5px", + "line-height": "150%", + "link-color": "#ffffff", + "text-align": "center" + }, + "text": "DON'T MISS", + "title": "h1" + }, + "mobileStyle": { + "font-size": "30px", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "1b5c45df-f47a-4571-929f-8c3e57a653c9" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "60px", + "font-weight": "400", + "letter-spacing": "10px", + "line-height": "150%", + "link-color": "#ffffff", + "text-align": "center" + }, + "text": "50% OFF", + "title": "h1" + }, + "mobileStyle": { + "font-size": "40px", + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "5px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "52686e77-83d4-4a49-a2ce-c6dfd1c77b95" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "5px", + "line-height": "150%", + "link-color": "#ffffff", + "text-align": "center" + }, + "text": "SELECTED ITEMS
ONLINE AND IN-STORES
", + "title": "h1" + }, + "mobileStyle": { + "font-size": "15px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "9733db1a-302a-4158-a99a-f5ca5a4111ac" + }, + { + "descriptor": { + "spacer": { + "style": { + "height": "25px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "83905199-c59a-4eef-86de-edfa4c509438" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "15px" + }, + "uuid": "f7d74572-9d24-4f01-abbd-cab472e0d5d7" + } + ], + "container": { + "style": { + "background-color": "#000000", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#000000", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "812b7304-32fc-4323-a79c-b9253369a5df" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "spacer": { + "style": { + "height": "500px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "93ec28d5-0cd7-42f1-9f3e-bf9dfce78e63" + }, + { + "descriptor": { + "spacer": { + "style": { + "height": "15px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "2670b5e4-26e7-47f2-a1cb-7afb30870c24" + }, + { + "descriptor": { + "spacer": { + "style": { + "height": "25px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "acf5d6a2-b0e7-48b5-92b6-0dcacd4a59a6" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "111790f8-4310-4d9e-b89b-b81a40f3726e" + } + ], + "container": { + "style": { + "background-color": "#000000", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/7566/BACKGROUND-IMAGE.jpg')", + "background-position": "top center", + "background-repeat": "no-repeat", + "background-size": "auto" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "background-size": "auto", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "cf7cf29f-9be3-49a8-bd95-06414544a55b" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "spacer": { + "style": { + "height": "50px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "8c95a8ed-2a79-4709-b529-bdef4a39ca57" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "1px", + "line-height": "150%", + "link-color": "#000000", + "text-align": "center" + }, + "text": "Black Friday Sale is ON...", + "title": "h1" + }, + "mobileStyle": { + "font-size": "22px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "514b550b-cb88-4a2e-8e87-32a3a24dc5ad" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "25px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "d50c4d03-4335-470c-a22f-524cb6f8eec2" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "15px", + "font-weight": "400", + "letter-spacing": "5px", + "line-height": "150%", + "link-color": "#000000", + "text-align": "center" + }, + "text": "BIGGEST SALE EVENT OF THE YEAR IS ON
AND YOU DON'T WANT TO MISS IT!", + "title": "h1" + }, + "mobileStyle": { + "font-size": "20px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "ee0b70f0-a580-4a1a-b651-cbf6096ec2c0" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "25px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "8a555c81-70ce-4e32-9537-36be07c3b40c" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "font-size": "15px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#000000", + "paragraphSpacing": "16px" + }, + "html": "

Discover our incredible Black Friday sales with huge savings, discount, deals and exclusive offers available for a limited time online and in-stores.

", + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "15px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "8712a45e-2b47-47cf-914b-f88b4f3f8da8" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "25px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#000000", + "text-align": "center" + }, + "text": "UP TO 50 % OFF", + "title": "h2" + }, + "mobileStyle": { + "font-size": "33px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "c095be35-ec95-482d-8d3d-89336397a7b1" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "25px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "743b7884-7bca-4175-b252-6854f6638ad5" + }, + { + "descriptor": { + "button": { + "href": "http://www.example.com/", + "label": "

SHOP NOW

", + "style": { + "background-color": "#000000", + "border-bottom": "1px solid #C1CEDC", + "border-left": "1px solid #C1CEDC", + "border-radius": "0px", + "border-right": "1px solid #C1CEDC", + "border-top": "1px solid #C1CEDC", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "18px", + "font-weight": "400", + "letter-spacing": "3px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 48, + "hideContentOnMobile": false, + "width": 173 + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "2501872b-581a-4fab-bfb5-479a02deb130" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "30px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "20px" + }, + "uuid": "111790f8-4310-4d9e-b89b-b81a40f3726e" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "ab1dd026-b0f7-44db-bdf9-8dfefe1998f4" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "30px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "158c7fd0-334d-4bce-b221-123cd2420b8e" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "8176bb29-a906-4b2d-a264-9757553e9ff9" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "88302f54-e233-4785-bdd0-8b85dc1d87ae" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "width": "320px" + }, + "image": { + "alt": "piano-sales", + "height": "500px", + "href": "http://www.example.com/", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/7566/WATCH.png", + "target": "_self", + "width": "500px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "80dfb6d5-e031-4d0a-b424-cfa3787aee54" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "cf1930c2-3a88-4575-a227-68013f577e4c" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ff0000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "1px", + "line-height": "150%", + "link-color": "#000000", + "text-align": "left" + }, + "text": "50% OFF", + "title": "h1" + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "744c54fd-ff0d-4a7f-9ee8-3770bfc1cbfb" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "31px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#000000", + "text-align": "left" + }, + "text": "WATCHES", + "title": "h1" + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "5px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "5px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "8f8bd608-04b6-4ccd-a34d-8d9897ce0810" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "text-align": "center" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#000000", + "paragraphSpacing": "16px" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet.

", + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "15px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "691ac873-e552-449e-b816-0b891c501402" + }, + { + "descriptor": { + "button": { + "href": "http://www.example.com/", + "label": "

SHOP NOW

", + "style": { + "background-color": "#000000", + "border-bottom": "1px solid #C1CEDC", + "border-left": "1px solid #C1CEDC", + "border-radius": "0px", + "border-right": "1px solid #C1CEDC", + "border-top": "1px solid #C1CEDC", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "18px", + "font-weight": "400", + "letter-spacing": "3px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 48, + "hideContentOnMobile": false, + "width": 173 + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "9adab877-348b-4c85-bd7b-9d9379f8ef40" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "bf8f1784-8b20-4df3-9709-f25e9ec95592" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "middle" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "61b5ea6b-d9b3-4ae6-835a-cacfe28e3680" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "30px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "41ef0858-4bcf-449c-a904-9c1afc86df8f" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "8176bb29-a906-4b2d-a264-9757553e9ff9" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "66478469-1b55-44db-a287-8f33f793b6c6" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ff0000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "1px", + "line-height": "150%", + "link-color": "#000000", + "text-align": "left" + }, + "text": "50% OFF", + "title": "h1" + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "663e6952-b69c-4b4e-8c90-6348341eb62f" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "31px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#000000", + "text-align": "left" + }, + "text": "SUNGLASSES", + "title": "h1" + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "5px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "5px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "8d52b688-b967-49fc-a02c-1eb2b08d3e20" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "text-align": "center" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#000000", + "paragraphSpacing": "16px" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet.

", + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "15px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "b777cbe6-d09d-4225-8cab-0d89159eb7e1" + }, + { + "descriptor": { + "button": { + "href": "http://www.example.com/", + "label": "

SHOP NOW

", + "style": { + "background-color": "#000000", + "border-bottom": "1px solid #C1CEDC", + "border-left": "1px solid #C1CEDC", + "border-radius": "0px", + "border-right": "1px solid #C1CEDC", + "border-top": "1px solid #C1CEDC", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "18px", + "font-weight": "400", + "letter-spacing": "3px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 48, + "hideContentOnMobile": false, + "width": 173 + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "3df695b6-e98c-4658-906e-eeb026515d37" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "cf1930c2-3a88-4575-a227-68013f577e4c" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "width": "320px" + }, + "image": { + "alt": "piano-sales", + "height": "500px", + "href": "http://www.example.com/", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/7566/SUNGLASSES.png", + "target": "_self", + "width": "500px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "b00ab665-d480-4d9c-be11-0e563021bd6f" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "bf8f1784-8b20-4df3-9709-f25e9ec95592" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": true, + "verticalAlign": "middle" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "d7b1d0b3-9d80-4eb9-a0a3-1dfd3f52202e" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "30px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "de45b154-9892-42bc-be7e-c0e166d3a42c" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "8176bb29-a906-4b2d-a264-9757553e9ff9" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "f1ce21ce-a3b7-4779-a075-5af0da406057" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "width": "320px" + }, + "image": { + "alt": "piano-sales", + "height": "500px", + "href": "http://www.example.com/", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/7566/EARRINGS.png", + "target": "_self", + "width": "500px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "8d054090-45a9-443a-b49f-1e3eae98106e" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "cf1930c2-3a88-4575-a227-68013f577e4c" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ff0000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "1px", + "line-height": "150%", + "link-color": "#000000", + "text-align": "left" + }, + "text": "50% OFF", + "title": "h1" + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "66dcdf50-a214-484f-a3ec-347d7b3055d5" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "31px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#000000", + "text-align": "left" + }, + "text": "JEWELS", + "title": "h1" + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "5px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "5px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "64e48a87-a78f-48b3-95ad-40e564df8874" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "text-align": "center" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#000000", + "paragraphSpacing": "16px" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet.

", + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "15px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "b3fbca58-15c8-4d0f-9bb9-4bd97e36fe81" + }, + { + "descriptor": { + "button": { + "href": "http://www.example.com/", + "label": "

SHOP NOW

", + "style": { + "background-color": "#000000", + "border-bottom": "1px solid #C1CEDC", + "border-left": "1px solid #C1CEDC", + "border-radius": "0px", + "border-right": "1px solid #C1CEDC", + "border-top": "1px solid #C1CEDC", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "18px", + "font-weight": "400", + "letter-spacing": "3px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 48, + "hideContentOnMobile": false, + "width": 173 + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "ee2d6a43-c17f-4fe4-b91b-3d0c30ff4aa5" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "bf8f1784-8b20-4df3-9709-f25e9ec95592" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "middle" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "90a0b4ca-29dc-4051-bc8e-125104a77356" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "30px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "d021b7df-fc88-45c2-be7f-4264ee261263" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "8176bb29-a906-4b2d-a264-9757553e9ff9" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "baf2257c-a181-4b99-83a3-cc72b58bc146" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid #000000", + "width": "100%" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "15791216-ccc0-424f-ae3f-c27a117c42f0" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "25px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "b6930b8b-5a0f-49f8-98c9-0abe48cd8abe" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "30px", + "font-weight": "400", + "letter-spacing": "1px", + "line-height": "150%", + "link-color": "#000000", + "text-align": "center" + }, + "text": "LIMITED TIME OFFER​", + "title": "h1" + }, + "mobileStyle": { + "font-size": "21px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "7b8370c4-d00b-4810-9d9e-63bed4e47e41" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#000000", + "paragraphSpacing": "16px" + }, + "html": "

 Whether you are searching for that perfect Christmas gift or simply looking to indulge in our striking range of luxury and designer watches, you can be sure to find the perfect treat in our Black Friday sales.

", + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "15px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a8f65844-2d55-44cb-b8f3-28013ead7d96" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "25px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "2cd71542-ddd0-4304-b528-18b4ab4bf5d4" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "25px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#000000", + "text-align": "center" + }, + "text": "BE FIRST TO GET → ", + "title": "h1" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "ca270cd4-a8a0-44df-a1ee-92159debf6ac" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "25px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "c4385647-34dc-471f-b7a7-58b6dd5459f8" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "15px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "20px" + }, + "uuid": "111790f8-4310-4d9e-b89b-b81a40f3726e" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "fabad464-d803-43a5-902b-fed40a8c4494" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "iconHeight": "32px", + "iconSpacing": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "5px" + }, + "itemsSpacing": "0px" + }, + "iconsList": { + "icons": [ + { + "height": "512px", + "href": "", + "image": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/7566/free.png", + "target": "_self", + "text": "", + "textPosition": "right", + "width": "512px" + } + ] + }, + "style": { + "color": "#000000", + "font-family": "inherit", + "font-size": "14px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-icons", + "uuid": "88281a53-55c2-4482-afe4-38816cf1b848" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#000000", + "direction": "ltr", + "font-family": "inherit", + "font-size": "18px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#000000", + "text-align": "center" + }, + "text": "FREE SHIPPING WORLDWIDE ON ALL ORDERS", + "title": "h1" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "c26e7f6c-23f3-41df-adb8-fcb33ea8f47f" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "30px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "30px" + }, + "uuid": "440b6bdd-6b99-4119-8461-977a96a3d2d8" + } + ], + "container": { + "style": { + "background-color": "#e4e4e4", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#e4e4e4", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "metadata": { + "category": 587505, + "dateCreated": "2022-03-31T13:02:17.285827Z", + "dateModified": "2022-03-31T13:02:19.018904Z", + "description": "", + "idParent": null, + "name": "benefit", + "slug": "benefit", + "uuid": "c1042c4a-91d7-4a07-bebe-1cd370f9eb34" + }, + "name": "benefit", + "synced": false, + "type": "three-columns-empty", + "uuid": "95816e68-4c7a-4402-b4be-264ee9783007" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "align": "left", + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "128px" + }, + "image": { + "alt": "Your-Logo", + "height": "371px", + "href": "http://www.example.com/", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/7566/logo.png", + "target": "_self", + "width": "400px" + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "4d71d5f0-8e88-4adf-bf8d-2725115e7bb3" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "height": 57, + "hideContentOnMobile": false, + "iconsDefaultWidth": 32, + "padding": "0 10px 0 10px", + "width": 151 + }, + "iconsList": { + "icons": [ + { + "image": { + "alt": "Facebook", + "href": "https://www.facebook.com", + "prefix": "https://www.facebook.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-circle-white/facebook@2x.png", + "target": "_self", + "title": "facebook" + }, + "name": "facebook", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Twitter", + "href": "https://www.twitter.com", + "prefix": "https://www.twitter.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-circle-white/twitter@2x.png", + "target": "_self", + "title": "twitter" + }, + "name": "twitter", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Instagram", + "href": "https://www.instagram.com", + "prefix": "https://www.instagram.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-circle-white/instagram@2x.png", + "target": "_self", + "title": "instagram" + }, + "name": "instagram", + "text": "", + "type": "follow" + }, + { + "id": "youtube", + "image": { + "alt": "YouTube", + "href": "https://www.youtube.com", + "prefix": "https://www.youtube.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-circle-white/youtube@2x.png", + "target": "_self", + "title": "YouTube" + }, + "name": "youtube", + "text": "", + "type": "follow" + }, + { + "id": "vimeo", + "image": { + "alt": "Vimeo", + "href": "https://www.vimeo.com", + "prefix": "https://www.vimeo.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-circle-white/vimeo@2x.png", + "target": "_self", + "title": "Vimeo" + }, + "name": "Vimeo", + "text": "", + "type": "follow" + }, + { + "id": "tiktok", + "image": { + "alt": "TikTok", + "href": "https://www.tiktok.com", + "prefix": "https://www.tiktok.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-circle-white/tiktok@2x.png", + "target": "_self", + "title": "TikTok" + }, + "name": "TikTok", + "text": "", + "type": "follow" + } + ] + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-social", + "uuid": "e2b0e0a8-200e-41e0-ac21-431d5c1c33ea" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#ffffff", + "paragraphSpacing": "16px" + }, + "html": "

Your address - City 00000
Phone: +00 111 222 333 - info@example.com

", + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "12px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a6ce2a4a-2905-4af9-9a6b-c733def1f20b" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#ffffff", + "paragraphSpacing": "16px" + }, + "html": "

If you prefer not to receive marketing emails form this list, click here to unsubscribe.

", + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "12px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "143f903f-ba89-466c-beb8-6621523af747" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#a5a5a5" + }, + "html": "

Company Name © - 2022 All rights reserved

", + "style": { + "color": "#a5a5a5", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "6af58415-ab92-4f2d-8f49-972cb20ce490" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "25px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "50px" + }, + "uuid": "f687e271-4453-4f54-b993-56f9a927671f" + } + ], + "container": { + "style": { + "background-color": "#000000", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#000000", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "metadata": { + "category": 587508, + "dateCreated": "2021-03-01T22:43:22.480029Z", + "dateModified": "2021-03-01T22:43:27.080982Z", + "description": "", + "idParent": null, + "name": "Footer row 2", + "slug": "footer-row-2", + "uuid": "3860e275-f89b-418e-8c71-a2354be8680e" + }, + "name": "Footer row 2", + "synced": false, + "type": "one-column-empty", + "uuid": "c2f98af9-703a-443c-aa5b-06355ed87798" + } + ], + "template": { + "name": "template-base", + "type": "basic", + "version": "2.0.0" + }, + "title": "" + } + } +} \ No newline at end of file diff --git a/public/templates/bring-your-app-to-life-email.json b/public/templates/bring-your-app-to-life-email.json new file mode 100644 index 0000000..87ebf47 --- /dev/null +++ b/public/templates/bring-your-app-to-life-email.json @@ -0,0 +1,2406 @@ +{ + "id": "bring-your-app-to-life-email", + "name": "Bring Your App to Life: Email", + "display_name": "Bring Your App to Life: Email", + "title": "Bring Your App to Life: Email", + "designer": { + "avatar_url": "https://d1oco4z2z1fhwp.cloudfront.net/designers/alicia.png", + "description": "I’m Alicia, a designer based in Manila, specializing in email design for DTC brands. My approach blends function with creativity, so every design feels intentional, engaging, and true to the brand. Building a brand is like finding the right puzzle pieces—it takes strategy, storytelling, and the right people who really get what you’re trying to do.", + "short_description": "", + "display_name": "Alicia Zamudio", + "id": "alicia-zamudio" + }, + "tags": [ + "Mobile App", + "SaaS", + "Winter" + ], + "thumbnail": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556.jpg", + "json_data": { + "page": { + "body": { + "container": { + "style": { + "background-color": "#ffffff" + } + }, + "content": { + "computedStyle": { + "linkColor": "#7747FF", + "messageBackgroundColor": "transparent", + "messageWidth": "700px" + }, + "style": { + "color": "#000000", + "font-family": "Roboto, Tahoma, Verdana, Segoe, sans-serif" + } + }, + "type": "mailup-bee-page-properties", + "webFonts": [ + { + "fontFamily": "'Roboto', Tahoma, Verdana, Segoe, sans-serif", + "name": "Roboto", + "url": "https://fonts.googleapis.com/css2?family=Roboto:wght@100;200;300;400;500;600;700;800;900" + }, + { + "fontFamily": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "name": "Source Sans Pro", + "url": "https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@100;200;300;400;500;600;700;800;900" + } + ] + }, + "description": "", + "head": { + "meta": { + "lang": "en" + } + }, + "rows": [ + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "left fixedwidth fullwidthOnMobile", + "hideContentOnMobile": false, + "width": "73px" + }, + "image": { + "alt": "Your Placeholder Logo", + "height": "147px", + "href": "", + "percWidth": 38, + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Logo.png", + "target": "_blank", + "width": "147px" + }, + "mobileStyle": { + "class": "center autowidth", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "aad62f45-43e3-412a-955b-39cd35a2f13b" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "d3f3f792-0227-49c3-a876-64ab4c2b9753" + }, + { + "grid-columns": 8, + "modules": [ + { + "type": "mailup-bee-newsletter-modules-heading", + "descriptor": { + "heading": { + "title": "h1", + "text": "Your story keeps moving.", + "style": { + "color": "#dddddf", + "font-size": "20px", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "link-color": "#dddddf", + "line-height": "120%", + "text-align": "right", + "direction": "ltr", + "font-weight": "300", + "letter-spacing": "0px" + } + }, + "style": { + "width": "100%", + "text-align": "center", + "padding-top": "30px", + "padding-right": "10px", + "padding-bottom": "30px", + "padding-left": "10px" + }, + "mobileStyle": {} + }, + "uuid": "5f28ffe1-4dc6-43af-bfe8-b771d5e0ab1e", + "locked": false + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "c92f8094-dcf3-4918-b6e7-e21ae8d2f465" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": false, + "rowReverseColStackOnMobile": false, + "verticalAlign": "middle" + }, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "10px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-4-8-empty", + "uuid": "5e69be0e-574e-43d6-816b-8c11c2639287" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "5px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "5px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth fullwidthOnMobile", + "hideContentOnMobile": false, + "width": "536px" + }, + "image": { + "alt": "Hero Text", + "height": "242px", + "href": "", + "percWidth": 84, + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Heading.png", + "target": "_blank", + "width": "549px" + }, + "mobileStyle": { + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "35px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "90450702-c416-486a-b80c-8543180507fa" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "hideContentOnMobile": false, + "width": "512px" + }, + "image": { + "alt": "Hero Image", + "height": "250px", + "href": "", + "percWidth": 80, + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Widget.png", + "target": "_blank", + "width": "475px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "35px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "25px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "bcdc7c6b-6d42-4519-b12d-231e8be4277c" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#ffffff", + "paragraphSpacing": "16px" + }, + "html": "

A season of stillness, but your story keeps moving.
Welcome to a digital space that breathes with you—raw, real, and alive in the cold.

", + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "1px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "30px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "d54ec46c-85cb-455a-b7dc-d6439c411339" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

STEP INSIDE

", + "style": { + "background-color": "#dddddf", + "border-bottom": "1px solid #dddddf", + "border-left": "1px solid #dddddf", + "border-radius": "25px", + "border-right": "1px solid #dddddf", + "border-top": "1px solid #dddddf", + "color": "#000000", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "22px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 56, + "hideContentOnMobile": false, + "width": 181 + }, + "hoverStyle": { + "background-color": "#000000", + "border-bottom": "1px solid #dddddf", + "border-left": "1px solid #dddddf", + "border-right": "1px solid #dddddf", + "border-top": "1px solid #dddddf", + "color": "#dddddf" + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "0b7fd20f-1d70-45ec-ba95-5bddea1809e6" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "47b64a77-9d02-4382-b68b-a8b78ea26079" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "15px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "15px" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_MountainBG.png')", + "background-position": "top left", + "background-repeat": "no-repeat", + "background-size": "cover", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "60px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "", + "uuid": "6349a0d7-a044-423a-ad7a-9ba3b581d4d5" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "700px" + }, + "image": { + "alt": "Patterns", + "height": "228px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Divider.png", + "target": "_blank", + "width": "700px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "4e8d9e93-37d4-479f-98d2-9ea471685c54" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "6fa6bd56-3952-4730-8337-75f598318667" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "5dc989d3-3474-42f7-8c06-00db59bc2afe" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#7747FF", + "paragraphSpacing": "16px" + }, + "html": "

THE VIBE

", + "style": { + "color": "#7194ce", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "98a66be4-cbe3-441a-a4c1-2f97fcf189b9" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "inherit", + "font-size": "60px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#dddddf", + "text-align": "left" + }, + "text": "IT'S ABOUT FEELING.", + "title": "h2" + }, + "mobileStyle": { + "font-size": "48px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "1c084ba8-6ae2-4cfa-a6c3-e35fcbb93fe9" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "30px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "30px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#dddddf", + "paragraphSpacing": "16px" + }, + "html": "

Winter isn’t about frost—it’s about feeling.
That moment between the inhale and the exhale.
The city muted, the light dimmed, and your thoughts louder than ever.
We built this app for that kind of quiet energy—when you’re craving connection without the noise.

", + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "30px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "30px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a6b30765-f341-4175-ac60-2c9ab694fdf2" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "4554b29c-5b37-46e2-b94c-f7e208f49b1d" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "25px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "25px" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "25px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "25px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "69e594b7-baf2-4668-a6dc-8abd48ca4d2a" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "700px" + }, + "image": { + "alt": "Lifestyle Image", + "height": "490px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Hero.png", + "target": "_blank", + "width": "700px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "529b205e-d1d9-47ba-8a11-d10bd26bf346" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #ffffff", + "border-left": "0px solid #ffffff", + "border-right": "0px solid #ffffff", + "border-top": "1px solid #ffffff", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "646b5952-c004-4e25-9ad3-a546f93cbb69" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "98b769bb-d1aa-4809-a3c8-ff537c8811d9" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#7747FF", + "paragraphSpacing": "16px" + }, + "html": "

THE REVEAL

", + "style": { + "color": "#7194ce", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "2e189c19-6e48-4127-9edb-ecdde564deda" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "inherit", + "font-size": "60px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#dddddf", + "text-align": "left" + }, + "text": "YOUR WAY OF SEEING THE WORLD", + "title": "h2" + }, + "mobileStyle": { + "font-size": "48px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "73052434-e5d0-4e7a-9d35-48c065244a59" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "328d35b8-36a9-42f8-8082-41bf136f48ee" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "25px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "25px" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "25px", + "padding-left": "30px", + "padding-right": "60px", + "padding-top": "25px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "afeacfae-55b6-4713-8c06-645c50d8c652" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "hideContentOnMobile": false, + "width": "332.5px" + }, + "image": { + "alt": "UI Image", + "height": "412px", + "href": "", + "percWidth": 95, + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Design1.png", + "target": "_blank", + "width": "350px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "7a2894c3-b8bd-40e7-8c45-57e2f3a066b1" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#dddddf", + "paragraphSpacing": "16px" + }, + "html": "

Designed to move like a mixtape — part reflection, part revelation.

", + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "20px", + "padding-left": "35px", + "padding-right": "35px", + "padding-top": "20px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "d48eee43-60ba-4b48-93ca-d52c5338f056" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "66b8aee1-1eb1-4856-9ee8-c30da3d41a6c" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "hideContentOnMobile": false, + "width": "350px" + }, + "image": { + "alt": "UI Image", + "height": "412px", + "href": "", + "percWidth": 100, + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Design2.png", + "target": "_blank", + "width": "363px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "af6a8111-7be1-4ee1-9608-9579d791fc67" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#dddddf", + "paragraphSpacing": "16px" + }, + "html": "

Built for those who stay curious even when the world freezes.

", + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "20px", + "padding-left": "35px", + "padding-right": "35px", + "padding-top": "20px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a29ba9a6-ee7e-4ecf-ade1-3f0f32944169" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "30cdafa5-a72a-425e-8228-3d5130f8a7dd" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "bottom" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "55e2669e-486c-4fda-8156-ce8b33b807be" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

JOIN THE BETA →

", + "style": { + "background-color": "#dddddf", + "border-bottom": "1px solid #dddddf", + "border-left": "1px solid #dddddf", + "border-radius": "25px", + "border-right": "1px solid #dddddf", + "border-top": "1px solid #dddddf", + "color": "#000000", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "22px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "35px", + "padding-right": "35px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 56, + "hideContentOnMobile": false, + "width": 243 + }, + "hoverStyle": { + "background-color": "#000000", + "border-bottom": "1px solid #dddddf", + "border-left": "1px solid #dddddf", + "border-right": "1px solid #dddddf", + "border-top": "1px solid #dddddf", + "color": "#dddddf" + }, + "mobileStyle": { + "font-size": "22px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "63f52560-290c-43ff-8f26-bbbf6fe42fab" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "15px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#dddddf", + "paragraphSpacing": "16px" + }, + "html": "

Over 1000+ people have signed up for beta testing

", + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "30px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "37b06f2d-cbef-41a3-9570-01cbf1ce6518" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "83b0d735-c1a0-4522-9435-0305d0d46b9a" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "40px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "25px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "f4b7f090-1e6e-4214-964a-34877be35075" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "700px" + }, + "image": { + "alt": "Limited Access Banner", + "height": "35px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Divider2.png", + "target": "_blank", + "width": "700px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "c1eefdfd-a122-4273-baaf-90e5817a8071" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "e585974c-4258-4634-97f0-6a7b50fae7aa" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "e698b1a6-83fd-4934-bb87-1a53eac3a28b" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "left autowidth", + "hideContentOnMobile": false, + "width": "115px" + }, + "image": { + "alt": "Your Placeholder Logo", + "height": "114px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Icon.png", + "target": "_blank", + "width": "115px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "10px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "fd90adcd-ebb8-4b64-9861-fba47251d3b2" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "inherit", + "font-size": "60px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#dddddf", + "text-align": "left" + }, + "text": "EARLY ACCESS OPENS NOW.", + "title": "h2" + }, + "mobileStyle": { + "font-size": "48px", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "15px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "15px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "fec33bed-291e-4505-be61-b87e3dde8c59" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#dddddf", + "paragraphSpacing": "16px" + }, + "html": "

No noise, no crowd—just you and a few who get it. A collector’s moment before the thaw.

", + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "c27bedeb-7312-4289-bfc8-a77bc2732a2c" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

CLAIM YOUR SPOT

", + "style": { + "background-color": "#dddddf", + "border-bottom": "1px solid #dddddf", + "border-left": "1px solid #dddddf", + "border-radius": "25px", + "border-right": "1px solid #dddddf", + "border-top": "1px solid #dddddf", + "color": "#000000", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "22px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "35px", + "padding-right": "35px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 56, + "hideContentOnMobile": false, + "width": 247 + }, + "hoverStyle": { + "background-color": "#000000", + "border-bottom": "1px solid #dddddf", + "border-left": "1px solid #dddddf", + "border-right": "1px solid #dddddf", + "border-top": "1px solid #dddddf", + "color": "#dddddf" + }, + "style": { + "padding-bottom": "20px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "20px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "0b3c8b17-def7-4054-b9d5-5be2de23efa0" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "19e70787-f35f-4188-8a30-8ef8f6afb9b7" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "5px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "50px" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "30px", + "padding-left": "30px", + "padding-right": "60px", + "padding-top": "50px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "641a6d92-8ddc-4a3e-8e72-b579691d9206" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "259px" + }, + "image": { + "alt": "QR Code", + "height": "259px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_QR.png", + "target": "_blank", + "width": "259px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "114e74bd-f504-4419-b21c-b9334c9e8ca4" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "f548bef1-fadc-41f2-908b-ed24597c8352" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "10px", + "text-align": "center" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#dddddf", + "paragraphSpacing": "16px" + }, + "html": "

Scan the QR code for the latest updates about our app and hiring posts.

", + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "84b7ed82-aa3a-4561-93dd-58fd2fc1d54d" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "0a937fb2-1d28-4565-ba68-768f18011617" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "middle" + }, + "mobileStyle": { + "padding-bottom": "25px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "25px" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "25px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "25px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "ab5ed2b5-26ff-4320-9370-d17784ac21ff" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "700px" + }, + "image": { + "alt": "Patterns", + "height": "228px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Divider.png", + "target": "_blank", + "width": "700px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "970f29f5-22e7-4372-95dd-53eaa8485c09" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "035847b0-0684-40ba-a6dd-bdf15535a8d7" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "92bd8f00-759e-492e-b10f-04d960caa966" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#dddddf", + "paragraphSpacing": "16px" + }, + "html": "

Somewhere between solitude and spark, you find your rhythm again. That’s where we’ll meet you.

", + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "1px", + "line-height": "150%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a688ebfb-259c-4bd7-b931-c205ce3019d4" + }, + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "542px" + }, + "image": { + "alt": "UI Image", + "height": "352px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_Comment.png", + "target": "_blank", + "width": "542px" + }, + "mobileStyle": { + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "15px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "20px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "50px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "7257d502-ae13-4abc-a405-5ab7cb41b09e" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#dddddf", + "direction": "ltr", + "font-family": "inherit", + "font-size": "60px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#dddddf", + "text-align": "left" + }, + "text": "ALTITUDE MEETS ATTITUDE.", + "title": "h2" + }, + "mobileStyle": { + "font-size": "48px", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "15px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "c539928e-e283-4f5e-81cb-aa3e37a88237" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

JOIN THE BETA

", + "style": { + "background-color": "#dddddf", + "border-bottom": "1px solid #dddddf", + "border-left": "1px solid #dddddf", + "border-radius": "25px", + "border-right": "1px solid #dddddf", + "border-top": "1px solid #dddddf", + "color": "#000000", + "direction": "ltr", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "22px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "35px", + "padding-right": "35px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 56, + "hideContentOnMobile": false, + "width": 216 + }, + "hoverStyle": { + "background-color": "#000000", + "border-bottom": "1px solid #dddddf", + "border-left": "1px solid #dddddf", + "border-right": "1px solid #dddddf", + "border-top": "1px solid #dddddf", + "color": "#dddddf" + }, + "mobileStyle": { + "padding-bottom": "20px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "20px", + "text-align": "left" + }, + "style": { + "padding-bottom": "20px", + "padding-left": "60px", + "padding-right": "10px", + "padding-top": "20px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "d7fe879b-5166-4770-9acc-7cd78223d986" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "uuid": "eaba0aa4-5d95-48d4-a0d0-427196ff8222" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "10px" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_ClosingBG.png')", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "60px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "9448e93e-66b5-4f3d-9a47-7bd624696d20" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hamburger": { + "backgroundColor": "#dddddf", + "foregroundColor": "#000000", + "iconSize": "36px", + "iconType": "normal", + "mobile": true + }, + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "layout": "horizontal", + "linkColor": "#dddddf", + "menuItemsSpacing": { + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px" + } + }, + "menuItemsList": { + "items": [ + { + "id": "40c9196f-d36e-4d67-bc23-b44310ea8874", + "link": { + "href": "www.example.com", + "target": "_self", + "title": "" + }, + "text": "NEWS" + }, + { + "id": "5eba42fb-d439-4091-9241-632528727ba1", + "link": { + "href": "www.example.com", + "target": "_self", + "title": "" + }, + "text": "TERMS OF SERVICE" + }, + { + "id": "c6190035-9ab7-45fb-a538-e8cae019b9d1", + "link": { + "href": "www.example.com", + "target": "_self", + "title": "" + }, + "text": "PRIVACY POLICY" + }, + { + "id": "23e19410-b73e-4bb6-a4a5-4b331ace663b", + "link": { + "href": "www.example.com", + "target": "_self", + "title": "" + }, + "text": "SIGN UP" + } + ] + }, + "style": { + "color": "#dddddf", + "font-family": "'Source Sans Pro', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "16px", + "font-weight": "600", + "letter-spacing": "1px", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-menu", + "uuid": "8c8f1fc9-5433-43ef-a7bc-e286e93f13f7" + }, + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "258px" + }, + "image": { + "alt": "Your Placeholder Logo", + "height": "114px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10556/Winter_ClosingLogo.png", + "target": "_blank", + "width": "258px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "30px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "9842a466-1992-4ed6-a1ce-f3ac3d0a4d74" + }, + { + "descriptor": { + "computedStyle": { + "height": 57, + "hideContentOnMobile": false, + "iconsDefaultWidth": 32, + "padding": "0 2.5px 0 2.5px", + "width": 151 + }, + "iconsList": { + "icons": [ + { + "id": "facebook", + "image": { + "alt": "Facebook", + "href": "https://www.facebook.com/", + "prefix": "facebook", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/facebook@2x.png", + "target": "_self", + "title": "facebook" + }, + "name": "facebook", + "text": "", + "type": "follow" + }, + { + "id": "twitter", + "image": { + "alt": "Twitter", + "href": "https://www.x.com/", + "prefix": "twitter", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/twitter@2x.png", + "target": "_self", + "title": "twitter" + }, + "name": "twitter", + "text": "", + "type": "follow" + }, + { + "id": "linkedin", + "image": { + "alt": "Linkedin", + "href": "https://www.linkedin.com/", + "prefix": "linkedin", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/linkedin@2x.png", + "target": "_self", + "title": "linkedin" + }, + "name": "linkedin", + "text": "", + "type": "follow" + }, + { + "id": "instagram", + "image": { + "alt": "Instagram", + "href": "https://www.instagram.com/", + "prefix": "instagram", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/instagram@2x.png", + "target": "_self", + "title": "instagram" + }, + "name": "instagram", + "text": "", + "type": "follow" + } + ] + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-social", + "uuid": "5ce67947-9bf7-40c2-89af-773e45edb383" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "33255962-f1ba-4682-9e98-a1f1181a33dc" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "30px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "30px" + }, + "style": { + "background-color": "#0e0e10", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "30px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "30px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "0d04a77a-444e-4c7a-b0d6-ec5f51cf4d8c" + } + ], + "template": { + "name": "template-base", + "type": "basic", + "version": "2.0.0" + }, + "title": "" + }, + "comments": {} + } +} \ No newline at end of file diff --git a/public/templates/exports/beefree-sdk-demo-template.html b/public/templates/exports/beefree-sdk-demo-template.html new file mode 100644 index 0000000..1bc9d99 --- /dev/null +++ b/public/templates/exports/beefree-sdk-demo-template.html @@ -0,0 +1,164 @@ + \ No newline at end of file diff --git a/public/templates/exports/beefree-sdk-demo-template.pdf b/public/templates/exports/beefree-sdk-demo-template.pdf new file mode 100644 index 0000000..5c75c8e Binary files /dev/null and b/public/templates/exports/beefree-sdk-demo-template.pdf differ diff --git a/public/templates/exports/beefree-sdk-demo-template.png b/public/templates/exports/beefree-sdk-demo-template.png new file mode 100644 index 0000000..e2006c4 Binary files /dev/null and b/public/templates/exports/beefree-sdk-demo-template.png differ diff --git a/public/templates/exports/beefree-sdk-demo-template.txt b/public/templates/exports/beefree-sdk-demo-template.txt new file mode 100644 index 0000000..1ee0b1d --- /dev/null +++ b/public/templates/exports/beefree-sdk-demo-template.txt @@ -0,0 +1,138 @@ +[Image] + +[Get started](https://example.com/) + +# The best embeddable +drag-and-drop email builder +for SaaS +------------------------------------------------------------ + +## Intuitive visual no-code builders for email, +landing pages, popups. +----------------------------------------------------------------------- + +Designed to embed seamlessly into SaaS products, offering +a delightful end-user experience. + +[Get started](https://example.com/) + +## Add a catchy title here +-------------------------- + +Drag in a Paragraph block and start typing. + +**Column 1** + +👉 Column name + +**Column 2** + +Column purpose + +- Use a List block to organize ideas and steps + +[Add CTA to your design](https://example.com/) + +✏️ Click to edit + +📊 Create a table + +Edit content + +Copy this + +[Image] + +## Engagement, Speed & Reliability +---------------------------------- + +Beefree SDK boosts user engagement, reduces churn, integrates in under 30 days, is fully customizable and low-maintenance, and delivers enterprise-grade security with high uptime. + +[Learn more](https://example.com/) + +## Developer control & flexibility +---------------------------------- + +Beefree SDK lets you control branding and features, extend functionality with APIs and custom tools, and integrate AI to speed up content creation. + +[Learn more](https://example.com/) + +[Image] + +# 1,100+ +-------- + +SaaS platforms use Beefree SDK + +# 80% +----- + +integrate +in ≤ 3 weeks + +# 65% +----- + +see ROI +in 6 months + +# 89% +----- + +would recommend it + +[Image] + +## Faster, Cleaner, Smarter Design +---------------------------------- + +Enhance your editor with tools like File Manager and Template Catalog API for smooth workflows. Use AddOns and reusable content blocks to speed creation and maintain consistent designs. Import HTML and create custom extensions to fully adapt the editor to your product. + + + +[Learn more](https://example.com/) + +## Security, stability, scalability +----------------------------------- + +Beefree SDK runs on AWS auto-scaling infrastructure, offers enterprise-grade security and compliance, and is built to support SaaS products at any stage of growth. + +[Learn more](https://example.com/) + +[Image] + +## Give your users a seamless experience +---------------------------------------- + +[Image] + +Clean, intuitive UX + + + +[Image] + +Drag-and-drop, no-code content creation + + + +[Image] + +Outlook-ready email rendering + + + +[Image] + +AI text assistant built-in for faster writing, translation & tone suggestions + +[Image] + +* [social icon](https://www.facebook.com/) +* [social icon](https://www.twitter.com/) +* [social icon](https://www.linkedin.com/) +* [social icon](https://www.instagram.com/) + +[About us](#)[Blog](#)[Services](#)[Unsubscribe](#) + +****© Bee Content Design**, Inc. San Francisco, CA | Part of Growens** \ No newline at end of file diff --git a/public/templates/exports/black-friday-watch-sale.html b/public/templates/exports/black-friday-watch-sale.html new file mode 100644 index 0000000..2bcbd4d --- /dev/null +++ b/public/templates/exports/black-friday-watch-sale.html @@ -0,0 +1,129 @@ + \ No newline at end of file diff --git a/public/templates/exports/black-friday-watch-sale.pdf b/public/templates/exports/black-friday-watch-sale.pdf new file mode 100644 index 0000000..0eb7c10 Binary files /dev/null and b/public/templates/exports/black-friday-watch-sale.pdf differ diff --git a/public/templates/exports/black-friday-watch-sale.png b/public/templates/exports/black-friday-watch-sale.png new file mode 100644 index 0000000..e81ab5f Binary files /dev/null and b/public/templates/exports/black-friday-watch-sale.png differ diff --git a/public/templates/exports/black-friday-watch-sale.txt b/public/templates/exports/black-friday-watch-sale.txt new file mode 100644 index 0000000..23661ff --- /dev/null +++ b/public/templates/exports/black-friday-watch-sale.txt @@ -0,0 +1,146 @@ +[Your-Logo](http://www.example.com/) + +_____________________________ + +* [WATCHES](http://www.example.com/) +* [SUNGLASSES](http://www.example.com/) +* [JEWELRY](http://www.example.com/) +* [BLOG](http://www.example.com/) + +_____________________________ + + + +# Save the date - November 25th +------------------------------- + + + +# BLACK +------- + +# FRIDAY +-------- + + + +# DON'T MISS +------------ + +# 50% OFF +--------- + +# SELECTED ITEMS +ONLINE AND IN-STORES +------------------------------------- + + + + + + + + + + + +# Black Friday Sale is ON... +---------------------------- + + + +# BIGGEST SALE EVENT OF THE YEAR IS ON +AND YOU DON'T WANT TO MISS IT! +---------------------------------------------------------------------- + + + +Discover our incredible Black Friday sales with huge savings, discount, deals and exclusive offers available for a limited time online and in-stores. + +## UP TO 50 % OFF +----------------- + + + +[SHOP NOW](http://www.example.com/) + + + +[piano-sales](http://www.example.com/) + +# 50% OFF +--------- + +# WATCHES +--------- + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet. + +[SHOP NOW](http://www.example.com/) + + + +# 50% OFF +--------- + +# SUNGLASSES +------------ + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet. + +[SHOP NOW](http://www.example.com/) + +[piano-sales](http://www.example.com/) + + + +[piano-sales](http://www.example.com/) + +# 50% OFF +--------- + +# JEWELS +-------- + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet. + +[SHOP NOW](http://www.example.com/) + + + +_____________________________ + + + +# LIMITED TIME OFFER +-------------------- + +Whether you are searching for that perfect Christmas gift or simply looking to indulge in our striking range of luxury and designer watches, you can be sure to find the perfect treat in our Black Friday sales. + + + +# BE FIRST TO GET → +------------------- + + + +* [Icon] + +# FREE SHIPPING WORLDWIDE ON ALL ORDERS +--------------------------------------- + +[Your-Logo](http://www.example.com/) + +* [Facebook](https://www.facebook.com) +* [Twitter](https://www.twitter.com) +* [Instagram](https://www.instagram.com) +* [YouTube](https://www.youtube.com) +* [Vimeo](https://www.vimeo.com) +* [TikTok](https://www.tiktok.com) + +Your address - City 00000 +Phone: +00 111 222 333 - info@example.com + +If you prefer not to receive marketing emails form this list, click here to unsubscribe. + +Company Name © - 2022 All rights reserved \ No newline at end of file diff --git a/public/templates/exports/bring-your-app-to-life-email.html b/public/templates/exports/bring-your-app-to-life-email.html new file mode 100644 index 0000000..c532453 --- /dev/null +++ b/public/templates/exports/bring-your-app-to-life-email.html @@ -0,0 +1,112 @@ + \ No newline at end of file diff --git a/public/templates/exports/bring-your-app-to-life-email.pdf b/public/templates/exports/bring-your-app-to-life-email.pdf new file mode 100644 index 0000000..f823c0e Binary files /dev/null and b/public/templates/exports/bring-your-app-to-life-email.pdf differ diff --git a/public/templates/exports/bring-your-app-to-life-email.png b/public/templates/exports/bring-your-app-to-life-email.png new file mode 100644 index 0000000..d34481e Binary files /dev/null and b/public/templates/exports/bring-your-app-to-life-email.png differ diff --git a/public/templates/exports/bring-your-app-to-life-email.txt b/public/templates/exports/bring-your-app-to-life-email.txt new file mode 100644 index 0000000..66b3fe7 --- /dev/null +++ b/public/templates/exports/bring-your-app-to-life-email.txt @@ -0,0 +1,78 @@ +[Your Placeholder Logo] + +# Your story keeps moving. +-------------------------- + +[Hero Text] + +[Hero Image] + +A season of stillness, but your story keeps moving.
Welcome to a digital space that breathes with you—raw, real, and alive in the cold. + +[STEP INSIDE](www.example.com) + +[Patterns] + +THE VIBE + +## IT'S ABOUT FEELING. +---------------------- + +Winter isn’t about frost—it’s about feeling.
That moment between the inhale and the exhale.
The city muted, the light dimmed, and your thoughts louder than ever.
We built this app for that kind of quiet energy—when you’re craving connection without the noise. + +[Lifestyle Image] + +THE REVEAL + +## YOUR WAY OF SEEING THE WORLD +------------------------------- + +[UI Image] + +Designed to move like a mixtape — part reflection, part revelation. + +[UI Image] + +Built for those who stay curious even when the world freezes. + +[JOIN THE BETA →](www.example.com) + +Over 1000+ people have signed up for beta testing + +[Limited Access Banner] + +[Your Placeholder Logo] + +## EARLY ACCESS OPENS NOW. +-------------------------- + +No noise, no crowd—just you and a few who get it. A collector’s moment before the thaw. + +[CLAIM YOUR SPOT](www.example.com) + +[QR Code] + +Scan the QR code for the latest updates about our app and hiring posts. + +[Patterns] + +Somewhere between solitude and spark, you find your rhythm again. That’s where we’ll meet you. + +[UI Image] + +## ALTITUDE MEETS ATTITUDE. +--------------------------- + +[JOIN THE BETA](www.example.com) + +* [NEWS](www.example.com) +* [TERMS OF SERVICE](www.example.com) +* [PRIVACY POLICY](www.example.com) +* [SIGN UP](www.example.com) + +[Your Placeholder Logo] + +* [Facebook](https://www.facebook.com/) +* [Twitter](https://www.x.com/) +* [Linkedin](https://www.linkedin.com/) +* [Instagram](https://www.instagram.com/) \ No newline at end of file diff --git a/public/templates/exports/fall-in-love-with-this-seasons-collection.html b/public/templates/exports/fall-in-love-with-this-seasons-collection.html new file mode 100644 index 0000000..80e4d43 --- /dev/null +++ b/public/templates/exports/fall-in-love-with-this-seasons-collection.html @@ -0,0 +1,132 @@ + + \ No newline at end of file diff --git a/public/templates/exports/fall-in-love-with-this-seasons-collection.pdf b/public/templates/exports/fall-in-love-with-this-seasons-collection.pdf new file mode 100644 index 0000000..07cd583 Binary files /dev/null and b/public/templates/exports/fall-in-love-with-this-seasons-collection.pdf differ diff --git a/public/templates/exports/fall-in-love-with-this-seasons-collection.png b/public/templates/exports/fall-in-love-with-this-seasons-collection.png new file mode 100644 index 0000000..0a4d820 Binary files /dev/null and b/public/templates/exports/fall-in-love-with-this-seasons-collection.png differ diff --git a/public/templates/exports/fall-in-love-with-this-seasons-collection.txt b/public/templates/exports/fall-in-love-with-this-seasons-collection.txt new file mode 100644 index 0000000..1f49bf0 --- /dev/null +++ b/public/templates/exports/fall-in-love-with-this-seasons-collection.txt @@ -0,0 +1,117 @@ + + +[Your Logo](https://www.example.com) + + + +* [FALL COLLECTION](https://www.example.com) +* [ROOMS](https://www.example.com) +* [THE CLASSICS](https://www.example.com) + + + +[Fall Banner Image] + + + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit + + + +[Browse Now](https://www.example.com) + + + + + +**FEATURED SEATING** + +[Breakfast Chair] + + + +*Breakfast Chair* + +***£120*** + +[Accent Chair] + + + +*Grey Accent Chair* + +***£235*** + +[Shell Chair] + + + +*Orange Shell Chair* + +***£270*** + + + +**BROWSE DECOR SETS** + +[TV unit] + +[Shop Now](https://www.example.com) + + + +**CUSHIONS** + +[Cushions] + +[Shop Now](https://www.example.com) + + + +**SIDE TABLES** + +[Side Tables] + +[Shop Now](https://www.example.com) + + + + + +**LIVING ****ROOM** + +[Living Room Ideas] + +[Shop Now](https://www.example.com) + + + + + + + +**REIMAGINING**** THE CLASSICS** + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit + + + +Browse Now + +[Sofa and Chair Image] + + + +[Your Logo](https://www.example.com) + + + +* [Facebook](https://www.facebook.com) +* [Twitter](https://www.twitter.com) +* [Instagram](https://www.instagram.com) +* [LinkedIn](https://www.linkedin.com) + + + +Changed your mind? You can **[unsubscribe](http://www.example.com)** at any time. + diff --git a/public/templates/exports/kids-fall-collection.html b/public/templates/exports/kids-fall-collection.html new file mode 100644 index 0000000..45d786a --- /dev/null +++ b/public/templates/exports/kids-fall-collection.html @@ -0,0 +1,143 @@ + \ No newline at end of file diff --git a/public/templates/exports/kids-fall-collection.pdf b/public/templates/exports/kids-fall-collection.pdf new file mode 100644 index 0000000..d5fe65c Binary files /dev/null and b/public/templates/exports/kids-fall-collection.pdf differ diff --git a/public/templates/exports/kids-fall-collection.png b/public/templates/exports/kids-fall-collection.png new file mode 100644 index 0000000..2d31d9b Binary files /dev/null and b/public/templates/exports/kids-fall-collection.png differ diff --git a/public/templates/exports/kids-fall-collection.txt b/public/templates/exports/kids-fall-collection.txt new file mode 100644 index 0000000..1434d3b --- /dev/null +++ b/public/templates/exports/kids-fall-collection.txt @@ -0,0 +1,111 @@ +NEW FALL COLLECTION! SAVE 15% THIS WEEK ONLY + +N E W N O W + +* [Girls](https://www.example.com) +* [Boys](https://www.example.com) +* [Babies](https://www.example.com) +* [Tweens](https://www.example.com) + + + +[boy holds leaf] + +# Happy First Day of Fall +------------------------- + +## Order before Sept 24 and get free shipping +--------------------------------------------- + + + +[+] + +# 15% off +--------- + +[Shop The Collection](https://www.example.com) + +[girl holds ball] + +_____________________________ + +## NEW from the fall collection +------------------------------- + +[hat] + +Teddy Bear Hat + +$20 + +[Buy Now](https://www.example.com) + +[sweaters] + +Teddy Bear Hat + +$90 + +[Buy Now](https://www.example.com) + +[single sweater] + +Premium Knit Sweater + +$60 + +[Buy Now](https://www.example.com) + +_____________________________ + +## Latest Social Posts +---------------------- + +[social post] + +[social post] + +[social post] + +[social post] + +[social post] + +[social post] + +[social post] + +[social post] + +[social post] + +## Follow Us +------------ + +* [Facebook](https://www.facebook.com) +* [Twitter](https://www.twitter.com) +* [Linkedin](https://www.linkedin.com) +* [Instagram](https://www.instagram.com) + + + +### MORE TO DISCOVER +-------------------- + +### UP TO 30% OFF SALE STYLES +----------------------------- + +[Girls](https://www.example.com) + +[Boys](https://www.example.com) + +[Babies](https://www.example.com) + +  + +Copyright © 2021, Company Name, All rights reserved.  +  +[Changed your mind? You can no-content at any time.](http://www.example.com) + +  \ No newline at end of file diff --git a/public/templates/exports/our-monthly-impact-email.html b/public/templates/exports/our-monthly-impact-email.html new file mode 100644 index 0000000..a7ae07b --- /dev/null +++ b/public/templates/exports/our-monthly-impact-email.html @@ -0,0 +1,150 @@ + \ No newline at end of file diff --git a/public/templates/exports/our-monthly-impact-email.pdf b/public/templates/exports/our-monthly-impact-email.pdf new file mode 100644 index 0000000..5abd294 Binary files /dev/null and b/public/templates/exports/our-monthly-impact-email.pdf differ diff --git a/public/templates/exports/our-monthly-impact-email.png b/public/templates/exports/our-monthly-impact-email.png new file mode 100644 index 0000000..e267cf9 Binary files /dev/null and b/public/templates/exports/our-monthly-impact-email.png differ diff --git a/public/templates/exports/our-monthly-impact-email.txt b/public/templates/exports/our-monthly-impact-email.txt new file mode 100644 index 0000000..400905d --- /dev/null +++ b/public/templates/exports/our-monthly-impact-email.txt @@ -0,0 +1,126 @@ +Few slots remaining. [**Register Now!**](http://www.example.com) + +[Your Logo Placeholder] + + + +Together, We Give. Together, We Grow. + +[Hero Text] + + + +[Save Your Spot](www.example.com) + +[Give, Share, Learn Banner] + +### This Giving Tuesday, we’re coming together to share, learn, and give in ways that make a lasting difference. +---------------------------------------------------------------------------------------------------------------- + + + +[Lifestyle Image] + +# This Month’s Sessions +----------------------- + +[Event Image] + +⭐ **5.0** (289) + +**Mentorship That Transforms Lives** + +[Join Session](www.example.com) + +[Event Image] + +⭐ **5.0** (289) + +**Education as Empowerment** + +[Join Session](www.example.com) + +[Event Image] + +⭐ **5.0** (289) + +**Inspiring Curiosity in the Community** + +[Join Session](www.example.com) + +[Event Image] + +⭐ **5.0** (289) + +**Creating Spaces That Welcome Everyone** + +[Join Session](www.example.com) + +### Don’t miss your chance to be part of a day rooted in generosity, learning, and shared purpose. +-------------------------------------------------------------------------------------------------- + +[RSVP Now](www.example.com) + +## Upcoming Giving Tuesday Events +--------------------------------- + +_____________________________ + +**NOV 22** + +**Community Dinner & Story Exchange** + +Zoom | 11 AM - 1 PM + +_____________________________ + +**NOV 25** + +**Mentorship Circle: Building Impact** + +Zoom | 4 - 5 PM + +_____________________________ + +**NOV 28** + +**Small Actions, Big Change** + +Zoom | 2 - 4 PM + +[Quote] + +I attended last year’s mentorship circle and left feeling inspired and connected. It reminded me that giving isn’t just about money—it’s about time, kindness, and showing up.” + +[Testimonial Image] + +Leah, Community Volunteer + +[Giving Tuesday Banner] + +## Save Your Spot Today +----------------------- + +Join us and be part of something bigger. Every seat, every story, every act of giving counts. + +[RSVP Now](www.example.com) + + + +[Divider] + +[Your Logo Placeholder] + +_____________________________ + +* [Facebook](https://www.facebook.com/) +* [Twitter](https://www.x.com/) +* [Linkedin](https://www.linkedin.com/) +* [Instagram](https://www.instagram.com/) + +_____________________________ + +1234 Spring Lane, Suite 100, Cityville, ST 56789 +Gather Project Copyright 2025 + +Manage Your Preference | [Unsubscribe](http://www.example.com/unsubscribe) \ No newline at end of file diff --git a/public/templates/exports/thanksgiving-travel.html b/public/templates/exports/thanksgiving-travel.html new file mode 100644 index 0000000..ed089ee --- /dev/null +++ b/public/templates/exports/thanksgiving-travel.html @@ -0,0 +1,149 @@ + \ No newline at end of file diff --git a/public/templates/exports/thanksgiving-travel.pdf b/public/templates/exports/thanksgiving-travel.pdf new file mode 100644 index 0000000..ccfcd62 Binary files /dev/null and b/public/templates/exports/thanksgiving-travel.pdf differ diff --git a/public/templates/exports/thanksgiving-travel.png b/public/templates/exports/thanksgiving-travel.png new file mode 100644 index 0000000..ce02755 Binary files /dev/null and b/public/templates/exports/thanksgiving-travel.png differ diff --git a/public/templates/exports/thanksgiving-travel.txt b/public/templates/exports/thanksgiving-travel.txt new file mode 100644 index 0000000..f04dc76 --- /dev/null +++ b/public/templates/exports/thanksgiving-travel.txt @@ -0,0 +1,150 @@ +[topheader](www.example.com) + + + +[your-ogo](http://www.example.com) + + + +* [CONTACT](http://www.example.com) +* [DESTINATIONS](http://www.example.com) +* [SAFE TRAVEL](http://www.example.com) + + + +# Thanksgiving +-------------- + + + +# - IS COMING - +--------------- + +[Thanksgiving-image](http://www.example.com) + + + +# For everything you are grateful for +------------------------------------- + +*Planning, preparing and hosting.* +**Thanksgiving** will be different this year, +and we’ve got the plan to make it easier. + +[DESTINATIONS](http://www.example.com) + +[Flight-image](http://www.example.com) + + + + + +# Get closer to your family +--------------------------- + +Discover our destinations and** **get close +to your family for Thanksgiving. + + + +[ITALY](http://www.example.com) + +**Italy** + +Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor. + +**$320**   3 days / 2 nights + +[BOOK NOW](http://www.example.com) + +[NEW-YORK](http://www.example.com) + +**North America** + +Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor. + +**$530**   3 days / 2 nights + +[BOOK NOW](http://www.example.com) + +[BARCELLONA](http://www.example.com) + +**Spain** + +Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor. + +**$420**   3 days / 2 nights + +[BOOK NOW](http://www.example.com) + + + +[Flight-image](http://www.example.com) + + + + + +# Safe travel +------------- + + + +Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor incidunt ut labore et dolore magna aliqua. + +[OUR DESTINATIONS](http://www.example.com) + +[safetravel] + + + +[CHECKIN](http://www.example.com) + +**Online check in** + +Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor. + +[CHECKIN](http://www.example.com) + +**Temperature check** + +Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor. + +[CHECKIN](http://www.example.com) + +**Use mask** + +Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor. + + + + + +[Your Logo] + + + +* [Facebook](https://www.facebook.com) +* [Twitter](https://www.twitter.com) +* [Linkedin](https://www.linkedin.com) +* [Instagram](https://www.instagram.com) + + + +* [DESTINATIONS](www.example.com) +* [CHECK IN](www.example.com) +* [SAFE TRAVEL](www.example.com) +* [CONTACTS](www.example.com) +* [FAQ](www.example.com) + + + +**Where to find us** + +Company address here ++1 123 123 123 + + + +Changed your mind? [Unsubscribe](http://www.example.com) + diff --git a/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.html b/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.html new file mode 100644 index 0000000..d13b2bb --- /dev/null +++ b/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.html @@ -0,0 +1,108 @@ + \ No newline at end of file diff --git a/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.pdf b/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.pdf new file mode 100644 index 0000000..916c965 Binary files /dev/null and b/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.pdf differ diff --git a/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.png b/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.png new file mode 100644 index 0000000..8873a02 Binary files /dev/null and b/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.png differ diff --git a/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.txt b/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.txt new file mode 100644 index 0000000..3c80a09 --- /dev/null +++ b/public/templates/exports/the-ultimate-guide-to-a-stress-free-thanksgiving.txt @@ -0,0 +1,109 @@ + + +[Your Logo] + + + + + +*The ultimate guide to a * +*stress-free Thanksgiving* + + + +[Thanksgiving Dinner Set] + + + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed +diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam +erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation +ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +Duis autem vel eum iriure + + + +[follow the recipe](https://www.example.com) + +[shop ingredients](https://www.example.com) + + + + + +[Raw Turkey] + + + + + +*For the turkey* + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh +tincidunt ut laoreet dolore magna aliquam. + +[add to shopping list](https://www.example.com) + +[Spices and extra ingredients] + + + +*For the potatoes* + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh +tincidunt ut laoreet dolore magna aliquam. + +[add to shopping list](https://www.example.com) + + + +[Potatoes] + + + + + +[Veggies] + + + +*For the veggies* + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh +tincidunt ut laoreet dolore magna aliquam. + +[add to shopping list](https://www.example.com) + + + + + +*For the sauce* + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh +tincidunt ut laoreet dolore magna aliquam. + +[add to shopping list](https://www.example.com) + + + +[Fresh Cranberries] + + + +[Your Logo] + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit, +tincidunt ut laoreet dolore magna aliquam erat volutpat. + + + +* [Facebook](https://www.example.com) +* [Instagram](https://www.example.com) +* [Twitter](https://www.example.com) +* [Youtube](https://www.example.com) + + + +**[Terms and Conditions ](https://www.example.com) |  [Unsubscribe  ](https://www.example.com)|  [FAQ](https://www.example.com)** + diff --git a/public/templates/exports/volunteer-for-mentoring-program-email.html b/public/templates/exports/volunteer-for-mentoring-program-email.html new file mode 100644 index 0000000..eb18181 --- /dev/null +++ b/public/templates/exports/volunteer-for-mentoring-program-email.html @@ -0,0 +1,106 @@ + \ No newline at end of file diff --git a/public/templates/exports/volunteer-for-mentoring-program-email.pdf b/public/templates/exports/volunteer-for-mentoring-program-email.pdf new file mode 100644 index 0000000..8417f92 Binary files /dev/null and b/public/templates/exports/volunteer-for-mentoring-program-email.pdf differ diff --git a/public/templates/exports/volunteer-for-mentoring-program-email.png b/public/templates/exports/volunteer-for-mentoring-program-email.png new file mode 100644 index 0000000..17a6ae5 Binary files /dev/null and b/public/templates/exports/volunteer-for-mentoring-program-email.png differ diff --git a/public/templates/exports/volunteer-for-mentoring-program-email.txt b/public/templates/exports/volunteer-for-mentoring-program-email.txt new file mode 100644 index 0000000..6620914 --- /dev/null +++ b/public/templates/exports/volunteer-for-mentoring-program-email.txt @@ -0,0 +1,106 @@ +[Charity Logo Placeholder](https://www.example.com/) + +# Small Actions. +Big Impact. +---------------------------- + +This Giving Tuesday, your support can help plant trees, restore habitats, and inspire the next generation to protect our planet. + +[Join the Movement](https://www.example.com/) + +[a group of people hugging on a hill] + +### Together, we’re making a difference. +---------------------------------------- + +[a star on a green background] + +## 50+ +------ + +**partnerships with local schools** + +[a heart on a green background] + +## 300 +------ + +**communities
reached** + +[a rocket with a green background] + +## 1,400 +-------- + +**volunteers in action** + +[a globe with a green background] + +## 3.8 +------ + +**tons of waste collected** + + + +### “I’ve learned more about community
than I ever expected.” +------------------------------------------------------------- + +### Aisha +--------- + +**Volunteer & Mentor** + +[a woman smiling at the camera] + +### Why should I volunteer? +--------------------------- + +[a close-up of a hand and a hand] + +## Connection +------------- + +**Build meaningful relationships** + +[a woman wearing a head scarf holding a microphone] + +## Growth +--------- + +**Gain leadership and listening skills** + +[a man and boy planting a plant] + +## Impact +--------- + +**Shape someone’s future, and yours** + +[Join the Program](https://www.example.com/) + + + +## Ready to help us grow? +------------------------- + +[Become a Volunteer](https://www.example.com/) + + + +[a sun icon] + +### Thank you +------------- + +for helping us grow a stronger community.
 +You’re making change, one seed at a time. + +* [Facebook](https://www.facebook.com/) +* [Twitter](https://www.x.com/) +* [Linkedin](https://www.linkedin.com/) +* [Instagram](https://www.instagram.com/) + +BrightPath Foundation
 +512 Hawthorne Blvd, Portland, OR 97214
 +© 2025 BrightPath Foundation. All rights reserved. \ No newline at end of file diff --git a/public/templates/fall-in-love-with-this-seasons-collection.json b/public/templates/fall-in-love-with-this-seasons-collection.json new file mode 100644 index 0000000..e3185da --- /dev/null +++ b/public/templates/fall-in-love-with-this-seasons-collection.json @@ -0,0 +1,2524 @@ +{ + "id": "fall-in-love-with-this-seasons-collection", + "name": "FALL in love with this season's collection!", + "display_name": "FALL in love with this season's collection!", + "title": "FALL in love with this season's collection!", + "designer": { + "avatar_url": "https://d1oco4z2z1fhwp.cloudfront.net/designers/yuliana-pandelieva.jpg", + "description": "Graphic designer with a keen interest in typography, layout and illustration. \r\nCurrently exploring & experimenting with all things UI :))", + "short_description": "", + "display_name": "Yuliana Pandelieva", + "id": "yuliana-pandelieva" + }, + "tags": [ + "Autumn", + "Fall", + "Furniture", + "Gradient", + "Home", + "Seasonal promotion" + ], + "thumbnail": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776.jpg", + "json_data": { + "page": { + "body": { + "container": { + "style": { + "background-color": "#f7f2eb" + } + }, + "content": { + "computedStyle": { + "linkColor": "#ffffff", + "messageBackgroundColor": "transparent", + "messageWidth": "640px" + }, + "style": { + "color": "#000000", + "font-family": "Montserrat, Trebuchet MS, Lucida Grande, Lucida Sans Unicode, Lucida Sans, Tahoma, sans-serif" + } + }, + "type": "mailup-bee-page-properties", + "webFonts": [ + { + "fontFamily": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "name": "Montserrat", + "url": "https://fonts.googleapis.com/css?family=Montserrat" + } + ] + }, + "description": "", + "rows": [ + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "28d22059-d90c-4038-8790-e5c90772e9f0" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "08a92aeb-e7b2-4940-83ce-9a2f6643b735" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "b3ec557f-cf53-4ff0-8f44-7e26ebf5d9a3" + }, + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "63.99999999999999px" + }, + "image": { + "alt": "Your Logo", + "height": "100px", + "href": "https://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_LOGO.png", + "target": "_self", + "width": "100px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "1b7fcc7f-0d36-433a-952d-11585adc1585" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "9aabe09a-8e2c-4c96-b5a8-c7cbd47b4f06" + }, + { + "grid-columns": 8, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "15px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "24cbad5b-289e-40e8-b974-5541b7ab2393" + }, + { + "descriptor": { + "computedStyle": { + "hamburger": { + "backgroundColor": "#efe6d7", + "foregroundColor": "#323e49", + "iconSize": "36px", + "iconType": "normal", + "mobile": true + }, + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "layout": "horizontal", + "linkColor": "#323e49", + "menuItemsSpacing": { + "padding-bottom": "0px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px" + } + }, + "menuItemsList": { + "items": [ + { + "link": { + "href": "https://www.example.com", + "target": "_self", + "title": "" + }, + "text": "FALL COLLECTION" + }, + { + "link": { + "href": "https://www.example.com", + "target": "_self", + "title": "" + }, + "text": "ROOMS" + }, + { + "link": { + "href": "https://www.example.com", + "target": "_self", + "title": "" + }, + "text": "THE CLASSICS" + } + ] + }, + "style": { + "color": "#323e49", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "14px", + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-menu", + "uuid": "dacf1dce-e922-4d16-a085-a5ed96ab55c3" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "b324f1b5-e59a-4740-80c1-70387feedb7b" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-2-columns-4-8", + "uuid": "c9f31ef3-d001-4965-bf9c-104703c6ff65" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "4b81329a-9d64-480a-9f3c-4080afce29fe" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "08a92aeb-e7b2-4940-83ce-9a2f6643b735" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "065be184-7fb1-4ebd-8065-4093e55e102c" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "630px" + }, + "image": { + "alt": "Fall Banner Image", + "height": "613px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_mustardchair_banner.png", + "target": "_self", + "width": "900px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "10px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "da8b50f0-86f7-457c-952b-229e810ef875" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "c89f64f2-731e-4156-9b8b-897c8d6ab510" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "97ff2144-5198-4aac-82b1-19d3f13354f5" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "e30525c9-5578-4040-b591-354d6c9b8821" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Browse Now

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #8E364B", + "border-left": "1px solid #8E364B", + "border-radius": "0px", + "border-right": "1px solid #8E364B", + "border-top": "1px solid #8E364B", + "color": "#8e364b", + "direction": "ltr", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "14px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 129 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "e871a7c9-3cdd-4aa8-b020-a3d0d4f1d29f" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "30px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "0c140572-c766-4900-be21-791256857af4" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "f1f49cba-a4e8-49db-ab31-bf178267b849" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "f3d702ed-2acf-40e1-86db-ffb6640220c6" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "17c6a898-5ff5-44d5-aa5e-f435c6f8081e" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

FEATURED SEATING

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "24px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "c383a4b5-a6e2-437f-bdd0-4bd9cf75ffaa" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "08a92aeb-e7b2-4940-83ce-9a2f6643b735" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "85c3e69a-bb0b-4677-b270-5cc9e0dba4f8" + }, + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "175px" + }, + "image": { + "alt": "Breakfast Chair", + "height": "213px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_featuredchair1_bg.png", + "target": "_self", + "width": "175px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "f685c29d-179e-47fa-9294-5040c9a04063" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "22af02af-3e54-48da-bce8-dd6d4a746db4" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

Breakfast Chair

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "92892a71-2009-4705-9621-2c668e2e5ede" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

£120

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "38194f91-62a7-4dbf-a036-b4ee3e858e4c" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "9c945dcd-077e-4ece-80ef-67878677afe0" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "175px" + }, + "image": { + "alt": "Accent Chair", + "height": "213px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_featuredchair2_bg.png", + "target": "_self", + "width": "175px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "6471ea91-ff4a-4338-b240-82073257dd91" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "de2ebaca-f95b-4572-b224-00e6684b78ec" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

Grey Accent Chair

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "d209afe5-88c1-4a20-a2f7-ccf094fffdb9" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

£235

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "3ffdc8f0-7dfe-44b9-9d42-2b2ca51b55b0" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "4d78b21e-661c-40c6-bf95-c212d68f7c0a" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "175px" + }, + "image": { + "alt": "Shell Chair", + "height": "213px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_featuredchair3_bg.png", + "target": "_self", + "width": "175px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "d171ef2d-64e3-43b3-bc8a-09e962d7cd96" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "6a2938a3-f805-4c8a-b5af-04d0fc917ab0" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

Orange Shell Chair

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "71782c5e-190a-433f-88f3-d4053ecc6b00" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

£270

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "2017fd57-17c8-473b-b453-19b0b086e8f1" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "30f64832-7958-452b-baf7-919e13acb793" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-3-columns-4-4-4", + "uuid": "4bbc8288-8ce9-43af-83c4-f78514b30916" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "f7597b50-0e1c-42ef-b159-591d6b97a5e8" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "08a92aeb-e7b2-4940-83ce-9a2f6643b735" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "01b75440-2366-4653-b002-b3fbedaf1bba" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

BROWSE DECOR SETS

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "24px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "d33bd427-2a70-4ee1-8295-8b5b16e2f047" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "08a92aeb-e7b2-4940-83ce-9a2f6643b735" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "4033a1b1-f524-4742-91f0-7e1ea4469d23" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "599.4499999999999px" + }, + "image": { + "alt": "TV unit", + "height": "211px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_tvstand_bg.png", + "target": "_self", + "width": "588px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "e116ef7d-da31-4c48-bbfa-f98e8146d5d7" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Shop Now

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #8E364B", + "border-left": "1px solid #8E364B", + "border-radius": "0px", + "border-right": "1px solid #8E364B", + "border-top": "1px solid #8E364B", + "color": "#8e364b", + "direction": "ltr", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "14px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 114 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "1f259b77-fbe2-4cf6-a8a3-ab8f53361765" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "3px solid transparent", + "border-right": "6px solid transparent", + "border-top": "0px solid #BFB5A6", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "08a92aeb-e7b2-4940-83ce-9a2f6643b735" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "70a0a148-2a6c-41a5-bbf9-2a2a7b06ebb3" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "7873aa0f-cec3-4e80-b1b0-946b13473a6f" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

CUSHIONS

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "24px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "36dbf685-7572-4b15-8359-01e1945295c9" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "290px" + }, + "image": { + "alt": "Cushions", + "height": "488px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_cushions.png", + "target": "_self", + "width": "640px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "cffcd676-8377-450a-b904-a978d54abdb3" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Shop Now

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #8E364B", + "border-left": "1px solid #8E364B", + "border-radius": "0px", + "border-right": "1px solid #8E364B", + "border-top": "1px solid #8E364B", + "color": "#8e364b", + "direction": "ltr", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "14px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 114 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "a0a43a88-1d4b-472b-8fac-5020c1da1970" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "4c233299-c792-4584-9d9f-1ed0c53a05c2" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

SIDE TABLES

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "24px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "1aa2bc1e-8867-486d-9922-47589278b4f9" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "188.5px" + }, + "image": { + "alt": "Side Tables", + "height": "1023px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/coffeetables.png", + "target": "_self", + "width": "1000px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "6a83ecb6-e2ac-49a1-a658-176083269250" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Shop Now

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #8E364B", + "border-left": "1px solid #8E364B", + "border-radius": "0px", + "border-right": "1px solid #8E364B", + "border-top": "1px solid #8E364B", + "color": "#8e364b", + "direction": "ltr", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "14px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 114 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "4b7b4665-b433-468e-958c-cade55d68a23" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "8b3f8e02-cbf1-4327-9967-388845befc08" + } + ], + "style": { + "background-color": "#f7f2eb", + "border-bottom": "10px solid #EFE6D7", + "border-left": "20px solid #EFE6D7", + "border-right": "10px solid #EFE6D7", + "border-top": "10px solid #EFE6D7", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "625ccb98-1eb5-42e0-afe3-8236a44ae658" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "32ab0b44-22b6-4b26-91d4-68bbf9ef0305" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

LIVING ROOM

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "24px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "bfea3180-21d5-4787-b45e-228ed8a9e72c" + }, + { + "descriptor": { + "computedStyle": { + "class": "left autowidth", + "hideContentOnMobile": false, + "width": "282px" + }, + "image": { + "alt": "Living Room Ideas", + "height": "543px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_LIVINGROOM.png", + "target": "_self", + "width": "282px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "8px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "3ba3f485-ac91-4e82-9e18-260822614112" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Shop Now

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #8E364B", + "border-left": "1px solid #8E364B", + "border-radius": "0px", + "border-right": "1px solid #8E364B", + "border-top": "1px solid #8E364B", + "color": "#8e364b", + "direction": "ltr", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "14px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 114 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "4e9cc248-f5b7-468d-a02a-d50725339df8" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "a835393d-1e04-4163-abed-e759c459cfae" + } + ], + "style": { + "background-color": "#f7f2eb", + "border-bottom": "10px solid #EFE6D7", + "border-left": "10px solid #EFE6D7", + "border-right": "20px solid #EFE6D7", + "border-top": "10px solid #EFE6D7", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "3c0767d1-2bdf-4f6d-884f-993dcc66b835" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-2-columns-6-6", + "uuid": "4959a198-9370-4a72-8394-d874969b9d19" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "5cfa25fd-72bd-4b51-be81-919242b1397c" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "08a92aeb-e7b2-4940-83ce-9a2f6643b735" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "9e0ef51f-42ef-427e-8136-0d89126b8c49" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "ec25a93f-59de-4311-b526-ba8740079254" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

REIMAGINING THE CLASSICS

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "24px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "8d6c1a71-a0b8-4b5f-b45e-13bc9fa1ab6c" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0068A5" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "6bb2ce08-c35d-4fdf-a2c2-fab8af469637" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "ef6a5746-5209-46bb-896b-9ba97cc03e30" + }, + { + "descriptor": { + "button": { + "label": "

Browse Now

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #8E364B", + "border-left": "1px solid #8E364B", + "border-radius": "0px", + "border-right": "1px solid #8E364B", + "border-top": "1px solid #8E364B", + "color": "#8e364b", + "direction": "ltr", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "14px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 129 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "f7029688-2510-4671-9b6b-a00bd8c8718c" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "608px" + }, + "image": { + "alt": "Sofa and Chair Image", + "height": "265px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_classics_sofa.png", + "target": "_self", + "width": "680px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "4039a951-6ddb-4741-b207-dc8efa487fa8" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "50px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "4aaf6436-45d4-45f4-9299-101fe99e2cff" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "08a92aeb-e7b2-4940-83ce-9a2f6643b735" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "085d9672-96d1-41b8-b4bc-89bc0ccc89ac" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "160px" + }, + "image": { + "alt": "Your Logo", + "height": "139px", + "href": "https://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/1776/FC_YOURLOGO.png", + "target": "_self", + "width": "205px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "d17e9339-1349-4e8d-8d93-4a1fd2b4b2d4" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "6253da67-590b-4788-a930-548f78c5fe6f" + }, + { + "descriptor": { + "computedStyle": { + "height": 57, + "hideContentOnMobile": false, + "iconsDefaultWidth": 32, + "padding": "0 5px 0 5px", + "width": 151 + }, + "iconsList": { + "icons": [ + { + "image": { + "alt": "Facebook", + "href": "https://www.facebook.com", + "prefix": "https://www.facebook.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-outline-circle-dark-gray/facebook@2x.png", + "target": "_self", + "title": "Facebook" + }, + "name": "Facebook", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Twitter", + "href": "https://www.twitter.com", + "prefix": "https://www.twitter.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-outline-circle-dark-gray/twitter@2x.png", + "target": "_self", + "title": "Twitter" + }, + "name": "Twitter", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Instagram", + "href": "https://www.instagram.com", + "prefix": "https://www.instagram.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-outline-circle-dark-gray/instagram@2x.png", + "target": "_self", + "title": "Instagram" + }, + "name": "Instagram", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "LinkedIn", + "href": "https://www.linkedin.com", + "prefix": "https://www.linkedin.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-outline-circle-dark-gray/linkedin@2x.png", + "target": "_self", + "title": "LinkedIn" + }, + "name": "LinkedIn", + "text": "", + "type": "follow" + } + ] + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-social", + "uuid": "5187f056-da0e-45e2-b4c1-d66832c8ee17" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "b5c60dd8-27f7-41b1-97b5-ba0c74430431" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#323e49" + }, + "html": "

Changed your mind? You can unsubscribe at any time.

", + "style": { + "color": "#555555", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "8a2af306-bedc-41de-be3f-fce0afe7390c" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "45px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "c0a068b4-12d0-4e28-9341-d1028371fed8" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "d981a1b2-2278-4ab0-818d-cabfbf1a4836" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#efe6d7", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "5df03311-c5ad-4719-b868-313973d5183a" + } + ], + "template": { + "name": "template-base", + "type": "basic", + "version": "2.0.0" + }, + "title": "" + } + } +} \ No newline at end of file diff --git a/public/templates/index.json b/public/templates/index.json new file mode 100644 index 0000000..3a8b1a6 --- /dev/null +++ b/public/templates/index.json @@ -0,0 +1,105 @@ +{ + "templates": [ + { + "id": "beefree-sdk-demo-template", + "name": "Beefree SDK Demo Template", + "files": { + "json": "beefree-sdk-demo-template.json", + "html": "exports/beefree-sdk-demo-template.html", + "text": "exports/beefree-sdk-demo-template.txt", + "pdf": "exports/beefree-sdk-demo-template.pdf", + "image": "exports/beefree-sdk-demo-template.png" + } + }, + { + "id": "thanksgiving-travel", + "name": "Thanksgiving Travel", + "files": { + "json": "thanksgiving-travel.json", + "html": "exports/thanksgiving-travel.html", + "text": "exports/thanksgiving-travel.txt", + "pdf": "exports/thanksgiving-travel.pdf", + "image": "exports/thanksgiving-travel.png" + } + }, + { + "id": "kids-fall-collection", + "name": "Kids Fall Collection", + "files": { + "json": "kids-fall-collection.json", + "html": "exports/kids-fall-collection.html", + "text": "exports/kids-fall-collection.txt", + "pdf": "exports/kids-fall-collection.pdf", + "image": "exports/kids-fall-collection.png" + } + }, + { + "id": "bring-your-app-to-life-email", + "name": "Bring Your App to Life: Email", + "files": { + "json": "bring-your-app-to-life-email.json", + "html": "exports/bring-your-app-to-life-email.html", + "text": "exports/bring-your-app-to-life-email.txt", + "pdf": "exports/bring-your-app-to-life-email.pdf", + "image": "exports/bring-your-app-to-life-email.png" + } + }, + { + "id": "fall-in-love-with-this-seasons-collection", + "name": "FALL in love with this season's collection!", + "files": { + "json": "fall-in-love-with-this-seasons-collection.json", + "html": "exports/fall-in-love-with-this-seasons-collection.html", + "text": "exports/fall-in-love-with-this-seasons-collection.txt", + "pdf": "exports/fall-in-love-with-this-seasons-collection.pdf", + "image": "exports/fall-in-love-with-this-seasons-collection.png" + } + }, + { + "id": "our-monthly-impact-email", + "name": "Our Monthly Impact Event: Email", + "files": { + "json": "our-monthly-impact-email.json", + "html": "exports/our-monthly-impact-email.html", + "text": "exports/our-monthly-impact-email.txt", + "pdf": "exports/our-monthly-impact-email.pdf", + "image": "exports/our-monthly-impact-email.png" + } + }, + { + "id": "the-ultimate-guide-to-a-stress-free-thanksgiving", + "name": "The ultimate guide to a stress-free Thanksgiving", + "files": { + "json": "the-ultimate-guide-to-a-stress-free-thanksgiving.json", + "html": "exports/the-ultimate-guide-to-a-stress-free-thanksgiving.html", + "text": "exports/the-ultimate-guide-to-a-stress-free-thanksgiving.txt", + "pdf": "exports/the-ultimate-guide-to-a-stress-free-thanksgiving.pdf", + "image": "exports/the-ultimate-guide-to-a-stress-free-thanksgiving.png" + } + }, + { + "id": "volunteer-for-mentoring-program-email", + "name": "Volunteer for Mentoring Program: Email", + "files": { + "json": "volunteer-for-mentoring-program-email.json", + "html": "exports/volunteer-for-mentoring-program-email.html", + "text": "exports/volunteer-for-mentoring-program-email.txt", + "pdf": "exports/volunteer-for-mentoring-program-email.pdf", + "image": "exports/volunteer-for-mentoring-program-email.png" + } + }, + { + "id": "black-friday-watch-sale", + "name": "Black Friday Watch Sale", + "files": { + "json": "black-friday-watch-sale.json", + "html": "exports/black-friday-watch-sale.html", + "text": "exports/black-friday-watch-sale.txt", + "pdf": "exports/black-friday-watch-sale.pdf", + "image": "exports/black-friday-watch-sale.png" + } + } + ], + "total": 9, + "exported_at": "2025-12-17T09:55:08.185Z" +} \ No newline at end of file diff --git a/public/templates/kids-fall-collection.json b/public/templates/kids-fall-collection.json new file mode 100644 index 0000000..cfc8a40 --- /dev/null +++ b/public/templates/kids-fall-collection.json @@ -0,0 +1,2521 @@ +{ + "id": "kids-fall-collection", + "name": "Kids Fall Collection", + "display_name": "Kids Fall Collection", + "title": "Kids Fall Collection", + "designer": { + "avatar_url": "https://d1oco4z2z1fhwp.cloudfront.net/designers/derek-brumby.jpg", + "description": "I am a Chicago-based graphic designer. I specialize in working with natural brands. I can work with you remotely or in-person as your creative partner to tackle branding and marketing projects of any format, digital or print. Let's make something amazing together.", + "short_description": "", + "display_name": "Derek Brumby", + "id": "derek-brumby" + }, + "tags": [ + "Autumn", + "Fall", + "Fashion", + "First day of fall", + "Kids" + ], + "thumbnail": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566.jpg", + "json_data": { + "comments": {}, + "page": { + "body": { + "container": { + "style": { + "background-color": "#f8eeee" + } + }, + "content": { + "computedStyle": { + "linkColor": "#0068A5", + "messageBackgroundColor": "#ffffff", + "messageWidth": "640px" + }, + "style": { + "color": "#000000", + "font-family": "Libre Baskerville, sans-serif" + } + }, + "type": "mailup-bee-page-properties", + "webFonts": [ + { + "fontFamily": "'Libre Baskerville', sans-serif", + "name": "Libre Baskerville", + "url": "https://fonts.googleapis.com/css2?family=Libre+Baskerville" + }, + { + "fontFamily": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "name": "Montserrat", + "url": "https://fonts.googleapis.com/css?family=Montserrat" + } + ] + }, + "description": "", + "rows": [ + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

NEW FALL COLLECTION! SAVE 15% THIS WEEK ONLY

", + "style": { + "color": "#ffffff", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "ec6a1126-9cb0-4816-92ea-1ad41f57ffa6" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "f80fe7b7-796f-40ab-bda5-f47aea7f541b" + } + ], + "container": { + "style": { + "background-color": "#cf9d88", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#cf9d88", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "49e9207d-abcf-41c7-9d21-9cb454ad0b22" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "align": "left", + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "style": { + "padding-bottom": "25px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "25px" + }, + "text": { + "computedStyle": { + "linkColor": "#6c4f42" + }, + "html": "

N E W N O W

", + "style": { + "color": "#6c4f42", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "line-height": "120%" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-text", + "uuid": "b5738448-459f-49df-84f4-89da4893f904" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "hamburger": { + "backgroundColor": "#4f0000", + "foregroundColor": "#f4efe9", + "iconSize": "36px", + "iconType": "rounded", + "mobile": true + }, + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "layout": "horizontal", + "linkColor": "#a97f6f", + "menuItemsSpacing": { + "padding-bottom": "10px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "10px" + } + }, + "menuItemsList": { + "items": [ + { + "link": { + "href": "https://www.example.com", + "target": "_blank", + "title": "Shop Now" + }, + "text": "Girls" + }, + { + "link": { + "href": "https://www.example.com", + "target": "_blank", + "title": "Shop Now" + }, + "text": "Boys" + }, + { + "link": { + "href": "https://www.example.com", + "target": "_blank", + "title": "Shop Now" + }, + "text": "Babies" + }, + { + "link": { + "href": "https://www.example.com", + "target": "_blank", + "title": "Shop Now" + }, + "text": "Tweens" + } + ] + }, + "style": { + "color": "#a97f6f", + "font-family": "inherit", + "font-size": "14px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-menu", + "uuid": "7a3bdd11-d69e-4c49-8e2e-9889a5c83469" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "20px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "6a7eb279-34cf-4033-823b-65b78e3de27d" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "c6863414-6213-46a0-b92c-84eb6d3467c9" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "metadata": { + "category": 614807, + "dateCreated": "2021-08-25T06:46:13.636807Z", + "dateModified": "2021-08-25T06:46:17.755034Z", + "description": "", + "idParent": null, + "name": "header-2", + "slug": "header-2", + "uuid": "a641422a-a5ac-42c8-a329-755937e454a7" + }, + "synced": false, + "type": "one-column-empty", + "uuid": "67ca8773-dc6a-462b-b2be-3b4712704e7a" + }, + { + "columns": [ + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "left fixedwidth", + "width": "160px" + }, + "image": { + "alt": "boy holds leaf", + "height": "880px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/hero-1.jpg", + "target": "_self", + "width": "428px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "d2e02b89-c368-4591-a162-4070b8a81aa1" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "5b674b62-3ae2-4e76-81c2-c6fa2a36330d" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "24px", + "font-weight": "normal", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#393e56", + "text-align": "center" + }, + "text": "Happy First Day of Fall", + "title": "h1" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "25px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "abdc95e9-83fd-4dc4-b3ec-74e2b19e6323" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "14px", + "font-weight": "normal", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#393e56", + "text-align": "center" + }, + "text": "Order before Sept 24 and get free shipping", + "title": "h2" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "98ff475a-e789-48f3-b4ed-648b0a9896fa" + }, + { + "descriptor": { + "computedStyle": { + "align": "center" + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "23a7a1e1-3832-40ae-a635-0e9497cffbc6" + }, + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "320px" + }, + "image": { + "alt": "+", + "height": "48px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/plus-divider.png", + "target": "_self", + "width": "480px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "24a2c13d-6ffa-4d30-80df-409823e02e33" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "40px", + "font-weight": "normal", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#393e56", + "text-align": "center" + }, + "text": "15% off", + "title": "h1" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "f7ba86d6-2044-44a7-8645-8725e57beaed" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Shop The Collection

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #393E56", + "border-left": "1px solid #393E56", + "border-radius": "0px", + "border-right": "1px solid #393E56", + "border-top": "1px solid #393E56", + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 210 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "1e464f03-dca3-423e-8206-78d55d91896e" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "532f4721-ded4-4f93-a99f-c67235f1ccb5" + }, + { + "grid-columns": 3, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "right fixedwidth", + "width": "160px" + }, + "image": { + "alt": "girl holds ball", + "height": "880px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/hero-2.jpg", + "target": "_self", + "width": "428px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "0d599c3b-6d5a-4a45-b8b5-6e4236f16820" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "20799634-e214-4c3d-a505-054b2e97e296" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": false, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/stripes2.png')", + "background-position": "center top", + "background-repeat": "repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "three-columns-empty", + "uuid": "28f44cb7-4e1f-4502-8fbf-2361cf7c1323" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "2px solid #FBFAFA", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "2da29a55-ea6a-461b-a84d-ef85cbe0d05c" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "18px", + "font-weight": "normal", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#E01253", + "text-align": "center" + }, + "text": "NEW from the fall collection", + "title": "h2" + }, + "style": { + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "a314d45f-f93e-47da-b086-de14b971afe4" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "6b084dcb-3bac-4005-90ff-cc72f5b5b50f" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "5dab40ef-d97c-4335-b739-f6e5ad020413" + }, + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "width": "213.33333333333331px" + }, + "image": { + "alt": "hat", + "height": "420px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/Frame_17.png", + "target": "_self", + "width": "420px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "15c1bc5d-3a15-4ff5-87cb-bf8f5565b76c" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

Teddy Bear Hat

", + "style": { + "color": "#393e56", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "aef14665-fed0-4364-a046-7923d2f52a02" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

$20

", + "style": { + "color": "#393e56", + "font-family": "inherit", + "font-size": "18px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "b59bb37f-fa83-4ec4-8121-4616bc5ae4bf" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Buy Now

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #393E56", + "border-left": "1px solid #393E56", + "border-radius": "0px", + "border-right": "1px solid #393E56", + "border-top": "1px solid #393E56", + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 110 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "c82c6bdb-be74-48f1-abb5-52324bea9371" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "d191950a-3fbe-4f1e-800e-e803843466ad" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "width": "213.33333333333331px" + }, + "image": { + "alt": "sweaters", + "height": "420px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/Frame_16.png", + "target": "_self", + "width": "420px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "453d66dd-dd0c-4425-a0d4-f95469811339" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

Teddy Bear Hat

", + "style": { + "color": "#393e56", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "ac3a7554-6e11-4eee-945e-8af213ce7b46" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

$90

", + "style": { + "color": "#393e56", + "font-family": "inherit", + "font-size": "18px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "779c0e77-8b81-48ae-8460-31ff8a9f9abd" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Buy Now

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #393E56", + "border-left": "1px solid #393E56", + "border-radius": "0px", + "border-right": "1px solid #393E56", + "border-top": "1px solid #393E56", + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 110 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "5ddc48b7-7a6f-496a-a9e7-ee7e129554a4" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "4b3c0cc1-a901-42f8-91e2-ae293b1ea60e" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "width": "213.33333333333331px" + }, + "image": { + "alt": "single sweater", + "height": "420px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/Frame_15.png", + "target": "_self", + "width": "420px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "abdb7cff-6c3b-45e4-8f5e-d0fdf87099ad" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

Premium Knit Sweater

", + "style": { + "color": "#393e56", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "e4788da0-24b6-4899-96d5-1f29bf2b1898" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

$60

", + "style": { + "color": "#393e56", + "font-family": "inherit", + "font-size": "18px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "121adef6-d684-4db3-b430-432f81d7a0b8" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Buy Now

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #393E56", + "border-left": "1px solid #393E56", + "border-radius": "0px", + "border-right": "1px solid #393E56", + "border-top": "1px solid #393E56", + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 110 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "c056ad54-7c71-45cc-a983-e2c58b403ca9" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "6f06aef5-eb27-4c3d-aa7d-1c34c96d28f7" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "three-columns-empty", + "uuid": "73c2e8c8-910a-46e8-8ca8-cceaff105594" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "2px solid #FBFAFA", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "13b84d87-5625-4ac9-9b03-78c0e447dbdf" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "18px", + "font-weight": "normal", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#E01253", + "text-align": "center" + }, + "text": "Latest Social Posts", + "title": "h2" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "5821b8c6-3b07-4506-8e15-51cce965d4f3" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "6b084dcb-3bac-4005-90ff-cc72f5b5b50f" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "6d1e93fe-1fd2-4f6d-8e66-7671c136047c" + }, + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "187px" + }, + "image": { + "alt": "social post", + "height": "188px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/image_52.jpg", + "target": "_self", + "width": "187px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "20px", + "padding-right": "0px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "0183f02b-3e90-430b-b38c-dc47b7614b06" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "9597834f-8cc1-4d23-8f70-efb3520ee47c" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "187px" + }, + "image": { + "alt": "social post", + "height": "188px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/image_55.jpg", + "target": "_self", + "width": "187px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "2dec299d-5ed3-459e-9a0b-410905bf39c3" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "4ed2dd29-0b4c-4815-8a94-6657e388c5d8" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "187px" + }, + "image": { + "alt": "social post", + "height": "188px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/image_56.jpg", + "target": "_self", + "width": "187px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "20px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "05e3521c-f375-462b-acac-fd483889d023" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "8e231d4a-a79e-4e03-a28a-7b7eeeec1651" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": false, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "three-columns-empty", + "uuid": "fa26f5fa-79af-4615-98de-024964d6a7a9" + }, + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "187px" + }, + "image": { + "alt": "social post", + "height": "188px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/image_58.jpg", + "target": "_self", + "width": "187px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "20px", + "padding-right": "0px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "9d22fa2a-b91b-49d4-8619-f0c0d23bd7c3" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "ff5f6415-c5d1-4fcf-9856-7b6241e64db4" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "187px" + }, + "image": { + "alt": "social post", + "height": "188px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/image_51.jpg", + "target": "_self", + "width": "187px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "61c60dad-1c25-4066-a96c-cc5bab7d0462" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "ec877811-9337-48ec-8b9d-f88d1e010d37" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "187px" + }, + "image": { + "alt": "social post", + "height": "188px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/image_53.jpg", + "target": "_self", + "width": "187px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "20px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "b030e8af-23c4-4c8f-aa19-88ce2a9277d6" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "22217d66-1c61-426d-8703-0499c42ba41c" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": false, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "three-columns-empty", + "uuid": "b85040fa-b390-456c-bb3b-c05cbe520949" + }, + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "187px" + }, + "image": { + "alt": "social post", + "height": "188px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/image_54_1.jpg", + "target": "_self", + "width": "187px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "20px", + "padding-right": "0px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "924a4d05-55a3-4755-a081-cc0633b73ba2" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "64c20f51-3833-46d2-ba42-5d59afc339cb" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "187px" + }, + "image": { + "alt": "social post", + "height": "188px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/image_59.jpg", + "target": "_self", + "width": "187px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "640917fd-413f-4526-833e-8a42b66660fa" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "07f35ad8-bdee-4f96-b9b5-2f333036b324" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "187px" + }, + "image": { + "alt": "social post", + "height": "188px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4566/image_57.jpg", + "target": "_self", + "width": "187px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "20px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "a282f5b8-86a7-447b-9391-4c48f8ce40e0" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "56dd4a1e-386c-4fb9-83b9-52ded8dd0eac" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": false, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "three-columns-empty", + "uuid": "e9f6c1f0-a449-4e3b-96e1-2d09410cde6f" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#393e56", + "direction": "ltr", + "font-family": "inherit", + "font-size": "18px", + "font-weight": "normal", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#E01253", + "text-align": "center" + }, + "text": "Follow Us", + "title": "h2" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "ef0966b7-5920-428e-a531-b877ad0c94de" + }, + { + "descriptor": { + "computedStyle": { + "height": 57, + "hideContentOnMobile": false, + "iconsDefaultWidth": 32, + "padding": "0 7.5px 0 7.5px", + "width": 151 + }, + "iconsList": { + "icons": [ + { + "image": { + "alt": "Facebook", + "href": "https://www.facebook.com", + "prefix": "https://www.facebook.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/circle-gray/facebook@2x.png", + "target": "_self", + "title": "facebook" + }, + "name": "facebook", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Twitter", + "href": "https://www.twitter.com", + "prefix": "https://www.twitter.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/circle-gray/twitter@2x.png", + "target": "_self", + "title": "twitter" + }, + "name": "twitter", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Linkedin", + "href": "https://www.linkedin.com", + "prefix": "https://www.linkedin.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/circle-gray/linkedin@2x.png", + "target": "_self", + "title": "linkedin" + }, + "name": "linkedin", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Instagram", + "href": "https://www.instagram.com", + "prefix": "https://www.instagram.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/circle-gray/instagram@2x.png", + "target": "_self", + "title": "instagram" + }, + "name": "instagram", + "text": "", + "type": "follow" + } + ] + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-social", + "uuid": "1cde8b66-c307-494b-be7f-836ecc9354ce" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "94975c90-632a-448d-9753-1593c24f5c15" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "f977d3cb-355e-4946-a815-8c0360027473" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "4458debf-5251-4626-943c-29b4003ff7ed" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "16px", + "font-weight": "normal", + "letter-spacing": "1px", + "line-height": "120%", + "link-color": "#E01253", + "text-align": "center" + }, + "text": "MORE TO DISCOVER", + "title": "h3" + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "5px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "0294f055-6926-4353-b72c-751f05aee620" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "30px", + "font-weight": "normal", + "letter-spacing": "1px", + "line-height": "120%", + "link-color": "#E01253", + "text-align": "center" + }, + "text": "UP TO 30% OFF SALE STYLES", + "title": "h3" + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "5px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "a0e80229-922d-4d16-a3e4-c65d93dd64b1" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "20px" + }, + "uuid": "0cba600d-6204-403c-8f14-f07c865008d1" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#cf9d88", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "ae49a5ad-db82-4680-bc2f-cf1bc2a40fba" + }, + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Girls

", + "style": { + "background-color": "transparent", + "border-bottom": "2px solid #FFFFFF", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 36 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "eff05e9c-8e9c-4d01-9686-06c864bf154f" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "be8c6fb7-722c-4bbf-959e-b5ea2f19ad39" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Boys

", + "style": { + "background-color": "transparent", + "border-bottom": "2px solid #FFFFFF", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 39 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "0cbd2fbf-c2bc-4d1e-8d49-377c5c30c141" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "d7ac245f-b968-4b62-9c6d-45c789ecccdc" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

Babies

", + "style": { + "background-color": "transparent", + "border-bottom": "2px solid #FFFFFF", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 52 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "09723bc8-24e4-4400-9f48-def195985e95" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "7e2bbad2-09a0-4ad9-a8b8-ce6bcea60d3b" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": false, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#cf9d88", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "three-columns-empty", + "uuid": "6d83566b-0230-4e68-825b-784a7dbb9c8b" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "html": { + "html": "
 
" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-html", + "uuid": "7498631f-982a-4f70-a5da-77348e427564" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "text": { + "computedStyle": { + "linkColor": "#cf9d88" + }, + "html": "

Copyright © 2021, Company Name, All rights reserved. 

 

Changed your mind? You can no-content at any time.

", + "style": { + "color": "#896156", + "font-family": "inherit", + "line-height": "120%" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-text", + "uuid": "4f28a08d-8008-4b7c-9c7c-84c8f17b3db5" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "html": { + "html": "
 
" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-html", + "uuid": "b2f0dba0-b118-4b76-a4b1-d82d8a2b834d" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "550dab6a-0da1-42b6-b893-5921104d80c2" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "linkColor": "#000000", + "messageBackgroundColor": "#000000", + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "d0162470-2d1e-4a3e-97e4-d38e32ccb7f6" + } + ], + "template": { + "name": "template-base", + "type": "basic", + "version": "2.0.0" + }, + "title": "" + } + } +} \ No newline at end of file diff --git a/public/templates/our-monthly-impact-email.json b/public/templates/our-monthly-impact-email.json new file mode 100644 index 0000000..d15bde8 --- /dev/null +++ b/public/templates/our-monthly-impact-email.json @@ -0,0 +1,3150 @@ +{ + "id": "our-monthly-impact-email", + "name": "Our Monthly Impact Event: Email", + "display_name": "Our Monthly Impact Event: Email", + "title": "Our Monthly Impact Event: Email", + "designer": { + "avatar_url": "https://d1oco4z2z1fhwp.cloudfront.net/designers/alicia.png", + "description": "I’m Alicia, a designer based in Manila, specializing in email design for DTC brands. My approach blends function with creativity, so every design feels intentional, engaging, and true to the brand. Building a brand is like finding the right puzzle pieces—it takes strategy, storytelling, and the right people who really get what you’re trying to do.", + "short_description": "", + "display_name": "Alicia Zamudio", + "id": "alicia-zamudio" + }, + "tags": [], + "thumbnail": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546.jpg", + "json_data": { + "page": { + "body": { + "container": { + "style": { + "background-color": "#052f25" + } + }, + "content": { + "computedStyle": { + "linkColor": "#7747FF", + "messageBackgroundColor": "#ffffff", + "messageWidth": "700px" + }, + "style": { + "color": "#000000", + "font-family": "Inter, Arial" + } + }, + "type": "mailup-bee-page-properties", + "webFonts": [ + { + "fontFamily": "'Roboto', Tahoma, Verdana, Segoe, sans-serif", + "name": "Roboto", + "url": "https://fonts.googleapis.com/css2?family=Roboto:wght@100;200;300;400;500;600;700;800;900" + }, + { + "fontFamily": "'Inter','Arial'", + "name": "Inter", + "url": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" + } + ] + }, + "description": "", + "head": { + "meta": { + "lang": "en" + } + }, + "rows": [ + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#322e2d", + "paragraphSpacing": "16px" + }, + "html": "

Few slots remaining. Register Now!

", + "style": { + "color": "#322e2d", + "direction": "ltr", + "font-family": "'Roboto', Tahoma, Verdana, Segoe, sans-serif", + "font-size": "17px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "e750a29a-f4d3-4376-9b70-53e58cae3d6d" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "eaaf2339-744e-4396-bcbe-fef46ad98702" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#f2e970", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "ac3fe9d4-d92f-4108-bb2c-bd9eac81718e" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "113.000px" + }, + "image": { + "alt": "Your Logo Placeholder", + "height": "48px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_Logo.png", + "target": "_blank", + "width": "113px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "1a290170-fef9-4e90-bd77-a783c715a3bc" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "20px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "61ce0cc0-e7db-49b1-a56b-4345c2332dae" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "10px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#fffeec", + "paragraphSpacing": "16px" + }, + "html": "

Together, We Give. Together, We Grow.

", + "style": { + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "3d9d4f57-958b-488c-ab6b-6abd6f224c95" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth fullwidthOnMobile", + "hideContentOnMobile": false, + "width": "525.000px" + }, + "image": { + "alt": "Hero Text", + "height": "255px", + "href": "", + "percWidth": 75, + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_Heading1.png", + "target": "_blank", + "width": "625px" + }, + "mobileStyle": { + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "5px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "5px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "41717f7a-a954-4d5b-a68f-c5f2a30d4ed0" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "mobileStyle": { + "height": "250px" + }, + "spacer": { + "style": { + "height": "300px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "adc0c3ba-7dd4-4683-b2be-ddae9fd7b9f8" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

Save Your Spot

", + "style": { + "background-color": "#f2e970", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "4px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#303030", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 50, + "hideContentOnMobile": false, + "width": 185 + }, + "hoverStyle": { + "background-color": "#094b3c", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#fffeec" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "d125ee77-7d51-4981-bde6-624b16ae14e4" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "56119ad2-574d-4122-8dd1-c1152b5f4879" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "30px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "15px" + }, + "style": { + "background-color": "#052f25", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/NonProfit_Hero.png')", + "background-position": "top left", + "background-repeat": "no-repeat", + "background-size": "cover", + "border-radius": "0px", + "color": "#000000", + "padding-bottom": "60px", + "padding-top": "20px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "0922fb70-f97e-4ae8-bcfe-0be9fd09a0d5" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "700.000px" + }, + "image": { + "alt": "Give, Share, Learn Banner", + "height": "82px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/NonProfit_Banner.png", + "target": "_blank", + "width": "1400px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "8da3553f-628f-4d35-90c5-4df64d4699e7" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "c2f25eca-0b34-479c-90b5-ab252f600670" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "b87f2a2c-792f-4c15-8e0f-830f30aae75c" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#0c4f3d", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "32px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#0c4f3d", + "text-align": "center" + }, + "text": "This Giving Tuesday, we’re coming together to share, learn, and give in ways that make a lasting difference.", + "title": "h3" + }, + "mobileStyle": { + "font-size": "26px", + "padding-bottom": "10px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "8e5db9cf-a2f7-410e-8d90-2f15a65a8789" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnMobile": false + }, + "mobileStyle": { + "height": "20px" + }, + "spacer": { + "style": { + "height": "55px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "601a7774-774c-4e34-8de1-b94f8047de04" + }, + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "606.000px" + }, + "image": { + "alt": "Lifestyle Image", + "height": "440px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_Hero1.png", + "target": "_blank", + "width": "606px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "e99239a8-99fb-4b3c-ad75-1c9e763ec0a5" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "d48928b7-d48c-4d6b-8566-f1ebb886cc2b" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "30px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "30px" + }, + "style": { + "background-color": "#fffeec", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_EventsBG.png')", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "60px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "c9a867a2-09cd-42c4-a0a9-2f5fe59d9d03" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#4f4d41", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "48px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#4f4d41", + "text-align": "left" + }, + "text": "This Month’s Sessions", + "title": "h1" + }, + "mobileStyle": { + "font-size": "40px", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "acc747ab-4672-4e7c-8a42-598a864056f7" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "59317308-179e-4afd-9c12-504c1de71cf3" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "25px" + }, + "style": { + "background-color": "#fffeec", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "50px", + "padding-right": "50px", + "padding-top": "25px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "41b0b82e-3b38-41db-865a-7de8f5c79c12" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "267.500px" + }, + "image": { + "alt": "Event Image", + "height": "317px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_sessionhero1.png", + "target": "_blank", + "width": "290px" + }, + "style": { + "border-radius": "15px", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "4464ae2e-cd4f-43a0-9dce-ca8d1f28d680" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#4f4d41", + "paragraphSpacing": "16px" + }, + "html": "

5.0 (289)

", + "style": { + "color": "#4f4d41", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "60px", + "padding-top": "20px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "c270f00e-55fd-4492-b6d5-66d46981ba6d" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#4f4d41", + "paragraphSpacing": "16px" + }, + "html": "

Mentorship That Transforms Lives

", + "style": { + "color": "#4f4d41", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "20px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "5px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "6f87be75-9924-4252-9beb-689e93651149" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

Join Session

", + "style": { + "background-color": "#094b3c", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-radius": "4px", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 52, + "hideContentOnMobile": false, + "width": 163 + }, + "hoverStyle": { + "background-color": "#f2e970", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#094b3c" + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "ee0c95b5-407b-4748-aee4-439281b02914" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px" + }, + "uuid": "2439de96-9d05-4ad5-b9a7-b81113acfaf2" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "267.500px" + }, + "image": { + "alt": "Event Image", + "height": "317px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_sessionhero2.png", + "target": "_blank", + "width": "290px" + }, + "style": { + "border-radius": "15px", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "6d63cd40-5921-4161-a3ea-3f3d4645c080" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#4f4d41", + "paragraphSpacing": "16px" + }, + "html": "

5.0 (289)

", + "style": { + "color": "#4f4d41", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "60px", + "padding-top": "20px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "3d06ceb2-a734-437b-8358-0268f1d6616e" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#4f4d41", + "paragraphSpacing": "16px" + }, + "html": "

Education as Empowerment

", + "style": { + "color": "#4f4d41", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "20px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "5px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "bd532126-3387-43c7-a3e0-8360bb558e29" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

Join Session

", + "style": { + "background-color": "#094b3c", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-radius": "4px", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 52, + "hideContentOnMobile": false, + "width": 163 + }, + "hoverStyle": { + "background-color": "#f2e970", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#094b3c" + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "21b3eca6-8a80-47cc-9df3-e4eab62bbb91" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px" + }, + "uuid": "cf088777-71d4-4bab-88fa-58a0d2c539c1" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "columnsSpacing": "35px", + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "25px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px" + }, + "style": { + "background-color": "#fffeec", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "15px", + "padding-left": "45px", + "padding-right": "45px", + "padding-top": "15px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "166e4cf9-00f6-4780-9acf-ff6ebdca440f" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "267.500px" + }, + "image": { + "alt": "Event Image", + "height": "317px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_sessionhero3.png", + "target": "_blank", + "width": "290px" + }, + "style": { + "border-radius": "15px", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "9f810035-6161-45c0-a150-07ccd6a1d852" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#4f4d41", + "paragraphSpacing": "16px" + }, + "html": "

5.0 (289)

", + "style": { + "color": "#4f4d41", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "60px", + "padding-top": "20px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "ef35ee1f-8a88-45f9-a566-48604018c75f" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#4f4d41", + "paragraphSpacing": "16px" + }, + "html": "

Inspiring Curiosity in the Community

", + "style": { + "color": "#4f4d41", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "20px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "5px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "bac3ea30-ec1e-4c93-afa5-107e46aadeeb" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

Join Session

", + "style": { + "background-color": "#094b3c", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-radius": "4px", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 52, + "hideContentOnMobile": false, + "width": 163 + }, + "hoverStyle": { + "background-color": "#f2e970", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#094b3c" + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "e175c7ad-636b-4e15-b0ff-aded83314fdb" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px" + }, + "uuid": "cbebda51-1fe2-4a1a-9a05-eff684b94508" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "267.500px" + }, + "image": { + "alt": "Event Image", + "height": "317px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_sessionhero4.png", + "target": "_blank", + "width": "290px" + }, + "style": { + "border-radius": "15px", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "fc1f27a4-b7b5-4f41-be22-81a7ca146279" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#4f4d41", + "paragraphSpacing": "16px" + }, + "html": "

5.0 (289)

", + "style": { + "color": "#4f4d41", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "60px", + "padding-top": "20px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "2cff0fbf-5393-4d70-8792-b159b4437b60" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#4f4d41", + "paragraphSpacing": "16px" + }, + "html": "

Creating Spaces That Welcome Everyone

", + "style": { + "color": "#4f4d41", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "20px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "5px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "8d322122-c4de-4ce6-9fd3-01ed1ceb5e37" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

Join Session

", + "style": { + "background-color": "#094b3c", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-radius": "4px", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 52, + "hideContentOnMobile": false, + "width": 163 + }, + "hoverStyle": { + "background-color": "#f2e970", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#094b3c" + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "6ca83075-dd97-41e4-9522-a06e5091e484" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px" + }, + "uuid": "b7cd58b3-a7cc-4fbc-9b10-61437d284dfa" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "columnsSpacing": "35px", + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "35px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "0px" + }, + "style": { + "background-color": "#fffeec", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "45px", + "padding-left": "45px", + "padding-right": "45px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "41f74926-f408-4592-8b9d-161c8b9d91cd" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "15px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "15px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#303030", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "32px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#303030", + "text-align": "center" + }, + "text": "Don’t miss your chance to be part of a day rooted in generosity, learning, and shared purpose.", + "title": "h3" + }, + "mobileStyle": { + "font-size": "26px", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "40px", + "padding-right": "40px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "ebd5c2b9-663e-42bf-b812-5463eaedb972" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

RSVP Now

", + "style": { + "background-color": "#094b3c", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-radius": "4px", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 52, + "hideContentOnMobile": false, + "width": 143 + }, + "hoverStyle": { + "background-color": "#f2e970", + "border-bottom": "1px solid #094b3c", + "border-left": "1px solid #094b3c", + "border-right": "1px solid #094b3c", + "border-top": "1px solid #094b3c", + "color": "#094b3c" + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "15px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "159048a3-76ce-49ab-becc-31a4e1eb7217" + } + ], + "style": { + "background-color": "#fee354", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "40px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "40px" + }, + "uuid": "03028a82-9396-4464-b1df-05c6c6d479ba" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "columnsBorderRadius": "10px", + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "60px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "60px" + }, + "style": { + "background-color": "#ffffff", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_JoinBG.png')", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "60px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "75471def-60bf-487f-b70a-f7516a52b75b" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "15px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "15px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#fffeec", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "43px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#fffeec", + "text-align": "left" + }, + "text": "Upcoming Giving Tuesday Events", + "title": "h2" + }, + "mobileStyle": { + "font-size": "36px", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "0px", + "padding-top": "30px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "30px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "fa9426c5-a2ff-4006-ae74-937c43c304a0" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid #fffeec", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "30px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "0b3eaae9-076d-4a99-976b-18775719bc45" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#f2e970", + "paragraphSpacing": "16px" + }, + "html": "

NOV 22 

", + "style": { + "color": "#f2e970", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "324a78cb-5e25-47ae-acbc-060a415d2d9e" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#ffffff", + "paragraphSpacing": "16px" + }, + "html": "

Community Dinner & Story Exchange

", + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "20px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "1f0f7baa-df59-4b44-8c8e-8bf6489b81a9" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#ffffff", + "paragraphSpacing": "16px" + }, + "html": "

Zoom | 11 AM - 1 PM

", + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "0b312985-4fb7-464d-9af5-ed96258c39b5" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid #fffeec", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "3e47c954-cb4f-4d1e-ad38-135caed00bc6" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#f2e970", + "paragraphSpacing": "16px" + }, + "html": "

NOV 25

", + "style": { + "color": "#f2e970", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "00a6b58a-934d-4cb4-894d-4fd44a372f5d" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#ffffff", + "paragraphSpacing": "16px" + }, + "html": "

Mentorship Circle: Building Impact

", + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "20px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "2a499681-f0f4-4fe2-9bbf-bc0c0f121508" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#ffffff", + "paragraphSpacing": "16px" + }, + "html": "

Zoom | 4 - 5 PM

", + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "bd0ee262-fcf4-4b85-8673-67aaf3faa633" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid #fffeec", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "207db92c-eb35-4a92-a678-d8b31291ebaf" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#f2e970", + "paragraphSpacing": "16px" + }, + "html": "

NOV 28

", + "style": { + "color": "#f2e970", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "e602a986-2fc8-4c11-85fc-8cc366671ec9" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#ffffff", + "paragraphSpacing": "16px" + }, + "html": "

Small Actions, Big Change

", + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "20px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "21141b38-f8ef-4a1c-af8c-c5bcbd576ffe" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#ffffff", + "paragraphSpacing": "16px" + }, + "html": "

Zoom | 2 - 4 PM

", + "style": { + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a54cb9d2-884e-45f4-9d47-c2a6a248db0b" + } + ], + "style": { + "background-color": "#094b3c", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "35px", + "padding-left": "35px", + "padding-right": "35px", + "padding-top": "25px" + }, + "uuid": "0b22531e-1983-49d2-8b7f-e788deb6e2ef" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "columnsBorderRadius": "15px", + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "25px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "25px" + }, + "style": { + "background-color": "#fffeec", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "35px", + "padding-left": "35px", + "padding-right": "35px", + "padding-top": "35px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "08246245-3adc-497e-b8da-3d668a19d05e" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "15px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "15px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "85.000px" + }, + "image": { + "alt": "Quote", + "height": "69px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_quote.png", + "target": "_blank", + "width": "85px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "c315d8bc-0e92-4456-a9a9-8dd2c1fb0032" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "20px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "20px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#fffeec", + "paragraphSpacing": "16px" + }, + "html": "

I attended last year’s mentorship circle and left feeling inspired and connected. It reminded me that giving isn’t just about money—it’s about time, kindness, and showing up.”

", + "style": { + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "20px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "20px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "d8d66fe4-8917-43ee-b32b-46b192d344ee" + }, + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "93.000px" + }, + "image": { + "alt": "Testimonial Image", + "height": "93px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_Volunteerhero.png", + "target": "_blank", + "width": "93px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "fff4bf03-7edf-4e6c-98b8-f3471b38dc07" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#fffeec", + "paragraphSpacing": "16px" + }, + "html": "

Leah, Community Volunteer

", + "style": { + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "2350571f-e009-47cf-b966-81e95637b5a7" + } + ], + "style": { + "background-color": "#c15335", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "35px", + "padding-left": "35px", + "padding-right": "35px", + "padding-top": "35px" + }, + "uuid": "9dae03e4-58a3-449f-9ffd-dfa6e84e12ee" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "columnsBorderRadius": "10px", + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "30px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px" + }, + "style": { + "background-color": "#fffeec", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "30px", + "padding-left": "35px", + "padding-right": "35px", + "padding-top": "15px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "a1822682-5040-4c0f-a65d-fa1b03b36935" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "700.000px" + }, + "image": { + "alt": "Giving Tuesday Banner", + "height": "352px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/gt-image-template.png", + "target": "_blank", + "width": "1400px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "f1fb324e-646f-45cf-bf80-1097792fbe0c" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "2fd6d469-c764-44b5-ae67-73ca3c3c3010" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#fffeec", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "851a5767-5d38-4d19-b7b1-89f33db42add" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#fffeec", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "43px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#fffeec", + "text-align": "left" + }, + "text": "Save Your Spot Today", + "title": "h2" + }, + "mobileStyle": { + "font-size": "36px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "3cac6caf-b487-44f9-aa4a-8a1e009ea041" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#fffeec", + "paragraphSpacing": "16px" + }, + "html": "

Join us and be part of something bigger. Every seat, every story, every act of giving counts.

", + "style": { + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "60px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "800d7dbe-b02d-4e63-90a6-fa8a8570b680" + }, + { + "descriptor": { + "button": { + "href": "www.example.com", + "label": "

RSVP Now

", + "style": { + "background-color": "#fee354", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "4px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#303030", + "direction": "ltr", + "font-family": "inherit", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 50, + "hideContentOnMobile": false, + "width": 141 + }, + "hoverStyle": { + "background-color": "#094b3c", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#fffeec" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "f22357b5-06d2-4b41-915c-c2c99c00eac9" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "1px", + "width": "100%" + } + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "20px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "20px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "277ad3dc-d1bb-4ca4-8b29-25feb022e3c8" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "fed8e2c5-50a3-42b9-abbb-77ed8fde7865" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "20px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "20px" + }, + "style": { + "background-color": "#127f42", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "40px", + "padding-right": "60px", + "padding-top": "20px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "44c82512-8577-4d82-8567-5d9b25d10049" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "700.000px" + }, + "image": { + "alt": "Divider", + "height": "102px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Group_1000004859.png", + "target": "_blank", + "width": "1920px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "0d7763d9-17ae-4c72-85f1-4f1c9d40fdaa" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "afffe6bf-1595-413a-b75c-f99dffb3ebb6" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#239454", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "59f8eb6e-c6cd-420a-aaba-55ba0aa8357a" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "335.000px" + }, + "image": { + "alt": "Your Logo Placeholder", + "height": "142px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10546/Nonprofit_ClosingLogo.png", + "target": "_blank", + "width": "335px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "40px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "08c503eb-0f6d-4d47-8aca-6de539f4f1d6" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid #ffffff", + "width": "100%" + } + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "457488f1-30c1-4edf-8eaf-d420ce75bb67" + }, + { + "descriptor": { + "computedStyle": { + "height": 57, + "hideContentOnMobile": false, + "iconsDefaultWidth": 32, + "padding": "0 2.5px 0 2.5px", + "width": 151 + }, + "iconsList": { + "icons": [ + { + "id": "facebook", + "image": { + "alt": "Facebook", + "href": "https://www.facebook.com/", + "prefix": "facebook", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/facebook@2x.png", + "target": "_self", + "title": "facebook" + }, + "name": "facebook", + "text": "", + "type": "follow" + }, + { + "id": "twitter", + "image": { + "alt": "Twitter", + "href": "https://www.x.com/", + "prefix": "twitter", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/twitter@2x.png", + "target": "_self", + "title": "twitter" + }, + "name": "twitter", + "text": "", + "type": "follow" + }, + { + "id": "linkedin", + "image": { + "alt": "Linkedin", + "href": "https://www.linkedin.com/", + "prefix": "linkedin", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/linkedin@2x.png", + "target": "_self", + "title": "linkedin" + }, + "name": "linkedin", + "text": "", + "type": "follow" + }, + { + "id": "instagram", + "image": { + "alt": "Instagram", + "href": "https://www.instagram.com/", + "prefix": "instagram", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/instagram@2x.png", + "target": "_self", + "title": "instagram" + }, + "name": "instagram", + "text": "", + "type": "follow" + } + ] + }, + "style": { + "padding-bottom": "0px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-social", + "uuid": "171dab5d-5185-4394-9f7d-49c7cd6535c0" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid #ffffff", + "width": "100%" + } + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "15px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "d0b8c1e4-b4d1-41ce-931c-cc722f46649a" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "20px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "20px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#fffeec", + "paragraphSpacing": "16px" + }, + "html": "

1234 Spring Lane, Suite 100, Cityville, ST 56789

\n

Gather Project Copyright 2025

", + "style": { + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "18px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "100%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "ad852f58-b61f-4c40-8bad-e33e115b7873" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "20px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "20px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#fffeec", + "paragraphSpacing": "18px" + }, + "html": "

Manage Your Preference | Unsubscribe

", + "style": { + "color": "#fffeec", + "direction": "ltr", + "font-family": "inherit", + "font-size": "14px", + "font-weight": "400", + "letter-spacing": "0px", + "line-height": "100%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "15px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "5086824e-93c0-4636-b4a7-363f195d2291" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "1d4f080e-cfcc-41f6-a2fb-612d7968fe55" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "40px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "20px" + }, + "style": { + "background-color": "#094b3c", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "15px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "15px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "da919b66-4d1f-4ffd-b723-cf033e354eeb" + } + ], + "template": { + "name": "template-base", + "type": "basic", + "version": "2.0.0" + }, + "title": "" + }, + "comments": {} + } +} \ No newline at end of file diff --git a/public/templates/thanksgiving-travel.json b/public/templates/thanksgiving-travel.json new file mode 100644 index 0000000..0989577 --- /dev/null +++ b/public/templates/thanksgiving-travel.json @@ -0,0 +1,2955 @@ +{ + "id": "thanksgiving-travel", + "name": "Thanksgiving Travel", + "display_name": "Thanksgiving Travel", + "title": "Thanksgiving Travel", + "designer": { + "avatar_url": "https://d1oco4z2z1fhwp.cloudfront.net/designers/LuanaLiguori.png", + "description": "Hello, I'm Luana, a graphic and web designer with 8+ years of experience, specializing in email and landing page design. My approach is marked by precision, proactive problem-solving, and strong collaboration. I create visually impactful designs that align with marketing strategies, including social media graphics, blog covers, and presentations. I also offer custom design services tailored to clients' unique needs.", + "short_description": "", + "display_name": "Luana Liguori", + "id": "luana-liguori" + }, + "tags": [ + "Event", + "Fall", + "Thanksgiving", + "Travel", + "Yellow" + ], + "thumbnail": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856.jpg", + "json_data": { + "comments": {}, + "page": { + "body": { + "container": { + "style": { + "background-color": "#fff5eb" + } + }, + "content": { + "computedStyle": { + "linkColor": "#ff6c54", + "messageBackgroundColor": "#ffffff", + "messageWidth": "675px" + }, + "style": { + "color": "#000000", + "font-family": "Montserrat, Trebuchet MS, Lucida Grande, Lucida Sans Unicode, Lucida Sans, Tahoma, sans-serif" + } + }, + "type": "mailup-bee-page-properties", + "webFonts": [ + { + "fontFamily": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "name": "Montserrat", + "url": "https://fonts.googleapis.com/css?family=Montserrat" + } + ] + }, + "description": "", + "rows": [ + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "width": "675px" + }, + "image": { + "alt": "topheader", + "height": "170px", + "href": "www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/top-header.png", + "target": "_self", + "width": "1000px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "d7981ea6-8f32-432d-9f33-7fc9969c460e" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "e31215ce-2b27-4a40-b81e-c436f2100ccb" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "118.125px" + }, + "image": { + "alt": "your-ogo", + "height": "240px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/travel-logo.png", + "target": "_self", + "width": "320px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "20px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "98137ac0-03b5-4295-97e2-5ed0b30bd171" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "e892e94c-ea7c-4d45-a3de-b6e634bbf949" + }, + { + "descriptor": { + "computedStyle": { + "hamburger": { + "backgroundColor": "#e27c3a", + "foregroundColor": "#ffffff", + "iconSize": "36px", + "iconType": "rounded", + "mobile": true + }, + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "layout": "horizontal", + "linkColor": "#1a1a1a", + "menuItemsSpacing": { + "padding-bottom": "10px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "10px" + } + }, + "menuItemsList": { + "items": [ + { + "link": { + "href": "http://www.example.com", + "target": "_self", + "title": "" + }, + "text": "CONTACT" + }, + { + "link": { + "href": "http://www.example.com", + "target": "_self", + "title": "" + }, + "text": "DESTINATIONS" + }, + { + "link": { + "href": "http://www.example.com", + "target": "_self", + "title": "" + }, + "text": "SAFE TRAVEL" + } + ] + }, + "style": { + "color": "#1a1a1a", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "13px", + "letter-spacing": "1px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-menu", + "uuid": "6c089660-1f8f-4fa2-92ab-348da235e4b5" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "0f37de69-b764-46ac-8e78-bad68bc35e21" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "9048435e-a943-4e03-b05d-82d1d83c3311" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "4d1033da-00a2-40b5-85b4-94ed9142cb3d" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#e27c3a", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "38px", + "font-weight": "normal", + "letter-spacing": "1px", + "line-height": "120%", + "link-color": "#e27c3a", + "text-align": "center" + }, + "text": "Thanksgiving", + "title": "h1" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "9a906b6f-c690-48b4-8d02-abf894ec51b0" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "5px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "5px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "8a03f4c5-61b1-4dea-9ced-ace30ef6c8bb" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#1a1a1a", + "direction": "ltr", + "font-family": "'Montserrat', 'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif", + "font-size": "23px", + "font-weight": "normal", + "letter-spacing": "2px", + "line-height": "120%", + "link-color": "#1a1a1a", + "text-align": "center" + }, + "text": "- IS COMING -", + "title": "h1" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "7e09aec1-d54d-41af-af20-f29a63766cda" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "0f37de69-b764-46ac-8e78-bad68bc35e21" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "3480f719-f079-4630-906f-16f002e9fcb1" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "align": "left", + "descriptor": { + "computedStyle": { + "class": "center fullwidthOnMobile fixedwidth", + "width": "655px" + }, + "image": { + "alt": "Thanksgiving-image", + "height": "1440px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/top.png", + "target": "_self", + "width": "1920px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "4d25d1c2-409d-493a-a482-de560cd6146d" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "5px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "5px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "c3ac65af-e381-41c7-baa9-42070421afaf" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#e27c3a", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "27px", + "font-weight": "normal", + "letter-spacing": "1px", + "line-height": "120%", + "link-color": "#e27c3a", + "text-align": "center" + }, + "text": "For everything you are grateful for", + "title": "h1" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "7cd49680-08ed-4181-ae5f-d7883535921b" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Planning, preparing and hosting.

Thanksgiving will be different this year,

and we’ve got the plan to make it easier.

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "18px", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "73d4a796-5bc4-4c9a-a0f1-c33edf1c2ee0" + }, + { + "align": "left", + "descriptor": { + "button": { + "href": "http://www.example.com", + "label": "

DESTINATIONS

", + "style": { + "background-color": "#e27c3a", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "4px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "50px", + "padding-right": "45px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 42, + "hideContentOnMobile": false, + "width": 234 + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "15px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "30898da4-d1f7-46a2-99b0-15f54e9b00f6" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "class": "center fullwidthOnMobile fixedwidth", + "width": "135px" + }, + "image": { + "alt": "Flight-image", + "height": "208px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/FLIGHT.png", + "target": "_self", + "width": "484px" + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "5px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "9011b0d2-b658-4cdb-adf1-43b4bee79d45" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "5px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "3e1a7abe-5716-49b8-b9e3-1e297686ef80" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "67481b95-f7df-4521-b76c-c4c2480c03b5" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "869857c9-95a8-4d66-b3b3-9253b522a236" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "7f8344f2-9ff9-4ae0-bc55-73ff1fa6c508" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "0f37de69-b764-46ac-8e78-bad68bc35e21" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "a15030fb-2819-40e6-9840-7a32cfd60a9a" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#e27c3a", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "27px", + "font-weight": "normal", + "letter-spacing": "1px", + "line-height": "120%", + "link-color": "#e27c3a", + "text-align": "center" + }, + "text": "Get closer to your family
", + "title": "h1" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "a0539ac5-c928-4365-b6d2-65d8093a42cb" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Discover our destinations and get close

to your family for Thanksgiving.

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "18px", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "0933ae81-1eac-4717-917b-5561f78f0f12" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "5px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "6766fe0e-481a-4452-b989-11709e8345ae" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "00827dbf-32ad-4b43-bf99-76aef2029221" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "metadata": { + "category": 477754, + "dateCreated": "2020-05-05T15:39:32.900272Z", + "dateModified": "2020-05-05T15:39:35.215917Z", + "description": "Test Description", + "idParent": null, + "name": "opening text", + "slug": "opening-text", + "uuid": "fffc496d-46e8-4621-a0b0-458b3c030dfb" + }, + "synced": false, + "type": "row-1-columns-12", + "uuid": "5db4499e-da51-4ac0-a47c-9b7b2396040d" + }, + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth fullwidthOnMobile", + "width": "205px" + }, + "image": { + "alt": "ITALY", + "height": "944px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/roma.png", + "target": "_self", + "width": "700px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "26ec2bab-3e04-4c1a-a9de-91eddfb7d07e" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e27c3a" + }, + "html": "

Italy

", + "style": { + "color": "#e27c3a", + "font-family": "inherit", + "font-size": "20px", + "line-height": "200%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "5px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "2b72dee1-c049-4ed1-9b84-c884c93a3ff5" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor.

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "13px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "ca5d9bf1-346a-471a-b9c0-109b099f88c8" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "text": { + "computedStyle": { + "linkColor": "#ff6c54" + }, + "html": "

$320   3 days / 2 nights

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "line-height": "180%" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-text", + "uuid": "5b194b31-aa49-4e32-ab85-510b623f57a6" + }, + { + "align": "left", + "descriptor": { + "button": { + "href": "http://www.example.com", + "label": "

BOOK NOW

", + "style": { + "background-color": "#e27c3a", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "4px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "180%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 39, + "hideContentOnMobile": false, + "width": 170 + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "15px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "9b9e61cf-64ea-4d65-bf08-9fc1b3cde3fa" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "uuid": "c4c28323-0fa6-4371-a0c6-2d59dac28b38" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth fullwidthOnMobile", + "width": "205px" + }, + "image": { + "alt": "NEW-YORK", + "height": "944px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/newyork.png", + "target": "_self", + "width": "700px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "79be0e52-241d-40f0-a671-ced3b0909841" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e27c3a" + }, + "html": "

North America

", + "style": { + "color": "#e27c3a", + "font-family": "inherit", + "font-size": "20px", + "line-height": "200%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "5px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "4d5f00e8-a5a2-40df-ad84-c4eacce3d7b9" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor.

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "13px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "3546e977-69da-4c0b-8bbf-1e841249a1bd" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "text": { + "computedStyle": { + "linkColor": "#ff6c54" + }, + "html": "

$530   3 days / 2 nights

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "line-height": "180%" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-text", + "uuid": "657d21de-486c-4d9b-8b41-6154460026df" + }, + { + "align": "left", + "descriptor": { + "button": { + "href": "http://www.example.com", + "label": "

BOOK NOW

", + "style": { + "background-color": "#e27c3a", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "4px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "180%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 39, + "hideContentOnMobile": false, + "width": 170 + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "15px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "694a5d88-b180-4715-b406-c14b2fbdc262" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "uuid": "0af97a12-dce0-4efa-a6fe-51dae05896c5" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth fullwidthOnMobile", + "width": "205px" + }, + "image": { + "alt": "BARCELLONA", + "height": "944px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/spain.png", + "target": "_self", + "width": "700px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "35e298ea-19d0-43b7-8e0c-3bf44336810d" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e27c3a" + }, + "html": "

Spain

", + "style": { + "color": "#e27c3a", + "font-family": "inherit", + "font-size": "20px", + "line-height": "200%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "5px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "1d8e9438-b087-49a5-ae12-e758974127eb" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor.

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "13px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "5cea68b0-d032-4d86-a4fa-6d34b9f7ebad" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "text": { + "computedStyle": { + "linkColor": "#ff6c54" + }, + "html": "

$420   3 days / 2 nights

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "line-height": "180%" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-text", + "uuid": "d2177498-2937-4052-b842-9010cc958c19" + }, + { + "align": "left", + "descriptor": { + "button": { + "href": "http://www.example.com", + "label": "

BOOK NOW

", + "style": { + "background-color": "#e27c3a", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "4px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "180%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 39, + "hideContentOnMobile": false, + "width": 170 + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "15px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "017f415d-abf1-4587-9c6d-986f55d057f0" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "uuid": "c346a541-0a61-44b3-9e27-945d2f193ff5" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-3-columns-4-4-4", + "uuid": "7fd5cb93-365c-4646-b48f-2303abc4e946" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "08bbcaa5-afeb-46f3-9ce6-fa1faafdcff1" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "class": "center fullwidthOnMobile fixedwidth", + "width": "303.75px" + }, + "image": { + "alt": "Flight-image", + "height": "165px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/ARROW_1.png", + "target": "_self", + "width": "1084px" + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "5px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "aaaa71a7-ccab-42f0-a2a9-4e9444782ed0" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "9c947482-aec9-4271-98b6-30095e694243" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "ab60a113-603f-44e0-bae4-57d786d76fca" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "6e401251-dc77-441f-977c-854f50bbb3cb" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "left", + "hideContentOnDesktop": false, + "hideContentOnMobile": true + }, + "divider": { + "style": { + "border-top": "5px solid transparent", + "height": "0px", + "width": "15%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "ed40b41e-71d0-4257-a570-5c19283673cd" + }, + { + "descriptor": { + "computedStyle": { + "height": 42, + "width": 52 + }, + "heading": { + "style": { + "color": "#e27c3a", + "direction": "ltr", + "font-family": "Georgia, Times, 'Times New Roman', serif", + "font-size": "41px", + "font-weight": "normal", + "letter-spacing": "1px", + "line-height": "120%", + "link-color": "#e27c3a", + "text-align": "center" + }, + "text": "Safe travel
", + "title": "h1" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "8a753ae6-62d6-4615-9c09-331af92a2696" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "left", + "hideContentOnDesktop": false, + "hideContentOnMobile": true + }, + "divider": { + "style": { + "border-top": "5px solid transparent", + "height": "0px", + "width": "15%" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "15px", + "padding-right": "10px", + "padding-top": "5px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "bcb5facd-75eb-4c7c-b446-0c65c8533d81" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor incidunt ut labore et dolore magna aliqua.

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "18px", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "c0def6a3-64e0-4630-964a-1cfa31f75031" + }, + { + "align": "left", + "descriptor": { + "button": { + "href": "http://www.example.com", + "label": "

OUR DESTINATIONS

", + "style": { + "background-color": "#e27c3a", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "4px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#ffffff", + "direction": "ltr", + "font-family": "inherit", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "50px", + "padding-right": "45px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 42, + "hideContentOnMobile": false, + "width": 282 + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "15px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "e6dd9f79-d9cd-44fe-8647-852c21a5f78b" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "bbde3166-a188-4dc1-b561-4bfb20d16a7e" + }, + { + "grid-columns": 6, + "modules": [ + { + "align": "left", + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "337.5px" + }, + "image": { + "alt": "safetravel", + "height": "920px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/SAFETRAVEL.png", + "target": "_self", + "width": "1000px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "27dbd3fe-a461-4098-b0c7-46fc39e15bba" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "left", + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "5px solid transparent", + "height": "15px", + "width": "15%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "15px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "93fbeb7f-f24d-4e08-be3c-263b7288c44d" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "2229577c-7354-4ec7-a687-42da6426279e" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "linkColor": "#000000", + "messageBackgroundColor": "#000000", + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "metadata": { + "category": 477754, + "dateCreated": "2020-06-06T15:51:42.232412Z", + "dateModified": "2020-06-06T15:51:43.560149Z", + "description": "Test Description", + "idParent": null, + "name": "image text 2", + "slug": "image-text-2", + "uuid": "72fbf0fb-2974-41df-954c-1b6569cb0e2f" + }, + "synced": false, + "type": "row-2-columns-6-6", + "uuid": "c00efa14-d69e-4b5e-a407-2d5de15075a5" + }, + { + "columns": [ + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "133.25px" + }, + "image": { + "alt": "CHECKIN", + "height": "507px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/CHECKIN.png", + "target": "_self", + "width": "461px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "42468938-45c5-4170-815c-f90190da237d" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e27c3a" + }, + "html": "

Online check in

", + "style": { + "color": "#e27c3a", + "font-family": "inherit", + "font-size": "17px", + "line-height": "200%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "5px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "efe16b51-69af-489d-b020-9a97722b605e" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor.

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "13px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "62ed5d6b-f116-44f1-aa5c-aeaf41345978" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "uuid": "c4c28323-0fa6-4371-a0c6-2d59dac28b38" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "133.25px" + }, + "image": { + "alt": "CHECKIN", + "height": "507px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/TEMPERATURE.png", + "target": "_self", + "width": "461px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "e335a2fd-37b0-4cbd-b331-4aecddc633f9" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e27c3a" + }, + "html": "

Temperature check

", + "style": { + "color": "#e27c3a", + "font-family": "inherit", + "font-size": "17px", + "line-height": "200%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "5px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "a68e2482-85d4-4e40-8ee3-f348e652db34" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor.

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "13px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "363905db-bee9-4d79-a165-bd9a2087555a" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "uuid": "0af97a12-dce0-4efa-a6fe-51dae05896c5" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "133.25px" + }, + "image": { + "alt": "CHECKIN", + "height": "507px", + "href": "http://www.example.com", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/TEMPLATE.png", + "target": "_self", + "width": "461px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "b378c6cd-d7be-41c3-9c71-5ab17d039279" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e27c3a" + }, + "html": "

Use mask

", + "style": { + "color": "#e27c3a", + "font-family": "inherit", + "font-size": "17px", + "line-height": "200%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "5px", + "padding-left": "10px", + "padding-right": "5px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "0908158a-fec5-44bb-8425-d79a28a9e24d" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor.

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "13px", + "line-height": "180%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "df5b4e64-eef7-463e-8bee-17ecd7af403a" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "uuid": "c346a541-0a61-44b3-9e27-945d2f193ff5" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-3-columns-4-4-4", + "uuid": "3bdf435a-f77e-40d1-b3c8-7523757608da" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "2310319d-7743-47fd-b810-9fb2a9c970dc" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "ab60a113-603f-44e0-bae4-57d786d76fca" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "c801d72b-083d-4342-94a8-6125fae57da0" + }, + { + "columns": [ + { + "grid-columns": 5, + "modules": [ + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "35px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "e327ea92-7690-4788-a04d-d85c925c6fc5" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "112.5px" + }, + "image": { + "alt": "Your Logo", + "height": "240px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4856/travel-logo.png", + "target": "_self", + "width": "320px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "0d9aa51a-4bb7-48fa-9a5e-4d4bb60f6a6b" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "4567ca24-efe6-49b3-8458-d7cfa07a90a5" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "height": 57, + "hideContentOnMobile": false, + "iconsDefaultWidth": 32, + "padding": "0 5px 0 5px", + "width": 151 + }, + "iconsList": { + "icons": [ + { + "image": { + "alt": "Facebook", + "href": "https://www.facebook.com", + "prefix": "https://www.facebook.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-outline-circle-dark-gray/facebook@2x.png", + "target": "_self", + "title": "facebook" + }, + "name": "facebook", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Twitter", + "href": "https://www.twitter.com", + "prefix": "https://www.twitter.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-outline-circle-dark-gray/twitter@2x.png", + "target": "_self", + "title": "twitter" + }, + "name": "twitter", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Linkedin", + "href": "https://www.linkedin.com", + "prefix": "https://www.linkedin.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-outline-circle-dark-gray/linkedin@2x.png", + "target": "_self", + "title": "linkedin" + }, + "name": "linkedin", + "text": "", + "type": "follow" + }, + { + "image": { + "alt": "Instagram", + "href": "https://www.instagram.com", + "prefix": "https://www.instagram.com", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-outline-circle-dark-gray/instagram@2x.png", + "target": "_self", + "title": "instagram" + }, + "name": "instagram", + "text": "", + "type": "follow" + } + ] + }, + "style": { + "padding-bottom": "15px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-social", + "uuid": "979d9063-f73e-4bfe-b2d3-ea8488c326bb" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "69a877bb-d00c-4888-93eb-e3d3340329cb" + }, + { + "grid-columns": 3, + "modules": [ + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "35px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "50aa1694-b2e5-4e2a-8fe0-1a3b92bcd8f5" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "hamburger": { + "backgroundColor": "transparent", + "foregroundColor": "#62716a", + "iconSize": "36px", + "iconType": "normal", + "mobile": false + }, + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "layout": "vertical", + "linkColor": "#1a1a1a", + "menuItemsSpacing": { + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px" + }, + "separator": "" + }, + "menuItemsList": { + "items": [ + { + "link": { + "href": "www.example.com", + "target": "_self", + "title": "" + }, + "text": "DESTINATIONS" + }, + { + "link": { + "href": "www.example.com", + "target": "_self", + "title": "" + }, + "text": "CHECK IN" + }, + { + "link": { + "href": "www.example.com", + "target": "_self", + "title": "" + }, + "text": "SAFE TRAVEL" + }, + { + "link": { + "href": "www.example.com", + "target": "_self", + "title": "" + }, + "text": "CONTACTS" + }, + { + "link": { + "href": "www.example.com", + "target": "_self", + "title": "" + }, + "text": "FAQ" + } + ] + }, + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "12px", + "letter-spacing": "2px", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "20px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-menu", + "uuid": "ae01ba16-b5b2-4bbc-8d7e-b0e6ff1e7354" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "32a30f06-a418-4372-93bb-3638c7cd7265" + }, + { + "grid-columns": 4, + "modules": [ + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "35px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "07542491-71a6-4fe5-b2a5-8b9f3470b1f4" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Where to find us

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "25px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "cf182c18-9a0e-4e1a-85b0-77e36687e507" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Company address here
+1 123 123 123

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "12px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "25px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "0a99790f-bb77-4491-84de-ea80a22584c0" + }, + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "a747991e-f951-4ec4-877d-571d1351b340" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#1a1a1a" + }, + "html": "

Changed your mind? Unsubscribe

", + "style": { + "color": "#1a1a1a", + "font-family": "inherit", + "font-size": "12px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "15px", + "padding-left": "25px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "c7736ca3-826f-4a65-b8c3-128bfb317487" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "0afb8e7f-84dc-4632-a8d7-8ae357ef4368" + } + ], + "container": { + "style": { + "background-color": "#fff5eb", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#fff5eb", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "metadata": { + "category": 587505, + "dateCreated": "2021-09-16T17:30:21.141922Z", + "dateModified": "2021-09-16T17:30:24.315737Z", + "description": "", + "idParent": null, + "name": "footer", + "slug": "footer", + "uuid": "957cf987-37ec-40a9-b789-5f8001465b42" + }, + "synced": false, + "type": "three-columns-empty", + "uuid": "435b36fc-7db8-48bf-85b4-d97ef726eea0" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "align": "left", + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "0px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "e3e19209-e7af-40d5-a463-9aa742995266" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "d7c04414-f58c-4222-9db0-4fe9f27bbfa6" + } + ], + "container": { + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#ffffff", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "675px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "563bfa45-15c0-4b75-8eee-d42b35f2c34f" + } + ], + "template": { + "name": "template-base", + "type": "basic", + "version": "2.0.0" + }, + "title": "" + } + } +} \ No newline at end of file diff --git a/public/templates/the-ultimate-guide-to-a-stress-free-thanksgiving.json b/public/templates/the-ultimate-guide-to-a-stress-free-thanksgiving.json new file mode 100644 index 0000000..a7bcbc2 --- /dev/null +++ b/public/templates/the-ultimate-guide-to-a-stress-free-thanksgiving.json @@ -0,0 +1,2022 @@ +{ + "id": "the-ultimate-guide-to-a-stress-free-thanksgiving", + "name": "The ultimate guide to a stress-free Thanksgiving", + "display_name": "The ultimate guide to a stress-free Thanksgiving", + "title": "The ultimate guide to a stress-free Thanksgiving", + "designer": { + "avatar_url": "https://d1oco4z2z1fhwp.cloudfront.net/designers/yuliana-pandelieva.jpg", + "description": "Graphic designer with a keen interest in typography, layout and illustration. \r\nCurrently exploring & experimenting with all things UI :))", + "short_description": "", + "display_name": "Yuliana Pandelieva", + "id": "yuliana-pandelieva" + }, + "tags": [ + "Autumn", + "Clean", + "Fall", + "Food and beverage", + "Holiday", + "Minimalist design", + "Recipe", + "Thanksgiving" + ], + "thumbnail": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831.jpg", + "json_data": { + "page": { + "body": { + "container": { + "style": { + "background-color": "#FFFFFF" + } + }, + "content": { + "computedStyle": { + "linkColor": "#ffffff", + "messageBackgroundColor": "transparent", + "messageWidth": "640px" + }, + "style": { + "color": "#000000", + "font-family": "Lato, Tahoma, Verdana, Segoe, sans-serif" + } + }, + "type": "mailup-bee-page-properties", + "webFonts": [ + { + "fontFamily": "'Playfair Display', Georgia, serif", + "name": "Playfair Display", + "url": "https://fonts.googleapis.com/css?family=Playfair+Display" + }, + { + "fontFamily": "'Lato', Tahoma, Verdana, Segoe, sans-serif", + "name": "Lato", + "url": "https://fonts.googleapis.com/css?family=Lato" + } + ] + }, + "description": "", + "rows": [ + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "45px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "81a310f1-a1ff-402c-bbe4-dfbc454119f7" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "160px" + }, + "image": { + "alt": "Your Logo", + "height": "173px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_yourlogo_orange.png", + "target": "_self", + "width": "300px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "8c83e9a1-fa40-4881-a527-9fd7aa3d4fd5" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "45px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "680d5bf2-0d0a-4fbb-8770-05e21b5e6cde" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "c727243c-e0e0-44d7-8f05-2a60d5d615a2" + } + ], + "container": { + "style": { + "background-color": "#211b18", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_chalkboard_section_header.png')", + "background-position": "top center", + "background-repeat": "repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "ba20638c-2ef9-438f-acf5-ac11e7b7cad7" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "50px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "8e328064-b872-4216-9dc8-0ec22c12e4c9" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

The ultimate guide to a
stress-free Thanksgiving

", + "style": { + "color": "#393d47", + "font-family": "'Playfair Display',Georgia,serif", + "font-size": "42px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "6995c889-07d7-4c5e-be0c-915d86401ea2" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "40px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "9c26dd98-90f8-474a-b715-37ee8ba2dd75" + }, + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "640px" + }, + "image": { + "alt": "Thanksgiving Dinner Set", + "height": "642px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/0b9db87c-65fd-446f-9878-58665c23013c.png", + "target": "_self", + "width": "1920px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "1fd36fcd-3d23-47a7-b286-8891c55bd0e2" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "30px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "8f6f29f8-bf7b-4c84-ba59-88825eeff192" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed
diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam
erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation
ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
Duis autem vel eum iriure

", + "style": { + "color": "#393d47", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "71793c37-3ec8-4520-a248-6f5857445801" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "25px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "b2175db9-a0c8-4644-9726-30b81a93b0d6" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "c727243c-e0e0-44d7-8f05-2a60d5d615a2" + } + ], + "container": { + "style": { + "background-color": "#211b18", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/TP_chalkboard_text.png')", + "background-position": "top center", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#dccc97", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "4fe7d1a7-8fde-4ac1-b00f-b88c4c0b890d" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

follow the recipe

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #3C2D27", + "border-left": "1px solid #3C2D27", + "border-radius": "1px", + "border-right": "1px solid #3C2D27", + "border-top": "1px solid #3C2D27", + "color": "#3c2d27", + "direction": "ltr", + "font-family": "'Playfair Display', Georgia, serif", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 161 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "b7511035-c1ba-4388-aa72-44865372cccf" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "43b5a7c1-d962-4314-8d7f-17de659f9f98" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

shop ingredients

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #3C2D27", + "border-left": "1px solid #3C2D27", + "border-radius": "1px", + "border-right": "1px solid #3C2D27", + "border-top": "1px solid #3C2D27", + "color": "#3c2d27", + "direction": "ltr", + "font-family": "'Playfair Display', Georgia, serif", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 162 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "ce564677-3b02-40ea-80de-3df79fbaa417" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "50px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "0a5d67ed-c43a-43b1-9192-d0171d64a2e3" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "5e677398-a922-418a-9548-165ab7b3984b" + } + ], + "container": { + "style": { + "background-color": "#211b18", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_chalboard_columns2.png')", + "background-position": "top center", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#dccc97", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-2-columns-6-6", + "uuid": "87cf4074-54ce-4dd3-9afa-a652632422ec" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "50px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "4f76d62c-5691-424d-9cd8-e88d65f957ca" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "224px" + }, + "image": { + "alt": "Raw Turkey", + "height": "320px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_turkey_section.png", + "target": "_self", + "width": "213px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "8319cc53-f9bd-4798-9cbf-2b64b48807f9" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "0px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "7f0c6936-3b08-4fbd-b9f0-aec707f733c5" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "0fea56f6-c66b-4dff-9cc2-6b2d21aeab56" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "65px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "163653f3-d6f3-4bfa-9b53-cb84c0c0f65d" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

For the turkey

", + "style": { + "color": "#dccc97", + "font-family": "'Playfair Display',Georgia,serif", + "font-size": "30px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "25c2c191-ebdb-47c9-800f-abd656afd96f" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
tincidunt ut laoreet dolore magna aliquam.

", + "style": { + "color": "#dccc97", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "4b8b6004-1fbe-4bd9-8399-becc3b2897b2" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

add to shopping list

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #DCCC97", + "border-left": "1px solid #DCCC97", + "border-radius": "1px", + "border-right": "1px solid #DCCC97", + "border-top": "1px solid #DCCC97", + "color": "#dccc97", + "direction": "ltr", + "font-family": "'Playfair Display', Georgia, serif", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 183 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "c6207a2f-8eda-49c3-9c75-f1f299a5851c" + }, + { + "descriptor": { + "computedStyle": { + "class": "right autowidth", + "hideContentOnMobile": false, + "width": "199px" + }, + "image": { + "alt": "Spices and extra ingredients", + "height": "138px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_flavour_1.png", + "target": "_self", + "width": "199px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "cbe7cef8-de3b-4578-9a03-a310ad549a21" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "17ab80c2-0367-4137-96d0-d89714f53aa9" + } + ], + "container": { + "style": { + "background-color": "#211b18", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_chalkboard_section1.png')", + "background-position": "top center", + "background-repeat": "repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-2-columns-6-6", + "uuid": "30205b19-e05c-4b16-bf72-5ad0231e2e2b" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "70px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "c1d1de94-f510-4fc4-a1c3-d8a231d0114f" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

For the potatoes

", + "style": { + "color": "#dccc97", + "font-family": "'Playfair Display',Georgia,serif", + "font-size": "30px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "bf6bba44-a8df-4968-b3c9-5f223d751d85" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
tincidunt ut laoreet dolore magna aliquam.

", + "style": { + "color": "#393d47", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "05a23c65-f4bc-440b-828e-1d005d1d849e" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

add to shopping list

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #DCCC97", + "border-left": "1px solid #DCCC97", + "border-radius": "1px", + "border-right": "1px solid #DCCC97", + "border-top": "1px solid #DCCC97", + "color": "#dccc97", + "direction": "ltr", + "font-family": "'Playfair Display', Georgia, serif", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 183 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "50820a6f-62c9-44df-9ec3-1b80fc5ff601" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "04527000-ded4-459f-b3e7-2a675abb11e3" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "60px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "f2d9a6a3-9b94-4d39-b1d4-49919cc372e0" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "320px" + }, + "image": { + "alt": "Potatoes", + "height": "251px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/TP_poratoes.png", + "target": "_self", + "width": "297px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "b158aa07-0f81-4f09-bbe6-c44316743514" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "65px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "aa32d7b3-dc59-423d-88cc-d57200d6fc3b" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "7a6436e1-1053-4116-a0a3-c2a9074ec831" + } + ], + "container": { + "style": { + "background-color": "#211b18", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_chalkboard_section2.png')", + "background-position": "top center", + "background-repeat": "repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-2-columns-6-6", + "uuid": "8d2bd9f2-68db-4997-8230-af1e8114f2cb" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "70px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "0109c552-3e56-4fd1-b7db-85dc9478d41b" + }, + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "272px" + }, + "image": { + "alt": "Veggies", + "height": "208px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/TP_veggies.png", + "target": "_self", + "width": "292px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "ad6806b6-257a-473b-9b27-c854d8ef6abe" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "04527000-ded4-459f-b3e7-2a675abb11e3" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "65px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "79ae2614-3138-4b24-b673-c8542733c196" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

For the veggies

", + "style": { + "color": "#dccc97", + "font-family": "'Playfair Display',Georgia,serif", + "font-size": "30px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "ff72ca3a-05a4-4db6-a404-ffa4b67e1179" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
tincidunt ut laoreet dolore magna aliquam.

", + "style": { + "color": "#393d47", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "2212fa26-5f0e-4ca7-8453-047d781975f1" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

add to shopping list

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #DCCC97", + "border-left": "1px solid #DCCC97", + "border-radius": "1px", + "border-right": "1px solid #DCCC97", + "border-top": "1px solid #DCCC97", + "color": "#dccc97", + "direction": "ltr", + "font-family": "'Playfair Display', Georgia, serif", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 183 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "138faadc-d451-4141-9f7d-e096c7843813" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "112px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "5ecc6f42-4d37-41c7-b50f-eb331f7202a5" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "7a6436e1-1053-4116-a0a3-c2a9074ec831" + } + ], + "container": { + "style": { + "background-color": "#211b18", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_chalkboard_section3.png')", + "background-position": "top center", + "background-repeat": "repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-2-columns-6-6", + "uuid": "be917468-5ff8-45a9-954d-b299ab3501b8" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "70px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "7a918710-7917-4fc9-a760-56a30446777e" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

For the sauce

", + "style": { + "color": "#dccc97", + "font-family": "'Playfair Display',Georgia,serif", + "font-size": "30px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "09868723-9bcc-4c24-8564-f389263a68dc" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
tincidunt ut laoreet dolore magna aliquam.

", + "style": { + "color": "#393d47", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "ee241362-086e-46ad-b612-5dc3b390b2fb" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com", + "label": "

add to shopping list

", + "style": { + "background-color": "transparent", + "border-bottom": "1px solid #DCCC97", + "border-left": "1px solid #DCCC97", + "border-radius": "1px", + "border-right": "1px solid #DCCC97", + "border-top": "1px solid #DCCC97", + "color": "#dccc97", + "direction": "ltr", + "font-family": "'Playfair Display', Georgia, serif", + "font-size": "16px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "20px", + "padding-right": "20px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_self" + }, + "computedStyle": { + "height": 44, + "hideContentOnMobile": false, + "width": 183 + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "b501d082-7dac-4fd3-8157-f530c33f621d" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "04527000-ded4-459f-b3e7-2a675abb11e3" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "70px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "2faee766-f4fd-4471-a15c-ddaa47a1b0e6" + }, + { + "descriptor": { + "computedStyle": { + "class": "left fixedwidth", + "width": "192px" + }, + "image": { + "alt": "Fresh Cranberries", + "height": "256px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_cranberries_section.png", + "target": "_self", + "width": "320px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "35px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "cc1e8607-332f-4e41-8eba-c80b06742756" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "140px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "7e658d09-7e00-4039-b5f2-8c6c2fa8a8aa" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "7a6436e1-1053-4116-a0a3-c2a9074ec831" + } + ], + "container": { + "style": { + "background-color": "#211b18", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_chalkboard_section4.png')", + "background-position": "top center", + "background-repeat": "repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-2-columns-6-6", + "uuid": "44cb4d24-d28e-4b1e-a49e-d81cd90cc4bc" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center fixedwidth", + "width": "160px" + }, + "image": { + "alt": "Your Logo", + "height": "173px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_yourlogo_orange.png", + "target": "_self", + "width": "300px" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "b947c620-cd9e-49ed-ab42-fea3d1af9295" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#8a3b8f" + }, + "html": "

Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
tincidunt ut laoreet dolore magna aliquam
erat volutpat. 

", + "style": { + "color": "#dccc97", + "font-family": "inherit", + "font-size": "14px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "23952297-7602-4807-8689-a3f58b99309b" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "10px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "d0c3e6e8-d142-4207-80b1-47c50ce1d083" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "iconHeight": "32px", + "iconSpacing": { + "padding-bottom": "5px", + "padding-left": "5px", + "padding-right": "5px", + "padding-top": "5px" + }, + "itemsSpacing": "0px" + }, + "iconsList": { + "icons": [ + { + "alt": "Facebook", + "height": "40px", + "href": "https://www.example.com", + "image": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/TP_sm_f.png", + "target": "_self", + "text": "", + "textPosition": "right", + "width": "40px" + }, + { + "alt": "Instagram", + "height": "40px", + "href": "https://www.example.com", + "image": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/TP_sm_ig.png", + "target": "_self", + "text": "", + "textPosition": "right", + "width": "40px" + }, + { + "alt": "Twitter", + "height": "40px", + "href": "https://www.example.com", + "image": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/TP_sm_twitter.png", + "target": "_self", + "text": "", + "textPosition": "right", + "width": "40px" + }, + { + "alt": "Youtube", + "height": "40px", + "href": "https://www.example.com", + "image": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/TP_sm_y.png", + "target": "_self", + "text": "", + "textPosition": "right", + "width": "40px" + } + ] + }, + "style": { + "color": "#000000", + "font-family": "inherit", + "font-size": "14px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-icons", + "uuid": "ba2b68bf-954c-4d93-86ba-a50c326a0231" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "20px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "04eb8fce-6d4d-476c-89f2-9736798f45ab" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#dccc97" + }, + "html": "

Terms and Conditions  |  Unsubscribe  |  FAQ

", + "style": { + "color": "#dccc97", + "font-family": "inherit", + "font-size": "12px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "c34a70e2-512a-4fcf-94c2-d4cdb7dd5e7e" + }, + { + "descriptor": { + "computedStyle": { + "align": "center", + "hideContentOnMobile": false + }, + "divider": { + "style": { + "border-top": "1px solid transparent", + "height": "50px", + "width": "100%" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-divider", + "uuid": "a4ba9dd8-4290-41ab-b2e7-6c2f888c4519" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "53fbd191-d911-477a-a40a-15562af5280a" + } + ], + "container": { + "style": { + "background-color": "#211b18", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/4831/tp_chalkboard_section_footer.png')", + "background-position": "top center", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "640px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "row-1-columns-12", + "uuid": "13b4749f-25a8-4f09-b8c7-aab3ba00f1ee" + } + ], + "template": { + "name": "template-base", + "type": "basic", + "version": "2.0.0" + }, + "title": "" + } + } +} \ No newline at end of file diff --git a/public/templates/volunteer-for-mentoring-program-email.json b/public/templates/volunteer-for-mentoring-program-email.json new file mode 100644 index 0000000..fe7950d --- /dev/null +++ b/public/templates/volunteer-for-mentoring-program-email.json @@ -0,0 +1,2661 @@ +{ + "id": "volunteer-for-mentoring-program-email", + "name": "Volunteer for Mentoring Program: Email", + "display_name": "Volunteer for Mentoring Program: Email", + "title": "Volunteer for Mentoring Program: Email", + "designer": { + "avatar_url": "https://d1oco4z2z1fhwp.cloudfront.net/designers/Screenshot_2022-08-16_at_1.10.20_PM.png", + "description": "Versatile graphic and web designer with 8+ years of experience in tech, e-commerce and fashion industries. Bookworm, novice coder, and always up for a challenge!", + "short_description": "", + "display_name": "Seanei Gibbons", + "id": "seanei-gibbons" + }, + "tags": [ + "Giving Tuesday", + "Mentoring", + "Nonprofit", + "Volunteer" + ], + "thumbnail": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536.jpg", + "json_data": { + "page": { + "body": { + "container": { + "style": { + "background-color": "#ffffff" + } + }, + "content": { + "computedStyle": { + "linkColor": "#0c3c36", + "messageBackgroundColor": "#faf9f6", + "messageWidth": "700px" + }, + "style": { + "color": "#000000", + "font-family": "Plus Jakarta Sans, Helvetica, Poppins" + } + }, + "type": "mailup-bee-page-properties", + "webFonts": [ + { + "fontFamily": "'Plus Jakarta Sans','Helvetica','Poppins'", + "name": "Plus Jakarta Sans", + "url": "https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&display=swap" + } + ] + }, + "description": "", + "head": { + "meta": { + "lang": "en" + } + }, + "rows": [ + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "169px" + }, + "image": { + "alt": "Charity Logo Placeholder", + "height": "48px", + "href": "https://www.example.com/", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/BrightPath_Logo.png", + "target": "_blank", + "width": "169px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "20px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "d834bc42-b4a1-4208-ac5f-4641c3120a30" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "56119ad2-574d-4122-8dd1-c1152b5f4879" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#0c3c36", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "0922fb70-f97e-4ae8-bcfe-0be9fd09a0d5" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "64px", + "font-weight": "700", + "letter-spacing": "-2px", + "line-height": "100%", + "link-color": "#0c3c36", + "text-align": "center" + }, + "text": "Small Actions.
Big Impact.
", + "title": "h1" + }, + "mobileStyle": { + "font-size": "32px", + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "14px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "4px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "6b9fe775-57a3-4856-962b-f20d1721ad27" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "font-size": "18px", + "padding-bottom": "6px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "6px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0c3c36", + "paragraphSpacing": "16px" + }, + "html": "

This Giving Tuesday, your support can help plant trees, restore habitats, and inspire the next generation to protect our planet.

", + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "20px", + "font-weight": "400", + "letter-spacing": "-1px", + "line-height": "120%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "bd106371-7b0b-49e9-8611-09a6521ec5f4" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com/", + "label": "

Join the Movement

", + "style": { + "background-color": "#427761", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "8px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#faf9f6", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "16px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "24px", + "padding-right": "24px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 42, + "hideContentOnMobile": false, + "width": 190 + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "e5fc93f5-61cc-4b10-bdf6-4373e0f5259c" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "0px" + }, + "uuid": "180a63cf-f488-44b5-aa28-3cf792eaaff0" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "22px", + "padding-left": "22px", + "padding-right": "22px", + "padding-top": "22px" + }, + "style": { + "background-color": "#faf9f6", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "60px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "acd0391d-74a2-4608-b5bb-d407e67de594" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "700px" + }, + "image": { + "alt": "a group of people hugging on a hill", + "height": "532px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/Hero_Image.png", + "target": "_blank", + "width": "700px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "a0b77506-eb89-4049-8a46-6983da472dc3" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "5e0be408-6871-45ae-9f94-c78d303c0353" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#faf9f6", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "68ebf739-7dde-484a-8d04-d1059fb6d6f4" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "24px", + "font-weight": "700", + "letter-spacing": "-1px", + "line-height": "120%", + "link-color": "#0c3c36", + "text-align": "center" + }, + "text": "Together, we’re making a difference.", + "title": "h3" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "9b6d14ca-bcd5-435d-ac70-723edeffaad2" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "66b38a53-765d-402b-9297-50708ff01259" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "40px", + "padding-right": "40px", + "padding-top": "32px" + }, + "style": { + "background-color": "#e4f0e8", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "52px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "4238c941-f845-41b9-8964-4ae63d3175ec" + }, + { + "columns": [ + { + "grid-columns": 6, + "mobileStyle": { + "padding-bottom": "24px", + "padding-left": "24px", + "padding-right": "24px", + "padding-top": "24px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "right autowidth", + "hideContentOnMobile": false, + "width": "86px" + }, + "image": { + "alt": "a star on a green background", + "height": "88px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/Icon_Star.png", + "target": "_blank", + "width": "86px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "fdb62899-f455-4f23-bd29-aa8d04139183" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#e4f0e8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "48px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#e4f0e8", + "text-align": "left" + }, + "text": "50+", + "title": "h2" + }, + "mobileStyle": { + "font-size": "40px" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "18px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "331db756-e70d-4830-bc82-fb8ce56af0c0" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "font-size": "16px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "5px", + "padding-top": "0px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e4f0e8", + "paragraphSpacing": "20px" + }, + "html": "

partnerships with local schools

", + "style": { + "color": "#e4f0e8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "45px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "4b34168a-a0a3-4ba0-92bd-445ab1284d12" + } + ], + "style": { + "background-color": "#2e7155", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "30px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "30px" + }, + "uuid": "9e54d67d-a0c5-4277-b21c-a1b9b3640a1b" + }, + { + "grid-columns": 6, + "mobileStyle": { + "padding-bottom": "24px", + "padding-left": "24px", + "padding-right": "24px", + "padding-top": "24px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "right autowidth", + "hideContentOnMobile": false, + "width": "96px" + }, + "image": { + "alt": "a heart on a green background", + "height": "88px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/Icon_Heart.png", + "target": "_blank", + "width": "96px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "30c70c3b-e9e0-4764-9a9e-d18f04371f17" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#e4f0e8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "48px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#e4f0e8", + "text-align": "left" + }, + "text": "300", + "title": "h2" + }, + "mobileStyle": { + "font-size": "40px" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "18px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "0d607cf7-c61b-445b-a2fd-08fd1d44e0ec" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "font-size": "16px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "5px", + "padding-top": "0px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e4f0e8", + "paragraphSpacing": "20px" + }, + "html": "

communities
reached

", + "style": { + "color": "#e4f0e8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "45px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "f5b7e6a4-7f88-49e6-bea4-173a3fbebb38" + } + ], + "style": { + "background-color": "#0c3c36", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "30px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "30px" + }, + "uuid": "3b6adc66-093f-4f6f-8d37-3ac80464bc2a" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "columnsBorderRadius": "16px", + "columnsSpacing": "20px", + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "32px", + "padding-right": "32px", + "padding-top": "32px" + }, + "style": { + "background-color": "#e4f0e8", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "10px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "36px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "484cb064-19e6-4f85-8d81-b5e6801b66bc" + }, + { + "columns": [ + { + "grid-columns": 6, + "mobileStyle": { + "padding-bottom": "24px", + "padding-left": "24px", + "padding-right": "24px", + "padding-top": "24px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "right autowidth", + "hideContentOnMobile": false, + "width": "88px" + }, + "image": { + "alt": "a rocket with a green background", + "height": "89px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/Icon_Rocket.png", + "target": "_blank", + "width": "88px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "c2645e89-afee-4921-a048-742b2aac876a" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#e4f0e8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "48px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#e4f0e8", + "text-align": "left" + }, + "text": "1,400", + "title": "h2" + }, + "mobileStyle": { + "font-size": "40px" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "18px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "d657de33-ba9d-422e-a8b0-260d69a0ca8c" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "font-size": "16px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "5px", + "padding-top": "0px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e4f0e8", + "paragraphSpacing": "20px" + }, + "html": "

volunteers in action

", + "style": { + "color": "#e4f0e8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "45px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "37a920e9-e4a8-42db-be5f-abfe8bb24555" + } + ], + "style": { + "background-color": "#0c3c36", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "30px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "30px" + }, + "uuid": "1de9bde8-7037-4317-9261-5eae0372ddff" + }, + { + "grid-columns": 6, + "mobileStyle": { + "padding-bottom": "24px", + "padding-left": "24px", + "padding-right": "24px", + "padding-top": "24px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "right autowidth", + "hideContentOnMobile": false, + "width": "95px" + }, + "image": { + "alt": "a globe with a green background", + "height": "88px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/Icon_Globe.png", + "target": "_blank", + "width": "95px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "525f3bc4-00fc-4528-9760-f0c0f63ad481" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#e4f0e8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "48px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#e4f0e8", + "text-align": "left" + }, + "text": "3.8", + "title": "h2" + }, + "mobileStyle": { + "font-size": "40px" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "18px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "ddc63256-4960-4924-bf05-9936ee6f6f1e" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "font-size": "16px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "5px", + "padding-top": "0px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e4f0e8", + "paragraphSpacing": "20px" + }, + "html": "

tons of waste collected

", + "style": { + "color": "#e4f0e8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "20px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "15px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "123288aa-5670-4c64-a0db-6b35cd3c17c2" + } + ], + "style": { + "background-color": "#2e7155", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "30px", + "padding-left": "30px", + "padding-right": "30px", + "padding-top": "30px" + }, + "uuid": "ede5c317-8a75-4f8e-a250-ac329e8fdf89" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "columnsBorderRadius": "16px", + "columnsSpacing": "20px", + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": true, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "32px", + "padding-left": "32px", + "padding-right": "32px", + "padding-top": "20px" + }, + "style": { + "background-color": "#e4f0e8", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "10px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "e9639916-9176-4b6b-a4f4-f46183fca391" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "spacer": { + "style": { + "height": "20px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "968e82a1-2285-423b-b1c7-c3875b9db037" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "639400b4-75c3-4c69-8461-0c48cc597ddb" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": true, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "style": { + "background-color": "#e4f0e8", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "35ac34be-7427-4958-ac24-dc51aecbb0ed" + }, + { + "columns": [ + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#dee4d8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "24px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#e4f0e8", + "text-align": "left" + }, + "text": "“I’ve learned more about community
than I ever expected.”", + "title": "h3" + }, + "mobileStyle": { + "font-size": "20px", + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + }, + "style": { + "padding-bottom": "10px", + "padding-left": "0px", + "padding-right": "10px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "584b9d06-b251-4792-a9a3-6fddd6766544" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#dee4d8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "20px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#e4f0e8", + "text-align": "left" + }, + "text": "Aisha", + "title": "h3" + }, + "mobileStyle": { + "font-size": "18px", + "text-align": "center" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "9a2a92b4-e310-4c2f-9049-1600930add2a" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "text-align": "center" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#e4f0e8", + "paragraphSpacing": "16px" + }, + "html": "

Volunteer & Mentor

", + "style": { + "color": "#e4f0e8", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "16px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "8px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "bfb98a60-e027-405c-a122-2ade3146564b" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "43fcc85e-8ef1-4f1d-9788-111726eea998" + }, + { + "grid-columns": 6, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "280px" + }, + "image": { + "alt": "a woman smiling at the camera", + "height": "267px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/Headshot.png", + "target": "_blank", + "width": "280px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "f4083b13-e85e-40bb-8d74-a694e754eb70" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "34157f58-68ed-4d0a-b79e-26322e937167" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "columnsSpacing": "32px", + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": true, + "verticalAlign": "bottom" + }, + "mobileStyle": { + "padding-bottom": "32px", + "padding-left": "32px", + "padding-right": "32px", + "padding-top": "32px" + }, + "style": { + "background-color": "#0c3c36", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/BG_with_Doodle.png')", + "background-position": "top left", + "background-repeat": "no-repeat", + "background-size": "auto", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "60px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-8-4-empty", + "uuid": "a5a974e4-5989-44ed-9139-c05bd108f853" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "24px", + "font-weight": "700", + "letter-spacing": "-1px", + "line-height": "120%", + "link-color": "#0c3c36", + "text-align": "center" + }, + "text": "Why should I volunteer?", + "title": "h3" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "c1e48ec9-23bf-479b-9dd3-817ef6aad275" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "3e9573bd-3933-4956-b44c-13e40ef54234" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "40px", + "padding-right": "40px", + "padding-top": "32px" + }, + "style": { + "background-color": "#faf9f6", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "0px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "52px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "34d792de-6637-486b-a251-a1e30b140dfb" + }, + { + "columns": [ + { + "grid-columns": 4, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "180px" + }, + "image": { + "alt": "a close-up of a hand and a hand", + "height": "221px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/Connection_Image.png", + "target": "_blank", + "width": "180px" + }, + "mobileStyle": { + "class": "center autowidth" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "29a15898-cb8f-43f2-8e2e-b0cfaadbf2cf" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "24px", + "font-weight": "600", + "letter-spacing": "-1px", + "line-height": "120%", + "link-color": "#0c3c36", + "text-align": "left" + }, + "text": "Connection", + "title": "h2" + }, + "mobileStyle": { + "font-size": "24px", + "text-align": "center" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "20px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "df4dfbd7-41e9-4ed6-9107-c40968988d17" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "font-size": "16px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0c3c36", + "paragraphSpacing": "20px" + }, + "html": "

Build meaningful relationships

", + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "16px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "1f04d087-f1de-4b7d-ae7b-aa19c14fb122" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "9e5aed3e-f2bc-4322-920f-6e1e7f19a2ff" + }, + { + "grid-columns": 4, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "180px" + }, + "image": { + "alt": "a woman wearing a head scarf holding a microphone", + "height": "221px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/Growth_Image.png", + "target": "_blank", + "width": "180px" + }, + "mobileStyle": { + "class": "center autowidth" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "4e673cbb-66f6-4b00-831c-e3063867917b" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "24px", + "font-weight": "600", + "letter-spacing": "-1px", + "line-height": "120%", + "link-color": "#0c3c36", + "text-align": "left" + }, + "text": "Growth", + "title": "h2" + }, + "mobileStyle": { + "font-size": "24px", + "text-align": "center" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "20px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "4d68dfd2-64c0-41b8-9190-a77bdef97cda" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "font-size": "16px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0c3c36", + "paragraphSpacing": "20px" + }, + "html": "

Gain leadership and listening skills

", + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "16px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "d4e03c5c-ee5b-41d3-a34f-d41d64060582" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "e73dc6ad-295e-44ac-90cf-255912b3b527" + }, + { + "grid-columns": 4, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "180px" + }, + "image": { + "alt": "a man and boy planting a plant", + "height": "221px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/Impact_Image.png", + "target": "_blank", + "width": "180px" + }, + "mobileStyle": { + "class": "center autowidth" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "22221305-b791-4400-98c4-ead5703ae326" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "24px", + "font-weight": "600", + "letter-spacing": "-1px", + "line-height": "120%", + "link-color": "#0c3c36", + "text-align": "left" + }, + "text": "Impact", + "title": "h2" + }, + "mobileStyle": { + "font-size": "24px", + "text-align": "center" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "20px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "c8c80d44-ab30-4930-826e-ad8c14078892" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "font-size": "16px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0c3c36", + "paragraphSpacing": "20px" + }, + "html": "

Shape someone’s future, and yours

", + "style": { + "color": "#0c3c36", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "16px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "120%", + "text-align": "left" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "5a25f1db-bf9c-4d6b-b333-b6e57042edee" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "51bd2668-fbbe-420a-9c04-59fad5d4d07c" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "columnsBorderRadius": "16px", + "columnsSpacing": "20px", + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "32px", + "padding-right": "32px", + "padding-top": "32px" + }, + "style": { + "background-color": "#faf9f6", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "30px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "36px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "171a28eb-b68b-4e80-9d78-e6c6ec4546e0" + }, + { + "columns": [ + { + "grid-columns": 12, + "mobileStyle": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "modules": [ + { + "descriptor": { + "button": { + "href": "https://www.example.com/", + "label": "

Join the Program

", + "percWidth": 100, + "style": { + "background-color": "#0c3c36", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "8px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#faf9f6", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "16px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "24px", + "padding-right": "24px", + "padding-top": "5px", + "width": "100%" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 42, + "hideContentOnMobile": false, + "width": 580 + }, + "mobileStyle": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px" + }, + "style": { + "padding-bottom": "12px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "6ac17ef1-a0da-4ecd-a0c1-c800427e9d96" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "603c2c9b-e2ff-49f6-ad71-7ae7133af14b" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "32px", + "padding-left": "32px", + "padding-right": "32px", + "padding-top": "20px" + }, + "style": { + "background-color": "#faf9f6", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "0px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "6acd5824-e320-40d7-ab56-3592ca28a44b" + }, + { + "columns": [ + { + "grid-columns": 7, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": true + }, + "spacer": { + "style": { + "height": "80px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "38ad9bd0-1910-4579-80e8-2fc1403110ec" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#faf9f6", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "48px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#faf9f6", + "text-align": "left" + }, + "text": "Ready to help us grow?", + "title": "h2" + }, + "mobileStyle": { + "font-size": "32px", + "padding-bottom": "8px", + "padding-left": "8px", + "padding-right": "8px", + "padding-top": "8px", + "text-align": "center" + }, + "style": { + "padding-bottom": "24px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "f9cf533b-02d1-4c5d-99b9-6c3930fd0305" + }, + { + "descriptor": { + "button": { + "href": "https://www.example.com/", + "label": "

Become a Volunteer

", + "style": { + "background-color": "#427761", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "8px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#faf9f6", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "16px", + "font-weight": "500", + "letter-spacing": "0px", + "line-height": "200%", + "max-width": "100%", + "padding-bottom": "5px", + "padding-left": "24px", + "padding-right": "24px", + "padding-top": "5px", + "width": "auto" + }, + "target": "_blank" + }, + "computedStyle": { + "height": 42, + "hideContentOnMobile": false, + "width": 202 + }, + "mobileStyle": { + "text-align": "center" + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "text-align": "left" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-button", + "uuid": "f10299a5-148e-4fdd-9fe8-c8623f2ce618" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "5b69ac1a-5495-4a57-bb11-b35778a32cd2" + }, + { + "grid-columns": 5, + "modules": [ + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": true + }, + "spacer": { + "style": { + "height": "60px" + } + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-spacer", + "uuid": "32d5b350-2ff2-49c5-abc7-48f19187e71e" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "5px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "5px" + }, + "uuid": "45d30cb0-e61b-4a95-9057-b393cf1114c8" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "32px", + "padding-left": "32px", + "padding-right": "32px", + "padding-top": "32px" + }, + "style": { + "background-color": "#427761", + "background-image": "url('https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/BG.png')", + "background-position": "top left", + "background-repeat": "no-repeat", + "background-size": "cover", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-radius": "0px", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "60px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "two-columns-empty", + "uuid": "d6173d1f-f66f-49d4-a344-a6f45e5a646b" + }, + { + "columns": [ + { + "grid-columns": 12, + "modules": [ + { + "descriptor": { + "computedStyle": { + "class": "center autowidth", + "hideContentOnMobile": false, + "width": "70px" + }, + "image": { + "alt": "a sun icon", + "height": "68px", + "href": "", + "prefix": "", + "src": "https://d1oco4z2z1fhwp.cloudfront.net/templates/default/10536/sunny.png", + "target": "_blank", + "width": "70px" + }, + "style": { + "border-radius": "0px", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-image", + "uuid": "96b80e92-3ea7-4f4b-b60a-51c9e2d7ad96" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false + }, + "heading": { + "style": { + "color": "#faf9f6", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "24px", + "font-weight": "700", + "letter-spacing": "0px", + "line-height": "120%", + "link-color": "#faf9f6", + "text-align": "center" + }, + "text": "Thank you", + "title": "h3" + }, + "style": { + "padding-bottom": "4px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "24px", + "text-align": "center", + "width": "100%" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-heading", + "uuid": "d0f8171e-5433-4ba7-a388-529b8813f0fd" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "mobileStyle": { + "padding-bottom": "14px", + "padding-left": "32px", + "padding-right": "32px", + "padding-top": "4px" + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0c3c36", + "paragraphSpacing": "16px" + }, + "html": "

for helping us grow a stronger community.

You’re making change, one seed at a time.

", + "style": { + "color": "#faf9f6", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "16px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "14px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "4px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "eccf79ea-6449-492e-ae14-2547d0f515a0" + }, + { + "descriptor": { + "computedStyle": { + "height": 57, + "hideContentOnMobile": false, + "iconsDefaultWidth": 32, + "padding": "0 2.5px 0 2.5px", + "width": 151 + }, + "iconsList": { + "icons": [ + { + "id": "facebook", + "image": { + "alt": "Facebook", + "href": "https://www.facebook.com/", + "prefix": "facebook", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/facebook@2x.png", + "target": "_self", + "title": "facebook" + }, + "name": "facebook", + "text": "", + "type": "follow" + }, + { + "id": "twitter", + "image": { + "alt": "Twitter", + "href": "https://www.x.com/", + "prefix": "twitter", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/twitter@2x.png", + "target": "_self", + "title": "twitter" + }, + "name": "twitter", + "text": "", + "type": "follow" + }, + { + "id": "linkedin", + "image": { + "alt": "Linkedin", + "href": "https://www.linkedin.com/", + "prefix": "linkedin", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/linkedin@2x.png", + "target": "_self", + "title": "linkedin" + }, + "name": "linkedin", + "text": "", + "type": "follow" + }, + { + "id": "instagram", + "image": { + "alt": "Instagram", + "href": "https://www.instagram.com/", + "prefix": "instagram", + "src": "https://app-rsrc.getbee.io/public/resources/social-networks-icon-sets/t-only-logo-white/instagram@2x.png", + "target": "_self", + "title": "instagram" + }, + "name": "instagram", + "text": "", + "type": "follow" + } + ] + }, + "style": { + "padding-bottom": "10px", + "padding-left": "10px", + "padding-right": "10px", + "padding-top": "10px", + "text-align": "center" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-social", + "uuid": "6bf962ad-c793-4581-b44b-dff66346a26d" + }, + { + "descriptor": { + "computedStyle": { + "hideContentOnAmp": false, + "hideContentOnDesktop": false, + "hideContentOnHtml": false, + "hideContentOnMobile": false + }, + "paragraph": { + "computedStyle": { + "linkColor": "#0c3c36", + "paragraphSpacing": "16px" + }, + "html": "

BrightPath Foundation

512 Hawthorne Blvd, Portland, OR 97214

© 2025 BrightPath Foundation. All rights reserved.

", + "style": { + "color": "#faf9f6", + "direction": "ltr", + "font-family": "'Plus Jakarta Sans','Helvetica','Poppins'", + "font-size": "14px", + "font-weight": "300", + "letter-spacing": "0px", + "line-height": "150%", + "text-align": "center" + } + }, + "style": { + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "14px" + } + }, + "locked": false, + "type": "mailup-bee-newsletter-modules-paragraph", + "uuid": "bc4223c4-9113-4da4-ad85-189bfeaae5b1" + } + ], + "style": { + "background-color": "transparent", + "border-bottom": "0px solid transparent", + "border-left": "0px solid transparent", + "border-right": "0px solid transparent", + "border-top": "0px solid transparent", + "padding-bottom": "0px", + "padding-left": "0px", + "padding-right": "0px", + "padding-top": "0px" + }, + "uuid": "66fa6092-6f4a-4b45-b729-3ff7fbd318f6" + } + ], + "container": { + "style": { + "background-color": "transparent", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat" + } + }, + "content": { + "computedStyle": { + "hideContentOnDesktop": false, + "hideContentOnMobile": false, + "rowColStackOnMobile": true, + "rowReverseColStackOnMobile": false, + "verticalAlign": "top" + }, + "mobileStyle": { + "padding-bottom": "32px", + "padding-left": "32px", + "padding-right": "32px", + "padding-top": "32px" + }, + "style": { + "background-color": "#0c3c36", + "background-image": "none", + "background-position": "top left", + "background-repeat": "no-repeat", + "color": "#000000", + "padding-bottom": "60px", + "padding-left": "60px", + "padding-right": "60px", + "padding-top": "60px", + "width": "700px" + } + }, + "empty": false, + "locked": false, + "synced": false, + "type": "one-column-empty", + "uuid": "6987830a-679a-4c99-b81d-b95ef4e17634" + } + ], + "template": { + "name": "template-base", + "type": "basic", + "version": "2.0.0" + }, + "title": "" + }, + "comments": {} + } +} \ No newline at end of file diff --git a/src/App.css b/src/App.css index d63ae41..5857d97 100644 --- a/src/App.css +++ b/src/App.css @@ -649,10 +649,14 @@ body { .config-actions { margin-bottom: 16px; flex-shrink: 0; + display: flex; + gap: 8px; + align-items: center; } .apply-button { - width: 100%; + flex: 1; + min-width: 0; padding: 12px; background-color: var(--beefree-purple); color: white; @@ -674,6 +678,30 @@ body { cursor: not-allowed; } +.reset-apply-button { + flex-shrink: 0; + padding: 12px 20px; + background-color: var(--text-secondary); + color: white; + border: none; + border-radius: 6px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: background-color 0.2s; + font-family: 'Inter', sans-serif; + white-space: nowrap; +} + +.reset-apply-button:hover:not(:disabled) { + background-color: var(--text-primary); +} + +.reset-apply-button:disabled { + opacity: 0.7; + cursor: not-allowed; +} + .config-info { padding: 16px; background-color: var(--bg-secondary); @@ -1533,28 +1561,4 @@ body { .dropdown-menu { min-width: 150px; } -} - -/* Dark Mode Support */ -@media (prefers-color-scheme: dark) { - :root { - --bg-primary: #1F2937; - --bg-secondary: #111827; - --bg-tertiary: #374151; - --border-color: #374151; - --border-dark: #4B5563; - --text-primary: #F9FAFB; - --text-secondary: #D1D5DB; - --text-tertiary: #9CA3AF; - } - - .btn-secondary { - background: var(--bg-tertiary); - color: var(--beefree-purple-light); - } - - .btn-sm { - background: var(--bg-tertiary); - color: var(--text-primary); - } -} +} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index fd46fb0..863435b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,8 +5,16 @@ import BeeConfigSidebar from './components/BeeConfigSidebar'; import ExportDropdown from './components/ExportDropdown'; import HtmlImportModal from './components/HtmlImportModal'; import ExportResultModal from './components/ExportResultModal'; -import { useState, useRef } from 'react'; +import { useState, useEffect } from 'react'; import type { TemplateData, BeefreeTemplateJson, BeefreeConfig } from './types'; +import type { WindowWithBeefreeFunctions } from './types/window'; +import { + loadTemplateHtml, + loadTemplatePlainText, + getTemplatePdfUrl, + getTemplateImageUrl, + loadTemplate +} from './services/localTemplates'; /** * Main Application Component @@ -22,7 +30,6 @@ import type { TemplateData, BeefreeTemplateJson, BeefreeConfig } from './types'; function App() { // Template state const [selectedTemplate, setSelectedTemplate] = useState(null); // Currently selected template from catalog - const [currentJson, setCurrentJson] = useState(null); // Current template JSON in the editor const [beeConfig, setBeeConfig] = useState(null); // Current Beefree SDK configuration // Export modal states @@ -37,9 +44,32 @@ function App() { // Import modal state const [isImportModalOpen, setIsImportModalOpen] = useState(false); // Controls HTML import modal visibility - - // Ref to store last generated HTML (used for PDF and Image exports which require HTML) - const lastHtmlRef = useRef(undefined); + + /** + * Auto-select the initial template on app load + */ + useEffect(() => { + const loadInitialTemplate = async () => { + try { + const initialTemplateId = 'beefree-sdk-demo-template'; + const templateData = await loadTemplate(initialTemplateId); + + // Set the template as selected + setSelectedTemplate({ + id: templateData.id, + name: templateData.name, + display_name: templateData.display_name || templateData.name, + title: templateData.title, + json_data: templateData.json_data, + data: { templateId: templateData.id } + }); + } catch (err) { + console.error('Failed to load initial template:', err); + } + }; + + loadInitialTemplate(); + }, []); // Empty dependency array - run once on mount /** * Template Selection Handlers @@ -48,14 +78,6 @@ function App() { setSelectedTemplate(template); }; - const handleTemplateLoad = (templateData: BeefreeTemplateJson) => { - setCurrentJson(templateData); - }; - - const handleJsonChange = (json: BeefreeTemplateJson) => { - setCurrentJson(json); - }; - /** * Clear selected template after loading * Prevents template from reloading when component re-renders @@ -80,17 +102,6 @@ function App() { setBeeConfig(config); }; - /** - * Window functions interface for type safety - */ - interface WindowWithBeefreeFunctions extends Window { - toggleCustomCss?: (enabled: boolean) => void; - toggleMoveSidebar?: (enabled: boolean) => void; - toggleGroupContentTiles?: (enabled: boolean) => void; - loadTemplate?: (templateData: BeefreeTemplateJson) => Promise; - restartEditor?: () => void; - } - /** * Custom CSS Toggle Handler * Communicates with BeeConfigSidebar via window function to add/remove customCss property @@ -138,248 +149,82 @@ function App() { */ /** - * Export to HTML - * Converts the current template JSON to HTML using Content Services API + * Generic export handler to eliminate code duplication + * Handles all export types (HTML, Plain Text, PDF, Image) + * Loads pre-generated static files (no API call, no user edits included) + * WARNING: This exports the original template, not any changes the user made */ - const handleGetHtml = async () => { - if (!currentJson) { - alert('No template loaded. Please select a template first.'); + const handleExport = async ( + exportType: 'html' | 'plain-text' | 'pdf' | 'image', + loadingStateKey: 'html' | 'plainText' | 'pdf' | 'image', + loaderFn: (templateId: string) => Promise | T, + setResultFn: (result: T) => void, + errorLabel: string + ) => { + const templateId = (selectedTemplate?.data as any)?.templateId; + if (!templateId) { + console.error('Export failed: Template ID not found'); + alert('Template ID not found'); return; } - setExportType('html'); + // Warn user about static export + alert( + '⚠️ Warning: This will export the ORIGINAL template.\n\n' + + 'Any changes you made in the editor will NOT be included.' + ); + + setExportType(exportType); setExportModalOpen(true); setExportLoading(true); - setLoadingState('html', true); + setLoadingState(loadingStateKey, true); try { - const response = await fetch('/v1/message/html', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(currentJson), - }); + // Load pre-generated static file (may be async or sync) + const result = await loaderFn(templateId); - if (!response.ok) { - alert('Failed to convert to HTML'); - setExportModalOpen(false); - return; - } - - const raw = await response.text(); - let html = raw; - try { - const maybeJson = JSON.parse(raw); - const candidate = (maybeJson && maybeJson.body && (maybeJson.body.html || maybeJson.body.result || maybeJson.body)) || undefined; - if (typeof candidate === 'string') { - html = candidate; - } - } catch {} - - lastHtmlRef.current = html; - setExportContent(html); + setResultFn(result); setExportLoading(false); + + // Show warning to user + console.warn('⚠️ Exported the original template. User edits are NOT included.'); } catch (err: unknown) { const errorMessage = err instanceof Error ? err.message : 'Unknown error'; - console.error('HTML export error:', err); - alert('Failed to export HTML: ' + errorMessage); + console.error(`${errorLabel} export error:`, err); + alert(`Failed to export ${errorLabel}: ${errorMessage}`); setExportModalOpen(false); } finally { - setLoadingState('html', false); + setLoadingState(loadingStateKey, false); } }; /** - * Export to Plain Text - * Converts the current template JSON to plain text using Content Services API + * Export to HTML + * Loads pre-generated static HTML file (no API call, no user edits included) */ - const handleGetPlainText = async () => { - if (!currentJson) { - alert('No template loaded. Please select a template first.'); - return; - } - - setExportType('plain-text'); - setExportModalOpen(true); - setExportLoading(true); - setLoadingState('plainText', true); + const handleGetHtml = () => + handleExport('html', 'html', loadTemplateHtml, setExportContent, 'HTML'); - try { - const response = await fetch('/v1/message/plain-text', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(currentJson), - }); - - if (!response.ok) { - alert('Failed to convert to Plain Text'); - setExportModalOpen(false); - return; - } - - const text = await response.text(); - setExportContent(text); - setExportLoading(false); - } catch (err: unknown) { - const errorMessage = err instanceof Error ? err.message : 'Unknown error'; - console.error('Plain text export error:', err); - alert('Failed to export plain text: ' + errorMessage); - setExportModalOpen(false); - } finally { - setLoadingState('plainText', false); - } - }; + /** + * Export to Plain Text + * Loads pre-generated static plain text file (no API call, no user edits included) + */ + const handleGetPlainText = () => + handleExport('plain-text', 'plainText', loadTemplatePlainText, setExportContent, 'plain text'); /** * Export to PDF - * Auto-generates HTML first if needed, then creates PDF - * PDF export requires HTML (not JSON), so we convert first + * Uses pre-generated static PDF file (no API call, no user edits included) */ - const handleGetPdf = async () => { - if (!currentJson) { - alert('No template loaded. Please select a template first.'); - return; - } - - setExportType('pdf'); - setExportModalOpen(true); - setExportLoading(true); - setLoadingState('pdf', true); - - try { - // Auto-generate HTML first if not already done - let html = lastHtmlRef.current; - if (!html) { - const htmlResponse = await fetch('/v1/message/html', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(currentJson), - }); - - if (!htmlResponse.ok) { - alert('Failed to generate HTML for PDF'); - setExportModalOpen(false); - return; - } - - const raw = await htmlResponse.text(); - html = raw; - try { - const maybeJson = JSON.parse(raw); - const candidate = (maybeJson && maybeJson.body && (maybeJson.body.html || maybeJson.body.result || maybeJson.body)) || undefined; - if (typeof candidate === 'string') { - html = candidate; - } - } catch {} - - lastHtmlRef.current = html; - } - - // Generate PDF - const response = await fetch('/v1/message/pdf', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - page_size: 'Full', - page_orientation: 'landscape', - html: html - }), - }); - - if (!response.ok) { - alert('Failed to convert to PDF'); - setExportModalOpen(false); - return; - } - - const data = await response.json(); - const url = data && data.body && data.body.url ? data.body.url : undefined; - setExportPdfUrl(url || ''); - setExportLoading(false); - } catch (err: unknown) { - const errorMessage = err instanceof Error ? err.message : 'Unknown error'; - console.error('PDF export error:', err); - alert('Failed to export PDF: ' + errorMessage); - setExportModalOpen(false); - } finally { - setLoadingState('pdf', false); - } - }; + const handleGetPdf = () => + handleExport('pdf', 'pdf', getTemplatePdfUrl, setExportPdfUrl, 'PDF'); /** * Export to Image (Thumbnail) - * Auto-generates HTML first if needed, then creates PNG image - * Image export requires HTML (not JSON), so we convert first + * Uses pre-generated static PNG file (no API call, no user edits included) */ - const handleGetImage = async () => { - if (!currentJson) { - alert('No template loaded. Please select a template first.'); - return; - } - - setExportType('image'); - setExportModalOpen(true); - setExportLoading(true); - setLoadingState('image', true); - - try { - // Auto-generate HTML first if not already done - let html = lastHtmlRef.current; - if (!html) { - const htmlResponse = await fetch('/v1/message/html', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(currentJson), - }); - - if (!htmlResponse.ok) { - alert('Failed to generate HTML for image'); - setExportModalOpen(false); - return; - } - - const raw = await htmlResponse.text(); - html = raw; - try { - const maybeJson = JSON.parse(raw); - const candidate = (maybeJson && maybeJson.body && (maybeJson.body.html || maybeJson.body.result || maybeJson.body)) || undefined; - if (typeof candidate === 'string') { - html = candidate; - } - } catch {} - - lastHtmlRef.current = html; - } - - // Generate Image - const response = await fetch('/v1/message/image', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - file_type: 'png', - size: '1000', - html: html - }), - }); - - if (!response.ok) { - alert('Failed to create Image'); - setExportModalOpen(false); - return; - } - - const blob = await response.blob(); - const url = URL.createObjectURL(blob); - setExportImageUrl(url); - setExportLoading(false); - } catch (err: unknown) { - const errorMessage = err instanceof Error ? err.message : 'Unknown error'; - console.error('Image export error:', err); - alert('Failed to export image: ' + errorMessage); - setExportModalOpen(false); - } finally { - setLoadingState('image', false); - } - }; + const handleGetImage = () => + handleExport('image', 'image', getTemplateImageUrl, setExportImageUrl, 'image'); /** * Close export modal and reset all export states @@ -417,8 +262,7 @@ function App() { if (importedData && typeof importedData === 'object') { // Clear selected template to prevent it from reloading setSelectedTemplate(null); - setCurrentJson(importedData); - + const win = window as WindowWithBeefreeFunctions; if (win.loadTemplate) { await win.loadTemplate(importedData); @@ -512,10 +356,8 @@ function App() { {/* Center Panel - Beefree Editor */}
- = ({ onConfigChange, cur const [error, setError] = useState(''); const [isApplying, setIsApplying] = useState(false); - /** - * Window functions interface for type safety - */ - interface WindowWithToggleFunctions extends Window { - toggleCustomCss?: (enabled: boolean) => void; - toggleMoveSidebar?: (enabled: boolean) => void; - toggleGroupContentTiles?: (enabled: boolean) => void; - } - /** * Expose functions to toggle configuration from TemplateTopBar * These functions are called via window.toggle* functions - * + * * Flow: * 1. Parse current JSON config * 2. Add or remove configuration property @@ -46,15 +39,15 @@ const BeeConfigSidebar: React.FC = ({ onConfigChange, cur * 4. Auto-apply changes (triggers editor restart) */ useEffect(() => { - const win = window as WindowWithToggleFunctions; + const win = window as WindowWithBeefreeFunctions; win.toggleCustomCss = (enabled: boolean) => { try { const currentConfig: BeefreeConfig = configText ? JSON.parse(configText) : { container: 'beefree-react-demo' }; if (enabled) { - // Add customCss URL to config - currentConfig.customCss = "https://zairro.github.io/beefree-custom-css/beefree-custom-design.css"; + // Add customCss URL to config (using local file) + currentConfig.customCss = "/assets/css/beefree-custom-design.css"; } else { // Remove customCss from config delete currentConfig.customCss; @@ -225,65 +218,55 @@ const BeeConfigSidebar: React.FC = ({ onConfigChange, cur }; /** - * Reset to Default Configuration - * Loads a sample config with common features like merge tags, display conditions, etc. + * Reset to Default and Apply + * Resets config and immediately applies it (refreshes builder) */ - const resetToDefault = () => { - const defaultConfig: BeefreeConfig = { - container: 'beefree-react-demo', - language: 'en-US', - trackChanges: true, - sidebarPosition: 'left', - rowDisplayConditions: [ - { - type: 'Last ordered', - label: 'new', - description: 'Only new client will see this.', - before: '{% if lastOrder.catalog == "New" %}', - after: '{% endif %}' - } - ], - rowsConfiguration: { - emptyRows: true, - defaultRows: [ - { - columns: [ - { - grid: [12], - modules: [ - { - type: 'mailup-bee-newsletter-modules-paragraph', - descriptor: { - text: { - value: 'Drop your content here' - } - } - } - ] - } - ] - } - ] - } - }; - + const handleResetAndApply = async () => { + const defaultConfig = { ...DEFAULT_BEE_CONFIG }; setConfigText(JSON.stringify(defaultConfig, null, 2)); setError(''); + setIsApplying(true); + + try { + await onConfigChange(defaultConfig); + } catch (err: unknown) { + const errorMessage = err instanceof Error ? err.message : 'Failed to apply configuration'; + setError(`Error: ${errorMessage}`); + } finally { + setIsApplying(false); + } }; + /** + * Check if current config differs from default + * Returns true if config is different from default + */ + const isConfigDifferentFromDefault = (): boolean => { + // Don't show reset button if config is empty + if (!configText || !configText.trim()) { + return false; + } + + try { + const currentParsed = JSON.parse(configText); + const defaultConfig = { ...DEFAULT_BEE_CONFIG }; + + // Deep comparison of configs + return JSON.stringify(currentParsed) !== JSON.stringify(defaultConfig); + } catch { + // If JSON is invalid but not empty, consider it different + return true; + } + }; + + const showResetButton = isConfigDifferentFromDefault(); + return (

beeConfig

-
- +