@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.
Files changed (186) hide show
  1. package/dist/assets/crypto.d.ts.map +1 -1
  2. package/dist/assets/file.d.ts.map +1 -1
  3. package/dist/assets/general.d.ts.map +1 -1
  4. package/dist/assets/hanzo-logo.d.ts.map +1 -1
  5. package/dist/assets/llm-provider.d.ts.map +1 -1
  6. package/dist/components/cal-embed.d.ts.map +1 -1
  7. package/dist/frameworks/react/hooks/index.d.ts.map +1 -1
  8. package/dist/frameworks/react-native/utils.d.ts.map +1 -1
  9. package/dist/frameworks/svelte/utils.d.ts.map +1 -1
  10. package/dist/frameworks/vue/utils.d.ts.map +1 -1
  11. package/dist/helpers/file.d.ts.map +1 -1
  12. package/dist/helpers/memoization.d.ts.map +1 -1
  13. package/dist/index.js +2 -2
  14. package/dist/index.mjs +2 -2
  15. package/dist/models/index.js +35 -0
  16. package/dist/models/index.mjs +35 -0
  17. package/dist/navigation/index.js +2 -1
  18. package/dist/navigation/index.mjs +2 -1
  19. package/dist/primitives/alert.d.ts +1 -1
  20. package/dist/primitives/cal-embed.d.ts.map +1 -1
  21. package/dist/primitives/chart.d.ts.map +1 -1
  22. package/dist/primitives/chat/chat-input.d.ts.map +1 -1
  23. package/dist/primitives/combobox.d.ts.map +1 -1
  24. package/dist/primitives/command.d.ts.map +1 -1
  25. package/dist/primitives/copy-to-clipboard-icon.d.ts.map +1 -1
  26. package/dist/primitives/dots-loader.d.ts.map +1 -1
  27. package/dist/primitives/error-message.d.ts.map +1 -1
  28. package/dist/primitives/file-uploader.d.ts.map +1 -1
  29. package/dist/primitives/form.d.ts.map +1 -1
  30. package/dist/primitives/input-otp.d.ts.map +1 -1
  31. package/dist/primitives/markdown-preview.d.ts.map +1 -1
  32. package/dist/primitives/pretty-json-print.d.ts.map +1 -1
  33. package/dist/primitives/resizable.d.ts +4 -20
  34. package/dist/primitives/resizable.d.ts.map +1 -1
  35. package/dist/primitives/resizable.js +4 -4
  36. package/dist/primitives/sonner.d.ts.map +1 -1
  37. package/dist/primitives/text-link.d.ts.map +1 -1
  38. package/dist/primitives/textfield.d.ts.map +1 -1
  39. package/dist/primitives/toast.d.ts.map +1 -1
  40. package/dist/resizable.js +1 -1
  41. package/dist/resizable.mjs +1 -1
  42. package/dist/src/billing/components/account-members.d.ts +10 -0
  43. package/dist/src/billing/components/account-members.d.ts.map +1 -0
  44. package/dist/src/billing/components/account-members.js +63 -0
  45. package/dist/src/billing/components/account-switcher.d.ts +9 -0
  46. package/dist/src/billing/components/account-switcher.d.ts.map +1 -0
  47. package/dist/src/billing/components/account-switcher.js +52 -0
  48. package/dist/src/billing/components/animated-card.d.ts +9 -0
  49. package/dist/src/billing/components/animated-card.d.ts.map +1 -0
  50. package/dist/src/billing/components/animated-card.js +161 -0
  51. package/dist/src/billing/components/billing-settings.d.ts +26 -0
  52. package/dist/src/billing/components/billing-settings.d.ts.map +1 -0
  53. package/dist/src/billing/components/billing-settings.js +23 -0
  54. package/dist/src/billing/components/business-profile-panel.d.ts.map +1 -1
  55. package/dist/src/billing/components/business-profile-panel.js +9 -8
  56. package/dist/src/billing/components/card-form.d.ts +18 -0
  57. package/dist/src/billing/components/card-form.d.ts.map +1 -0
  58. package/dist/src/billing/components/card-form.js +139 -0
  59. package/dist/src/billing/components/cost-explorer.d.ts +7 -0
  60. package/dist/src/billing/components/cost-explorer.d.ts.map +1 -0
  61. package/dist/src/billing/components/cost-explorer.js +73 -0
  62. package/dist/src/billing/components/credits-panel.d.ts +8 -0
  63. package/dist/src/billing/components/credits-panel.d.ts.map +1 -0
  64. package/dist/src/billing/components/credits-panel.js +58 -0
  65. package/dist/src/billing/components/guided-setup.d.ts +13 -0
  66. package/dist/src/billing/components/guided-setup.d.ts.map +1 -0
  67. package/dist/src/billing/components/guided-setup.js +44 -0
  68. package/dist/src/billing/components/index.d.ts +34 -0
  69. package/dist/src/billing/components/index.d.ts.map +1 -1
  70. package/dist/src/billing/components/index.js +17 -0
  71. package/dist/src/billing/components/invoice-manager.js +13 -13
  72. package/dist/src/billing/components/invoices-payments.d.ts +7 -0
  73. package/dist/src/billing/components/invoices-payments.d.ts.map +1 -0
  74. package/dist/src/billing/components/invoices-payments.js +44 -0
  75. package/dist/src/billing/components/overview-dashboard.d.ts +31 -0
  76. package/dist/src/billing/components/overview-dashboard.d.ts.map +1 -0
  77. package/dist/src/billing/components/overview-dashboard.js +105 -0
  78. package/dist/src/billing/components/payment-manager.d.ts.map +1 -1
  79. package/dist/src/billing/components/payment-manager.js +267 -83
  80. package/dist/src/billing/components/promotions-panel.d.ts +7 -0
  81. package/dist/src/billing/components/promotions-panel.d.ts.map +1 -0
  82. package/dist/src/billing/components/promotions-panel.js +48 -0
  83. package/dist/src/billing/components/spend-alerts.d.ts +9 -0
  84. package/dist/src/billing/components/spend-alerts.d.ts.map +1 -0
  85. package/dist/src/billing/components/spend-alerts.js +99 -0
  86. package/dist/src/billing/components/square-card-form.d.ts +32 -0
  87. package/dist/src/billing/components/square-card-form.d.ts.map +1 -0
  88. package/dist/src/billing/components/square-card-form.js +179 -0
  89. package/dist/src/billing/components/status-bar.d.ts +12 -0
  90. package/dist/src/billing/components/status-bar.d.ts.map +1 -0
  91. package/dist/src/billing/components/status-bar.js +32 -0
  92. package/dist/src/billing/components/subscription-portal.d.ts +2 -1
  93. package/dist/src/billing/components/subscription-portal.d.ts.map +1 -1
  94. package/dist/src/billing/components/subscription-portal.js +123 -26
  95. package/dist/src/billing/components/support-tiers-panel.d.ts +6 -0
  96. package/dist/src/billing/components/support-tiers-panel.d.ts.map +1 -0
  97. package/dist/src/billing/components/support-tiers-panel.js +90 -0
  98. package/dist/src/billing/components/tax-compliance-panel.js +5 -5
  99. package/dist/src/billing/components/transactions-panel.d.ts +8 -0
  100. package/dist/src/billing/components/transactions-panel.d.ts.map +1 -0
  101. package/dist/src/billing/components/transactions-panel.js +64 -0
  102. package/dist/src/billing/components/usage-panel.d.ts +7 -0
  103. package/dist/src/billing/components/usage-panel.d.ts.map +1 -0
  104. package/dist/src/billing/components/usage-panel.js +64 -0
  105. package/dist/src/billing/types/index.d.ts +136 -1
  106. package/dist/src/billing/types/index.d.ts.map +1 -1
  107. package/dist/src/form/form.d.ts.map +1 -1
  108. package/dist/src/hooks/use-copy-clipboard.d.ts.map +1 -1
  109. package/dist/src/hooks/use-fill-ids.d.ts.map +1 -1
  110. package/dist/src/hooks/use-scroll-restoration.d.ts.map +1 -1
  111. package/dist/src/models/ModelCard.d.ts +25 -0
  112. package/dist/src/models/ModelCard.d.ts.map +1 -0
  113. package/dist/src/models/ModelCard.js +73 -0
  114. package/dist/src/models/ModelLibrary.d.ts +41 -0
  115. package/dist/src/models/ModelLibrary.d.ts.map +1 -0
  116. package/dist/src/models/ModelLibrary.js +63 -0
  117. package/dist/src/models/ModelTable.d.ts +17 -0
  118. package/dist/src/models/ModelTable.d.ts.map +1 -0
  119. package/dist/src/models/ModelTable.js +35 -0
  120. package/dist/src/models/ZenEnso.d.ts +17 -0
  121. package/dist/src/models/ZenEnso.d.ts.map +1 -0
  122. package/dist/src/models/ZenEnso.js +50 -0
  123. package/dist/src/models/index.d.ts +23 -0
  124. package/dist/src/models/index.d.ts.map +1 -0
  125. package/dist/src/models/index.js +18 -0
  126. package/dist/src/models/types.d.ts +40 -0
  127. package/dist/src/models/types.d.ts.map +1 -0
  128. package/dist/src/models/types.js +7 -0
  129. package/dist/src/navigation/hanzo-shell/AppSwitcher.d.ts +8 -0
  130. package/dist/src/navigation/hanzo-shell/AppSwitcher.d.ts.map +1 -0
  131. package/dist/src/navigation/hanzo-shell/AppSwitcher.js +19 -0
  132. package/dist/src/navigation/hanzo-shell/BeamAvatar.d.ts +9 -0
  133. package/dist/src/navigation/hanzo-shell/BeamAvatar.d.ts.map +1 -0
  134. package/dist/src/navigation/hanzo-shell/BeamAvatar.js +38 -0
  135. package/dist/src/navigation/hanzo-shell/HanzoCommandPalette.d.ts +28 -0
  136. package/dist/src/navigation/hanzo-shell/HanzoCommandPalette.d.ts.map +1 -0
  137. package/dist/src/navigation/hanzo-shell/HanzoCommandPalette.js +124 -0
  138. package/dist/src/navigation/hanzo-shell/HanzoHeader.d.ts +37 -0
  139. package/dist/src/navigation/hanzo-shell/HanzoHeader.d.ts.map +1 -0
  140. package/dist/src/navigation/hanzo-shell/HanzoHeader.js +43 -0
  141. package/dist/src/navigation/hanzo-shell/HanzoMark.d.ts +17 -0
  142. package/dist/src/navigation/hanzo-shell/HanzoMark.d.ts.map +1 -0
  143. package/dist/src/navigation/hanzo-shell/HanzoMark.js +57 -0
  144. package/dist/src/navigation/hanzo-shell/UserAvatar.d.ts +15 -0
  145. package/dist/src/navigation/hanzo-shell/UserAvatar.d.ts.map +1 -0
  146. package/dist/src/navigation/hanzo-shell/UserAvatar.js +44 -0
  147. package/dist/src/navigation/hanzo-shell/UserOrgDropdown.d.ts +11 -0
  148. package/dist/src/navigation/hanzo-shell/UserOrgDropdown.d.ts.map +1 -0
  149. package/dist/src/navigation/hanzo-shell/UserOrgDropdown.js +26 -0
  150. package/dist/src/navigation/hanzo-shell/index.d.ts +14 -0
  151. package/dist/src/navigation/hanzo-shell/index.d.ts.map +1 -0
  152. package/dist/src/navigation/hanzo-shell/index.js +9 -0
  153. package/dist/src/navigation/hanzo-shell/types.d.ts +49 -0
  154. package/dist/src/navigation/hanzo-shell/types.d.ts.map +1 -0
  155. package/dist/src/navigation/hanzo-shell/types.js +32 -0
  156. package/dist/src/navigation/hanzo-shell/useHanzoAuth.d.ts +16 -0
  157. package/dist/src/navigation/hanzo-shell/useHanzoAuth.d.ts.map +1 -0
  158. package/dist/src/navigation/hanzo-shell/useHanzoAuth.js +93 -0
  159. package/dist/src/navigation/index.d.ts +2 -0
  160. package/dist/src/navigation/index.d.ts.map +1 -1
  161. package/dist/src/navigation/index.js +2 -0
  162. package/dist/src/ui/banner.d.ts +1 -1
  163. package/dist/util/blob.d.ts.map +1 -1
  164. package/dist/util/blob.js +1 -1
  165. package/dist/util/date.d.ts.map +1 -1
  166. package/dist/util/debounce.d.ts.map +1 -1
  167. package/dist/util/file.d.ts.map +1 -1
  168. package/dist/util/format-and-abbreviate-as-currency.d.ts +7 -1
  169. package/dist/util/format-and-abbreviate-as-currency.d.ts.map +1 -1
  170. package/dist/util/format-text.d.ts.map +1 -1
  171. package/dist/util/format-to-max-char.d.ts +7 -1
  172. package/dist/util/format-to-max-char.d.ts.map +1 -1
  173. package/dist/util/index.mjs +1 -1
  174. package/dist/util/number-abbreviate.d.ts.map +1 -1
  175. package/dist/util/specifier.d.ts.map +1 -1
  176. package/dist/util/step-animation.d.ts.map +1 -1
  177. package/package.json +20 -7
  178. package/dist/tailwind/typo-plugin/get-plugin-styles.d.ts +0 -595
  179. package/dist/tailwind/typo-plugin/get-plugin-styles.d.ts.map +0 -1
  180. package/dist/tailwind/typo-plugin/get-plugin-styles.js +0 -661
  181. package/dist/tailwind/typo-plugin/index.d.ts +0 -3
  182. package/dist/tailwind/typo-plugin/index.d.ts.map +0 -1
  183. package/dist/tailwind/typo-plugin/index.js +0 -102
  184. package/dist/tailwind/typo-plugin/utils.d.ts +0 -6
  185. package/dist/tailwind/typo-plugin/utils.d.ts.map +0 -1
  186. package/dist/tailwind/typo-plugin/utils.js +0 -47
@@ -0,0 +1,7 @@
1
+ import type { UsageSummary } from '../types';
2
+ export interface CostExplorerProps {
3
+ usage: UsageSummary | null;
4
+ usageLoading: boolean;
5
+ }
6
+ export declare function CostExplorer({ usage, usageLoading }: CostExplorerProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=cost-explorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-explorer.d.ts","sourceRoot":"","sources":["../../../../src/billing/components/cost-explorer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,UAAU,CAAA;AAEzD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,OAAO,CAAA;CACtB;AA2BD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,iBAAiB,2CA6LtE"}
@@ -0,0 +1,73 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useMemo } from 'react';
4
+ function fmt(amount, currency = 'usd') {
5
+ return new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(amount);
6
+ }
7
+ const meterLabels = {
8
+ ai: 'LLM / Chat',
9
+ api_calls: 'API Requests',
10
+ storage: 'Storage',
11
+ gpu: 'GPU Compute',
12
+ network: 'Network',
13
+ network_egress: 'Egress',
14
+ };
15
+ const meterColors = {
16
+ ai: 'bg-violet-500',
17
+ api_calls: 'bg-indigo-500',
18
+ storage: 'bg-blue-500',
19
+ gpu: 'bg-amber-500',
20
+ network: 'bg-emerald-500',
21
+ network_egress: 'bg-teal-500',
22
+ };
23
+ export function CostExplorer({ usage, usageLoading }) {
24
+ const [timeRange, setTimeRange] = useState('30d');
25
+ const [productFilter, setProductFilter] = useState('all');
26
+ const [sortKey, setSortKey] = useState('cost');
27
+ const [sortAsc, setSortAsc] = useState(false);
28
+ const records = usage?.records ?? [];
29
+ const totalCost = usage?.totalCost ?? 0;
30
+ const currency = usage?.currency ?? 'usd';
31
+ // Available product types from records
32
+ const productTypes = useMemo(() => {
33
+ const types = new Set(records.map(r => r.meterId));
34
+ return Array.from(types);
35
+ }, [records]);
36
+ // Filtered + sorted records
37
+ const filtered = useMemo(() => {
38
+ let list = productFilter === 'all' ? records : records.filter(r => r.meterId === productFilter);
39
+ list = [...list].sort((a, b) => {
40
+ let cmp = 0;
41
+ if (sortKey === 'cost')
42
+ cmp = a.cost - b.cost;
43
+ else if (sortKey === 'usage')
44
+ cmp = a.current - b.current;
45
+ else
46
+ cmp = a.label.localeCompare(b.label);
47
+ return sortAsc ? cmp : -cmp;
48
+ });
49
+ return list;
50
+ }, [records, productFilter, sortKey, sortAsc]);
51
+ // Top 5 drivers by cost
52
+ const topDrivers = useMemo(() => [...records].sort((a, b) => b.cost - a.cost).slice(0, 5), [records]);
53
+ const handleSort = (key) => {
54
+ if (sortKey === key)
55
+ setSortAsc(!sortAsc);
56
+ else {
57
+ setSortKey(key);
58
+ setSortAsc(false);
59
+ }
60
+ };
61
+ const sortIndicator = (key) => sortKey === key ? (sortAsc ? ' \u2191' : ' \u2193') : '';
62
+ if (usageLoading) {
63
+ return (_jsx("div", { className: "flex items-center justify-center py-16", children: _jsx("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-text-dim border-t-brand" }) }));
64
+ }
65
+ return (_jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-3 rounded-xl border border-border bg-bg-card p-4", children: [_jsx("div", { className: "flex gap-1 rounded-lg bg-bg p-0.5", children: ['7d', '30d', '90d'].map(t => (_jsx("button", { type: "button", onClick: () => setTimeRange(t), className: `rounded-md px-3 py-1.5 text-xs font-medium transition ${timeRange === t ? 'bg-bg-elevated text-text' : 'text-text-muted hover:text-text'}`, children: t }, t))) }), _jsxs("select", { value: productFilter, onChange: e => setProductFilter(e.target.value), className: "rounded-lg border border-border bg-bg-input px-3 py-1.5 text-xs text-text outline-none", children: [_jsx("option", { value: "all", children: "All products" }), productTypes.map(t => (_jsx("option", { value: t, children: meterLabels[t] ?? t }, t)))] }), _jsx("select", { disabled: true, className: "rounded-lg border border-border bg-bg-input px-3 py-1.5 text-xs text-text-dim opacity-50 cursor-not-allowed", children: _jsx("option", { children: "Model (coming soon)" }) }), _jsx("select", { disabled: true, className: "rounded-lg border border-border bg-bg-input px-3 py-1.5 text-xs text-text-dim opacity-50 cursor-not-allowed", children: _jsx("option", { children: "Project (coming soon)" }) })] }), _jsxs("div", { className: "rounded-xl border border-border bg-bg-card p-6", children: [_jsxs("div", { className: "flex items-end justify-between mb-4", children: [_jsxs("div", { children: [_jsxs("p", { className: "text-xs uppercase tracking-wide text-text-dim", children: ["Total Cost (", timeRange, ")"] }), _jsx("p", { className: "text-3xl font-bold text-text mt-1", children: fmt(totalCost, currency) })] }), usage?.period && (_jsxs("p", { className: "text-xs text-text-muted", children: [new Date(usage.period.start).toLocaleDateString(), " ", '\u2014', " ", new Date(usage.period.end).toLocaleDateString()] }))] }), _jsx("div", { className: "flex items-center justify-center h-32 rounded-lg bg-bg border border-dashed border-border", children: _jsxs("p", { className: "text-xs text-text-dim", children: ["Cost trend chart ", '\u2014', " coming soon"] }) })] }), topDrivers.length > 0 && (_jsxs("div", { children: [_jsx("h3", { className: "text-xs font-medium uppercase tracking-wide text-text-dim mb-3", children: "Top Drivers" }), _jsx("div", { className: "space-y-2", children: topDrivers.map(rec => {
66
+ const pct = totalCost > 0 ? (rec.cost / totalCost) * 100 : 0;
67
+ const color = meterColors[rec.meterId] ?? 'bg-gray-500';
68
+ return (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "w-24 shrink-0 text-xs text-text-muted truncate", children: meterLabels[rec.meterId] ?? rec.label }), _jsx("div", { className: "flex-1 h-4 rounded bg-bg-elevated overflow-hidden", children: _jsx("div", { className: `h-full rounded ${color} transition-all`, style: { width: `${pct}%` } }) }), _jsx("span", { className: "w-20 shrink-0 text-right text-xs font-medium text-text", children: fmt(rec.cost) }), _jsxs("span", { className: "w-12 shrink-0 text-right text-[11px] text-text-muted", children: [pct.toFixed(1), "%"] })] }, rec.meterId));
69
+ }) })] })), _jsx("div", { className: "rounded-xl border border-border overflow-hidden", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-bg-elevated text-xs uppercase tracking-wide text-text-muted", children: [_jsxs("th", { className: "px-4 py-3 text-left cursor-pointer select-none", onClick: () => handleSort('label'), children: ["Product", sortIndicator('label')] }), _jsx("th", { className: "px-4 py-3 text-left", children: "Meter" }), _jsxs("th", { className: "px-4 py-3 text-right cursor-pointer select-none", onClick: () => handleSort('usage'), children: ["Usage", sortIndicator('usage')] }), _jsxs("th", { className: "px-4 py-3 text-right cursor-pointer select-none", onClick: () => handleSort('cost'), children: ["Cost", sortIndicator('cost')] }), _jsx("th", { className: "px-4 py-3 text-right", children: "% of Total" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: filtered.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 5, className: "px-4 py-8 text-center text-text-muted text-sm", children: "No usage data for this period." }) })) : (filtered.map(rec => {
70
+ const pct = totalCost > 0 ? (rec.cost / totalCost) * 100 : 0;
71
+ return (_jsxs("tr", { className: "hover:bg-bg-card transition-colors", children: [_jsx("td", { className: "px-4 py-3 text-text font-medium", children: meterLabels[rec.meterId] ?? rec.label }), _jsx("td", { className: "px-4 py-3 text-text-muted", children: rec.meterId }), _jsxs("td", { className: "px-4 py-3 text-right text-text", children: [rec.current.toLocaleString(), " ", rec.unit, rec.limit ? _jsxs("span", { className: "text-text-dim", children: [" / ", rec.limit.toLocaleString()] }) : null] }), _jsx("td", { className: "px-4 py-3 text-right text-text font-medium", children: fmt(rec.cost) }), _jsxs("td", { className: "px-4 py-3 text-right text-text-muted", children: [pct.toFixed(1), "%"] })] }, rec.meterId));
72
+ })) }), filtered.length > 0 && (_jsx("tfoot", { children: _jsxs("tr", { className: "bg-bg-elevated font-medium", children: [_jsx("td", { colSpan: 3, className: "px-4 py-3 text-xs uppercase tracking-wide text-text-muted", children: "Total" }), _jsx("td", { className: "px-4 py-3 text-right text-text", children: fmt(totalCost, currency) }), _jsx("td", { className: "px-4 py-3 text-right text-text-muted", children: "100%" })] }) }))] }) })] }));
73
+ }
@@ -0,0 +1,8 @@
1
+ import type { CreditGrant } from '../types';
2
+ export interface CreditsPanelProps {
3
+ creditGrants: CreditGrant[];
4
+ creditBalance?: number;
5
+ onClaimStarterCredit?: () => Promise<void>;
6
+ }
7
+ export declare function CreditsPanel({ creditGrants, creditBalance, onClaimStarterCredit }: CreditsPanelProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=credits-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits-panel.d.ts","sourceRoot":"","sources":["../../../../src/billing/components/credits-panel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C;AA4BD,wBAAgB,YAAY,CAAC,EAAE,YAAY,EAAE,aAAiB,EAAE,oBAAoB,EAAE,EAAE,iBAAiB,2CAwJxG"}
@@ -0,0 +1,58 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ function formatCurrency(value, currency = 'USD') {
5
+ return new Intl.NumberFormat('en-US', {
6
+ style: 'currency',
7
+ currency,
8
+ minimumFractionDigits: 2,
9
+ }).format(value);
10
+ }
11
+ function formatCountdown(expiresAt) {
12
+ const diff = new Date(expiresAt).getTime() - Date.now();
13
+ if (diff <= 0)
14
+ return 'Expired';
15
+ const days = Math.floor(diff / (1000 * 60 * 60 * 24));
16
+ const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
17
+ if (days > 0)
18
+ return `${days}d ${hours}h remaining`;
19
+ const mins = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
20
+ return `${hours}h ${mins}m remaining`;
21
+ }
22
+ function formatDate(dateStr) {
23
+ return new Intl.DateTimeFormat('en-US', {
24
+ month: 'short',
25
+ day: 'numeric',
26
+ year: 'numeric',
27
+ }).format(new Date(dateStr));
28
+ }
29
+ export function CreditsPanel({ creditGrants, creditBalance = 0, onClaimStarterCredit }) {
30
+ const [claiming, setClaiming] = React.useState(false);
31
+ const [claimError, setClaimError] = React.useState(null);
32
+ const hasStarterCredit = creditGrants.some((g) => g.name.toLowerCase().includes('starter') && g.active);
33
+ const activeGrants = creditGrants.filter((g) => g.active && !g.voided);
34
+ const expiredGrants = creditGrants.filter((g) => !g.active || g.voided);
35
+ const handleClaim = React.useCallback(async () => {
36
+ if (!onClaimStarterCredit)
37
+ return;
38
+ setClaiming(true);
39
+ setClaimError(null);
40
+ try {
41
+ await onClaimStarterCredit();
42
+ }
43
+ catch (err) {
44
+ setClaimError(err instanceof Error ? err.message : 'Failed to claim credit');
45
+ }
46
+ finally {
47
+ setClaiming(false);
48
+ }
49
+ }, [onClaimStarterCredit]);
50
+ return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "overflow-hidden rounded-xl border border-border bg-bg-card", children: [_jsxs("div", { className: "border-b border-border p-4", children: [_jsx("h3", { className: "text-lg font-semibold text-text", children: "Credits" }), _jsx("p", { className: "text-sm text-text-muted", children: "View your credit grants, starter credits, and promotional balances" })] }), _jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4 p-4", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs font-semibold uppercase tracking-[0.14em] text-text-muted", children: "Total credit balance" }), _jsx("p", { className: "mt-1 text-3xl font-bold text-text", children: formatCurrency(creditBalance / 100) })] }), onClaimStarterCredit && !hasStarterCredit && (_jsx("button", { type: "button", disabled: claiming, onClick: handleClaim, className: "rounded-lg bg-brand px-5 py-2.5 text-sm font-semibold text-brand-foreground transition hover:bg-brand-hover active:scale-[0.97] disabled:cursor-not-allowed disabled:opacity-60", children: claiming ? 'Claiming...' : 'Claim $5 Starter Credit' }))] }), claimError && (_jsx("div", { className: "border-t border-border px-4 py-2", children: _jsx("p", { className: "text-sm text-danger", children: claimError }) }))] }), activeGrants.length > 0 && (_jsxs("div", { className: "overflow-hidden rounded-xl border border-border bg-bg-card", children: [_jsx("div", { className: "border-b border-border px-4 py-3", children: _jsx("h4", { className: "text-sm font-semibold text-text", children: "Active credits" }) }), _jsx("div", { className: "divide-y divide-border", children: activeGrants.map((grant) => {
51
+ const pct = grant.amountCents > 0
52
+ ? Math.round((grant.remainingCents / grant.amountCents) * 100)
53
+ : 0;
54
+ return (_jsxs("div", { className: "p-4", children: [_jsxs("div", { className: "flex flex-wrap items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-text", children: grant.name }), _jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-2 text-xs text-text-muted", children: [_jsxs("span", { children: [formatCurrency(grant.remainingCents / 100, grant.currency), " of ", formatCurrency(grant.amountCents / 100, grant.currency), " remaining"] }), grant.createdAt && (_jsxs("span", { children: ["Granted ", formatDate(grant.createdAt)] }))] })] }), grant.expiresAt && (_jsx("span", { className: `rounded-full px-3 py-1 text-xs font-semibold ${new Date(grant.expiresAt).getTime() - Date.now() < 7 * 24 * 60 * 60 * 1000
55
+ ? 'bg-warning/10 text-warning'
56
+ : 'bg-bg-elevated text-text-muted'}`, children: formatCountdown(grant.expiresAt) }))] }), _jsxs("div", { className: "mt-3", children: [_jsx("div", { className: "h-2 rounded-full bg-bg-elevated", children: _jsx("div", { className: "h-2 rounded-full bg-brand transition-all", style: { width: `${pct}%` } }) }), _jsxs("p", { className: "mt-1 text-xs text-text-dim", children: [pct, "% remaining"] })] })] }, grant.id));
57
+ }) })] })), expiredGrants.length > 0 && (_jsxs("div", { className: "overflow-hidden rounded-xl border border-border bg-bg-card", children: [_jsx("div", { className: "border-b border-border px-4 py-3", children: _jsx("h4", { className: "text-sm font-semibold text-text-muted", children: "Expired / used credits" }) }), _jsx("div", { className: "divide-y divide-border", children: expiredGrants.map((grant) => (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 px-4 py-3 opacity-60", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-text-muted", children: grant.name }), _jsxs("p", { className: "text-xs text-text-dim", children: [formatCurrency(grant.amountCents / 100, grant.currency), " ", grant.voided ? 'Voided' : 'Expired'] })] }), grant.expiresAt && (_jsxs("p", { className: "text-xs text-text-dim", children: ["Expired ", formatDate(grant.expiresAt)] }))] }, grant.id))) })] })), creditGrants.length === 0 && (_jsxs("div", { className: "rounded-xl border border-dashed border-border p-8 text-center", children: [_jsx("p", { className: "text-sm text-text-muted", children: "No credit grants yet." }), onClaimStarterCredit && !hasStarterCredit && (_jsx("p", { className: "mt-2 text-xs text-text-dim", children: "Claim your $5 starter credit above to get started." }))] }))] }));
58
+ }
@@ -0,0 +1,13 @@
1
+ export interface GuidedSetupProps {
2
+ hasPaymentMethod: boolean;
3
+ hasSubscription: boolean;
4
+ hasSpendAlert: boolean;
5
+ hasCredits: boolean;
6
+ onAddPaymentMethod: () => void;
7
+ onPickPlan: () => void;
8
+ onSetSpendLimit: () => void;
9
+ onBuyCredits: () => void;
10
+ onDismiss: () => void;
11
+ }
12
+ export declare function GuidedSetup(props: GuidedSetupProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=guided-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guided-setup.d.ts","sourceRoot":"","sources":["../../../../src/billing/components/guided-setup.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,OAAO,CAAA;IACzB,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,OAAO,CAAA;IACtB,UAAU,EAAE,OAAO,CAAA;IACnB,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAsHlD"}
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ export function GuidedSetup(props) {
4
+ const steps = [
5
+ {
6
+ label: 'Add a payment method',
7
+ description: 'Required to activate your account and start using Hanzo services.',
8
+ done: props.hasPaymentMethod,
9
+ required: true,
10
+ action: props.onAddPaymentMethod,
11
+ actionLabel: 'Add payment method',
12
+ },
13
+ {
14
+ label: 'Pick a billing mode',
15
+ description: 'Choose a monthly plan for predictable costs, or pay-as-you-go for flexible usage.',
16
+ done: props.hasSubscription,
17
+ required: true,
18
+ action: props.onPickPlan,
19
+ actionLabel: 'Choose plan',
20
+ },
21
+ {
22
+ label: 'Set a spend limit',
23
+ description: 'Prevent surprise bills by setting a monthly budget with automatic alerts.',
24
+ done: props.hasSpendAlert,
25
+ required: false,
26
+ action: props.onSetSpendLimit,
27
+ actionLabel: 'Set limit',
28
+ },
29
+ {
30
+ label: 'Buy credits',
31
+ description: 'Pre-pay for usage at a discount. Credits are applied before card charges.',
32
+ done: props.hasCredits,
33
+ required: false,
34
+ action: props.onBuyCredits,
35
+ actionLabel: 'Buy credits',
36
+ },
37
+ ];
38
+ const completedCount = steps.filter(s => s.done).length;
39
+ return (_jsx("div", { className: "mx-auto max-w-lg py-8", children: _jsxs("div", { className: "rounded-2xl border border-border bg-bg-card p-8", children: [_jsx("h2", { className: "text-lg font-semibold text-text mb-1", children: "Get billing ready" }), _jsxs("p", { className: "text-sm text-text-muted mb-6", children: ["Complete these steps to activate your account. ", completedCount, " of ", steps.length, " done."] }), _jsx("div", { className: "h-1.5 rounded-full bg-bg-elevated mb-8 overflow-hidden", children: _jsx("div", { className: "h-full rounded-full bg-success transition-all duration-500", style: { width: `${(completedCount / steps.length) * 100}%` } }) }), _jsx("div", { className: "space-y-4", children: steps.map((step, i) => (_jsxs("div", { className: `flex items-start gap-4 rounded-xl border p-4 transition ${step.done
40
+ ? 'border-success/20 bg-success/5'
41
+ : 'border-border bg-bg'}`, children: [_jsx("div", { className: `mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold ${step.done
42
+ ? 'bg-success text-white'
43
+ : 'bg-bg-elevated text-text-muted border border-border'}`, children: step.done ? (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("polyline", { points: "20 6 9 17 4 12" }) })) : (i + 1) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 mb-0.5", children: [_jsx("p", { className: `text-sm font-medium ${step.done ? 'text-success' : 'text-text'}`, children: step.label }), !step.required && !step.done && (_jsx("span", { className: "text-[10px] uppercase tracking-wider text-text-dim", children: "Optional" }))] }), _jsx("p", { className: "text-xs text-text-muted", children: step.description })] }), !step.done && (_jsx("button", { type: "button", onClick: step.action, className: "shrink-0 rounded-lg border border-border px-3 py-1.5 text-xs font-medium text-text transition hover:bg-bg-elevated", children: step.actionLabel }))] }, step.label))) }), _jsx("div", { className: "mt-6 text-center", children: _jsx("button", { type: "button", onClick: props.onDismiss, className: "text-sm text-text-muted transition hover:text-text", children: "Skip setup" }) })] }) }));
44
+ }
@@ -10,4 +10,38 @@ export { TaxCompliancePanel } from './tax-compliance-panel';
10
10
  export type { TaxCompliancePanelProps } from './tax-compliance-panel';
11
11
  export { BillingWorkspace } from './billing-workspace';
12
12
  export type { BillingWorkspaceProps } from './billing-workspace';
13
+ export { SpendAlertsPanel } from './spend-alerts';
14
+ export type { SpendAlertsPanelProps } from './spend-alerts';
15
+ export { UsagePanel } from './usage-panel';
16
+ export type { UsagePanelProps } from './usage-panel';
17
+ export { CreditsPanel } from './credits-panel';
18
+ export type { CreditsPanelProps } from './credits-panel';
19
+ export { TransactionsPanel } from './transactions-panel';
20
+ export type { TransactionsPanelProps } from './transactions-panel';
21
+ export { PromotionsPanel } from './promotions-panel';
22
+ export type { PromotionsPanelProps } from './promotions-panel';
23
+ export { SupportTiersPanel } from './support-tiers-panel';
24
+ export type { SupportTiersPanelProps } from './support-tiers-panel';
25
+ export { AccountSwitcher } from './account-switcher';
26
+ export type { AccountSwitcherProps } from './account-switcher';
27
+ export { AccountMembers } from './account-members';
28
+ export type { AccountMembersProps } from './account-members';
29
+ export { StatusBar } from './status-bar';
30
+ export type { StatusBarProps } from './status-bar';
31
+ export { OverviewDashboard } from './overview-dashboard';
32
+ export type { OverviewDashboardProps } from './overview-dashboard';
33
+ export { CostExplorer } from './cost-explorer';
34
+ export type { CostExplorerProps } from './cost-explorer';
35
+ export { InvoicesPayments } from './invoices-payments';
36
+ export type { InvoicesPaymentsProps } from './invoices-payments';
37
+ export { BillingSettings } from './billing-settings';
38
+ export type { BillingSettingsProps } from './billing-settings';
39
+ export { GuidedSetup } from './guided-setup';
40
+ export type { GuidedSetupProps } from './guided-setup';
41
+ export { CardForm } from './card-form';
42
+ export type { CardFormProps } from './card-form';
43
+ export { SquareCardForm } from './square-card-form';
44
+ export type { SquareCardFormProps } from './square-card-form';
45
+ export { AnimatedCard } from './animated-card';
46
+ export type { AnimatedCardProps } from './animated-card';
13
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/billing/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,YAAY,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC/D,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAErE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/billing/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,YAAY,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC/D,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAErE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -4,3 +4,20 @@ export { InvoiceManager } from './invoice-manager';
4
4
  export { BusinessProfilePanel } from './business-profile-panel';
5
5
  export { TaxCompliancePanel } from './tax-compliance-panel';
6
6
  export { BillingWorkspace } from './billing-workspace';
7
+ export { SpendAlertsPanel } from './spend-alerts';
8
+ export { UsagePanel } from './usage-panel';
9
+ export { CreditsPanel } from './credits-panel';
10
+ export { TransactionsPanel } from './transactions-panel';
11
+ export { PromotionsPanel } from './promotions-panel';
12
+ export { SupportTiersPanel } from './support-tiers-panel';
13
+ export { AccountSwitcher } from './account-switcher';
14
+ export { AccountMembers } from './account-members';
15
+ export { StatusBar } from './status-bar';
16
+ export { OverviewDashboard } from './overview-dashboard';
17
+ export { CostExplorer } from './cost-explorer';
18
+ export { InvoicesPayments } from './invoices-payments';
19
+ export { BillingSettings } from './billing-settings';
20
+ export { GuidedSetup } from './guided-setup';
21
+ export { CardForm } from './card-form';
22
+ export { SquareCardForm } from './square-card-form';
23
+ export { AnimatedCard } from './animated-card';
@@ -28,27 +28,27 @@ function invoiceAmount(invoice) {
28
28
  const statusTone = {
29
29
  paid: {
30
30
  label: 'Paid',
31
- className: 'bg-emerald-50 text-emerald-700 ring-emerald-600/20',
31
+ className: 'bg-emerald-500/10 text-emerald-500 ring-emerald-500/20',
32
32
  },
33
33
  pending: {
34
34
  label: 'Pending',
35
- className: 'bg-amber-50 text-amber-700 ring-amber-600/20',
35
+ className: 'bg-amber-500/10 text-amber-500 ring-amber-500/20',
36
36
  },
37
37
  unpaid: {
38
38
  label: 'Unpaid',
39
- className: 'bg-rose-50 text-rose-700 ring-rose-600/20',
39
+ className: 'bg-rose-500/10 text-rose-500 ring-rose-500/20',
40
40
  },
41
41
  failed: {
42
42
  label: 'Failed',
43
- className: 'bg-rose-50 text-rose-700 ring-rose-600/20',
43
+ className: 'bg-rose-500/10 text-rose-500 ring-rose-500/20',
44
44
  },
45
45
  refunded: {
46
46
  label: 'Refunded',
47
- className: 'bg-sky-50 text-sky-700 ring-sky-600/20',
47
+ className: 'bg-sky-500/10 text-sky-500 ring-sky-500/20',
48
48
  },
49
49
  void: {
50
50
  label: 'Void',
51
- className: 'bg-zinc-100 text-zinc-700 ring-zinc-600/20',
51
+ className: 'bg-text-dim/10 text-text-muted ring-text-dim/20',
52
52
  },
53
53
  };
54
54
  const statusOptions = [
@@ -117,15 +117,15 @@ export function InvoiceManager(props) {
117
117
  setBusyInvoiceId(null);
118
118
  }
119
119
  }, [onDownload]);
120
- return (_jsx("div", { className: "space-y-4", children: _jsxs("div", { className: "overflow-hidden rounded-xl border border-zinc-200 bg-white", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 border-b border-zinc-200 p-4", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold text-zinc-900", children: "Invoice history" }), _jsxs("p", { className: "text-sm text-zinc-500", children: [filtered.length, " invoice(s) matching current filters"] })] }), _jsxs("div", { className: "inline-flex rounded-lg border border-zinc-200 p-1", children: [_jsx("button", { type: "button", onClick: () => setView('table'), className: `rounded-md px-3 py-1.5 text-sm transition ${view === 'table'
121
- ? 'bg-zinc-900 text-white'
122
- : 'text-zinc-600 hover:bg-zinc-100'}`, children: "Table" }), _jsx("button", { type: "button", onClick: () => setView('grid'), className: `rounded-md px-3 py-1.5 text-sm transition ${view === 'grid'
123
- ? 'bg-zinc-900 text-white'
124
- : 'text-zinc-600 hover:bg-zinc-100'}`, children: "Grid" })] })] }), _jsxs("div", { className: "flex flex-wrap gap-3 border-b border-zinc-200 p-4", children: [_jsx("input", { type: "search", value: search, onChange: (e) => {
120
+ return (_jsx("div", { className: "space-y-4", children: _jsxs("div", { className: "overflow-hidden rounded-xl border border-border bg-bg-card", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 border-b border-border p-4", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold text-text", children: "Invoice history" }), _jsxs("p", { className: "text-sm text-text-muted", children: [filtered.length, " invoice(s) matching current filters"] })] }), _jsxs("div", { className: "inline-flex rounded-lg border border-border p-1", children: [_jsx("button", { type: "button", onClick: () => setView('table'), className: `rounded-md px-3 py-1.5 text-sm transition ${view === 'table'
121
+ ? 'bg-text text-bg'
122
+ : 'text-text-muted hover:bg-bg-elevated'}`, children: "Table" }), _jsx("button", { type: "button", onClick: () => setView('grid'), className: `rounded-md px-3 py-1.5 text-sm transition ${view === 'grid'
123
+ ? 'bg-text text-bg'
124
+ : 'text-text-muted hover:bg-bg-elevated'}`, children: "Grid" })] })] }), _jsxs("div", { className: "flex flex-wrap gap-3 border-b border-border p-4", children: [_jsx("input", { type: "search", value: search, onChange: (e) => {
125
125
  setSearch(e.target.value);
126
126
  setPage(1);
127
- }, placeholder: "Search invoices by id, number, or status", className: "min-w-[250px] flex-1 rounded-lg border border-zinc-300 px-3 py-2 text-sm outline-none transition focus:border-zinc-900" }), _jsx("select", { value: status, onChange: (e) => {
127
+ }, placeholder: "Search invoices by id, number, or status", className: "min-w-[250px] flex-1 rounded-lg border border-border bg-bg-input px-3 py-2 text-sm text-text outline-none transition focus:border-brand" }), _jsx("select", { value: status, onChange: (e) => {
128
128
  setStatus(e.target.value);
129
129
  setPage(1);
130
- }, className: "rounded-lg border border-zinc-300 px-3 py-2 text-sm text-zinc-700 outline-none transition focus:border-zinc-900", children: statusOptions.map((value) => (_jsx("option", { value: value, children: value === 'all' ? 'All statuses' : statusTone[value].label }, value))) })] }), view === 'table' ? (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full min-w-[720px]", children: [_jsx("thead", { className: "bg-zinc-50", children: _jsxs("tr", { children: [_jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-zinc-500", children: "Invoice" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-zinc-500", children: "Date" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-zinc-500", children: "Amount" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-zinc-500", children: "Status" }), _jsx("th", { className: "px-4 py-3 text-right text-xs font-semibold uppercase tracking-wide text-zinc-500", children: "Actions" })] }) }), _jsx("tbody", { className: "divide-y divide-zinc-200", children: currentPageRows.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 5, className: "px-4 py-10 text-center text-sm text-zinc-500", children: "No invoices found." }) })) : (currentPageRows.map((invoice) => (_jsxs("tr", { className: "bg-white", children: [_jsx("td", { className: "px-4 py-3 text-sm text-zinc-900", children: invoice.number || invoice.invoiceNumber || invoice.id }), _jsx("td", { className: "px-4 py-3 text-sm text-zinc-600", children: formatDate(invoice.date) }), _jsx("td", { className: "px-4 py-3 text-sm font-medium text-zinc-900", children: formatCurrency(invoiceAmount(invoice), invoice.currency || 'USD') }), _jsx("td", { className: "px-4 py-3 text-sm", children: _jsx("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-semibold ring-1 ${statusTone[invoice.status].className}`, children: statusTone[invoice.status].label }) }), _jsx("td", { className: "px-4 py-3 text-right", children: _jsx("button", { type: "button", disabled: !onDownload || busyInvoiceId === invoice.id, onClick: () => handleDownload(invoice), className: "rounded-md border border-zinc-300 px-3 py-1.5 text-xs font-medium text-zinc-700 transition hover:bg-zinc-100 disabled:cursor-not-allowed disabled:opacity-60", children: busyInvoiceId === invoice.id ? 'Downloading' : 'Download PDF' }) })] }, invoice.id)))) })] }) })) : (_jsx("div", { className: "grid gap-3 p-4 md:grid-cols-2 xl:grid-cols-3", children: currentPageRows.length === 0 ? (_jsx("div", { className: "md:col-span-2 xl:col-span-3 rounded-lg border border-zinc-200 p-8 text-center text-sm text-zinc-500", children: "No invoices found." })) : (currentPageRows.map((invoice) => (_jsxs("div", { className: "rounded-lg border border-zinc-200 bg-white p-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsx("p", { className: "font-medium text-zinc-900", children: invoice.number || invoice.invoiceNumber || invoice.id }), _jsx("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-semibold ring-1 ${statusTone[invoice.status].className}`, children: statusTone[invoice.status].label })] }), _jsxs("p", { className: "mt-2 text-sm text-zinc-500", children: ["Issued ", formatDate(invoice.date)] }), _jsx("p", { className: "mt-2 text-xl font-semibold text-zinc-900", children: formatCurrency(invoiceAmount(invoice), invoice.currency || 'USD') }), _jsx("button", { type: "button", disabled: !onDownload || busyInvoiceId === invoice.id, onClick: () => handleDownload(invoice), className: "mt-4 w-full rounded-md border border-zinc-300 px-3 py-2 text-xs font-medium text-zinc-700 transition hover:bg-zinc-100 disabled:cursor-not-allowed disabled:opacity-60", children: busyInvoiceId === invoice.id ? 'Downloading' : 'Download PDF' })] }, invoice.id)))) })), _jsxs("div", { className: "flex items-center justify-between border-t border-zinc-200 p-4", children: [_jsxs("p", { className: "text-xs text-zinc-500", children: ["Page ", Math.min(page, totalPages), " of ", totalPages] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: () => setPage((p) => Math.max(1, p - 1)), disabled: page <= 1, className: "rounded-md border border-zinc-300 px-3 py-1.5 text-xs font-medium text-zinc-700 transition hover:bg-zinc-100 disabled:cursor-not-allowed disabled:opacity-60", children: "Previous" }), _jsx("button", { type: "button", onClick: () => setPage((p) => Math.min(totalPages, p + 1)), disabled: page >= totalPages, className: "rounded-md border border-zinc-300 px-3 py-1.5 text-xs font-medium text-zinc-700 transition hover:bg-zinc-100 disabled:cursor-not-allowed disabled:opacity-60", children: "Next" })] })] })] }) }));
130
+ }, className: "rounded-lg border border-border bg-bg-input px-3 py-2 text-sm text-text-secondary outline-none transition focus:border-brand", children: statusOptions.map((value) => (_jsx("option", { value: value, children: value === 'all' ? 'All statuses' : statusTone[value].label }, value))) })] }), view === 'table' ? (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full min-w-[720px]", children: [_jsx("thead", { className: "bg-bg-elevated", children: _jsxs("tr", { children: [_jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-text-muted", children: "Invoice" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-text-muted", children: "Date" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-text-muted", children: "Amount" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-text-muted", children: "Status" }), _jsx("th", { className: "px-4 py-3 text-right text-xs font-semibold uppercase tracking-wide text-text-muted", children: "Actions" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: currentPageRows.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 5, className: "px-4 py-10 text-center text-sm text-text-muted", children: "No invoices found." }) })) : (currentPageRows.map((invoice) => (_jsxs("tr", { children: [_jsx("td", { className: "px-4 py-3 text-sm text-text", children: invoice.number || invoice.invoiceNumber || invoice.id }), _jsx("td", { className: "px-4 py-3 text-sm text-text-secondary", children: formatDate(invoice.date) }), _jsx("td", { className: "px-4 py-3 text-sm font-medium text-text", children: formatCurrency(invoiceAmount(invoice), invoice.currency || 'USD') }), _jsx("td", { className: "px-4 py-3 text-sm", children: _jsx("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-semibold ring-1 ${statusTone[invoice.status].className}`, children: statusTone[invoice.status].label }) }), _jsx("td", { className: "px-4 py-3 text-right", children: _jsx("button", { type: "button", disabled: !onDownload || busyInvoiceId === invoice.id, onClick: () => handleDownload(invoice), className: "rounded-md border border-border px-3 py-1.5 text-xs font-medium text-text-secondary transition hover:bg-bg-elevated disabled:cursor-not-allowed disabled:opacity-60", children: busyInvoiceId === invoice.id ? 'Downloading\u2026' : 'Download PDF' }) })] }, invoice.id)))) })] }) })) : (_jsx("div", { className: "grid gap-3 p-4 md:grid-cols-2 xl:grid-cols-3", children: currentPageRows.length === 0 ? (_jsx("div", { className: "md:col-span-2 xl:col-span-3 rounded-lg border border-border p-8 text-center text-sm text-text-muted", children: "No invoices found." })) : (currentPageRows.map((invoice) => (_jsxs("div", { className: "rounded-lg border border-border bg-bg-card p-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsx("p", { className: "font-medium text-text", children: invoice.number || invoice.invoiceNumber || invoice.id }), _jsx("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-semibold ring-1 ${statusTone[invoice.status].className}`, children: statusTone[invoice.status].label })] }), _jsxs("p", { className: "mt-2 text-sm text-text-muted", children: ["Issued ", formatDate(invoice.date)] }), _jsx("p", { className: "mt-2 text-xl font-semibold text-text", children: formatCurrency(invoiceAmount(invoice), invoice.currency || 'USD') }), _jsx("button", { type: "button", disabled: !onDownload || busyInvoiceId === invoice.id, onClick: () => handleDownload(invoice), className: "mt-4 w-full rounded-md border border-border px-3 py-2 text-xs font-medium text-text-secondary transition hover:bg-bg-elevated disabled:cursor-not-allowed disabled:opacity-60", children: busyInvoiceId === invoice.id ? 'Downloading\u2026' : 'Download PDF' })] }, invoice.id)))) })), _jsxs("div", { className: "flex items-center justify-between border-t border-border p-4", children: [_jsxs("p", { className: "text-xs text-text-muted", children: ["Page ", Math.min(page, totalPages), " of ", totalPages] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: () => setPage((p) => Math.max(1, p - 1)), disabled: page <= 1, className: "rounded-md border border-border px-3 py-1.5 text-xs font-medium text-text-secondary transition hover:bg-bg-elevated disabled:cursor-not-allowed disabled:opacity-60", children: "Previous" }), _jsx("button", { type: "button", onClick: () => setPage((p) => Math.min(totalPages, p + 1)), disabled: page >= totalPages, className: "rounded-md border border-border px-3 py-1.5 text-xs font-medium text-text-secondary transition hover:bg-bg-elevated disabled:cursor-not-allowed disabled:opacity-60", children: "Next" })] })] })] }) }));
131
131
  }
@@ -0,0 +1,7 @@
1
+ import type { Invoice } from '../types';
2
+ export interface InvoicesPaymentsProps {
3
+ invoices: Invoice[];
4
+ onDownloadInvoice?: (invoice: Invoice) => Promise<void>;
5
+ }
6
+ export declare function InvoicesPayments(props: InvoicesPaymentsProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=invoices-payments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices-payments.d.ts","sourceRoot":"","sources":["../../../../src/billing/components/invoices-payments.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACxD;AA8BD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAkG5D"}
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useEffect, useRef } from 'react';
4
+ function fmt(amount, currency = 'usd') {
5
+ return new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(amount);
6
+ }
7
+ function fmtDate(d) {
8
+ return new Date(d).toLocaleDateString('en-US', { day: 'numeric', month: 'short', year: 'numeric' });
9
+ }
10
+ const PAGE_SIZE = 20;
11
+ /* -- Fade-in animation -- */
12
+ function FadeIn({ children, delay = 0 }) {
13
+ const ref = useRef(null);
14
+ useEffect(() => {
15
+ const el = ref.current;
16
+ if (!el)
17
+ return;
18
+ el.style.opacity = '0';
19
+ el.style.transform = 'translateY(8px)';
20
+ const timer = setTimeout(() => {
21
+ el.style.transition = 'opacity 0.4s ease, transform 0.4s ease';
22
+ el.style.opacity = '1';
23
+ el.style.transform = 'translateY(0)';
24
+ }, delay);
25
+ return () => clearTimeout(timer);
26
+ }, [delay]);
27
+ return _jsx("div", { ref: ref, children: children });
28
+ }
29
+ export function InvoicesPayments(props) {
30
+ const [page, setPage] = useState(0);
31
+ const { invoices } = props;
32
+ const totalPages = Math.ceil(invoices.length / PAGE_SIZE);
33
+ const pageInvoices = invoices.slice(page * PAGE_SIZE, (page + 1) * PAGE_SIZE);
34
+ return (_jsx(FadeIn, { delay: 0, children: _jsxs("div", { className: "rounded-2xl border border-white/[0.08] bg-[#141419] overflow-hidden", children: [_jsx("div", { className: "px-6 py-5", children: _jsx("h3", { className: "text-[15px] font-semibold text-white", children: "All invoices" }) }), _jsx("div", { className: "border-t border-white/[0.06]", children: invoices.length === 0 ? (_jsxs("div", { className: "py-20 flex flex-col items-center justify-center gap-3", children: [_jsx("div", { className: "flex h-14 w-14 items-center justify-center rounded-2xl border border-white/[0.08] bg-white/[0.03] text-white/20", children: _jsxs("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z" }), _jsx("path", { d: "M8 7h8" }), _jsx("path", { d: "M8 11h8" }), _jsx("path", { d: "M8 15h4" })] }) }), _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-sm font-medium text-white/40", children: "No invoices yet" }), _jsx("p", { className: "mt-1 text-[13px] text-white/25", children: "Invoices appear here once you subscribe or make a purchase." })] })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-white/[0.06] text-left", children: [_jsx("th", { className: "px-6 py-3 text-[13px] font-medium text-white/40", children: "Invoice #" }), _jsx("th", { className: "px-6 py-3 text-[13px] font-medium text-white/40", children: "Date" }), _jsx("th", { className: "px-6 py-3 text-[13px] font-medium text-white/40", children: "Type" }), _jsx("th", { className: "px-6 py-3 text-[13px] font-medium text-white/40 text-right", children: "Amount" }), _jsx("th", { className: "px-6 py-3 text-[13px] font-medium text-white/40 text-right", children: "Status" })] }) }), _jsx("tbody", { children: pageInvoices.map((inv, i) => (_jsxs("tr", { className: "group border-b border-white/[0.04] last:border-0 hover:bg-white/[0.02] transition-colors cursor-pointer", onClick: () => props.onDownloadInvoice?.(inv), children: [_jsxs("td", { className: "px-6 py-4 text-[13px] text-white font-medium", children: ["#", inv.invoiceNumber || inv.number || inv.id.slice(0, 15)] }), _jsx("td", { className: "px-6 py-4 text-[13px] text-white/50", children: fmtDate(inv.date) }), _jsx("td", { className: "px-6 py-4 text-[13px] text-white/50", children: inv.items?.length === 1 ? 'Single Purchase' : 'Monthly Invoice' }), _jsx("td", { className: "px-6 py-4 text-[13px] text-white font-semibold text-right tabular-nums", children: fmt(inv.total, inv.currency) }), _jsx("td", { className: "px-6 py-4 text-right", children: _jsx(StatusBadge, { status: inv.status }) })] }, inv.id))) })] }) }), totalPages > 1 && (_jsxs("div", { className: "border-t border-white/[0.06] px-6 py-3 flex items-center justify-between bg-white/[0.02]", children: [_jsxs("p", { className: "text-[13px] text-white/30", children: ["Showing ", page * PAGE_SIZE + 1, '\u2013', Math.min((page + 1) * PAGE_SIZE, invoices.length), " of ", invoices.length] }), _jsxs("div", { className: "flex gap-1.5", children: [_jsx("button", { type: "button", disabled: page === 0, onClick: () => setPage(p => p - 1), className: "rounded-full border border-white/[0.1] px-3.5 py-1.5 text-[13px] font-medium text-white/70 transition-all hover:bg-white/[0.05] hover:border-white/[0.2] disabled:opacity-30 disabled:cursor-not-allowed active:scale-[0.97]", children: "Previous" }), _jsx("button", { type: "button", disabled: page >= totalPages - 1, onClick: () => setPage(p => p + 1), className: "rounded-full border border-white/[0.1] px-3.5 py-1.5 text-[13px] font-medium text-white/70 transition-all hover:bg-white/[0.05] hover:border-white/[0.2] disabled:opacity-30 disabled:cursor-not-allowed active:scale-[0.97]", children: "Next" })] })] }))] })) })] }) }));
35
+ }
36
+ function StatusBadge({ status }) {
37
+ const isPaid = status === 'paid' || status === 'active';
38
+ const isFailed = status === 'failed' || status === 'uncollectible';
39
+ return (_jsx("span", { className: `inline-flex items-center rounded-full px-3 py-1 text-[12px] font-medium transition-colors ${isPaid
40
+ ? 'bg-white/[0.08] text-white/80'
41
+ : isFailed
42
+ ? 'bg-red-500/15 text-red-400'
43
+ : 'bg-amber-500/15 text-amber-400'}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
44
+ }
@@ -0,0 +1,31 @@
1
+ import type { Subscription, SubscriptionPlan, PaymentMethod, UsageSummary, CreditGrant, Invoice, SpendAlert, DiscountCode, BusinessProfile, Balance } from '../types';
2
+ export interface OverviewDashboardProps {
3
+ subscription: Subscription;
4
+ plans: SubscriptionPlan[];
5
+ paymentMethods: PaymentMethod[];
6
+ usage: UsageSummary | null;
7
+ usageLoading: boolean;
8
+ balance: Balance | null;
9
+ creditGrants: CreditGrant[];
10
+ creditBalance: number;
11
+ starterCredit: CreditGrant | null;
12
+ onAddFunds: (amount: number) => Promise<void>;
13
+ onClaimStarterCredit?: () => Promise<void>;
14
+ isAdmin: boolean;
15
+ onGrantCredit?: (email: string, amount: number) => Promise<void>;
16
+ userEmail: string;
17
+ invoices: Invoice[];
18
+ spendAlerts: SpendAlert[];
19
+ onNavigate: (target: string) => void;
20
+ onUpgrade?: (planId: string) => Promise<void>;
21
+ onDowngrade?: (planId: string) => Promise<void>;
22
+ onCancel?: (reason: string, feedback?: string) => Promise<void>;
23
+ onApplyDiscount?: (code: string) => Promise<DiscountCode | null>;
24
+ businessProfile: BusinessProfile;
25
+ onSaveBusinessProfile?: (profile: BusinessProfile) => Promise<void>;
26
+ onAddPaymentMethod?: (method: PaymentMethod) => Promise<void>;
27
+ onRemovePaymentMethod?: (id: string) => Promise<void>;
28
+ onSetDefaultPaymentMethod?: (id: string) => Promise<void>;
29
+ }
30
+ export declare function OverviewDashboard(props: OverviewDashboardProps): import("react/jsx-runtime").JSX.Element;
31
+ //# sourceMappingURL=overview-dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview-dashboard.d.ts","sourceRoot":"","sources":["../../../../src/billing/components/overview-dashboard.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,eAAe,EACf,OAAO,EACR,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAA;IACzB,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,WAAW,GAAG,IAAI,CAAA;IACjC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAChE,eAAe,EAAE,eAAe,CAAA;IAChC,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,yBAAyB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1D;AAqED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CA6S9D"}