framer-export 4.3.0 → 4.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -15,7 +15,7 @@ var init_package = __esm({
15
15
  "package.json"() {
16
16
  package_default = {
17
17
  name: "framer-export",
18
- version: "4.3.0",
18
+ version: "4.3.7",
19
19
  description: "Export any Framer, Webflow, or Wix site into a fully working local mirror. Downloads all assets, strips badges, rewrites URLs, and pretty-prints JS.",
20
20
  type: "module",
21
21
  main: "dist/cli/index.js",
@@ -100,8 +100,8 @@ function showBanner() {
100
100
  const gold = chalk.hex("#D4A017").bold;
101
101
  const gray = chalk.gray;
102
102
  console.log("");
103
- ASCII_ART.forEach((line2) => {
104
- console.log(" " + gold(line2));
103
+ ASCII_ART.forEach((line) => {
104
+ console.log(" " + gold(line));
105
105
  });
106
106
  console.log("");
107
107
  console.log(` ${gray(`v${package_default.version}`)} ${chalk.white.bold("Framer \xB7 Webflow \xB7 Wix Exporter")}
@@ -263,71 +263,76 @@ import chalk3 from "chalk";
263
263
  function setCooking(spinner) {
264
264
  _cooking = spinner;
265
265
  }
266
- function nextMsgColor() {
267
- return MSG_COLORS[_msgIdx++ % MSG_COLORS.length];
268
- }
269
266
  function trunc(text, max) {
270
267
  if (text.length <= max) return text;
271
- return text.slice(0, max - 2) + "\u2026";
268
+ return text.slice(0, max - 2) + "..";
272
269
  }
273
- function output(line2) {
274
- if (_cooking) {
275
- _cooking.log(line2);
276
- } else {
277
- console.log(line2);
278
- }
270
+ function output(line) {
271
+ if (_cooking) _cooking.log(line);
272
+ else console.log(line);
279
273
  }
280
- var _cooking, T, TIME_COLORS, TAG_ROTATION, MSG_COLORS, _msgIdx, log, info, warn, success;
274
+ var _cooking, T, LOG_PALETTE, _li, log, INFO_PALETTE, _ii, info, warn, success;
281
275
  var init_logger = __esm({
282
276
  "src/logger/index.ts"() {
283
277
  "use strict";
284
278
  _cooking = null;
285
279
  T = () => (/* @__PURE__ */ new Date()).toISOString().slice(11, 19);
286
- TIME_COLORS = [
287
- chalk3.gray,
288
- chalk3.hex("#9e9e9e"),
289
- chalk3.hex("#757575"),
290
- chalk3.hex("#6d6d6d")
291
- ];
292
- TAG_ROTATION = [
280
+ LOG_PALETTE = [
293
281
  (s) => chalk3.hex("#D4A017")(s),
294
- (s) => chalk3.hex("#E0A030")(s),
295
282
  (s) => chalk3.hex("#DAA520")(s),
296
- (s) => chalk3.hex("#C4953A")(s),
297
- (s) => chalk3.hex("#F0C040")(s)
298
- ];
299
- MSG_COLORS = [
300
- (s) => chalk3.hex("#D4A017")(s),
301
283
  (s) => chalk3.hex("#C8A951")(s),
302
- (s) => chalk3.hex("#B8960A")(s),
284
+ (s) => chalk3.hex("#E0B040")(s),
285
+ (s) => chalk3.hex("#daa520")(s),
286
+ (s) => chalk3.hex("#c4953a")(s),
287
+ (s) => chalk3.hex("#e8c33a")(s),
288
+ (s) => chalk3.hex("#dab660")(s),
289
+ (s) => chalk3.hex("#b8960a")(s),
303
290
  (s) => chalk3.hex("#d4a76a")(s),
304
- (s) => chalk3.hex("#c0a060")(s),
305
- (s) => chalk3.hex("#dab660")(s)
291
+ (s) => chalk3.hex("#e0a030")(s),
292
+ (s) => chalk3.hex("#c0a060")(s)
306
293
  ];
307
- _msgIdx = 0;
294
+ _li = 0;
308
295
  log = (m) => {
309
- const timeColor = TIME_COLORS[Math.floor(Math.random() * TIME_COLORS.length)];
310
- const t = timeColor(`[${T()}]`);
311
- const tag = TAG_ROTATION[0]("[LOG]");
312
- const msg = nextMsgColor()(trunc(m, 120));
313
- output(`${t} ${tag} ${msg}`);
296
+ _li++;
297
+ const c = LOG_PALETTE[_li % LOG_PALETTE.length];
298
+ output(`${chalk3.hex("#6d6d6d")(`[${T()}]`)} ${chalk3.hex("#B8960A")("[LOG]")} ${c(trunc(m, 120))}`);
314
299
  };
300
+ INFO_PALETTE = [
301
+ (s) => chalk3.hex("#4DB8B0")(s),
302
+ (s) => chalk3.hex("#5CC0BA")(s),
303
+ (s) => chalk3.hex("#3AA89E")(s),
304
+ (s) => chalk3.hex("#6BC4BE")(s),
305
+ (s) => chalk3.hex("#48B5AD")(s),
306
+ (s) => chalk3.hex("#52BAB4")(s)
307
+ ];
308
+ _ii = 0;
315
309
  info = (m) => {
316
- const timeColor = chalk3.gray;
317
- const t = timeColor(`[${T()}]`);
318
- const tag = chalk3.hex("#E8A317")("[INFO]");
319
- output(`${t} ${tag} ${chalk3.bold(trunc(m, 120))}`);
310
+ _ii++;
311
+ const c = INFO_PALETTE[_ii % INFO_PALETTE.length];
312
+ output(`${chalk3.hex("#6d6d6d")(`[${T()}]`)} ${chalk3.hex("#3AA89E").bold("[INFO]")} ${c(trunc(m, 120))}`);
320
313
  };
321
314
  warn = (m) => {
322
- const line2 = `${chalk3.gray(`[${T()}]`)} ${chalk3.hex("#CC7722").bold("[WARN]")} ${chalk3.hex("#CC7722")(trunc(m, 120))}`;
323
- if (_cooking) _cooking.log(line2);
324
- else console.warn(line2);
315
+ const colors = [
316
+ (s) => chalk3.hex("#E8833A")(s),
317
+ (s) => chalk3.hex("#F09040")(s),
318
+ (s) => chalk3.hex("#CC7722")(s),
319
+ (s) => chalk3.hex("#E87D2A")(s)
320
+ ];
321
+ const c = colors[Math.floor(Math.random() * colors.length)];
322
+ const line = `${chalk3.hex("#7a7a7a")(`[${T()}]`)} ${chalk3.hex("#E8833A").bold("[WARN]")} ${c(trunc(m, 120))}`;
323
+ if (_cooking) _cooking.log(line);
324
+ else console.warn(line);
325
325
  };
326
326
  success = (m) => {
327
- const t = chalk3.hex("#8a8a8a")(`[${T()}]`);
328
- const tag = chalk3.greenBright("[OK]");
329
- const msg = chalk3.green(trunc(m, 120));
330
- output(`${t} ${tag} ${msg}`);
327
+ const colors = [
328
+ (s) => chalk3.hex("#4CAF50")(s),
329
+ (s) => chalk3.hex("#66BB6A")(s),
330
+ (s) => chalk3.hex("#43A047")(s),
331
+ (s) => chalk3.hex("#81C784")(s),
332
+ (s) => chalk3.hex("#2E7D32")(s)
333
+ ];
334
+ const c = colors[Math.floor(Math.random() * colors.length)];
335
+ output(`${chalk3.hex("#6d6d6d")(`[${T()}]`)} ${chalk3.greenBright("[OK]")} ${c(trunc(m, 120))}`);
331
336
  };
332
337
  }
333
338
  });
@@ -1180,16 +1185,64 @@ var init_output = __esm({
1180
1185
  }
1181
1186
  });
1182
1187
 
1188
+ // src/cli/box.ts
1189
+ import chalk4 from "chalk";
1190
+ function maxWidth() {
1191
+ return Math.min(process.stdout.columns || 80, 62);
1192
+ }
1193
+ function padRight(text, w) {
1194
+ const visible = stripAnsi(text).length;
1195
+ if (visible >= w) return text;
1196
+ return text + " ".repeat(w - visible);
1197
+ }
1198
+ function stripAnsi(s) {
1199
+ return s.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, "");
1200
+ }
1201
+ function boxTop(w) {
1202
+ const inner = w - 4;
1203
+ return " " + B("\u2554\u2550") + B("\u2550".repeat(inner)) + B("\u2550\u2557");
1204
+ }
1205
+ function boxBot(w) {
1206
+ const inner = w - 4;
1207
+ return " " + B("\u255A\u2550") + B("\u2550".repeat(inner)) + B("\u2550\u255D");
1208
+ }
1209
+ function boxLine(w, text) {
1210
+ const inner = w - 4;
1211
+ const padded = padRight(text, inner);
1212
+ return " " + B("\u2551 ") + padded + B(" \u2551");
1213
+ }
1214
+ function boxSep(w) {
1215
+ const inner = w - 4;
1216
+ return " " + B("\u2560\u2550") + B("\u2550".repeat(inner)) + B("\u2550\u2563");
1217
+ }
1218
+ function boxRow(w, label, value) {
1219
+ const inner = w - 4;
1220
+ const labelPlain = stripAnsi(chalk4.bold(label));
1221
+ const visible = labelPlain.length + 1 + value.length;
1222
+ if (visible > inner) {
1223
+ const avail = inner - labelPlain.length - 2;
1224
+ const truncated = value.length > avail ? value.slice(0, avail - 1) + ".." : value;
1225
+ return " " + G("\u2551 ") + chalk4.bold(label) + ": " + chalk4.yellow(truncated) + " ".repeat(Math.max(0, inner - labelPlain.length - 1 - truncated.length)) + G(" \u2551");
1226
+ }
1227
+ const right = inner - labelPlain.length - 1 - value.length;
1228
+ return " " + G("\u2551 ") + chalk4.bold(label) + ": " + chalk4.yellow(value) + " ".repeat(right) + G(" \u2551");
1229
+ }
1230
+ var B, G;
1231
+ var init_box = __esm({
1232
+ "src/cli/box.ts"() {
1233
+ "use strict";
1234
+ B = chalk4.hex("#8B6914");
1235
+ G = chalk4.hex("#C4953A");
1236
+ }
1237
+ });
1238
+
1183
1239
  // src/exporter/summary.ts
1184
1240
  import fs3 from "fs/promises";
1185
1241
  import path4 from "path";
1186
- import chalk4 from "chalk";
1187
- function getWidth2() {
1188
- return process.stdout.columns || 80;
1189
- }
1242
+ import chalk5 from "chalk";
1190
1243
  async function printSummary(exporter) {
1191
- const width = getWidth2();
1192
- const isSmall = width < 50;
1244
+ const w = maxWidth();
1245
+ const isSmall = w < 50;
1193
1246
  const count = async (d) => {
1194
1247
  try {
1195
1248
  return (await fs3.readdir(path4.join(exporter.outDir, d))).length;
@@ -1197,7 +1250,7 @@ async function printSummary(exporter) {
1197
1250
  return 0;
1198
1251
  }
1199
1252
  };
1200
- const [imgs, fonts, videos, misc, scripts, vendor, styles, data] = await Promise.all([
1253
+ const [imgs, fonts, videos, misc, scripts, vendor, styles, data, subpages] = await Promise.all([
1201
1254
  count("assets/images"),
1202
1255
  count("assets/fonts"),
1203
1256
  count("assets/videos"),
@@ -1205,106 +1258,105 @@ async function printSummary(exporter) {
1205
1258
  count("scripts/modules"),
1206
1259
  count("scripts/vendor"),
1207
1260
  count("styles"),
1208
- count("data")
1261
+ count("data"),
1262
+ count("subpages")
1209
1263
  ]);
1210
- const G = chalk4.hex("#D4A017");
1264
+ const G2 = chalk5.hex("#D4A017");
1265
+ const G22 = chalk5.hex("#DAA520");
1266
+ const C2 = chalk5.hex("#E0B040");
1267
+ const Y = chalk5.yellow;
1268
+ const O = chalk5.hex("#CC7722");
1269
+ const Br = chalk5.hex("#B8860B");
1270
+ const Gr = chalk5.gray;
1271
+ const Gn = chalk5.green;
1272
+ const entries = [
1273
+ ["styles/", styles, "CSS", G2],
1274
+ ["scripts/vendor/", vendor, "JS vendor", G22],
1275
+ ["scripts/modules/", scripts, "JS modules", C2],
1276
+ ["assets/images/", imgs, "images", Y],
1277
+ ["assets/videos/", videos, "videos", O],
1278
+ ["assets/fonts/", fonts, "fonts", Br],
1279
+ ["assets/misc/", misc, "misc", Gr],
1280
+ ["data/", data, "data", Gr],
1281
+ ["subpages/", subpages, "pages", Gn]
1282
+ ];
1211
1283
  console.log("");
1212
1284
  if (!isSmall) {
1213
- console.log(G(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"));
1214
- console.log(G(" \u2502") + chalk4.bold.white(" Export Summary ") + G("\u2502"));
1215
- console.log(G(" \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"));
1285
+ console.log(boxTop(w));
1286
+ console.log(boxLine(w, chalk5.bold.white(" Export Summary")));
1287
+ console.log(boxSep(w));
1216
1288
  } else {
1217
- console.log(chalk4.bold.white(" Export Summary:"));
1218
- }
1219
- const row = (label, count2, type) => {
1220
- if (count2 === 0) return;
1221
- const l = label.padEnd(18);
1222
- const c = String(count2).padStart(3);
1289
+ console.log(chalk5.bold.white(" Export Summary:"));
1290
+ }
1291
+ for (const [label, cnt, type, color] of entries) {
1292
+ if (cnt === 0) continue;
1293
+ const inner = w - 4;
1294
+ const l = label.padEnd(16);
1295
+ const c = String(cnt).padStart(3);
1296
+ const rowText = `${color(l)}${chalk5.white(c)} ${chalk5.gray(type)}`;
1297
+ const visible = 16 + 3 + 2 + type.length;
1298
+ const pad = Math.max(0, inner - visible);
1223
1299
  if (isSmall) {
1224
- console.log(` ${chalk4.yellow(label)} ${chalk4.white(String(count2))} ${chalk4.gray(type)}`);
1300
+ console.log(` ${color(label)} ${chalk5.white(String(cnt))} ${chalk5.gray(type)}`);
1225
1301
  } else {
1226
- console.log(` ${G("\u2502")} ${chalk4.yellow(l)} ${chalk4.white(c)} ${chalk4.gray(type.padEnd(20))} ${G("\u2502")}`);
1302
+ console.log(" " + chalk5.hex("#C4953A")("\u2551 ") + rowText + " ".repeat(pad) + chalk5.hex("#C4953A")(" \u2551"));
1227
1303
  }
1228
- };
1229
- row("styles/", styles, "CSS files");
1230
- row("scripts/vendor/", vendor, "JS modules");
1231
- row("scripts/modules/", scripts, "components");
1232
- row("assets/images/", imgs, "images");
1233
- row("assets/videos/", videos, "videos");
1234
- row("assets/fonts/", fonts, "fonts");
1235
- row("assets/misc/", misc, "misc files");
1236
- row("data/", data, "data files");
1304
+ }
1237
1305
  if (!isSmall) {
1238
- console.log(G(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"));
1306
+ console.log(boxBot(w));
1239
1307
  }
1240
1308
  console.log("");
1241
- const quotedDir = `"${exporter.outDir}"`;
1309
+ const cdCmd = "cd " + path4.basename(exporter.outDir) + " && node serve.cjs";
1242
1310
  if (!isSmall) {
1243
- console.log(G(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"));
1244
- console.log(G(" \u2502") + chalk4.bold.white(" To serve locally ") + G("\u2502"));
1245
- console.log(G(" \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"));
1246
- console.log(` ${G("\u2502")} ${chalk4.hex("#D4A017")("cd " + path4.basename(exporter.outDir) + " && node serve.cjs").padEnd(44)} ${G("\u2502")}`);
1247
- console.log(G(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"));
1311
+ console.log(boxTop(w));
1312
+ console.log(boxLine(w, chalk5.bold.white(" To serve locally")));
1313
+ console.log(boxSep(w));
1314
+ const inner = w - 6;
1315
+ const cmdLen = cdCmd.length;
1316
+ const pad = Math.max(0, inner - cmdLen);
1317
+ console.log(" " + chalk5.hex("#C4953A")("\u2551 ") + G2(cdCmd) + " ".repeat(pad) + chalk5.hex("#9e9e9e")(" \u{1F5D0}") + chalk5.hex("#C4953A")(" \u2551"));
1318
+ console.log(boxBot(w));
1248
1319
  } else {
1249
- console.log(chalk4.bold.white(" To serve locally:"));
1250
- console.log(` ${chalk4.hex("#D4A017")("cd " + path4.basename(exporter.outDir) + " && node serve.cjs")}`);
1320
+ console.log(chalk5.bold.white(" To serve locally:"));
1321
+ console.log(` ${G2(cdCmd)}`);
1251
1322
  }
1252
1323
  console.log("");
1253
- console.log(chalk4.gray(" NOTE: Must be served via HTTP for JS modules to work."));
1324
+ console.log(chalk5.gray(" NOTE: Must be served via HTTP for JS modules to work."));
1254
1325
  console.log("");
1255
1326
  }
1256
1327
  var init_summary = __esm({
1257
1328
  "src/exporter/summary.ts"() {
1258
1329
  "use strict";
1330
+ init_box();
1259
1331
  }
1260
1332
  });
1261
1333
 
1262
1334
  // src/cli/cooking.ts
1263
- import chalk5 from "chalk";
1264
- var SHINE_WIDTH, FRAME_INTERVAL, SPINNER_FRAMES, PALETTE, CookingSpinner;
1335
+ import chalk6 from "chalk";
1336
+ var SHINE_WIDTH, FRAME_INTERVAL, DOT_PHASES, CookingSpinner;
1265
1337
  var init_cooking = __esm({
1266
1338
  "src/cli/cooking.ts"() {
1267
1339
  "use strict";
1268
1340
  SHINE_WIDTH = 10;
1269
1341
  FRAME_INTERVAL = 140;
1270
- SPINNER_FRAMES = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
1271
- PALETTE = [
1272
- (s) => chalk5.hex("#D4A017")(s),
1273
- (s) => chalk5.hex("#E8A317")(s),
1274
- (s) => chalk5.hex("#DAA520")(s),
1275
- (s) => chalk5.hex("#F0C040")(s),
1276
- (s) => chalk5.hex("#C4953A")(s),
1277
- (s) => chalk5.hex("#E6B83C")(s),
1278
- (s) => chalk5.hex("#C8A951")(s),
1279
- (s) => chalk5.hex("#D9B44D")(s)
1280
- ];
1342
+ DOT_PHASES = [" ", ". ", ".. ", "...", " ..", " .", " "];
1281
1343
  CookingSpinner = class {
1282
1344
  interval = null;
1283
- bgInterval = null;
1284
1345
  frame = 0;
1285
1346
  phase = "";
1286
1347
  active = false;
1287
- bar = 0;
1288
- barDir = 1;
1289
1348
  start(phase = "") {
1290
1349
  this.phase = phase;
1291
1350
  this.frame = 0;
1292
- this.bar = 0;
1293
- this.barDir = 1;
1294
1351
  this.active = true;
1295
1352
  this.draw();
1296
1353
  this.interval = setInterval(() => {
1297
1354
  this.frame++;
1298
1355
  this.draw();
1299
1356
  }, FRAME_INTERVAL);
1300
- this.bgInterval = setInterval(() => {
1301
- this.bar++;
1302
- this.draw();
1303
- }, 800);
1304
1357
  }
1305
1358
  update(phase) {
1306
1359
  this.phase = phase;
1307
- if (!this.active) this.draw();
1308
1360
  }
1309
1361
  log(message) {
1310
1362
  if (this.active) {
@@ -1321,27 +1373,15 @@ var init_cooking = __esm({
1321
1373
  clearInterval(this.interval);
1322
1374
  this.interval = null;
1323
1375
  }
1324
- if (this.bgInterval) {
1325
- clearInterval(this.bgInterval);
1326
- this.bgInterval = null;
1327
- }
1328
1376
  process.stdout.write("\r\x1B[2K");
1329
1377
  }
1330
1378
  draw() {
1331
1379
  if (!this.active) return;
1332
- const spinner = SPINNER_FRAMES[this.frame % SPINNER_FRAMES.length];
1333
- const paletteFn = PALETTE[this.frame % PALETTE.length];
1334
- const dotPhase = Math.floor(this.frame / 3) % 4;
1335
- const dotStr = dotPhase === 0 ? " " : dotPhase === 1 ? ". " : dotPhase === 2 ? ".. " : "...";
1380
+ const dots = DOT_PHASES[this.frame % DOT_PHASES.length];
1336
1381
  const shimmer = this.renderShimmer("Cooking");
1337
- const spinnerChar = chalk5.hex("#F0C040")(spinner);
1338
- const barLen = 12;
1339
- const barPos = this.bar % (barLen * 2);
1340
- const barStr = this.renderBar(barLen, barPos);
1341
- const phaseStr = this.phase ? ` ${chalk5.gray(this.limitLen(this.phase, 38))}` : "";
1342
- process.stdout.write(
1343
- `\r\x1B[2K ${spinnerChar} ${shimmer} ${paletteFn(dotStr)} ${barStr}${phaseStr}`
1344
- );
1382
+ const dotStr = chalk6.hex("#D4A017")(dots);
1383
+ const phaseStr = this.phase ? ` ${chalk6.gray(this.limitLen(this.phase, 38))}` : "";
1384
+ process.stdout.write(`\r\x1B[2K ${shimmer} ${dotStr}${phaseStr}`);
1345
1385
  }
1346
1386
  renderShimmer(text) {
1347
1387
  let result = "";
@@ -1351,34 +1391,16 @@ var init_cooking = __esm({
1351
1391
  if (dist < SHINE_WIDTH) {
1352
1392
  const t = 1 - dist / SHINE_WIDTH;
1353
1393
  const g = Math.floor(160 + t * 95);
1354
- result += chalk5.rgb(g, g, g)(text[i]);
1394
+ result += chalk6.rgb(g, g, g)(text[i]);
1355
1395
  } else {
1356
- result += chalk5.rgb(160, 160, 160)(text[i]);
1396
+ result += chalk6.rgb(160, 160, 160)(text[i]);
1357
1397
  }
1358
1398
  }
1359
1399
  return result;
1360
1400
  }
1361
- renderBar(len, pos) {
1362
- let s = "";
1363
- for (let i = 0; i < len; i++) {
1364
- const dist = Math.abs(i - pos);
1365
- if (dist < 3) {
1366
- const t = 1 - dist / 3;
1367
- const r = Math.floor(200 + t * 55);
1368
- const g = Math.floor(160 + t * 50);
1369
- const b = Math.floor(20 + t * 30);
1370
- s += chalk5.rgb(r, g, b)("\u258C");
1371
- } else if (dist < 6) {
1372
- s += chalk5.rgb(140, 100, 20)("\u258C");
1373
- } else {
1374
- s += chalk5.rgb(50, 35, 10)(" ");
1375
- }
1376
- }
1377
- return `[${s}]`;
1378
- }
1379
1401
  limitLen(s, max) {
1380
1402
  if (s.length <= max) return s;
1381
- return s.slice(0, max - 3) + "\u2026";
1403
+ return s.slice(0, max - 1) + "\u2026";
1382
1404
  }
1383
1405
  };
1384
1406
  }
@@ -1392,7 +1414,7 @@ __export(exporter_exports, {
1392
1414
  });
1393
1415
  import fs4 from "fs/promises";
1394
1416
  import path5 from "path";
1395
- import chalk6 from "chalk";
1417
+ import chalk7 from "chalk";
1396
1418
  function deriveOutputName(url, platformName) {
1397
1419
  try {
1398
1420
  const parsed = new URL(url);
@@ -1451,12 +1473,12 @@ var init_exporter = __esm({
1451
1473
  }
1452
1474
  }
1453
1475
  async run(includeSubpages = false) {
1454
- console.log(chalk6.bold.hex("#D4A017")("\n Cooksite v4 - Full Mirror & Clean Export\n"));
1455
- info("Source : " + chalk6.underline(this.siteUrl));
1456
- info("Output : " + chalk6.yellow(this.outDir));
1457
- info("Platform : " + chalk6.hex("#D4A017")(this.platform.displayName));
1476
+ console.log(chalk7.bold.hex("#D4A017")("\n Cooksite v4 - Full Mirror & Clean Export\n"));
1477
+ info("Source : " + chalk7.underline(this.siteUrl));
1478
+ info("Output : " + chalk7.yellow(this.outDir));
1479
+ info("Platform : " + chalk7.hex("#D4A017")(this.platform.displayName));
1458
1480
  if (includeSubpages) {
1459
- info("Subpages : " + chalk6.green("enabled"));
1481
+ info("Subpages : " + chalk7.green("enabled"));
1460
1482
  }
1461
1483
  console.log("");
1462
1484
  this.cooking = new CookingSpinner();
@@ -1484,12 +1506,12 @@ var init_exporter = __esm({
1484
1506
  this.ssrHTML = buf.toString("utf-8");
1485
1507
  success("SSR HTML fetched (" + (this.ssrHTML.length / 1024).toFixed(1) + " KB)");
1486
1508
  } catch (e) {
1487
- log(chalk6.red("Could not fetch SSR HTML: " + e.message));
1509
+ log(chalk7.red("Could not fetch SSR HTML: " + e.message));
1488
1510
  }
1489
1511
  const htmlDetected = detectPlatform(this.siteUrl, this.ssrHTML);
1490
1512
  if (htmlDetected.name !== this.platform.name) {
1491
1513
  this.platform = htmlDetected;
1492
- log("Platform refined: " + chalk6.hex("#D4A017")(this.platform.displayName) + " (from HTML analysis)");
1514
+ log("Platform refined: " + chalk7.hex("#D4A017")(this.platform.displayName) + " (from HTML analysis)");
1493
1515
  }
1494
1516
  await launchAndCapture(this);
1495
1517
  if (includeSubpages && this.page) {
@@ -1571,8 +1593,18 @@ var init_exporter = __esm({
1571
1593
  // src/cli/select.ts
1572
1594
  import readline from "readline";
1573
1595
  import { stdin, stdout } from "process";
1574
- import chalk7 from "chalk";
1596
+ import chalk8 from "chalk";
1597
+ function stripAnsi2(s) {
1598
+ return s.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, "");
1599
+ }
1575
1600
  async function select(question, options, defaultIndex = 0) {
1601
+ const isTTY = stdin.isTTY && stdout.isTTY;
1602
+ if (!isTTY) {
1603
+ return fallbackPrompt(question, options, defaultIndex);
1604
+ }
1605
+ return arrowSelect(question, options, defaultIndex);
1606
+ }
1607
+ async function arrowSelect(question, options, defaultIndex) {
1576
1608
  return new Promise((resolve) => {
1577
1609
  let selected = defaultIndex;
1578
1610
  const render = (initial = false) => {
@@ -1580,19 +1612,18 @@ async function select(question, options, defaultIndex = 0) {
1580
1612
  stdout.write(`\x1B[${options.length + 1}A`);
1581
1613
  stdout.write("\x1B[J");
1582
1614
  }
1583
- console.log(` ${chalk7.hex("#D4A017")("?")} ${chalk7.white.bold(question)}`);
1615
+ console.log(` ${chalk8.hex("#D4A017")("?")} ${chalk8.white.bold(question)}`);
1584
1616
  for (let i = 0; i < options.length; i++) {
1585
1617
  if (i === selected) {
1586
- console.log(` ${chalk7.hex("#D4A017")(">")} ${chalk7.white.bold(options[i].label)}`);
1618
+ console.log(` ${chalk8.hex("#D4A017")(">")} ${chalk8.white.bold(options[i].label)}`);
1587
1619
  } else {
1588
- console.log(` ${chalk7.gray(options[i].label)}`);
1620
+ console.log(` ${chalk8.gray(options[i].label)}`);
1589
1621
  }
1590
1622
  }
1591
1623
  };
1592
1624
  render(true);
1593
1625
  readline.emitKeypressEvents(stdin);
1594
- const wasTTY = stdin.isTTY || false;
1595
- if (wasTTY) stdin.setRawMode(true);
1626
+ stdin.setRawMode(true);
1596
1627
  const onKeypress = (_str, key) => {
1597
1628
  if (!key) return;
1598
1629
  if (key.name === "up" && selected > 0) {
@@ -1602,16 +1633,16 @@ async function select(question, options, defaultIndex = 0) {
1602
1633
  selected++;
1603
1634
  render();
1604
1635
  } else if (key.name === "return") {
1605
- if (wasTTY) stdin.setRawMode(false);
1636
+ stdin.setRawMode(false);
1606
1637
  stdin.removeListener("keypress", onKeypress);
1607
1638
  stdin.pause();
1608
1639
  stdout.write(`\x1B[${options.length + 1}A`);
1609
1640
  stdout.write("\x1B[J");
1610
- console.log(` ${chalk7.green("\u2713")} ${chalk7.white.bold(question)} ${chalk7.hex("#D4A017")(options[selected].label)}
1641
+ console.log(` ${chalk8.green("\u2713")} ${chalk8.white.bold(question)} ${chalk8.hex("#D4A017")(stripAnsi2(options[selected].label))}
1611
1642
  `);
1612
1643
  resolve(options[selected].value);
1613
1644
  } else if (key.ctrl && key.name === "c" || key.name === "escape") {
1614
- if (wasTTY) stdin.setRawMode(false);
1645
+ stdin.setRawMode(false);
1615
1646
  stdin.removeListener("keypress", onKeypress);
1616
1647
  process.exit(0);
1617
1648
  }
@@ -1620,6 +1651,45 @@ async function select(question, options, defaultIndex = 0) {
1620
1651
  stdin.on("keypress", onKeypress);
1621
1652
  });
1622
1653
  }
1654
+ async function fallbackPrompt(question, options, defaultIndex) {
1655
+ return new Promise((resolve) => {
1656
+ const rl = readline.createInterface({ input: stdin, output: stdout });
1657
+ console.log(` ${chalk8.hex("#D4A017")("?")} ${chalk8.white.bold(question)}
1658
+ `);
1659
+ for (let i = 0; i < options.length; i++) {
1660
+ const marker = i === defaultIndex ? chalk8.green(" \u2605") : " ";
1661
+ console.log(` ${chalk8.gray(`[${i + 1}]`)}${marker} ${chalk8.white(options[i].label)}`);
1662
+ }
1663
+ console.log("");
1664
+ const def = String(defaultIndex + 1);
1665
+ const ask = () => {
1666
+ rl.question(` ${chalk8.hex("#D4A017")(">")} ${chalk8.gray(`Choose [1-${options.length}] (${def})`)}: `, (answer) => {
1667
+ const trimmed = answer.trim();
1668
+ if (!trimmed) {
1669
+ rl.close();
1670
+ const label = stripAnsi2(options[defaultIndex].label);
1671
+ console.log(` ${chalk8.green("\u2713")} ${chalk8.hex("#D4A017")(label)}
1672
+ `);
1673
+ resolve(options[defaultIndex].value);
1674
+ return;
1675
+ }
1676
+ const idx = parseInt(trimmed, 10);
1677
+ if (idx >= 1 && idx <= options.length) {
1678
+ rl.close();
1679
+ const label = stripAnsi2(options[idx - 1].label);
1680
+ console.log(` ${chalk8.green("\u2713")} ${chalk8.hex("#D4A017")(label)}
1681
+ `);
1682
+ resolve(options[idx - 1].value);
1683
+ } else {
1684
+ console.log(` ${chalk8.red("\u2717")} Enter 1-${options.length}
1685
+ `);
1686
+ ask();
1687
+ }
1688
+ });
1689
+ };
1690
+ ask();
1691
+ });
1692
+ }
1623
1693
  var init_select = __esm({
1624
1694
  "src/cli/select.ts"() {
1625
1695
  "use strict";
@@ -1635,46 +1705,27 @@ import readline2 from "readline/promises";
1635
1705
  import { stdin as stdin2, stdout as stdout2 } from "process";
1636
1706
  import path6 from "path";
1637
1707
  import { URL as URL4 } from "url";
1638
- import chalk8 from "chalk";
1639
- function getWidth3() {
1640
- return process.stdout.columns || 80;
1641
- }
1708
+ import chalk9 from "chalk";
1642
1709
  function drawHeader(title) {
1643
- const width = getWidth3();
1644
- const isSmall = width < 50;
1645
- const magenta = chalk8.hex("#D4A017");
1646
- const boldWhite = chalk8.bold.white;
1647
- if (isSmall) {
1710
+ const w = maxWidth();
1711
+ if (w < 50) {
1648
1712
  console.log(`
1649
- ${magenta("\u25CF")} ${boldWhite(title)}`);
1713
+ ${chalk9.hex("#D4A017")("\u25CF")} ${chalk9.bold.white(title)}`);
1650
1714
  return;
1651
1715
  }
1652
- const boxWidth = 45;
1653
- const padding = Math.max(0, boxWidth - title.length - 2);
1654
- const rightPad = " ".repeat(padding);
1655
- console.log(magenta(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"));
1656
- console.log(magenta(" \u2502") + boldWhite(" " + title) + rightPad + magenta("\u2502"));
1657
- console.log(magenta(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"));
1716
+ console.log(boxTop(w));
1717
+ console.log(boxLine(w, chalk9.bold.white(" " + title)));
1718
+ console.log(boxBot(w));
1658
1719
  console.log("");
1659
1720
  }
1660
- function line(label, value) {
1661
- const width = getWidth3();
1662
- const isSmall = width < 50;
1663
- const magenta = chalk8.hex("#D4A017");
1664
- if (isSmall) {
1665
- console.log(` ${chalk8.bold(label)}: ${chalk8.yellow(value)}`);
1666
- return;
1667
- }
1668
- console.log(` ${magenta("\u2502")} ${chalk8.bold(label.padEnd(14))} ${chalk8.yellow(value)}`);
1669
- }
1670
1721
  async function runSetup(legacyMode = false) {
1671
1722
  showBanner();
1672
- console.log(chalk8.bold.white(" Welcome to Framer Export setup.\n"));
1673
- console.log(chalk8.gray(" Supports Framer, Webflow, and Wix sites.\n"));
1723
+ console.log(chalk9.bold.white(" Welcome to Framer Export setup.\n"));
1724
+ console.log(chalk9.gray(" Supports Framer, Webflow, and Wix sites.\n"));
1674
1725
  const rl = readline2.createInterface({ input: stdin2, output: stdout2 });
1675
1726
  const ask = async (question, defaultVal) => {
1676
- const suffix = defaultVal ? chalk8.gray(` (${defaultVal})`) : "";
1677
- const prompt = ` ${chalk8.hex("#D4A017")("?")} ${chalk8.white.bold(question)}${suffix} ${chalk8.gray(">")} `;
1727
+ const suffix = defaultVal ? chalk9.gray(` (${defaultVal})`) : "";
1728
+ const prompt = ` ${chalk9.hex("#D4A017")("?")} ${chalk9.white.bold(question)}${suffix} ${chalk9.gray(">")} `;
1678
1729
  const answer = await rl.question(prompt);
1679
1730
  return answer.trim() || defaultVal || "";
1680
1731
  };
@@ -1686,42 +1737,42 @@ async function runSetup(legacyMode = false) {
1686
1737
  new URL4(input);
1687
1738
  siteUrl = input;
1688
1739
  } catch {
1689
- console.log(` ${chalk8.red("\u2717")} ${chalk8.red("Invalid URL. Enter a valid URL (https://...)")}
1740
+ console.log(` ${chalk9.red("\u2717")} ${chalk9.red("Invalid URL. Enter a valid URL (https://...)")}
1690
1741
  `);
1691
1742
  }
1692
1743
  }
1693
- console.log(` ${chalk8.green("\u2713")} ${chalk8.green("URL:")} ${chalk8.underline(siteUrl)}
1744
+ console.log(` ${chalk9.green("\u2713")} ${chalk9.green("URL:")} ${chalk9.underline(siteUrl)}
1694
1745
  `);
1695
1746
  drawHeader("Step 2 : Platform");
1696
1747
  const detected = detectPlatform(siteUrl);
1697
1748
  let platformName;
1698
1749
  if (legacyMode) {
1699
- console.log(` ${chalk8.blue("i")} Auto-detected: ${chalk8.hex("#D4A017")(detected.displayName)}`);
1750
+ console.log(` ${chalk9.blue("i")} Auto-detected: ${chalk9.hex("#D4A017")(detected.displayName)}`);
1700
1751
  const platformInput = await ask("Platform (framer/webflow/wix)", detected.name);
1701
1752
  platformName = ["framer", "webflow", "wix"].includes(platformInput) ? platformInput : detected.name;
1702
- console.log(` ${chalk8.green("\u2713")} ${chalk8.green("Platform:")} ${chalk8.hex("#D4A017")(platformName)}
1753
+ console.log(` ${chalk9.green("\u2713")} ${chalk9.green("Platform:")} ${chalk9.hex("#D4A017")(platformName)}
1703
1754
  `);
1704
1755
  } else {
1705
1756
  rl.close();
1706
1757
  const platforms = [
1707
- { label: `Framer${detected.name === "framer" ? chalk8.gray(" (detected)") : ""}`, value: "framer" },
1708
- { label: `Webflow${detected.name === "webflow" ? chalk8.gray(" (detected)") : ""}`, value: "webflow" },
1709
- { label: `Wix${detected.name === "wix" ? chalk8.gray(" (detected)") : ""}`, value: "wix" }
1758
+ { label: `Framer${detected.name === "framer" ? chalk9.gray(" (detected)") : ""}`, value: "framer" },
1759
+ { label: `Webflow${detected.name === "webflow" ? chalk9.gray(" (detected)") : ""}`, value: "webflow" },
1760
+ { label: `Wix${detected.name === "wix" ? chalk9.gray(" (detected)") : ""}`, value: "wix" }
1710
1761
  ];
1711
1762
  const defaultIdx = ["framer", "webflow", "wix"].indexOf(detected.name);
1712
1763
  platformName = await select("Select platform", platforms, Math.max(0, defaultIdx));
1713
1764
  }
1714
1765
  const rl2 = legacyMode ? rl : readline2.createInterface({ input: stdin2, output: stdout2 });
1715
1766
  const ask2 = async (question, defaultVal) => {
1716
- const suffix = defaultVal ? chalk8.gray(` (${defaultVal})`) : "";
1717
- const prompt = ` ${chalk8.hex("#D4A017")("?")} ${chalk8.white.bold(question)}${suffix} ${chalk8.gray(">")} `;
1767
+ const suffix = defaultVal ? chalk9.gray(` (${defaultVal})`) : "";
1768
+ const prompt = ` ${chalk9.hex("#D4A017")("?")} ${chalk9.white.bold(question)}${suffix} ${chalk9.gray(">")} `;
1718
1769
  const answer = await rl2.question(prompt);
1719
1770
  return answer.trim() || defaultVal || "";
1720
1771
  };
1721
1772
  const derivedName = deriveOutputName(siteUrl, platformName);
1722
1773
  drawHeader("Step 3 : Output Directory");
1723
1774
  const outDir = await ask2("Output directory", "./" + derivedName);
1724
- console.log(` ${chalk8.green("\u2713")} ${chalk8.green("Output:")} ${chalk8.yellow(outDir)}
1775
+ console.log(` ${chalk9.green("\u2713")} ${chalk9.green("Output:")} ${chalk9.yellow(outDir)}
1725
1776
  `);
1726
1777
  drawHeader("Step 4 : Options");
1727
1778
  let prettyPrint;
@@ -1730,15 +1781,15 @@ async function runSetup(legacyMode = false) {
1730
1781
  if (legacyMode) {
1731
1782
  const prettyAnswer = await ask2("Pretty-print JS files? (y/n)", "y");
1732
1783
  prettyPrint = prettyAnswer.toLowerCase().startsWith("y");
1733
- console.log(` ${chalk8.green("\u2713")} Pretty-print: ${prettyPrint ? chalk8.green("yes") : chalk8.red("no")}
1784
+ console.log(` ${chalk9.green("\u2713")} Pretty-print: ${prettyPrint ? chalk9.green("yes") : chalk9.red("no")}
1734
1785
  `);
1735
1786
  const subpagesAnswer = await ask2("Export sub-pages? (y/n)", "n");
1736
1787
  includeSubpages = subpagesAnswer.toLowerCase().startsWith("y");
1737
- console.log(` ${chalk8.green("\u2713")} Sub-pages: ${includeSubpages ? chalk8.green("yes") : chalk8.red("no")}
1788
+ console.log(` ${chalk9.green("\u2713")} Sub-pages: ${includeSubpages ? chalk9.green("yes") : chalk9.red("no")}
1738
1789
  `);
1739
1790
  const concurrencyAnswer = await ask2("Download concurrency", "12");
1740
1791
  concurrency = parseInt(concurrencyAnswer, 10) || 12;
1741
- console.log(` ${chalk8.green("\u2713")} Concurrency: ${chalk8.yellow(String(concurrency))}
1792
+ console.log(` ${chalk9.green("\u2713")} Concurrency: ${chalk9.yellow(String(concurrency))}
1742
1793
  `);
1743
1794
  } else {
1744
1795
  rl2.close();
@@ -1759,24 +1810,29 @@ async function runSetup(legacyMode = false) {
1759
1810
  ], 1);
1760
1811
  concurrency = parseInt(concurrencyVal, 10);
1761
1812
  }
1813
+ const w = maxWidth();
1814
+ const isSmall = w < 50;
1815
+ const G2 = chalk9.hex("#C4953A");
1816
+ const B2 = chalk9.hex("#8B6914");
1762
1817
  console.log("");
1763
- const width = getWidth3();
1764
- const isSmall = width < 50;
1765
1818
  if (!isSmall) {
1766
- console.log(chalk8.hex("#D4A017")(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"));
1767
- console.log(chalk8.hex("#D4A017")(" \u2502") + chalk8.bold.white(" Summary ") + chalk8.hex("#D4A017")("\u2502"));
1768
- console.log(chalk8.hex("#D4A017")(" \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"));
1819
+ console.log(boxTop(w));
1820
+ console.log(boxLine(w, chalk9.bold.white(" Summary")));
1769
1821
  } else {
1770
- console.log(chalk8.bold.white(" Summary:"));
1771
- }
1772
- line("URL", siteUrl);
1773
- line("Platform", platformName);
1774
- line("Output", path6.resolve(outDir));
1775
- line("Pretty-print", prettyPrint ? "yes" : "no");
1776
- line("Sub-pages", includeSubpages ? "yes" : "no");
1777
- line("Concurrency", String(concurrency));
1822
+ console.log(chalk9.bold.white(" Summary:"));
1823
+ }
1824
+ for (const [label, value] of [
1825
+ ["URL", siteUrl],
1826
+ ["Platform", platformName],
1827
+ ["Output", path6.resolve(outDir)],
1828
+ ["Pretty-print", prettyPrint ? "yes" : "no"],
1829
+ ["Sub-pages", includeSubpages ? "yes" : "no"],
1830
+ ["Concurrency", String(concurrency)]
1831
+ ]) {
1832
+ console.log(boxRow(w, label, value));
1833
+ }
1778
1834
  if (!isSmall) {
1779
- console.log(chalk8.hex("#D4A017")(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"));
1835
+ console.log(boxBot(w));
1780
1836
  }
1781
1837
  console.log("");
1782
1838
  let startExport;
@@ -1793,7 +1849,7 @@ async function runSetup(legacyMode = false) {
1793
1849
  }
1794
1850
  if (!startExport) {
1795
1851
  console.log(`
1796
- ${chalk8.yellow("Export cancelled.")}
1852
+ ${chalk9.yellow("Export cancelled.")}
1797
1853
  `);
1798
1854
  return;
1799
1855
  }
@@ -1811,6 +1867,7 @@ var init_setup = __esm({
1811
1867
  init_exporter();
1812
1868
  init_platforms();
1813
1869
  init_select();
1870
+ init_box();
1814
1871
  }
1815
1872
  });
1816
1873
 
@@ -1917,28 +1974,28 @@ async function main() {
1917
1974
  process.exit(0);
1918
1975
  }
1919
1976
  if (args.includes("--about")) {
1920
- const chalk9 = (await import("chalk")).default;
1977
+ const chalk10 = (await import("chalk")).default;
1921
1978
  showBanner();
1922
- console.log(` ${chalk9.white.bold("Framer Export")} ${chalk9.gray(`v${package_default.version}`)}`);
1923
- console.log(` ${chalk9.white(package_default.description)}
1979
+ console.log(` ${chalk10.white.bold("Framer Export")} ${chalk10.gray(`v${package_default.version}`)}`);
1980
+ console.log(` ${chalk10.white(package_default.description)}
1924
1981
  `);
1925
- console.log(` ${chalk9.white.bold("Author")} ${chalk9.hex("#D4A017")("Dany (danbenba)")}`);
1926
- console.log(` ${chalk9.white.bold("Portfolio")} ${chalk9.underline.hex("#D4A017")("https://github.com/danbenba")}`);
1927
- console.log(` ${chalk9.white.bold("GitHub")} ${chalk9.underline.hex("#D4A017")(package_default.repository.url.replace("git+", "").replace(".git", ""))}`);
1928
- console.log(` ${chalk9.white.bold("npm")} ${chalk9.underline.hex("#D4A017")(`https://www.npmjs.com/package/${package_default.name}`)}`);
1929
- console.log(` ${chalk9.white.bold("License")} ${chalk9.green(package_default.license)}`);
1930
- console.log(` ${chalk9.white.bold("Node")} ${chalk9.gray(`>=${package_default.engines.node}`)}`);
1982
+ console.log(` ${chalk10.white.bold("Author")} ${chalk10.hex("#D4A017")("Dany (danbenba)")}`);
1983
+ console.log(` ${chalk10.white.bold("Portfolio")} ${chalk10.underline.hex("#D4A017")("https://github.com/danbenba")}`);
1984
+ console.log(` ${chalk10.white.bold("GitHub")} ${chalk10.underline.hex("#D4A017")(package_default.repository.url.replace("git+", "").replace(".git", ""))}`);
1985
+ console.log(` ${chalk10.white.bold("npm")} ${chalk10.underline.hex("#D4A017")(`https://www.npmjs.com/package/${package_default.name}`)}`);
1986
+ console.log(` ${chalk10.white.bold("License")} ${chalk10.green(package_default.license)}`);
1987
+ console.log(` ${chalk10.white.bold("Node")} ${chalk10.gray(`>=${package_default.engines.node}`)}`);
1931
1988
  console.log("");
1932
1989
  process.exit(0);
1933
1990
  }
1934
1991
  checkForUpdates(VERSION).then((latest) => {
1935
1992
  if (!latest) return;
1936
- import("chalk").then((chalk9) => {
1993
+ import("chalk").then((chalk10) => {
1937
1994
  console.log("");
1938
1995
  console.log(
1939
- ` ${chalk9.default.yellow("\u21B3")} Update available: ${chalk9.default.gray(VERSION)} \u2192 ${chalk9.default.green(latest)}`
1996
+ ` ${chalk10.default.yellow("\u21B3")} Update available: ${chalk10.default.gray(VERSION)} \u2192 ${chalk10.default.green(latest)}`
1940
1997
  );
1941
- console.log(` ${chalk9.default.hex("#D4A017")(" Run:")} ${chalk9.default.hex("#B8860B")("npm i -g framer-export@latest")}`);
1998
+ console.log(` ${chalk10.default.hex("#D4A017")(" Run:")} ${chalk10.default.hex("#B8860B")("npm i -g framer-export@latest")}`);
1942
1999
  console.log("");
1943
2000
  });
1944
2001
  });
@@ -1965,9 +2022,9 @@ async function main() {
1965
2022
  try {
1966
2023
  new URL5(url);
1967
2024
  } catch {
1968
- const chalk9 = (await import("chalk")).default;
1969
- console.log(` ${chalk9.red("\u2717")} ${chalk9.red.bold("Invalid URL:")} ${chalk9.white(url)}`);
1970
- console.log(` ${chalk9.gray("Expected: https://yoursite.framer.app")}
2025
+ const chalk10 = (await import("chalk")).default;
2026
+ console.log(` ${chalk10.red("\u2717")} ${chalk10.red.bold("Invalid URL:")} ${chalk10.white(url)}`);
2027
+ console.log(` ${chalk10.gray("Expected: https://yoursite.framer.app")}
1971
2028
  `);
1972
2029
  process.exit(1);
1973
2030
  }
@@ -1979,10 +2036,10 @@ async function main() {
1979
2036
  try {
1980
2037
  await new FramerExporter2(url, path7.resolve(out), platformOverride || void 0).run(includeSubpages);
1981
2038
  } catch (e) {
1982
- const chalk9 = (await import("chalk")).default;
2039
+ const chalk10 = (await import("chalk")).default;
1983
2040
  console.log(`
1984
- ${chalk9.red("\u2717")} ${chalk9.red.bold("FAILED:")} ${chalk9.white(e.message)}`);
1985
- console.log(chalk9.gray(e.stack || ""));
2041
+ ${chalk10.red("\u2717")} ${chalk10.red.bold("FAILED:")} ${chalk10.white(e.message)}`);
2042
+ console.log(chalk10.gray(e.stack || ""));
1986
2043
  process.exit(1);
1987
2044
  }
1988
2045
  }