@hanzo/ui 5.3.36 → 5.3.39
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/assets/crypto.d.ts.map +1 -1
- package/dist/assets/file.d.ts.map +1 -1
- package/dist/assets/general.d.ts.map +1 -1
- package/dist/assets/hanzo-logo.d.ts.map +1 -1
- package/dist/assets/llm-provider.d.ts.map +1 -1
- package/dist/components/cal-embed.d.ts.map +1 -1
- package/dist/frameworks/react/hooks/index.d.ts.map +1 -1
- package/dist/frameworks/react-native/utils.d.ts.map +1 -1
- package/dist/frameworks/svelte/utils.d.ts.map +1 -1
- package/dist/frameworks/vue/utils.d.ts.map +1 -1
- package/dist/helpers/file.d.ts.map +1 -1
- package/dist/helpers/memoization.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/models/index.js +35 -0
- package/dist/models/index.mjs +35 -0
- package/dist/navigation/index.js +2 -1
- package/dist/navigation/index.mjs +2 -1
- package/dist/primitives/alert.d.ts +1 -1
- package/dist/primitives/cal-embed.d.ts.map +1 -1
- package/dist/primitives/chart.d.ts.map +1 -1
- package/dist/primitives/chat/chat-input.d.ts.map +1 -1
- package/dist/primitives/combobox.d.ts.map +1 -1
- package/dist/primitives/command.d.ts.map +1 -1
- package/dist/primitives/copy-to-clipboard-icon.d.ts.map +1 -1
- package/dist/primitives/dots-loader.d.ts.map +1 -1
- package/dist/primitives/error-message.d.ts.map +1 -1
- package/dist/primitives/file-uploader.d.ts.map +1 -1
- package/dist/primitives/form.d.ts.map +1 -1
- package/dist/primitives/input-otp.d.ts.map +1 -1
- package/dist/primitives/markdown-preview.d.ts.map +1 -1
- package/dist/primitives/pretty-json-print.d.ts.map +1 -1
- package/dist/primitives/resizable.d.ts +4 -20
- package/dist/primitives/resizable.d.ts.map +1 -1
- package/dist/primitives/resizable.js +4 -4
- package/dist/primitives/sonner.d.ts.map +1 -1
- package/dist/primitives/text-link.d.ts.map +1 -1
- package/dist/primitives/textfield.d.ts.map +1 -1
- package/dist/primitives/toast.d.ts.map +1 -1
- package/dist/resizable.js +1 -1
- package/dist/resizable.mjs +1 -1
- package/dist/src/billing/components/account-members.d.ts +10 -0
- package/dist/src/billing/components/account-members.d.ts.map +1 -0
- package/dist/src/billing/components/account-members.js +63 -0
- package/dist/src/billing/components/account-switcher.d.ts +9 -0
- package/dist/src/billing/components/account-switcher.d.ts.map +1 -0
- package/dist/src/billing/components/account-switcher.js +52 -0
- package/dist/src/billing/components/animated-card.d.ts +9 -0
- package/dist/src/billing/components/animated-card.d.ts.map +1 -0
- package/dist/src/billing/components/animated-card.js +161 -0
- package/dist/src/billing/components/billing-settings.d.ts +26 -0
- package/dist/src/billing/components/billing-settings.d.ts.map +1 -0
- package/dist/src/billing/components/billing-settings.js +23 -0
- package/dist/src/billing/components/business-profile-panel.d.ts.map +1 -1
- package/dist/src/billing/components/business-profile-panel.js +9 -8
- package/dist/src/billing/components/card-form.d.ts +18 -0
- package/dist/src/billing/components/card-form.d.ts.map +1 -0
- package/dist/src/billing/components/card-form.js +139 -0
- package/dist/src/billing/components/cost-explorer.d.ts +7 -0
- package/dist/src/billing/components/cost-explorer.d.ts.map +1 -0
- package/dist/src/billing/components/cost-explorer.js +73 -0
- package/dist/src/billing/components/credits-panel.d.ts +8 -0
- package/dist/src/billing/components/credits-panel.d.ts.map +1 -0
- package/dist/src/billing/components/credits-panel.js +58 -0
- package/dist/src/billing/components/guided-setup.d.ts +13 -0
- package/dist/src/billing/components/guided-setup.d.ts.map +1 -0
- package/dist/src/billing/components/guided-setup.js +44 -0
- package/dist/src/billing/components/index.d.ts +34 -0
- package/dist/src/billing/components/index.d.ts.map +1 -1
- package/dist/src/billing/components/index.js +17 -0
- package/dist/src/billing/components/invoice-manager.js +13 -13
- package/dist/src/billing/components/invoices-payments.d.ts +7 -0
- package/dist/src/billing/components/invoices-payments.d.ts.map +1 -0
- package/dist/src/billing/components/invoices-payments.js +44 -0
- package/dist/src/billing/components/overview-dashboard.d.ts +31 -0
- package/dist/src/billing/components/overview-dashboard.d.ts.map +1 -0
- package/dist/src/billing/components/overview-dashboard.js +105 -0
- package/dist/src/billing/components/payment-manager.d.ts.map +1 -1
- package/dist/src/billing/components/payment-manager.js +267 -83
- package/dist/src/billing/components/promotions-panel.d.ts +7 -0
- package/dist/src/billing/components/promotions-panel.d.ts.map +1 -0
- package/dist/src/billing/components/promotions-panel.js +48 -0
- package/dist/src/billing/components/spend-alerts.d.ts +9 -0
- package/dist/src/billing/components/spend-alerts.d.ts.map +1 -0
- package/dist/src/billing/components/spend-alerts.js +99 -0
- package/dist/src/billing/components/square-card-form.d.ts +32 -0
- package/dist/src/billing/components/square-card-form.d.ts.map +1 -0
- package/dist/src/billing/components/square-card-form.js +179 -0
- package/dist/src/billing/components/status-bar.d.ts +12 -0
- package/dist/src/billing/components/status-bar.d.ts.map +1 -0
- package/dist/src/billing/components/status-bar.js +32 -0
- package/dist/src/billing/components/subscription-portal.d.ts +2 -1
- package/dist/src/billing/components/subscription-portal.d.ts.map +1 -1
- package/dist/src/billing/components/subscription-portal.js +123 -26
- package/dist/src/billing/components/support-tiers-panel.d.ts +6 -0
- package/dist/src/billing/components/support-tiers-panel.d.ts.map +1 -0
- package/dist/src/billing/components/support-tiers-panel.js +90 -0
- package/dist/src/billing/components/tax-compliance-panel.js +5 -5
- package/dist/src/billing/components/transactions-panel.d.ts +8 -0
- package/dist/src/billing/components/transactions-panel.d.ts.map +1 -0
- package/dist/src/billing/components/transactions-panel.js +64 -0
- package/dist/src/billing/components/usage-panel.d.ts +7 -0
- package/dist/src/billing/components/usage-panel.d.ts.map +1 -0
- package/dist/src/billing/components/usage-panel.js +64 -0
- package/dist/src/billing/types/index.d.ts +136 -1
- package/dist/src/billing/types/index.d.ts.map +1 -1
- package/dist/src/form/form.d.ts.map +1 -1
- package/dist/src/hooks/use-copy-clipboard.d.ts.map +1 -1
- package/dist/src/hooks/use-fill-ids.d.ts.map +1 -1
- package/dist/src/hooks/use-scroll-restoration.d.ts.map +1 -1
- package/dist/src/models/ModelCard.d.ts +25 -0
- package/dist/src/models/ModelCard.d.ts.map +1 -0
- package/dist/src/models/ModelCard.js +73 -0
- package/dist/src/models/ModelLibrary.d.ts +41 -0
- package/dist/src/models/ModelLibrary.d.ts.map +1 -0
- package/dist/src/models/ModelLibrary.js +63 -0
- package/dist/src/models/ModelTable.d.ts +17 -0
- package/dist/src/models/ModelTable.d.ts.map +1 -0
- package/dist/src/models/ModelTable.js +35 -0
- package/dist/src/models/ZenEnso.d.ts +17 -0
- package/dist/src/models/ZenEnso.d.ts.map +1 -0
- package/dist/src/models/ZenEnso.js +50 -0
- package/dist/src/models/index.d.ts +23 -0
- package/dist/src/models/index.d.ts.map +1 -0
- package/dist/src/models/index.js +18 -0
- package/dist/src/models/types.d.ts +40 -0
- package/dist/src/models/types.d.ts.map +1 -0
- package/dist/src/models/types.js +7 -0
- package/dist/src/navigation/hanzo-shell/AppSwitcher.d.ts +8 -0
- package/dist/src/navigation/hanzo-shell/AppSwitcher.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/AppSwitcher.js +19 -0
- package/dist/src/navigation/hanzo-shell/BeamAvatar.d.ts +9 -0
- package/dist/src/navigation/hanzo-shell/BeamAvatar.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/BeamAvatar.js +38 -0
- package/dist/src/navigation/hanzo-shell/HanzoCommandPalette.d.ts +28 -0
- package/dist/src/navigation/hanzo-shell/HanzoCommandPalette.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/HanzoCommandPalette.js +124 -0
- package/dist/src/navigation/hanzo-shell/HanzoHeader.d.ts +37 -0
- package/dist/src/navigation/hanzo-shell/HanzoHeader.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/HanzoHeader.js +43 -0
- package/dist/src/navigation/hanzo-shell/HanzoMark.d.ts +17 -0
- package/dist/src/navigation/hanzo-shell/HanzoMark.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/HanzoMark.js +57 -0
- package/dist/src/navigation/hanzo-shell/UserAvatar.d.ts +15 -0
- package/dist/src/navigation/hanzo-shell/UserAvatar.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/UserAvatar.js +44 -0
- package/dist/src/navigation/hanzo-shell/UserOrgDropdown.d.ts +11 -0
- package/dist/src/navigation/hanzo-shell/UserOrgDropdown.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/UserOrgDropdown.js +26 -0
- package/dist/src/navigation/hanzo-shell/index.d.ts +14 -0
- package/dist/src/navigation/hanzo-shell/index.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/index.js +9 -0
- package/dist/src/navigation/hanzo-shell/types.d.ts +49 -0
- package/dist/src/navigation/hanzo-shell/types.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/types.js +32 -0
- package/dist/src/navigation/hanzo-shell/useHanzoAuth.d.ts +16 -0
- package/dist/src/navigation/hanzo-shell/useHanzoAuth.d.ts.map +1 -0
- package/dist/src/navigation/hanzo-shell/useHanzoAuth.js +93 -0
- package/dist/src/navigation/index.d.ts +2 -0
- package/dist/src/navigation/index.d.ts.map +1 -1
- package/dist/src/navigation/index.js +2 -0
- package/dist/src/ui/banner.d.ts +1 -1
- package/dist/util/blob.d.ts.map +1 -1
- package/dist/util/blob.js +1 -1
- package/dist/util/date.d.ts.map +1 -1
- package/dist/util/debounce.d.ts.map +1 -1
- package/dist/util/file.d.ts.map +1 -1
- package/dist/util/format-and-abbreviate-as-currency.d.ts +7 -1
- package/dist/util/format-and-abbreviate-as-currency.d.ts.map +1 -1
- package/dist/util/format-text.d.ts.map +1 -1
- package/dist/util/format-to-max-char.d.ts +7 -1
- package/dist/util/format-to-max-char.d.ts.map +1 -1
- package/dist/util/index.mjs +1 -1
- package/dist/util/number-abbreviate.d.ts.map +1 -1
- package/dist/util/specifier.d.ts.map +1 -1
- package/dist/util/step-animation.d.ts.map +1 -1
- package/package.json +20 -7
- package/dist/tailwind/typo-plugin/get-plugin-styles.d.ts +0 -595
- package/dist/tailwind/typo-plugin/get-plugin-styles.d.ts.map +0 -1
- package/dist/tailwind/typo-plugin/get-plugin-styles.js +0 -661
- package/dist/tailwind/typo-plugin/index.d.ts +0 -3
- package/dist/tailwind/typo-plugin/index.d.ts.map +0 -1
- package/dist/tailwind/typo-plugin/index.js +0 -102
- package/dist/tailwind/typo-plugin/utils.d.ts +0 -6
- package/dist/tailwind/typo-plugin/utils.d.ts.map +0 -1
- package/dist/tailwind/typo-plugin/utils.js +0 -47
|
@@ -11,6 +11,14 @@ export interface SubscriptionPlan {
|
|
|
11
11
|
badge?: string;
|
|
12
12
|
priceId?: string;
|
|
13
13
|
currency?: string;
|
|
14
|
+
trialDays?: number;
|
|
15
|
+
trialCreditCents?: number;
|
|
16
|
+
/** If true, clicking this plan opens an external URL instead of subscribing */
|
|
17
|
+
contactSales?: boolean;
|
|
18
|
+
/** External URL to redirect to (for agency/enterprise contact flows) */
|
|
19
|
+
externalUrl?: string;
|
|
20
|
+
/** Annual price alternative shown on the card */
|
|
21
|
+
annualPrice?: number;
|
|
14
22
|
}
|
|
15
23
|
export interface Subscription {
|
|
16
24
|
id: string;
|
|
@@ -23,6 +31,17 @@ export interface Subscription {
|
|
|
23
31
|
cancelAt?: Date;
|
|
24
32
|
cancelAtPeriodEnd?: boolean;
|
|
25
33
|
nextPlanId?: string | null;
|
|
34
|
+
discount?: SubscriptionDiscount | null;
|
|
35
|
+
}
|
|
36
|
+
export interface SubscriptionDiscount {
|
|
37
|
+
id: string;
|
|
38
|
+
code: string | null;
|
|
39
|
+
name: string | null;
|
|
40
|
+
kind: "percent" | "amount";
|
|
41
|
+
value: number;
|
|
42
|
+
currency: string | null;
|
|
43
|
+
duration: "forever" | "once" | "repeating" | null;
|
|
44
|
+
durationInMonths: number | null;
|
|
26
45
|
}
|
|
27
46
|
export interface RetentionOffer {
|
|
28
47
|
id: string;
|
|
@@ -102,9 +121,11 @@ export interface ComplianceItem {
|
|
|
102
121
|
owner?: string;
|
|
103
122
|
actionLabel?: string;
|
|
104
123
|
}
|
|
124
|
+
export type PaymentMethodType = "card" | "paypal" | "apple_pay" | "google_pay" | "bank_account" | "sepa_debit" | "crypto" | "wire";
|
|
125
|
+
export type CryptoNetwork = "bitcoin" | "ethereum" | "solana" | "usdc";
|
|
105
126
|
export interface PaymentMethod {
|
|
106
127
|
id: string;
|
|
107
|
-
type:
|
|
128
|
+
type: PaymentMethodType;
|
|
108
129
|
is_default: boolean;
|
|
109
130
|
created_at: string;
|
|
110
131
|
isDefault?: boolean;
|
|
@@ -124,6 +145,20 @@ export interface PaymentMethod {
|
|
|
124
145
|
country?: string;
|
|
125
146
|
currency?: string;
|
|
126
147
|
};
|
|
148
|
+
crypto?: {
|
|
149
|
+
network: CryptoNetwork;
|
|
150
|
+
walletAddress: string;
|
|
151
|
+
label?: string;
|
|
152
|
+
};
|
|
153
|
+
wire?: {
|
|
154
|
+
bankName: string;
|
|
155
|
+
accountHolder: string;
|
|
156
|
+
routingNumber?: string;
|
|
157
|
+
accountLast4?: string;
|
|
158
|
+
swift?: string;
|
|
159
|
+
iban?: string;
|
|
160
|
+
country?: string;
|
|
161
|
+
};
|
|
127
162
|
billing_details?: {
|
|
128
163
|
name?: string;
|
|
129
164
|
email?: string;
|
|
@@ -137,6 +172,8 @@ export interface PaymentMethod {
|
|
|
137
172
|
country?: string;
|
|
138
173
|
};
|
|
139
174
|
};
|
|
175
|
+
_sourceToken?: string;
|
|
176
|
+
_verificationToken?: string;
|
|
140
177
|
}
|
|
141
178
|
export interface Invoice {
|
|
142
179
|
id: string;
|
|
@@ -174,4 +211,102 @@ export interface InvoiceFilters {
|
|
|
174
211
|
maxAmount?: number;
|
|
175
212
|
search?: string;
|
|
176
213
|
}
|
|
214
|
+
export interface SpendAlert {
|
|
215
|
+
id: string;
|
|
216
|
+
title: string;
|
|
217
|
+
threshold: number;
|
|
218
|
+
currency: string;
|
|
219
|
+
triggeredAt?: string | null;
|
|
220
|
+
createdAt: string;
|
|
221
|
+
updatedAt: string;
|
|
222
|
+
}
|
|
223
|
+
export type UsageMeterType = "ai" | "storage" | "network" | "network_egress" | "gpu" | "api_calls";
|
|
224
|
+
export interface UsageRecord {
|
|
225
|
+
meterId: UsageMeterType;
|
|
226
|
+
label: string;
|
|
227
|
+
current: number;
|
|
228
|
+
limit: number | null;
|
|
229
|
+
unit: string;
|
|
230
|
+
cost: number;
|
|
231
|
+
periodStart: string;
|
|
232
|
+
periodEnd: string;
|
|
233
|
+
}
|
|
234
|
+
export interface UsageSummary {
|
|
235
|
+
totalCost: number;
|
|
236
|
+
currency: string;
|
|
237
|
+
period: {
|
|
238
|
+
start: string;
|
|
239
|
+
end: string;
|
|
240
|
+
};
|
|
241
|
+
records: UsageRecord[];
|
|
242
|
+
}
|
|
243
|
+
export interface CreditGrant {
|
|
244
|
+
id: string;
|
|
245
|
+
userId?: string;
|
|
246
|
+
name: string;
|
|
247
|
+
amountCents: number;
|
|
248
|
+
remainingCents: number;
|
|
249
|
+
currency: string;
|
|
250
|
+
expiresAt?: string;
|
|
251
|
+
priority?: number;
|
|
252
|
+
eligibility?: string[];
|
|
253
|
+
voided?: boolean;
|
|
254
|
+
active: boolean;
|
|
255
|
+
createdAt?: string;
|
|
256
|
+
}
|
|
257
|
+
export type TransactionType = 'hold' | 'hold-removed' | 'transfer' | 'deposit' | 'withdraw';
|
|
258
|
+
export interface TransactionRecord {
|
|
259
|
+
id: string;
|
|
260
|
+
type: TransactionType;
|
|
261
|
+
amountCents: number;
|
|
262
|
+
currency: string;
|
|
263
|
+
description?: string;
|
|
264
|
+
balanceAfter?: number;
|
|
265
|
+
tags?: string[];
|
|
266
|
+
createdAt: string;
|
|
267
|
+
}
|
|
268
|
+
export interface SupportTier {
|
|
269
|
+
id: string;
|
|
270
|
+
name: string;
|
|
271
|
+
price: number;
|
|
272
|
+
billingPeriod: 'monthly' | 'yearly';
|
|
273
|
+
features: string[];
|
|
274
|
+
highlighted?: boolean;
|
|
275
|
+
}
|
|
276
|
+
export interface DiscountCode {
|
|
277
|
+
id: string;
|
|
278
|
+
code: string;
|
|
279
|
+
name: string | null;
|
|
280
|
+
kind: "percent" | "amount";
|
|
281
|
+
value: number;
|
|
282
|
+
currency: string | null;
|
|
283
|
+
duration: "forever" | "once" | "repeating" | null;
|
|
284
|
+
durationInMonths: number | null;
|
|
285
|
+
valid: boolean;
|
|
286
|
+
}
|
|
287
|
+
export type BillingRole = 'owner' | 'admin' | 'viewer';
|
|
288
|
+
export interface BillingAccount {
|
|
289
|
+
id: string;
|
|
290
|
+
name: string;
|
|
291
|
+
orgId: string;
|
|
292
|
+
orgName: string;
|
|
293
|
+
balance: number;
|
|
294
|
+
currency: string;
|
|
295
|
+
plan: string;
|
|
296
|
+
role: BillingRole;
|
|
297
|
+
createdAt: string;
|
|
298
|
+
}
|
|
299
|
+
export interface BillingAccountMember {
|
|
300
|
+
id: string;
|
|
301
|
+
userId: string;
|
|
302
|
+
email: string;
|
|
303
|
+
name: string;
|
|
304
|
+
role: BillingRole;
|
|
305
|
+
addedAt: string;
|
|
306
|
+
}
|
|
307
|
+
export interface Balance {
|
|
308
|
+
available: number;
|
|
309
|
+
pending?: number;
|
|
310
|
+
currency?: string;
|
|
311
|
+
}
|
|
177
312
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/billing/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAA;AAG3E,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,eAAe,CAAA;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;IACxC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/billing/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/form/form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAA;AAKxB,QAAA,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/form/form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAA;AAKxB,QAAA,MAAM,IAAI,4MAAe,CAAA;AAWzB,QAAA,MAAM,SAAS,GACb,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAC/D,cAEC,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,4CAMtC,CAAA;AAED,QAAA,MAAM,YAAY;;;;;;;;;;;CAyBjB,CAAA;AAQD,QAAA,MAAM,QAAQ,6GAWZ,CAAA;AAGF,QAAA,MAAM,SAAS,yJAcb,CAAA;AAGF,QAAA,MAAM,WAAW,8JAmBf,CAAA;AAGF,QAAA,MAAM,eAAe,yHAcnB,CAAA;AAGF,QAAA,MAAM,WAAW,yHAqBf,CAAA;AAGF,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,eAAe,EACf,WAAW,EACX,SAAS,GACV,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-copy-clipboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-copy-clipboard.ts"],"names":[],"mappings":"AAGA,KAAK,qBAAqB,GAAG;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"use-copy-clipboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-copy-clipboard.ts"],"names":[],"mappings":"AAGA,KAAK,qBAAqB,GAAG;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,8BAG9B,qBAAqB;;;CAkBvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-fill-ids.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-fill-ids.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"use-fill-ids.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-fill-ids.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM;;;CAS1C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,WAAW,MAAM,EAAE,QAAQ,MAAM;;;GAW3D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-scroll-restoration.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-scroll-restoration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"use-scroll-restoration.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-scroll-restoration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,oBAAoB,GAAI,2CAIlC;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAClD,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACtE,KAAG,IAuCH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ZenModelLike } from './types';
|
|
2
|
+
export interface ModelCardProps {
|
|
3
|
+
model: ZenModelLike;
|
|
4
|
+
/**
|
|
5
|
+
* Called when the card is clicked.
|
|
6
|
+
* If not provided, card is not clickable (no cursor-pointer).
|
|
7
|
+
*/
|
|
8
|
+
onNavigate?: (id: string) => void;
|
|
9
|
+
/** URL prefix for model detail pages. Default: /docs/models/ */
|
|
10
|
+
linkPrefix?: string;
|
|
11
|
+
/** Base URL for the "Chat" button. Default: https://hanzo.chat */
|
|
12
|
+
chatBaseUrl?: string;
|
|
13
|
+
/** URL for "Request Access" (contact-sales models). Default: https://hanzo.ai/contact */
|
|
14
|
+
requestAccessUrl?: string;
|
|
15
|
+
/** Model IDs to highlight as featured. Default: zen4-max, zen-max, zen5, zen4 */
|
|
16
|
+
featuredIds?: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* ModelCard — Rich model card with status badges, spec, and action buttons.
|
|
20
|
+
*
|
|
21
|
+
* Works in any Next.js / React app. Pass `onNavigate` to enable whole-card click.
|
|
22
|
+
*/
|
|
23
|
+
export declare function ModelCard({ model, onNavigate, linkPrefix, chatBaseUrl, requestAccessUrl, featuredIds, }: ModelCardProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export default ModelCard;
|
|
25
|
+
//# sourceMappingURL=ModelCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelCard.d.ts","sourceRoot":"","sources":["../../../src/models/ModelCard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAuC3C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,CAAA;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,UAAU,EACV,UAA4B,EAC5B,WAAkC,EAClC,gBAA6C,EAC7C,WAAW,GACZ,EAAE,cAAc,2CAsHhB;AAED,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ExternalLink, MessageSquare, Github, FileText } from 'lucide-react';
|
|
4
|
+
function fmtCtx(ctx) {
|
|
5
|
+
if (!ctx)
|
|
6
|
+
return '';
|
|
7
|
+
if (ctx >= 1000000)
|
|
8
|
+
return `${(ctx / 1000000).toFixed(ctx % 1000000 === 0 ? 0 : 1)}M ctx`;
|
|
9
|
+
if (ctx >= 1000)
|
|
10
|
+
return `${Math.round(ctx / 1000)}K ctx`;
|
|
11
|
+
return `${ctx} ctx`;
|
|
12
|
+
}
|
|
13
|
+
function statusInfo(status) {
|
|
14
|
+
switch (status) {
|
|
15
|
+
case 'preview':
|
|
16
|
+
return {
|
|
17
|
+
label: 'PREVIEW',
|
|
18
|
+
className: 'bg-amber-500/20 text-amber-600 dark:text-amber-400',
|
|
19
|
+
};
|
|
20
|
+
case 'coming-soon':
|
|
21
|
+
return {
|
|
22
|
+
label: 'SOON',
|
|
23
|
+
className: 'bg-muted text-muted-foreground',
|
|
24
|
+
};
|
|
25
|
+
case 'contact-sales':
|
|
26
|
+
return {
|
|
27
|
+
label: 'EARLY ACCESS',
|
|
28
|
+
className: 'bg-purple-500/20 text-purple-600 dark:text-purple-400',
|
|
29
|
+
};
|
|
30
|
+
default:
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function isFeaturedModel(id, featuredIds) {
|
|
35
|
+
if (featuredIds)
|
|
36
|
+
return featuredIds.includes(id);
|
|
37
|
+
return ['zen4-max', 'zen-max', 'zen5', 'zen4'].includes(id);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* ModelCard — Rich model card with status badges, spec, and action buttons.
|
|
41
|
+
*
|
|
42
|
+
* Works in any Next.js / React app. Pass `onNavigate` to enable whole-card click.
|
|
43
|
+
*/
|
|
44
|
+
export function ModelCard({ model, onNavigate, linkPrefix = '/docs/models/', chatBaseUrl = 'https://hanzo.chat', requestAccessUrl = 'https://hanzo.ai/contact', featuredIds, }) {
|
|
45
|
+
const status = model.status;
|
|
46
|
+
const featured = isFeaturedModel(model.id, featuredIds);
|
|
47
|
+
const badge = statusInfo(status);
|
|
48
|
+
const specParts = [
|
|
49
|
+
model.spec.params && model.spec.params !== 'N/A' && model.spec.params !== 'TBA' && model.spec.params !== 'TBD'
|
|
50
|
+
? model.spec.params
|
|
51
|
+
: null,
|
|
52
|
+
model.spec.activeParams ? `(${model.spec.activeParams} active)` : null,
|
|
53
|
+
model.spec.arch ?? null,
|
|
54
|
+
].filter(Boolean);
|
|
55
|
+
const specStr = specParts.join(' ');
|
|
56
|
+
const ctxStr = fmtCtx(model.spec.context);
|
|
57
|
+
const fullSpec = [specStr, ctxStr].filter(Boolean).join(' · ');
|
|
58
|
+
const cardBg = featured
|
|
59
|
+
? 'border-primary/30 bg-primary/5'
|
|
60
|
+
: status === 'coming-soon'
|
|
61
|
+
? 'border-border bg-muted/30 opacity-75'
|
|
62
|
+
: status === 'contact-sales'
|
|
63
|
+
? 'border-purple-500/20 bg-purple-500/5'
|
|
64
|
+
: 'border-border bg-background';
|
|
65
|
+
const isClickable = !!onNavigate;
|
|
66
|
+
const handleClick = () => onNavigate?.(model.id);
|
|
67
|
+
const handleKey = (e) => {
|
|
68
|
+
if (e.key === 'Enter' || e.key === ' ')
|
|
69
|
+
handleClick();
|
|
70
|
+
};
|
|
71
|
+
return (_jsxs("div", { role: isClickable ? 'link' : undefined, tabIndex: isClickable ? 0 : undefined, onClick: isClickable ? handleClick : undefined, onKeyDown: isClickable ? handleKey : undefined, className: `rounded-lg border p-4 transition hover:border-primary/40 ${cardBg} ${isClickable ? 'cursor-pointer' : ''}`, children: [_jsxs("div", { className: "flex items-center gap-2 mb-1", children: [_jsx("span", { className: "font-semibold text-sm", children: model.id }), badge && (_jsx("span", { className: `text-[9px] font-semibold tracking-wider uppercase px-1.5 py-0.5 rounded-full ${badge.className}`, children: badge.label }))] }), fullSpec && (_jsx("div", { className: "text-xs font-mono text-muted-foreground mb-2", children: fullSpec })), _jsx("p", { className: "text-xs text-muted-foreground mb-3", children: model.description }), _jsxs("div", { className: "flex flex-wrap gap-1.5 mt-auto", children: [status === 'contact-sales' && (_jsxs("a", { href: requestAccessUrl, target: "_blank", rel: "noopener noreferrer", onClick: (e) => { e.stopPropagation(); }, className: "inline-flex items-center gap-1 text-xs bg-purple-500/20 text-purple-400 border border-purple-500/30 px-2 py-0.5 rounded hover:bg-purple-500/30 transition", children: [_jsx(ExternalLink, { className: "h-2.5 w-2.5" }), " Request Access"] })), (status === 'available' || status === 'preview' || status === 'cloud-only') && (_jsxs("a", { href: `${chatBaseUrl}?model=${model.id}`, target: "_blank", rel: "noopener noreferrer", onClick: (e) => { e.stopPropagation(); }, className: "inline-flex items-center gap-1 text-xs bg-primary text-primary-foreground px-2 py-0.5 rounded hover:opacity-90 transition", children: [_jsx(MessageSquare, { className: "h-2.5 w-2.5" }), " Chat"] })), model.huggingface && (_jsxs("a", { href: model.huggingface, target: "_blank", rel: "noopener noreferrer", onClick: (e) => { e.stopPropagation(); }, className: "inline-flex items-center gap-1 text-xs text-primary hover:underline", children: [_jsx(ExternalLink, { className: "h-2.5 w-2.5" }), " Weights"] })), model.github && (_jsxs("a", { href: model.github, target: "_blank", rel: "noopener noreferrer", onClick: (e) => { e.stopPropagation(); }, className: "inline-flex items-center gap-1 text-xs text-muted-foreground hover:underline", children: [_jsx(Github, { className: "h-2.5 w-2.5" }), " Repo"] })), model.paper && (_jsxs("a", { href: model.paper, target: "_blank", rel: "noopener noreferrer", onClick: (e) => { e.stopPropagation(); }, className: "inline-flex items-center gap-1 text-xs text-muted-foreground hover:underline", children: [_jsx(FileText, { className: "h-2.5 w-2.5" }), " Paper"] }))] })] }));
|
|
72
|
+
}
|
|
73
|
+
export default ModelCard;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ZenModelLike, ModelFamilyLike } from './types';
|
|
2
|
+
export interface ModelFamilySectionProps {
|
|
3
|
+
family: ModelFamilyLike;
|
|
4
|
+
models: ZenModelLike[];
|
|
5
|
+
onNavigate?: (id: string) => void;
|
|
6
|
+
chatBaseUrl?: string;
|
|
7
|
+
requestAccessUrl?: string;
|
|
8
|
+
featuredIds?: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function ModelFamilySection({ family, models, onNavigate, chatBaseUrl, requestAccessUrl, featuredIds, }: ModelFamilySectionProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export interface ModelLibraryProps {
|
|
12
|
+
families: ModelFamilyLike[];
|
|
13
|
+
allModels: ZenModelLike[];
|
|
14
|
+
/** URL prefix for model detail navigation. Default: /docs/models/ */
|
|
15
|
+
linkPrefix?: string;
|
|
16
|
+
/** Base URL for Chat buttons. Default: https://hanzo.chat */
|
|
17
|
+
chatBaseUrl?: string;
|
|
18
|
+
/** URL for Request Access buttons. Default: https://hanzo.ai/contact */
|
|
19
|
+
requestAccessUrl?: string;
|
|
20
|
+
/** Model IDs to highlight as featured */
|
|
21
|
+
featuredIds?: string[];
|
|
22
|
+
/** Label override for "show all" toggle button */
|
|
23
|
+
showAllLabel?: string;
|
|
24
|
+
/** Label override for "show current" toggle button */
|
|
25
|
+
showCurrentLabel?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Custom navigation handler. If provided, cards are clickable and call this.
|
|
28
|
+
* Next.js callers: pass `(id) => router.push(linkPrefix + id)`.
|
|
29
|
+
* Default: navigate using window.location.href.
|
|
30
|
+
*/
|
|
31
|
+
onNavigate?: (id: string) => void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* ModelLibrary — Full browsable model catalog with family sections and filter toggle.
|
|
35
|
+
*
|
|
36
|
+
* Data-agnostic: accepts any ZenModelLike[] + ModelFamilyLike[] data.
|
|
37
|
+
* Works identically on zen-docs, hanzo.ai, and any other site.
|
|
38
|
+
*/
|
|
39
|
+
export declare function ModelLibrary({ families, allModels, linkPrefix, chatBaseUrl, requestAccessUrl, featuredIds, showAllLabel, showCurrentLabel, onNavigate, }: ModelLibraryProps): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
export default ModelLibrary;
|
|
41
|
+
//# sourceMappingURL=ModelLibrary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelLibrary.d.ts","sourceRoot":"","sources":["../../../src/models/ModelLibrary.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAwB5D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,MAAM,EACN,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,WAAW,GACZ,EAAE,uBAAuB,2CA6BzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,SAAS,EAAE,YAAY,EAAE,CAAA;IACzB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,UAA4B,EAC5B,WAAkC,EAClC,gBAA6C,EAC7C,WAAW,EACX,YAAgC,EAChC,gBAAsC,EACtC,UAAU,GACX,EAAE,iBAAiB,2CA6DnB;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { useRouter } from 'next/navigation';
|
|
5
|
+
import { Atom, Code, Zap, Cpu, Eye, Shield, Search, Network, Mic, Video, Box, Sparkles, Brain, Rocket, Filter, Image, } from 'lucide-react';
|
|
6
|
+
import { ModelCard } from './ModelCard';
|
|
7
|
+
const ICON_MAP = {
|
|
8
|
+
Sparkles: _jsx(Sparkles, { className: "h-5 w-5" }),
|
|
9
|
+
Rocket: _jsx(Rocket, { className: "h-5 w-5" }),
|
|
10
|
+
Eye: _jsx(Eye, { className: "h-5 w-5" }),
|
|
11
|
+
Code: _jsx(Code, { className: "h-5 w-5" }),
|
|
12
|
+
Search: _jsx(Search, { className: "h-5 w-5" }),
|
|
13
|
+
Image: _jsx(Image, { className: "h-5 w-5" }),
|
|
14
|
+
Mic: _jsx(Mic, { className: "h-5 w-5" }),
|
|
15
|
+
Brain: _jsx(Brain, { className: "h-5 w-5" }),
|
|
16
|
+
Shield: _jsx(Shield, { className: "h-5 w-5" }),
|
|
17
|
+
Network: _jsx(Network, { className: "h-5 w-5" }),
|
|
18
|
+
Box: _jsx(Box, { className: "h-5 w-5" }),
|
|
19
|
+
Video: _jsx(Video, { className: "h-5 w-5" }),
|
|
20
|
+
Atom: _jsx(Atom, { className: "h-5 w-5" }),
|
|
21
|
+
Cpu: _jsx(Cpu, { className: "h-5 w-5" }),
|
|
22
|
+
Zap: _jsx(Zap, { className: "h-5 w-5" }),
|
|
23
|
+
};
|
|
24
|
+
function isActiveStatus(status) {
|
|
25
|
+
return status === 'available' || status === 'contact-sales' || status === 'cloud-only';
|
|
26
|
+
}
|
|
27
|
+
export function ModelFamilySection({ family, models, onNavigate, chatBaseUrl, requestAccessUrl, featuredIds, }) {
|
|
28
|
+
const icon = (family.icon && ICON_MAP[family.icon]) ?? _jsx(Atom, { className: "h-5 w-5" });
|
|
29
|
+
return (_jsxs("div", { className: "mb-12", children: [_jsxs("div", { className: "flex items-center gap-3 mb-2", children: [_jsx("div", { className: "rounded-lg bg-muted p-2 text-primary", children: icon }), _jsxs("div", { children: [_jsx("h3", { className: "text-xl font-semibold", children: family.name }), _jsx("p", { className: "text-sm text-muted-foreground", children: family.description })] }), _jsxs("span", { className: "ml-auto text-xs text-muted-foreground bg-muted px-2 py-1 rounded-full", children: [models.length, " model", models.length !== 1 ? 's' : ''] })] }), _jsx("div", { className: "grid sm:grid-cols-2 lg:grid-cols-3 gap-3 mt-4", children: models.map((m) => (_jsx(ModelCard, { model: m, onNavigate: onNavigate, chatBaseUrl: chatBaseUrl, requestAccessUrl: requestAccessUrl, featuredIds: featuredIds }, m.id))) })] }));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* ModelLibrary — Full browsable model catalog with family sections and filter toggle.
|
|
33
|
+
*
|
|
34
|
+
* Data-agnostic: accepts any ZenModelLike[] + ModelFamilyLike[] data.
|
|
35
|
+
* Works identically on zen-docs, hanzo.ai, and any other site.
|
|
36
|
+
*/
|
|
37
|
+
export function ModelLibrary({ families, allModels, linkPrefix = '/docs/models/', chatBaseUrl = 'https://hanzo.chat', requestAccessUrl = 'https://hanzo.ai/contact', featuredIds, showAllLabel = 'Show All Models', showCurrentLabel = 'Show Current Only', onNavigate, }) {
|
|
38
|
+
const [showAll, setShowAll] = useState(false);
|
|
39
|
+
const router = useRouter();
|
|
40
|
+
const modelById = new Map(allModels.map((m) => [m.id, m]));
|
|
41
|
+
const handleNavigate = (id) => {
|
|
42
|
+
if (onNavigate) {
|
|
43
|
+
onNavigate(id);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
router.push(`${linkPrefix}${id}`);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const visibleFamilies = families
|
|
50
|
+
.map((f) => {
|
|
51
|
+
const models = f.models
|
|
52
|
+
.map((id) => modelById.get(id))
|
|
53
|
+
.filter((m) => m !== undefined)
|
|
54
|
+
.filter((m) => showAll || isActiveStatus(m.status));
|
|
55
|
+
return { ...f, resolvedModels: models };
|
|
56
|
+
})
|
|
57
|
+
.filter((f) => f.resolvedModels.length > 0);
|
|
58
|
+
const totalActive = allModels.filter((m) => isActiveStatus(m.status)).length;
|
|
59
|
+
const totalAll = allModels.length;
|
|
60
|
+
const totalHidden = totalAll - totalActive;
|
|
61
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between mb-8", children: [_jsxs("p", { className: "text-sm text-muted-foreground", children: ["Showing ", _jsx("strong", { children: showAll ? totalAll : totalActive }), " models", !showAll && totalHidden > 0 && (_jsxs(_Fragment, { children: [" \u00B7 ", totalHidden, " legacy/upcoming hidden"] }))] }), _jsxs("button", { onClick: () => setShowAll(!showAll), className: "inline-flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-1.5 text-sm font-medium hover:bg-muted transition", children: [_jsx(Filter, { className: "h-3.5 w-3.5" }), showAll ? showCurrentLabel : showAllLabel] })] }), visibleFamilies.map((family) => (_jsx(ModelFamilySection, { family: family, models: family.resolvedModels, onNavigate: handleNavigate, chatBaseUrl: chatBaseUrl, requestAccessUrl: requestAccessUrl, featuredIds: featuredIds }, family.id)))] }));
|
|
62
|
+
}
|
|
63
|
+
export default ModelLibrary;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ZenModelLike } from './types';
|
|
2
|
+
export interface ModelTableProps {
|
|
3
|
+
models: ZenModelLike[];
|
|
4
|
+
/** URL prefix for model links. Default: /docs/models/ */
|
|
5
|
+
linkPrefix?: string;
|
|
6
|
+
showParams?: boolean;
|
|
7
|
+
showArch?: boolean;
|
|
8
|
+
showContext?: boolean;
|
|
9
|
+
showPricing?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* ModelTable — Static table view of models with clickable links.
|
|
13
|
+
* Works in docs, marketing pages, dashboards.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ModelTable({ models, linkPrefix, showParams, showArch, showContext, showPricing, }: ModelTableProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export default ModelTable;
|
|
17
|
+
//# sourceMappingURL=ModelTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelTable.d.ts","sourceRoot":"","sources":["../../../src/models/ModelTable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAgC3C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,UAA4B,EAC5B,UAAiB,EACjB,QAAgB,EAChB,WAAkB,EAClB,WAAkB,GACnB,EAAE,eAAe,2CA4DjB;AAED,eAAe,UAAU,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
function fmtCtx(ctx) {
|
|
4
|
+
if (!ctx)
|
|
5
|
+
return '—';
|
|
6
|
+
if (ctx >= 1000000)
|
|
7
|
+
return `${(ctx / 1000000).toFixed(ctx % 1000000 === 0 ? 0 : 1)}M`;
|
|
8
|
+
if (ctx >= 1000)
|
|
9
|
+
return `${Math.round(ctx / 1000)}K`;
|
|
10
|
+
return `${ctx}`;
|
|
11
|
+
}
|
|
12
|
+
function fmtPrice(p) {
|
|
13
|
+
if (p == null)
|
|
14
|
+
return '—';
|
|
15
|
+
return `$${p.toFixed(2)}`;
|
|
16
|
+
}
|
|
17
|
+
function StatusBadge({ status }) {
|
|
18
|
+
if (status === 'preview' || status === 'coming-soon') {
|
|
19
|
+
return (_jsx("span", { className: "ml-1 text-[9px] font-semibold tracking-wider uppercase bg-amber-500/20 text-amber-600 dark:text-amber-400 px-1.5 py-0.5 rounded-full align-middle", children: status === 'preview' ? 'PREVIEW' : 'SOON' }));
|
|
20
|
+
}
|
|
21
|
+
if (status === 'contact-sales') {
|
|
22
|
+
return (_jsx("span", { className: "ml-1 text-[9px] font-semibold tracking-wider uppercase bg-purple-500/20 text-purple-600 dark:text-purple-400 px-1.5 py-0.5 rounded-full align-middle", children: "EARLY ACCESS" }));
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* ModelTable — Static table view of models with clickable links.
|
|
28
|
+
* Works in docs, marketing pages, dashboards.
|
|
29
|
+
*/
|
|
30
|
+
export function ModelTable({ models, linkPrefix = '/docs/models/', showParams = true, showArch = false, showContext = true, showPricing = true, }) {
|
|
31
|
+
return (_jsx("div", { className: "overflow-x-auto my-4", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border text-left", children: [_jsx("th", { className: "pb-2 pr-4 font-medium", children: "Model" }), showParams && _jsx("th", { className: "pb-2 pr-4 font-medium", children: "Parameters" }), showArch && _jsx("th", { className: "pb-2 pr-4 font-medium", children: "Architecture" }), showContext && _jsx("th", { className: "pb-2 pr-4 font-medium", children: "Context" }), showPricing && _jsx("th", { className: "pb-2 pr-4 font-medium text-right", children: "Input $/1M" }), showPricing && _jsx("th", { className: "pb-2 font-medium text-right", children: "Output $/1M" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: models.map((m) => (_jsxs("tr", { children: [_jsxs("td", { className: "py-2 pr-4", children: [_jsx("a", { href: `${linkPrefix}${m.id}`, className: "font-mono text-primary hover:underline text-sm", children: m.id }), _jsx(StatusBadge, { status: m.status })] }), showParams && (_jsxs("td", { className: "py-2 pr-4 text-sm text-muted-foreground", children: [m.spec.params && !['N/A', 'TBA', 'TBD'].includes(m.spec.params)
|
|
32
|
+
? m.spec.params
|
|
33
|
+
: '—', m.spec.activeParams ? ` (${m.spec.activeParams} active)` : ''] })), showArch && (_jsx("td", { className: "py-2 pr-4 text-sm text-muted-foreground", children: m.spec.arch ?? '—' })), showContext && (_jsx("td", { className: "py-2 pr-4 text-sm text-muted-foreground", children: fmtCtx(m.spec.context) })), showPricing && (_jsx("td", { className: "py-2 pr-4 text-sm text-right font-mono", children: fmtPrice(m.pricing?.input) })), showPricing && (_jsx("td", { className: "py-2 text-sm text-right font-mono", children: fmtPrice(m.pricing?.output) }))] }, m.id))) })] }) }));
|
|
34
|
+
}
|
|
35
|
+
export default ModelTable;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface ZenEnsoProps {
|
|
2
|
+
size?: number;
|
|
3
|
+
color?: string;
|
|
4
|
+
animate?: boolean;
|
|
5
|
+
loop?: boolean;
|
|
6
|
+
/** If true, renders as a loading spinner variant */
|
|
7
|
+
asLoader?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* ZenEnso — Animated Enso circle logo for Zen LM.
|
|
12
|
+
* Renders a brush-stroke circle that draws itself, then fills.
|
|
13
|
+
* Uses pure CSS animations — no JS animation library needed.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ZenEnso({ size, color, animate, loop, asLoader, className, }: ZenEnsoProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export default ZenEnso;
|
|
17
|
+
//# sourceMappingURL=ZenEnso.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZenEnso.d.ts","sourceRoot":"","sources":["../../../src/models/ZenEnso.tsx"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAS,EACT,KAAiB,EACjB,OAAc,EACd,IAAY,EACZ,QAAgB,EAChB,SAAc,GACf,EAAE,YAAY,2CAsFd;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* ZenEnso — Animated Enso circle logo for Zen LM.
|
|
5
|
+
* Renders a brush-stroke circle that draws itself, then fills.
|
|
6
|
+
* Uses pure CSS animations — no JS animation library needed.
|
|
7
|
+
*/
|
|
8
|
+
export function ZenEnso({ size = 64, color = '#A855F7', animate = true, loop = false, asLoader = false, className = '', }) {
|
|
9
|
+
const uid = Math.random().toString(36).slice(2, 7);
|
|
10
|
+
const strokeDur = loop ? '1.35s' : '1.25s';
|
|
11
|
+
const fillDur = loop ? '0.60s' : '0.55s';
|
|
12
|
+
const iterCount = loop ? 'infinite' : '1';
|
|
13
|
+
const loaderStyle = asLoader
|
|
14
|
+
? { animation: `zenEnsoSpin-${uid} 1.2s linear infinite` }
|
|
15
|
+
: {};
|
|
16
|
+
return (_jsxs("span", { className: `inline-flex items-center justify-center ${className}`, style: { width: size, height: size }, "aria-label": "Zen LM", children: [_jsx("style", { children: `
|
|
17
|
+
@keyframes zenEnsoDraw-${uid} {
|
|
18
|
+
to { stroke-dashoffset: 0; }
|
|
19
|
+
}
|
|
20
|
+
@keyframes zenEnsoFill-${uid} {
|
|
21
|
+
0% { opacity: 0; transform: scale(0.92); filter: blur(6px); }
|
|
22
|
+
60% { opacity: 1; transform: scale(1.02); filter: blur(1px); }
|
|
23
|
+
100% { opacity: 1; transform: scale(1.00); filter: blur(0px); }
|
|
24
|
+
}
|
|
25
|
+
@keyframes zenEnsoCut-${uid} {
|
|
26
|
+
to { opacity: 1; }
|
|
27
|
+
}
|
|
28
|
+
@keyframes zenEnsoSpin-${uid} {
|
|
29
|
+
to { transform: rotate(360deg); }
|
|
30
|
+
}
|
|
31
|
+
.zen-enso-stroke-${uid} {
|
|
32
|
+
stroke-dasharray: 1200;
|
|
33
|
+
stroke-dashoffset: ${animate ? '1200' : '0'};
|
|
34
|
+
animation: ${animate ? `zenEnsoDraw-${uid} ${strokeDur} cubic-bezier(.2,.9,.25,1) ${iterCount} forwards` : 'none'};
|
|
35
|
+
}
|
|
36
|
+
.zen-enso-fill-${uid} {
|
|
37
|
+
opacity: ${animate ? '0' : '1'};
|
|
38
|
+
transform-origin: 256px 256px;
|
|
39
|
+
transform: scale(${animate ? '0.92' : '1'});
|
|
40
|
+
animation: ${animate ? `zenEnsoFill-${uid} ${fillDur} cubic-bezier(.2,.9,.2,1) ${iterCount} forwards` : 'none'};
|
|
41
|
+
animation-delay: ${animate ? '1.05s' : '0s'};
|
|
42
|
+
}
|
|
43
|
+
.zen-enso-cut-${uid} {
|
|
44
|
+
opacity: ${animate ? '0' : '1'};
|
|
45
|
+
animation: ${animate ? `zenEnsoCut-${uid} 0.01s linear ${iterCount} forwards` : 'none'};
|
|
46
|
+
animation-delay: ${animate ? '1.05s' : '0s'};
|
|
47
|
+
}
|
|
48
|
+
` }), _jsxs("svg", { viewBox: "0 0 512 512", fill: "none", xmlns: "http://www.w3.org/2000/svg", width: size, height: size, style: loaderStyle, children: [_jsx("circle", { className: `zen-enso-fill-${uid}`, cx: "256", cy: "256", r: "172", fill: color }), _jsx("path", { className: `zen-enso-stroke-${uid}`, d: "M256 74 C154 74 78 160 78 258 C78 352 150 432 250 438 C345 444 434 374 438 276 C441 210 406 150 348 118 C305 94 280 86 256 74", stroke: color, strokeWidth: "26", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { className: `zen-enso-cut-${uid}`, d: "M410 148 C392 126 366 106 340 94", stroke: "currentColor", strokeWidth: "34", strokeLinecap: "round" })] })] }));
|
|
49
|
+
}
|
|
50
|
+
export default ZenEnso;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @hanzo/ui/models — Shared Zen model UI components
|
|
3
|
+
*
|
|
4
|
+
* Components are data-agnostic: they accept any data compatible with
|
|
5
|
+
* ZenModelLike / ModelFamilyLike types, making them reusable across
|
|
6
|
+
* zen-docs, hanzo.ai, and any other Hanzo site.
|
|
7
|
+
*
|
|
8
|
+
* Data source: @hanzo/zen-models (the canonical Zen model registry)
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* import { ModelCard, ModelLibrary, ModelTable, ZenEnso } from '@hanzo/ui/models'
|
|
12
|
+
* import { allModels, families } from '@hanzo/zen-models'
|
|
13
|
+
* <ModelLibrary allModels={allModels} families={families} />
|
|
14
|
+
*/
|
|
15
|
+
export { ModelCard } from './ModelCard';
|
|
16
|
+
export type { ModelCardProps } from './ModelCard';
|
|
17
|
+
export { ModelTable } from './ModelTable';
|
|
18
|
+
export type { ModelTableProps } from './ModelTable';
|
|
19
|
+
export { ModelLibrary, ModelFamilySection } from './ModelLibrary';
|
|
20
|
+
export type { ModelLibraryProps, ModelFamilySectionProps } from './ModelLibrary';
|
|
21
|
+
export { ZenEnso } from './ZenEnso';
|
|
22
|
+
export type { ZenModelLike, ModelFamilyLike, ModelSpecLike, ModelPricingLike } from './types';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAEhF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @hanzo/ui/models — Shared Zen model UI components
|
|
3
|
+
*
|
|
4
|
+
* Components are data-agnostic: they accept any data compatible with
|
|
5
|
+
* ZenModelLike / ModelFamilyLike types, making them reusable across
|
|
6
|
+
* zen-docs, hanzo.ai, and any other Hanzo site.
|
|
7
|
+
*
|
|
8
|
+
* Data source: @hanzo/zen-models (the canonical Zen model registry)
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* import { ModelCard, ModelLibrary, ModelTable, ZenEnso } from '@hanzo/ui/models'
|
|
12
|
+
* import { allModels, families } from '@hanzo/zen-models'
|
|
13
|
+
* <ModelLibrary allModels={allModels} families={families} />
|
|
14
|
+
*/
|
|
15
|
+
export { ModelCard } from './ModelCard';
|
|
16
|
+
export { ModelTable } from './ModelTable';
|
|
17
|
+
export { ModelLibrary, ModelFamilySection } from './ModelLibrary';
|
|
18
|
+
export { ZenEnso } from './ZenEnso';
|