dokio-create-template 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Dokio
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,162 @@
1
+ # dokio-create-template
2
+
3
+ 🚀 **CLI tool to scaffold Dokio templates**
4
+
5
+ Quickly generate starter templates for Dokio with all the necessary files and configurations.
6
+
7
+ ## Installation
8
+
9
+ ### Global Installation (Recommended)
10
+
11
+ ```bash
12
+ npm install -g dokio-create-template
13
+ ```
14
+
15
+ ### Local Installation
16
+
17
+ ```bash
18
+ npm install dokio-create-template
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ### Global Installation
24
+
25
+ ```bash
26
+ dokio-create-template
27
+ ```
28
+
29
+ ### Local Installation
30
+
31
+ ```bash
32
+ npx dokio-create-template
33
+ ```
34
+
35
+ ## Interactive Prompts
36
+
37
+ The CLI will guide you through the template creation process with the following prompts:
38
+
39
+ 1. **Template Type**: Choose from General (Image), PDF, Email, or Video
40
+ 2. **Template Name**: Enter a human-readable name for your template
41
+ 3. **Template ID**: Enter a slug/ID (auto-generated from name by default)
42
+ 4. **Subdomain**: Specify the Dokio subdomain (default: `test`)
43
+ 5. **Output Directory**: Where to save the template files (default: `./{template-id}`)
44
+
45
+ ### Additional Prompts (PDF Templates)
46
+
47
+ For PDF templates, you'll also be asked:
48
+
49
+ - **Prince Version**: Choose between version 11 or 15 (15 supports Flexbox)
50
+ - **Resizable**: Whether the template should support dynamic sizing
51
+ - **Dynamic Pages**: Whether the template should support variable page count
52
+
53
+ ## Generated Files
54
+
55
+ The tool generates the following files:
56
+
57
+ - **index.html** - Template markup
58
+ - **style.scss.hbs** - SCSS styles with Handlebars support
59
+ - **data.yaml** - Template configuration and field definitions
60
+ - **CHANGELOG.md** - Version history
61
+
62
+ ## Template Types
63
+
64
+ ### General (Image)
65
+ - Export formats: JPG, PNG
66
+ - Dimensions: 400x400px (customizable)
67
+ - Use case: Social media graphics, banners, thumbnails
68
+
69
+ ### PDF
70
+ - Export formats: Hi-res PDF, Low-res PDF, Print orders
71
+ - Prince XML support (versions 11 or 15)
72
+ - Built-in support for headers, footers, page numbers
73
+ - Use case: Brochures, flyers, certificates, reports
74
+
75
+ ### Email
76
+ - Responsive design (desktop and mobile)
77
+ - Outlook and Gmail compatible
78
+ - Export formats: Standalone HTML, Hosted HTML, URL
79
+ - Built-in accessibility features
80
+ - Use case: Marketing emails, newsletters, transactional emails
81
+
82
+ ### Video
83
+ - Resolution: 1920x1080 (Full HD)
84
+ - Default duration: 30 seconds
85
+ - Export format: 1080p video
86
+ - Use case: Social media videos, ads, animations
87
+
88
+ ## Example
89
+
90
+ ```bash
91
+ $ dokio-create-template
92
+
93
+ 🚀 Dokio Template Generator
94
+
95
+ ? What type of template do you want to create? PDF
96
+ ? Template name: Marketing Brochure
97
+ ? Template ID (slug): marketing-brochure
98
+ ? Subdomain: production
99
+ ? Output directory: ./marketing-brochure
100
+ ? Prince version: 15
101
+ ? Is this a resizable template? No
102
+ ? Will this template have dynamic page count? Yes
103
+
104
+ ✔ Template created successfully!
105
+
106
+ 📁 Files created:
107
+ ./marketing-brochure/index.html
108
+ ./marketing-brochure/style.scss.hbs
109
+ ./marketing-brochure/data.yaml
110
+ ./marketing-brochure/CHANGELOG.md
111
+
112
+ ✨ Next steps:
113
+ cd marketing-brochure
114
+ Start customizing your template files
115
+ Upload to Dokio when ready
116
+ ```
117
+
118
+ ## Template Customization
119
+
120
+ After generating your template, you can customize:
121
+
122
+ ### data.yaml
123
+ - Add/modify fields
124
+ - Configure export options
125
+ - Set page dimensions
126
+ - Define default values
127
+
128
+ ### index.html
129
+ - Add markup structure
130
+ - Use Handlebars syntax for dynamic content
131
+ - Reference field values with `{{{field-name}}}`
132
+
133
+ ### style.scss.hbs
134
+ - Write SCSS styles
135
+ - Use Handlebars for dynamic styling
136
+ - Configure responsive breakpoints (email templates)
137
+
138
+ ### CHANGELOG.md
139
+ - Document template changes
140
+ - Track version history
141
+
142
+ ## Dokio Resources
143
+
144
+ - **Documentation**: https://docs.dokio.com
145
+ - **Developer Reference**: See your Dokio Developer Reference PDF
146
+ - **Support**: https://support.dokio.com
147
+
148
+ ## Contributing
149
+
150
+ Contributions are welcome! Please feel free to submit a Pull Request.
151
+
152
+ ## License
153
+
154
+ MIT
155
+
156
+ ## Author
157
+
158
+ Dokio - https://dokio.com
159
+
160
+ ---
161
+
162
+ **Need help?** Check the [Dokio Developer Reference](https://docs.dokio.com) for detailed information on template development.
package/bin/cli.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { createTemplate } = require('../lib/creator');
4
+
5
+ createTemplate();
package/index.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('./lib/creator');
package/lib/creator.js ADDED
@@ -0,0 +1,144 @@
1
+ const inquirer = require('inquirer');
2
+ const chalk = require('chalk');
3
+ const ora = require('ora');
4
+ const fs = require('fs');
5
+ const path = require('path');
6
+
7
+ async function createTemplate() {
8
+ console.log(chalk.cyan.bold('\n🚀 Dokio Template Generator\n'));
9
+
10
+ try {
11
+ // Ask user for template type
12
+ const answers = await inquirer.prompt([
13
+ {
14
+ type: 'list',
15
+ name: 'templateType',
16
+ message: 'What type of template do you want to create?',
17
+ choices: [
18
+ { name: 'General (Image)', value: 'general' },
19
+ { name: 'PDF', value: 'pdf' },
20
+ { name: 'Email', value: 'email' },
21
+ { name: 'Video', value: 'video' },
22
+ ],
23
+ },
24
+ {
25
+ type: 'input',
26
+ name: 'templateName',
27
+ message: 'Template name:',
28
+ default: 'My Template',
29
+ validate: (input) => input.trim() !== '' || 'Template name cannot be empty',
30
+ },
31
+ {
32
+ type: 'input',
33
+ name: 'templateId',
34
+ message: 'Template ID (slug):',
35
+ default: (answers) => answers.templateName.toLowerCase().replace(/\s+/g, '-'),
36
+ validate: (input) => /^[a-z0-9-]+$/.test(input) || 'Template ID must be lowercase letters, numbers, and hyphens only',
37
+ },
38
+ {
39
+ type: 'input',
40
+ name: 'subdomain',
41
+ message: 'Subdomain:',
42
+ default: 'test',
43
+ },
44
+ {
45
+ type: 'input',
46
+ name: 'outputDir',
47
+ message: 'Output directory:',
48
+ default: (answers) => `./${answers.templateId}`,
49
+ },
50
+ ]);
51
+
52
+ // Additional questions for PDF templates
53
+ let pdfOptions = {};
54
+ if (answers.templateType === 'pdf') {
55
+ pdfOptions = await inquirer.prompt([
56
+ {
57
+ type: 'list',
58
+ name: 'princeVersion',
59
+ message: 'Prince version:',
60
+ choices: ['11', '15'],
61
+ default: '15',
62
+ },
63
+ {
64
+ type: 'confirm',
65
+ name: 'resizable',
66
+ message: 'Is this a resizable template?',
67
+ default: false,
68
+ },
69
+ {
70
+ type: 'confirm',
71
+ name: 'dynamicPages',
72
+ message: 'Will this template have dynamic page count?',
73
+ default: false,
74
+ },
75
+ ]);
76
+ }
77
+
78
+ // Create the template
79
+ const spinner = ora('Creating template files...').start();
80
+
81
+ await generateTemplateFiles({
82
+ ...answers,
83
+ ...pdfOptions,
84
+ });
85
+
86
+ spinner.succeed(chalk.green('Template created successfully!'));
87
+
88
+ console.log(chalk.cyan('\n📁 Files created:'));
89
+ console.log(chalk.gray(` ${answers.outputDir}/index.html`));
90
+ console.log(chalk.gray(` ${answers.outputDir}/style.scss.hbs`));
91
+ console.log(chalk.gray(` ${answers.outputDir}/data.yaml`));
92
+ console.log(chalk.gray(` ${answers.outputDir}/CHANGELOG.md`));
93
+
94
+ console.log(chalk.cyan('\n✨ Next steps:'));
95
+ console.log(chalk.gray(` cd ${answers.outputDir}`));
96
+ console.log(chalk.gray(' Start customizing your template files'));
97
+ console.log(chalk.gray(' Upload to Dokio when ready\n'));
98
+
99
+ } catch (error) {
100
+ if (error.isTtyError) {
101
+ console.error(chalk.red('Prompt couldn\'t be rendered in the current environment'));
102
+ } else {
103
+ console.error(chalk.red('Error creating template:'), error.message);
104
+ }
105
+ process.exit(1);
106
+ }
107
+ }
108
+
109
+ async function generateTemplateFiles(config) {
110
+ const { templateType, outputDir } = config;
111
+
112
+ // Create output directory
113
+ if (!fs.existsSync(outputDir)) {
114
+ fs.mkdirSync(outputDir, { recursive: true });
115
+ }
116
+
117
+ // Load template files
118
+ const templatesDir = path.join(__dirname, '../templates', templateType);
119
+
120
+ // Generate files from templates
121
+ const files = ['index.html', 'style.scss.hbs', 'data.yaml', 'CHANGELOG.md'];
122
+
123
+ for (const file of files) {
124
+ const templatePath = path.join(templatesDir, file);
125
+ let content = fs.readFileSync(templatePath, 'utf8');
126
+
127
+ // Replace placeholders
128
+ content = replacePlaceholders(content, config);
129
+
130
+ const outputPath = path.join(outputDir, file);
131
+ fs.writeFileSync(outputPath, content);
132
+ }
133
+ }
134
+
135
+ function replacePlaceholders(content, config) {
136
+ return content
137
+ .replace(/\{\{TEMPLATE_NAME\}\}/g, config.templateName)
138
+ .replace(/\{\{TEMPLATE_ID\}\}/g, config.templateId)
139
+ .replace(/\{\{SUBDOMAIN\}\}/g, config.subdomain)
140
+ .replace(/\{\{PRINCE_VERSION\}\}/g, config.princeVersion || '15')
141
+ .replace(/\{\{DATE\}\}/g, new Date().toISOString().split('T')[0]);
142
+ }
143
+
144
+ module.exports = { createTemplate };
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "dokio-create-template",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool to scaffold Dokio templates (general, pdf, email, video)",
5
+ "main": "index.js",
6
+ "bin": {
7
+ "dokio-create-template": "bin/cli.js"
8
+ },
9
+ "scripts": {
10
+ "test": "echo \"Error: no test specified\" && exit 1"
11
+ },
12
+ "keywords": [
13
+ "dokio",
14
+ "template",
15
+ "cli",
16
+ "scaffold",
17
+ "generator",
18
+ "pdf",
19
+ "email",
20
+ "video",
21
+ "create-template",
22
+ "boilerplate"
23
+ ],
24
+ "author": "Dokio",
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/yourusername/dokio-create-template.git"
29
+ },
30
+ "bugs": {
31
+ "url": "https://github.com/yourusername/dokio-create-template/issues"
32
+ },
33
+ "homepage": "https://github.com/yourusername/dokio-create-template#readme",
34
+ "dependencies": {
35
+ "inquirer": "^8.2.5",
36
+ "chalk": "^4.1.2",
37
+ "ora": "^5.4.1"
38
+ },
39
+ "engines": {
40
+ "node": ">=14.0.0"
41
+ },
42
+ "files": [
43
+ "bin/",
44
+ "lib/",
45
+ "templates/",
46
+ "index.js",
47
+ "README.md",
48
+ "LICENSE"
49
+ ]
50
+ }
@@ -0,0 +1,14 @@
1
+ # Changelog - {{TEMPLATE_NAME}}
2
+
3
+ ## [1.0.0] - {{DATE}}
4
+
5
+ ### Added
6
+ - Initial email template creation
7
+ - Responsive design (desktop and mobile)
8
+ - Subject line and preheader fields
9
+ - Customizable brand color
10
+ - CTA button with URL field
11
+ - Gmail and Outlook compatibility
12
+ - Accessibility features (role attributes, semantic HTML)
13
+ - Multiple export options (standalone, hosted HTML, URL)
14
+ - Unsubscribe link support
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: {{TEMPLATE_ID}} - {{TEMPLATE_NAME}}
3
+ mode: email
4
+ status: 0
5
+ subdomain: {{SUBDOMAIN}}
6
+ sendable: true
7
+ allow_pdf_proof: true
8
+ export_options:
9
+ downloadables:
10
+ standalone:
11
+ title: Standalone Download (local assets)
12
+ host_files: false
13
+ output: zip
14
+ hosted-html:
15
+ title: HTML Download (hosted assets)
16
+ host_files: true
17
+ output: zip
18
+ hosted-url:
19
+ title: URL (hosted assets)
20
+ host_files: true
21
+ output: url
22
+ fields_data:
23
+ subject-line:
24
+ type: text
25
+ title: Email Subject Line
26
+ default: "{{TEMPLATE_NAME}}"
27
+ placeholder: Enter subject line
28
+ maximum_characters: 100
29
+
30
+ preheader:
31
+ type: text
32
+ title: Preheader Text
33
+ default: "Preview text appears here"
34
+ placeholder: Enter preheader text
35
+ maximum_characters: 150
36
+
37
+ heading:
38
+ type: text
39
+ title: Heading
40
+ default: Welcome
41
+ placeholder: Enter heading text
42
+
43
+ body-text:
44
+ type: textarea
45
+ title: Body Text
46
+ default: |
47
+ This is your email body text.
48
+ Add your content here.
49
+ output_html_safe: true
50
+ output_auto_br: true
51
+
52
+ cta-text:
53
+ type: text
54
+ title: Call to Action Text
55
+ default: Learn More
56
+ placeholder: Enter button text
57
+
58
+ cta-url:
59
+ type: url
60
+ title: Call to Action URL
61
+ placeholder: https://example.com
62
+
63
+ brand-color:
64
+ type: colour
65
+ title: Brand Colour
66
+ customisable: true
67
+ options:
68
+ '0079C8': Blue
69
+ 'FF6B35': Orange
70
+ '004E89': Navy
@@ -0,0 +1,96 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="x-apple-disable-message-reformatting">
8
+ <meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no">
9
+ <title>{{{subject-line}}}</title>
10
+
11
+ <!--[if mso]>
12
+ <style>
13
+ * { font-family: Arial, sans-serif !important; }
14
+ </style>
15
+ <![endif]-->
16
+ </head>
17
+
18
+ <body width="100%" style="margin: 0; padding: 0 !important; mso-line-height-rule: exactly; background-color: #f4f4f4;">
19
+
20
+ <!-- Preheader (hidden) -->
21
+ <div style="display: none; max-height: 0px; overflow: hidden;">
22
+ {{{preheader}}}
23
+ </div>
24
+
25
+ <!-- Gmail fix -->
26
+ <span style="display: block; width: 600px !important; max-width: 600px !important; height: 1px" class="mobileOff"></span>
27
+
28
+ <!-- Email Container -->
29
+ <center role="article" aria-roledescription="email" lang="en" style="width: 100%; background-color: #f4f4f4;">
30
+
31
+ <!-- Outer table -->
32
+ <table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: auto;">
33
+ <tr>
34
+ <td style="padding: 20px 0;">
35
+
36
+ <!-- Main Email Table -->
37
+ <table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="margin: auto; background-color: #ffffff;" class="email-container">
38
+
39
+ <!-- Header -->
40
+ <tr>
41
+ <td style="padding: 40px 30px; text-align: center; background-color: #{{brand-color}};">
42
+ <h1 style="margin: 0; font-family: Arial, sans-serif; font-size: 28px; line-height: 36px; color: #ffffff; font-weight: bold;">
43
+ {{{heading}}}
44
+ </h1>
45
+ </td>
46
+ </tr>
47
+
48
+ <!-- Body -->
49
+ <tr>
50
+ <td style="padding: 40px 30px; font-family: Arial, sans-serif; font-size: 16px; line-height: 24px; color: #333333;">
51
+ <p style="margin: 0 0 20px 0;">
52
+ {{{body-text}}}
53
+ </p>
54
+ </td>
55
+ </tr>
56
+
57
+ <!-- CTA Button -->
58
+ {{#if cta-url}}
59
+ <tr>
60
+ <td style="padding: 0 30px 40px 30px;">
61
+ <table role="presentation" cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto;">
62
+ <tr>
63
+ <td style="background-color: #{{brand-color}}; text-align: center; border-radius: 4px;" class="button-td">
64
+ <a href="{{{cta-url.full_url}}}" style="background-color: #{{brand-color}}; border: 15px solid #{{brand-color}}; font-family: Arial, sans-serif; font-size: 16px; line-height: 20px; text-align: center; text-decoration: none; display: block; border-radius: 4px; font-weight: bold;" class="button-a">
65
+ <span style="color: #ffffff;" class="button-link">{{{cta-text}}}</span>
66
+ </a>
67
+ </td>
68
+ </tr>
69
+ </table>
70
+ </td>
71
+ </tr>
72
+ {{/if}}
73
+
74
+ <!-- Footer -->
75
+ <tr>
76
+ <td style="padding: 30px; background-color: #f8f8f8; text-align: center; font-family: Arial, sans-serif; font-size: 12px; line-height: 18px; color: #666666;">
77
+ <p style="margin: 0;">
78
+ © {{TEMPLATE_NAME}}<br>
79
+ {{#if unsubscribe_link}}
80
+ <a href="{{unsubscribe_link}}" style="color: #666666; text-decoration: underline;">Unsubscribe</a>
81
+ {{/if}}
82
+ </p>
83
+ </td>
84
+ </tr>
85
+
86
+ </table>
87
+ <!-- End Main Email Table -->
88
+
89
+ </td>
90
+ </tr>
91
+ </table>
92
+ <!-- End Outer table -->
93
+
94
+ </center>
95
+ </body>
96
+ </html>
@@ -0,0 +1,56 @@
1
+ // {{TEMPLATE_NAME}} Email Styles
2
+ // Mode: Email
3
+
4
+ // Mobile styles
5
+ @media screen and (max-width: 599px) {
6
+
7
+ // Gmail fix
8
+ .mobileOff {
9
+ width: 0px !important;
10
+ display: none !important;
11
+ }
12
+
13
+ // Stack columns
14
+ .email-container {
15
+ width: 100% !important;
16
+ max-width: 100% !important;
17
+ }
18
+
19
+ // Full width on mobile
20
+ .mobile-full-width {
21
+ width: 100% !important;
22
+ max-width: 100% !important;
23
+ }
24
+
25
+ // Adjust padding on mobile
26
+ .mobile-padding {
27
+ padding: 20px !important;
28
+ }
29
+
30
+ // Center buttons on mobile
31
+ .button-td,
32
+ .button-a {
33
+ text-align: center !important;
34
+ display: block !important;
35
+ }
36
+ }
37
+
38
+ // Outlook-specific styles
39
+ <!--[if mso]>
40
+ <style type="text/css">
41
+ table {
42
+ border-collapse: collapse !important;
43
+ mso-table-lspace: 0pt !important;
44
+ mso-table-rspace: 0pt !important;
45
+ }
46
+
47
+ img {
48
+ -ms-interpolation-mode: bicubic;
49
+ }
50
+
51
+ .button-td {
52
+ padding-left: 20px !important;
53
+ padding-right: 20px !important;
54
+ }
55
+ </style>
56
+ <![endif]-->
@@ -0,0 +1,9 @@
1
+ # Changelog - {{TEMPLATE_NAME}}
2
+
3
+ ## [1.0.0] - {{DATE}}
4
+
5
+ ### Added
6
+ - Initial template creation
7
+ - Basic heading and body text fields
8
+ - Background color selector
9
+ - JPG and PNG export options
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: {{TEMPLATE_ID}} - {{TEMPLATE_NAME}}
3
+ mode: general
4
+ subdomain: {{SUBDOMAIN}}
5
+ dimension_mode: px
6
+ compositing_data: {}
7
+ page_count: 1
8
+ dimension_width: 400
9
+ dimension_height: 400
10
+ export_options:
11
+ downloadables:
12
+ jpg_chrome:
13
+ title: JPG
14
+ renderer: image
15
+ format: jpg
16
+ png_chrome:
17
+ title: PNG
18
+ renderer: image
19
+ format: png
20
+ fields_data:
21
+ heading:
22
+ type: text
23
+ title: Heading
24
+ default: Welcome to {{TEMPLATE_NAME}}
25
+ placeholder: Enter heading text
26
+
27
+ body-text:
28
+ type: textarea
29
+ title: Body Text
30
+ default: |
31
+ This is your template body text.
32
+ Add your content here.
33
+ output_html_safe: true
34
+ output_auto_br: true
35
+
36
+ background-color:
37
+ type: colour
38
+ title: Background Colour
39
+ customisable: true
40
+ options:
41
+ 'ffffff': White
42
+ '000000': Black
43
+ '0079C8': Blue
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>{{TEMPLATE_NAME}}</title>
7
+ </head>
8
+ <body>
9
+ <div class="container" style="background-color: #{{background-color}};">
10
+ <div class="content">
11
+ <h1 class="heading">{{{heading}}}</h1>
12
+ <div class="body-text">{{{body-text}}}</div>
13
+ </div>
14
+ </div>
15
+ </body>
16
+ </html>
@@ -0,0 +1,41 @@
1
+ // {{TEMPLATE_NAME}} Styles
2
+ // Mode: General (Image)
3
+
4
+ * {
5
+ margin: 0;
6
+ padding: 0;
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ body {
11
+ font-family: Arial, sans-serif;
12
+ -webkit-font-smoothing: antialiased;
13
+ -moz-osx-font-smoothing: grayscale;
14
+ }
15
+
16
+ .container {
17
+ width: 400px;
18
+ height: 400px;
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ padding: 40px;
23
+ }
24
+
25
+ .content {
26
+ text-align: center;
27
+ }
28
+
29
+ .heading {
30
+ font-size: 32px;
31
+ font-weight: bold;
32
+ margin-bottom: 20px;
33
+ color: #333;
34
+ }
35
+
36
+ .body-text {
37
+ font-size: 16px;
38
+ line-height: 1.6;
39
+ color: #666;
40
+ white-space: pre-line;
41
+ }
@@ -0,0 +1,12 @@
1
+ # Changelog - {{TEMPLATE_NAME}}
2
+
3
+ ## [1.0.0] - {{DATE}}
4
+
5
+ ### Added
6
+ - Initial PDF template creation
7
+ - Prince version {{PRINCE_VERSION}} support
8
+ - Rich text editor for body content
9
+ - Customizable primary color
10
+ - Page numbers and headers
11
+ - Hi-res and low-res PDF export options
12
+ - Print-ready with bleed and crop marks
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: {{TEMPLATE_ID}} - {{TEMPLATE_NAME}}
3
+ mode: pdf
4
+ prince_version: {{PRINCE_VERSION}}
5
+ status: 0
6
+ subdomain: {{SUBDOMAIN}}
7
+ dimension_mode: mm
8
+ page_count: 1
9
+ draft_proofable: true
10
+ dimension_width: 210
11
+ dimension_height: 297
12
+ compositing_data: {}
13
+ export_options:
14
+ orderable:
15
+ title: Print order
16
+ description: Order from Snap
17
+ description_complete: Ordered from Snap
18
+ title_download: This is the title for the orderable download
19
+ description_download: Download for your own printer
20
+ description_download_complete: Downloaded for your own printer
21
+ marks: true
22
+ bleed: true
23
+ supplier_choice: true
24
+ downloadables:
25
+ hi_res:
26
+ title: Hi-res Download
27
+ description: High resolution PDF for printing
28
+ renderer: pdf
29
+ marks: true
30
+ bleed: true
31
+ slug: false
32
+ approval_required: false
33
+ disable_printing: false
34
+ low-res-pdf:
35
+ title: Local Printer PDF
36
+ description: Use this version when emailing or printing in-house
37
+ renderer: pdf
38
+ bleed: false
39
+ slug: false
40
+ marks: false
41
+ approval_required: false
42
+ disable_printing: false
43
+ resolution: 200
44
+ fields_data:
45
+ heading:
46
+ type: text
47
+ title: Heading
48
+ default: {{TEMPLATE_NAME}}
49
+ placeholder: Enter heading text
50
+
51
+ body-text:
52
+ type: richtext
53
+ title: Body Text
54
+ placeholder: Enter your content here
55
+ font_sizes: 10px:14px 12px:16px 16px:18px:p 18px:20px
56
+ toolbar:
57
+ - bold
58
+ - italic
59
+ - link
60
+ - ul
61
+ - ol
62
+
63
+ primary-color:
64
+ type: colour
65
+ title: Primary Colour
66
+ customisable: true
67
+ options:
68
+ '0079C8': Blue
69
+ 'FF6B35': Orange
70
+ '004E89': Navy
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>{{TEMPLATE_NAME}}</title>
6
+ </head>
7
+ <body>
8
+ <div class="page">
9
+ <div class="content">
10
+ <h1 class="heading" style="color: #{{primary-color}};">{{{heading}}}</h1>
11
+ <div class="body-text">{{{body-text}}}</div>
12
+ </div>
13
+ </div>
14
+ </body>
15
+ </html>
@@ -0,0 +1,108 @@
1
+ // {{TEMPLATE_NAME}} Styles
2
+ // Mode: PDF
3
+ // Prince Version: {{PRINCE_VERSION}}
4
+
5
+ // Page setup
6
+ @page {
7
+ size: A4 portrait;
8
+ margin: 15mm;
9
+
10
+ @top-center {
11
+ content: "{{TEMPLATE_NAME}}";
12
+ font-size: 10pt;
13
+ color: #999;
14
+ }
15
+
16
+ @bottom-right {
17
+ content: "Page " counter(page);
18
+ font-size: 10pt;
19
+ color: #999;
20
+ }
21
+ }
22
+
23
+ // PDF color conversion
24
+ @prince-pdf {
25
+ prince-pdf-color-conversion: full;
26
+ }
27
+
28
+ // Reset
29
+ * {
30
+ margin: 0;
31
+ padding: 0;
32
+ box-sizing: border-box;
33
+ }
34
+
35
+ body {
36
+ font-family: Arial, sans-serif;
37
+ font-size: 12pt;
38
+ line-height: 1.6;
39
+ color: #333;
40
+ }
41
+
42
+ .page {
43
+ width: 210mm;
44
+ height: 297mm;
45
+ position: relative;
46
+ }
47
+
48
+ .content {
49
+ padding: 20mm;
50
+ }
51
+
52
+ .heading {
53
+ font-size: 24pt;
54
+ font-weight: bold;
55
+ margin-bottom: 10mm;
56
+ line-height: 1.2;
57
+ }
58
+
59
+ .body-text {
60
+ font-size: 12pt;
61
+ line-height: 1.6;
62
+
63
+ p {
64
+ margin-bottom: 5mm;
65
+ }
66
+
67
+ p:last-child {
68
+ margin-bottom: 0;
69
+ }
70
+
71
+ strong {
72
+ font-weight: bold;
73
+ }
74
+
75
+ em {
76
+ font-style: italic;
77
+ }
78
+
79
+ ul, ol {
80
+ margin-left: 10mm;
81
+ margin-bottom: 5mm;
82
+ list-style-position: outside;
83
+ }
84
+
85
+ li {
86
+ margin-bottom: 2mm;
87
+ }
88
+
89
+ a {
90
+ color: #0079C8;
91
+ text-decoration: underline;
92
+ }
93
+ }
94
+
95
+ // Utility: prevent orphans and widows
96
+ p {
97
+ orphans: 3;
98
+ widows: 3;
99
+ }
100
+
101
+ // Utility: page breaks
102
+ .page-break {
103
+ page-break-before: always;
104
+ }
105
+
106
+ .avoid-break {
107
+ page-break-inside: avoid;
108
+ }
@@ -0,0 +1,11 @@
1
+ # Changelog - {{TEMPLATE_NAME}}
2
+
3
+ ## [1.0.0] - {{DATE}}
4
+
5
+ ### Added
6
+ - Initial video template creation
7
+ - 1920x1080 Full HD resolution
8
+ - 30 second duration
9
+ - Customizable background and text colors
10
+ - Fade-in animation effects
11
+ - Main text and subheading fields
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: {{TEMPLATE_ID}} - {{TEMPLATE_NAME}}
3
+ mode: video
4
+ subdomain: {{SUBDOMAIN}}
5
+ duration: '30'
6
+ highlight_point: '27'
7
+ dimension_height: 1080
8
+ dimension_width: 1920
9
+ export_options:
10
+ downloadables:
11
+ hi-res:
12
+ title: 1080p
13
+ fields_data:
14
+ main-text:
15
+ type: text
16
+ title: Main Text
17
+ default: {{TEMPLATE_NAME}}
18
+ placeholder: Enter main text
19
+
20
+ subheading:
21
+ type: text
22
+ title: Subheading
23
+ default: Your message here
24
+ placeholder: Enter subheading
25
+
26
+ background-color:
27
+ type: colour
28
+ title: Background Colour
29
+ customisable: true
30
+ options:
31
+ '0079C8': Blue
32
+ 'FF6B35': Orange
33
+ '000000': Black
34
+ 'FFFFFF': White
35
+
36
+ text-color:
37
+ type: colour
38
+ title: Text Colour
39
+ customisable: true
40
+ options:
41
+ 'FFFFFF': White
42
+ '000000': Black
43
+ '0079C8': Blue
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>{{TEMPLATE_NAME}}</title>
7
+ </head>
8
+ <body>
9
+ <div class="video-container" style="background-color: #{{background-color}};">
10
+ <div class="content">
11
+ <h1 class="main-text" style="color: #{{text-color}};">{{{main-text}}}</h1>
12
+ <p class="subheading" style="color: #{{text-color}};">{{{subheading}}}</p>
13
+ </div>
14
+ </div>
15
+ </body>
16
+ </html>
@@ -0,0 +1,57 @@
1
+ // {{TEMPLATE_NAME}} Video Styles
2
+ // Mode: Video
3
+ // Duration: 30 seconds
4
+ // Dimensions: 1920x1080 (Full HD)
5
+
6
+ * {
7
+ margin: 0;
8
+ padding: 0;
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ body {
13
+ font-family: Arial, sans-serif;
14
+ -webkit-font-smoothing: antialiased;
15
+ -moz-osx-font-smoothing: grayscale;
16
+ }
17
+
18
+ .video-container {
19
+ width: 1920px;
20
+ height: 1080px;
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ position: relative;
25
+ }
26
+
27
+ .content {
28
+ text-align: center;
29
+ padding: 100px;
30
+ max-width: 1400px;
31
+ }
32
+
33
+ .main-text {
34
+ font-size: 120px;
35
+ font-weight: bold;
36
+ line-height: 1.2;
37
+ margin-bottom: 40px;
38
+ animation: fadeIn 1s ease-in;
39
+ }
40
+
41
+ .subheading {
42
+ font-size: 60px;
43
+ line-height: 1.4;
44
+ animation: fadeIn 1.5s ease-in;
45
+ }
46
+
47
+ // Animation keyframes
48
+ @keyframes fadeIn {
49
+ from {
50
+ opacity: 0;
51
+ transform: translateY(20px);
52
+ }
53
+ to {
54
+ opacity: 1;
55
+ transform: translateY(0);
56
+ }
57
+ }