@flamingo-stack/openframe-frontend-core 0.0.723 → 0.0.724
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-WSMOTZRJ.cjs → chunk-2A4AGW7Z.cjs} +11 -11
- package/dist/{chunk-F6JAGSKV.js → chunk-2HLGX6JF.js} +5 -5
- package/dist/{chunk-Y5H3M7OM.cjs → chunk-3MMKIVWZ.cjs} +23 -23
- package/dist/{chunk-OWRD2GZU.cjs → chunk-3NVSC3BU.cjs} +687 -611
- package/dist/{chunk-N4VCU6XP.js → chunk-4N5DLIEC.js} +1 -1
- package/dist/{chunk-OHC2MPUO.cjs → chunk-5CJGNPTT.cjs} +35 -35
- package/dist/{chunk-OVG6MV3X.js → chunk-6BKDXUOQ.js} +6 -6
- package/dist/{chunk-VIFVSFYY.js → chunk-6QO6BIX7.js} +1 -1
- package/dist/{chunk-FDWYBJYD.cjs → chunk-7AXOAA5T.cjs} +3 -3
- package/dist/{chunk-YUSA7IPD.js → chunk-7CNGNPBI.js} +3 -3
- package/dist/{chunk-VGXAZEQP.cjs → chunk-A4WHVIYZ.cjs} +17 -17
- package/dist/{chunk-KSZRALRL.cjs → chunk-BIWG3CYN.cjs} +3 -3
- package/dist/{chunk-WVA7SCLY.js → chunk-BWMEQ7IZ.js} +1 -1
- package/dist/{chunk-PKS2QQJU.js → chunk-CJENFR5T.js} +2 -1
- package/dist/{chunk-JENNI7XU.cjs → chunk-DGNGABNG.cjs} +5 -4
- package/dist/{chunk-KY4WQYYG.cjs → chunk-FR4MFSH5.cjs} +19 -19
- package/dist/{chunk-MWLVYYRX.cjs → chunk-GRB5HVEV.cjs} +2580 -2120
- package/dist/{chunk-3RIKO2O2.cjs → chunk-IPUDFAU5.cjs} +31 -31
- package/dist/{chunk-A7JPMNHF.js → chunk-IUQKIU5A.js} +6 -6
- package/dist/{chunk-LV6UJD2K.cjs → chunk-JKWQWHNV.cjs} +6 -1
- package/dist/{chunk-NESUUHPV.cjs → chunk-JQ7A7PO5.cjs} +76 -76
- package/dist/{chunk-XTG7W75B.js → chunk-KKO4GRM3.js} +4 -4
- package/dist/{chunk-YQOJOW2Z.cjs → chunk-L5CAET76.cjs} +64 -64
- package/dist/{chunk-WY4SLTMZ.js → chunk-MRBPJ4NB.js} +1 -1
- package/dist/{chunk-JL7AHSFE.js → chunk-MU5F5QXJ.js} +6 -6
- package/dist/{chunk-2VOPQJNR.js → chunk-N2PX26BZ.js} +2 -2
- package/dist/{chunk-NFABAOMD.cjs → chunk-N4NGKXUU.cjs} +15 -15
- package/dist/{chunk-SBCJFJ6Q.js → chunk-NLZZUWR6.js} +4 -4
- package/dist/{chunk-7JXCLUU7.js → chunk-OFOBVPDV.js} +2 -2
- package/dist/{chunk-GRDJR2Q7.js → chunk-OWFDXYEO.js} +1 -1
- package/dist/{chunk-QBXEF7D5.js → chunk-PF4WAKCS.js} +4 -4
- package/dist/{chunk-KSADTFNZ.cjs → chunk-QJ67GFF3.cjs} +32 -32
- package/dist/{chunk-G6YNPBWV.js → chunk-QN3OXRTM.js} +3045 -2585
- package/dist/{chunk-P7MDECYI.cjs → chunk-QUI7DKBW.cjs} +41 -41
- package/dist/{chunk-IIBTYCEN.js → chunk-S4SVKXHN.js} +88 -12
- package/dist/{chunk-2MC4DRSC.cjs → chunk-SOTXV3T5.cjs} +3 -3
- package/dist/{chunk-TDSLKKX7.cjs → chunk-SVDXNMBL.cjs} +16 -16
- package/dist/{chunk-UYMTAFHG.js → chunk-VLPGV5WH.js} +1 -1
- package/dist/{chunk-YGIUWQEN.js → chunk-XDTD6YGG.js} +7 -7
- package/dist/{chunk-GYUFKNOQ.cjs → chunk-YKV45BSJ.cjs} +4 -4
- package/dist/{chunk-6QTGLBJH.cjs → chunk-ZKL52ALL.cjs} +3 -3
- package/dist/{chunk-EWED6ISQ.js → chunk-ZQKN2Z6W.js} +5 -0
- package/dist/{cloud-tenants-N6KV2T7X.js → cloud-tenants-5MINXS5J.js} +6 -6
- package/dist/{cloud-tenants-3TVX7U23.cjs → cloud-tenants-UMZJZTMB.cjs} +7 -7
- package/dist/components/case-studies/index.cjs +20 -20
- package/dist/components/case-studies/index.js +7 -7
- package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +5 -5
- package/dist/components/chat/index.js +4 -4
- package/dist/components/chat/utils/icon-library.d.ts +2 -0
- package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +8 -8
- package/dist/components/contact/index.js +7 -7
- package/dist/components/docs/index.cjs +11 -11
- package/dist/components/docs/index.js +10 -10
- package/dist/components/embeds/index.cjs +8 -8
- package/dist/components/embeds/index.js +7 -7
- package/dist/components/faq/index.cjs +8 -8
- package/dist/components/faq/index.js +7 -7
- package/dist/components/features/index.cjs +23 -7
- package/dist/components/features/index.d.ts +1 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +22 -6
- package/dist/components/features/model-token-rates.d.ts +179 -0
- package/dist/components/features/model-token-rates.d.ts.map +1 -0
- package/dist/components/help-center-pages/index.cjs +106 -106
- package/dist/components/help-center-pages/index.js +18 -18
- package/dist/components/index.cjs +71 -55
- package/dist/components/index.js +34 -18
- package/dist/components/meeting-scheduler/index.cjs +32 -32
- package/dist/components/meeting-scheduler/index.js +6 -6
- package/dist/components/navigation/index.cjs +10 -10
- package/dist/components/navigation/index.js +9 -9
- package/dist/components/onboarding-guides/index.cjs +10 -10
- package/dist/components/onboarding-guides/index.js +9 -9
- package/dist/components/product-demo/index.cjs +7 -7
- package/dist/components/product-demo/index.js +7 -7
- package/dist/components/related-content/index.cjs +4 -4
- package/dist/components/related-content/index.js +3 -3
- package/dist/components/tickets/index.cjs +11 -11
- package/dist/components/tickets/index.js +10 -10
- package/dist/components/ui/index.cjs +7 -7
- package/dist/components/ui/index.js +6 -6
- package/dist/{devices-275UZZUS.js → devices-FSSUAUQN.js} +6 -6
- package/dist/{devices-MAALZ7DX.cjs → devices-HOT7YSDN.cjs} +8 -8
- package/dist/index.cjs +45 -11
- package/dist/index.js +44 -10
- package/dist/{knowledge-YMMULPPK.cjs → knowledge-3N6HCFLU.cjs} +8 -8
- package/dist/{knowledge-THXC2KC3.js → knowledge-7HRUJX26.js} +6 -6
- package/dist/{logs-IBUKQOHS.cjs → logs-75M5YP6V.cjs} +15 -15
- package/dist/{logs-GM2XBHYT.js → logs-T25OE2QW.js} +6 -6
- package/dist/{policies-NKMRK6RR.js → policies-4OK4XTD4.js} +6 -6
- package/dist/{policies-J5GJXD6G.cjs → policies-BTG7UJJC.cjs} +11 -11
- package/dist/{remote-session-Z2YCUPHU.cjs → remote-session-4DTOM3QD.cjs} +5 -5
- package/dist/{remote-session-WCLR47RN.js → remote-session-AZJXG7ZF.js} +3 -3
- package/dist/{software-update-EKKMKDWI.js → software-update-5SOV4FIR.js} +6 -6
- package/dist/{software-update-JHC4T4SE.cjs → software-update-OZURO4VK.cjs} +11 -11
- package/dist/utils/ai-providers.d.ts +29 -0
- package/dist/utils/ai-providers.d.ts.map +1 -0
- package/dist/utils/index.cjs +76 -2
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +68 -3
- package/dist/utils/list-url.d.ts.map +1 -1
- package/dist/utils/model-token-rates.d.ts +55 -0
- package/dist/utils/model-token-rates.d.ts.map +1 -0
- package/dist/utils/source-icons.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/chat/entity-cards/dispatch.tsx +3 -0
- package/src/components/chat/utils/icon-library.tsx +6 -0
- package/src/components/features/index.ts +1 -0
- package/src/components/features/model-token-rates.tsx +696 -0
- package/src/utils/ai-providers.ts +46 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/list-url.ts +1 -0
- package/src/utils/model-token-rates.ts +103 -0
- package/src/utils/source-icons.ts +3 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type ModelTokenRate, type TokenPrice } from '../../utils/model-token-rates';
|
|
3
|
+
/**
|
|
4
|
+
* The per-model AI token exchange rates, in the two places they are shown:
|
|
5
|
+
*
|
|
6
|
+
* - `ModelTokenRates` (+ `ModelTokenRatesPopover`): a small table behind a
|
|
7
|
+
* question mark, for the product's cards that count in tokens.
|
|
8
|
+
* - `ModelTokenExchange`: the whole idea as three steps with a figure each
|
|
9
|
+
* (buy OpenFrame tokens, use a frontier model, its tokens are charged at an
|
|
10
|
+
* exchange rate). For a page (the website's pricing page).
|
|
11
|
+
*
|
|
12
|
+
* Both state a rate with the same functions (`utils/model-token-rates`,
|
|
13
|
+
* server-safe), so a rate reads the same wherever it is stated. Neither
|
|
14
|
+
* fetches: a host reads the rates its own way and hands them in, with `status`
|
|
15
|
+
* saying where that read stands. Each holds ONE size loading, loaded, failed or
|
|
16
|
+
* empty.
|
|
17
|
+
*
|
|
18
|
+
* A rate is the number of OpenFrame tokens ONE token of the model charges to
|
|
19
|
+
* the balance.
|
|
20
|
+
*/
|
|
21
|
+
/** Where the host's read of the rates stands. */
|
|
22
|
+
export type ModelTokenRatesStatus = 'loading' | 'error' | 'ready';
|
|
23
|
+
/** The wording of both views, stated once. */
|
|
24
|
+
export declare const MODEL_TOKEN_RATES_COPY: {
|
|
25
|
+
readonly trigger: "Per-model token rates";
|
|
26
|
+
readonly unit: "OpenFrame tokens used per model token";
|
|
27
|
+
readonly model: "Model";
|
|
28
|
+
readonly input: "Input";
|
|
29
|
+
readonly output: "Output";
|
|
30
|
+
/** The exchange: three steps, each with its own figure. */
|
|
31
|
+
readonly exchange: {
|
|
32
|
+
readonly buy: {
|
|
33
|
+
readonly title: "You buy OpenFrame tokens";
|
|
34
|
+
/** Under the price: "buys 1M OpenFrame tokens" */
|
|
35
|
+
readonly words: (tokens: string) => string;
|
|
36
|
+
/** Under the tokens, where no price is known. */
|
|
37
|
+
readonly unit: "OpenFrame tokens";
|
|
38
|
+
/** The amount, where no price is known: "1M OpenFrame tokens" */
|
|
39
|
+
readonly tokens: (tokens: string) => string;
|
|
40
|
+
/** The slider's label. */
|
|
41
|
+
readonly amount: "How many tokens";
|
|
42
|
+
/** Over the one-tap amounts. */
|
|
43
|
+
readonly presets: "Included in your plan";
|
|
44
|
+
/** A one-tap amount: "10M every month" */
|
|
45
|
+
readonly preset: (tokens: string, label: string) => string;
|
|
46
|
+
};
|
|
47
|
+
readonly use: {
|
|
48
|
+
readonly title: "You use a frontier AI model";
|
|
49
|
+
readonly model: "Model";
|
|
50
|
+
readonly search: "Search models";
|
|
51
|
+
readonly noMatch: "No model matches";
|
|
52
|
+
};
|
|
53
|
+
readonly charge: {
|
|
54
|
+
readonly title: "Its tokens are charged at an exchange rate";
|
|
55
|
+
/** Over the two rates: the unit, said once. */
|
|
56
|
+
readonly unit: "OpenFrame tokens charged";
|
|
57
|
+
readonly input: "per token read";
|
|
58
|
+
readonly output: "per token written";
|
|
59
|
+
/** Over the answer: "So $10.00 on Claude Opus 5.5 buys" */
|
|
60
|
+
readonly so: (balance: string, model: string) => string;
|
|
61
|
+
/** Beside the answer's number: "750K tokens read" */
|
|
62
|
+
readonly read: "tokens read";
|
|
63
|
+
/** Under it: "or 150K tokens written" */
|
|
64
|
+
readonly orWritten: (output: string) => string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
readonly autoTopUp: {
|
|
68
|
+
readonly on: "Auto Top Up Enabled";
|
|
69
|
+
readonly off: "Auto Top Up Disabled";
|
|
70
|
+
};
|
|
71
|
+
readonly unavailable: {
|
|
72
|
+
readonly title: "Rates unavailable";
|
|
73
|
+
readonly body: "We couldn't load the per-model token rates. They're a reference only: your plan and its price are unaffected.";
|
|
74
|
+
};
|
|
75
|
+
readonly empty: "No token rates are in effect right now.";
|
|
76
|
+
};
|
|
77
|
+
export interface ModelTokenRatesProps {
|
|
78
|
+
/** The rates, once read. */
|
|
79
|
+
rates?: readonly ModelTokenRate[];
|
|
80
|
+
/** Where the read stands. Default `ready`. */
|
|
81
|
+
status?: ModelTokenRatesStatus;
|
|
82
|
+
/**
|
|
83
|
+
* Whether the balance these rates draw on refills itself: the panel's first
|
|
84
|
+
* line on a billing page. Left out where there is no balance to have that state.
|
|
85
|
+
*/
|
|
86
|
+
autoTopUpEnabled?: boolean;
|
|
87
|
+
className?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The table in its frame, at ONE height in every state. The frame and the auto
|
|
91
|
+
* top-up line stay put while the rates load or fail to: that line is a fact
|
|
92
|
+
* about the subscription, not about the rates.
|
|
93
|
+
*/
|
|
94
|
+
export declare function ModelTokenRates({ rates, status, autoTopUpEnabled, className }: ModelTokenRatesProps): import("react").JSX.Element;
|
|
95
|
+
/**
|
|
96
|
+
* The question-mark button that opens the rates, for every card that counts in
|
|
97
|
+
* tokens. One trigger, so two cards cannot open two different panels. The panel
|
|
98
|
+
* is rendered only while open, so a host that reads the rates lazily (`children`)
|
|
99
|
+
* reads them on open.
|
|
100
|
+
*/
|
|
101
|
+
export declare function ModelTokenRatesPopover({ children, triggerClassName, ...panel }: ModelTokenRatesProps & {
|
|
102
|
+
/** The panel, when the host renders it itself (a lazy read behind its own boundaries). Default: `ModelTokenRates` with these props. */
|
|
103
|
+
children?: ReactNode;
|
|
104
|
+
triggerClassName?: string;
|
|
105
|
+
}): import("react").JSX.Element;
|
|
106
|
+
/** Why the rates are missing, in the box the rates would fill. Shown on a deliberate click or in a page's reserved space, so it never renders empty. */
|
|
107
|
+
export declare function ModelTokenRatesUnavailable({ className }: {
|
|
108
|
+
className?: string;
|
|
109
|
+
}): import("react").JSX.Element;
|
|
110
|
+
/** The table's loading footprint: the provider tabs, the header and rows of the boxes the loaded rows use. */
|
|
111
|
+
export declare function ModelTokenRatesSkeleton(): import("react").JSX.Element;
|
|
112
|
+
export interface ModelTokenExchangeProps {
|
|
113
|
+
/** The model whose rate is shown: the one picked, once the host has read it. */
|
|
114
|
+
rate?: ModelTokenRate | null;
|
|
115
|
+
/** Where the host's read of that model stands. Default `ready`. */
|
|
116
|
+
status?: ModelTokenRatesStatus;
|
|
117
|
+
/** The providers to choose between (their keys), in the host's order. */
|
|
118
|
+
providers?: readonly string[];
|
|
119
|
+
/** The provider chosen, and the host's handler for a change (it searches that provider's models). */
|
|
120
|
+
provider?: string | null;
|
|
121
|
+
onProviderChange?: (providerType: string) => void;
|
|
122
|
+
/**
|
|
123
|
+
* The picker's options: what the HOST's search answered for `query` within
|
|
124
|
+
* `provider`. The picker never filters them itself: searching is the host's
|
|
125
|
+
* server's job.
|
|
126
|
+
*/
|
|
127
|
+
models?: readonly ModelTokenRate[];
|
|
128
|
+
/** What is typed in the picker, and the host's handler for it (it searches). */
|
|
129
|
+
query?: string;
|
|
130
|
+
onQueryChange?: (query: string) => void;
|
|
131
|
+
/** The host's search is in flight. */
|
|
132
|
+
searching?: boolean;
|
|
133
|
+
/** A model was picked: its `modelName`. */
|
|
134
|
+
onPick?: (modelName: string) => void;
|
|
135
|
+
/** What OpenFrame tokens cost. Given: step 1 states the price of the amount chosen. Not given: the tokens alone. */
|
|
136
|
+
tokenPrice?: TokenPrice | null;
|
|
137
|
+
/** The amount step 1 opens on, in OpenFrame tokens. Default: the amount `tokenPrice` is quoted for, else one million. */
|
|
138
|
+
defaultAmount?: number;
|
|
139
|
+
/** The slider's bounds and step, in OpenFrame tokens. Default one to fifty million, a million at a time. */
|
|
140
|
+
amountRange?: {
|
|
141
|
+
min: number;
|
|
142
|
+
max: number;
|
|
143
|
+
step: number;
|
|
144
|
+
};
|
|
145
|
+
/** Amounts offered as one-tap choices under the slider (what a plan includes): the tokens and what to call them. */
|
|
146
|
+
presets?: readonly {
|
|
147
|
+
tokens: number;
|
|
148
|
+
label: string;
|
|
149
|
+
}[];
|
|
150
|
+
className?: string;
|
|
151
|
+
}
|
|
152
|
+
/** The amount step 1 opens on when the host names none, and the slider's default bounds. */
|
|
153
|
+
export declare const MODEL_TOKEN_EXCHANGE_BALANCE = 1000000;
|
|
154
|
+
export declare const MODEL_TOKEN_EXCHANGE_RANGE: {
|
|
155
|
+
readonly min: 1000000;
|
|
156
|
+
readonly max: 50000000;
|
|
157
|
+
readonly step: 1000000;
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* How AI tokens are paid for, as three steps read left to right, each with its
|
|
161
|
+
* own figure, so the whole idea is on screen at once:
|
|
162
|
+
*
|
|
163
|
+
* 1. You buy OpenFrame tokens "$10.00 buys 1M OpenFrame tokens"
|
|
164
|
+
* 2. You use a frontier AI model provider buttons, then the model
|
|
165
|
+
* 3. Its tokens are charged at an exchange rate
|
|
166
|
+
* "1.33× per token it reads, 6.67× per token it
|
|
167
|
+
* writes", then what the step 1 balance buys
|
|
168
|
+
*
|
|
169
|
+
* Step 2 is where the visitor acts: the lib's `PushButtonSelector` picks the
|
|
170
|
+
* provider and the lib's `Autocomplete` (the provider's mark on every option)
|
|
171
|
+
* finds a model of it. The picker SEARCHES ON THE SERVER: the host hands in
|
|
172
|
+
* `models` (what its search answered for `query` within `provider`) and the
|
|
173
|
+
* picker shows exactly those, never a filter of its own.
|
|
174
|
+
*
|
|
175
|
+
* One size in every state: each figure and its words are the same boxes loading
|
|
176
|
+
* (bars of their own line height), loaded, failed and empty.
|
|
177
|
+
*/
|
|
178
|
+
export declare function ModelTokenExchange({ rate, status, providers, provider, onProviderChange, models, query, onQueryChange, searching, onPick, tokenPrice, defaultAmount, amountRange, presets, className, }: ModelTokenExchangeProps): import("react").JSX.Element;
|
|
179
|
+
//# sourceMappingURL=model-token-rates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-token-rates.d.ts","sourceRoot":"","sources":["../../../src/components/features/model-token-rates.tsx"],"names":[],"mappings":"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"}
|