@cmssy/cli 0.1.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.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +649 -0
  3. package/config.d.ts +2 -0
  4. package/config.js +2 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +236 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/add-source.d.ts +7 -0
  10. package/dist/commands/add-source.d.ts.map +1 -0
  11. package/dist/commands/add-source.js +238 -0
  12. package/dist/commands/add-source.js.map +1 -0
  13. package/dist/commands/build.d.ts +7 -0
  14. package/dist/commands/build.d.ts.map +1 -0
  15. package/dist/commands/build.js +105 -0
  16. package/dist/commands/build.js.map +1 -0
  17. package/dist/commands/configure.d.ts +6 -0
  18. package/dist/commands/configure.d.ts.map +1 -0
  19. package/dist/commands/configure.js +42 -0
  20. package/dist/commands/configure.js.map +1 -0
  21. package/dist/commands/create.d.ts +18 -0
  22. package/dist/commands/create.d.ts.map +1 -0
  23. package/dist/commands/create.js +444 -0
  24. package/dist/commands/create.js.map +1 -0
  25. package/dist/commands/dev.d.ts +6 -0
  26. package/dist/commands/dev.d.ts.map +1 -0
  27. package/dist/commands/dev.js +962 -0
  28. package/dist/commands/dev.js.map +1 -0
  29. package/dist/commands/init.d.ts +2 -0
  30. package/dist/commands/init.d.ts.map +1 -0
  31. package/dist/commands/init.js +362 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/migrate.d.ts +2 -0
  34. package/dist/commands/migrate.d.ts.map +1 -0
  35. package/dist/commands/migrate.js +227 -0
  36. package/dist/commands/migrate.js.map +1 -0
  37. package/dist/commands/package.d.ts +7 -0
  38. package/dist/commands/package.d.ts.map +1 -0
  39. package/dist/commands/package.js +136 -0
  40. package/dist/commands/package.js.map +1 -0
  41. package/dist/commands/publish.d.ts +13 -0
  42. package/dist/commands/publish.d.ts.map +1 -0
  43. package/dist/commands/publish.js +910 -0
  44. package/dist/commands/publish.js.map +1 -0
  45. package/dist/commands/sync.d.ts +6 -0
  46. package/dist/commands/sync.d.ts.map +1 -0
  47. package/dist/commands/sync.js +208 -0
  48. package/dist/commands/sync.js.map +1 -0
  49. package/dist/commands/upload.d.ts +7 -0
  50. package/dist/commands/upload.d.ts.map +1 -0
  51. package/dist/commands/upload.js +126 -0
  52. package/dist/commands/upload.js.map +1 -0
  53. package/dist/commands/workspaces.d.ts +2 -0
  54. package/dist/commands/workspaces.d.ts.map +1 -0
  55. package/dist/commands/workspaces.js +67 -0
  56. package/dist/commands/workspaces.js.map +1 -0
  57. package/dist/dev-ui/app.js +1284 -0
  58. package/dist/dev-ui/index.html +1511 -0
  59. package/dist/dev-ui-react/App.tsx +164 -0
  60. package/dist/dev-ui-react/__tests__/previewData.test.ts +193 -0
  61. package/dist/dev-ui-react/components/BlocksList.tsx +232 -0
  62. package/dist/dev-ui-react/components/Editor.tsx +469 -0
  63. package/dist/dev-ui-react/components/Preview.tsx +146 -0
  64. package/dist/dev-ui-react/hooks/useBlocks.ts +80 -0
  65. package/dist/dev-ui-react/index.html +13 -0
  66. package/dist/dev-ui-react/main.tsx +8 -0
  67. package/dist/dev-ui-react/styles.css +856 -0
  68. package/dist/dev-ui-react/types.ts +45 -0
  69. package/dist/types/block-config.d.ts +315 -0
  70. package/dist/types/block-config.d.ts.map +1 -0
  71. package/dist/types/block-config.js +8 -0
  72. package/dist/types/block-config.js.map +1 -0
  73. package/dist/utils/block-config.d.ts +10 -0
  74. package/dist/utils/block-config.d.ts.map +1 -0
  75. package/dist/utils/block-config.js +199 -0
  76. package/dist/utils/block-config.js.map +1 -0
  77. package/dist/utils/blocks-meta-cache.d.ts +28 -0
  78. package/dist/utils/blocks-meta-cache.d.ts.map +1 -0
  79. package/dist/utils/blocks-meta-cache.js +72 -0
  80. package/dist/utils/blocks-meta-cache.js.map +1 -0
  81. package/dist/utils/builder.d.ts +34 -0
  82. package/dist/utils/builder.d.ts.map +1 -0
  83. package/dist/utils/builder.js +140 -0
  84. package/dist/utils/builder.js.map +1 -0
  85. package/dist/utils/cmssy-config.d.ts +16 -0
  86. package/dist/utils/cmssy-config.d.ts.map +1 -0
  87. package/dist/utils/cmssy-config.js +19 -0
  88. package/dist/utils/cmssy-config.js.map +1 -0
  89. package/dist/utils/config.d.ts +9 -0
  90. package/dist/utils/config.d.ts.map +1 -0
  91. package/dist/utils/config.js +46 -0
  92. package/dist/utils/config.js.map +1 -0
  93. package/dist/utils/field-schema.d.ts +12 -0
  94. package/dist/utils/field-schema.d.ts.map +1 -0
  95. package/dist/utils/field-schema.js +202 -0
  96. package/dist/utils/field-schema.js.map +1 -0
  97. package/dist/utils/graphql.d.ts +8 -0
  98. package/dist/utils/graphql.d.ts.map +1 -0
  99. package/dist/utils/graphql.js +118 -0
  100. package/dist/utils/graphql.js.map +1 -0
  101. package/dist/utils/publish-helpers.d.ts +35 -0
  102. package/dist/utils/publish-helpers.d.ts.map +1 -0
  103. package/dist/utils/publish-helpers.js +141 -0
  104. package/dist/utils/publish-helpers.js.map +1 -0
  105. package/dist/utils/scanner.d.ts +36 -0
  106. package/dist/utils/scanner.d.ts.map +1 -0
  107. package/dist/utils/scanner.js +140 -0
  108. package/dist/utils/scanner.js.map +1 -0
  109. package/dist/utils/type-generator.d.ts +9 -0
  110. package/dist/utils/type-generator.d.ts.map +1 -0
  111. package/dist/utils/type-generator.js +85 -0
  112. package/dist/utils/type-generator.js.map +1 -0
  113. package/package.json +88 -0
@@ -0,0 +1,42 @@
1
+ import chalk from "chalk";
2
+ import inquirer from "inquirer";
3
+ import { loadConfig, saveConfig } from "../utils/config.js";
4
+ export async function configureCommand(options) {
5
+ console.log(chalk.blue.bold("\n🔨 Cmssy - Configure\n"));
6
+ const existingConfig = loadConfig();
7
+ const answers = await inquirer.prompt([
8
+ {
9
+ type: "input",
10
+ name: "apiUrl",
11
+ message: "Cmssy API URL:",
12
+ default: options.apiUrl ||
13
+ existingConfig.apiUrl ||
14
+ "https://api.cmssy.io/graphql",
15
+ },
16
+ {
17
+ type: "password",
18
+ name: "apiToken",
19
+ message: "Cmssy API Token (from /settings/tokens):",
20
+ default: existingConfig.apiToken || undefined,
21
+ validate: (input) => {
22
+ if (!input || input.length < 10) {
23
+ return "Please enter a valid API token";
24
+ }
25
+ if (!input.startsWith("bf_")) {
26
+ return 'Token should start with "bf_"';
27
+ }
28
+ return true;
29
+ },
30
+ },
31
+ ]);
32
+ // Save to .env
33
+ saveConfig({
34
+ apiUrl: answers.apiUrl,
35
+ apiToken: answers.apiToken,
36
+ });
37
+ console.log(chalk.green("\n✓ Configuration saved to .env\n"));
38
+ console.log(chalk.cyan("Next steps:\n"));
39
+ console.log(chalk.white(" cmssy publish --all --marketplace # Publish to marketplace"));
40
+ console.log(chalk.white(" cmssy sync # Pull blocks from Cmssy\n"));
41
+ }
42
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/commands/configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAM5D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAyB;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEzD,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC;IAEpC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gBAAgB;YACzB,OAAO,EACL,OAAO,CAAC,MAAM;gBACd,cAAc,CAAC,MAAM;gBACrB,8BAA8B;SACjC;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,0CAA0C;YACnD,OAAO,EAAE,cAAc,CAAC,QAAQ,IAAI,SAAS;YAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;oBAChC,OAAO,gCAAgC,CAAC;gBAC1C,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,OAAO,+BAA+B,CAAC;gBACzC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACF;KACF,CAAC,CAAC;IAEH,eAAe;IACf,UAAU,CAAC;QACT,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAC9E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAChF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ interface CreateBlockOptions {
2
+ yes?: boolean;
3
+ description?: string;
4
+ category?: string;
5
+ tags?: string;
6
+ }
7
+ declare function createBlock(name: string, options?: CreateBlockOptions): Promise<void>;
8
+ interface CreateTemplateOptions {
9
+ yes?: boolean;
10
+ description?: string;
11
+ }
12
+ declare function createPage(name: string, options?: CreateTemplateOptions): Promise<void>;
13
+ export declare const createCommand: {
14
+ block: typeof createBlock;
15
+ page: typeof createPage;
16
+ };
17
+ export {};
18
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAqBA,UAAU,kBAAkB;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iBAAe,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,iBAqQxE;AAED,UAAU,qBAAqB;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,iBAAe,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,iBA4O1E;AAED,eAAO,MAAM,aAAa;;;CAGzB,CAAC"}
@@ -0,0 +1,444 @@
1
+ import chalk from "chalk";
2
+ import fs from "fs-extra";
3
+ import inquirer from "inquirer";
4
+ import ora from "ora";
5
+ import path from "path";
6
+ import { loadConfig } from "../utils/cmssy-config.js";
7
+ import { getFieldTypes } from "../utils/field-schema.js";
8
+ import { generateTypes } from "../utils/type-generator.js";
9
+ import { updateBlockInCache } from "../utils/blocks-meta-cache.js";
10
+ /**
11
+ * Convert kebab-case or snake_case to PascalCase.
12
+ * Examples: "marketing-site" → "MarketingSite", "my_block" → "MyBlock"
13
+ */
14
+ function toPascalCase(str) {
15
+ return str
16
+ .split(/[-_\s]+/)
17
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
18
+ .join("");
19
+ }
20
+ async function createBlock(name, options = {}) {
21
+ const spinner = ora("Creating block...").start();
22
+ try {
23
+ // Load config
24
+ const config = await loadConfig();
25
+ const blockPath = path.join(process.cwd(), "blocks", name);
26
+ // Check if block already exists
27
+ if (fs.existsSync(blockPath)) {
28
+ spinner.fail(`Block "${name}" already exists`);
29
+ process.exit(1);
30
+ }
31
+ let answers;
32
+ if (options.yes) {
33
+ // Use defaults or provided options
34
+ const defaultDisplayName = toPascalCase(name);
35
+ answers = {
36
+ displayName: defaultDisplayName,
37
+ description: options.description || "",
38
+ category: options.category || "marketing",
39
+ tags: options.tags
40
+ ? options.tags.split(",").map((t) => t.trim()).filter(Boolean)
41
+ : [],
42
+ };
43
+ spinner.text = "Creating block files...";
44
+ }
45
+ else {
46
+ // Stop spinner before prompting (ora can interfere with inquirer stdin)
47
+ spinner.stop();
48
+ // Prompt for block details
49
+ answers = await inquirer.prompt([
50
+ {
51
+ type: "input",
52
+ name: "displayName",
53
+ message: "Display name:",
54
+ default: toPascalCase(name),
55
+ },
56
+ {
57
+ type: "input",
58
+ name: "description",
59
+ message: "Description:",
60
+ default: options.description || "",
61
+ },
62
+ {
63
+ type: "list",
64
+ name: "category",
65
+ message: "Category:",
66
+ choices: [
67
+ "marketing",
68
+ "typography",
69
+ "media",
70
+ "layout",
71
+ "forms",
72
+ "navigation",
73
+ "other",
74
+ ],
75
+ default: options.category || "marketing",
76
+ },
77
+ {
78
+ type: "input",
79
+ name: "tags",
80
+ message: "Tags (comma-separated):",
81
+ default: options.tags || "",
82
+ filter: (input) => input
83
+ .split(",")
84
+ .map((tag) => tag.trim())
85
+ .filter(Boolean),
86
+ },
87
+ ]);
88
+ // Restart spinner for file creation
89
+ spinner.start("Creating block files...");
90
+ }
91
+ // Create directory structure
92
+ fs.mkdirSync(path.join(blockPath, "src"), { recursive: true });
93
+ // Create component file based on framework
94
+ if (config.framework === "react") {
95
+ // Strip spaces from displayName (already PascalCase from toPascalCase or user input)
96
+ const componentName = answers.displayName.replace(/\s+/g, "");
97
+ const componentFile = `import { BlockContent } from './block';
98
+
99
+ export default function ${componentName}({ content }: { content: BlockContent }) {
100
+ const {
101
+ heading = 'Heading',
102
+ description = 'Description',
103
+ } = content;
104
+
105
+ return (
106
+ <section className="${name}">
107
+ <h2>{heading}</h2>
108
+ <p>{description}</p>
109
+ </section>
110
+ );
111
+ }
112
+ `;
113
+ fs.writeFileSync(path.join(blockPath, "src", `${componentName}.tsx`), componentFile);
114
+ // Create index file with __component for SSR + mount/update/unmount for client
115
+ const indexFile = `import { createRoot, Root } from "react-dom/client";
116
+ import ${componentName} from "./${componentName}";
117
+ import "./index.css";
118
+
119
+ interface BlockContext {
120
+ root: Root;
121
+ }
122
+
123
+ export default {
124
+ __component: ${componentName},
125
+
126
+ mount(element: HTMLElement, props: any): BlockContext {
127
+ const root = createRoot(element);
128
+ root.render(<${componentName} content={props} />);
129
+ return { root };
130
+ },
131
+
132
+ update(_element: HTMLElement, props: any, ctx: BlockContext): void {
133
+ ctx.root.render(<${componentName} content={props} />);
134
+ },
135
+
136
+ unmount(_element: HTMLElement, ctx: BlockContext): void {
137
+ ctx.root.unmount();
138
+ },
139
+ };
140
+ `;
141
+ fs.writeFileSync(path.join(blockPath, "src", "index.tsx"), indexFile);
142
+ }
143
+ // Create CSS file (with main.css import if project uses Tailwind)
144
+ const hasTailwind = fs.existsSync(path.join(process.cwd(), "postcss.config.js"));
145
+ const cssFile = hasTailwind
146
+ ? `@import "main.css";
147
+ `
148
+ : `.${name} {
149
+ padding: 2rem;
150
+ }
151
+
152
+ .${name} h2 {
153
+ font-size: 2rem;
154
+ margin-bottom: 1rem;
155
+ }
156
+
157
+ .${name} p {
158
+ font-size: 1rem;
159
+ color: #666;
160
+ }
161
+ `;
162
+ fs.writeFileSync(path.join(blockPath, "src", "index.css"), cssFile);
163
+ // Create minimal package.json
164
+ const packageJson = {
165
+ name: `@${config.projectName || "vendor"}/blocks.${name}`,
166
+ version: "1.0.0",
167
+ description: answers.description,
168
+ author: config.author,
169
+ };
170
+ fs.writeFileSync(path.join(blockPath, "package.json"), JSON.stringify(packageJson, null, 2) + "\n");
171
+ // Create block.config.ts
172
+ const blockConfigContent = `import { defineBlock } from 'cmssy-cli/config';
173
+
174
+ export default defineBlock({
175
+ name: '${answers.displayName}',
176
+ description: '${answers.description}',
177
+ category: '${answers.category}',
178
+ tags: ${JSON.stringify(answers.tags)},
179
+
180
+ schema: {
181
+ heading: {
182
+ type: 'singleLine',
183
+ label: 'Heading',
184
+ required: true,
185
+ defaultValue: 'Heading',
186
+ },
187
+ description: {
188
+ type: 'multiLine',
189
+ label: 'Description',
190
+ placeholder: 'Enter description',
191
+ defaultValue: 'Description',
192
+ },
193
+ },
194
+
195
+ pricing: { licenseType: 'free' },
196
+ });
197
+ `;
198
+ fs.writeFileSync(path.join(blockPath, "block.config.ts"), blockConfigContent);
199
+ // Create preview.json
200
+ const previewData = {
201
+ heading: "Preview Heading",
202
+ description: "This is how your block will look in the preview.",
203
+ };
204
+ fs.writeFileSync(path.join(blockPath, "preview.json"), JSON.stringify(previewData, null, 2) + "\n");
205
+ // Generate initial types
206
+ const initialSchema = {
207
+ heading: {
208
+ type: "singleLine",
209
+ label: "Heading",
210
+ required: true,
211
+ defaultValue: "Heading",
212
+ },
213
+ description: {
214
+ type: "multiLine",
215
+ label: "Description",
216
+ placeholder: "Enter description",
217
+ defaultValue: "Description",
218
+ },
219
+ };
220
+ const fieldTypes = await getFieldTypes();
221
+ await generateTypes({ blockPath, schema: initialSchema, fieldTypes });
222
+ // Add to metadata cache for instant filters
223
+ updateBlockInCache(name, "block", {
224
+ name: answers.displayName,
225
+ description: answers.description,
226
+ category: answers.category,
227
+ tags: answers.tags,
228
+ schema: initialSchema,
229
+ }, "1.0.0");
230
+ spinner.succeed(`Block "${name}" created successfully`);
231
+ console.log(chalk.cyan("\nNext steps:\n"));
232
+ console.log(chalk.white(" cmssy dev # Preview your block"));
233
+ console.log(chalk.white(" cmssy build # Build your block\n"));
234
+ }
235
+ catch (error) {
236
+ spinner.fail("Failed to create block");
237
+ console.error(chalk.red("Error:"), error);
238
+ process.exit(1);
239
+ }
240
+ }
241
+ async function createPage(name, options = {}) {
242
+ const spinner = ora("Creating page template...").start();
243
+ try {
244
+ const config = await loadConfig();
245
+ const pagePath = path.join(process.cwd(), "templates", name);
246
+ if (fs.existsSync(pagePath)) {
247
+ spinner.fail(`Page template "${name}" already exists`);
248
+ process.exit(1);
249
+ }
250
+ let answers;
251
+ if (options.yes) {
252
+ // Use defaults or provided options
253
+ const defaultDisplayName = toPascalCase(name);
254
+ answers = {
255
+ displayName: defaultDisplayName,
256
+ description: options.description || "",
257
+ };
258
+ spinner.text = "Creating page files...";
259
+ }
260
+ else {
261
+ // Stop spinner before prompting (ora can interfere with inquirer stdin)
262
+ spinner.stop();
263
+ answers = await inquirer.prompt([
264
+ {
265
+ type: "input",
266
+ name: "displayName",
267
+ message: "Display name:",
268
+ default: toPascalCase(name),
269
+ },
270
+ {
271
+ type: "input",
272
+ name: "description",
273
+ message: "Description:",
274
+ default: options.description || "",
275
+ },
276
+ ]);
277
+ // Restart spinner for file creation
278
+ spinner.start("Creating page files...");
279
+ }
280
+ fs.mkdirSync(path.join(pagePath, "src"), { recursive: true });
281
+ if (config.framework === "react") {
282
+ // Strip spaces from displayName (already PascalCase from toPascalCase or user input)
283
+ const componentName = answers.displayName.replace(/\s+/g, "");
284
+ const componentFile = `import { BlockContent } from './block';
285
+
286
+ export default function ${componentName}({ content }: { content: BlockContent }) {
287
+ const {
288
+ title = 'Page Title',
289
+ sections = [],
290
+ } = content;
291
+
292
+ return (
293
+ <div className="${name}-page">
294
+ <header>
295
+ <h1>{title}</h1>
296
+ </header>
297
+ <main>
298
+ {sections.map((section, index) => (
299
+ <div key={index} className="section">
300
+ {/* Render blocks here */}
301
+ </div>
302
+ ))}
303
+ </main>
304
+ </div>
305
+ );
306
+ }
307
+ `;
308
+ fs.writeFileSync(path.join(pagePath, "src", `${componentName}.tsx`), componentFile);
309
+ const indexFile = `import React from 'react';
310
+ import { createRoot, Root } from 'react-dom/client';
311
+ import ${componentName} from './${componentName}';
312
+ import './index.css';
313
+
314
+ interface BlockContext {
315
+ root: Root;
316
+ }
317
+
318
+ export default {
319
+ // React component for SSR (used by renderToString)
320
+ __component: ${componentName},
321
+
322
+ // Client-side lifecycle methods (for interactivity)
323
+ mount(element: HTMLElement, props: any): BlockContext {
324
+ const root = createRoot(element);
325
+ root.render(<${componentName} content={props} />);
326
+ return { root };
327
+ },
328
+
329
+ update(_element: HTMLElement, props: any, ctx: BlockContext): void {
330
+ // Re-render with new props (no unmount = no blink!)
331
+ ctx.root.render(<${componentName} content={props} />);
332
+ },
333
+
334
+ unmount(_element: HTMLElement, ctx: BlockContext): void {
335
+ ctx.root.unmount();
336
+ }
337
+ };
338
+ `;
339
+ fs.writeFileSync(path.join(pagePath, "src", "index.tsx"), indexFile);
340
+ }
341
+ const cssFile = `.${name}-page {
342
+ min-height: 100vh;
343
+ }
344
+
345
+ .${name}-page header {
346
+ padding: 2rem;
347
+ background: #f5f5f5;
348
+ }
349
+
350
+ .${name}-page h1 {
351
+ font-size: 2.5rem;
352
+ margin: 0;
353
+ }
354
+
355
+ .${name}-page main {
356
+ padding: 2rem;
357
+ }
358
+
359
+ .section {
360
+ margin-bottom: 2rem;
361
+ }
362
+ `;
363
+ fs.writeFileSync(path.join(pagePath, "src", "index.css"), cssFile);
364
+ // Create minimal package.json
365
+ const packageJson = {
366
+ name: `@${config.projectName || "vendor"}/templates.${name}`,
367
+ version: "1.0.0",
368
+ description: answers.description,
369
+ author: config.author,
370
+ };
371
+ fs.writeFileSync(path.join(pagePath, "package.json"), JSON.stringify(packageJson, null, 2) + "\n");
372
+ // Create block.config.ts (using defineTemplate)
373
+ const blockConfigContent = `import { defineTemplate } from 'cmssy-cli/config';
374
+
375
+ export default defineTemplate({
376
+ name: '${answers.displayName}',
377
+ description: '${answers.description}',
378
+ category: 'pages',
379
+
380
+ schema: {
381
+ title: {
382
+ type: 'singleLine',
383
+ label: 'Page Title',
384
+ required: true,
385
+ defaultValue: 'Page Title',
386
+ },
387
+ sections: {
388
+ type: 'repeater',
389
+ label: 'Page Sections',
390
+ schema: {
391
+ // Define section fields here
392
+ },
393
+ },
394
+ },
395
+
396
+ pricing: { licenseType: 'free' },
397
+ });
398
+ `;
399
+ fs.writeFileSync(path.join(pagePath, "block.config.ts"), blockConfigContent);
400
+ const previewData = {
401
+ title: "Preview Page",
402
+ sections: [],
403
+ };
404
+ fs.writeFileSync(path.join(pagePath, "preview.json"), JSON.stringify(previewData, null, 2) + "\n");
405
+ // Generate initial types
406
+ const initialSchema = {
407
+ title: {
408
+ type: "singleLine",
409
+ label: "Page Title",
410
+ required: true,
411
+ defaultValue: "Page Title",
412
+ },
413
+ sections: {
414
+ type: "repeater",
415
+ label: "Page Sections",
416
+ schema: {},
417
+ },
418
+ };
419
+ const fieldTypesTemplate = await getFieldTypes();
420
+ await generateTypes({ blockPath: pagePath, schema: initialSchema, fieldTypes: fieldTypesTemplate });
421
+ // Add to metadata cache for instant filters
422
+ updateBlockInCache(name, "template", {
423
+ name: answers.displayName,
424
+ description: answers.description,
425
+ category: "pages",
426
+ tags: [],
427
+ schema: initialSchema,
428
+ }, "1.0.0");
429
+ spinner.succeed(`Page template "${name}" created successfully`);
430
+ console.log(chalk.cyan("\nNext steps:\n"));
431
+ console.log(chalk.white(" cmssy dev # Preview your page"));
432
+ console.log(chalk.white(" cmssy build # Build your page\n"));
433
+ }
434
+ catch (error) {
435
+ spinner.fail("Failed to create page template");
436
+ console.error(chalk.red("Error:"), error);
437
+ process.exit(1);
438
+ }
439
+ }
440
+ export const createCommand = {
441
+ block: createBlock,
442
+ page: createPage,
443
+ };
444
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface DevOptions {
2
+ port: string;
3
+ }
4
+ export declare function devCommand(options: DevOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAuGA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBA+lBnD"}