@ncukondo/reference-manager 0.24.1 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -1
- package/dist/chunks/{SearchableMultiSelect-CKRfbnka.js → SearchableMultiSelect-B7qEWPDT.js} +2 -2
- package/dist/chunks/{SearchableMultiSelect-CKRfbnka.js.map → SearchableMultiSelect-B7qEWPDT.js.map} +1 -1
- package/dist/chunks/{action-menu-BCgv1m3v.js → action-menu-DD0RtNVD.js} +3 -3
- package/dist/chunks/{action-menu-BCgv1m3v.js.map → action-menu-DD0RtNVD.js.map} +1 -1
- package/dist/chunks/checker-7pzK2XSC.js +92 -0
- package/dist/chunks/checker-7pzK2XSC.js.map +1 -0
- package/dist/chunks/crossref-client-DGNz4PNW.js +52 -0
- package/dist/chunks/crossref-client-DGNz4PNW.js.map +1 -0
- package/dist/chunks/fix-interaction-BpfMLRNY.js +203 -0
- package/dist/chunks/fix-interaction-BpfMLRNY.js.map +1 -0
- package/dist/chunks/{index-C36Us_zC.js → index-CYEise6v.js} +4 -4
- package/dist/chunks/{index-C36Us_zC.js.map → index-CYEise6v.js.map} +1 -1
- package/dist/chunks/{index-DWAtvFtp.js → index-D2HsxXnK.js} +203 -21
- package/dist/chunks/index-D2HsxXnK.js.map +1 -0
- package/dist/chunks/{index-zafRwZEZ.js → index-PQkbePWV.js} +3 -3
- package/dist/chunks/index-PQkbePWV.js.map +1 -0
- package/dist/chunks/{index-JA964gjc.js → index-QTYx5RaF.js} +285 -27
- package/dist/chunks/index-QTYx5RaF.js.map +1 -0
- package/dist/chunks/{loader-CV71qNY2.js → loader-B-fte1uv.js} +19 -8
- package/dist/chunks/loader-B-fte1uv.js.map +1 -0
- package/dist/chunks/pubmed-client-J18fg3fG.js +51 -0
- package/dist/chunks/pubmed-client-J18fg3fG.js.map +1 -0
- package/dist/chunks/{reference-select-Bbl-roAS.js → reference-select-Qpgt9cbN.js} +3 -3
- package/dist/chunks/{reference-select-Bbl-roAS.js.map → reference-select-Qpgt9cbN.js.map} +1 -1
- package/dist/chunks/{style-select-BeAktUts.js → style-select-mEMoWbM2.js} +3 -3
- package/dist/chunks/{style-select-BeAktUts.js.map → style-select-mEMoWbM2.js.map} +1 -1
- package/dist/cli/commands/check.d.ts +42 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/server-client.d.ts +2 -1
- package/dist/cli/server-client.d.ts.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/env-override.d.ts.map +1 -1
- package/dist/config/key-parser.d.ts.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/schema.d.ts +3 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/features/check/checker.d.ts +18 -0
- package/dist/features/check/checker.d.ts.map +1 -0
- package/dist/features/check/crossref-client.d.ts +24 -0
- package/dist/features/check/crossref-client.d.ts.map +1 -0
- package/dist/features/check/fix-actions.d.ts +16 -0
- package/dist/features/check/fix-actions.d.ts.map +1 -0
- package/dist/features/check/fix-interaction.d.ts +11 -0
- package/dist/features/check/fix-interaction.d.ts.map +1 -0
- package/dist/features/check/pubmed-client.d.ts +20 -0
- package/dist/features/check/pubmed-client.d.ts.map +1 -0
- package/dist/features/check/types.d.ts +23 -0
- package/dist/features/check/types.d.ts.map +1 -0
- package/dist/features/operations/check.d.ts +28 -0
- package/dist/features/operations/check.d.ts.map +1 -0
- package/dist/features/operations/index.d.ts +1 -0
- package/dist/features/operations/index.d.ts.map +1 -1
- package/dist/features/operations/library-operations.d.ts +8 -0
- package/dist/features/operations/library-operations.d.ts.map +1 -1
- package/dist/features/operations/operations-library.d.ts +2 -0
- package/dist/features/operations/operations-library.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/mcp/tools/check.d.ts +10 -0
- package/dist/mcp/tools/check.d.ts.map +1 -0
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/routes/check.d.ts +4 -0
- package/dist/server/routes/check.d.ts.map +1 -0
- package/dist/server.js +3 -3
- package/package.json +1 -1
- package/dist/chunks/index-DWAtvFtp.js.map +0 -1
- package/dist/chunks/index-JA964gjc.js.map +0 -1
- package/dist/chunks/index-zafRwZEZ.js.map +0 -1
- package/dist/chunks/loader-CV71qNY2.js.map +0 -1
package/README.md
CHANGED
|
@@ -197,6 +197,7 @@ With a custom library:
|
|
|
197
197
|
| `fulltext_attach` | Attach PDF/Markdown to reference | `id`: Reference ID, `path`: File path |
|
|
198
198
|
| `fulltext_get` | Get full-text content | `id`: Reference ID |
|
|
199
199
|
| `fulltext_detach` | Detach full-text from reference | `id`: Reference ID |
|
|
200
|
+
| `check` | Check references for retractions and updates | `ids?`: Array of IDs, `all?`: Check all, `skipDays?`: Skip recent |
|
|
200
201
|
|
|
201
202
|
### Available Resources
|
|
202
203
|
|
|
@@ -417,6 +418,38 @@ ref attach detach smith2024 supplement-data.xlsx --delete # Also delete file
|
|
|
417
418
|
|
|
418
419
|
Files are organized by reference in directories named `Author-Year-ID-UUID` under the attachments directory.
|
|
419
420
|
|
|
421
|
+
### Reference Checking
|
|
422
|
+
|
|
423
|
+
Check your references for retractions, expressions of concern, and preprint-to-published version changes:
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
# Check specific references
|
|
427
|
+
ref check smith2024
|
|
428
|
+
ref check smith2024 jones2023
|
|
429
|
+
|
|
430
|
+
# Check all references in library
|
|
431
|
+
ref check --all
|
|
432
|
+
|
|
433
|
+
# Skip references checked within the last 30 days
|
|
434
|
+
ref check --all --days 30
|
|
435
|
+
|
|
436
|
+
# JSON output
|
|
437
|
+
ref check --all -o json
|
|
438
|
+
ref check --all -o json --full # Include full details
|
|
439
|
+
|
|
440
|
+
# Report only (do not save results to library)
|
|
441
|
+
ref check --all --no-save
|
|
442
|
+
|
|
443
|
+
# Interactive repair for findings (TTY only)
|
|
444
|
+
ref check --all --fix
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Sources queried:
|
|
448
|
+
- **Crossref** (when DOI is present): Retractions, expressions of concern, version changes via `update-to` field
|
|
449
|
+
- **PubMed** (when PMID is present): Retraction status, expression of concern
|
|
450
|
+
|
|
451
|
+
Results are saved to `custom.check` by default for skip-if-recent logic.
|
|
452
|
+
|
|
420
453
|
### Edit Command
|
|
421
454
|
|
|
422
455
|
Edit references interactively using your preferred text editor:
|
|
@@ -582,6 +615,10 @@ library = "~/references.json"
|
|
|
582
615
|
# Logging level: silent, info, debug
|
|
583
616
|
log_level = "info"
|
|
584
617
|
|
|
618
|
+
# Shared email for API services (Crossref, PubMed, Unpaywall, NCBI)
|
|
619
|
+
# Each service uses this as a fallback when no service-specific email is set
|
|
620
|
+
email = "your@email.com"
|
|
621
|
+
|
|
585
622
|
[backup]
|
|
586
623
|
max_generations = 50
|
|
587
624
|
max_age_days = 365
|
|
@@ -601,6 +638,11 @@ auto_stop_minutes = 60
|
|
|
601
638
|
|----------|-------------|
|
|
602
639
|
| `REFERENCE_MANAGER_LIBRARY` | Override library file path |
|
|
603
640
|
| `REFERENCE_MANAGER_ATTACHMENTS_DIR` | Override attachments directory |
|
|
641
|
+
| `EMAIL` | Shared email for API services (fallback for all services) |
|
|
642
|
+
| `PUBMED_EMAIL` | Email for PubMed API (overrides `EMAIL`) |
|
|
643
|
+
| `PUBMED_API_KEY` | API key for PubMed (higher rate limits) |
|
|
644
|
+
| `UNPAYWALL_EMAIL` | Email for Unpaywall API (overrides `EMAIL`) |
|
|
645
|
+
| `NCBI_EMAIL` | Email for NCBI API (overrides `EMAIL`) |
|
|
604
646
|
|
|
605
647
|
### Config Command
|
|
606
648
|
|
|
@@ -632,11 +674,12 @@ ref config edit --local # Edit project-local config
|
|
|
632
674
|
```
|
|
633
675
|
|
|
634
676
|
**Key categories:**
|
|
635
|
-
- `library`, `log_level` — Core settings
|
|
677
|
+
- `library`, `log_level`, `email` — Core settings
|
|
636
678
|
- `backup.*` — Backup configuration
|
|
637
679
|
- `server.*` — HTTP server settings
|
|
638
680
|
- `citation.*` — Citation defaults (style, locale, format)
|
|
639
681
|
- `pubmed.*` — PubMed API credentials
|
|
682
|
+
- `fulltext.*` — Fulltext settings and source credentials
|
|
640
683
|
- `attachments.*` — Attachments storage
|
|
641
684
|
- `cli.*` — CLI behavior (limits, sorting, TUI mode)
|
|
642
685
|
- `mcp.*` — MCP server settings
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { b as buildResourceIndicators, j as jsxRuntimeExports } from "./index-
|
|
1
|
+
import { b as buildResourceIndicators, j as jsxRuntimeExports } from "./index-QTYx5RaF.js";
|
|
2
2
|
import "node:path";
|
|
3
3
|
import { useFocus, useStdout, useInput, Box, Text } from "ink";
|
|
4
4
|
import { useState, useRef, useEffect, useMemo, useCallback } from "react";
|
|
@@ -1033,4 +1033,4 @@ export {
|
|
|
1033
1033
|
formatAuthors as f,
|
|
1034
1034
|
toChoice as t
|
|
1035
1035
|
};
|
|
1036
|
-
//# sourceMappingURL=SearchableMultiSelect-
|
|
1036
|
+
//# sourceMappingURL=SearchableMultiSelect-B7qEWPDT.js.map
|
package/dist/chunks/{SearchableMultiSelect-CKRfbnka.js.map → SearchableMultiSelect-B7qEWPDT.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchableMultiSelect-CKRfbnka.js","sources":["../../src/features/interactive/format.ts","../../src/features/interactive/choice-builder.ts","../../node_modules/ansi-styles/index.js","../../node_modules/get-east-asian-width/lookup.js","../../node_modules/get-east-asian-width/index.js","../../node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.js","../../node_modules/slice-ansi/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/cli-truncate/node_modules/string-width/index.js","../../node_modules/cli-truncate/index.js","../../src/features/interactive/components/layout.ts","../../src/features/interactive/components/SearchableMultiSelect.tsx"],"sourcesContent":["/**\n * Display format functions for interactive search\n */\n\nimport type { CslItem } from \"../../core/csl-json/types.js\";\nimport { formatIdentifiers } from \"./choice-builder.js\";\n\n/**\n * CSL name type (author structure)\n */\ntype CslName = NonNullable<CslItem[\"author\"]>[number];\n\n/**\n * Format a single author name\n * - Personal: \"Smith, J.\" (family + initial of given)\n * - Institutional: \"World Health Organization\" (literal)\n */\nfunction formatSingleAuthor(author: CslName): string {\n if (author.literal) {\n return author.literal;\n }\n if (author.family) {\n if (author.given) {\n const initial = author.given.charAt(0).toUpperCase();\n return `${author.family}, ${initial}.`;\n }\n return author.family;\n }\n return \"\";\n}\n\n/**\n * Format author list for display\n * - Single author: \"Smith, J.\"\n * - Two authors: \"Smith, J., & Doe, A.\"\n * - Three authors: \"Smith, J., Doe, A., & Johnson, B.\"\n * - More than three: \"Smith, J., et al.\"\n *\n * @param authors - Array of CSL author objects\n * @returns Formatted author string\n */\nexport function formatAuthors(authors: CslName[] | undefined): string {\n if (!authors || authors.length === 0) {\n return \"\";\n }\n\n if (authors.length > 3) {\n const first = authors[0];\n if (!first) {\n return \"\";\n }\n return `${formatSingleAuthor(first)}, et al.`;\n }\n\n const formatted = authors.map(formatSingleAuthor);\n if (formatted.length === 1) {\n return formatted[0] ?? \"\";\n }\n\n // Join all but last with \", \" and append \"& \" + last\n const allButLast = formatted.slice(0, -1).join(\", \");\n const last = formatted[formatted.length - 1] ?? \"\";\n return `${allButLast}, & ${last}`;\n}\n\n/**\n * Truncate title to fit terminal width\n *\n * @param title - Title string\n * @param maxWidth - Maximum display width\n * @returns Truncated title with ellipsis if needed\n */\nexport function formatTitle(title: string | undefined, maxWidth: number): string {\n if (!title) {\n return \"\";\n }\n\n if (title.length <= maxWidth) {\n return title;\n }\n\n // Truncate and add ellipsis, keeping total length at maxWidth\n return `${title.slice(0, maxWidth - 3)}...`;\n}\n\n/**\n * Extract year from CSL item\n */\nfunction extractYear(item: CslItem): number | undefined {\n const dateParts = item.issued?.[\"date-parts\"];\n if (!dateParts || dateParts.length === 0) {\n return undefined;\n }\n const firstDatePart = dateParts[0];\n if (!firstDatePart || firstDatePart.length === 0) {\n return undefined;\n }\n return firstDatePart[0];\n}\n\n/**\n * Compose a complete search result line\n *\n * Format:\n * ```\n * [1] Smith, J., & Doe, A. (2020)\n * Machine learning in medicine: A comprehensive review\n * DOI: 10.1000/example | PMID: 12345678\n * ```\n *\n * @param item - CSL item\n * @param index - Display index (1-based)\n * @param terminalWidth - Terminal width for title truncation\n * @returns Multi-line formatted string\n */\nexport function formatSearchResult(item: CslItem, index: number, terminalWidth: number): string {\n const lines: string[] = [];\n\n // Line 1: [index] Authors (year)\n const authors = formatAuthors(item.author);\n const year = extractYear(item);\n const yearPart = year !== undefined ? ` (${year})` : \"\";\n const line1 = `[${index}] ${authors}${yearPart}`;\n lines.push(line1);\n\n // Line 2: Title (indented, truncated)\n const indent = \" \";\n const titleMaxWidth = terminalWidth - indent.length;\n const title = formatTitle(item.title, titleMaxWidth);\n if (title) {\n lines.push(`${indent}${title}`);\n }\n\n // Line 3: Identifiers (indented)\n const identifiers = formatIdentifiers(item, \" | \");\n if (identifiers) {\n lines.push(`${indent}${identifiers}`);\n }\n\n return lines.join(\"\\n\");\n}\n","import type { CslItem } from \"../../core/csl-json/types.js\";\nimport { buildResourceIndicators } from \"../format/resource-indicators.js\";\nimport type { Choice } from \"./components/index.js\";\nimport { formatAuthors } from \"./format.js\";\n\n/**\n * Extract year from CSL item\n */\nfunction extractYear(item: CslItem): number | undefined {\n const dateParts = item.issued?.[\"date-parts\"];\n if (!dateParts || dateParts.length === 0) return undefined;\n const firstDatePart = dateParts[0];\n if (!firstDatePart || firstDatePart.length === 0) return undefined;\n return firstDatePart[0];\n}\n\n/**\n * Extract published date from CSL item\n */\nfunction extractPublishedDate(item: CslItem): Date | undefined {\n const dateParts = item.issued?.[\"date-parts\"];\n if (!dateParts || dateParts.length === 0) return undefined;\n const firstDatePart = dateParts[0];\n if (!firstDatePart || firstDatePart.length === 0) return undefined;\n const [year, month = 1, day = 1] = firstDatePart;\n if (year === undefined) return undefined;\n return new Date(year, month - 1, day);\n}\n\n/**\n * Extract updated date from CSL item (custom.timestamp)\n */\nfunction extractUpdatedDate(item: CslItem): Date | undefined {\n const dateStr = item.custom?.timestamp;\n if (!dateStr || typeof dateStr !== \"string\") return undefined;\n const date = new Date(dateStr);\n return Number.isNaN(date.getTime()) ? undefined : date;\n}\n\n/**\n * Extract created date from CSL item (custom.created_at)\n */\nfunction extractCreatedDate(item: CslItem): Date | undefined {\n const dateStr = item.custom?.created_at;\n if (!dateStr || typeof dateStr !== \"string\") return undefined;\n const date = new Date(dateStr);\n return Number.isNaN(date.getTime()) ? undefined : date;\n}\n\n/**\n * Format identifiers (DOI, PMID, PMCID, ISBN) for display\n */\nexport function formatIdentifiers(item: CslItem, separator = \" · \"): string {\n const parts: string[] = [];\n if (item.DOI) parts.push(`DOI: ${item.DOI}`);\n if (item.PMID) parts.push(`PMID: ${item.PMID}`);\n if (item.PMCID) parts.push(`PMCID: ${item.PMCID}`);\n if (item.ISBN) parts.push(`ISBN: ${item.ISBN}`);\n return parts.join(separator);\n}\n\n/**\n * Format item type for display\n */\nfunction formatType(type: string): string {\n const typeMap: Record<string, string> = {\n \"article-journal\": \"Journal article\",\n \"article-magazine\": \"Magazine article\",\n \"article-newspaper\": \"Newspaper article\",\n book: \"Book\",\n chapter: \"Book chapter\",\n \"paper-conference\": \"Conference paper\",\n thesis: \"Thesis\",\n report: \"Report\",\n webpage: \"Web page\",\n };\n return typeMap[type] ?? type;\n}\n\n/**\n * Format source name for the meta line.\n *\n * Fallback order:\n * 1. container-title-short\n * 2. container-title\n * 3. Type-specific: book → publisher, others → formatted type name\n */\nexport function formatSource(item: CslItem): string {\n const shortTitle = item[\"container-title-short\"];\n if (shortTitle) return shortTitle;\n\n const containerTitle = item[\"container-title\"];\n if (containerTitle) return containerTitle;\n\n if (item.type === \"book\" && item.publisher) return item.publisher;\n\n return formatType(item.type);\n}\n\n/**\n * Build a Choice object from a CSL item for TUI display.\n *\n * Meta line format: [indicators · ] year · source · identifiers\n */\nexport function toChoice(item: CslItem): Choice<CslItem> {\n const authors = formatAuthors(item.author);\n const year = extractYear(item);\n const identifiers = formatIdentifiers(item);\n const source = formatSource(item);\n\n // Build meta line: Year · Source · Identifiers\n const metaParts: string[] = [];\n if (year) metaParts.push(String(year));\n metaParts.push(source);\n if (identifiers) metaParts.push(identifiers);\n\n const updatedDate = extractUpdatedDate(item);\n const createdDate = extractCreatedDate(item);\n const publishedDate = extractPublishedDate(item);\n\n // Prepend resource indicators to meta if present\n const indicators = buildResourceIndicators(item);\n const metaStr = metaParts.join(\" · \");\n const meta = indicators ? `${indicators} · ${metaStr}` : metaStr;\n\n return {\n id: item.id,\n title: item.title ?? \"(No title)\",\n subtitle: authors || \"(No authors)\",\n meta,\n value: item,\n ...(updatedDate && { updatedDate }),\n ...(createdDate && { createdDate }),\n ...(publishedDate && { publishedDate }),\n };\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x >= 0x16FF0 && x <= 0x16FF6\n\t\t|| x >= 0x17000 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D1E\n\t\t|| x >= 0x18D80 && x <= 0x18DF2\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D8\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA8A\n\t\t|| x >= 0x1FA8E && x <= 0x1FAC6\n\t\t|| x === 0x1FAC8\n\t\t|| x >= 0x1FACD && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAEA\n\t\t|| x >= 0x1FAEF && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction getCategory(x) {\n\tif (isAmbiguous(x)) return 'ambiguous';\n\n\tif (isFullWidth(x)) return 'fullwidth';\n\n\tif (\n\t\tx === 0x20A9\n\t\t|| x >= 0xFF61 && x <= 0xFFBE\n\t\t|| x >= 0xFFC2 && x <= 0xFFC7\n\t\t|| x >= 0xFFCA && x <= 0xFFCF\n\t\t|| x >= 0xFFD2 && x <= 0xFFD7\n\t\t|| x >= 0xFFDA && x <= 0xFFDC\n\t\t|| x >= 0xFFE8 && x <= 0xFFEE\n\t) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (\n\t\tx >= 0x20 && x <= 0x7E\n\t\t|| x === 0xA2\n\t\t|| x === 0xA3\n\t\t|| x === 0xA5\n\t\t|| x === 0xA6\n\t\t|| x === 0xAC\n\t\t|| x === 0xAF\n\t\t|| x >= 0x27E6 && x <= 0x27ED\n\t\t|| x === 0x2985\n\t\t|| x === 0x2986\n\t) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(x)) return 'wide';\n\n\treturn 'neutral';\n}\n\nexport {isAmbiguous, isFullWidth, isWide, getCategory};\n","import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n","import {\n\t_isFullWidth as isFullWidth,\n\t_isWide as isWide,\n} from 'get-east-asian-width';\n\nexport default function isFullwidthCodePoint(codePoint) {\n\tif (!Number.isInteger(codePoint)) {\n\t\treturn false;\n\t}\n\n\treturn isFullWidth(codePoint) || isWide(codePoint);\n}\n","import ansiStyles from 'ansi-styles';\nimport isFullwidthCodePoint from 'is-fullwidth-code-point';\n\n// \\x1b and \\x9b\nconst ESCAPES = new Set([27, 155]);\n\nconst CODE_POINT_0 = '0'.codePointAt(0);\nconst CODE_POINT_9 = '9'.codePointAt(0);\n\nconst MAX_ANSI_SEQUENCE_LENGTH = 19;\n\nconst endCodesSet = new Set();\nconst endCodesMap = new Map();\nfor (const [start, end] of ansiStyles.codes) {\n\tendCodesSet.add(ansiStyles.color.ansi(end));\n\tendCodesMap.set(ansiStyles.color.ansi(start), ansiStyles.color.ansi(end));\n}\n\nfunction getEndCode(code) {\n\tif (endCodesSet.has(code)) {\n\t\treturn code;\n\t}\n\n\tif (endCodesMap.has(code)) {\n\t\treturn endCodesMap.get(code);\n\t}\n\n\tcode = code.slice(2);\n\tif (code.includes(';')) {\n\t\tcode = code[0] + '0';\n\t}\n\n\tconst returnValue = ansiStyles.codes.get(Number.parseInt(code, 10));\n\tif (returnValue) {\n\t\treturn ansiStyles.color.ansi(returnValue);\n\t}\n\n\treturn ansiStyles.reset.open;\n}\n\nfunction findNumberIndex(string) {\n\tfor (let index = 0; index < string.length; index++) {\n\t\tconst codePoint = string.codePointAt(index);\n\t\tif (codePoint >= CODE_POINT_0 && codePoint <= CODE_POINT_9) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\nfunction parseAnsiCode(string, offset) {\n\tstring = string.slice(offset, offset + MAX_ANSI_SEQUENCE_LENGTH);\n\tconst startIndex = findNumberIndex(string);\n\tif (startIndex !== -1) {\n\t\tlet endIndex = string.indexOf('m', startIndex);\n\t\tif (endIndex === -1) {\n\t\t\tendIndex = string.length;\n\t\t}\n\n\t\treturn string.slice(0, endIndex + 1);\n\t}\n}\n\nfunction tokenize(string, endCharacter = Number.POSITIVE_INFINITY) {\n\tconst returnValue = [];\n\n\tlet index = 0;\n\tlet visibleCount = 0;\n\twhile (index < string.length) {\n\t\tconst codePoint = string.codePointAt(index);\n\n\t\tif (ESCAPES.has(codePoint)) {\n\t\t\tconst code = parseAnsiCode(string, index);\n\t\t\tif (code) {\n\t\t\t\treturnValue.push({\n\t\t\t\t\ttype: 'ansi',\n\t\t\t\t\tcode,\n\t\t\t\t\tendCode: getEndCode(code),\n\t\t\t\t});\n\t\t\t\tindex += code.length;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst isFullWidth = isFullwidthCodePoint(codePoint);\n\t\tconst character = String.fromCodePoint(codePoint);\n\n\t\treturnValue.push({\n\t\t\ttype: 'character',\n\t\t\tvalue: character,\n\t\t\tisFullWidth,\n\t\t});\n\n\t\tindex += character.length;\n\t\tvisibleCount += isFullWidth ? 2 : character.length;\n\n\t\tif (visibleCount >= endCharacter) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn returnValue;\n}\n\nfunction reduceAnsiCodes(codes) {\n\tlet returnValue = [];\n\n\tfor (const code of codes) {\n\t\tif (code.code === ansiStyles.reset.open) {\n\t\t\t// Reset code, disable all codes\n\t\t\treturnValue = [];\n\t\t} else if (endCodesSet.has(code.code)) {\n\t\t\t// This is an end code, disable all matching start codes\n\t\t\treturnValue = returnValue.filter(returnValueCode => returnValueCode.endCode !== code.code);\n\t\t} else {\n\t\t\t// This is a start code. Disable all styles this \"overrides\", then enable it\n\t\t\treturnValue = returnValue.filter(returnValueCode => returnValueCode.endCode !== code.endCode);\n\t\t\treturnValue.push(code);\n\t\t}\n\t}\n\n\treturn returnValue;\n}\n\nfunction undoAnsiCodes(codes) {\n\tconst reduced = reduceAnsiCodes(codes);\n\tconst endCodes = reduced.map(({endCode}) => endCode);\n\treturn endCodes.reverse().join('');\n}\n\nexport default function sliceAnsi(string, start, end) {\n\tconst tokens = tokenize(string, end);\n\tlet activeCodes = [];\n\tlet position = 0;\n\tlet returnValue = '';\n\tlet include = false;\n\n\tfor (const token of tokens) {\n\t\tif (end !== undefined && position >= end) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (token.type === 'ansi') {\n\t\t\tactiveCodes.push(token);\n\t\t\tif (include) {\n\t\t\t\treturnValue += token.code;\n\t\t\t}\n\t\t} else {\n\t\t\t// Character\n\t\t\tif (!include && position >= start) {\n\t\t\t\tinclude = true;\n\t\t\t\t// Simplify active codes\n\t\t\t\tactiveCodes = reduceAnsiCodes(activeCodes);\n\t\t\t\treturnValue = activeCodes.map(({code}) => code).join('');\n\t\t\t}\n\n\t\t\tif (include) {\n\t\t\t\treturnValue += token.value;\n\t\t\t}\n\n\t\t\tposition += token.isFullWidth ? 2 : token.value.length;\n\t\t}\n\t}\n\n\t// Disable active codes at the end\n\treturnValue += undoAnsiCodes(activeCodes);\n\treturn returnValue;\n}\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\n\n/**\nLogic:\n- Segment graphemes to match how terminals render clusters.\n- Width rules:\n\t1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.\n\t2. RGI emoji clusters (\\p{RGI_Emoji}) are double-width.\n\t3. Otherwise use East Asian Width of the cluster’s first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).\n*/\n\nconst segmenter = new Intl.Segmenter();\n\n// Whole-cluster zero-width\nconst zeroWidthClusterRegex = /^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$/v;\n\n// Pick the base scalar if the cluster starts with Prepend/Format/Marks\nconst leadingNonPrintingRegex = /^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+/v;\n\n// RGI emoji sequences\nconst rgiEmojiRegex = /^\\p{RGI_Emoji}$/v;\n\nfunction baseVisible(segment) {\n\treturn segment.replace(leadingNonPrintingRegex, '');\n}\n\nfunction isZeroWidthCluster(segment) {\n\treturn zeroWidthClusterRegex.test(segment);\n}\n\nfunction trailingHalfwidthWidth(segment, eastAsianWidthOptions) {\n\tlet extra = 0;\n\tif (segment.length > 1) {\n\t\tfor (const char of segment.slice(1)) {\n\t\t\tif (char >= '\\uFF00' && char <= '\\uFFEF') {\n\t\t\t\textra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn extra;\n}\n\nexport default function stringWidth(input, options = {}) {\n\tif (typeof input !== 'string' || input.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tlet string = input;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment} of segmenter.segment(string)) {\n\t\t// Zero-width / non-printing clusters\n\t\tif (isZeroWidthCluster(segment)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Emoji width logic\n\t\tif (rgiEmojiRegex.test(segment)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Everything else: EAW of the cluster’s first visible scalar\n\t\tconst codePoint = baseVisible(segment).codePointAt(0);\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\n\t\t// Add width for trailing Halfwidth and Fullwidth Forms (e.g., ゙, ゚, ー)\n\t\twidth += trailingHalfwidthWidth(segment, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n","import sliceAnsi from 'slice-ansi';\nimport stringWidth from 'string-width';\n\nfunction getIndexOfNearestSpace(string, wantedIndex, shouldSearchRight) {\n\tif (string.charAt(wantedIndex) === ' ') {\n\t\treturn wantedIndex;\n\t}\n\n\tconst direction = shouldSearchRight ? 1 : -1;\n\n\tfor (let index = 0; index <= 3; index++) {\n\t\tconst finalIndex = wantedIndex + (index * direction);\n\t\tif (string.charAt(finalIndex) === ' ') {\n\t\t\treturn finalIndex;\n\t\t}\n\t}\n\n\treturn wantedIndex;\n}\n\nexport default function cliTruncate(text, columns, options = {}) {\n\tconst {\n\t\tposition = 'end',\n\t\tspace = false,\n\t\tpreferTruncationOnSpace = false,\n\t} = options;\n\n\tlet {truncationCharacter = '…'} = options;\n\n\tif (typeof text !== 'string') {\n\t\tthrow new TypeError(`Expected \\`input\\` to be a string, got ${typeof text}`);\n\t}\n\n\tif (typeof columns !== 'number') {\n\t\tthrow new TypeError(`Expected \\`columns\\` to be a number, got ${typeof columns}`);\n\t}\n\n\tif (columns < 1) {\n\t\treturn '';\n\t}\n\n\tconst length = stringWidth(text);\n\n\tif (length <= columns) {\n\t\treturn text;\n\t}\n\n\tif (columns === 1) {\n\t\treturn truncationCharacter;\n\t}\n\n\t// ANSI escape sequence constants\n\tconst ANSI = {\n\t\tESC: 27,\n\t\tLEFT_BRACKET: 91,\n\t\tLETTER_M: 109,\n\t};\n\n\tconst isSgrParameter = code => (code >= 48 && code <= 57) || code === 59; // 0-9 or ;\n\n\tfunction leadingSgrSpanEndIndex(string) {\n\t\tlet index = 0;\n\t\twhile (index + 2 < string.length && string.codePointAt(index) === ANSI.ESC && string.codePointAt(index + 1) === ANSI.LEFT_BRACKET) {\n\t\t\tlet j = index + 2;\n\t\t\twhile (j < string.length && isSgrParameter(string.codePointAt(j))) {\n\t\t\t\tj++;\n\t\t\t}\n\n\t\t\tif (j < string.length && string.codePointAt(j) === ANSI.LETTER_M) {\n\t\t\t\tindex = j + 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\treturn index;\n\t}\n\n\tfunction trailingSgrSpanStartIndex(string) {\n\t\tlet start = string.length;\n\t\twhile (start > 1 && string.codePointAt(start - 1) === ANSI.LETTER_M) {\n\t\t\tlet j = start - 2;\n\t\t\twhile (j >= 0 && isSgrParameter(string.codePointAt(j))) {\n\t\t\t\tj--;\n\t\t\t}\n\n\t\t\tif (j >= 1 && string.codePointAt(j - 1) === ANSI.ESC && string.codePointAt(j) === ANSI.LEFT_BRACKET) {\n\t\t\t\tstart = j - 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\treturn start;\n\t}\n\n\tfunction appendWithInheritedStyleFromEnd(visible, suffix) {\n\t\tconst start = trailingSgrSpanStartIndex(visible);\n\t\tif (start === visible.length) {\n\t\t\treturn visible + suffix;\n\t\t}\n\n\t\treturn visible.slice(0, start) + suffix + visible.slice(start);\n\t}\n\n\tfunction prependWithInheritedStyleFromStart(prefix, visible) {\n\t\tconst end = leadingSgrSpanEndIndex(visible);\n\t\tif (end === 0) {\n\t\t\treturn prefix + visible;\n\t\t}\n\n\t\treturn visible.slice(0, end) + prefix + visible.slice(end);\n\t}\n\n\tif (position === 'start') {\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst nearestSpace = getIndexOfNearestSpace(text, length - columns + 1, true);\n\t\t\tconst right = sliceAnsi(text, nearestSpace, length).trim();\n\t\t\treturn prependWithInheritedStyleFromStart(truncationCharacter, right);\n\t\t}\n\n\t\tif (space) {\n\t\t\ttruncationCharacter += ' ';\n\t\t}\n\n\t\tconst right = sliceAnsi(text, length - columns + stringWidth(truncationCharacter), length);\n\t\treturn prependWithInheritedStyleFromStart(truncationCharacter, right);\n\t}\n\n\tif (position === 'middle') {\n\t\tif (space) {\n\t\t\ttruncationCharacter = ` ${truncationCharacter} `;\n\t\t}\n\n\t\tconst half = Math.floor(columns / 2);\n\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst spaceNearFirstBreakPoint = getIndexOfNearestSpace(text, half);\n\t\t\tconst spaceNearSecondBreakPoint = getIndexOfNearestSpace(text, length - (columns - half) + 1, true);\n\t\t\treturn sliceAnsi(text, 0, spaceNearFirstBreakPoint) + truncationCharacter + sliceAnsi(text, spaceNearSecondBreakPoint, length).trim();\n\t\t}\n\n\t\treturn (\n\t\t\tsliceAnsi(text, 0, half)\n\t\t\t+ truncationCharacter\n\t\t\t+ sliceAnsi(text, length - (columns - half) + stringWidth(truncationCharacter), length)\n\t\t);\n\t}\n\n\tif (position === 'end') {\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst nearestSpace = getIndexOfNearestSpace(text, columns - 1);\n\t\t\tconst left = sliceAnsi(text, 0, nearestSpace);\n\t\t\treturn appendWithInheritedStyleFromEnd(left, truncationCharacter);\n\t\t}\n\n\t\tif (space) {\n\t\t\ttruncationCharacter = ` ${truncationCharacter}`;\n\t\t}\n\n\t\tconst left = sliceAnsi(text, 0, columns - stringWidth(truncationCharacter));\n\t\treturn appendWithInheritedStyleFromEnd(left, truncationCharacter);\n\t}\n\n\tthrow new Error(`Expected \\`options.position\\` to be either \\`start\\`, \\`middle\\` or \\`end\\`, got ${position}`);\n}\n","/**\n * Layout constants and utility functions for SearchableMultiSelect.\n *\n * These values are shared between the component itself and the callers\n * that need to pre-calculate the visible item count.\n */\n\n/** Lines rendered per choice item (title + subtitle + meta) */\nexport const ITEM_HEIGHT = 3;\n\n/**\n * Lines reserved for chrome around the item list:\n * header(2) + search box(4) + status(2) + scroll indicators(2) + footer(2) = 12\n */\nexport const RESERVED_LINES = 12;\n\n/** Gets terminal width, falling back to 80 if not available */\nexport function getTerminalWidth(): number {\n return process.stdout.columns ?? 80;\n}\n\n/** Gets terminal height, falling back to 24 if not available */\nexport function getTerminalHeight(): number {\n return process.stdout.rows ?? 24;\n}\n\n/**\n * Calculates the effective limit for the item list\n * based on terminal height to prevent the input field from being hidden.\n */\nexport function calculateEffectiveLimit(configLimit: number): number {\n const terminalHeight = getTerminalHeight();\n const availableLines = terminalHeight - RESERVED_LINES;\n const maxVisibleChoices = Math.max(1, Math.floor(availableLines / ITEM_HEIGHT));\n return configLimit > 0 ? Math.min(configLimit, maxVisibleChoices) : maxVisibleChoices;\n}\n","/**\n * SearchableMultiSelect - A searchable multi-select component for React Ink\n *\n * This component combines text input for filtering with multi-select functionality,\n * which is not available in ink-ui out of the box.\n */\n\nimport { Box, Text, useFocus, useInput, useStdout } from \"ink\";\nimport type React from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport cliTruncate from \"cli-truncate\";\nimport { ITEM_HEIGHT, RESERVED_LINES } from \"./layout.js\";\n\nexport interface Choice<T = unknown> {\n /** Unique identifier for the choice */\n id: string;\n /** Primary text (title) - displayed in cyan when focused */\n title: string;\n /** Secondary text (e.g., authors) */\n subtitle?: string;\n /** Tertiary text (e.g., year, type, identifiers) */\n meta?: string;\n /** Associated value */\n value: T;\n /** Date when the item was last updated (custom.timestamp) */\n updatedDate?: Date;\n /** Date when the item was created (custom.created_at) */\n createdDate?: Date;\n /** Date when the item was published (for sorting) */\n publishedDate?: Date;\n}\n\n/** Sort option identifier */\nexport type SortOption =\n | \"updated-desc\"\n | \"updated-asc\"\n | \"created-desc\"\n | \"created-asc\"\n | \"published-desc\"\n | \"published-asc\"\n | \"relevance\";\n\n/** Sort option configuration */\ninterface SortOptionConfig {\n id: SortOption;\n label: string;\n requiresQuery: boolean;\n}\n\nexport interface SearchableMultiSelectProps<T> {\n /** Available choices */\n choices: Choice<T>[];\n /** Filter function for search */\n filterFn?: (query: string, choices: Choice<T>[]) => Choice<T>[];\n /** Maximum visible items */\n visibleCount?: number;\n /** Callback when selection is confirmed */\n onSubmit: (selected: Choice<T>[]) => void;\n /** Callback when cancelled */\n onCancel: () => void;\n /** Placeholder text for search input */\n placeholder?: string;\n /** Header text */\n header?: string;\n /** Footer text */\n footer?: string;\n /** Default sort option */\n defaultSort?: SortOption;\n /** Debounce delay in milliseconds for search filtering */\n debounceMs?: number;\n}\n\n/** All available sort options */\nconst SORT_OPTIONS: SortOptionConfig[] = [\n { id: \"updated-desc\", label: \"Updated (newest first)\", requiresQuery: false },\n { id: \"updated-asc\", label: \"Updated (oldest first)\", requiresQuery: false },\n { id: \"created-desc\", label: \"Created (newest first)\", requiresQuery: false },\n { id: \"created-asc\", label: \"Created (oldest first)\", requiresQuery: false },\n { id: \"published-desc\", label: \"Published (newest first)\", requiresQuery: false },\n { id: \"published-asc\", label: \"Published (oldest first)\", requiresQuery: false },\n { id: \"relevance\", label: \"Relevance\", requiresQuery: true },\n];\n\n/** Get short label for status bar */\nfunction getSortShortLabel(sortOption: SortOption): string {\n switch (sortOption) {\n case \"updated-desc\":\n return \"Updated ↓\";\n case \"updated-asc\":\n return \"Updated ↑\";\n case \"created-desc\":\n return \"Created ↓\";\n case \"created-asc\":\n return \"Created ↑\";\n case \"published-desc\":\n return \"Published ↓\";\n case \"published-asc\":\n return \"Published ↑\";\n case \"relevance\":\n return \"Relevance\";\n }\n}\n\n/** Create a date comparator for sorting */\nfunction createDateComparator<T>(\n getDate: (choice: Choice<T>) => Date | undefined,\n descending: boolean\n): (a: Choice<T>, b: Choice<T>) => number {\n return (a, b) => {\n const dateA = getDate(a)?.getTime() ?? 0;\n const dateB = getDate(b)?.getTime() ?? 0;\n return descending ? dateB - dateA : dateA - dateB;\n };\n}\n\n/**\n * Sort choices by the given option\n */\nfunction sortChoices<T>(choices: Choice<T>[], sortOption: SortOption): Choice<T>[] {\n if (sortOption === \"relevance\") return [...choices];\n\n const sorted = [...choices];\n const comparators: Record<\n Exclude<SortOption, \"relevance\">,\n (a: Choice<T>, b: Choice<T>) => number\n > = {\n \"updated-desc\": createDateComparator((c) => c.updatedDate, true),\n \"updated-asc\": createDateComparator((c) => c.updatedDate, false),\n \"created-desc\": createDateComparator((c) => c.createdDate, true),\n \"created-asc\": createDateComparator((c) => c.createdDate, false),\n \"published-desc\": createDateComparator((c) => c.publishedDate, true),\n \"published-asc\": createDateComparator((c) => c.publishedDate, false),\n };\n\n return sorted.sort(comparators[sortOption]);\n}\n\n/**\n * Default filter function - case-insensitive substring match\n */\nfunction defaultFilter<T>(query: string, choices: Choice<T>[]): Choice<T>[] {\n if (!query.trim()) return choices;\n const lowerQuery = query.toLowerCase();\n return choices.filter(\n (choice) =>\n choice.title.toLowerCase().includes(lowerQuery) ||\n choice.subtitle?.toLowerCase().includes(lowerQuery) ||\n choice.meta?.toLowerCase().includes(lowerQuery)\n );\n}\n\n/**\n * Truncate text to fit within maxWidth\n */\nfunction truncate(text: string, maxWidth: number): string {\n return cliTruncate(text, maxWidth, { position: \"end\" });\n}\n\n/**\n * Key handler result type\n */\ntype KeyAction =\n | { type: \"cancel\" }\n | { type: \"submit\" }\n | { type: \"navigate\"; delta: number }\n | { type: \"toggle\" }\n | { type: \"backspace\" }\n | { type: \"input\"; char: string }\n | { type: \"sort\" }\n | { type: \"none\" };\n\n/** Key state type for parsing */\ninterface KeyState {\n escape: boolean;\n return: boolean;\n upArrow: boolean;\n downArrow: boolean;\n pageUp: boolean;\n pageDown: boolean;\n tab: boolean;\n backspace: boolean;\n delete: boolean;\n ctrl: boolean;\n meta: boolean;\n}\n\n/** Get navigation delta from key state */\nfunction getNavigationDelta(\n key: KeyState,\n input: string,\n visibleCount: number,\n maxIndex: number\n): number | null {\n if (key.upArrow) return -1;\n if (key.downArrow) return 1;\n if (key.pageUp) return -visibleCount;\n if (key.pageDown) return visibleCount;\n if (key.ctrl && input === \"a\") return -maxIndex - 1;\n if (key.ctrl && input === \"e\") return maxIndex + 1;\n return null;\n}\n\n/**\n * Parse key input into action\n */\nfunction parseKeyAction(\n input: string,\n key: KeyState,\n visibleCount: number,\n maxIndex: number\n): KeyAction {\n if (key.escape) return { type: \"cancel\" };\n if (key.return) return { type: \"submit\" };\n\n const navDelta = getNavigationDelta(key, input, visibleCount, maxIndex);\n if (navDelta !== null) return { type: \"navigate\", delta: navDelta };\n\n if (key.ctrl && input === \"s\") return { type: \"sort\" };\n if (key.tab) return { type: \"toggle\" };\n if (key.backspace || key.delete) return { type: \"backspace\" };\n if (input && !key.ctrl && !key.meta) return { type: \"input\", char: input };\n return { type: \"none\" };\n}\n\n/**\n * Choice item component - renders a single multi-line choice\n */\nfunction ChoiceItem<T>({\n choice,\n isSelected,\n isFocused,\n contentWidth,\n}: {\n choice: Choice<T>;\n isSelected: boolean;\n isFocused: boolean;\n contentWidth: number;\n}): React.ReactElement {\n const indent = \" \"; // 6 spaces to align with title (after indicator + checkbox)\n\n return (\n <Box flexDirection=\"column\" paddingY={0}>\n {/* Row 1: Focus indicator + Checkbox + Title */}\n <Box flexDirection=\"row\">\n {/* Focus indicator - fixed width */}\n <Box width={2}>\n <Text color=\"cyan\">{isFocused ? \"❯\" : \" \"}</Text>\n </Box>\n {/* Selection checkbox */}\n <Box width={2}>\n <Text color={isSelected ? \"green\" : \"gray\"}>{isSelected ? \"◉\" : \"○\"}</Text>\n </Box>\n <Box width={1}>\n <Text> </Text>\n </Box>\n {/* Title */}\n <Box>\n {isFocused ? (\n <Text color=\"cyan\" bold>\n {truncate(choice.title, contentWidth)}\n </Text>\n ) : (\n <Text color=\"blue\">{truncate(choice.title, contentWidth)}</Text>\n )}\n </Box>\n </Box>\n\n {/* Row 2: Subtitle (authors) */}\n {choice.subtitle && (\n <Box>\n <Text dimColor>\n {indent}\n {truncate(choice.subtitle, contentWidth)}\n </Text>\n </Box>\n )}\n\n {/* Row 3: Meta (year, type, identifiers) */}\n {choice.meta && (\n <Box>\n <Text dimColor>\n {indent}\n {truncate(choice.meta, contentWidth)}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n\n/**\n * Scroll indicator component\n */\nfunction ScrollIndicator({\n direction,\n count,\n visible,\n}: {\n direction: \"up\" | \"down\";\n count: number;\n visible: boolean;\n}): React.ReactElement {\n const arrow = direction === \"up\" ? \"↑\" : \"↓\";\n const label = direction === \"up\" ? \"more above\" : \"more below\";\n return (\n <Box height={1}>\n {visible && count > 0 ? (\n <Text dimColor>\n {\" \"}\n {arrow} {count} {label}\n </Text>\n ) : (\n <Text> </Text>\n )}\n </Box>\n );\n}\n\n/**\n * Choice list component\n */\nfunction ChoiceList<T>({\n choices,\n selectedIds,\n focusIndex,\n scrollOffset,\n contentWidth,\n}: {\n choices: Choice<T>[];\n selectedIds: Set<string>;\n focusIndex: number;\n scrollOffset: number;\n contentWidth: number;\n}): React.ReactElement {\n if (choices.length === 0) {\n return (\n <Box paddingY={1}>\n <Text dimColor>No results found</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n {choices.map((choice, visibleIndex) => {\n const actualIndex = scrollOffset + visibleIndex;\n return (\n <Box key={choice.id} flexDirection=\"row\">\n <ChoiceItem\n choice={choice}\n isSelected={selectedIds.has(choice.id)}\n isFocused={actualIndex === focusIndex}\n contentWidth={contentWidth}\n />\n </Box>\n );\n })}\n </Box>\n );\n}\n\n/**\n * Sort menu component\n */\nfunction SortMenu({\n options,\n focusIndex,\n currentSort,\n}: {\n options: SortOptionConfig[];\n focusIndex: number;\n currentSort: SortOption;\n}): React.ReactElement {\n return (\n <Box\n flexDirection=\"column\"\n marginBottom={1}\n paddingX={1}\n borderStyle=\"round\"\n borderColor=\"yellow\"\n >\n <Box marginBottom={1}>\n <Text bold color=\"yellow\">\n Sort by:\n </Text>\n </Box>\n {options.map((opt, index) => {\n const isFocused = index === focusIndex;\n const isCurrent = opt.id === currentSort;\n const checkMark = isCurrent ? \" ✓\" : \"\";\n return (\n <Box key={opt.id}>\n {isFocused ? (\n <Text color=\"cyan\">\n ❯ {opt.label}\n {checkMark}\n </Text>\n ) : (\n <Text>\n {\" \"}\n {opt.label}\n {checkMark}\n </Text>\n )}\n </Box>\n );\n })}\n <Box marginTop={1}>\n <Text dimColor>↑↓:select Enter:confirm Esc:cancel</Text>\n </Box>\n </Box>\n );\n}\n\nexport function SearchableMultiSelect<T>({\n choices,\n filterFn = defaultFilter,\n visibleCount: visibleCountProp,\n onSubmit,\n onCancel,\n placeholder = \"Type to search...\",\n header,\n footer,\n defaultSort = \"updated-desc\",\n debounceMs = 0,\n}: SearchableMultiSelectProps<T>): React.ReactElement {\n const [query, setQuery] = useState(\"\");\n const [debouncedQuery, setDebouncedQuery] = useState(\"\");\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const [focusIndex, setFocusIndex] = useState(0);\n const [scrollOffset, setScrollOffset] = useState(0);\n const [sortOption, setSortOption] = useState<SortOption>(defaultSort);\n const [showSortMenu, setShowSortMenu] = useState(false);\n const [sortMenuIndex, setSortMenuIndex] = useState(0);\n const { isFocused } = useFocus({ autoFocus: true });\n const { stdout } = useStdout();\n\n // Get terminal dimensions\n const terminalWidth = stdout?.columns ?? 80;\n const terminalHeight = stdout?.rows ?? 24;\n const contentWidth = terminalWidth - 8; // Reserve space for checkbox and padding\n\n // Calculate visible count based on terminal height\n const calculatedVisibleCount = Math.max(\n 1,\n Math.floor((terminalHeight - RESERVED_LINES) / ITEM_HEIGHT)\n );\n const visibleCount = visibleCountProp ?? calculatedVisibleCount;\n\n // Debounce query updates for expensive filtering\n useEffect(() => {\n if (debounceMs <= 0) {\n setDebouncedQuery(query);\n return;\n }\n clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => setDebouncedQuery(query), debounceMs);\n return () => clearTimeout(debounceRef.current);\n }, [query, debounceMs]);\n\n // Filter choices based on debounced query\n const filteredChoices = useMemo(\n () => filterFn(debouncedQuery, choices),\n [debouncedQuery, choices, filterFn]\n );\n\n // Get available sort options (relevance only when query exists)\n const availableSortOptions = useMemo(\n () => SORT_OPTIONS.filter((opt) => !opt.requiresQuery || debouncedQuery.trim().length > 0),\n [debouncedQuery]\n );\n\n // Apply sorting (skip for relevance as filter function handles it)\n const sortedChoices = useMemo(\n () => (sortOption === \"relevance\" ? filteredChoices : sortChoices(filteredChoices, sortOption)),\n [filteredChoices, sortOption]\n );\n\n const maxIndex = sortedChoices.length - 1;\n\n // Reset focus and scroll when filtered results change\n // biome-ignore lint/correctness/useExhaustiveDependencies: intentionally reset on debounced query change\n useEffect(() => {\n setFocusIndex(0);\n setScrollOffset(0);\n }, [debouncedQuery]);\n\n // Adjust scroll offset when focus changes\n useEffect(() => {\n if (focusIndex < scrollOffset) {\n setScrollOffset(focusIndex);\n } else if (focusIndex >= scrollOffset + visibleCount) {\n setScrollOffset(focusIndex - visibleCount + 1);\n }\n }, [focusIndex, scrollOffset, visibleCount]);\n\n // Get visible choices\n const visibleChoices = useMemo(\n () => sortedChoices.slice(scrollOffset, scrollOffset + visibleCount),\n [sortedChoices, scrollOffset, visibleCount]\n );\n\n // Toggle selection\n const toggleSelection = useCallback(() => {\n const currentChoice = sortedChoices[focusIndex];\n if (!currentChoice) return;\n setSelectedIds((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(currentChoice.id)) {\n newSet.delete(currentChoice.id);\n } else {\n newSet.add(currentChoice.id);\n }\n return newSet;\n });\n }, [sortedChoices, focusIndex]);\n\n // Handle keyboard input for sort menu\n useInput(\n (_input, key) => {\n if (key.escape) {\n setShowSortMenu(false);\n return;\n }\n if (key.return) {\n const selected = availableSortOptions[sortMenuIndex];\n if (selected) {\n setSortOption(selected.id);\n setFocusIndex(0);\n setScrollOffset(0);\n }\n setShowSortMenu(false);\n return;\n }\n if (key.upArrow) {\n setSortMenuIndex((prev) => Math.max(0, prev - 1));\n return;\n }\n if (key.downArrow) {\n setSortMenuIndex((prev) => Math.min(availableSortOptions.length - 1, prev + 1));\n return;\n }\n },\n { isActive: isFocused && showSortMenu }\n );\n\n // Handle keyboard input for main list\n useInput(\n (input, key) => {\n const action = parseKeyAction(input, key, visibleCount, maxIndex);\n switch (action.type) {\n case \"cancel\":\n onCancel();\n break;\n case \"submit\":\n onSubmit(choices.filter((c) => selectedIds.has(c.id)));\n break;\n case \"navigate\":\n setFocusIndex((prev) => Math.max(0, Math.min(maxIndex, prev + action.delta)));\n break;\n case \"toggle\":\n toggleSelection();\n break;\n case \"backspace\":\n setQuery((prev) => prev.slice(0, -1));\n break;\n case \"input\":\n setQuery((prev) => prev + action.char);\n break;\n case \"sort\":\n setSortMenuIndex(availableSortOptions.findIndex((o) => o.id === sortOption));\n setShowSortMenu(true);\n break;\n }\n },\n { isActive: isFocused && !showSortMenu }\n );\n\n const totalItems = sortedChoices.length;\n const showScrollIndicator = totalItems > visibleCount;\n\n const footerText =\n footer ??\n (showScrollIndicator\n ? `↑↓:move Tab:select ^S:sort Enter:confirm (${focusIndex + 1}/${totalItems})`\n : \"↑↓:move Tab:select ^S:sort Enter:confirm Esc:cancel\");\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n {/* Header */}\n {header && (\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n {header}\n </Text>\n </Box>\n )}\n\n {/* Search input */}\n <Box marginBottom={1} paddingX={1} borderStyle=\"round\" borderColor=\"cyan\">\n <Text color=\"green\">❯ </Text>\n <Text>{query || <Text dimColor>{placeholder}</Text>}</Text>\n <Text color=\"gray\">▎</Text>\n </Box>\n\n {/* Status bar */}\n <Box marginBottom={1} paddingX={1} justifyContent=\"space-between\">\n <Box>\n {selectedIds.size > 0 ? (\n <Text color=\"yellow\">\n {selectedIds.size} selected / {totalItems} results\n </Text>\n ) : (\n <Text dimColor>{totalItems} results</Text>\n )}\n </Box>\n <Box>\n <Text dimColor>Sort: {getSortShortLabel(sortOption)}</Text>\n </Box>\n </Box>\n\n {/* Sort menu (replaces list when shown) - fixed height to prevent layout shift */}\n <Box flexDirection=\"column\" height={visibleCount * ITEM_HEIGHT + 2}>\n {showSortMenu ? (\n <SortMenu\n options={availableSortOptions}\n focusIndex={sortMenuIndex}\n currentSort={sortOption}\n />\n ) : (\n <>\n <ScrollIndicator direction=\"up\" count={scrollOffset} visible={showScrollIndicator} />\n <ChoiceList\n choices={visibleChoices}\n selectedIds={selectedIds}\n focusIndex={focusIndex}\n scrollOffset={scrollOffset}\n contentWidth={contentWidth}\n />\n <ScrollIndicator\n direction=\"down\"\n count={totalItems - scrollOffset - visibleCount}\n visible={showScrollIndicator}\n />\n </>\n )}\n </Box>\n <Box marginTop={1}>\n <Text dimColor>{footerText}</Text>\n </Box>\n </Box>\n );\n}\n"],"names":["isFullWidth","right","left","jsxs","jsx","Fragment"],"mappings":"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K,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,SACN,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,MAAM,SACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,WACrB,KAAK,WAAY,KAAK;AAC3B;AAEA,SAAS,YAAY,GAAG;AACvB,SAAO,MAAM,SACT,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK;AACzB;AAEA,SAAS,OAAO,GAAG;AAClB,SAAO,KAAK,QAAU,KAAK,QACvB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,KAAK,SAAU,KAAK,SACpB,MAAM,SACN,KAAK,SAAU,KAAK,SACpB,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAW,KAAK,SACrB,KAAK,SAAW,KAAK,SACrB,KAAK,SAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAA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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10]}
|
|
1
|
+
{"version":3,"file":"SearchableMultiSelect-B7qEWPDT.js","sources":["../../src/features/interactive/format.ts","../../src/features/interactive/choice-builder.ts","../../node_modules/ansi-styles/index.js","../../node_modules/get-east-asian-width/lookup.js","../../node_modules/get-east-asian-width/index.js","../../node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.js","../../node_modules/slice-ansi/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/cli-truncate/node_modules/string-width/index.js","../../node_modules/cli-truncate/index.js","../../src/features/interactive/components/layout.ts","../../src/features/interactive/components/SearchableMultiSelect.tsx"],"sourcesContent":["/**\n * Display format functions for interactive search\n */\n\nimport type { CslItem } from \"../../core/csl-json/types.js\";\nimport { formatIdentifiers } from \"./choice-builder.js\";\n\n/**\n * CSL name type (author structure)\n */\ntype CslName = NonNullable<CslItem[\"author\"]>[number];\n\n/**\n * Format a single author name\n * - Personal: \"Smith, J.\" (family + initial of given)\n * - Institutional: \"World Health Organization\" (literal)\n */\nfunction formatSingleAuthor(author: CslName): string {\n if (author.literal) {\n return author.literal;\n }\n if (author.family) {\n if (author.given) {\n const initial = author.given.charAt(0).toUpperCase();\n return `${author.family}, ${initial}.`;\n }\n return author.family;\n }\n return \"\";\n}\n\n/**\n * Format author list for display\n * - Single author: \"Smith, J.\"\n * - Two authors: \"Smith, J., & Doe, A.\"\n * - Three authors: \"Smith, J., Doe, A., & Johnson, B.\"\n * - More than three: \"Smith, J., et al.\"\n *\n * @param authors - Array of CSL author objects\n * @returns Formatted author string\n */\nexport function formatAuthors(authors: CslName[] | undefined): string {\n if (!authors || authors.length === 0) {\n return \"\";\n }\n\n if (authors.length > 3) {\n const first = authors[0];\n if (!first) {\n return \"\";\n }\n return `${formatSingleAuthor(first)}, et al.`;\n }\n\n const formatted = authors.map(formatSingleAuthor);\n if (formatted.length === 1) {\n return formatted[0] ?? \"\";\n }\n\n // Join all but last with \", \" and append \"& \" + last\n const allButLast = formatted.slice(0, -1).join(\", \");\n const last = formatted[formatted.length - 1] ?? \"\";\n return `${allButLast}, & ${last}`;\n}\n\n/**\n * Truncate title to fit terminal width\n *\n * @param title - Title string\n * @param maxWidth - Maximum display width\n * @returns Truncated title with ellipsis if needed\n */\nexport function formatTitle(title: string | undefined, maxWidth: number): string {\n if (!title) {\n return \"\";\n }\n\n if (title.length <= maxWidth) {\n return title;\n }\n\n // Truncate and add ellipsis, keeping total length at maxWidth\n return `${title.slice(0, maxWidth - 3)}...`;\n}\n\n/**\n * Extract year from CSL item\n */\nfunction extractYear(item: CslItem): number | undefined {\n const dateParts = item.issued?.[\"date-parts\"];\n if (!dateParts || dateParts.length === 0) {\n return undefined;\n }\n const firstDatePart = dateParts[0];\n if (!firstDatePart || firstDatePart.length === 0) {\n return undefined;\n }\n return firstDatePart[0];\n}\n\n/**\n * Compose a complete search result line\n *\n * Format:\n * ```\n * [1] Smith, J., & Doe, A. (2020)\n * Machine learning in medicine: A comprehensive review\n * DOI: 10.1000/example | PMID: 12345678\n * ```\n *\n * @param item - CSL item\n * @param index - Display index (1-based)\n * @param terminalWidth - Terminal width for title truncation\n * @returns Multi-line formatted string\n */\nexport function formatSearchResult(item: CslItem, index: number, terminalWidth: number): string {\n const lines: string[] = [];\n\n // Line 1: [index] Authors (year)\n const authors = formatAuthors(item.author);\n const year = extractYear(item);\n const yearPart = year !== undefined ? ` (${year})` : \"\";\n const line1 = `[${index}] ${authors}${yearPart}`;\n lines.push(line1);\n\n // Line 2: Title (indented, truncated)\n const indent = \" \";\n const titleMaxWidth = terminalWidth - indent.length;\n const title = formatTitle(item.title, titleMaxWidth);\n if (title) {\n lines.push(`${indent}${title}`);\n }\n\n // Line 3: Identifiers (indented)\n const identifiers = formatIdentifiers(item, \" | \");\n if (identifiers) {\n lines.push(`${indent}${identifiers}`);\n }\n\n return lines.join(\"\\n\");\n}\n","import type { CslItem } from \"../../core/csl-json/types.js\";\nimport { buildResourceIndicators } from \"../format/resource-indicators.js\";\nimport type { Choice } from \"./components/index.js\";\nimport { formatAuthors } from \"./format.js\";\n\n/**\n * Extract year from CSL item\n */\nfunction extractYear(item: CslItem): number | undefined {\n const dateParts = item.issued?.[\"date-parts\"];\n if (!dateParts || dateParts.length === 0) return undefined;\n const firstDatePart = dateParts[0];\n if (!firstDatePart || firstDatePart.length === 0) return undefined;\n return firstDatePart[0];\n}\n\n/**\n * Extract published date from CSL item\n */\nfunction extractPublishedDate(item: CslItem): Date | undefined {\n const dateParts = item.issued?.[\"date-parts\"];\n if (!dateParts || dateParts.length === 0) return undefined;\n const firstDatePart = dateParts[0];\n if (!firstDatePart || firstDatePart.length === 0) return undefined;\n const [year, month = 1, day = 1] = firstDatePart;\n if (year === undefined) return undefined;\n return new Date(year, month - 1, day);\n}\n\n/**\n * Extract updated date from CSL item (custom.timestamp)\n */\nfunction extractUpdatedDate(item: CslItem): Date | undefined {\n const dateStr = item.custom?.timestamp;\n if (!dateStr || typeof dateStr !== \"string\") return undefined;\n const date = new Date(dateStr);\n return Number.isNaN(date.getTime()) ? undefined : date;\n}\n\n/**\n * Extract created date from CSL item (custom.created_at)\n */\nfunction extractCreatedDate(item: CslItem): Date | undefined {\n const dateStr = item.custom?.created_at;\n if (!dateStr || typeof dateStr !== \"string\") return undefined;\n const date = new Date(dateStr);\n return Number.isNaN(date.getTime()) ? undefined : date;\n}\n\n/**\n * Format identifiers (DOI, PMID, PMCID, ISBN) for display\n */\nexport function formatIdentifiers(item: CslItem, separator = \" · \"): string {\n const parts: string[] = [];\n if (item.DOI) parts.push(`DOI: ${item.DOI}`);\n if (item.PMID) parts.push(`PMID: ${item.PMID}`);\n if (item.PMCID) parts.push(`PMCID: ${item.PMCID}`);\n if (item.ISBN) parts.push(`ISBN: ${item.ISBN}`);\n return parts.join(separator);\n}\n\n/**\n * Format item type for display\n */\nfunction formatType(type: string): string {\n const typeMap: Record<string, string> = {\n \"article-journal\": \"Journal article\",\n \"article-magazine\": \"Magazine article\",\n \"article-newspaper\": \"Newspaper article\",\n book: \"Book\",\n chapter: \"Book chapter\",\n \"paper-conference\": \"Conference paper\",\n thesis: \"Thesis\",\n report: \"Report\",\n webpage: \"Web page\",\n };\n return typeMap[type] ?? type;\n}\n\n/**\n * Format source name for the meta line.\n *\n * Fallback order:\n * 1. container-title-short\n * 2. container-title\n * 3. Type-specific: book → publisher, others → formatted type name\n */\nexport function formatSource(item: CslItem): string {\n const shortTitle = item[\"container-title-short\"];\n if (shortTitle) return shortTitle;\n\n const containerTitle = item[\"container-title\"];\n if (containerTitle) return containerTitle;\n\n if (item.type === \"book\" && item.publisher) return item.publisher;\n\n return formatType(item.type);\n}\n\n/**\n * Build a Choice object from a CSL item for TUI display.\n *\n * Meta line format: [indicators · ] year · source · identifiers\n */\nexport function toChoice(item: CslItem): Choice<CslItem> {\n const authors = formatAuthors(item.author);\n const year = extractYear(item);\n const identifiers = formatIdentifiers(item);\n const source = formatSource(item);\n\n // Build meta line: Year · Source · Identifiers\n const metaParts: string[] = [];\n if (year) metaParts.push(String(year));\n metaParts.push(source);\n if (identifiers) metaParts.push(identifiers);\n\n const updatedDate = extractUpdatedDate(item);\n const createdDate = extractCreatedDate(item);\n const publishedDate = extractPublishedDate(item);\n\n // Prepend resource indicators to meta if present\n const indicators = buildResourceIndicators(item);\n const metaStr = metaParts.join(\" · \");\n const meta = indicators ? `${indicators} · ${metaStr}` : metaStr;\n\n return {\n id: item.id,\n title: item.title ?? \"(No title)\",\n subtitle: authors || \"(No authors)\",\n meta,\n value: item,\n ...(updatedDate && { updatedDate }),\n ...(createdDate && { createdDate }),\n ...(publishedDate && { publishedDate }),\n };\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x >= 0x16FF0 && x <= 0x16FF6\n\t\t|| x >= 0x17000 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D1E\n\t\t|| x >= 0x18D80 && x <= 0x18DF2\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D8\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA8A\n\t\t|| x >= 0x1FA8E && x <= 0x1FAC6\n\t\t|| x === 0x1FAC8\n\t\t|| x >= 0x1FACD && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAEA\n\t\t|| x >= 0x1FAEF && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction getCategory(x) {\n\tif (isAmbiguous(x)) return 'ambiguous';\n\n\tif (isFullWidth(x)) return 'fullwidth';\n\n\tif (\n\t\tx === 0x20A9\n\t\t|| x >= 0xFF61 && x <= 0xFFBE\n\t\t|| x >= 0xFFC2 && x <= 0xFFC7\n\t\t|| x >= 0xFFCA && x <= 0xFFCF\n\t\t|| x >= 0xFFD2 && x <= 0xFFD7\n\t\t|| x >= 0xFFDA && x <= 0xFFDC\n\t\t|| x >= 0xFFE8 && x <= 0xFFEE\n\t) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (\n\t\tx >= 0x20 && x <= 0x7E\n\t\t|| x === 0xA2\n\t\t|| x === 0xA3\n\t\t|| x === 0xA5\n\t\t|| x === 0xA6\n\t\t|| x === 0xAC\n\t\t|| x === 0xAF\n\t\t|| x >= 0x27E6 && x <= 0x27ED\n\t\t|| x === 0x2985\n\t\t|| x === 0x2986\n\t) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(x)) return 'wide';\n\n\treturn 'neutral';\n}\n\nexport {isAmbiguous, isFullWidth, isWide, getCategory};\n","import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n","import {\n\t_isFullWidth as isFullWidth,\n\t_isWide as isWide,\n} from 'get-east-asian-width';\n\nexport default function isFullwidthCodePoint(codePoint) {\n\tif (!Number.isInteger(codePoint)) {\n\t\treturn false;\n\t}\n\n\treturn isFullWidth(codePoint) || isWide(codePoint);\n}\n","import ansiStyles from 'ansi-styles';\nimport isFullwidthCodePoint from 'is-fullwidth-code-point';\n\n// \\x1b and \\x9b\nconst ESCAPES = new Set([27, 155]);\n\nconst CODE_POINT_0 = '0'.codePointAt(0);\nconst CODE_POINT_9 = '9'.codePointAt(0);\n\nconst MAX_ANSI_SEQUENCE_LENGTH = 19;\n\nconst endCodesSet = new Set();\nconst endCodesMap = new Map();\nfor (const [start, end] of ansiStyles.codes) {\n\tendCodesSet.add(ansiStyles.color.ansi(end));\n\tendCodesMap.set(ansiStyles.color.ansi(start), ansiStyles.color.ansi(end));\n}\n\nfunction getEndCode(code) {\n\tif (endCodesSet.has(code)) {\n\t\treturn code;\n\t}\n\n\tif (endCodesMap.has(code)) {\n\t\treturn endCodesMap.get(code);\n\t}\n\n\tcode = code.slice(2);\n\tif (code.includes(';')) {\n\t\tcode = code[0] + '0';\n\t}\n\n\tconst returnValue = ansiStyles.codes.get(Number.parseInt(code, 10));\n\tif (returnValue) {\n\t\treturn ansiStyles.color.ansi(returnValue);\n\t}\n\n\treturn ansiStyles.reset.open;\n}\n\nfunction findNumberIndex(string) {\n\tfor (let index = 0; index < string.length; index++) {\n\t\tconst codePoint = string.codePointAt(index);\n\t\tif (codePoint >= CODE_POINT_0 && codePoint <= CODE_POINT_9) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\nfunction parseAnsiCode(string, offset) {\n\tstring = string.slice(offset, offset + MAX_ANSI_SEQUENCE_LENGTH);\n\tconst startIndex = findNumberIndex(string);\n\tif (startIndex !== -1) {\n\t\tlet endIndex = string.indexOf('m', startIndex);\n\t\tif (endIndex === -1) {\n\t\t\tendIndex = string.length;\n\t\t}\n\n\t\treturn string.slice(0, endIndex + 1);\n\t}\n}\n\nfunction tokenize(string, endCharacter = Number.POSITIVE_INFINITY) {\n\tconst returnValue = [];\n\n\tlet index = 0;\n\tlet visibleCount = 0;\n\twhile (index < string.length) {\n\t\tconst codePoint = string.codePointAt(index);\n\n\t\tif (ESCAPES.has(codePoint)) {\n\t\t\tconst code = parseAnsiCode(string, index);\n\t\t\tif (code) {\n\t\t\t\treturnValue.push({\n\t\t\t\t\ttype: 'ansi',\n\t\t\t\t\tcode,\n\t\t\t\t\tendCode: getEndCode(code),\n\t\t\t\t});\n\t\t\t\tindex += code.length;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst isFullWidth = isFullwidthCodePoint(codePoint);\n\t\tconst character = String.fromCodePoint(codePoint);\n\n\t\treturnValue.push({\n\t\t\ttype: 'character',\n\t\t\tvalue: character,\n\t\t\tisFullWidth,\n\t\t});\n\n\t\tindex += character.length;\n\t\tvisibleCount += isFullWidth ? 2 : character.length;\n\n\t\tif (visibleCount >= endCharacter) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn returnValue;\n}\n\nfunction reduceAnsiCodes(codes) {\n\tlet returnValue = [];\n\n\tfor (const code of codes) {\n\t\tif (code.code === ansiStyles.reset.open) {\n\t\t\t// Reset code, disable all codes\n\t\t\treturnValue = [];\n\t\t} else if (endCodesSet.has(code.code)) {\n\t\t\t// This is an end code, disable all matching start codes\n\t\t\treturnValue = returnValue.filter(returnValueCode => returnValueCode.endCode !== code.code);\n\t\t} else {\n\t\t\t// This is a start code. Disable all styles this \"overrides\", then enable it\n\t\t\treturnValue = returnValue.filter(returnValueCode => returnValueCode.endCode !== code.endCode);\n\t\t\treturnValue.push(code);\n\t\t}\n\t}\n\n\treturn returnValue;\n}\n\nfunction undoAnsiCodes(codes) {\n\tconst reduced = reduceAnsiCodes(codes);\n\tconst endCodes = reduced.map(({endCode}) => endCode);\n\treturn endCodes.reverse().join('');\n}\n\nexport default function sliceAnsi(string, start, end) {\n\tconst tokens = tokenize(string, end);\n\tlet activeCodes = [];\n\tlet position = 0;\n\tlet returnValue = '';\n\tlet include = false;\n\n\tfor (const token of tokens) {\n\t\tif (end !== undefined && position >= end) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (token.type === 'ansi') {\n\t\t\tactiveCodes.push(token);\n\t\t\tif (include) {\n\t\t\t\treturnValue += token.code;\n\t\t\t}\n\t\t} else {\n\t\t\t// Character\n\t\t\tif (!include && position >= start) {\n\t\t\t\tinclude = true;\n\t\t\t\t// Simplify active codes\n\t\t\t\tactiveCodes = reduceAnsiCodes(activeCodes);\n\t\t\t\treturnValue = activeCodes.map(({code}) => code).join('');\n\t\t\t}\n\n\t\t\tif (include) {\n\t\t\t\treturnValue += token.value;\n\t\t\t}\n\n\t\t\tposition += token.isFullWidth ? 2 : token.value.length;\n\t\t}\n\t}\n\n\t// Disable active codes at the end\n\treturnValue += undoAnsiCodes(activeCodes);\n\treturn returnValue;\n}\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\n\n/**\nLogic:\n- Segment graphemes to match how terminals render clusters.\n- Width rules:\n\t1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.\n\t2. RGI emoji clusters (\\p{RGI_Emoji}) are double-width.\n\t3. Otherwise use East Asian Width of the cluster’s first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).\n*/\n\nconst segmenter = new Intl.Segmenter();\n\n// Whole-cluster zero-width\nconst zeroWidthClusterRegex = /^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$/v;\n\n// Pick the base scalar if the cluster starts with Prepend/Format/Marks\nconst leadingNonPrintingRegex = /^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+/v;\n\n// RGI emoji sequences\nconst rgiEmojiRegex = /^\\p{RGI_Emoji}$/v;\n\nfunction baseVisible(segment) {\n\treturn segment.replace(leadingNonPrintingRegex, '');\n}\n\nfunction isZeroWidthCluster(segment) {\n\treturn zeroWidthClusterRegex.test(segment);\n}\n\nfunction trailingHalfwidthWidth(segment, eastAsianWidthOptions) {\n\tlet extra = 0;\n\tif (segment.length > 1) {\n\t\tfor (const char of segment.slice(1)) {\n\t\t\tif (char >= '\\uFF00' && char <= '\\uFFEF') {\n\t\t\t\textra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn extra;\n}\n\nexport default function stringWidth(input, options = {}) {\n\tif (typeof input !== 'string' || input.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tlet string = input;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment} of segmenter.segment(string)) {\n\t\t// Zero-width / non-printing clusters\n\t\tif (isZeroWidthCluster(segment)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Emoji width logic\n\t\tif (rgiEmojiRegex.test(segment)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Everything else: EAW of the cluster’s first visible scalar\n\t\tconst codePoint = baseVisible(segment).codePointAt(0);\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\n\t\t// Add width for trailing Halfwidth and Fullwidth Forms (e.g., ゙, ゚, ー)\n\t\twidth += trailingHalfwidthWidth(segment, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n","import sliceAnsi from 'slice-ansi';\nimport stringWidth from 'string-width';\n\nfunction getIndexOfNearestSpace(string, wantedIndex, shouldSearchRight) {\n\tif (string.charAt(wantedIndex) === ' ') {\n\t\treturn wantedIndex;\n\t}\n\n\tconst direction = shouldSearchRight ? 1 : -1;\n\n\tfor (let index = 0; index <= 3; index++) {\n\t\tconst finalIndex = wantedIndex + (index * direction);\n\t\tif (string.charAt(finalIndex) === ' ') {\n\t\t\treturn finalIndex;\n\t\t}\n\t}\n\n\treturn wantedIndex;\n}\n\nexport default function cliTruncate(text, columns, options = {}) {\n\tconst {\n\t\tposition = 'end',\n\t\tspace = false,\n\t\tpreferTruncationOnSpace = false,\n\t} = options;\n\n\tlet {truncationCharacter = '…'} = options;\n\n\tif (typeof text !== 'string') {\n\t\tthrow new TypeError(`Expected \\`input\\` to be a string, got ${typeof text}`);\n\t}\n\n\tif (typeof columns !== 'number') {\n\t\tthrow new TypeError(`Expected \\`columns\\` to be a number, got ${typeof columns}`);\n\t}\n\n\tif (columns < 1) {\n\t\treturn '';\n\t}\n\n\tconst length = stringWidth(text);\n\n\tif (length <= columns) {\n\t\treturn text;\n\t}\n\n\tif (columns === 1) {\n\t\treturn truncationCharacter;\n\t}\n\n\t// ANSI escape sequence constants\n\tconst ANSI = {\n\t\tESC: 27,\n\t\tLEFT_BRACKET: 91,\n\t\tLETTER_M: 109,\n\t};\n\n\tconst isSgrParameter = code => (code >= 48 && code <= 57) || code === 59; // 0-9 or ;\n\n\tfunction leadingSgrSpanEndIndex(string) {\n\t\tlet index = 0;\n\t\twhile (index + 2 < string.length && string.codePointAt(index) === ANSI.ESC && string.codePointAt(index + 1) === ANSI.LEFT_BRACKET) {\n\t\t\tlet j = index + 2;\n\t\t\twhile (j < string.length && isSgrParameter(string.codePointAt(j))) {\n\t\t\t\tj++;\n\t\t\t}\n\n\t\t\tif (j < string.length && string.codePointAt(j) === ANSI.LETTER_M) {\n\t\t\t\tindex = j + 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\treturn index;\n\t}\n\n\tfunction trailingSgrSpanStartIndex(string) {\n\t\tlet start = string.length;\n\t\twhile (start > 1 && string.codePointAt(start - 1) === ANSI.LETTER_M) {\n\t\t\tlet j = start - 2;\n\t\t\twhile (j >= 0 && isSgrParameter(string.codePointAt(j))) {\n\t\t\t\tj--;\n\t\t\t}\n\n\t\t\tif (j >= 1 && string.codePointAt(j - 1) === ANSI.ESC && string.codePointAt(j) === ANSI.LEFT_BRACKET) {\n\t\t\t\tstart = j - 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\treturn start;\n\t}\n\n\tfunction appendWithInheritedStyleFromEnd(visible, suffix) {\n\t\tconst start = trailingSgrSpanStartIndex(visible);\n\t\tif (start === visible.length) {\n\t\t\treturn visible + suffix;\n\t\t}\n\n\t\treturn visible.slice(0, start) + suffix + visible.slice(start);\n\t}\n\n\tfunction prependWithInheritedStyleFromStart(prefix, visible) {\n\t\tconst end = leadingSgrSpanEndIndex(visible);\n\t\tif (end === 0) {\n\t\t\treturn prefix + visible;\n\t\t}\n\n\t\treturn visible.slice(0, end) + prefix + visible.slice(end);\n\t}\n\n\tif (position === 'start') {\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst nearestSpace = getIndexOfNearestSpace(text, length - columns + 1, true);\n\t\t\tconst right = sliceAnsi(text, nearestSpace, length).trim();\n\t\t\treturn prependWithInheritedStyleFromStart(truncationCharacter, right);\n\t\t}\n\n\t\tif (space) {\n\t\t\ttruncationCharacter += ' ';\n\t\t}\n\n\t\tconst right = sliceAnsi(text, length - columns + stringWidth(truncationCharacter), length);\n\t\treturn prependWithInheritedStyleFromStart(truncationCharacter, right);\n\t}\n\n\tif (position === 'middle') {\n\t\tif (space) {\n\t\t\ttruncationCharacter = ` ${truncationCharacter} `;\n\t\t}\n\n\t\tconst half = Math.floor(columns / 2);\n\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst spaceNearFirstBreakPoint = getIndexOfNearestSpace(text, half);\n\t\t\tconst spaceNearSecondBreakPoint = getIndexOfNearestSpace(text, length - (columns - half) + 1, true);\n\t\t\treturn sliceAnsi(text, 0, spaceNearFirstBreakPoint) + truncationCharacter + sliceAnsi(text, spaceNearSecondBreakPoint, length).trim();\n\t\t}\n\n\t\treturn (\n\t\t\tsliceAnsi(text, 0, half)\n\t\t\t+ truncationCharacter\n\t\t\t+ sliceAnsi(text, length - (columns - half) + stringWidth(truncationCharacter), length)\n\t\t);\n\t}\n\n\tif (position === 'end') {\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst nearestSpace = getIndexOfNearestSpace(text, columns - 1);\n\t\t\tconst left = sliceAnsi(text, 0, nearestSpace);\n\t\t\treturn appendWithInheritedStyleFromEnd(left, truncationCharacter);\n\t\t}\n\n\t\tif (space) {\n\t\t\ttruncationCharacter = ` ${truncationCharacter}`;\n\t\t}\n\n\t\tconst left = sliceAnsi(text, 0, columns - stringWidth(truncationCharacter));\n\t\treturn appendWithInheritedStyleFromEnd(left, truncationCharacter);\n\t}\n\n\tthrow new Error(`Expected \\`options.position\\` to be either \\`start\\`, \\`middle\\` or \\`end\\`, got ${position}`);\n}\n","/**\n * Layout constants and utility functions for SearchableMultiSelect.\n *\n * These values are shared between the component itself and the callers\n * that need to pre-calculate the visible item count.\n */\n\n/** Lines rendered per choice item (title + subtitle + meta) */\nexport const ITEM_HEIGHT = 3;\n\n/**\n * Lines reserved for chrome around the item list:\n * header(2) + search box(4) + status(2) + scroll indicators(2) + footer(2) = 12\n */\nexport const RESERVED_LINES = 12;\n\n/** Gets terminal width, falling back to 80 if not available */\nexport function getTerminalWidth(): number {\n return process.stdout.columns ?? 80;\n}\n\n/** Gets terminal height, falling back to 24 if not available */\nexport function getTerminalHeight(): number {\n return process.stdout.rows ?? 24;\n}\n\n/**\n * Calculates the effective limit for the item list\n * based on terminal height to prevent the input field from being hidden.\n */\nexport function calculateEffectiveLimit(configLimit: number): number {\n const terminalHeight = getTerminalHeight();\n const availableLines = terminalHeight - RESERVED_LINES;\n const maxVisibleChoices = Math.max(1, Math.floor(availableLines / ITEM_HEIGHT));\n return configLimit > 0 ? Math.min(configLimit, maxVisibleChoices) : maxVisibleChoices;\n}\n","/**\n * SearchableMultiSelect - A searchable multi-select component for React Ink\n *\n * This component combines text input for filtering with multi-select functionality,\n * which is not available in ink-ui out of the box.\n */\n\nimport { Box, Text, useFocus, useInput, useStdout } from \"ink\";\nimport type React from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport cliTruncate from \"cli-truncate\";\nimport { ITEM_HEIGHT, RESERVED_LINES } from \"./layout.js\";\n\nexport interface Choice<T = unknown> {\n /** Unique identifier for the choice */\n id: string;\n /** Primary text (title) - displayed in cyan when focused */\n title: string;\n /** Secondary text (e.g., authors) */\n subtitle?: string;\n /** Tertiary text (e.g., year, type, identifiers) */\n meta?: string;\n /** Associated value */\n value: T;\n /** Date when the item was last updated (custom.timestamp) */\n updatedDate?: Date;\n /** Date when the item was created (custom.created_at) */\n createdDate?: Date;\n /** Date when the item was published (for sorting) */\n publishedDate?: Date;\n}\n\n/** Sort option identifier */\nexport type SortOption =\n | \"updated-desc\"\n | \"updated-asc\"\n | \"created-desc\"\n | \"created-asc\"\n | \"published-desc\"\n | \"published-asc\"\n | \"relevance\";\n\n/** Sort option configuration */\ninterface SortOptionConfig {\n id: SortOption;\n label: string;\n requiresQuery: boolean;\n}\n\nexport interface SearchableMultiSelectProps<T> {\n /** Available choices */\n choices: Choice<T>[];\n /** Filter function for search */\n filterFn?: (query: string, choices: Choice<T>[]) => Choice<T>[];\n /** Maximum visible items */\n visibleCount?: number;\n /** Callback when selection is confirmed */\n onSubmit: (selected: Choice<T>[]) => void;\n /** Callback when cancelled */\n onCancel: () => void;\n /** Placeholder text for search input */\n placeholder?: string;\n /** Header text */\n header?: string;\n /** Footer text */\n footer?: string;\n /** Default sort option */\n defaultSort?: SortOption;\n /** Debounce delay in milliseconds for search filtering */\n debounceMs?: number;\n}\n\n/** All available sort options */\nconst SORT_OPTIONS: SortOptionConfig[] = [\n { id: \"updated-desc\", label: \"Updated (newest first)\", requiresQuery: false },\n { id: \"updated-asc\", label: \"Updated (oldest first)\", requiresQuery: false },\n { id: \"created-desc\", label: \"Created (newest first)\", requiresQuery: false },\n { id: \"created-asc\", label: \"Created (oldest first)\", requiresQuery: false },\n { id: \"published-desc\", label: \"Published (newest first)\", requiresQuery: false },\n { id: \"published-asc\", label: \"Published (oldest first)\", requiresQuery: false },\n { id: \"relevance\", label: \"Relevance\", requiresQuery: true },\n];\n\n/** Get short label for status bar */\nfunction getSortShortLabel(sortOption: SortOption): string {\n switch (sortOption) {\n case \"updated-desc\":\n return \"Updated ↓\";\n case \"updated-asc\":\n return \"Updated ↑\";\n case \"created-desc\":\n return \"Created ↓\";\n case \"created-asc\":\n return \"Created ↑\";\n case \"published-desc\":\n return \"Published ↓\";\n case \"published-asc\":\n return \"Published ↑\";\n case \"relevance\":\n return \"Relevance\";\n }\n}\n\n/** Create a date comparator for sorting */\nfunction createDateComparator<T>(\n getDate: (choice: Choice<T>) => Date | undefined,\n descending: boolean\n): (a: Choice<T>, b: Choice<T>) => number {\n return (a, b) => {\n const dateA = getDate(a)?.getTime() ?? 0;\n const dateB = getDate(b)?.getTime() ?? 0;\n return descending ? dateB - dateA : dateA - dateB;\n };\n}\n\n/**\n * Sort choices by the given option\n */\nfunction sortChoices<T>(choices: Choice<T>[], sortOption: SortOption): Choice<T>[] {\n if (sortOption === \"relevance\") return [...choices];\n\n const sorted = [...choices];\n const comparators: Record<\n Exclude<SortOption, \"relevance\">,\n (a: Choice<T>, b: Choice<T>) => number\n > = {\n \"updated-desc\": createDateComparator((c) => c.updatedDate, true),\n \"updated-asc\": createDateComparator((c) => c.updatedDate, false),\n \"created-desc\": createDateComparator((c) => c.createdDate, true),\n \"created-asc\": createDateComparator((c) => c.createdDate, false),\n \"published-desc\": createDateComparator((c) => c.publishedDate, true),\n \"published-asc\": createDateComparator((c) => c.publishedDate, false),\n };\n\n return sorted.sort(comparators[sortOption]);\n}\n\n/**\n * Default filter function - case-insensitive substring match\n */\nfunction defaultFilter<T>(query: string, choices: Choice<T>[]): Choice<T>[] {\n if (!query.trim()) return choices;\n const lowerQuery = query.toLowerCase();\n return choices.filter(\n (choice) =>\n choice.title.toLowerCase().includes(lowerQuery) ||\n choice.subtitle?.toLowerCase().includes(lowerQuery) ||\n choice.meta?.toLowerCase().includes(lowerQuery)\n );\n}\n\n/**\n * Truncate text to fit within maxWidth\n */\nfunction truncate(text: string, maxWidth: number): string {\n return cliTruncate(text, maxWidth, { position: \"end\" });\n}\n\n/**\n * Key handler result type\n */\ntype KeyAction =\n | { type: \"cancel\" }\n | { type: \"submit\" }\n | { type: \"navigate\"; delta: number }\n | { type: \"toggle\" }\n | { type: \"backspace\" }\n | { type: \"input\"; char: string }\n | { type: \"sort\" }\n | { type: \"none\" };\n\n/** Key state type for parsing */\ninterface KeyState {\n escape: boolean;\n return: boolean;\n upArrow: boolean;\n downArrow: boolean;\n pageUp: boolean;\n pageDown: boolean;\n tab: boolean;\n backspace: boolean;\n delete: boolean;\n ctrl: boolean;\n meta: boolean;\n}\n\n/** Get navigation delta from key state */\nfunction getNavigationDelta(\n key: KeyState,\n input: string,\n visibleCount: number,\n maxIndex: number\n): number | null {\n if (key.upArrow) return -1;\n if (key.downArrow) return 1;\n if (key.pageUp) return -visibleCount;\n if (key.pageDown) return visibleCount;\n if (key.ctrl && input === \"a\") return -maxIndex - 1;\n if (key.ctrl && input === \"e\") return maxIndex + 1;\n return null;\n}\n\n/**\n * Parse key input into action\n */\nfunction parseKeyAction(\n input: string,\n key: KeyState,\n visibleCount: number,\n maxIndex: number\n): KeyAction {\n if (key.escape) return { type: \"cancel\" };\n if (key.return) return { type: \"submit\" };\n\n const navDelta = getNavigationDelta(key, input, visibleCount, maxIndex);\n if (navDelta !== null) return { type: \"navigate\", delta: navDelta };\n\n if (key.ctrl && input === \"s\") return { type: \"sort\" };\n if (key.tab) return { type: \"toggle\" };\n if (key.backspace || key.delete) return { type: \"backspace\" };\n if (input && !key.ctrl && !key.meta) return { type: \"input\", char: input };\n return { type: \"none\" };\n}\n\n/**\n * Choice item component - renders a single multi-line choice\n */\nfunction ChoiceItem<T>({\n choice,\n isSelected,\n isFocused,\n contentWidth,\n}: {\n choice: Choice<T>;\n isSelected: boolean;\n isFocused: boolean;\n contentWidth: number;\n}): React.ReactElement {\n const indent = \" \"; // 6 spaces to align with title (after indicator + checkbox)\n\n return (\n <Box flexDirection=\"column\" paddingY={0}>\n {/* Row 1: Focus indicator + Checkbox + Title */}\n <Box flexDirection=\"row\">\n {/* Focus indicator - fixed width */}\n <Box width={2}>\n <Text color=\"cyan\">{isFocused ? \"❯\" : \" \"}</Text>\n </Box>\n {/* Selection checkbox */}\n <Box width={2}>\n <Text color={isSelected ? \"green\" : \"gray\"}>{isSelected ? \"◉\" : \"○\"}</Text>\n </Box>\n <Box width={1}>\n <Text> </Text>\n </Box>\n {/* Title */}\n <Box>\n {isFocused ? (\n <Text color=\"cyan\" bold>\n {truncate(choice.title, contentWidth)}\n </Text>\n ) : (\n <Text color=\"blue\">{truncate(choice.title, contentWidth)}</Text>\n )}\n </Box>\n </Box>\n\n {/* Row 2: Subtitle (authors) */}\n {choice.subtitle && (\n <Box>\n <Text dimColor>\n {indent}\n {truncate(choice.subtitle, contentWidth)}\n </Text>\n </Box>\n )}\n\n {/* Row 3: Meta (year, type, identifiers) */}\n {choice.meta && (\n <Box>\n <Text dimColor>\n {indent}\n {truncate(choice.meta, contentWidth)}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n\n/**\n * Scroll indicator component\n */\nfunction ScrollIndicator({\n direction,\n count,\n visible,\n}: {\n direction: \"up\" | \"down\";\n count: number;\n visible: boolean;\n}): React.ReactElement {\n const arrow = direction === \"up\" ? \"↑\" : \"↓\";\n const label = direction === \"up\" ? \"more above\" : \"more below\";\n return (\n <Box height={1}>\n {visible && count > 0 ? (\n <Text dimColor>\n {\" \"}\n {arrow} {count} {label}\n </Text>\n ) : (\n <Text> </Text>\n )}\n </Box>\n );\n}\n\n/**\n * Choice list component\n */\nfunction ChoiceList<T>({\n choices,\n selectedIds,\n focusIndex,\n scrollOffset,\n contentWidth,\n}: {\n choices: Choice<T>[];\n selectedIds: Set<string>;\n focusIndex: number;\n scrollOffset: number;\n contentWidth: number;\n}): React.ReactElement {\n if (choices.length === 0) {\n return (\n <Box paddingY={1}>\n <Text dimColor>No results found</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n {choices.map((choice, visibleIndex) => {\n const actualIndex = scrollOffset + visibleIndex;\n return (\n <Box key={choice.id} flexDirection=\"row\">\n <ChoiceItem\n choice={choice}\n isSelected={selectedIds.has(choice.id)}\n isFocused={actualIndex === focusIndex}\n contentWidth={contentWidth}\n />\n </Box>\n );\n })}\n </Box>\n );\n}\n\n/**\n * Sort menu component\n */\nfunction SortMenu({\n options,\n focusIndex,\n currentSort,\n}: {\n options: SortOptionConfig[];\n focusIndex: number;\n currentSort: SortOption;\n}): React.ReactElement {\n return (\n <Box\n flexDirection=\"column\"\n marginBottom={1}\n paddingX={1}\n borderStyle=\"round\"\n borderColor=\"yellow\"\n >\n <Box marginBottom={1}>\n <Text bold color=\"yellow\">\n Sort by:\n </Text>\n </Box>\n {options.map((opt, index) => {\n const isFocused = index === focusIndex;\n const isCurrent = opt.id === currentSort;\n const checkMark = isCurrent ? \" ✓\" : \"\";\n return (\n <Box key={opt.id}>\n {isFocused ? (\n <Text color=\"cyan\">\n ❯ {opt.label}\n {checkMark}\n </Text>\n ) : (\n <Text>\n {\" \"}\n {opt.label}\n {checkMark}\n </Text>\n )}\n </Box>\n );\n })}\n <Box marginTop={1}>\n <Text dimColor>↑↓:select Enter:confirm Esc:cancel</Text>\n </Box>\n </Box>\n );\n}\n\nexport function SearchableMultiSelect<T>({\n choices,\n filterFn = defaultFilter,\n visibleCount: visibleCountProp,\n onSubmit,\n onCancel,\n placeholder = \"Type to search...\",\n header,\n footer,\n defaultSort = \"updated-desc\",\n debounceMs = 0,\n}: SearchableMultiSelectProps<T>): React.ReactElement {\n const [query, setQuery] = useState(\"\");\n const [debouncedQuery, setDebouncedQuery] = useState(\"\");\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const [focusIndex, setFocusIndex] = useState(0);\n const [scrollOffset, setScrollOffset] = useState(0);\n const [sortOption, setSortOption] = useState<SortOption>(defaultSort);\n const [showSortMenu, setShowSortMenu] = useState(false);\n const [sortMenuIndex, setSortMenuIndex] = useState(0);\n const { isFocused } = useFocus({ autoFocus: true });\n const { stdout } = useStdout();\n\n // Get terminal dimensions\n const terminalWidth = stdout?.columns ?? 80;\n const terminalHeight = stdout?.rows ?? 24;\n const contentWidth = terminalWidth - 8; // Reserve space for checkbox and padding\n\n // Calculate visible count based on terminal height\n const calculatedVisibleCount = Math.max(\n 1,\n Math.floor((terminalHeight - RESERVED_LINES) / ITEM_HEIGHT)\n );\n const visibleCount = visibleCountProp ?? calculatedVisibleCount;\n\n // Debounce query updates for expensive filtering\n useEffect(() => {\n if (debounceMs <= 0) {\n setDebouncedQuery(query);\n return;\n }\n clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => setDebouncedQuery(query), debounceMs);\n return () => clearTimeout(debounceRef.current);\n }, [query, debounceMs]);\n\n // Filter choices based on debounced query\n const filteredChoices = useMemo(\n () => filterFn(debouncedQuery, choices),\n [debouncedQuery, choices, filterFn]\n );\n\n // Get available sort options (relevance only when query exists)\n const availableSortOptions = useMemo(\n () => SORT_OPTIONS.filter((opt) => !opt.requiresQuery || debouncedQuery.trim().length > 0),\n [debouncedQuery]\n );\n\n // Apply sorting (skip for relevance as filter function handles it)\n const sortedChoices = useMemo(\n () => (sortOption === \"relevance\" ? filteredChoices : sortChoices(filteredChoices, sortOption)),\n [filteredChoices, sortOption]\n );\n\n const maxIndex = sortedChoices.length - 1;\n\n // Reset focus and scroll when filtered results change\n // biome-ignore lint/correctness/useExhaustiveDependencies: intentionally reset on debounced query change\n useEffect(() => {\n setFocusIndex(0);\n setScrollOffset(0);\n }, [debouncedQuery]);\n\n // Adjust scroll offset when focus changes\n useEffect(() => {\n if (focusIndex < scrollOffset) {\n setScrollOffset(focusIndex);\n } else if (focusIndex >= scrollOffset + visibleCount) {\n setScrollOffset(focusIndex - visibleCount + 1);\n }\n }, [focusIndex, scrollOffset, visibleCount]);\n\n // Get visible choices\n const visibleChoices = useMemo(\n () => sortedChoices.slice(scrollOffset, scrollOffset + visibleCount),\n [sortedChoices, scrollOffset, visibleCount]\n );\n\n // Toggle selection\n const toggleSelection = useCallback(() => {\n const currentChoice = sortedChoices[focusIndex];\n if (!currentChoice) return;\n setSelectedIds((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(currentChoice.id)) {\n newSet.delete(currentChoice.id);\n } else {\n newSet.add(currentChoice.id);\n }\n return newSet;\n });\n }, [sortedChoices, focusIndex]);\n\n // Handle keyboard input for sort menu\n useInput(\n (_input, key) => {\n if (key.escape) {\n setShowSortMenu(false);\n return;\n }\n if (key.return) {\n const selected = availableSortOptions[sortMenuIndex];\n if (selected) {\n setSortOption(selected.id);\n setFocusIndex(0);\n setScrollOffset(0);\n }\n setShowSortMenu(false);\n return;\n }\n if (key.upArrow) {\n setSortMenuIndex((prev) => Math.max(0, prev - 1));\n return;\n }\n if (key.downArrow) {\n setSortMenuIndex((prev) => Math.min(availableSortOptions.length - 1, prev + 1));\n return;\n }\n },\n { isActive: isFocused && showSortMenu }\n );\n\n // Handle keyboard input for main list\n useInput(\n (input, key) => {\n const action = parseKeyAction(input, key, visibleCount, maxIndex);\n switch (action.type) {\n case \"cancel\":\n onCancel();\n break;\n case \"submit\":\n onSubmit(choices.filter((c) => selectedIds.has(c.id)));\n break;\n case \"navigate\":\n setFocusIndex((prev) => Math.max(0, Math.min(maxIndex, prev + action.delta)));\n break;\n case \"toggle\":\n toggleSelection();\n break;\n case \"backspace\":\n setQuery((prev) => prev.slice(0, -1));\n break;\n case \"input\":\n setQuery((prev) => prev + action.char);\n break;\n case \"sort\":\n setSortMenuIndex(availableSortOptions.findIndex((o) => o.id === sortOption));\n setShowSortMenu(true);\n break;\n }\n },\n { isActive: isFocused && !showSortMenu }\n );\n\n const totalItems = sortedChoices.length;\n const showScrollIndicator = totalItems > visibleCount;\n\n const footerText =\n footer ??\n (showScrollIndicator\n ? `↑↓:move Tab:select ^S:sort Enter:confirm (${focusIndex + 1}/${totalItems})`\n : \"↑↓:move Tab:select ^S:sort Enter:confirm Esc:cancel\");\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n {/* Header */}\n {header && (\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n {header}\n </Text>\n </Box>\n )}\n\n {/* Search input */}\n <Box marginBottom={1} paddingX={1} borderStyle=\"round\" borderColor=\"cyan\">\n <Text color=\"green\">❯ </Text>\n <Text>{query || <Text dimColor>{placeholder}</Text>}</Text>\n <Text color=\"gray\">▎</Text>\n </Box>\n\n {/* Status bar */}\n <Box marginBottom={1} paddingX={1} justifyContent=\"space-between\">\n <Box>\n {selectedIds.size > 0 ? (\n <Text color=\"yellow\">\n {selectedIds.size} selected / {totalItems} results\n </Text>\n ) : (\n <Text dimColor>{totalItems} results</Text>\n )}\n </Box>\n <Box>\n <Text dimColor>Sort: {getSortShortLabel(sortOption)}</Text>\n </Box>\n </Box>\n\n {/* Sort menu (replaces list when shown) - fixed height to prevent layout shift */}\n <Box flexDirection=\"column\" height={visibleCount * ITEM_HEIGHT + 2}>\n {showSortMenu ? (\n <SortMenu\n options={availableSortOptions}\n focusIndex={sortMenuIndex}\n currentSort={sortOption}\n />\n ) : (\n <>\n <ScrollIndicator direction=\"up\" count={scrollOffset} visible={showScrollIndicator} />\n <ChoiceList\n choices={visibleChoices}\n selectedIds={selectedIds}\n focusIndex={focusIndex}\n scrollOffset={scrollOffset}\n contentWidth={contentWidth}\n />\n <ScrollIndicator\n direction=\"down\"\n count={totalItems - scrollOffset - visibleCount}\n visible={showScrollIndicator}\n />\n </>\n )}\n </Box>\n <Box marginTop={1}>\n <Text dimColor>{footerText}</Text>\n </Box>\n </Box>\n );\n}\n"],"names":["isFullWidth","right","left","jsxs","jsx","Fragment"],"mappings":"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K,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,SACN,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,MAAM,SACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,WACrB,KAAK,WAAY,KAAK;AAC3B;AAEA,SAAS,YAAY,GAAG;AACvB,SAAO,MAAM,SACT,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK;AACzB;AAEA,SAAS,OAAO,GAAG;AAClB,SAAO,KAAK,QAAU,KAAK,QACvB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,KAAK,SAAU,KAAK,SACpB,MAAM,SACN,KAAK,SAAU,KAAK,SACpB,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAU,KAAK,SACpB,KAAK,SAAW,KAAK,SACrB,KAAK,SAAW,KAAK,SACrB,KAAK,SAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,KAAK,UAAW,KAAK,UACrB,MAAM,UACN,MAAM,UACN,MAAM,UACN,MAAM,UACN,KAAK,UAAW,KAA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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import "ink";
|
|
2
2
|
import "react";
|
|
3
|
-
import { a as stringify, f as formatBibtex } from "./index-
|
|
3
|
+
import { a as stringify, f as formatBibtex } from "./index-QTYx5RaF.js";
|
|
4
4
|
import "node:path";
|
|
5
|
-
import { f as formatBibliographyCSL } from "./index-
|
|
5
|
+
import { f as formatBibliographyCSL } from "./index-D2HsxXnK.js";
|
|
6
6
|
const SIDE_EFFECT_ACTIONS = /* @__PURE__ */ new Set([
|
|
7
7
|
"open-url",
|
|
8
8
|
"open-fulltext",
|
|
@@ -85,4 +85,4 @@ export {
|
|
|
85
85
|
getActionChoices,
|
|
86
86
|
isSideEffectAction
|
|
87
87
|
};
|
|
88
|
-
//# sourceMappingURL=action-menu-
|
|
88
|
+
//# sourceMappingURL=action-menu-DD0RtNVD.js.map
|