open-nami 1.2.9 → 1.3.1

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 +67 -26
  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.9",
12
+ version: "1.3.1",
13
13
  description: "Open Nami: terminal-first bulk social media profile downloader for Instagram, TikTok, Facebook & X.",
14
14
  type: "module",
15
15
  bin: {
@@ -4371,29 +4371,52 @@ async function dispatchDownload(options) {
4371
4371
  import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
4372
4372
  function ChoiceIndicator({ isSelected }) {
4373
4373
  const theme = useTheme();
4374
- return /* @__PURE__ */ jsx8(Box6, { marginRight: 1, children: /* @__PURE__ */ jsx8(Text7, { color: theme.primary, children: isSelected ? "\u276F" : " " }) });
4374
+ return /* @__PURE__ */ jsxs6(Box6, { children: [
4375
+ /* @__PURE__ */ jsx8(Text7, { color: theme.primary, children: "\u258E " }),
4376
+ /* @__PURE__ */ jsx8(Text7, { color: theme.primary, bold: true, children: isSelected ? "\u276F " : " " })
4377
+ ] });
4375
4378
  }
4376
- function ChoiceItem({ isSelected, label }) {
4379
+ function ChoiceItem({
4380
+ isSelected,
4381
+ label,
4382
+ value,
4383
+ description
4384
+ }) {
4377
4385
  const theme = useTheme();
4378
- return /* @__PURE__ */ jsx8(Text7, { color: theme.primary, bold: isSelected, children: label });
4386
+ const rawTag = `[${value === "all" ? "EVERYTHING" : String(value || label).toUpperCase()}]`;
4387
+ const paddedTag = rawTag.padEnd(12, " ");
4388
+ return /* @__PURE__ */ jsxs6(Box6, { children: [
4389
+ /* @__PURE__ */ jsx8(
4390
+ Text7,
4391
+ {
4392
+ color: isSelected ? theme.background : theme.primary,
4393
+ backgroundColor: isSelected ? theme.primary : void 0,
4394
+ bold: isSelected,
4395
+ children: paddedTag
4396
+ }
4397
+ ),
4398
+ /* @__PURE__ */ jsx8(Text7, { color: theme.gray, children: " " }),
4399
+ /* @__PURE__ */ jsx8(Text7, { color: isSelected ? theme.primary : theme.gray, dimColor: !isSelected, bold: isSelected, children: description || label })
4400
+ ] });
4379
4401
  }
4380
4402
  function getPickingOptions(platform) {
4381
4403
  const items = [
4382
- { label: "Photos", value: "photos" },
4383
- { label: "Videos", value: "videos" }
4404
+ { label: "Photos", value: "photos", description: "Feed images and carousels" },
4405
+ { label: "Videos", value: "videos", description: "Reels and timeline clips" }
4384
4406
  ];
4385
4407
  if (platform === "instagram") {
4386
- items.push({ label: "Stories", value: "stories" });
4387
- items.push({ label: "Highlights", value: "highlights" });
4408
+ items.push({ label: "Stories", value: "stories", description: "Active 24h stories" });
4409
+ items.push({ label: "Highlights", value: "highlights", description: "Saved story archive reels" });
4388
4410
  }
4389
4411
  items.push({
4390
4412
  label: "Everything",
4391
- value: "all"
4413
+ value: "all",
4414
+ description: "Complete profile download"
4392
4415
  });
4393
4416
  return items;
4394
4417
  }
4395
4418
  function PickingView({
4396
- contentWidth: _contentWidth,
4419
+ contentWidth,
4397
4420
  profile,
4398
4421
  outputDir,
4399
4422
  initialLimit,
@@ -4432,6 +4455,7 @@ function PickingView({
4432
4455
  resume: initialResume
4433
4456
  });
4434
4457
  };
4458
+ const boxWidth = Math.min(48, Math.max(44, (contentWidth || 80) - 8));
4435
4459
  return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", alignItems: "center", width: "100%", children: [
4436
4460
  /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", alignItems: "center", marginBottom: 1, children: [
4437
4461
  /* @__PURE__ */ jsxs6(Text7, { bold: true, color: theme.primary, children: [
@@ -4445,23 +4469,29 @@ function PickingView({
4445
4469
  profile.cleanUrl ? ` \xB7 ${profile.cleanUrl}` : ""
4446
4470
  ] }),
4447
4471
  /* @__PURE__ */ jsx8(Gap2, {}),
4448
- /* @__PURE__ */ jsx8(Text7, { color: theme.gray, dimColor: theme.dimSecondary, children: "Select what to download from this profile." }),
4449
- hasCheckpoint ? /* @__PURE__ */ jsx8(Box6, { marginTop: 1, children: /* @__PURE__ */ jsx8(Text7, { color: theme.primary, bold: true, children: "\u26A1 Checkpoint found (cursor saved)" }) }) : null
4472
+ /* @__PURE__ */ jsx8(Text7, { color: theme.gray, dimColor: theme.dimSecondary, children: "Select target media:" })
4450
4473
  ] }),
4451
- /* @__PURE__ */ jsx8(Panel, { title: "Download", width: 44, children: /* @__PURE__ */ jsx8(Box6, { width: "100%", alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx8(
4452
- SelectInput,
4453
- {
4454
- indicatorComponent: ChoiceIndicator,
4455
- itemComponent: ChoiceItem,
4456
- items: items.map((item, index) => ({
4457
- key: String(index),
4458
- label: item.label,
4459
- value: item.value
4460
- })),
4461
- onSelect: (item) => handleItemSelect(item.value),
4462
- onHighlight: (item) => onHighlight?.(item.value)
4463
- }
4464
- ) }) })
4474
+ /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", width: boxWidth, children: [
4475
+ /* @__PURE__ */ jsx8(
4476
+ SelectInput,
4477
+ {
4478
+ indicatorComponent: ChoiceIndicator,
4479
+ itemComponent: ChoiceItem,
4480
+ items: items.map((item, index) => ({
4481
+ key: String(index),
4482
+ label: item.label,
4483
+ value: item.value,
4484
+ description: item.description
4485
+ })),
4486
+ onSelect: (item) => handleItemSelect(item.value),
4487
+ onHighlight: (item) => onHighlight?.(item.value)
4488
+ }
4489
+ ),
4490
+ hasCheckpoint ? /* @__PURE__ */ jsxs6(Box6, { marginTop: 1, children: [
4491
+ /* @__PURE__ */ jsx8(Text7, { color: theme.primary, children: "\u258E " }),
4492
+ /* @__PURE__ */ jsx8(Text7, { color: theme.primary, bold: true, children: "\u26A1 Checkpoint found (cursor saved)" })
4493
+ ] }) : null
4494
+ ] })
4465
4495
  ] });
4466
4496
  }
4467
4497
 
@@ -7001,6 +7031,17 @@ function InnerApp({
7001
7031
  match: item.label,
7002
7032
  action: () => handleModeSelect(item.value, phase.profile)
7003
7033
  });
7034
+ const tag = `[${item.value === "all" ? "EVERYTHING" : item.value.toUpperCase()}]`;
7035
+ targets.push({
7036
+ match: tag,
7037
+ action: () => handleModeSelect(item.value, phase.profile)
7038
+ });
7039
+ if (item.description) {
7040
+ targets.push({
7041
+ match: item.description,
7042
+ action: () => handleModeSelect(item.value, phase.profile)
7043
+ });
7044
+ }
7004
7045
  }
7005
7046
  }
7006
7047
  if (phase.name === "done") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-nami",
3
- "version": "1.2.9",
3
+ "version": "1.3.1",
4
4
  "description": "Open Nami: terminal-first bulk social media profile downloader for Instagram, TikTok, Facebook & X.",
5
5
  "type": "module",
6
6
  "bin": {