open-nami 1.2.5 → 1.2.6

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 (2) hide show
  1. package/dist/cli.js +285 -141
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -9,7 +9,7 @@ var require_package = __commonJS({
9
9
  "package.json"(exports, module) {
10
10
  module.exports = {
11
11
  name: "open-nami",
12
- version: "1.2.5",
12
+ version: "1.2.6",
13
13
  description: "Open Nami: terminal-first bulk social media profile downloader for Instagram, TikTok, Facebook & X.",
14
14
  type: "module",
15
15
  bin: {
@@ -5759,7 +5759,6 @@ var PLATFORMS = ["instagram", "tiktok", "facebook", "x"];
5759
5759
  var CHOICES = ["all", "photos", "videos", "stories", "highlights"];
5760
5760
  var DATE_PRESETS2 = ["all", "24h", "7d", "30d", "2024", "2023", "2022", "2021", "custom"];
5761
5761
  var LIMIT_PRESETS2 = [void 0, 10, 24, 50, 100, "custom"];
5762
- var OPTION_CONTROLS = ["platform", "choice", "limit", "date", "meta", "resume", "start"];
5763
5762
  function BatchView({
5764
5763
  onBack,
5765
5764
  outputDir,
@@ -5980,72 +5979,196 @@ function BatchView({
5980
5979
  }
5981
5980
  return;
5982
5981
  }
5983
- if (OPTION_CONTROLS.includes(focusedControl)) {
5982
+ if (focusedControl === "platform") {
5983
+ if (key.rightArrow) {
5984
+ setFocusedControl("choice");
5985
+ return;
5986
+ }
5987
+ if (key.downArrow) {
5988
+ setFocusedControl("limit");
5989
+ return;
5990
+ }
5984
5991
  if (key.upArrow) {
5985
5992
  setFocusedControl("input");
5986
5993
  return;
5987
5994
  }
5988
- if (key.rightArrow || key.tab && !key.shift) {
5989
- const idx = OPTION_CONTROLS.indexOf(focusedControl);
5990
- setFocusedControl(OPTION_CONTROLS[(idx + 1) % OPTION_CONTROLS.length]);
5995
+ if (key.tab && !key.shift) {
5996
+ setFocusedControl("choice");
5991
5997
  return;
5992
5998
  }
5993
- if (key.leftArrow || key.tab && key.shift) {
5994
- const idx = OPTION_CONTROLS.indexOf(focusedControl);
5995
- setFocusedControl(OPTION_CONTROLS[(idx - 1 + OPTION_CONTROLS.length) % OPTION_CONTROLS.length]);
5999
+ if (key.tab && key.shift) {
6000
+ setFocusedControl("input");
5996
6001
  return;
5997
6002
  }
5998
- if (input === " " || key.return) {
5999
- switch (focusedControl) {
6000
- case "platform":
6001
- cyclePlatform();
6002
- break;
6003
- case "choice":
6004
- cycleChoice();
6005
- break;
6006
- case "limit":
6007
- cycleLimit();
6008
- break;
6009
- case "date":
6010
- cycleDate();
6011
- break;
6012
- case "meta":
6013
- toggleMetadata();
6014
- break;
6015
- case "resume":
6016
- toggleResume();
6017
- break;
6018
- case "start":
6019
- startQueue();
6020
- break;
6021
- }
6003
+ } else if (focusedControl === "choice") {
6004
+ if (key.leftArrow) {
6005
+ setFocusedControl("platform");
6022
6006
  return;
6023
6007
  }
6024
- if (input === "p" || input === "P") {
6025
- cyclePlatform();
6008
+ if (key.downArrow) {
6009
+ setFocusedControl("date");
6026
6010
  return;
6027
6011
  }
6028
- if (input === "c" || input === "C") {
6029
- cycleChoice();
6012
+ if (key.upArrow) {
6013
+ setFocusedControl("input");
6030
6014
  return;
6031
6015
  }
6032
- if (input === "l" || input === "L") {
6033
- cycleLimit();
6016
+ if (key.tab && !key.shift) {
6017
+ setFocusedControl("limit");
6034
6018
  return;
6035
6019
  }
6036
- if (input === "d" || input === "D") {
6037
- cycleDate();
6020
+ if (key.tab && key.shift) {
6021
+ setFocusedControl("platform");
6038
6022
  return;
6039
6023
  }
6040
- if (input === "m" || input === "M") {
6041
- toggleMetadata();
6024
+ } else if (focusedControl === "limit") {
6025
+ if (key.upArrow) {
6026
+ setFocusedControl("platform");
6042
6027
  return;
6043
6028
  }
6044
- if (input === "r" || input === "R") {
6045
- toggleResume();
6029
+ if (key.rightArrow) {
6030
+ setFocusedControl("date");
6031
+ return;
6032
+ }
6033
+ if (key.downArrow) {
6034
+ setFocusedControl("meta");
6035
+ return;
6036
+ }
6037
+ if (key.tab && !key.shift) {
6038
+ setFocusedControl("date");
6039
+ return;
6040
+ }
6041
+ if (key.tab && key.shift) {
6042
+ setFocusedControl("choice");
6043
+ return;
6044
+ }
6045
+ } else if (focusedControl === "date") {
6046
+ if (key.upArrow) {
6047
+ setFocusedControl("choice");
6048
+ return;
6049
+ }
6050
+ if (key.leftArrow) {
6051
+ setFocusedControl("limit");
6052
+ return;
6053
+ }
6054
+ if (key.downArrow) {
6055
+ setFocusedControl("resume");
6056
+ return;
6057
+ }
6058
+ if (key.tab && !key.shift) {
6059
+ setFocusedControl("meta");
6060
+ return;
6061
+ }
6062
+ if (key.tab && key.shift) {
6063
+ setFocusedControl("limit");
6064
+ return;
6065
+ }
6066
+ } else if (focusedControl === "meta") {
6067
+ if (key.upArrow) {
6068
+ setFocusedControl("limit");
6069
+ return;
6070
+ }
6071
+ if (key.rightArrow) {
6072
+ setFocusedControl("resume");
6073
+ return;
6074
+ }
6075
+ if (key.downArrow) {
6076
+ setFocusedControl("start");
6077
+ return;
6078
+ }
6079
+ if (key.tab && !key.shift) {
6080
+ setFocusedControl("resume");
6081
+ return;
6082
+ }
6083
+ if (key.tab && key.shift) {
6084
+ setFocusedControl("date");
6085
+ return;
6086
+ }
6087
+ } else if (focusedControl === "resume") {
6088
+ if (key.upArrow) {
6089
+ setFocusedControl("date");
6090
+ return;
6091
+ }
6092
+ if (key.leftArrow) {
6093
+ setFocusedControl("meta");
6094
+ return;
6095
+ }
6096
+ if (key.downArrow) {
6097
+ setFocusedControl("start");
6098
+ return;
6099
+ }
6100
+ if (key.tab && !key.shift) {
6101
+ setFocusedControl("start");
6102
+ return;
6103
+ }
6104
+ if (key.tab && key.shift) {
6105
+ setFocusedControl("meta");
6106
+ return;
6107
+ }
6108
+ } else if (focusedControl === "start") {
6109
+ if (key.upArrow) {
6110
+ setFocusedControl("meta");
6111
+ return;
6112
+ }
6113
+ if (key.downArrow || key.tab && !key.shift) {
6114
+ setFocusedControl("tabs");
6115
+ return;
6116
+ }
6117
+ if (key.tab && key.shift) {
6118
+ setFocusedControl("resume");
6046
6119
  return;
6047
6120
  }
6048
6121
  }
6122
+ if (input === " " || key.return) {
6123
+ switch (focusedControl) {
6124
+ case "platform":
6125
+ cyclePlatform();
6126
+ break;
6127
+ case "choice":
6128
+ cycleChoice();
6129
+ break;
6130
+ case "limit":
6131
+ cycleLimit();
6132
+ break;
6133
+ case "date":
6134
+ cycleDate();
6135
+ break;
6136
+ case "meta":
6137
+ toggleMetadata();
6138
+ break;
6139
+ case "resume":
6140
+ toggleResume();
6141
+ break;
6142
+ case "start":
6143
+ startQueue();
6144
+ break;
6145
+ }
6146
+ return;
6147
+ }
6148
+ if (input === "p" || input === "P") {
6149
+ cyclePlatform();
6150
+ return;
6151
+ }
6152
+ if (input === "c" || input === "C") {
6153
+ cycleChoice();
6154
+ return;
6155
+ }
6156
+ if (input === "l" || input === "L") {
6157
+ cycleLimit();
6158
+ return;
6159
+ }
6160
+ if (input === "d" || input === "D") {
6161
+ cycleDate();
6162
+ return;
6163
+ }
6164
+ if (input === "m" || input === "M") {
6165
+ toggleMetadata();
6166
+ return;
6167
+ }
6168
+ if (input === "r" || input === "R") {
6169
+ toggleResume();
6170
+ return;
6171
+ }
6049
6172
  }
6050
6173
  }, { isActive: Boolean(process.stdin.isTTY) });
6051
6174
  useEffect7(() => {
@@ -6055,6 +6178,7 @@ function BatchView({
6055
6178
  targets.push({
6056
6179
  match: "Links / Handles",
6057
6180
  padX: 2,
6181
+ padY: 0,
6058
6182
  action: () => {
6059
6183
  setInputField("text");
6060
6184
  setFocusedControl("input");
@@ -6063,24 +6187,22 @@ function BatchView({
6063
6187
  targets.push({
6064
6188
  match: "File (.txt)",
6065
6189
  padX: 2,
6190
+ padY: 0,
6066
6191
  action: () => {
6067
6192
  setInputField("file");
6068
6193
  setFocusedControl("input");
6069
6194
  }
6070
6195
  });
6071
6196
  targets.push({
6072
- match: "Links or @handles",
6073
- padX: 2,
6074
- action: () => setFocusedControl("input")
6075
- });
6076
- targets.push({
6077
- match: "Batch file (.txt)",
6197
+ match: "download",
6078
6198
  padX: 2,
6079
- action: () => setFocusedControl("input")
6199
+ padY: 1,
6200
+ action: startQueue
6080
6201
  });
6081
6202
  targets.push({
6082
6203
  match: "Platform:",
6083
6204
  padX: 2,
6205
+ padY: 0,
6084
6206
  action: () => {
6085
6207
  setFocusedControl("platform");
6086
6208
  cyclePlatform();
@@ -6089,6 +6211,7 @@ function BatchView({
6089
6211
  targets.push({
6090
6212
  match: "Media:",
6091
6213
  padX: 2,
6214
+ padY: 0,
6092
6215
  action: () => {
6093
6216
  setFocusedControl("choice");
6094
6217
  cycleChoice();
@@ -6097,6 +6220,7 @@ function BatchView({
6097
6220
  targets.push({
6098
6221
  match: "Posts:",
6099
6222
  padX: 2,
6223
+ padY: 0,
6100
6224
  action: () => {
6101
6225
  setFocusedControl("limit");
6102
6226
  cycleLimit();
@@ -6105,6 +6229,7 @@ function BatchView({
6105
6229
  targets.push({
6106
6230
  match: "Date:",
6107
6231
  padX: 2,
6232
+ padY: 0,
6108
6233
  action: () => {
6109
6234
  setFocusedControl("date");
6110
6235
  cycleDate();
@@ -6113,6 +6238,7 @@ function BatchView({
6113
6238
  targets.push({
6114
6239
  match: "Meta:",
6115
6240
  padX: 2,
6241
+ padY: 0,
6116
6242
  action: () => {
6117
6243
  setFocusedControl("meta");
6118
6244
  toggleMetadata();
@@ -6121,14 +6247,16 @@ function BatchView({
6121
6247
  targets.push({
6122
6248
  match: "Resume:",
6123
6249
  padX: 2,
6250
+ padY: 0,
6124
6251
  action: () => {
6125
6252
  setFocusedControl("resume");
6126
6253
  toggleResume();
6127
6254
  }
6128
6255
  });
6129
6256
  targets.push({
6130
- match: "Start Queue",
6257
+ match: "Start Batch Queue",
6131
6258
  padX: 3,
6259
+ padY: 0,
6132
6260
  action: () => {
6133
6261
  setFocusedControl("start");
6134
6262
  startQueue();
@@ -6214,60 +6342,79 @@ function BatchView({
6214
6342
  startQueue,
6215
6343
  outputDir
6216
6344
  ]);
6345
+ const panelWidth = Math.max(64, boxWidth);
6346
+ const inputFrameWidth = panelWidth - 18;
6347
+ const innerContentWidth = panelWidth - 6;
6348
+ const colWidth = Math.floor((innerContentWidth - 4) / 2);
6217
6349
  const currentItem = queueItems[currentIndex];
6218
6350
  const completedCount = queueItems.filter((i) => i.status === "success" || i.status === "failed").length;
6219
6351
  const totalCount = queueItems.length > 0 ? queueItems.length : 1;
6220
6352
  const percent = Math.min(100, Math.floor(completedCount / totalCount * 100));
6221
6353
  return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", alignItems: "center", children: [
6222
- phase === "input" && /* @__PURE__ */ jsx17(Panel, { title: "Batch Queue", width: Math.max(60, boxWidth), children: /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingY: 1, children: [
6354
+ phase === "input" && /* @__PURE__ */ jsx17(Panel, { title: "Batch Queue", width: panelWidth, children: /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", alignItems: "center", paddingY: 1, children: [
6223
6355
  /* @__PURE__ */ jsxs14(Box14, { marginBottom: 1, justifyContent: "center", children: [
6224
- /* @__PURE__ */ jsx17(
6356
+ /* @__PURE__ */ jsx17(Box14, { marginRight: 2, children: /* @__PURE__ */ jsx17(
6225
6357
  Text16,
6226
6358
  {
6227
6359
  bold: true,
6228
6360
  color: inputField === "text" ? theme.primary : theme.gray,
6229
- inverse: focusedControl === "tabs" && inputField === "text",
6230
- children: inputField === "text" ? "\u25CF Links / Handles" : "\u25CB Links / Handles"
6361
+ inverse: inputField === "text",
6362
+ children: " Links / Handles "
6231
6363
  }
6232
- ),
6233
- /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: " \xB7 " }),
6234
- /* @__PURE__ */ jsx17(
6364
+ ) }),
6365
+ /* @__PURE__ */ jsx17(Box14, { children: /* @__PURE__ */ jsx17(
6235
6366
  Text16,
6236
6367
  {
6237
6368
  bold: true,
6238
6369
  color: inputField === "file" ? theme.primary : theme.gray,
6239
- inverse: focusedControl === "tabs" && inputField === "file",
6240
- children: inputField === "file" ? "\u25CF File (.txt)" : "\u25CB File (.txt)"
6370
+ inverse: inputField === "file",
6371
+ children: " File (.txt) "
6241
6372
  }
6242
- )
6373
+ ) })
6243
6374
  ] }),
6244
- inputField === "text" ? /* @__PURE__ */ jsx17(FramedInput, { title: "Links or @handles", width: Math.max(56, boxWidth - 4), children: /* @__PURE__ */ jsx17(
6245
- TextInput,
6375
+ inputField === "text" ? /* @__PURE__ */ jsx17(
6376
+ FramedInput,
6246
6377
  {
6247
- value: rawText,
6248
- onChange: setRawText,
6249
- onSubmit: startQueue,
6250
- placeholder: "@user1, @user2, tiktok.com/@user3\u2026",
6251
- width: Math.max(50, boxWidth - 10),
6252
- focus: focusedControl === "input",
6253
- onArrowDown: () => setFocusedControl("start"),
6254
- onArrowUp: () => setFocusedControl("tabs"),
6255
- onTab: () => setFocusedControl("start")
6256
- }
6257
- ) }) : /* @__PURE__ */ jsx17(FramedInput, { title: "Batch file (.txt)", width: Math.max(56, boxWidth - 4), children: /* @__PURE__ */ jsx17(
6258
- TextInput,
6378
+ title: "Links or @handles",
6379
+ width: inputFrameWidth,
6380
+ button: "download",
6381
+ children: /* @__PURE__ */ jsx17(
6382
+ TextInput,
6383
+ {
6384
+ value: rawText,
6385
+ onChange: setRawText,
6386
+ onSubmit: startQueue,
6387
+ placeholder: "@user1, @user2, tiktok.com/@user3\u2026",
6388
+ width: inputFrameWidth - 4,
6389
+ focus: focusedControl === "input",
6390
+ onArrowDown: () => setFocusedControl("platform"),
6391
+ onArrowUp: () => setFocusedControl("tabs"),
6392
+ onTab: () => setFocusedControl("platform")
6393
+ }
6394
+ )
6395
+ }
6396
+ ) : /* @__PURE__ */ jsx17(
6397
+ FramedInput,
6259
6398
  {
6260
- value: filePath,
6261
- onChange: setFilePath,
6262
- onSubmit: startQueue,
6263
- placeholder: "e.g. creators.txt or C:\\path\\creators.txt",
6264
- width: Math.max(50, boxWidth - 10),
6265
- focus: focusedControl === "input",
6266
- onArrowDown: () => setFocusedControl("start"),
6267
- onArrowUp: () => setFocusedControl("tabs"),
6268
- onTab: () => setFocusedControl("start")
6399
+ title: "Batch file (.txt)",
6400
+ width: inputFrameWidth,
6401
+ button: "download",
6402
+ children: /* @__PURE__ */ jsx17(
6403
+ TextInput,
6404
+ {
6405
+ value: filePath,
6406
+ onChange: setFilePath,
6407
+ onSubmit: startQueue,
6408
+ placeholder: "e.g. creators.txt or C:\\path\\creators.txt",
6409
+ width: inputFrameWidth - 4,
6410
+ focus: focusedControl === "input",
6411
+ onArrowDown: () => setFocusedControl("platform"),
6412
+ onArrowUp: () => setFocusedControl("tabs"),
6413
+ onTab: () => setFocusedControl("platform")
6414
+ }
6415
+ )
6269
6416
  }
6270
- ) }),
6417
+ ),
6271
6418
  errorMessage ? /* @__PURE__ */ jsx17(Box14, { marginTop: 1, children: /* @__PURE__ */ jsxs14(Text16, { color: "red", children: [
6272
6419
  "\u2717 ",
6273
6420
  errorMessage
@@ -6276,10 +6423,11 @@ function BatchView({
6276
6423
  Box14,
6277
6424
  {
6278
6425
  flexDirection: "column",
6426
+ width: innerContentWidth,
6279
6427
  marginTop: 1,
6280
6428
  borderStyle: "round",
6281
- borderColor: focusedControl !== "input" && focusedControl !== "tabs" ? theme.primary : theme.gray,
6282
- borderDimColor: focusedControl === "input" || focusedControl === "tabs",
6429
+ borderColor: focusedControl !== "input" && focusedControl !== "tabs" && focusedControl !== "start" ? theme.primary : theme.gray,
6430
+ borderDimColor: focusedControl === "input" || focusedControl === "tabs" || focusedControl === "start",
6283
6431
  paddingX: 1,
6284
6432
  children: focusedControl === "custom-limit" ? /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
6285
6433
  /* @__PURE__ */ jsx17(Text16, { bold: true, color: theme.primary, children: "Set post limit (e.g. 24, all):" }),
@@ -6291,7 +6439,7 @@ function BatchView({
6291
6439
  onSubmit: (val) => {
6292
6440
  const parsed = parseLimit(val);
6293
6441
  setLimit(parsed);
6294
- setFocusedControl("start");
6442
+ setFocusedControl("limit");
6295
6443
  },
6296
6444
  width: 24
6297
6445
  }
@@ -6307,110 +6455,106 @@ function BatchView({
6307
6455
  onSubmit: (val) => {
6308
6456
  const trimmed = val.trim();
6309
6457
  setDateFilter(trimmed ? trimmed : "all");
6310
- setFocusedControl("start");
6458
+ setFocusedControl("date");
6311
6459
  },
6312
6460
  width: 24
6313
6461
  }
6314
6462
  ) }),
6315
6463
  /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: "\u21B5 confirm \xB7 esc cancel" })
6316
6464
  ] }) : /* @__PURE__ */ jsxs14(Fragment4, { children: [
6317
- /* @__PURE__ */ jsxs14(Box14, { justifyContent: "space-between", children: [
6318
- /* @__PURE__ */ jsxs14(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: [
6319
- "[p] Platform:",
6320
- " ",
6465
+ /* @__PURE__ */ jsxs14(Box14, { justifyContent: "space-between", width: "100%", children: [
6466
+ /* @__PURE__ */ jsxs14(Box14, { width: colWidth, children: [
6467
+ /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: "[p] Platform: " }),
6321
6468
  /* @__PURE__ */ jsx17(
6322
6469
  Text16,
6323
6470
  {
6324
- color: theme.primary,
6325
6471
  bold: true,
6472
+ color: theme.primary,
6326
6473
  inverse: focusedControl === "platform",
6327
- children: defaultPlatform.toUpperCase()
6474
+ children: ` ${defaultPlatform.toUpperCase()} `
6328
6475
  }
6329
6476
  )
6330
6477
  ] }),
6331
- /* @__PURE__ */ jsxs14(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: [
6332
- "[c] Media:",
6333
- " ",
6478
+ /* @__PURE__ */ jsxs14(Box14, { width: colWidth, children: [
6479
+ /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: "[c] Media: " }),
6334
6480
  /* @__PURE__ */ jsx17(
6335
6481
  Text16,
6336
6482
  {
6337
- color: theme.primary,
6338
6483
  bold: true,
6484
+ color: theme.primary,
6339
6485
  inverse: focusedControl === "choice",
6340
- children: choice === "all" ? "EVERYTHING" : choice.toUpperCase()
6486
+ children: ` ${choice === "all" ? "EVERYTHING" : choice.toUpperCase()} `
6341
6487
  }
6342
6488
  )
6343
- ] }),
6344
- /* @__PURE__ */ jsxs14(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: [
6345
- "[l] Posts:",
6346
- " ",
6489
+ ] })
6490
+ ] }),
6491
+ /* @__PURE__ */ jsxs14(Box14, { justifyContent: "space-between", width: "100%", marginTop: 1, children: [
6492
+ /* @__PURE__ */ jsxs14(Box14, { width: colWidth, children: [
6493
+ /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: "[l] Posts: " }),
6347
6494
  /* @__PURE__ */ jsx17(
6348
6495
  Text16,
6349
6496
  {
6350
- color: theme.primary,
6351
6497
  bold: true,
6498
+ color: theme.primary,
6352
6499
  inverse: focusedControl === "limit",
6353
- children: limit ? `${limit}` : "ALL"
6500
+ children: ` ${limit ? String(limit) : "ALL"} `
6354
6501
  }
6355
6502
  )
6356
- ] })
6357
- ] }),
6358
- /* @__PURE__ */ jsxs14(Box14, { justifyContent: "space-between", marginTop: 1, children: [
6359
- /* @__PURE__ */ jsxs14(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: [
6360
- "[d] Date:",
6361
- " ",
6503
+ ] }),
6504
+ /* @__PURE__ */ jsxs14(Box14, { width: colWidth, children: [
6505
+ /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: "[d] Date: " }),
6362
6506
  /* @__PURE__ */ jsx17(
6363
6507
  Text16,
6364
6508
  {
6365
- color: theme.primary,
6366
6509
  bold: true,
6510
+ color: theme.primary,
6367
6511
  inverse: focusedControl === "date",
6368
- children: dateFilter.toUpperCase()
6512
+ children: ` ${dateFilter.toUpperCase()} `
6369
6513
  }
6370
6514
  )
6371
- ] }),
6372
- /* @__PURE__ */ jsxs14(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: [
6373
- "[m] Meta:",
6374
- " ",
6515
+ ] })
6516
+ ] }),
6517
+ /* @__PURE__ */ jsxs14(Box14, { justifyContent: "space-between", width: "100%", marginTop: 1, children: [
6518
+ /* @__PURE__ */ jsxs14(Box14, { width: colWidth, children: [
6519
+ /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: "[m] Meta: " }),
6375
6520
  /* @__PURE__ */ jsx17(
6376
6521
  Text16,
6377
6522
  {
6378
- color: theme.primary,
6379
6523
  bold: true,
6524
+ color: theme.primary,
6380
6525
  inverse: focusedControl === "meta",
6381
- children: writeMetadata ? "ON" : "OFF"
6526
+ children: ` ${writeMetadata ? "ON" : "OFF"} `
6382
6527
  }
6383
6528
  )
6384
6529
  ] }),
6385
- /* @__PURE__ */ jsxs14(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: [
6386
- "[r] Resume:",
6387
- " ",
6530
+ /* @__PURE__ */ jsxs14(Box14, { width: colWidth, children: [
6531
+ /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: "[r] Resume: " }),
6388
6532
  /* @__PURE__ */ jsx17(
6389
6533
  Text16,
6390
6534
  {
6391
- color: theme.primary,
6392
6535
  bold: true,
6536
+ color: theme.primary,
6393
6537
  inverse: focusedControl === "resume",
6394
- children: resume ? "ON" : "OFF"
6538
+ children: ` ${resume ? "ON" : "OFF"} `
6395
6539
  }
6396
6540
  )
6397
- ] }),
6398
- /* @__PURE__ */ jsx17(
6399
- Text16,
6400
- {
6401
- color: theme.primary,
6402
- bold: true,
6403
- inverse: focusedControl === "start",
6404
- children: "[\u21B5] Start Queue"
6405
- }
6406
- )
6541
+ ] })
6407
6542
  ] })
6408
6543
  ] })
6409
6544
  }
6410
6545
  ),
6411
- /* @__PURE__ */ jsx17(Box14, { marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: focusedControl === "input" ? "Type handles or URLs \xB7 \u21B5 to start \xB7 \u2193 to customize options" : focusedControl === "tabs" ? "Space to switch mode \xB7 \u2193 to edit input" : "\u2190/\u2192/Tab choose option \xB7 Space/Enter toggle \xB7 \u21B5 start queue \xB7 \u2191 edit input" }) })
6546
+ /* @__PURE__ */ jsx17(Box14, { justifyContent: "center", marginTop: 1, children: /* @__PURE__ */ jsx17(
6547
+ Text16,
6548
+ {
6549
+ bold: true,
6550
+ color: theme.primary,
6551
+ inverse: focusedControl === "start",
6552
+ children: " \u21B5 Start Batch Queue "
6553
+ }
6554
+ ) }),
6555
+ /* @__PURE__ */ jsx17(Box14, { marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: focusedControl === "input" ? "Type handles or URLs \xB7 \u21B5 or click download to start" : focusedControl === "tabs" ? "Space to switch mode \xB7 \u2193 to edit input" : "\u2190/\u2192/Tab select \xB7 Space/Enter toggle \xB7 \u21B5 start queue \xB7 \u2191 edit input" }) })
6412
6556
  ] }) }),
6413
- phase === "running" && /* @__PURE__ */ jsx17(Panel, { title: "Batch Queue Running", width: Math.max(60, boxWidth), children: /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingY: 1, children: [
6557
+ phase === "running" && /* @__PURE__ */ jsx17(Panel, { title: "Batch Queue Running", width: panelWidth, children: /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingY: 1, children: [
6414
6558
  /* @__PURE__ */ jsxs14(Box14, { justifyContent: "space-between", marginBottom: 1, children: [
6415
6559
  /* @__PURE__ */ jsxs14(Text16, { color: theme.primary, bold: true, children: [
6416
6560
  "Account ",
@@ -6423,7 +6567,7 @@ function BatchView({
6423
6567
  ] }),
6424
6568
  /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: isCooldown ? "\u23F3 Cooldown active" : "\u25B6 Downloading" })
6425
6569
  ] }),
6426
- /* @__PURE__ */ jsx17(ProgressBar, { percent, width: 54 }),
6570
+ /* @__PURE__ */ jsx17(ProgressBar, { percent, width: panelWidth - 10 }),
6427
6571
  /* @__PURE__ */ jsx17(Gap2, {}),
6428
6572
  currentItem ? /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", borderStyle: "round", borderColor: theme.primary, paddingX: 1, paddingY: 1, children: [
6429
6573
  /* @__PURE__ */ jsxs14(Box14, { children: [
@@ -6445,7 +6589,7 @@ function BatchView({
6445
6589
  /* @__PURE__ */ jsx17(Gap2, {}),
6446
6590
  /* @__PURE__ */ jsx17(Text16, { color: theme.gray, dimColor: theme.dimSecondary, children: "[esc] Stop queue and return" })
6447
6591
  ] }) }),
6448
- phase === "done" && result && /* @__PURE__ */ jsx17(Panel, { title: "Batch Queue Completed", width: Math.max(60, boxWidth), children: /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingY: 1, children: [
6592
+ phase === "done" && result && /* @__PURE__ */ jsx17(Panel, { title: "Batch Queue Completed", width: panelWidth, children: /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingY: 1, children: [
6449
6593
  /* @__PURE__ */ jsxs14(Text16, { bold: true, color: theme.primary, children: [
6450
6594
  "\u2713 Successfully processed ",
6451
6595
  result.total,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-nami",
3
- "version": "1.2.5",
3
+ "version": "1.2.6",
4
4
  "description": "Open Nami: terminal-first bulk social media profile downloader for Instagram, TikTok, Facebook & X.",
5
5
  "type": "module",
6
6
  "bin": {