@calibrate-ds/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 (201) hide show
  1. package/dist/__tests__/component-slug.test.d.ts +2 -0
  2. package/dist/__tests__/component-slug.test.d.ts.map +1 -0
  3. package/dist/__tests__/component-slug.test.js +54 -0
  4. package/dist/__tests__/component-slug.test.js.map +1 -0
  5. package/dist/__tests__/lock-changes.test.d.ts +2 -0
  6. package/dist/__tests__/lock-changes.test.d.ts.map +1 -0
  7. package/dist/__tests__/lock-changes.test.js +81 -0
  8. package/dist/__tests__/lock-changes.test.js.map +1 -0
  9. package/dist/__tests__/permissions.test.d.ts +2 -0
  10. package/dist/__tests__/permissions.test.d.ts.map +1 -0
  11. package/dist/__tests__/permissions.test.js +67 -0
  12. package/dist/__tests__/permissions.test.js.map +1 -0
  13. package/dist/__tests__/stamp-in-lock.test.d.ts +2 -0
  14. package/dist/__tests__/stamp-in-lock.test.d.ts.map +1 -0
  15. package/dist/__tests__/stamp-in-lock.test.js +102 -0
  16. package/dist/__tests__/stamp-in-lock.test.js.map +1 -0
  17. package/dist/__tests__/status-logic.test.d.ts +2 -0
  18. package/dist/__tests__/status-logic.test.d.ts.map +1 -0
  19. package/dist/__tests__/status-logic.test.js +74 -0
  20. package/dist/__tests__/status-logic.test.js.map +1 -0
  21. package/dist/__tests__/team-roster.test.d.ts +2 -0
  22. package/dist/__tests__/team-roster.test.d.ts.map +1 -0
  23. package/dist/__tests__/team-roster.test.js +97 -0
  24. package/dist/__tests__/team-roster.test.js.map +1 -0
  25. package/dist/ai/claude-provider.d.ts +13 -0
  26. package/dist/ai/claude-provider.d.ts.map +1 -0
  27. package/dist/ai/claude-provider.js +335 -0
  28. package/dist/ai/claude-provider.js.map +1 -0
  29. package/dist/ai/enhance-doc.d.ts +24 -0
  30. package/dist/ai/enhance-doc.d.ts.map +1 -0
  31. package/dist/ai/enhance-doc.js +272 -0
  32. package/dist/ai/enhance-doc.js.map +1 -0
  33. package/dist/ai/openai-provider.d.ts +13 -0
  34. package/dist/ai/openai-provider.d.ts.map +1 -0
  35. package/dist/ai/openai-provider.js +345 -0
  36. package/dist/ai/openai-provider.js.map +1 -0
  37. package/dist/ai/prompt-utils.d.ts +23 -0
  38. package/dist/ai/prompt-utils.d.ts.map +1 -0
  39. package/dist/ai/prompt-utils.js +67 -0
  40. package/dist/ai/prompt-utils.js.map +1 -0
  41. package/dist/commands/ai.d.ts +8 -0
  42. package/dist/commands/ai.d.ts.map +1 -0
  43. package/dist/commands/ai.js +576 -0
  44. package/dist/commands/ai.js.map +1 -0
  45. package/dist/commands/apply.d.ts +4 -0
  46. package/dist/commands/apply.d.ts.map +1 -0
  47. package/dist/commands/apply.js +98 -0
  48. package/dist/commands/apply.js.map +1 -0
  49. package/dist/commands/assign.d.ts +5 -0
  50. package/dist/commands/assign.d.ts.map +1 -0
  51. package/dist/commands/assign.js +180 -0
  52. package/dist/commands/assign.js.map +1 -0
  53. package/dist/commands/ci.d.ts +4 -0
  54. package/dist/commands/ci.d.ts.map +1 -0
  55. package/dist/commands/ci.js +84 -0
  56. package/dist/commands/ci.js.map +1 -0
  57. package/dist/commands/context.d.ts +19 -0
  58. package/dist/commands/context.d.ts.map +1 -0
  59. package/dist/commands/context.js +297 -0
  60. package/dist/commands/context.js.map +1 -0
  61. package/dist/commands/diff.d.ts +2 -0
  62. package/dist/commands/diff.d.ts.map +1 -0
  63. package/dist/commands/diff.js +119 -0
  64. package/dist/commands/diff.js.map +1 -0
  65. package/dist/commands/doctor.d.ts +5 -0
  66. package/dist/commands/doctor.d.ts.map +1 -0
  67. package/dist/commands/doctor.js +348 -0
  68. package/dist/commands/doctor.js.map +1 -0
  69. package/dist/commands/document-system.d.ts +5 -0
  70. package/dist/commands/document-system.d.ts.map +1 -0
  71. package/dist/commands/document-system.js +84 -0
  72. package/dist/commands/document-system.js.map +1 -0
  73. package/dist/commands/document.d.ts +6 -0
  74. package/dist/commands/document.d.ts.map +1 -0
  75. package/dist/commands/document.js +276 -0
  76. package/dist/commands/document.js.map +1 -0
  77. package/dist/commands/export.d.ts +11 -0
  78. package/dist/commands/export.d.ts.map +1 -0
  79. package/dist/commands/export.js +74 -0
  80. package/dist/commands/export.js.map +1 -0
  81. package/dist/commands/generate-components.d.ts +4 -0
  82. package/dist/commands/generate-components.d.ts.map +1 -0
  83. package/dist/commands/generate-components.js +62 -0
  84. package/dist/commands/generate-components.js.map +1 -0
  85. package/dist/commands/generate-composites.d.ts +2 -0
  86. package/dist/commands/generate-composites.d.ts.map +1 -0
  87. package/dist/commands/generate-composites.js +31 -0
  88. package/dist/commands/generate-composites.js.map +1 -0
  89. package/dist/commands/generate-tokens.d.ts +2 -0
  90. package/dist/commands/generate-tokens.d.ts.map +1 -0
  91. package/dist/commands/generate-tokens.js +48 -0
  92. package/dist/commands/generate-tokens.js.map +1 -0
  93. package/dist/commands/help-topics.d.ts +2 -0
  94. package/dist/commands/help-topics.d.ts.map +1 -0
  95. package/dist/commands/help-topics.js +324 -0
  96. package/dist/commands/help-topics.js.map +1 -0
  97. package/dist/commands/implement.d.ts +5 -0
  98. package/dist/commands/implement.d.ts.map +1 -0
  99. package/dist/commands/implement.js +595 -0
  100. package/dist/commands/implement.js.map +1 -0
  101. package/dist/commands/import-tokens.d.ts +2 -0
  102. package/dist/commands/import-tokens.d.ts.map +1 -0
  103. package/dist/commands/import-tokens.js +42 -0
  104. package/dist/commands/import-tokens.js.map +1 -0
  105. package/dist/commands/init.d.ts +6 -0
  106. package/dist/commands/init.d.ts.map +1 -0
  107. package/dist/commands/init.js +410 -0
  108. package/dist/commands/init.js.map +1 -0
  109. package/dist/commands/inspect-component.d.ts +2 -0
  110. package/dist/commands/inspect-component.d.ts.map +1 -0
  111. package/dist/commands/inspect-component.js +146 -0
  112. package/dist/commands/inspect-component.js.map +1 -0
  113. package/dist/commands/log.d.ts +4 -0
  114. package/dist/commands/log.d.ts.map +1 -0
  115. package/dist/commands/log.js +109 -0
  116. package/dist/commands/log.js.map +1 -0
  117. package/dist/commands/onboarding.d.ts +9 -0
  118. package/dist/commands/onboarding.d.ts.map +1 -0
  119. package/dist/commands/onboarding.js +63 -0
  120. package/dist/commands/onboarding.js.map +1 -0
  121. package/dist/commands/plan.d.ts +3 -0
  122. package/dist/commands/plan.d.ts.map +1 -0
  123. package/dist/commands/plan.js +108 -0
  124. package/dist/commands/plan.js.map +1 -0
  125. package/dist/commands/prompt.d.ts +5 -0
  126. package/dist/commands/prompt.d.ts.map +1 -0
  127. package/dist/commands/prompt.js +77 -0
  128. package/dist/commands/prompt.js.map +1 -0
  129. package/dist/commands/prune.d.ts +2 -0
  130. package/dist/commands/prune.d.ts.map +1 -0
  131. package/dist/commands/prune.js +95 -0
  132. package/dist/commands/prune.js.map +1 -0
  133. package/dist/commands/remove.d.ts +2 -0
  134. package/dist/commands/remove.d.ts.map +1 -0
  135. package/dist/commands/remove.js +76 -0
  136. package/dist/commands/remove.js.map +1 -0
  137. package/dist/commands/scaffold.d.ts +2 -0
  138. package/dist/commands/scaffold.d.ts.map +1 -0
  139. package/dist/commands/scaffold.js +47 -0
  140. package/dist/commands/scaffold.js.map +1 -0
  141. package/dist/commands/scan.d.ts +2 -0
  142. package/dist/commands/scan.d.ts.map +1 -0
  143. package/dist/commands/scan.js +91 -0
  144. package/dist/commands/scan.js.map +1 -0
  145. package/dist/commands/stamp.d.ts +11 -0
  146. package/dist/commands/stamp.d.ts.map +1 -0
  147. package/dist/commands/stamp.js +147 -0
  148. package/dist/commands/stamp.js.map +1 -0
  149. package/dist/commands/status.d.ts +7 -0
  150. package/dist/commands/status.d.ts.map +1 -0
  151. package/dist/commands/status.js +219 -0
  152. package/dist/commands/status.js.map +1 -0
  153. package/dist/commands/team.d.ts +7 -0
  154. package/dist/commands/team.d.ts.map +1 -0
  155. package/dist/commands/team.js +173 -0
  156. package/dist/commands/team.js.map +1 -0
  157. package/dist/index.d.ts +3 -0
  158. package/dist/index.d.ts.map +1 -0
  159. package/dist/index.js +303 -0
  160. package/dist/index.js.map +1 -0
  161. package/dist/onboarding/content.d.ts +39 -0
  162. package/dist/onboarding/content.d.ts.map +1 -0
  163. package/dist/onboarding/content.js +82 -0
  164. package/dist/onboarding/content.js.map +1 -0
  165. package/dist/utils/component-slug.d.ts +10 -0
  166. package/dist/utils/component-slug.d.ts.map +1 -0
  167. package/dist/utils/component-slug.js +13 -0
  168. package/dist/utils/component-slug.js.map +1 -0
  169. package/dist/utils/framework-registry.d.ts +41 -0
  170. package/dist/utils/framework-registry.d.ts.map +1 -0
  171. package/dist/utils/framework-registry.js +82 -0
  172. package/dist/utils/framework-registry.js.map +1 -0
  173. package/dist/utils/gitignore.d.ts +4 -0
  174. package/dist/utils/gitignore.d.ts.map +1 -0
  175. package/dist/utils/gitignore.js +67 -0
  176. package/dist/utils/gitignore.js.map +1 -0
  177. package/dist/utils/lock-changes.d.ts +14 -0
  178. package/dist/utils/lock-changes.d.ts.map +1 -0
  179. package/dist/utils/lock-changes.js +26 -0
  180. package/dist/utils/lock-changes.js.map +1 -0
  181. package/dist/utils/logger.d.ts +9 -0
  182. package/dist/utils/logger.d.ts.map +1 -0
  183. package/dist/utils/logger.js +32 -0
  184. package/dist/utils/logger.js.map +1 -0
  185. package/dist/utils/permissions.d.ts +17 -0
  186. package/dist/utils/permissions.d.ts.map +1 -0
  187. package/dist/utils/permissions.js +37 -0
  188. package/dist/utils/permissions.js.map +1 -0
  189. package/dist/utils/status-logic.d.ts +16 -0
  190. package/dist/utils/status-logic.d.ts.map +1 -0
  191. package/dist/utils/status-logic.js +32 -0
  192. package/dist/utils/status-logic.js.map +1 -0
  193. package/dist/utils/storybook-setup.d.ts +5 -0
  194. package/dist/utils/storybook-setup.d.ts.map +1 -0
  195. package/dist/utils/storybook-setup.js +104 -0
  196. package/dist/utils/storybook-setup.js.map +1 -0
  197. package/dist/utils/team-roster.d.ts +35 -0
  198. package/dist/utils/team-roster.d.ts.map +1 -0
  199. package/dist/utils/team-roster.js +99 -0
  200. package/dist/utils/team-roster.js.map +1 -0
  201. package/package.json +44 -0
@@ -0,0 +1,276 @@
1
+ import { loadConfig, loadLatestSnapshot, resolveComponent, loadManifest, getComponentContext, generateComponentDoc, generateComponentStories, buildReverseDepsMap, resolveDSPaths, formatMetadataHeader, createNamingStrategy, } from "@calibrate-ds/core";
2
+ import { ensureStorybookSetup } from "../utils/storybook-setup.js";
3
+ import { enhanceDocWithAI, generateExampleStoriesWithAI } from "../ai/enhance-doc.js";
4
+ import { logger } from "../utils/logger.js";
5
+ import { createInterface } from "node:readline/promises";
6
+ import { stdin as input, stdout as output } from "node:process";
7
+ import fs from "node:fs/promises";
8
+ import path from "node:path";
9
+ const C = {
10
+ bold: "\x1b[1m",
11
+ dim: "\x1b[2m",
12
+ cyan: "\x1b[36m",
13
+ green: "\x1b[32m",
14
+ yellow: "\x1b[33m",
15
+ reset: "\x1b[0m",
16
+ };
17
+ // ── Config persistence ────────────────────────────────────────────────────────
18
+ async function findConfigPath(cwd = process.cwd()) {
19
+ let current = path.resolve(cwd);
20
+ while (true) {
21
+ const p = path.join(current, "ptb.config.json");
22
+ if (await fs.access(p).then(() => true).catch(() => false))
23
+ return p;
24
+ const parent = path.dirname(current);
25
+ if (parent === current)
26
+ return undefined;
27
+ current = parent;
28
+ }
29
+ }
30
+ async function saveDocsConfigEntry(updates) {
31
+ const configPath = await findConfigPath();
32
+ if (!configPath)
33
+ return;
34
+ const raw = JSON.parse(await fs.readFile(configPath, "utf-8"));
35
+ raw.docs = { ...raw.docs, ...updates };
36
+ await fs.writeFile(configPath, JSON.stringify(raw, null, 2) + "\n", "utf-8");
37
+ }
38
+ // ── Interactive prompts ───────────────────────────────────────────────────────
39
+ async function promptDocsTool() {
40
+ const rl = createInterface({ input, output });
41
+ try {
42
+ console.log();
43
+ console.log(` ${C.bold}Documentation tool${C.reset} ${C.dim}(saved to ptb.config.json — asked once)${C.reset}`);
44
+ console.log(` ${C.dim}1${C.reset} Storybook ${C.dim}(.stories.tsx + Storybook MDX with live preview)${C.reset}`);
45
+ console.log(` ${C.dim}2${C.reset} Docusaurus ${C.dim}(standalone MDX, works with Docusaurus / Nextra / any MDX renderer)${C.reset}`);
46
+ console.log(` ${C.dim}3${C.reset} None ${C.dim}(plain standalone MDX, no renderer assumption)${C.reset}`);
47
+ const raw = await rl.question(`\n › `);
48
+ const trimmed = raw.trim();
49
+ if (trimmed === "2")
50
+ return "docusaurus";
51
+ if (trimmed === "3")
52
+ return "none";
53
+ return "storybook";
54
+ }
55
+ finally {
56
+ rl.close();
57
+ }
58
+ }
59
+ async function promptFormat(current) {
60
+ const rl = createInterface({ input, output });
61
+ try {
62
+ const keepHint = current ? ` ${C.dim}Enter to keep: ${current}${C.reset}` : "";
63
+ console.log();
64
+ console.log(` ${C.bold}What to generate${C.reset}`);
65
+ console.log(` ${C.dim}1${C.reset} MDX doc file only`);
66
+ console.log(` ${C.dim}2${C.reset} Storybook stories only`);
67
+ console.log(` ${C.dim}3${C.reset} Both`);
68
+ const raw = await rl.question(`\n ›${keepHint} `);
69
+ const trimmed = raw.trim();
70
+ if (!trimmed && current)
71
+ return current;
72
+ if (trimmed === "2")
73
+ return "stories";
74
+ if (trimmed === "3")
75
+ return "both";
76
+ return "mdx";
77
+ }
78
+ finally {
79
+ rl.close();
80
+ }
81
+ }
82
+ // ── Single component documentation ───────────────────────────────────────────
83
+ async function documentSingleComponent(component, options, config, snapshot, tool, usedBy) {
84
+ const manifest = await loadManifest(config);
85
+ const context = await getComponentContext(component.id, snapshot, config, manifest);
86
+ if (!context) {
87
+ logger.error(`Failed to construct context for '${component.name}'.`);
88
+ return;
89
+ }
90
+ const naming = createNamingStrategy(config.naming);
91
+ const codeName = naming.formatComponentName(component.name);
92
+ const { componentsDir, packageRoot } = resolveDSPaths(config);
93
+ const fileKey = config.designTool.fileKey;
94
+ let baseOutputDir;
95
+ if (context.component.artifacts?.folder) {
96
+ baseOutputDir = path.join(packageRoot, context.component.artifacts.folder);
97
+ }
98
+ else {
99
+ const folderName = naming.formatFolderName(component.name);
100
+ baseOutputDir = path.join(componentsDir, folderName);
101
+ }
102
+ await fs.mkdir(baseOutputDir, { recursive: true });
103
+ // ── MDX ───────────────────────────────────────────────────────────────────
104
+ if (options.format === "mdx" || options.format === "both") {
105
+ const docPackage = generateComponentDoc(context, codeName, fileKey, usedBy, tool);
106
+ let finalMdx;
107
+ if (options.noAi) {
108
+ finalMdx = docPackage.deterministicMdx;
109
+ }
110
+ else {
111
+ const enhanced = await enhanceDocWithAI(config, docPackage);
112
+ finalMdx = enhanced.filledMdx;
113
+ }
114
+ const mdxPath = path.join(baseOutputDir, `${codeName}.mdx`);
115
+ const mdxExists = await fs.access(mdxPath).then(() => true).catch(() => false);
116
+ if (mdxExists) {
117
+ const existing = await fs.readFile(mdxPath, "utf8").catch(() => "");
118
+ if (!existing.includes("PTB_METADATA")) {
119
+ logger.warn(` [PROTECTED] ${path.relative(process.cwd(), mdxPath)} (user-written — skipping)`);
120
+ }
121
+ else if (!options.force) {
122
+ logger.dim(` [SKIP] ${path.relative(process.cwd(), mdxPath)} (use --force to overwrite)`);
123
+ }
124
+ else {
125
+ const header = formatMetadataHeader(context.metadata, "mdx");
126
+ await fs.writeFile(mdxPath, header + finalMdx, "utf8");
127
+ logger.success(` ${path.relative(process.cwd(), mdxPath)}`);
128
+ }
129
+ }
130
+ else {
131
+ const header = formatMetadataHeader(context.metadata, "mdx");
132
+ await fs.writeFile(mdxPath, header + finalMdx, "utf8");
133
+ logger.success(` ${path.relative(process.cwd(), mdxPath)}`);
134
+ }
135
+ }
136
+ // ── Storybook stories (only for storybook tool) ───────────────────────────
137
+ if (tool === "storybook" && (options.format === "stories" || options.format === "both")) {
138
+ // Warn if the component source file doesn't exist yet
139
+ const componentFile = path.join(baseOutputDir, `${codeName}.tsx`);
140
+ const componentExists = await fs.access(componentFile).then(() => true).catch(() => false);
141
+ if (!componentExists) {
142
+ logger.warn(` ${C.yellow}⚠${C.reset} ${codeName}.tsx not found — run 'ptb generate-components' first, or stories will fail to compile.`);
143
+ }
144
+ const storiesContent = generateComponentStories(context, codeName, fileKey);
145
+ const storiesPath = path.join(baseOutputDir, `${codeName}.stories.tsx`);
146
+ const storiesExists = await fs.access(storiesPath).then(() => true).catch(() => false);
147
+ if (storiesExists) {
148
+ const existing = await fs.readFile(storiesPath, "utf8").catch(() => "");
149
+ if (!existing.includes("PTB_METADATA") && !existing.includes("generated by PTB")) {
150
+ logger.warn(` [PROTECTED] ${path.relative(process.cwd(), storiesPath)} (user-written — skipping)`);
151
+ }
152
+ else if (!options.force) {
153
+ logger.dim(` [SKIP] ${path.relative(process.cwd(), storiesPath)} (use --force to overwrite)`);
154
+ }
155
+ else {
156
+ const header = formatMetadataHeader(context.metadata, "js");
157
+ await fs.writeFile(storiesPath, header + storiesContent, "utf8");
158
+ logger.success(` ${path.relative(process.cwd(), storiesPath)}`);
159
+ }
160
+ }
161
+ else {
162
+ const header = formatMetadataHeader(context.metadata, "js");
163
+ await fs.writeFile(storiesPath, header + storiesContent, "utf8");
164
+ logger.success(` ${path.relative(process.cwd(), storiesPath)}`);
165
+ }
166
+ // ── AI example stories ────────────────────────────────────────────────
167
+ if (!options.noAi && config.ai) {
168
+ const examplesPath = path.join(baseOutputDir, `${codeName}.examples.stories.tsx`);
169
+ const examplesExist = await fs.access(examplesPath).then(() => true).catch(() => false);
170
+ if (!examplesExist || options.force) {
171
+ logger.dim(" Generating AI example stories...");
172
+ const docPackage = generateComponentDoc(context, codeName, fileKey, usedBy, tool);
173
+ const examples = await generateExampleStoriesWithAI(config, docPackage);
174
+ if (examples.length > 0) {
175
+ const categoryPath = context.component.categoryPath;
176
+ const category = categoryPath ? `${categoryPath}/${codeName}` : `Components/${codeName}`;
177
+ const lines = [
178
+ `import type { Meta, StoryObj } from "@storybook/react";`,
179
+ `import { ${codeName} } from "./${codeName}";`,
180
+ `import type { ${codeName}Props } from "./${codeName}.types";`,
181
+ ``,
182
+ `const meta: Meta<typeof ${codeName}> = {`,
183
+ ` title: "${category}",`,
184
+ ` component: ${codeName},`,
185
+ ` tags: ["autodocs"],`,
186
+ `};`,
187
+ ``,
188
+ `export default meta;`,
189
+ `type Story = StoryObj<typeof ${codeName}>;`,
190
+ ``,
191
+ ];
192
+ for (const story of examples) {
193
+ if (story.description)
194
+ lines.push(`/** ${story.description} */`);
195
+ lines.push(`export const ${story.name}: Story = {`);
196
+ lines.push(` name: "${story.title}",`);
197
+ lines.push(` args: ${JSON.stringify(story.args, null, 8).replace(/^/gm, " ").trimStart()},`);
198
+ lines.push(`};`);
199
+ lines.push("");
200
+ }
201
+ await fs.writeFile(examplesPath, lines.join("\n"), "utf8");
202
+ logger.success(` ${path.relative(process.cwd(), examplesPath)}`);
203
+ }
204
+ }
205
+ else {
206
+ logger.dim(` [SKIP] ${path.relative(process.cwd(), examplesPath)} (user-owned — use --force to regenerate)`);
207
+ }
208
+ }
209
+ }
210
+ }
211
+ // ── Entry point ───────────────────────────────────────────────────────────────
212
+ export async function documentComponentCommand(name, options = {}) {
213
+ try {
214
+ const config = await loadConfig();
215
+ const snapshot = await loadLatestSnapshot(config);
216
+ if (!snapshot?.components) {
217
+ logger.warn("No snapshot found. Run 'ptb scan' first.");
218
+ return;
219
+ }
220
+ // ── Resolve docs tool — ask once, save to config ──────────────────────
221
+ let tool = config.docs?.tool ?? "storybook";
222
+ if (!config.docs?.tool) {
223
+ tool = await promptDocsTool();
224
+ await saveDocsConfigEntry({ tool });
225
+ logger.success(`Saved docs.tool = "${tool}" to ptb.config.json`);
226
+ }
227
+ logger.info(`Docs tool: ${C.cyan}${tool}${C.reset}`);
228
+ // ── Storybook: ensure .storybook/ config exists ───────────────────────
229
+ if (tool === "storybook") {
230
+ await ensureStorybookSetup(config);
231
+ }
232
+ // ── Resolve format (Storybook only — others always produce MDX) ───────
233
+ let format = "mdx";
234
+ if (tool === "storybook") {
235
+ if (options.format === "mdx" || options.format === "stories" || options.format === "both") {
236
+ format = options.format;
237
+ }
238
+ else if (config.docs?.format === "mdx" || config.docs?.format === "stories" || config.docs?.format === "both") {
239
+ // Use saved preference — skip the prompt
240
+ format = config.docs.format;
241
+ logger.dim(` Format: ${format} (saved — use --format to override)`);
242
+ }
243
+ else {
244
+ format = await promptFormat();
245
+ await saveDocsConfigEntry({ format });
246
+ }
247
+ logger.info(`Format: ${C.cyan}${format}${C.reset}`);
248
+ }
249
+ const reverseDepsMap = buildReverseDepsMap(snapshot);
250
+ if (name === "." || name === "*") {
251
+ const components = snapshot.components;
252
+ logger.info(`Documenting all ${components.length} components...`);
253
+ for (const component of components) {
254
+ logger.info(`\n→ ${component.name}`);
255
+ const usedBy = [...new Set(reverseDepsMap.get(component.id) ?? [])];
256
+ await documentSingleComponent(component, { ...options, format }, config, snapshot, tool, usedBy);
257
+ }
258
+ logger.success("All components documented.");
259
+ return;
260
+ }
261
+ const resolution = resolveComponent(name, snapshot.components, config);
262
+ const component = resolution.exactMatch;
263
+ if (!component) {
264
+ logger.error(`Component '${name}' not found.`);
265
+ return;
266
+ }
267
+ logger.info(`Documenting: ${C.cyan}${component.name}${C.reset}`);
268
+ const usedBy = [...new Set(reverseDepsMap.get(component.id) ?? [])];
269
+ await documentSingleComponent(component, { ...options, format }, config, snapshot, tool, usedBy);
270
+ }
271
+ catch (error) {
272
+ logger.error(error.message || String(error));
273
+ process.exit(1);
274
+ }
275
+ }
276
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/commands/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Handler for 'ptb export context'
3
+ * Exports all component context files to .ptb/context/components/
4
+ */
5
+ export declare function exportContextCommand(): Promise<void>;
6
+ /**
7
+ * Handler for 'ptb export context component <name>'
8
+ * Exports a single component's context file.
9
+ */
10
+ export declare function exportContextComponentCommand(name: string): Promise<void>;
11
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,wBAAsB,oBAAoB,kBAuBzC;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,MAAM,iBAwC/D"}
@@ -0,0 +1,74 @@
1
+ import { loadConfig, loadLatestSnapshot, loadManifest, exportAllComponentContexts, resolveComponent, exportComponentContext, rebuildContextIndexFromDisk } from "@calibrate-ds/core";
2
+ import { logger } from "../utils/logger.js";
3
+ import { ensureGitignore } from "../utils/gitignore.js";
4
+ /**
5
+ * Handler for 'ptb export context'
6
+ * Exports all component context files to .ptb/context/components/
7
+ */
8
+ export async function exportContextCommand() {
9
+ try {
10
+ const config = await loadConfig();
11
+ const snapshot = await loadLatestSnapshot(config);
12
+ const manifest = await loadManifest(config).catch(() => undefined); // Manifest might not exist yet
13
+ if (!snapshot || !snapshot.components) {
14
+ logger.warn("No snapshot found. Please run 'ptb scan' first.");
15
+ return;
16
+ }
17
+ logger.info("Exporting all component context files...");
18
+ const paths = await exportAllComponentContexts(snapshot, config, manifest);
19
+ await ensureGitignore(process.cwd()).catch(() => { });
20
+ logger.success(`Exported ${paths.length} components to .ptb/context/components/`);
21
+ logger.info("Index written to .ptb/context/components/index.json");
22
+ logger.dim("\n Commit these files so your team can use ptb without Figma access:");
23
+ logger.dim(" git add .ptb/context/ ptb.lock && git commit -m \"chore: update design system context\"");
24
+ }
25
+ catch (error) {
26
+ logger.error(error.message || String(error));
27
+ process.exit(1);
28
+ }
29
+ }
30
+ /**
31
+ * Handler for 'ptb export context component <name>'
32
+ * Exports a single component's context file.
33
+ */
34
+ export async function exportContextComponentCommand(name) {
35
+ try {
36
+ const config = await loadConfig();
37
+ const snapshot = await loadLatestSnapshot(config);
38
+ const manifest = await loadManifest(config).catch(() => undefined);
39
+ if (!snapshot || !snapshot.components) {
40
+ logger.warn("No snapshot found. Please run 'ptb scan' first.");
41
+ return;
42
+ }
43
+ const resolution = resolveComponent(name, snapshot.components, config);
44
+ const component = resolution.exactMatch;
45
+ if (!component) {
46
+ logger.error(`Component '${name}' not found.`);
47
+ if (resolution.suggestions && resolution.suggestions.length > 0) {
48
+ logger.info("Did you mean:");
49
+ resolution.suggestions.forEach((s) => logger.dim(` - ${s}`));
50
+ }
51
+ else {
52
+ logger.info("Available components:");
53
+ const availableNames = snapshot.components.map((c) => c.name).sort();
54
+ availableNames.forEach((n) => logger.dim(` - ${n}`));
55
+ }
56
+ return;
57
+ }
58
+ const filePath = await exportComponentContext(component.id, snapshot, config, manifest);
59
+ if (filePath) {
60
+ // Rebuild index from disk to include this new/updated export
61
+ await rebuildContextIndexFromDisk(config);
62
+ logger.success(`Exported context for '${component.name}' to ${filePath}`);
63
+ logger.info("Index updated at .ptb/context/components/index.json");
64
+ }
65
+ else {
66
+ logger.error(`Failed to export context for '${component.name}'`);
67
+ }
68
+ }
69
+ catch (error) {
70
+ logger.error(error.message || String(error));
71
+ process.exit(1);
72
+ }
73
+ }
74
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function generateComponentsCommand(name?: string, options?: {
2
+ force?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=generate-components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-components.d.ts","sourceRoot":"","sources":["../../src/commands/generate-components.ts"],"names":[],"mappings":"AAIA,wBAAsB,yBAAyB,CAC3C,IAAI,GAAE,MAAY,EAClB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,iBAwEpC"}
@@ -0,0 +1,62 @@
1
+ import { loadConfig, loadLatestSnapshot, syncManifestWithReport, getGenerator, resolveComponent } from "@calibrate-ds/core";
2
+ import { logger } from "../utils/logger.js";
3
+ export async function generateComponentsCommand(name = ".", options = {}) {
4
+ try {
5
+ logger.info("Loading config...");
6
+ const config = await loadConfig();
7
+ logger.info("Loading latest Design System Model snapshot...");
8
+ const snapshot = await loadLatestSnapshot(config);
9
+ if (!snapshot) {
10
+ logger.error("No design system snapshot found. Run 'ptb scan' first.");
11
+ process.exit(1);
12
+ }
13
+ const allComponents = snapshot.components || [];
14
+ if (allComponents.length === 0) {
15
+ logger.warn("No components available in the current model. Run 'ptb scan' or update your selection.");
16
+ process.exit(0);
17
+ }
18
+ // Dot/wildcard → all components; otherwise resolve the named component
19
+ let targets;
20
+ if (name === "." || name === "*") {
21
+ targets = allComponents;
22
+ }
23
+ else {
24
+ const resolution = resolveComponent(name, allComponents, config);
25
+ if (!resolution.exactMatch) {
26
+ logger.error(`Component '${name}' not found.`);
27
+ if (resolution.suggestions?.length > 0) {
28
+ logger.info("Did you mean:");
29
+ resolution.suggestions.forEach((s) => logger.dim(` - ${s}`));
30
+ }
31
+ else {
32
+ logger.info("Available components:");
33
+ allComponents.map((c) => c.name).sort().forEach((n) => logger.dim(` - ${n}`));
34
+ }
35
+ process.exit(1);
36
+ }
37
+ targets = [resolution.exactMatch];
38
+ }
39
+ const forceNames = options.force ? targets.map((c) => c.name) : undefined;
40
+ if (options.force) {
41
+ logger.info(`Force mode — overwriting ${targets.length} component(s).`);
42
+ }
43
+ logger.info(`Generating structure for ${targets.length} component(s)...`);
44
+ // Scope the snapshot to only the target components when a single component is requested
45
+ const scopedSnapshot = targets.length === allComponents.length
46
+ ? snapshot
47
+ : { ...snapshot, components: targets };
48
+ const generator = getGenerator(config.framework.name || "react");
49
+ const report = await generator.writeComponents(scopedSnapshot, config, forceNames ? { forceOverwriteComponents: forceNames } : undefined);
50
+ await syncManifestWithReport(config, report);
51
+ logger.success(`${config.framework.name} Components generation complete!`);
52
+ logger.dim(`- Created files: ${report.createdFiles.length}`);
53
+ if (report.skippedFiles.length > 0) {
54
+ logger.dim(`- Skipped files (already exist): ${report.skippedFiles.length}`);
55
+ }
56
+ }
57
+ catch (error) {
58
+ logger.error(error.message || String(error));
59
+ process.exit(1);
60
+ }
61
+ }
62
+ //# sourceMappingURL=generate-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-components.js","sourceRoot":"","sources":["../../src/commands/generate-components.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function generateCompositesCommand(): Promise<void>;
2
+ //# sourceMappingURL=generate-composites.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-composites.d.ts","sourceRoot":"","sources":["../../src/commands/generate-composites.ts"],"names":[],"mappings":"AAGA,wBAAsB,yBAAyB,kBAiC9C"}
@@ -0,0 +1,31 @@
1
+ import { loadConfig, loadLatestSnapshot, writeComposites } from "@ptb/core";
2
+ import { logger } from "../utils/logger.js";
3
+ export async function generateCompositesCommand() {
4
+ try {
5
+ logger.info("Loading config...");
6
+ const config = await loadConfig();
7
+ logger.info("Loading latest Design System Model snapshot...");
8
+ const snapshot = await loadLatestSnapshot(config);
9
+ if (!snapshot) {
10
+ logger.error("No design system snapshot found. Run 'ptb scan' first.");
11
+ process.exit(1);
12
+ }
13
+ const compositeComponents = (snapshot.components || []).filter(c => !!c.composite);
14
+ if (compositeComponents.length === 0) {
15
+ logger.warn("No composite layout structures available in the current model.");
16
+ process.exit(0);
17
+ }
18
+ logger.info(`Generating ${compositeComponents.length} Composite layout scaffolds mapping abstractions locally natively...`);
19
+ const report = await writeComposites(snapshot, config);
20
+ logger.success("React Composites layout generation complete!");
21
+ logger.dim(`- Created files: ${report.createdFiles.length}`);
22
+ if (report.skippedFiles.length > 0) {
23
+ logger.dim(`- Skipped files (already exist): ${report.skippedFiles.length}`);
24
+ }
25
+ }
26
+ catch (error) {
27
+ logger.error(error.message || String(error));
28
+ process.exit(1);
29
+ }
30
+ }
31
+ //# sourceMappingURL=generate-composites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-composites.js","sourceRoot":"","sources":["../../src/commands/generate-composites.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC3C,IAAI,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAElC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,mBAAmB,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEnF,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,cAAc,mBAAmB,CAAC,MAAM,sEAAsE,CAAC,CAAC;QAC5H,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEvD,MAAM,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,CAAC;IAEL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function generateTokensCommand(): Promise<void>;
2
+ //# sourceMappingURL=generate-tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-tokens.d.ts","sourceRoot":"","sources":["../../src/commands/generate-tokens.ts"],"names":[],"mappings":"AAGA,wBAAsB,qBAAqB,kBAmD1C"}
@@ -0,0 +1,48 @@
1
+ import { loadConfig, loadLatestSnapshot, getGenerator } from "@calibrate-ds/core";
2
+ import { logger } from "../utils/logger.js";
3
+ export async function generateTokensCommand() {
4
+ try {
5
+ logger.info("Loading config...");
6
+ const config = await loadConfig();
7
+ logger.info("Loading latest Design System Model snapshot...");
8
+ const snapshot = await loadLatestSnapshot(config);
9
+ if (!snapshot) {
10
+ logger.error("No design system snapshot found. Run 'ptb scan' first.");
11
+ process.exit(1);
12
+ }
13
+ if (!snapshot.tokens || snapshot.tokens.length === 0) {
14
+ logger.warn("No tokens available in the current model. Run 'ptb scan' or import tokens first.");
15
+ process.exit(0);
16
+ }
17
+ logger.info(`Generating token files from ${snapshot.tokens.length} collections...`);
18
+ // Use the registered generator
19
+ const generator = getGenerator(config.framework.name || "react");
20
+ const report = await generator.writeTokens(snapshot, config);
21
+ logger.success("Token generation complete!");
22
+ logger.dim(`- Created files: ${report.createdFiles.length}`);
23
+ if (report.skippedFiles.length > 0) {
24
+ logger.dim(`- Skipped files (already exist): ${report.skippedFiles.length}`);
25
+ }
26
+ logger.info(`- Resolved ${report.metrics.resolved} tokens`);
27
+ if (report.metrics.withUnits > 0) {
28
+ logger.dim(` - Applied px units to ${report.metrics.withUnits} dimension tokens`);
29
+ }
30
+ if (report.metrics.unitless > 0) {
31
+ logger.dim(` - Emitted ${report.metrics.unitless} unitless numeric tokens`);
32
+ }
33
+ if (report.metrics.unresolved > 0) {
34
+ logger.warn(` - Skipped ${report.metrics.unresolved} unresolved references`);
35
+ }
36
+ if (report.metrics.nonScalar > 0) {
37
+ logger.dim(` - Skipped ${report.metrics.nonScalar} structured tokens`);
38
+ }
39
+ if (report.metrics.cycles > 0) {
40
+ logger.error(` - Detected ${report.metrics.cycles} resolution cycles`);
41
+ }
42
+ }
43
+ catch (error) {
44
+ logger.error(error.message || String(error));
45
+ process.exit(1);
46
+ }
47
+ }
48
+ //# sourceMappingURL=generate-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-tokens.js","sourceRoot":"","sources":["../../src/commands/generate-tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function helpCommand(topic?: string): void;
2
+ //# sourceMappingURL=help-topics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-topics.d.ts","sourceRoot":"","sources":["../../src/commands/help-topics.ts"],"names":[],"mappings":"AAgWA,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAoBhD"}