@explorer02/cfm-survey-sdk 0.0.1 → 0.0.3

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 (101) hide show
  1. package/dist/cli/const.d.ts +24 -0
  2. package/dist/cli/const.d.ts.map +1 -0
  3. package/dist/cli/const.js +31 -0
  4. package/dist/cli/const.js.map +1 -0
  5. package/dist/cli/constants.d.ts +9 -0
  6. package/dist/cli/constants.js +12 -0
  7. package/dist/cli/deploy.d.ts.map +1 -1
  8. package/dist/cli/deploy.js +10 -189
  9. package/dist/cli/deploy.js.map +1 -1
  10. package/dist/cli/index.js +19 -10
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/init.d.ts +2 -0
  13. package/dist/cli/init.d.ts.map +1 -0
  14. package/dist/cli/init.js +405 -0
  15. package/dist/cli/init.js.map +1 -0
  16. package/dist/cli/utils/exec.d.ts +4 -0
  17. package/dist/cli/utils/exec.d.ts.map +1 -0
  18. package/dist/cli/utils/exec.js +41 -0
  19. package/dist/cli/utils/exec.js.map +1 -0
  20. package/dist/cli/utils/nodeCheck.d.ts +2 -0
  21. package/dist/cli/utils/nodeCheck.d.ts.map +1 -0
  22. package/dist/cli/utils/nodeCheck.js +64 -0
  23. package/dist/cli/utils/nodeCheck.js.map +1 -0
  24. package/dist/cli/utils/prompts.d.ts +2 -0
  25. package/dist/cli/utils/prompts.d.ts.map +1 -0
  26. package/dist/cli/utils/prompts.js +29 -0
  27. package/dist/cli/utils/prompts.js.map +1 -0
  28. package/dist/cli/utils/vercelCliCheck.d.ts +6 -0
  29. package/dist/cli/utils/vercelCliCheck.d.ts.map +1 -0
  30. package/dist/cli/utils/vercelCliCheck.js +38 -0
  31. package/dist/cli/utils/vercelCliCheck.js.map +1 -0
  32. package/dist/cli/utils/vercelDeploy.d.ts +2 -0
  33. package/dist/cli/utils/vercelDeploy.d.ts.map +1 -0
  34. package/dist/cli/utils/vercelDeploy.js +21 -0
  35. package/dist/cli/utils/vercelDeploy.js.map +1 -0
  36. package/dist/cli/utils/vercelLoginCheck.d.ts +2 -0
  37. package/dist/cli/utils/vercelLoginCheck.d.ts.map +1 -0
  38. package/dist/cli/utils/vercelLoginCheck.js +42 -0
  39. package/dist/cli/utils/vercelLoginCheck.js.map +1 -0
  40. package/package.json +8 -2
  41. package/postinstall.js +45 -0
  42. package/templates/AGENT.md +1281 -0
  43. package/src/analytics/analyticsTracker.ts +0 -48
  44. package/src/analytics/types.ts +0 -80
  45. package/src/cli/deploy.ts +0 -205
  46. package/src/cli/index.ts +0 -33
  47. package/src/fetchSurvey/internalTypes.ts +0 -80
  48. package/src/fetchSurvey/logger/fetchLogger.ts +0 -34
  49. package/src/fetchSurvey/logger/mapperLogger.ts +0 -13
  50. package/src/fetchSurvey/telemetry/fetchTelemetry.ts +0 -26
  51. package/src/fetchSurvey/types.ts +0 -82
  52. package/src/fetchSurvey/useFetchSurvey.ts +0 -126
  53. package/src/fetchSurvey/utils/constants.ts +0 -11
  54. package/src/fetchSurvey/utils/extractSurveyLanguages.ts +0 -63
  55. package/src/fetchSurvey/utils/index.ts +0 -7
  56. package/src/fetchSurvey/utils/mapSurveyPages.ts +0 -35
  57. package/src/fetchSurvey/utils/mappers/index.ts +0 -2
  58. package/src/fetchSurvey/utils/mappers/questionMapper.ts +0 -213
  59. package/src/fetchSurvey/utils/mappers/surveyMapper.ts +0 -69
  60. package/src/fetchSurvey/utils/url.ts +0 -21
  61. package/src/index.ts +0 -6
  62. package/src/logger/logger.ts +0 -71
  63. package/src/queryClient.ts +0 -67
  64. package/src/submitSurvey/logger/resolutionLogger.ts +0 -13
  65. package/src/submitSurvey/logger/submitLogger.ts +0 -51
  66. package/src/submitSurvey/telemetry/submitTelemetry.ts +0 -33
  67. package/src/submitSurvey/types.ts +0 -51
  68. package/src/submitSurvey/useSubmitResponse.ts +0 -111
  69. package/src/submitSurvey/utils/constants.ts +0 -4
  70. package/src/submitSurvey/utils/formatters.ts +0 -33
  71. package/src/submitSurvey/utils/index.ts +0 -4
  72. package/src/submitSurvey/utils/url.ts +0 -17
  73. package/src/submitSurvey/utils/validation.ts +0 -48
  74. package/src/surveyPagination/actions/index.ts +0 -4
  75. package/src/surveyPagination/actions/useOnBack.ts +0 -37
  76. package/src/surveyPagination/actions/useOnChange.ts +0 -16
  77. package/src/surveyPagination/actions/useOnNext.ts +0 -99
  78. package/src/surveyPagination/actions/useOnSubmit.ts +0 -137
  79. package/src/surveyPagination/dispatchers/index.ts +0 -3
  80. package/src/surveyPagination/dispatchers/useCheckBacktrackChanges.ts +0 -35
  81. package/src/surveyPagination/dispatchers/useTrackOptionalSkips.ts +0 -21
  82. package/src/surveyPagination/dispatchers/useTrackPageTime.ts +0 -13
  83. package/src/surveyPagination/effects/index.ts +0 -2
  84. package/src/surveyPagination/effects/useResetPageStartTime.ts +0 -10
  85. package/src/surveyPagination/effects/useTrackMaxVisitedPage.ts +0 -12
  86. package/src/surveyPagination/logger/navigationLogger.ts +0 -25
  87. package/src/surveyPagination/logger/validationLogger.ts +0 -17
  88. package/src/surveyPagination/telemetry/pageTelemetry.ts +0 -22
  89. package/src/surveyPagination/telemetry/sessionTelemetry.ts +0 -55
  90. package/src/surveyPagination/types.ts +0 -42
  91. package/src/surveyPagination/useSurveyPagination.ts +0 -109
  92. package/src/surveyPagination/utils/index.ts +0 -2
  93. package/src/surveyPagination/utils/scroll.ts +0 -62
  94. package/src/surveyPagination/utils/validation.ts +0 -62
  95. package/src/surveyProgress/useSurveyProgress.ts +0 -42
  96. package/src/surveyProgress/utils/index.ts +0 -1
  97. package/src/surveyProgress/utils/progress.ts +0 -61
  98. package/src/surveySDK/constants.ts +0 -9
  99. package/src/surveySDK/types.ts +0 -22
  100. package/src/surveySDK/useSurveySDK.ts +0 -109
  101. package/tsconfig.json +0 -13
@@ -0,0 +1,405 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runInit = runInit;
7
+ const readline_1 = __importDefault(require("readline"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const const_1 = require("./const");
11
+ // ─────────────────────────────────────────────────────────────────────────────
12
+ // DEFAULTS — Used when client skips any question
13
+ // ─────────────────────────────────────────────────────────────────────────────
14
+ const DEFAULTS = {
15
+ companyName: 'Sprinklr',
16
+ surveyTitle: 'Customer Feedback Survey',
17
+ browserTabTitle: 'Customer Feedback Survey',
18
+ thankYouMessage: 'Thank you for your valuable feedback!',
19
+ logoUrl: 'https://www.aprimo.com/wp-content/uploads/2024/03/Sprinklr_Logo-1.png',
20
+ // Sprinklr-derived color palette (navy + teal)
21
+ colorScheme: {
22
+ primary: '#1A1F36',
23
+ secondary: '#E8F5FD',
24
+ accent: '#00B5AD',
25
+ background: '#FFFFFF',
26
+ text: '#1A1F36',
27
+ buttonText: '#FFFFFF',
28
+ },
29
+ placeholders: {
30
+ firstName: 'Unnat',
31
+ lastName: 'Agrawal',
32
+ email: 'unnat.agrawal@sprinklr.com',
33
+ },
34
+ debug: true,
35
+ deployToVercel: true,
36
+ };
37
+ // ─────────────────────────────────────────────────────────────────────────────
38
+ // TERMINAL HELPERS
39
+ // ─────────────────────────────────────────────────────────────────────────────
40
+ const c = const_1.colors;
41
+ // Shared readline interface — kept open for the entire wizard session
42
+ let rl;
43
+ function initReadline() {
44
+ rl = readline_1.default.createInterface({ input: process.stdin, output: process.stdout });
45
+ }
46
+ function closeReadline() {
47
+ rl.close();
48
+ }
49
+ /** Ask a single question and return the trimmed answer */
50
+ function ask(question) {
51
+ return new Promise((resolve) => rl.question(question, (ans) => resolve(ans.trim())));
52
+ }
53
+ /** Print an empty line */
54
+ const br = () => console.log('');
55
+ /** Print a styled section header */
56
+ function section(label) {
57
+ br();
58
+ console.log(`${c.bold}${c.bgBlue}${c.white} ${label} ${c.reset}`);
59
+ br();
60
+ }
61
+ /** Print a styled banner */
62
+ function printBanner() {
63
+ br();
64
+ console.log(`${c.bold}${c.cyan}╔═══════════════════════════════════════════════════════╗${c.reset}`);
65
+ console.log(`${c.bold}${c.cyan}║ CFM Survey SDK — Setup Wizard 🚀 ║${c.reset}`);
66
+ console.log(`${c.bold}${c.cyan}╚═══════════════════════════════════════════════════════╝${c.reset}`);
67
+ br();
68
+ console.log(`${c.dim}This short wizard helps configure your personalised survey.${c.reset}`);
69
+ console.log(`${c.dim}Every question is optional — just press ${c.bold}Enter${c.reset}${c.dim} to use the smart default.${c.reset}`);
70
+ br();
71
+ }
72
+ /** Print a labelled optional prompt and return raw answer */
73
+ async function optionalAsk(num, label, hint, defaultLabel) {
74
+ const defaultStr = defaultLabel ? ` ${c.dim}(default: ${defaultLabel})${c.reset}` : '';
75
+ const optionalTag = `${c.dim}[optional]${c.reset}`;
76
+ console.log(`${c.bold}${c.yellow}${num}.${c.reset} ${c.bold}${label}${c.reset} ${optionalTag}`);
77
+ console.log(` ${c.dim}${hint}${c.reset}${defaultStr}`);
78
+ const ans = await ask(` ${c.cyan}›${c.reset} `);
79
+ br();
80
+ return ans;
81
+ }
82
+ /** Print a labelled required prompt */
83
+ async function requiredAsk(num, label, hint, defaultLabel) {
84
+ const defaultStr = defaultLabel ? ` ${c.dim}(default: ${defaultLabel})${c.reset}` : '';
85
+ console.log(`${c.bold}${c.yellow}${num}.${c.reset} ${c.bold}${label}${c.reset} ${c.red}[recommended]${c.reset}`);
86
+ console.log(` ${c.dim}${hint}${c.reset}${defaultStr}`);
87
+ const ans = await ask(` ${c.cyan}›${c.reset} `);
88
+ br();
89
+ return ans;
90
+ }
91
+ /** Yes/No prompt — returns boolean */
92
+ async function yesNo(num, label, hint, defaultYes = true) {
93
+ const defaultStr = defaultYes ? 'y' : 'n';
94
+ console.log(`${c.bold}${c.yellow}${num}.${c.reset} ${c.bold}${label}${c.reset} ${c.dim}[optional]${c.reset}`);
95
+ console.log(` ${c.dim}${hint}${c.reset}`);
96
+ const ans = await ask(` ${c.cyan}›${c.reset} ${c.dim}(y/n, default: ${defaultStr})${c.reset} `);
97
+ br();
98
+ if (!ans)
99
+ return defaultYes;
100
+ return ans.toLowerCase() === 'y';
101
+ }
102
+ /** Pick from a numbered menu — returns the number typed */
103
+ async function menu(num, label, options) {
104
+ console.log(`${c.bold}${c.yellow}${num}.${c.reset} ${c.bold}${label}${c.reset}`);
105
+ options.forEach((opt, i) => {
106
+ console.log(` ${c.cyan}${i + 1})${c.reset} ${opt}`);
107
+ });
108
+ console.log(` ${c.dim}↵ Press Enter to skip / use smart default${c.reset}`);
109
+ const ans = await ask(` ${c.cyan}›${c.reset} `);
110
+ br();
111
+ return ans;
112
+ }
113
+ /** Validate and normalise a hex color string */
114
+ function normaliseHex(input, fallback) {
115
+ if (!input)
116
+ return fallback;
117
+ let hex = input.trim();
118
+ if (!hex.startsWith('#'))
119
+ hex = '#' + hex;
120
+ if (/^#[0-9A-Fa-f]{3,8}$/.test(hex))
121
+ return hex.toUpperCase();
122
+ console.log(` ${c.yellow}⚠️ Invalid hex — using default ${fallback}${c.reset}`);
123
+ return fallback;
124
+ }
125
+ /** Print the 5 professionally generated colour schemes */
126
+ function printColorSchemes(logoColor) {
127
+ const schemes = [
128
+ {
129
+ name: 'Industry Standard (Indigo + Amber)',
130
+ primary: '#4F46E5', secondary: '#E0E7FF', accent: '#F59E0B', bg: '#FFFFFF', text: '#111827',
131
+ },
132
+ {
133
+ name: 'Minimalist (Slate + Teal)',
134
+ primary: '#334155', secondary: '#F1F5F9', accent: '#0D9488', bg: '#FFFFFF', text: '#0F172A',
135
+ },
136
+ {
137
+ name: 'Warm Corporate (Amber + Brown)',
138
+ primary: '#B45309', secondary: '#FEF3C7', accent: '#D97706', bg: '#FFFBEB', text: '#1C1917',
139
+ },
140
+ {
141
+ name: 'Modern Dark (Violet + Green)',
142
+ primary: '#7C3AED', secondary: '#EDE9FE', accent: '#10B981', bg: '#FFFFFF', text: '#111827',
143
+ },
144
+ {
145
+ name: logoColor
146
+ ? `Brand Match (from your logo — ${logoColor})`
147
+ : 'Professional Blue (Navy + Sky)',
148
+ primary: logoColor ?? '#1E3A5F',
149
+ secondary: '#DBEAFE',
150
+ accent: logoColor ?? '#0284C7',
151
+ bg: '#FFFFFF',
152
+ text: '#1E293B',
153
+ },
154
+ ];
155
+ br();
156
+ console.log(`${c.bold}${c.underline} Here are 5 suggested color schemes:${c.reset}`);
157
+ br();
158
+ schemes.forEach((s, i) => {
159
+ console.log(` ${c.bold}${c.cyan}${i + 1}) ${s.name}${c.reset}`);
160
+ console.log(` ${c.dim}Primary:${c.reset} ${c.bold}${s.primary}${c.reset}`);
161
+ console.log(` ${c.dim}Secondary:${c.reset} ${s.secondary}`);
162
+ console.log(` ${c.dim}Accent:${c.reset} ${c.bold}${s.accent}${c.reset}`);
163
+ console.log(` ${c.dim}Background:${c.reset} ${s.bg} ${c.dim}Text:${c.reset} ${s.text}`);
164
+ br();
165
+ });
166
+ return schemes;
167
+ }
168
+ /** Print the final summary before saving */
169
+ function printSummary(cfg) {
170
+ br();
171
+ console.log(`${c.bold}${c.bgGreen}${c.black} ✅ Configuration Summary ${c.reset}`);
172
+ br();
173
+ const print = (key, val) => console.log(` ${c.bold}${key.padEnd(22)}${c.reset} ${c.green}${JSON.stringify(val)}${c.reset}`);
174
+ Object.entries(cfg).filter(([k]) => k !== 'configuredAt').forEach(([k, v]) => print(k, v));
175
+ br();
176
+ }
177
+ // ─────────────────────────────────────────────────────────────────────────────
178
+ // MAIN WIZARD
179
+ // ─────────────────────────────────────────────────────────────────────────────
180
+ async function runInit() {
181
+ initReadline();
182
+ printBanner();
183
+ // ── PHASE 0 — Mockup detection ──────────────────────────────────────────
184
+ section('PHASE 0 of 7 │ Mockup Detection');
185
+ console.log(`${c.dim}This helps the AI Agent understand whether to analyse your screenshots or design from scratch.${c.reset}`);
186
+ br();
187
+ const hasMockupStr = await optionalAsk('0', 'Did you share any UI mockup screenshots / images with the AI Agent in the IDE chat?', 'If yes, the agent will analyse them and replicate the visual design exactly.', 'n');
188
+ const hasMockup = hasMockupStr.toLowerCase() === 'y';
189
+ console.log(hasMockup
190
+ ? ` ${c.green}✔ Great! The AI Agent will analyse your mockups for exact visual replication.${c.reset}`
191
+ : ` ${c.yellow}ℹ No mockups — the agent will design a clean professional UI from scratch.${c.reset}`);
192
+ br();
193
+ // ── PHASE 1 — Survey Identity ────────────────────────────────────────────
194
+ section('PHASE 1 of 7 │ Survey Identity');
195
+ console.log(`${c.dim}These details personalise the survey. All optional — smart defaults are used if skipped.${c.reset}`);
196
+ br();
197
+ const surveyTitle = (await optionalAsk('1', 'Survey Title', 'The heading displayed inside the survey page.', DEFAULTS.surveyTitle)) || DEFAULTS.surveyTitle;
198
+ const companyName = (await optionalAsk('2', 'Company / Organisation Name', 'Shown in the header or footer.', DEFAULTS.companyName)) || DEFAULTS.companyName;
199
+ const browserTabTitle = (await optionalAsk('3', 'Browser Tab Title', 'Text shown in the browser tab (the <title> tag).', DEFAULTS.browserTabTitle)) || DEFAULTS.browserTabTitle;
200
+ const thankYouMessage = (await optionalAsk('4', 'Thank-You Message', 'Displayed after the survey is submitted.', DEFAULTS.thankYouMessage)) || DEFAULTS.thankYouMessage;
201
+ // ── PHASE 2 — Logo ──────────────────────────────────────────────────────
202
+ section('PHASE 2 of 7 │ Logo Setup');
203
+ const publicDir = path_1.default.join(process.cwd(), 'public');
204
+ if (!fs_1.default.existsSync(publicDir)) {
205
+ fs_1.default.mkdirSync(publicDir, { recursive: true });
206
+ }
207
+ console.log(`${c.green}✅ A ${c.bold}public/${c.reset}${c.green} folder has been created in your project for static files like your logo.${c.reset}`);
208
+ br();
209
+ console.log(` ${c.dim}If you have a logo file (PNG / SVG / JPG), drop it into the${c.reset} ${c.bold}public/${c.reset} ${c.dim}folder now.${c.reset}`);
210
+ br();
211
+ const logoFileName = await optionalAsk('5', 'Logo filename inside public/', 'e.g. "logo.png" — Leave blank to use the default Sprinklr logo or no logo.', 'none');
212
+ const resolvedLogo = logoFileName || null;
213
+ // ── PHASE 3 — UI Layout & Customisation ─────────────────────────────────
214
+ section('PHASE 3 of 7 │ UI Layout & Customisation');
215
+ console.log(`${c.dim}Configure the visual layout of your survey. All optional.${c.reset}`);
216
+ console.log(`${c.bold}${c.red}Note:${c.reset}${c.dim} Your answers here override anything shown in the mockup screenshots.${c.reset}`);
217
+ br();
218
+ const showHeader = await yesNo('6', 'Show a header bar at the top of the survey?', 'e.g. company name, logo.', true);
219
+ const showFooter = await yesNo('7', 'Show a footer at the bottom?', 'e.g. Privacy Policy, copyright notice.', true);
220
+ const showProgressBar = await yesNo('8', 'Show a progress bar showing survey completion?', 'Helps users see how far along they are.', true);
221
+ const showLanguageSwitcher = await yesNo('9', 'Show a language switcher for multi-language support?', 'Only needed if the survey supports multiple languages.', false);
222
+ const showBackButton = await yesNo('10', 'Allow users to go back to previous questions?', 'Shows a "Back" button between pages.', true);
223
+ // Additional customisation options
224
+ const layoutWidthRaw = await menu('11', 'Survey content width', [
225
+ 'Narrow (max-w-xl — compact, focussed)',
226
+ 'Standard (max-w-3xl — balanced)',
227
+ 'Wide (max-w-5xl — spacious, desktop-first)',
228
+ ]);
229
+ const widthMap = { '1': 'narrow', '2': 'standard', '3': 'wide' };
230
+ const layoutWidth = widthMap[layoutWidthRaw] ?? 'standard';
231
+ const borderStyleRaw = await menu('12', 'Border / corner style', [
232
+ 'Sharp corners (square, corporate feel)',
233
+ 'Slightly rounded (modern, friendly)',
234
+ 'Fully rounded / pill (casual, soft)',
235
+ ]);
236
+ const borderMap = { '1': 'sharp', '2': 'rounded', '3': 'pill' };
237
+ const borderStyle = borderMap[borderStyleRaw] ?? 'rounded';
238
+ const fontStyleRaw = await menu('13', 'Font preference', [
239
+ 'System font (fastest, clean)',
240
+ 'Modern sans-serif (Inter / Roboto — recommended)',
241
+ 'Classic serif (Times-style, formal)',
242
+ ]);
243
+ const fontMap = { '1': 'system', '2': 'modern', '3': 'serif' };
244
+ const fontStyle = fontMap[fontStyleRaw] ?? 'modern';
245
+ const showQuestionNumbers = await yesNo('14', 'Show question numbers? (e.g. "Q1.", "Q2.")', 'Helps users track progress within a page.', true);
246
+ const showRequiredAsterisk = await yesNo('15', 'Mark required questions with an asterisk (*)?', 'Standard survey convention — highly recommended.', true);
247
+ const submitButtonText = (await optionalAsk('16', 'Submit button label', 'Text on the final submit button.', 'Submit')) || 'Submit';
248
+ const nextButtonText = (await optionalAsk('17', 'Next button label', 'Text on the "next page" button.', 'Next')) || 'Next';
249
+ const backButtonText = (await optionalAsk('18', 'Back button label', 'Text on the "previous page" button.', 'Back')) || 'Back';
250
+ const animationsEnabled = await yesNo('19', 'Enable smooth animations / transitions between pages?', 'Subtle fade transitions feel polished and modern.', true);
251
+ // ── PHASE 4 — Color Theme ────────────────────────────────────────────────
252
+ section('PHASE 4 of 7 │ Color Theme');
253
+ console.log(`${c.dim}Choose how the color scheme is determined. Leave blank for a smart default.${c.reset}`);
254
+ br();
255
+ const colorSourceRaw = await menu('20', 'How should the color theme be chosen?', [
256
+ `Extract colors from your mockup screenshots ${hasMockup ? c.green + '(you have mockups ✔)' + c.reset : c.dim + '(no mockups provided)' + c.reset}`,
257
+ 'Extract colors from your logo',
258
+ 'Let me choose a custom color scheme',
259
+ 'Agent picks the best professional scheme automatically',
260
+ ]);
261
+ let colorSource = 'auto';
262
+ let colorScheme = { ...DEFAULTS.colorScheme };
263
+ if (colorSourceRaw === '1' && hasMockup) {
264
+ colorSource = 'mockup';
265
+ console.log(` ${c.green}✔ The AI Agent will extract exact colors from your mockup screenshots.${c.reset}`);
266
+ br();
267
+ }
268
+ else if (colorSourceRaw === '2') {
269
+ colorSource = 'logo';
270
+ console.log(` ${c.green}✔ The AI Agent will derive the palette from your logo file.${c.reset}`);
271
+ br();
272
+ }
273
+ else if (colorSourceRaw === '3') {
274
+ colorSource = 'custom';
275
+ br();
276
+ const customModeRaw = await menu('20b', 'How would you like to provide your colors?', [
277
+ 'Show me 5 suggested professional color schemes to pick from',
278
+ 'I will type in my own hex color codes',
279
+ ]);
280
+ if (customModeRaw === '1') {
281
+ const schemes = printColorSchemes(DEFAULTS.colorScheme.primary);
282
+ const pick = await ask(` ${c.cyan}›${c.reset} ${c.dim}Type a number (1–5) to select a scheme, or Enter to let the agent decide:${c.reset} `);
283
+ br();
284
+ const idx = parseInt(pick, 10) - 1;
285
+ if (idx >= 0 && idx < schemes.length) {
286
+ const s = schemes[idx];
287
+ colorScheme = { primary: s.primary, secondary: s.secondary, accent: s.accent, background: s.bg, text: s.text, buttonText: '#FFFFFF' };
288
+ console.log(` ${c.green}✔ Scheme "${s.name}" selected.${c.reset}`);
289
+ }
290
+ else {
291
+ console.log(` ${c.yellow}ℹ No scheme selected — agent will auto-generate.${c.reset}`);
292
+ colorSource = 'auto';
293
+ }
294
+ }
295
+ else if (customModeRaw === '2') {
296
+ br();
297
+ console.log(` ${c.dim}Enter hex codes (e.g. #4F46E5). Press Enter on any to keep the default.${c.reset}`);
298
+ br();
299
+ const p = await optionalAsk('→', 'Primary color (main buttons, headers)', 'e.g. #4F46E5', DEFAULTS.colorScheme.primary);
300
+ const s = await optionalAsk('→', 'Secondary color (light backgrounds)', 'e.g. #E0E7FF', DEFAULTS.colorScheme.secondary);
301
+ const a = await optionalAsk('→', 'Accent color (highlights, links)', 'e.g. #F59E0B', DEFAULTS.colorScheme.accent);
302
+ const bg = await optionalAsk('→', 'Background color', 'e.g. #FFFFFF', DEFAULTS.colorScheme.background);
303
+ const tx = await optionalAsk('→', 'Text color', 'e.g. #111827', DEFAULTS.colorScheme.text);
304
+ colorScheme = {
305
+ primary: normaliseHex(p, DEFAULTS.colorScheme.primary),
306
+ secondary: normaliseHex(s, DEFAULTS.colorScheme.secondary),
307
+ accent: normaliseHex(a, DEFAULTS.colorScheme.accent),
308
+ background: normaliseHex(bg, DEFAULTS.colorScheme.background),
309
+ text: normaliseHex(tx, DEFAULTS.colorScheme.text),
310
+ buttonText: '#FFFFFF',
311
+ };
312
+ }
313
+ else {
314
+ colorSource = 'auto';
315
+ console.log(` ${c.yellow}ℹ Skipped — agent will auto-generate the best color scheme.${c.reset}`);
316
+ }
317
+ }
318
+ else {
319
+ colorSource = 'auto';
320
+ console.log(` ${c.yellow}ℹ Auto mode — agent will generate a professional palette based on your company/logo.${c.reset}`);
321
+ br();
322
+ }
323
+ // ── PHASE 5 — SDK Config Values ──────────────────────────────────────────
324
+ section('PHASE 5 of 7 │ Survey Data Configuration');
325
+ console.log(`${c.dim}The SDK uses placeholder values to personalise survey text (e.g. "Hi Unnat!").${c.reset}`);
326
+ console.log(`${c.dim}These are test values used during development — not shown to real respondents.${c.reset}`);
327
+ br();
328
+ const firstName = (await requiredAsk('21', 'Test First Name', 'Used to replace {{FIRST_NAME}} in survey questions.', DEFAULTS.placeholders.firstName)) || DEFAULTS.placeholders.firstName;
329
+ const lastName = (await requiredAsk('22', 'Test Last Name', 'Used to replace {{LAST_NAME}} in survey questions.', DEFAULTS.placeholders.lastName)) || DEFAULTS.placeholders.lastName;
330
+ const email = (await requiredAsk('23', 'Test Email Address', 'Used to replace {{EMAIL_ADDRESS}} in survey questions.', DEFAULTS.placeholders.email)) || DEFAULTS.placeholders.email;
331
+ br();
332
+ console.log(`${c.bold}${c.yellow}24.${c.reset} ${c.bold}Enable Debug / Test Mode?${c.reset} ${c.red}[recommended]${c.reset}`);
333
+ console.log(` ${c.dim}Debug mode shows extra technical information in the browser console.${c.reset}`);
334
+ console.log(` ${c.dim}✅ Turn ON while building and testing your survey.${c.reset}`);
335
+ console.log(` ${c.dim}❌ Turn OFF before going live (production mode).${c.reset}`);
336
+ const debugStr = await ask(` ${c.cyan}›${c.reset} ${c.dim}(y/n, default: y)${c.reset} `);
337
+ br();
338
+ const debug = !debugStr || debugStr.toLowerCase() !== 'n';
339
+ // ── PHASE 6 — Deployment ────────────────────────────────────────────────
340
+ section('PHASE 6 of 7 │ Deployment');
341
+ console.log(`${c.dim}Once the survey is built and tested, the agent can publish it live automatically.${c.reset}`);
342
+ br();
343
+ const deployToVercel = await yesNo('25', 'Automatically deploy to Vercel when the build is ready?', 'This publishes your survey live on the internet. You can also do this later.', true);
344
+ // ── PHASE 7 — Summary & Confirmation ───────────────────────────────────
345
+ section('PHASE 7 of 7 │ Review & Confirm');
346
+ const config = {
347
+ hasMockup,
348
+ surveyTitle,
349
+ companyName,
350
+ browserTabTitle,
351
+ thankYouMessage,
352
+ logo: {
353
+ fileName: resolvedLogo,
354
+ defaultUrl: resolvedLogo ? null : DEFAULTS.logoUrl,
355
+ },
356
+ layout: {
357
+ showHeader,
358
+ showFooter,
359
+ showProgressBar,
360
+ showLanguageSwitcher,
361
+ showBackButton,
362
+ width: layoutWidth,
363
+ borderStyle,
364
+ fontStyle,
365
+ showQuestionNumbers,
366
+ showRequiredAsterisk,
367
+ animationsEnabled,
368
+ },
369
+ buttons: {
370
+ submit: submitButtonText,
371
+ next: nextButtonText,
372
+ back: backButtonText,
373
+ },
374
+ colorSource,
375
+ colorScheme: colorSource === 'auto' ? DEFAULTS.colorScheme : colorScheme,
376
+ placeholders: { firstName, lastName, email },
377
+ debug,
378
+ deployToVercel,
379
+ configuredAt: new Date().toISOString(),
380
+ };
381
+ printSummary(config);
382
+ const confirm = await ask(`${c.bold}${c.green}Save this configuration and start building the survey? (y/n, default: y):${c.reset} `);
383
+ br();
384
+ closeReadline();
385
+ if (confirm.toLowerCase() === 'n') {
386
+ console.log(`${c.yellow}⚠️ Setup cancelled. Run ${c.bold}npx cfm-sdk init${c.reset}${c.yellow} again to restart.${c.reset}`);
387
+ br();
388
+ process.exit(0);
389
+ }
390
+ const configPath = path_1.default.join(process.cwd(), 'survey-config.json');
391
+ fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf8');
392
+ br();
393
+ console.log(`${c.bold}${c.green}✅ Configuration saved to:${c.reset} ${c.underline}${configPath}${c.reset}`);
394
+ br();
395
+ console.log(`${c.bold}${c.cyan}╔════════════════════════════════════════════════════════╗${c.reset}`);
396
+ console.log(`${c.bold}${c.cyan}║ 🎉 Setup complete! The AI Agent will now: ║${c.reset}`);
397
+ console.log(`${c.bold}${c.cyan}║ ║${c.reset}`);
398
+ console.log(`${c.bold}${c.cyan}║ 1. Read AGENT.md for full build instructions ║${c.reset}`);
399
+ console.log(`${c.bold}${c.cyan}║ 2. Read survey-config.json for your preferences ║${c.reset}`);
400
+ console.log(`${c.bold}${c.cyan}║ 3. Build the survey UI from scratch ║${c.reset}`);
401
+ console.log(`${c.bold}${c.cyan}║ 4. Verify and${deployToVercel ? ' deploy to Vercel automatically ' : ' ask you before deploying '}║${c.reset}`);
402
+ console.log(`${c.bold}${c.cyan}╚════════════════════════════════════════════════════════╝${c.reset}`);
403
+ br();
404
+ }
405
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function hasCommand(cmd: string): boolean;
2
+ export declare function runCommandSync(cmd: string, args: string[]): boolean;
3
+ export declare function runCommandInteractive(cmd: string, args: string[]): Promise<number | null>;
4
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/exec.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQ/C;AAGD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAQnE;AAGD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWzF"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasCommand = hasCommand;
4
+ exports.runCommandSync = runCommandSync;
5
+ exports.runCommandInteractive = runCommandInteractive;
6
+ const child_process_1 = require("child_process");
7
+ // Check if a shell executable is available in the user's system PATH
8
+ function hasCommand(cmd) {
9
+ try {
10
+ const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `command -v ${cmd}`;
11
+ (0, child_process_1.execSync)(checkCmd, { stdio: 'ignore' });
12
+ return true;
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ }
18
+ // Execute a command synchronously and capture output/return code
19
+ function runCommandSync(cmd, args) {
20
+ try {
21
+ const fullCmd = `${cmd} ${args.join(' ')}`;
22
+ (0, child_process_1.execSync)(fullCmd, { stdio: 'inherit', shell: true });
23
+ return true;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ // Spawn an interactive command that inherits stdin/stdout/stderr
30
+ function runCommandInteractive(cmd, args) {
31
+ return new Promise((resolve) => {
32
+ const child = (0, child_process_1.spawn)(cmd, args, {
33
+ stdio: 'inherit',
34
+ shell: true,
35
+ });
36
+ child.on('close', (code) => {
37
+ resolve(code);
38
+ });
39
+ });
40
+ }
41
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/cli/utils/exec.ts"],"names":[],"mappings":";;AAGA,gCAQC;AAGD,wCAQC;AAGD,sDAWC;AApCD,iDAAgD;AAEhD,qEAAqE;AACrE,SAAgB,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC;QACrF,IAAA,wBAAQ,EAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,SAAgB,cAAc,CAAC,GAAW,EAAE,IAAc;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,IAAA,wBAAQ,EAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAS,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,SAAgB,qBAAqB,CAAC,GAAW,EAAE,IAAc;IAC/D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,GAAG,EAAE,IAAI,EAAE;YAC7B,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function checkNodeVersion(): void;
2
+ //# sourceMappingURL=nodeCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeCheck.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/nodeCheck.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,IAAI,IAAI,CAqDvC"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkNodeVersion = checkNodeVersion;
4
+ const const_1 = require("../const");
5
+ const exec_1 = require("./exec");
6
+ function checkNodeVersion() {
7
+ const majorVersion = parseInt(process.version.slice(1).split('.')[0], 10);
8
+ console.log(`${const_1.colors.dim}Step 1/4: Checking Node.js version (current: ${process.version})...${const_1.colors.reset}`);
9
+ if (majorVersion < 18) {
10
+ console.log(`⚠️ ${const_1.colors.yellow}Outdated Node.js version detected. v18.0.0 or higher is required.${const_1.colors.reset}`);
11
+ const isWin = process.platform === 'win32';
12
+ const isMac = process.platform === 'darwin';
13
+ if (isWin) {
14
+ if ((0, exec_1.hasCommand)('winget')) {
15
+ console.log(`\n📦 ${const_1.colors.green}winget package manager found! Installing Node.js v18+ in background...${const_1.colors.reset}`);
16
+ const success = (0, exec_1.runCommandSync)('winget', ['upgrade', 'OpenJS.NodeJS', '--silent', '--accept-package-agreements', '--accept-source-agreements']);
17
+ if (success) {
18
+ console.log(`\n✔ ${const_1.colors.green}Node.js installation triggered successfully. Please restart your terminal/command-prompt for changes to take effect.${const_1.colors.reset}\n`);
19
+ process.exit(0);
20
+ }
21
+ else {
22
+ console.log(`\n❌ ${const_1.colors.red}winget update failed. Please update Node.js manually at https://nodejs.org/${const_1.colors.reset}\n`);
23
+ process.exit(1);
24
+ }
25
+ }
26
+ else {
27
+ console.log(`\n❌ ${const_1.colors.red}winget package manager is not installed on this system.${const_1.colors.reset}`);
28
+ console.log(`${const_1.colors.bold}👉 To proceed, please either:${const_1.colors.reset}`);
29
+ console.log(` 1. Install winget (App Installer) from the Microsoft Store.`);
30
+ console.log(` 2. Or manually download and install Node.js (v18+) from: https://nodejs.org/\n`);
31
+ process.exit(1);
32
+ }
33
+ }
34
+ else if (isMac) {
35
+ if ((0, exec_1.hasCommand)('brew')) {
36
+ console.log(`\n📦 ${const_1.colors.green}Homebrew package manager found! Installing Node.js v18+ in background...${const_1.colors.reset}`);
37
+ const success = (0, exec_1.runCommandSync)('brew', ['install', 'node']);
38
+ if (success) {
39
+ console.log(`\n✔ ${const_1.colors.green}Node.js installed successfully via Homebrew.${const_1.colors.reset}\n`);
40
+ }
41
+ else {
42
+ console.log(`\n❌ ${const_1.colors.red}Homebrew installation failed. Please install Node.js manually at https://nodejs.org/${const_1.colors.reset}\n`);
43
+ process.exit(1);
44
+ }
45
+ }
46
+ else {
47
+ console.log(`\n❌ ${const_1.colors.red}Homebrew package manager (brew) is not installed on this system.${const_1.colors.reset}`);
48
+ console.log(`${const_1.colors.bold}👉 To proceed, please either:${const_1.colors.reset}`);
49
+ console.log(` 1. Install Homebrew by running the following command in your terminal:`);
50
+ console.log(` ${const_1.colors.cyan}/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"${const_1.colors.reset}`);
51
+ console.log(` 2. Or manually download and install Node.js (v18+) from: https://nodejs.org/\n`);
52
+ process.exit(1);
53
+ }
54
+ }
55
+ else {
56
+ console.log(`\n❌ ${const_1.colors.red}Please install or update Node.js to v18+ using your system's package manager.${const_1.colors.reset}\n`);
57
+ process.exit(1);
58
+ }
59
+ }
60
+ else {
61
+ console.log(`✔ ${const_1.colors.green}Node.js version (v${majorVersion}) is sufficient.${const_1.colors.reset}`);
62
+ }
63
+ }
64
+ //# sourceMappingURL=nodeCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeCheck.js","sourceRoot":"","sources":["../../../src/cli/utils/nodeCheck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function askQuestion(query: string): Promise<string>;
2
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/prompts.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.askQuestion = askQuestion;
7
+ const promises_1 = __importDefault(require("readline/promises"));
8
+ const process_1 = require("process");
9
+ async function askQuestion(query) {
10
+ const rl = promises_1.default.createInterface({ input: process_1.stdin, output: process_1.stdout });
11
+ try {
12
+ return (await rl.question(query)).trim();
13
+ }
14
+ finally {
15
+ rl.close();
16
+ }
17
+ }
18
+ // rl.question(query): Prints the question (query) to the screen and waits.
19
+ // await: Pauses the program right here.
20
+ // The execution is frozen until the user types their answer and hits the [Enter] key.
21
+ // .trim(): Removes any accidental whitespace (spaces or tabs)
22
+ // from the beginning or end of the user's input (e.g., " yes " becomes "yes").
23
+ // rl.close() (Crucial Step):
24
+ // Closes the keyboard read stream and frees up system resources.
25
+ // Why it's in finally: If you do not close readline,
26
+ // Node.js will think you still want to listen to the keyboard,
27
+ // and the terminal process will freeze/hang forever even after your script finishes.
28
+ // Placing it in finally guarantees it closes even if an error occurs.
29
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/utils/prompts.ts"],"names":[],"mappings":";;;;;AAGA,kCAOC;AAVD,iEAAyC;AACzC,qCAA2D;AAEpD,KAAK,UAAU,WAAW,CAAC,KAAa;IAC7C,MAAM,EAAE,GAAG,kBAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAL,eAAK,EAAE,MAAM,EAAN,gBAAM,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AACD,2EAA2E;AAC3E,yCAAyC;AACzC,sFAAsF;AACtF,+DAA+D;AAC/D,iFAAiF;AACjF,6BAA6B;AAC7B,iEAAiE;AACjE,qDAAqD;AACrD,gEAAgE;AAChE,sFAAsF;AACtF,sEAAsE"}
@@ -0,0 +1,6 @@
1
+ export type VercelCliContext = {
2
+ vercelCmd: string;
3
+ useNpx: boolean;
4
+ };
5
+ export declare function checkVercelCli(): Promise<VercelCliContext>;
6
+ //# sourceMappingURL=vercelCliCheck.d.ts.map