@thematica/prism-tui 0.0.0-stage → 0.1.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.
Files changed (42) hide show
  1. package/README.md +37 -2
  2. package/dist/packages/prism-tui/src/account.d.ts +4 -0
  3. package/dist/packages/prism-tui/src/account.d.ts.map +1 -0
  4. package/dist/packages/prism-tui/src/account.js +25 -0
  5. package/dist/packages/prism-tui/src/account.js.map +1 -0
  6. package/dist/packages/prism-tui/src/cli.d.ts +3 -0
  7. package/dist/packages/prism-tui/src/cli.d.ts.map +1 -0
  8. package/dist/packages/prism-tui/src/cli.js +117 -0
  9. package/dist/packages/prism-tui/src/cli.js.map +1 -0
  10. package/dist/packages/prism-tui/src/credentials.d.ts +11 -0
  11. package/dist/packages/prism-tui/src/credentials.d.ts.map +1 -0
  12. package/dist/packages/prism-tui/src/credentials.js +53 -0
  13. package/dist/packages/prism-tui/src/credentials.js.map +1 -0
  14. package/dist/packages/prism-tui/src/device-login.d.ts +14 -0
  15. package/dist/packages/prism-tui/src/device-login.d.ts.map +1 -0
  16. package/dist/packages/prism-tui/src/device-login.js +78 -0
  17. package/dist/packages/prism-tui/src/device-login.js.map +1 -0
  18. package/dist/src/cli/answer.d.ts +219 -0
  19. package/dist/src/cli/answer.d.ts.map +1 -0
  20. package/dist/src/cli/answer.js +201 -0
  21. package/dist/src/cli/answer.js.map +1 -0
  22. package/dist/src/cli/app/App.d.ts +127 -0
  23. package/dist/src/cli/app/App.d.ts.map +1 -0
  24. package/dist/src/cli/app/App.js +974 -0
  25. package/dist/src/cli/app/App.js.map +1 -0
  26. package/dist/src/cli/app/api.d.ts +130 -0
  27. package/dist/src/cli/app/api.d.ts.map +1 -0
  28. package/dist/src/cli/app/api.js +80 -0
  29. package/dist/src/cli/app/api.js.map +1 -0
  30. package/dist/src/cli/app/run-app.d.ts +9 -0
  31. package/dist/src/cli/app/run-app.d.ts.map +1 -0
  32. package/dist/src/cli/app/run-app.js +11 -0
  33. package/dist/src/cli/app/run-app.js.map +1 -0
  34. package/dist/src/facts/fresh.d.ts +15 -0
  35. package/dist/src/facts/fresh.d.ts.map +1 -0
  36. package/dist/src/facts/fresh.js +22 -0
  37. package/dist/src/facts/fresh.js.map +1 -0
  38. package/dist/src/market/amounts.d.ts +208 -0
  39. package/dist/src/market/amounts.d.ts.map +1 -0
  40. package/dist/src/market/amounts.js +522 -0
  41. package/dist/src/market/amounts.js.map +1 -0
  42. package/package.json +15 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer.d.ts","sourceRoot":"","sources":["../../../../../src/cli/answer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ import { aboutUsd, amountAndNotes, figureDisplay, leadingQualifier, rateNote, readAmountParts, shortNumber, usdShort } from "../market/amounts.js";
2
+ /** How many months old a fact sheet may be and still count (src/facts/fresh.ts), for the words readers see. */
3
+ export { SHEET_MONTHS } from "../facts/fresh.js";
4
+ /** How amounts are written (src/market/amounts.ts), for the app and the command. */
5
+ export { rateNote, usdShort };
6
+ /**
7
+ * The four lists in the order they are shown: the command's headings, the app's tab labels, what each
8
+ * list means in plain words, shown under the app's tabs (Ben, 2026-10-20: "not everybody has the
9
+ * context that I have"), worded from the checker's and the ranking steps' own definitions, and each
10
+ * list's bands.
11
+ */
12
+ export const REPORTS = [
13
+ { key: "purest", title: "PUREST: the theme is the biggest share of the business", label: "Purest", description: "Purest shows how much of each company's business the theme makes up. Direct means it is the core business, about half of revenue or more; Secondary means about 10% to 50%; Tertiary means less.", bands: [["direct", "Direct"], ["secondary", "Secondary"], ["tertiary", "Tertiary"]] },
14
+ { key: "biggest", title: "BIGGEST: the most yearly revenue from the theme", label: "Most money", description: "Most money shows how much yearly revenue each company makes from the theme, as its filings state it or, when they give no figure for the theme alone, as Prism estimates it, largest first.", bands: [["over_10b", "Over $10B"], ["1b_to_10b", "$1B-$10B"], ["under_1b", "Under $1B"], ["amount_unknown", "Amount not known"]] },
15
+ { key: "influential", title: "MOST INFLUENTIAL: the theme depends on them most", label: "Most influential", description: "Most influential shows how much the theme depends on each company. Depends on it means the theme would be clearly set back without it; Notable means a real share that others could replace; Minor means it would hardly be missed.", bands: [["depends_on_it", "Depends on it"], ["notable", "Notable"], ["minor", "Minor"]] },
16
+ { key: "hurt", title: "HURT: companies the theme hurts", label: "Hurt", description: "Hurt shows the companies the theme hurts, by how much of their business it threatens. Direct means its core business; Secondary means a material part; Tertiary means less.", bands: [["direct", "Direct"], ["secondary", "Secondary"], ["tertiary", "Tertiary"]] },
17
+ ];
18
+ export const bandsOf = (a, key) => (key === "hurt" ? a.hurt : a.reports[key]);
19
+ /** What a run is doing, in the words both show while it runs. */
20
+ export const STEPS = { queued: "waiting to start", "waiting to retry": "an attempt failed; trying again shortly", "theme map": "mapping the theme", find: "finding candidates", filter: "filtering", check: "checking companies", rank: "ranking influence", reports: "writing the reports" };
21
+ /** Pasted text keeps the line breaks and indents of where it came from; one line reads better, so runs of spaces become one. */
22
+ export const oneLine = (s) => s.replace(/\s+/g, " ").trim();
23
+ const AMOUNT = /^\s*(US\$|C\$|A\$|HK\$|S\$|NT\$|R\$|\$|€|£|¥|₹)?\s*([\d,]+(?:\.\d+)?)\s*(thousand|million|billion|trillion|bn|mn|[KMB])?(?![A-Za-z])/i;
24
+ /**
25
+ * A quoted amount in dollars or its own currency, or null when the text is not an amount, or when its
26
+ * number is not written plainly (since 2026-10-23): a decimal comma ("€1,5 billion"), commas that are
27
+ * not thousands ("1,271,1") and thousands split by spaces ("€3 085 million") are left as written,
28
+ * never read as another number.
29
+ */
30
+ export function amountValue(text) {
31
+ const m = AMOUNT.exec(text);
32
+ if (m === null)
33
+ return null;
34
+ const digits = m[2] ?? "";
35
+ if (!/^(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(digits) || /^[\s,.]*\d/.test(text.slice(m[0].length)))
36
+ return null;
37
+ const unit = { thousand: 1e3, k: 1e3, million: 1e6, mn: 1e6, m: 1e6, billion: 1e9, bn: 1e9, b: 1e9, trillion: 1e12 }[(m[3] ?? "").toLowerCase()] ?? 1;
38
+ const value = Number(digits.replace(/,/g, "")) * unit;
39
+ return Number.isFinite(value) ? value : null;
40
+ }
41
+ /**
42
+ * A quoted amount written short from its text alone, as answers and fact sheets from before the API
43
+ * said each amount's currency (2026-10-23) are shown: "US$19,196 million" reads "US$19.2B" (it read
44
+ * "$19.2B" until Ben's ruling of 2026-10-23), "¥13,069,012 thousand" keeps its "¥", since the text
45
+ * alone does not say whose. The same number, rounded; other text is left as it is. A figure of
46
+ * several amounts shows each one, "C$2.9B + C$562M", so it matches the sum the most-money list ranks by.
47
+ */
48
+ export function shortAmount(text) {
49
+ if (text.includes(" + "))
50
+ return text.split(" + ").map((part) => shortAmount(part)).join(" + ");
51
+ const m = AMOUNT.exec(text);
52
+ const value = amountValue(text);
53
+ if (m === null || value === null || value < 1e6)
54
+ return oneLine(text);
55
+ const sign = m[1] === undefined ? "" : m[1].toUpperCase() === "US$" ? "US$" : m[1];
56
+ return `${sign}${shortNumber(value)}`;
57
+ }
58
+ /**
59
+ * An amount from its text, as before the API said its currency (Ben, 2026-10-22): as written, short;
60
+ * or, when Prism turned it into US dollars at the Federal Reserve's rate, the dollars first and the
61
+ * original in brackets, "US$1.2B (R$6.5B)". A word such as "over" stays with both. The rate is named
62
+ * once, after the figure's period (rateNote). The fact itself is never changed: its number stays with
63
+ * its quote. An older answer carries no currency of its own, but a rate names one: its originals are
64
+ * read in that currency, so a shared "¥" shows as "CNY" and "MXN 8,554,356 thousand" as "MXN 8.6B".
65
+ */
66
+ export function withUsd(text, usd, fx) {
67
+ const rate = convertedAt(usd, fx);
68
+ if (rate === null)
69
+ return shortAmount(text);
70
+ const amounts = text.split(" + ").map((part) => ({ text: part, parts: readAmountParts(part, rate.currency) }));
71
+ if (amounts.some((a) => a.parts === null || a.parts.currency !== rate.currency)) {
72
+ const q = leadingQualifier(text);
73
+ return `${q === "" ? "" : `${q} `}${usdShort(usd)} (${shortAmount(text)})`;
74
+ }
75
+ return figureDisplay(amounts, { usd: usd, fx: rate });
76
+ }
77
+ /** The rate an amount was converted at, when it was: its dollars and its rate both came with it. */
78
+ export const convertedAt = (usd, fx) => (fx !== null && fx !== undefined && typeof usd === "number" && Number.isFinite(usd) ? fx : null);
79
+ /** The amount ready to show, with the currency the API settled: the app has neither the report nor, for a figure, every quote. */
80
+ export function toShow(a) {
81
+ const p = readAmountParts(a.text, null);
82
+ return { text: a.text, parts: p === null ? null : { ...p, currency: a.currency ?? null }, ...(a.scaleConfirmed === false ? { scaleConfirmed: false } : {}) };
83
+ }
84
+ const conversion = (a) => (convertedAt(a.usd, a.fx) === null ? null : { usd: a.usd, fx: a.fx });
85
+ /** An amount in lists and sentences: the API's `display`, "US$2.6B (R$14.2B)", "PEN 10.9B"; from its text, as before, when the API did not say its currency. */
86
+ export function amountText(a) {
87
+ if (typeof a.display === "string")
88
+ return a.display;
89
+ return a.currency === undefined ? withUsd(a.text, a.usd, a.fx) : figureDisplay([toShow(a)], conversion(a));
90
+ }
91
+ /**
92
+ * An amount inside a name's brackets, so brackets never nest: "US$54.8B, or R$300.0B", a note after a
93
+ * comma, "¥700 million, currency not stated".
94
+ */
95
+ export function bracketedAmount(a) {
96
+ const usd = conversion(a);
97
+ if (a.currency === undefined)
98
+ return usd === null ? shortAmount(a.text) : `${usdShort(usd.usd)}, or ${shortAmount(a.text)}`;
99
+ const o = amountAndNotes(toShow(a), "short");
100
+ return [`${usd === null ? "" : `${usdShort(usd.usd)}, or `}${o.text}`, ...o.notes].join(", ");
101
+ }
102
+ /**
103
+ * An amount beside its quote, with when it was true: "US$303,154 million in fiscal 2026", "R$14,153.8
104
+ * million in 2025 (about US$2.6B at the Federal Reserve's rate of 2025-12-31)". From an older Prism, as
105
+ * the lists show it, with the rate after the period.
106
+ */
107
+ export function amountBesideQuote(a, period) {
108
+ const when = periodPhrase(period);
109
+ if (a.currency === undefined)
110
+ return `${[withUsd(a.text, a.usd, a.fx), when].filter((x) => x !== "").join(" ")}${rateClause([convertedAt(a.usd, a.fx)])}`;
111
+ const o = amountAndNotes(toShow(a), "full");
112
+ return [o.text, ...o.notes.map((n) => `(${n})`), when, aboutUsd(a.usd, a.fx)].filter((x) => x !== "").join(" ");
113
+ }
114
+ /** An amount's size, to sort by: its dollars when converted, else its number as read (as written, for an older Prism); null when it is no amount. */
115
+ export function amountSize(a) {
116
+ const usd = conversion(a);
117
+ if (usd !== null)
118
+ return usd.usd;
119
+ if (a.currency === undefined)
120
+ return amountValue(a.text);
121
+ const p = readAmountParts(a.text, null);
122
+ return p === null ? null : p.number * p.multiplier;
123
+ }
124
+ /** ", at the Federal Reserve's rate of 2025-12-31" to end a figure with, or "". */
125
+ export const rateClause = (fxs) => {
126
+ const note = rateNote(fxs);
127
+ return note === "" ? "" : `, ${note}`;
128
+ };
129
+ const lowerFirst = (s) => `${s.charAt(0).toLowerCase()}${s.slice(1)}`;
130
+ /** A period that brings its own preposition ("During 2025", "As of February 1, 2026", "prior to April, 2025"): it takes no other. */
131
+ const OWN_PREPOSITION = /^(?:as of|as at|in|on|at|during|since|through|throughout|between|from|until|till|by|before|after|prior to|over|within|for|beginning|starting|ending|effective)\b/i;
132
+ /** Common words a period may start with in capitals ("Year 2025", "Fiscal 2026"), written small after a preposition. */
133
+ const SMALL_FIRST_WORD = /^(?:fiscal|year|years|calendar|full|half|early|late|mid|end|the)\b/i;
134
+ /**
135
+ * When a figure was true, as its sheet writes it, in words that follow the figure (Ben, 2026-10-21:
136
+ * "show the year next to each figure"): "2025" reads "in 2025", "Fiscal 2026" "in fiscal 2026", "year
137
+ * ended March 31, 2026" "in the year ended March 31, 2026", a day "as of December 31, 2025". A period
138
+ * with its own preposition keeps it (2026-10-24: the light pass's "During 2023, 2024 and 2025" read
139
+ * "in During 2023, 2024 and 2025"), and "fiscal Year 2025" reads "fiscal year 2025". Empty when the
140
+ * sheet gives no period.
141
+ */
142
+ export function periodPhrase(period, preposition = "in") {
143
+ const p = oneLine(period ?? "").replace(/^(fiscal) Year\b/i, "$1 year");
144
+ if (p === "")
145
+ return "";
146
+ if (/^(?:(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Sept|Oct|Nov|Dec)[a-z]*\.? (?:\d{1,2}, )?\d{4}|\d{4}-\d{2}-\d{2})$/.test(p))
147
+ return `as of ${p}`;
148
+ if (OWN_PREPOSITION.test(p))
149
+ return lowerFirst(p);
150
+ if (/\bended\b/i.test(p) || /^(?:the )?(?:first|second|third|fourth) quarter\b/i.test(p))
151
+ return `${preposition} ${/^the\b/i.test(p) ? lowerFirst(p) : `the ${lowerFirst(p)}`}`;
152
+ return `${preposition} ${SMALL_FIRST_WORD.test(p) ? lowerFirst(p) : p}`;
153
+ }
154
+ /** A run's filters in words: "market cap US$2.0B to US$10B, from "mid-cap" in the theme · no ETFs". */
155
+ export function filtersText(f) {
156
+ const min = f.min_market_value_usd;
157
+ const max = f.max_market_value_usd;
158
+ const range = min === null && max === null ? "any market cap" : max === null ? `market cap ${usdMoney(min ?? 0)} and up` : min === null || min === 0 ? `market cap up to ${usdMoney(max)}` : `market cap ${usdMoney(min)} to ${usdMoney(max)}`;
159
+ return [`${range}${f.from_theme ? `, from "${f.from_theme}" in the theme` : ""}`, f.exclude_etfs ? "no ETFs" : "ETFs shown", ...(f.exclude_adrs ? ["no ADRs"] : [])].join(" · ");
160
+ }
161
+ /** A most-money figure as an amount from the API: its text, dollars, rate, currency and display. */
162
+ export const figureAmount = (f) => ({ text: f.text, usd: f.amount_usd ?? null, fx: f.fx ?? null, ...(f.currency !== undefined ? { currency: f.currency } : {}), ...(f.display !== undefined ? { display: f.display } : {}) });
163
+ /**
164
+ * A most-money figure as a list shows it, with when it was true (Ben, 2026-10-21) and its currency
165
+ * (2026-10-23): "US$18.9B in fiscal 2025", or Prism's estimate. In another currency, its dollars
166
+ * first: "US$1.2B (R$6.5B) in 2025, at the Federal Reserve's rate of 2025-12-31".
167
+ */
168
+ export function listFigure(row) {
169
+ const f = row.revenue_from_theme;
170
+ if (f)
171
+ return `${[amountText(figureAmount(f)), periodPhrase(f.period ?? f.quote?.period)].filter((x) => x !== "").join(" ")}${rateClause([convertedAt(f.amount_usd, f.fx)])}`;
172
+ return row.revenue_estimate_usd != null ? `about ${usdMoney(row.revenue_estimate_usd)} a year, Prism's estimate` : "amount not known";
173
+ }
174
+ /** US dollars rounded, for Prism's own reports and logs: "$49B", "$4.0B", "$500M". */
175
+ export const money = (usd) => (usd >= 1e12 ? `$${(usd / 1e12).toFixed(1)}T` : usd >= 1e9 ? `$${(usd / 1e9).toFixed(usd >= 1e10 ? 0 : 1)}B` : `$${Math.round(usd / 1e6)}M`);
176
+ /** US dollars rounded as readers see a market cap, an estimate or a filter, with the currency (Ben, 2026-10-23): "US$49B", "US$4.0B", "US$500M". */
177
+ export const usdMoney = (usd) => `US${money(usd)}`;
178
+ export const duration = (s) => (s >= 60 ? `${Math.floor(s / 60)}m ${String(s % 60).padStart(2, "0")}s` : `${s}s`);
179
+ /** One line on a running run: its step, how far the step is, the time so far and the cost so far. */
180
+ export function progressLine(progress, seconds, usd) {
181
+ const p = progress ?? {};
182
+ const count = p.of ? ` ${p.done ?? 0}/${p.of}` : "";
183
+ return `${STEPS[p.step ?? "queued"] ?? p.step}${count} · ${duration(seconds)} · $${usd.toFixed(2)}`;
184
+ }
185
+ const KEEP_UPPER = new Set(["LLC", "LP", "PLC", "NV", "SA", "AG", "SE", "ASA", "AB", "JSC", "ADR", "REIT", "US", "USA", "II", "III", "IV"]);
186
+ /** SEC names come in capitals ("CAMECO CORP"); print them in normal case, keeping short codes. */
187
+ export function displayName(name) {
188
+ if (name !== name.toUpperCase())
189
+ return name.replace(/\s*\/[A-Z]{2,3}\/?\s*$/, "");
190
+ return name
191
+ .replace(/\s*\/[A-Z]{2,3}\/?\s*$/, "")
192
+ .split(/(\s+)/)
193
+ .map((w) => {
194
+ const core = w.replace(/[^A-Z0-9&]/g, "");
195
+ if (core === "" || KEEP_UPPER.has(core) || /\d/.test(core) || (core.length <= 3 && !/[AEIOU]/.test(core)))
196
+ return w;
197
+ return w.charAt(0) + w.slice(1).toLowerCase();
198
+ })
199
+ .join("");
200
+ }
201
+ //# sourceMappingURL=answer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer.js","sourceRoot":"","sources":["../../../../../src/cli/answer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import { type Answer, type ListKey, oneLine, type Quote, type Row, shortAmount } from "../answer.js";
2
+ import { type AccountView, type PrismApi, type Profile, type RunSummary } from "./api.js";
3
+ /**
4
+ * The terminal app (docs/plans/p2-terminal-app.md; Ben, 2026-10-20). `prism start` checks the key
5
+ * first, then a theme is typed, its run followed step by step, and its four lists browsed company by
6
+ * company, each with its quotes and fact sheet. It reads and writes nothing but Prism's API, so it
7
+ * shows what Thematica gets.
8
+ */
9
+ export type Place = "cloud" | "Mac";
10
+ export interface AppProps {
11
+ /** null when the settings file holds no key. */
12
+ api: PrismApi | null;
13
+ place: Place;
14
+ settingsFile: string;
15
+ pollMs?: number;
16
+ copy?: (text: string) => Promise<void>;
17
+ /** The clock's zone times are shown in; this computer's when left out (tests set one). */
18
+ timeZone?: string;
19
+ }
20
+ export declare const keyHint: (place: Place) => "Make a key with: prism key create" | "Use prism login in the installed terminal app, or copy a Prism key from your Thematica profile.";
21
+ /** What stopped the start-up check, and what to do about it. */
22
+ export declare function blockedFor(error: unknown, place: Place, url: string): {
23
+ message: string;
24
+ hint: string;
25
+ };
26
+ export { oneLine, shortAmount };
27
+ export declare function accountLine(place: Place, account: AccountView | null): string;
28
+ export type Item = {
29
+ kind: "band";
30
+ label: string;
31
+ } | {
32
+ kind: "none";
33
+ } | {
34
+ kind: "row";
35
+ row: Row;
36
+ };
37
+ /** One list as lines: every band, with its companies in order or "none" (Ben, 2026-10-20: an empty band still shows). */
38
+ export declare function itemsOf(answer: Answer, list: ListKey): Item[];
39
+ export declare function rowText(row: Row, list: ListKey, width: number): string;
40
+ /**
41
+ * A quote as it reads on one line. A filing's table row comes as cells split by "|" or blank lines
42
+ * ("Consulting | $ | 35,106,786 | $ | 33,195,104"; Ben, 2026-10-20: "tables aren't showing up or it's
43
+ * broken"): its cells are joined by " · ", a currency sign kept with the number after it and a
44
+ * percent sign with the number before it. Prose keeps its words; its line breaks become spaces.
45
+ */
46
+ export declare function quoteText(raw: string | null): string;
47
+ /**
48
+ * Where a quote comes from, in plain words (Ben, 2026-10-20: "what's revenue note, item 4?"), and when
49
+ * its figure was true (2026-10-21): "Annual report (20-F) · Notes on revenue · for fiscal 2026 · filed
50
+ * 2026-06-15".
51
+ */
52
+ export declare function sourceText(q: Quote): string;
53
+ /** A page line; a section's name shows in reverse video, dark on light (Ben, 2026-10-21: "a stronger indicator"). */
54
+ export interface Line {
55
+ text: string;
56
+ style?: "bold" | "dim" | "header" | "section";
57
+ }
58
+ /** A fact's detail without the writer's notes on the table it was read from: "" when nothing else is left. */
59
+ export declare function writerNotesOut(detail: string): string;
60
+ /** A company's ticker and name, so its own chief executive is told from a subsidiary's. */
61
+ export interface CompanyOf {
62
+ ticker: string;
63
+ name: string;
64
+ }
65
+ /**
66
+ * The business in sentences, built from the fact sheet's fields, one kind of fact per sentence and
67
+ * no kind named (Ben, 2026-10-20: "just show the fact"). Every number is a quoted one, written
68
+ * short with its currency (Ben, 2026-10-23: "US$303.2B in lists"); `f` shows each fact with its
69
+ * quote. An amount in another currency reads in US dollars with the original in brackets, and the
70
+ * sentence names the Federal Reserve's rate once (Ben, 2026-10-22).
71
+ *
72
+ * Since 2026-10-24 (the terminal test of 2026-10-23): every sentence carries its fact's amount or share
73
+ * ("Market share for us was 10.3% in 2025", not the detail alone); a detail's notes on the filing's
74
+ * table ("in RMB thousands") are left out; and the light pass's kinds read as facts, not bare details:
75
+ * one sentence names the executives with their ages and roles, the chief executive first and the same
76
+ * person once, another the largest owners with their shares, and short sentences tell how the company
77
+ * charges, what it is developing and its setbacks with their amounts, a few of each, the rest counted
78
+ * at the end. `company` tells the company's own chief executive from a subsidiary's.
79
+ */
80
+ export declare function businessSentences(facts: Profile["facts"], company?: CompanyOf): string[];
81
+ /** The company's place on each list it is on: the list, its tier, and why, the most-money row with its revenue. */
82
+ export declare function callRows(answer: Answer, ticker: string, profile: Profile | null): Array<{
83
+ report: string;
84
+ tier: string;
85
+ why: string;
86
+ }>;
87
+ /** Where a fact sheet comes from: "From its annual report (20-F), filed 2026-02-27: 6 facts." */
88
+ export declare function sheetSource(profile: Profile): string;
89
+ /** Why a company shows no business: its sheet is older than the rule allows, or it has none. */
90
+ export declare const noSheetText: (factSheetAsOf: string | null) => string;
91
+ /**
92
+ * Every fact kind by kind, as `f` shows them: a sentence of its name, its figure with when it was true
93
+ * and its detail, the last of them after a dot ("Peru · PEN 10,876,215,000 in 2025"), the detail less
94
+ * the writer's notes on the table (since 2026-10-24); its quote; and where the quote comes from.
95
+ */
96
+ export declare function everyFact(facts: Profile["facts"]): Array<{
97
+ sentence: string;
98
+ quote: string;
99
+ source: string;
100
+ }>;
101
+ /**
102
+ * A company's page (Ben, 2026-10-20): its name and size, then three sections. The call: a table of
103
+ * each list it is on, its tier and why. The proof: a table of the quotes behind it and where each
104
+ * comes from. The business: what its fact sheet says, in sentences. With `all`, every fact with its
105
+ * quote instead of the business sentences. At most 100 characters wide; under 80, each table row
106
+ * stacks, so a small window cuts nothing. Every value carries its name, as "Market cap: US$49B" (Ben,
107
+ * 2026-10-21; its currency since 2026-10-23), and a stacked row names what its table's header would.
108
+ */
109
+ export declare function companyView(answer: Answer, row: Row, profile: Profile | null, error: string | undefined, screenWidth: number, all?: boolean): Line[];
110
+ /**
111
+ * A time on this computer's clock, with its zone (the terminal test of 2026-10-23: past runs read
112
+ * "15:03", UTC, for 11:03 in New York): "2026-10-23 18:53 EDT". `timeZone` is for tests.
113
+ */
114
+ export declare function localTime(iso: string, timeZone?: string): string;
115
+ /** A past run's line: when it started, on this computer's clock; its state, cost and theme. */
116
+ export declare const pastRunText: (r: RunSummary, width: number, timeZone?: string) => string;
117
+ /**
118
+ * The company page's last line: its keys, then "32 of 56 lines". The count always shows: in a narrow
119
+ * window the keys are said shorter first, then left out (the terminal test of 2026-10-23: at 70
120
+ * columns the count was cut off).
121
+ */
122
+ export declare function companyFooter(all: boolean, shownTo: number, total: number, width: number): string;
123
+ /** The second step's grey text, Ben's words (2026-10-24): what elaborating means, then an example. */
124
+ export declare const ELABORATE_GUIDE = "e.g. Why you believe it, which kinds of companies you want, sizes or regions, what to leave out, or whether you think a popular fear is wrong.";
125
+ export declare const ELABORATE_EXAMPLE = "e.g. The market fears AI will cut software seats, but companies are buying more. I want mid-cap software names, $2B to $10B.";
126
+ export declare function App({ api, place, settingsFile, pollMs, copy, timeZone }: AppProps): import("react/jsx-runtime").JSX.Element;
127
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/app/App.tsx"],"names":[],"mappings":"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"}