@busiverse/ui 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -1
- package/dist/api/createGatewayClient.d.ts +9 -0
- package/dist/api/createGatewayClient.d.ts.map +1 -1
- package/dist/{chunk-BEOTRCGO.js → chunk-SXD6EH2C.js} +0 -1
- package/dist/components/billing/ServicePricingExplorer.d.ts +13 -0
- package/dist/components/billing/ServicePricingExplorer.d.ts.map +1 -0
- package/dist/components/billing/index.d.ts +1 -0
- package/dist/components/billing/index.d.ts.map +1 -1
- package/dist/i18n/RegionSelector.d.ts +9 -0
- package/dist/i18n/RegionSelector.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +2 -1
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7854 -76
- package/dist/pricing/index.d.ts +4 -0
- package/dist/pricing/index.d.ts.map +1 -0
- package/dist/pricing/pricingFormat.d.ts +19 -0
- package/dist/pricing/pricingFormat.d.ts.map +1 -0
- package/dist/pricing/regions.d.ts +9 -0
- package/dist/pricing/regions.d.ts.map +1 -0
- package/dist/pricing/servicePricingCatalog.d.ts +166 -0
- package/dist/pricing/servicePricingCatalog.d.ts.map +1 -0
- package/dist/registry/services.d.ts.map +1 -1
- package/dist/styles.css +43 -4
- package/dist/tailwind/index.js +1 -2
- package/package.json +4 -4
- package/dist/chunk-BEOTRCGO.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/tailwind/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pricing/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { BusiverseRegionContext } from "../i18n/types";
|
|
2
|
+
import type { BusiversePricingRow, PricingAudience } from "./servicePricingCatalog";
|
|
3
|
+
export interface PriceDisplayOptions {
|
|
4
|
+
audience?: PricingAudience;
|
|
5
|
+
useLocalCurrency?: boolean;
|
|
6
|
+
maximumFractionDigits?: number;
|
|
7
|
+
minimumFractionDigits?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const cadenceLabels: Record<string, string>;
|
|
10
|
+
export declare function labelCadence(cadence: string): string;
|
|
11
|
+
export declare function convertUsdToRegionCurrency(usd: number, region: Pick<BusiverseRegionContext, "countryCode">): number;
|
|
12
|
+
export declare function formatUsdAsRegionCurrency(usd: number, region: BusiverseRegionContext, options?: Intl.NumberFormatOptions): string;
|
|
13
|
+
export declare function getRowPriceUsd(row: BusiversePricingRow, audience?: PricingAudience): number;
|
|
14
|
+
export declare function getRowDirectCostUsd(row: BusiversePricingRow, audience?: PricingAudience): number;
|
|
15
|
+
export declare function getRowGrossMargin(row: BusiversePricingRow, audience?: PricingAudience): number;
|
|
16
|
+
export declare function formatPricingValue(usd: number, region: BusiverseRegionContext, options?: PriceDisplayOptions): string;
|
|
17
|
+
export declare function formatMargin(value: number, locale?: string): string;
|
|
18
|
+
export declare function describeTimeEquivalents(row: BusiversePricingRow, region: BusiverseRegionContext): string;
|
|
19
|
+
//# sourceMappingURL=pricingFormat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricingFormat.d.ts","sourceRoot":"","sources":["../../src/pricing/pricingFormat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEpF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiBhD,CAAC;AAEF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,GAAG,MAAM,CAGnH;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAGjI;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,GAAE,eAA4B,GAAG,MAAM,CAEvG;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,GAAE,eAA4B,GAAG,MAAM,CAE5G;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,GAAE,eAA4B,GAAG,MAAM,CAE1G;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAYzH;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAU,GAAG,MAAM,CAEpE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAYxG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BusiverseRegionContext } from "../i18n/types";
|
|
2
|
+
export interface BusiverseSupportedRegion extends BusiverseRegionContext {
|
|
3
|
+
label: string;
|
|
4
|
+
exchangeRateFromUsd: number;
|
|
5
|
+
pricingNote?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const busiverseSupportedRegions: BusiverseSupportedRegion[];
|
|
8
|
+
export declare function getSupportedRegion(countryCode?: string): BusiverseSupportedRegion;
|
|
9
|
+
//# sourceMappingURL=regions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regions.d.ts","sourceRoot":"","sources":["../../src/pricing/regions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE5D,MAAM,WAAW,wBAAyB,SAAQ,sBAAsB;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,yBAAyB,EAAE,wBAAwB,EAU/D,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,wBAAwB,CAEjF"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { BusiverseServiceDefinition } from "../registry/services";
|
|
2
|
+
export type PricingCadence = "PER_ATTEMPT" | "PER_CONNECTOR_MONTH" | "PER_EVENT" | "PER_GB_MONTH" | "PER_JOB" | "PER_KB" | "PER_MB" | "PER_MESSAGE" | "PER_MINUTE" | "PER_MONTH" | "PER_QUERY" | "PER_RECIPIENT" | "PER_SEAT_MONTH" | "PER_SEGMENT" | "PER_TRADE" | "PER_WEEK";
|
|
3
|
+
export interface BusiversePricingRow {
|
|
4
|
+
service: string;
|
|
5
|
+
operationCode: string;
|
|
6
|
+
displayName: string;
|
|
7
|
+
category: string;
|
|
8
|
+
unit: string;
|
|
9
|
+
cadence: PricingCadence | string;
|
|
10
|
+
standaloneUsd: number;
|
|
11
|
+
busiverseUsd: number;
|
|
12
|
+
passThrough: boolean;
|
|
13
|
+
billTrigger: string;
|
|
14
|
+
currency: "USD" | string;
|
|
15
|
+
costPercent: number;
|
|
16
|
+
standaloneDirectCostUsd: number;
|
|
17
|
+
standaloneProfitUsd: number;
|
|
18
|
+
standaloneGrossMargin: number;
|
|
19
|
+
busiverseDirectCostUsd: number;
|
|
20
|
+
busiverseProfitUsd: number;
|
|
21
|
+
busiverseGrossMargin: number;
|
|
22
|
+
oneOffUsd: number | null;
|
|
23
|
+
perSecondUsd: number | null;
|
|
24
|
+
perMinuteUsd: number | null;
|
|
25
|
+
perHourUsd: number | null;
|
|
26
|
+
perDayUsd: number | null;
|
|
27
|
+
perWeekUsd: number | null;
|
|
28
|
+
perMonthUsd: number | null;
|
|
29
|
+
perQuarterUsd: number | null;
|
|
30
|
+
perYearUsd: number | null;
|
|
31
|
+
}
|
|
32
|
+
export type PricingAudience = "external" | "internal";
|
|
33
|
+
export interface BusiverseServicePricingSummary {
|
|
34
|
+
service: string;
|
|
35
|
+
operationCount: number;
|
|
36
|
+
categories: string[];
|
|
37
|
+
cadences: string[];
|
|
38
|
+
hasPassThrough: boolean;
|
|
39
|
+
minStandaloneUsd: number;
|
|
40
|
+
maxStandaloneUsd: number;
|
|
41
|
+
minBusiverseUsd: number;
|
|
42
|
+
maxBusiverseUsd: number;
|
|
43
|
+
minMonthlyUsd: number | null;
|
|
44
|
+
maxMonthlyUsd: number | null;
|
|
45
|
+
minGrossMargin: number;
|
|
46
|
+
maxGrossMargin: number;
|
|
47
|
+
minDirectCostUsd: number;
|
|
48
|
+
maxDirectCostUsd: number;
|
|
49
|
+
}
|
|
50
|
+
export declare const busiverseServicePricingCatalog: ({
|
|
51
|
+
service: string;
|
|
52
|
+
operationCode: string;
|
|
53
|
+
displayName: string;
|
|
54
|
+
category: string;
|
|
55
|
+
unit: string;
|
|
56
|
+
cadence: string;
|
|
57
|
+
standaloneUsd: number;
|
|
58
|
+
busiverseUsd: number;
|
|
59
|
+
passThrough: false;
|
|
60
|
+
billTrigger: string;
|
|
61
|
+
currency: string;
|
|
62
|
+
costPercent: number;
|
|
63
|
+
standaloneDirectCostUsd: number;
|
|
64
|
+
standaloneProfitUsd: number;
|
|
65
|
+
standaloneGrossMargin: number;
|
|
66
|
+
busiverseDirectCostUsd: number;
|
|
67
|
+
busiverseProfitUsd: number;
|
|
68
|
+
busiverseGrossMargin: number;
|
|
69
|
+
oneOffUsd: number;
|
|
70
|
+
perSecondUsd: null;
|
|
71
|
+
perMinuteUsd: null;
|
|
72
|
+
perHourUsd: null;
|
|
73
|
+
perDayUsd: null;
|
|
74
|
+
perWeekUsd: null;
|
|
75
|
+
perMonthUsd: null;
|
|
76
|
+
perQuarterUsd: null;
|
|
77
|
+
perYearUsd: null;
|
|
78
|
+
} | {
|
|
79
|
+
service: string;
|
|
80
|
+
operationCode: string;
|
|
81
|
+
displayName: string;
|
|
82
|
+
category: string;
|
|
83
|
+
unit: string;
|
|
84
|
+
cadence: string;
|
|
85
|
+
standaloneUsd: number;
|
|
86
|
+
busiverseUsd: number;
|
|
87
|
+
passThrough: false;
|
|
88
|
+
billTrigger: string;
|
|
89
|
+
currency: string;
|
|
90
|
+
costPercent: number;
|
|
91
|
+
standaloneDirectCostUsd: number;
|
|
92
|
+
standaloneProfitUsd: number;
|
|
93
|
+
standaloneGrossMargin: number;
|
|
94
|
+
busiverseDirectCostUsd: number;
|
|
95
|
+
busiverseProfitUsd: number;
|
|
96
|
+
busiverseGrossMargin: number;
|
|
97
|
+
oneOffUsd: null;
|
|
98
|
+
perSecondUsd: number;
|
|
99
|
+
perMinuteUsd: number;
|
|
100
|
+
perHourUsd: number;
|
|
101
|
+
perDayUsd: number;
|
|
102
|
+
perWeekUsd: number;
|
|
103
|
+
perMonthUsd: number;
|
|
104
|
+
perQuarterUsd: number;
|
|
105
|
+
perYearUsd: number;
|
|
106
|
+
} | {
|
|
107
|
+
service: string;
|
|
108
|
+
operationCode: string;
|
|
109
|
+
displayName: string;
|
|
110
|
+
category: string;
|
|
111
|
+
unit: string;
|
|
112
|
+
cadence: string;
|
|
113
|
+
standaloneUsd: number;
|
|
114
|
+
busiverseUsd: number;
|
|
115
|
+
passThrough: true;
|
|
116
|
+
billTrigger: string;
|
|
117
|
+
currency: string;
|
|
118
|
+
costPercent: number;
|
|
119
|
+
standaloneDirectCostUsd: number;
|
|
120
|
+
standaloneProfitUsd: number;
|
|
121
|
+
standaloneGrossMargin: number;
|
|
122
|
+
busiverseDirectCostUsd: number;
|
|
123
|
+
busiverseProfitUsd: number;
|
|
124
|
+
busiverseGrossMargin: number;
|
|
125
|
+
oneOffUsd: number;
|
|
126
|
+
perSecondUsd: null;
|
|
127
|
+
perMinuteUsd: null;
|
|
128
|
+
perHourUsd: null;
|
|
129
|
+
perDayUsd: null;
|
|
130
|
+
perWeekUsd: null;
|
|
131
|
+
perMonthUsd: null;
|
|
132
|
+
perQuarterUsd: null;
|
|
133
|
+
perYearUsd: null;
|
|
134
|
+
} | {
|
|
135
|
+
service: string;
|
|
136
|
+
operationCode: string;
|
|
137
|
+
displayName: string;
|
|
138
|
+
category: string;
|
|
139
|
+
unit: string;
|
|
140
|
+
cadence: string;
|
|
141
|
+
standaloneUsd: number;
|
|
142
|
+
busiverseUsd: number;
|
|
143
|
+
passThrough: true;
|
|
144
|
+
billTrigger: string;
|
|
145
|
+
currency: string;
|
|
146
|
+
costPercent: number;
|
|
147
|
+
standaloneDirectCostUsd: number;
|
|
148
|
+
standaloneProfitUsd: number;
|
|
149
|
+
standaloneGrossMargin: number;
|
|
150
|
+
busiverseDirectCostUsd: number;
|
|
151
|
+
busiverseProfitUsd: number;
|
|
152
|
+
busiverseGrossMargin: number;
|
|
153
|
+
oneOffUsd: null;
|
|
154
|
+
perSecondUsd: number;
|
|
155
|
+
perMinuteUsd: number;
|
|
156
|
+
perHourUsd: number;
|
|
157
|
+
perDayUsd: number;
|
|
158
|
+
perWeekUsd: number;
|
|
159
|
+
perMonthUsd: number;
|
|
160
|
+
perQuarterUsd: number;
|
|
161
|
+
perYearUsd: number;
|
|
162
|
+
})[];
|
|
163
|
+
export declare function getPricingRowsByService(service: string): BusiversePricingRow[];
|
|
164
|
+
export declare function getServicePricingSummary(service: string): BusiverseServicePricingSummary | undefined;
|
|
165
|
+
export declare function getServicePricingSummaries(services?: BusiverseServiceDefinition[]): BusiverseServicePricingSummary[];
|
|
166
|
+
//# sourceMappingURL=servicePricingCatalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicePricingCatalog.d.ts","sourceRoot":"","sources":["../../src/pricing/servicePricingCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,qBAAqB,GACrB,WAAW,GACX,cAAc,GACd,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,YAAY,GACZ,WAAW,GACX,WAAW,GACX,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtD,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8xOV,CAAC;AAMlC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAE9E;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,8BAA8B,GAAG,SAAS,CAqBpG;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,0BAA0B,EAAE,GAAG,8BAA8B,EAAE,CAGpH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/registry/services.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAChC,MAAM,GACN,UAAU,GACV,SAAS,GACT,UAAU,GACV,UAAU,GACV,cAAc,GACd,YAAY,GACZ,WAAW,GACX,YAAY,CAAC;AAEjB,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,wBAAwB,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,iBAAiB,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/registry/services.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAChC,MAAM,GACN,UAAU,GACV,SAAS,GACT,UAAU,GACV,UAAU,GACV,cAAc,GACd,YAAY,GACZ,WAAW,GACX,YAAY,CAAC;AAEjB,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,wBAAwB,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,iBAAiB,EAAE,0BAA0B,EAgCzD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,0BAA0B,GAAG,SAAS,CAEvF"}
|
package/dist/styles.css
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
|
|
3
|
-
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap');
|
|
4
|
-
|
|
1
|
+
/* Font loading is intentionally app-owned. Self-host or load Space Grotesk, Inter, and JetBrains Mono in each frontend. */
|
|
5
2
|
:root {
|
|
6
3
|
--color-brand-blue: #3B82F6;
|
|
7
4
|
--color-brand-violet: #8B5CF6;
|
|
@@ -214,3 +211,45 @@ img, svg { max-width: 100%; display: block; }
|
|
|
214
211
|
.busiverse-logo { display: inline-flex; line-height: 0; }
|
|
215
212
|
.busiverse-logo svg { width: 100%; height: auto; }
|
|
216
213
|
.busiverse-sidebar-logo { width: 36px; height: 36px; flex: 0 0 36px; }
|
|
214
|
+
|
|
215
|
+
.busiverse-region-selector { display: grid; gap: 8px; min-width: 220px; color: #CBD5E1; font-size: 13px; font-weight: 600; }
|
|
216
|
+
.busiverse-region-selector select { min-height: 42px; border-radius: 10px; border: 1px solid rgba(255,255,255,.14); background: rgba(255,255,255,.06); color: white; padding: 0 12px; }
|
|
217
|
+
.busiverse-region-selector option { background: #0F172A; color: white; }
|
|
218
|
+
|
|
219
|
+
.busiverse-pricing-explorer { padding: 96px 32px; background: linear-gradient(180deg,#020617 0%,#0F172A 100%); }
|
|
220
|
+
.busiverse-pricing-header { max-width: 1280px; margin: 0 auto 32px; display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; }
|
|
221
|
+
.busiverse-pricing-header h2 { margin: 14px 0 10px; font-family: var(--font-display); font-size: clamp(32px, 5vw, 56px); line-height: 1.1; letter-spacing: -.015em; }
|
|
222
|
+
.busiverse-pricing-header p { margin: 0; color: #CBD5E1; max-width: 820px; line-height: 1.65; }
|
|
223
|
+
.busiverse-pricing-controls { max-width: 1280px; margin: 0 auto 18px; display: flex; gap: 12px; align-items: center; justify-content: space-between; }
|
|
224
|
+
.busiverse-pricing-controls > input { max-width: 520px; }
|
|
225
|
+
.busiverse-pricing-toggle { display: inline-flex; gap: 8px; flex-wrap: wrap; }
|
|
226
|
+
.busiverse-pricing-tabs { max-width: 1280px; margin: 0 auto 32px; display: flex; gap: 8px; flex-wrap: wrap; }
|
|
227
|
+
.busiverse-pricing-tabs button { border-radius: 999px; border: 1px solid rgba(255,255,255,.12); background: rgba(255,255,255,.05); color: #CBD5E1; padding: 8px 13px; cursor: pointer; font-size: 13px; font-weight: 600; }
|
|
228
|
+
.busiverse-pricing-tabs button:hover, .busiverse-pricing-tabs button.is-active { color: white; border-color: rgba(59,130,246,.55); background: linear-gradient(90deg,rgba(37,99,235,.35),rgba(124,58,237,.35)); }
|
|
229
|
+
.busiverse-pricing-grid { max-width: 1280px; margin: 0 auto 28px; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; }
|
|
230
|
+
.busiverse-pricing-card { display: grid; gap: 14px; }
|
|
231
|
+
.busiverse-pricing-card-topline { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
|
|
232
|
+
.busiverse-pricing-card h3 { margin: 0; font-family: var(--font-display); font-size: 22px; }
|
|
233
|
+
.busiverse-pricing-card p { margin: 0; color: #CBD5E1; line-height: 1.55; }
|
|
234
|
+
.busiverse-pricing-card-price { display: grid; gap: 4px; padding: 14px; border-radius: 14px; background: rgba(59,130,246,.10); border: 1px solid rgba(59,130,246,.20); }
|
|
235
|
+
.busiverse-pricing-card-price span, .busiverse-pricing-card-metric span { color: #94A3B8; font-size: 12px; text-transform: uppercase; letter-spacing: .06em; }
|
|
236
|
+
.busiverse-pricing-card-price strong { font-family: var(--font-display); font-size: 24px; line-height: 1.2; }
|
|
237
|
+
.busiverse-pricing-card-metric { display: flex; align-items: center; justify-content: space-between; gap: 12px; color: #F1F5F9; border-top: 1px solid rgba(255,255,255,.08); padding-top: 10px; }
|
|
238
|
+
.busiverse-pricing-card-metric b { text-align: right; font-weight: 700; }
|
|
239
|
+
.busiverse-pricing-card-footer { color: #94A3B8; font-size: 13px; }
|
|
240
|
+
.busiverse-pricing-table-card { max-width: 1280px; margin: 0 auto; }
|
|
241
|
+
.busiverse-pricing-table-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; margin-bottom: 18px; }
|
|
242
|
+
.busiverse-pricing-table-heading h3 { margin: 0 0 6px; font-family: var(--font-display); font-size: 26px; }
|
|
243
|
+
.busiverse-pricing-table-heading p { margin: 0; color: #CBD5E1; line-height: 1.55; }
|
|
244
|
+
.busiverse-pricing-code { display: block; margin-top: 4px; color: #94A3B8; font-family: var(--font-code); font-size: 11px; }
|
|
245
|
+
.busiverse-pricing-table-more { display: flex; justify-content: center; margin-top: 18px; }
|
|
246
|
+
|
|
247
|
+
@media (max-width: 1100px) {
|
|
248
|
+
.busiverse-pricing-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
249
|
+
}
|
|
250
|
+
@media (max-width: 760px) {
|
|
251
|
+
.busiverse-pricing-explorer { padding: 72px 20px; }
|
|
252
|
+
.busiverse-pricing-header, .busiverse-pricing-controls, .busiverse-pricing-table-heading { flex-direction: column; align-items: stretch; }
|
|
253
|
+
.busiverse-pricing-grid { grid-template-columns: 1fr; }
|
|
254
|
+
.busiverse-pricing-controls > input { max-width: none; }
|
|
255
|
+
}
|
package/dist/tailwind/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
busiverseRadius,
|
|
4
4
|
busiverseSpacing,
|
|
5
5
|
busiverseTypography
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-SXD6EH2C.js";
|
|
7
7
|
|
|
8
8
|
// src/tailwind/index.ts
|
|
9
9
|
var busiverseTailwindPreset = {
|
|
@@ -27,4 +27,3 @@ var busiverseTailwindPreset = {
|
|
|
27
27
|
export {
|
|
28
28
|
busiverseTailwindPreset
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@busiverse/ui",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"author": "Joel Julius Okoromi <okmarq@gmail.com> (https://busiversehq.com)",
|
|
5
|
-
"description": "BUSIVERSE shared React UI, design tokens,
|
|
5
|
+
"description": "BUSIVERSE shared React UI, design tokens, pricing, i18n, auth helpers, and product shell. Network-neutral core; Gateway transport is app-injected.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"sideEffects": [
|
|
8
8
|
"./dist/styles.css"
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"clean": "node scripts/clean.mjs",
|
|
33
|
-
"build": "npm run clean && tsup src/index.ts src/tailwind/index.ts --format esm --
|
|
33
|
+
"build": "npm run clean && tsup src/index.ts src/tailwind/index.ts --format esm --target es2022 && tsc -p tsconfig.build.json && node scripts/copy-static.mjs",
|
|
34
34
|
"typecheck": "tsc --noEmit",
|
|
35
35
|
"pack:local": "npm pack",
|
|
36
36
|
"prepublishOnly": "npm run typecheck && npm run build && npm pack --dry-run"
|
|
@@ -81,4 +81,4 @@
|
|
|
81
81
|
"overrides": {
|
|
82
82
|
"esbuild": "0.28.1"
|
|
83
83
|
}
|
|
84
|
-
}
|
|
84
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tokens/colors.ts","../src/tokens/typography.ts","../src/tokens/spacing.ts","../src/tokens/radius.ts"],"sourcesContent":["export const busiverseColors = {\n brand: {\n blue: \"#3B82F6\",\n violet: \"#8B5CF6\",\n cyan: \"#06B6D4\",\n },\n action: {\n blue: \"#2563EB\",\n blueHover: \"#1D4ED8\",\n violet: \"#7C3AED\",\n violetHover: \"#6D28D9\",\n cyan: \"#0E7490\",\n cyanHover: \"#155E75\",\n },\n background: {\n primary: \"#020617\",\n secondary: \"#0F172A\",\n tertiary: \"#1E293B\",\n brandDark: \"#172554\",\n lightPrimary: \"#FFFFFF\",\n lightSecondary: \"#F8FAFC\",\n lightTertiary: \"#F1F5F9\",\n },\n text: {\n primaryDark: \"#FFFFFF\",\n secondaryDark: \"#CBD5E1\",\n mutedDark: \"#94A3B8\",\n disabledDark: \"#64748B\",\n primaryLight: \"#020617\",\n secondaryLight: \"#334155\",\n mutedLight: \"#64748B\",\n },\n border: {\n darkSubtle: \"rgba(255, 255, 255, 0.10)\",\n darkMedium: \"rgba(255, 255, 255, 0.20)\",\n darkStrong: \"rgba(255, 255, 255, 0.32)\",\n lightSubtle: \"#E2E8F0\",\n lightMedium: \"#CBD5E1\",\n lightStrong: \"#94A3B8\",\n },\n} as const;\n","export const busiverseTypography = {\n fontDisplay: '\"Space Grotesk\", \"Inter\", system-ui, sans-serif',\n fontBody: '\"Inter\", system-ui, sans-serif',\n fontCode: '\"JetBrains Mono\", \"SFMono-Regular\", Consolas, monospace',\n desktop: {\n display1: { fontSize: \"72px\", lineHeight: \"1.1\", fontWeight: 700, letterSpacing: \"-0.02em\" },\n display2: { fontSize: \"60px\", lineHeight: \"1.1\", fontWeight: 700, letterSpacing: \"-0.015em\" },\n h1: { fontSize: \"48px\", lineHeight: \"1.15\", fontWeight: 700, letterSpacing: \"-0.01em\" },\n h2: { fontSize: \"36px\", lineHeight: \"1.2\", fontWeight: 600, letterSpacing: \"-0.005em\" },\n h3: { fontSize: \"24px\", lineHeight: \"1.3\", fontWeight: 600 },\n body: { fontSize: \"16px\", lineHeight: \"1.6\", fontWeight: 400 },\n },\n mobile: {\n display1: { fontSize: \"48px\", lineHeight: \"1.1\", fontWeight: 700 },\n h1: { fontSize: \"32px\", lineHeight: \"1.15\", fontWeight: 700 },\n h2: { fontSize: \"28px\", lineHeight: \"1.2\", fontWeight: 600 },\n body: { fontSize: \"16px\", lineHeight: \"1.6\", fontWeight: 400 },\n },\n} as const;\n","export const busiverseSpacing = {\n 1: \"4px\",\n 2: \"8px\",\n 3: \"12px\",\n 4: \"16px\",\n 5: \"20px\",\n 6: \"24px\",\n 8: \"32px\",\n 10: \"40px\",\n 12: \"48px\",\n 16: \"64px\",\n 20: \"80px\",\n 24: \"96px\",\n 32: \"128px\",\n} as const;\n\nexport const busiverseContainers = {\n sm: \"768px\",\n md: \"1024px\",\n lg: \"1280px\",\n xl: \"1440px\",\n} as const;\n","export const busiverseRadius = {\n sm: \"6px\",\n md: \"8px\",\n lg: \"12px\",\n xl: \"16px\",\n \"2xl\": \"24px\",\n full: \"9999px\",\n} as const;\n"],"mappings":";AAAO,IAAM,kBAAkB;AAAA,EAC7B,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,WAAW;AAAA,IACX,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,eAAe;AAAA,EACjB;AAAA,EACA,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,eAAe;AAAA,IACf,WAAW;AAAA,IACX,cAAc;AAAA,IACd,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF;;;ACxCO,IAAM,sBAAsB;AAAA,EACjC,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,SAAS;AAAA,IACP,UAAU,EAAE,UAAU,QAAQ,YAAY,OAAO,YAAY,KAAK,eAAe,UAAU;AAAA,IAC3F,UAAU,EAAE,UAAU,QAAQ,YAAY,OAAO,YAAY,KAAK,eAAe,WAAW;AAAA,IAC5F,IAAI,EAAE,UAAU,QAAQ,YAAY,QAAQ,YAAY,KAAK,eAAe,UAAU;AAAA,IACtF,IAAI,EAAE,UAAU,QAAQ,YAAY,OAAO,YAAY,KAAK,eAAe,WAAW;AAAA,IACtF,IAAI,EAAE,UAAU,QAAQ,YAAY,OAAO,YAAY,IAAI;AAAA,IAC3D,MAAM,EAAE,UAAU,QAAQ,YAAY,OAAO,YAAY,IAAI;AAAA,EAC/D;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,EAAE,UAAU,QAAQ,YAAY,OAAO,YAAY,IAAI;AAAA,IACjE,IAAI,EAAE,UAAU,QAAQ,YAAY,QAAQ,YAAY,IAAI;AAAA,IAC5D,IAAI,EAAE,UAAU,QAAQ,YAAY,OAAO,YAAY,IAAI;AAAA,IAC3D,MAAM,EAAE,UAAU,QAAQ,YAAY,OAAO,YAAY,IAAI;AAAA,EAC/D;AACF;;;AClBO,IAAM,mBAAmB;AAAA,EAC9B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,sBAAsB;AAAA,EACjC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;;;ACrBO,IAAM,kBAAkB;AAAA,EAC7B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AACR;","names":[]}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tokens/motion.ts","../src/assets/assets.ts","../src/utils/cn.ts","../src/components/brand/BusiverseLogo.tsx","../src/components/primitives/Button.tsx","../src/components/primitives/Card.tsx","../src/components/primitives/Badge.tsx","../src/components/primitives/Input.tsx","../src/components/primitives/Select.tsx","../src/components/primitives/Textarea.tsx","../src/components/primitives/Skeleton.tsx","../src/registry/services.ts","../src/components/layout/AppShell.tsx","../src/components/layout/PageHeader.tsx","../src/components/layout/ContentContainer.tsx","../src/components/data/DataTable.tsx","../src/components/data/TimeSeriesTable.tsx","../src/components/data/StatCard.tsx","../src/components/data/StatusPill.tsx","../src/components/forms/Field.tsx","../src/components/feedback/States.tsx","../src/i18n/format.ts","../src/components/billing/CurrencyAmount.tsx","../src/components/billing/UsageQuotaBar.tsx","../src/components/marketing/HeroSection.tsx","../src/api/createGatewayClient.ts","../src/auth/AuthSessionProvider.tsx","../src/auth/RequireAuth.tsx","../src/auth/SignUpLink.tsx","../src/auth/UserMenu.tsx","../src/i18n/BusiverseI18nProvider.tsx"],"sourcesContent":["export const busiverseMotion = {\n fast: \"150ms\",\n default: \"200ms\",\n slow: \"300ms\",\n easeStandard: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n} as const;\n","export const busiverseAssets = {\r\n logo: {\r\n horizontal: {\r\n white: new URL(\"./assets/logo/busiverse-horizontal---white.svg\", import.meta.url).href,\r\n black: new URL(\"./assets/logo/busiverse-horizontal---black.svg\", import.meta.url).href,\r\n color: new URL(\"./assets/logo/busiverse-horizontal---color.svg\", import.meta.url).href,\r\n },\r\n full: {\r\n white: new URL(\"./assets/logo/busiverse-primary-full-logo---white.svg\", import.meta.url).href,\r\n black: new URL(\"./assets/logo/busiverse-primary-full-logo---black.svg\", import.meta.url).href,\r\n color: new URL(\"./assets/logo/busiverse-primary-full-logo---color.svg\", import.meta.url).href,\r\n },\r\n vertical: {\r\n white: new URL(\"./assets/logo/busiverse-vertical---white.svg\", import.meta.url).href,\r\n black: new URL(\"./assets/logo/busiverse-vertical---black.svg\", import.meta.url).href,\r\n color: new URL(\"./assets/logo/busiverse-vertical---color.svg\", import.meta.url).href,\r\n },\r\n icon: {\r\n white: new URL(\"./assets/icon/busiverse-icon-only---white.svg\", import.meta.url).href,\r\n black: new URL(\"./assets/icon/busiverse-icon-only---black.svg\", import.meta.url).href,\r\n color: new URL(\"./assets/icon/busiverse-icon-only---color.svg\", import.meta.url).href,\r\n },\r\n },\r\n favicon: {\r\n ico: new URL(\"./assets/favicon.io/favicon.ico\", import.meta.url).href,\r\n png16: new URL(\"./assets/favicon.io/favicon-16x16.png\", import.meta.url).href,\r\n png32: new URL(\"./assets/favicon.io/favicon-32x32.png\", import.meta.url).href,\r\n appleTouchIcon: new URL(\"./assets/favicon.io/apple-touch-icon.png\", import.meta.url).href,\r\n },\r\n} as const;","export type ClassValue = string | number | false | null | undefined | Record<string, boolean> | ClassValue[];\n\nexport function cn(...values: ClassValue[]): string {\n const out: string[] = [];\n const push = (value: ClassValue): void => {\n if (!value) return;\n if (typeof value === \"string\" || typeof value === \"number\") {\n out.push(String(value));\n return;\n }\n if (Array.isArray(value)) {\n value.forEach(push);\n return;\n }\n Object.entries(value).forEach(([key, enabled]) => {\n if (enabled) out.push(key);\n });\n };\n values.forEach(push);\n return out.join(\" \");\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type BusiverseLogoVariant = \"icon\" | \"horizontal\" | \"full\" | \"vertical\";\nexport type BusiverseLogoTone = \"white\" | \"black\" | \"color\";\n\nconst icon_white = `<svg width=\"100\" height=\"100\" viewBox=\"0 0 180 180\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#FFFFFF\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#FFFFFF\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#FFFFFF\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></svg>`;\nconst icon_black = `<svg width=\"100\" height=\"100\" viewBox=\"0 0 180 180\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#000000\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#000000\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#000000\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></svg>`;\nconst icon_color = `<svg width=\"100\" height=\"100\" viewBox=\"0 0 180 180\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#3B82F6\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#8B5CF6\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#06B6D4\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#06B6D4\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#8B5CF6\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#3B82F6\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#3B82F6\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#06B6D4\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#06B6D4\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#3B82F6\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#8B5CF6\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></svg>`;\nconst horizontal_white = `<svg width=\"300\" height=\"75\" viewBox=\"0 0 800 200\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><g transform=\"translate(20, 10)\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#FFFFFF\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#FFFFFF\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#FFFFFF\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></g><text x=\"240\" y=\"120\" font-family=\"Space Grotesk, sans-serif\" font-size=\"64\" font-weight=\"700\" fill=\"#FFFFFF\" letter-spacing=\"-0.02em\">BUSIVERSE</text></svg>`;\nconst horizontal_black = `<svg width=\"300\" height=\"75\" viewBox=\"0 0 800 200\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><g transform=\"translate(20, 10)\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#000000\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#000000\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#000000\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></g><text x=\"240\" y=\"120\" font-family=\"Space Grotesk, sans-serif\" font-size=\"64\" font-weight=\"700\" fill=\"#000000\" letter-spacing=\"-0.02em\">BUSIVERSE</text></svg>`;\nconst horizontal_color = `<svg width=\"300\" height=\"75\" viewBox=\"0 0 800 200\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><g transform=\"translate(20, 10)\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#3B82F6\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#8B5CF6\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#06B6D4\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#06B6D4\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#8B5CF6\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#3B82F6\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#3B82F6\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#06B6D4\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#06B6D4\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#3B82F6\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#8B5CF6\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></g><text x=\"240\" y=\"120\" font-family=\"Space Grotesk, sans-serif\" font-size=\"64\" font-weight=\"700\" fill=\"#0F172A\" letter-spacing=\"-0.02em\">BUSIVERSE</text></svg>`;\nconst full_white = `<svg width=\"200\" height=\"60\" viewBox=\"0 0 600 180\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><g id=\"icon\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#FFFFFF\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#FFFFFF\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#FFFFFF\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></g><g id=\"wordmark\"><text x=\"190\" y=\"105\" font-family=\"Space Grotesk, sans-serif\" font-size=\"52\" font-weight=\"700\" fill=\"#FFFFFF\" letter-spacing=\"-0.02em\">BUSIVERSE</text><text x=\"190\" y=\"130\" font-family=\"Inter, sans-serif\" font-size=\"14\" font-weight=\"500\" fill=\"#FFFFFF\" opacity=\"0.7\" letter-spacing=\"0.05em\">TURN IDEAS INTO OPERATING BUSINESSES</text></g></svg>`;\nconst full_black = `<svg width=\"200\" height=\"60\" viewBox=\"0 0 600 180\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><g id=\"icon\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#000000\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#000000\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#000000\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></g><g id=\"wordmark\"><text x=\"190\" y=\"105\" font-family=\"Space Grotesk, sans-serif\" font-size=\"52\" font-weight=\"700\" fill=\"#000000\" letter-spacing=\"-0.02em\">BUSIVERSE</text><text x=\"190\" y=\"130\" font-family=\"Inter, sans-serif\" font-size=\"14\" font-weight=\"500\" fill=\"#000000\" opacity=\"0.7\" letter-spacing=\"0.05em\">TURN IDEAS INTO OPERATING BUSINESSES</text></g></svg>`;\nconst full_color = `<svg width=\"200\" height=\"60\" viewBox=\"0 0 600 180\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><g id=\"icon\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#3B82F6\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#8B5CF6\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#06B6D4\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#06B6D4\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#8B5CF6\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#3B82F6\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#3B82F6\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#06B6D4\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#06B6D4\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#3B82F6\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#8B5CF6\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></g><g id=\"wordmark\"><text x=\"190\" y=\"105\" font-family=\"Space Grotesk, sans-serif\" font-size=\"52\" font-weight=\"700\" fill=\"#0F172A\" letter-spacing=\"-0.02em\">BUSIVERSE</text><text x=\"190\" y=\"130\" font-family=\"Inter, sans-serif\" font-size=\"14\" font-weight=\"500\" fill=\"#0F172A\" opacity=\"0.7\" letter-spacing=\"0.05em\">TURN IDEAS INTO OPERATING BUSINESSES</text></g></svg>`;\nconst vertical_white = `<svg width=\"200\" height=\"300\" viewBox=\"0 0 400 600\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><g transform=\"translate(110, 40)\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#FFFFFF\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#FFFFFF\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#FFFFFF\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#FFFFFF\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#FFFFFF\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></g><text x=\"200\" y=\"350\" font-family=\"Space Grotesk, sans-serif\" font-size=\"48\" font-weight=\"700\" fill=\"#FFFFFF\" letter-spacing=\"-0.02em\" text-anchor=\"middle\">BUSIVERSE</text><text x=\"200\" y=\"390\" font-family=\"Inter, sans-serif\" font-size=\"12\" font-weight=\"500\" fill=\"#FFFFFF\" opacity=\"0.7\" letter-spacing=\"0.08em\" text-anchor=\"middle\">TURN IDEAS INTO</text><text x=\"200\" y=\"410\" font-family=\"Inter, sans-serif\" font-size=\"12\" font-weight=\"500\" fill=\"#FFFFFF\" opacity=\"0.7\" letter-spacing=\"0.08em\" text-anchor=\"middle\">OPERATING BUSINESSES</text></svg>`;\nconst vertical_black = `<svg width=\"200\" height=\"300\" viewBox=\"0 0 400 600\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><g transform=\"translate(110, 40)\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#000000\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#000000\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#000000\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#000000\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#000000\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#000000\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></g><text x=\"200\" y=\"350\" font-family=\"Space Grotesk, sans-serif\" font-size=\"48\" font-weight=\"700\" fill=\"#000000\" letter-spacing=\"-0.02em\" text-anchor=\"middle\">BUSIVERSE</text><text x=\"200\" y=\"390\" font-family=\"Inter, sans-serif\" font-size=\"12\" font-weight=\"500\" fill=\"#000000\" opacity=\"0.7\" letter-spacing=\"0.08em\" text-anchor=\"middle\">TURN IDEAS INTO</text><text x=\"200\" y=\"410\" font-family=\"Inter, sans-serif\" font-size=\"12\" font-weight=\"500\" fill=\"#000000\" opacity=\"0.7\" letter-spacing=\"0.08em\" text-anchor=\"middle\">OPERATING BUSINESSES</text></svg>`;\nconst vertical_color = `<svg width=\"200\" height=\"300\" viewBox=\"0 0 400 600\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"\"><g transform=\"translate(110, 40)\"><circle cx=\"90\" cy=\"90\" r=\"16\" fill=\"#3B82F6\"/><circle cx=\"50\" cy=\"50\" r=\"10\" fill=\"#8B5CF6\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"50\" r=\"10\" fill=\"#06B6D4\" opacity=\"0.9\"/><circle cx=\"50\" cy=\"130\" r=\"10\" fill=\"#06B6D4\" opacity=\"0.9\"/><circle cx=\"130\" cy=\"130\" r=\"10\" fill=\"#8B5CF6\" opacity=\"0.9\"/><circle cx=\"30\" cy=\"90\" r=\"8\" fill=\"#3B82F6\" opacity=\"0.7\"/><circle cx=\"150\" cy=\"90\" r=\"8\" fill=\"#3B82F6\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"30\" r=\"8\" fill=\"#06B6D4\" opacity=\"0.7\"/><circle cx=\"90\" cy=\"150\" r=\"8\" fill=\"#06B6D4\" opacity=\"0.7\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"50\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"50\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"50\" y2=\"130\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"130\" y2=\"130\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"30\" y2=\"90\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"150\" y2=\"90\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"30\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><line x1=\"90\" y1=\"90\" x2=\"90\" y2=\"150\" stroke=\"#3B82F6\" stroke-width=\"2\" opacity=\"0.4\"/><circle cx=\"90\" cy=\"90\" r=\"65\" stroke=\"#3B82F6\" stroke-width=\"2.5\" fill=\"none\" opacity=\"0.3\"/><circle cx=\"90\" cy=\"90\" r=\"75\" stroke=\"#8B5CF6\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.2\"/></g><text x=\"200\" y=\"350\" font-family=\"Space Grotesk, sans-serif\" font-size=\"48\" font-weight=\"700\" fill=\"#0F172A\" letter-spacing=\"-0.02em\" text-anchor=\"middle\">BUSIVERSE</text><text x=\"200\" y=\"390\" font-family=\"Inter, sans-serif\" font-size=\"12\" font-weight=\"500\" fill=\"#0F172A\" opacity=\"0.7\" letter-spacing=\"0.08em\" text-anchor=\"middle\">TURN IDEAS INTO</text><text x=\"200\" y=\"410\" font-family=\"Inter, sans-serif\" font-size=\"12\" font-weight=\"500\" fill=\"#0F172A\" opacity=\"0.7\" letter-spacing=\"0.08em\" text-anchor=\"middle\">OPERATING BUSINESSES</text></svg>`;\n\nconst svgMap = {\n icon: { white: icon_white, black: icon_black, color: icon_color },\n horizontal: { white: horizontal_white, black: horizontal_black, color: horizontal_color },\n full: { white: full_white, black: full_black, color: full_color },\n vertical: { white: vertical_white, black: vertical_black, color: vertical_color },\n} as const;\n\nexport interface BusiverseLogoProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BusiverseLogoVariant;\n tone?: BusiverseLogoTone;\n label?: string;\n}\n\nexport function BusiverseLogo({ variant = \"horizontal\", tone = \"white\", label = \"BUSIVERSE\", className, ...props }: BusiverseLogoProps) {\n return (\n <span\n role=\"img\"\n aria-label={label}\n className={cn(\"busiverse-logo\", className)}\n dangerouslySetInnerHTML={{ __html: svgMap[variant][tone] }}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\ntype ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"success\" | \"link\";\ntype ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n isLoading?: boolean;\n}\n\nconst variants: Record<ButtonVariant, string> = {\n primary: \"busiverse-btn-primary\",\n secondary: \"busiverse-btn-secondary\",\n ghost: \"busiverse-btn-ghost\",\n danger: \"busiverse-btn-danger\",\n success: \"busiverse-btn-success\",\n link: \"busiverse-btn-link\",\n};\n\nconst sizes: Record<ButtonSize, string> = {\n sm: \"busiverse-btn-sm\",\n md: \"busiverse-btn-md\",\n lg: \"busiverse-btn-lg\",\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { className, variant = \"primary\", size = \"md\", isLoading, children, disabled, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n className={cn(\"busiverse-focus-ring busiverse-btn\", variants[variant], sizes[size], className)}\n disabled={disabled || isLoading}\n aria-busy={isLoading || undefined}\n {...props}\n >\n {isLoading && <span className=\"busiverse-spinner\" aria-hidden=\"true\" />}\n <span>{children}</span>\n </button>\n );\n});\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n interactive?: boolean;\n}\n\nexport function Card({ className, interactive, ...props }: CardProps) {\n return <div className={cn(\"busiverse-card\", interactive && \"busiverse-card-interactive\", className)} {...props} />;\n}\n\nexport function CardHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"busiverse-card-header\", className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={cn(\"busiverse-card-title\", className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn(\"busiverse-card-description\", className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"busiverse-card-content\", className)} {...props} />;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type BadgeTone = \"blue\" | \"violet\" | \"cyan\" | \"success\" | \"warning\" | \"danger\" | \"slate\";\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: BadgeTone;\n}\n\nexport function Badge({ className, tone = \"blue\", ...props }: BadgeProps) {\n return <span className={cn(\"busiverse-badge\", `busiverse-badge-${tone}`, className)} {...props} />;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(function Input({ className, ...props }, ref) {\n return <input ref={ref} className={cn(\"busiverse-focus-ring busiverse-input\", className)} {...props} />;\n});\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type SelectProps = React.SelectHTMLAttributes<HTMLSelectElement>;\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(function Select({ className, ...props }, ref) {\n return <select ref={ref} className={cn(\"busiverse-focus-ring busiverse-input\", className)} {...props} />;\n});\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea({ className, ...props }, ref) {\n return <textarea ref={ref} className={cn(\"busiverse-focus-ring busiverse-input busiverse-textarea\", className)} {...props} />;\n});\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"busiverse-skeleton\", className)} {...props} />;\n}\n","export type BusiverseServiceCategory =\n | \"core\"\n | \"security\"\n | \"finance\"\n | \"business\"\n | \"commerce\"\n | \"intelligence\"\n | \"blockchain\"\n | \"developer\"\n | \"operations\";\n\nexport interface BusiverseServiceDefinition {\n key: string;\n name: string;\n category: BusiverseServiceCategory;\n frontendHost: string;\n apiPrefix: string;\n description: string;\n usesTimeSeries?: boolean;\n}\n\nexport const busiverseServices: BusiverseServiceDefinition[] = [\n { key: \"account\", name: \"Account\", category: \"finance\", frontendHost: \"account.busiversehq.com\", apiPrefix: \"/account/api/v1\", description: \"Billing, ledger, invoices, subscriptions, and accounting.\" },\n { key: \"ai\", name: \"AI\", category: \"intelligence\", frontendHost: \"ai.busiversehq.com\", apiPrefix: \"/ai/api/v1\", description: \"AI agents, automation, copilots, and approved execution.\", usesTimeSeries: true },\n { key: \"authentication\", name: \"Authentication\", category: \"security\", frontendHost: \"authentication.busiversehq.com\", apiPrefix: \"/authentication/api/v1\", description: \"OAuth2/OIDC, MFA, sessions, clients, and identity security.\", usesTimeSeries: true },\n { key: \"authorization\", name: \"Authorization\", category: \"security\", frontendHost: \"authorization.busiversehq.com\", apiPrefix: \"/authorization/api/v1\", description: \"ABAC policy, access decisions, simulations, and reviews.\", usesTimeSeries: true },\n { key: \"bank\", name: \"Bank\", category: \"finance\", frontendHost: \"bank.busiversehq.com\", apiPrefix: \"/bank/api/v1\", description: \"Bank accounts, transfers, escrow, cards, loans, and settlement.\" },\n { key: \"blockchain\", name: \"Blockchain\", category: \"blockchain\", frontendHost: \"blockchain.busiversehq.com\", apiPrefix: \"/blockchain/api/v1\", description: \"Proofs, blocks, transaction status, history, and explorer APIs.\", usesTimeSeries: true },\n { key: \"business\", name: \"Business\", category: \"business\", frontendHost: \"business.busiversehq.com\", apiPrefix: \"/business/api/v1\", description: \"Business records, workspaces, departments, and operations.\" },\n { key: \"business-plan\", name: \"Business Plan\", category: \"business\", frontendHost: \"business-plan.busiversehq.com\", apiPrefix: \"/business-plan/api/v1\", description: \"Business plans, projections, assumptions, and investor-ready exports.\" },\n { key: \"communication\", name: \"Communication\", category: \"operations\", frontendHost: \"communication.busiversehq.com\", apiPrefix: \"/communication/api/v1\", description: \"Email, SMS, push, in-app, campaigns, notifications, and webhooks.\", usesTimeSeries: true },\n { key: \"employee\", name: \"Employee\", category: \"business\", frontendHost: \"employee.busiversehq.com\", apiPrefix: \"/employee/api/v1\", description: \"Employment lifecycle, employee records, payroll context, and AI employees.\" },\n { key: \"job\", name: \"Job\", category: \"business\", frontendHost: \"job.busiversehq.com\", apiPrefix: \"/job/api/v1\", description: \"Jobs, applications, interviews, offers, and candidate matching.\" },\n { key: \"location\", name: \"Location\", category: \"operations\", frontendHost: \"location.busiversehq.com\", apiPrefix: \"/location/api/v1\", description: \"Countries, regions, addresses, geocoding, and pricing context.\" },\n { key: \"logistics\", name: \"Logistics\", category: \"commerce\", frontendHost: \"logistics.busiversehq.com\", apiPrefix: \"/logistics/api/v1\", description: \"Shipments, delivery, vehicles, transport, and fulfillment.\" },\n { key: \"marketplace\", name: \"Marketplace\", category: \"commerce\", frontendHost: \"marketplace.busiversehq.com\", apiPrefix: \"/marketplace/api/v1\", description: \"Listings, orders, auctions, bids, vendor stores, and commerce.\" },\n { key: \"mint\", name: \"Mint\", category: \"finance\", frontendHost: \"mint.busiversehq.com\", apiPrefix: \"/mint/api/v1\", description: \"Currency, monetary rules, reserves, settlement, and policy.\" },\n { key: \"ml\", name: \"ML\", category: \"intelligence\", frontendHost: \"ml.busiversehq.com\", apiPrefix: \"/ml/api/v1\", description: \"Training, experiments, feature engineering, evaluation, and agent training.\", usesTimeSeries: true },\n { key: \"project\", name: \"Project\", category: \"business\", frontendHost: \"project.busiversehq.com\", apiPrefix: \"/project/api/v1\", description: \"Projects, tasks, milestones, budgets, teams, and deliverables.\" },\n { key: \"registry\", name: \"Registry\", category: \"developer\", frontendHost: \"registry.busiversehq.com\", apiPrefix: \"/registry/api/v1\", description: \"Legacy registry frontend retained for migration/reference.\" },\n { key: \"scraper\", name: \"Scraper\", category: \"intelligence\", frontendHost: \"scraper.busiversehq.com\", apiPrefix: \"/scraper/api/v1\", description: \"Data acquisition, scheduled feeds, connectors, and datasets.\", usesTimeSeries: true },\n { key: \"storage\", name: \"Storage\", category: \"core\", frontendHost: \"storage.busiversehq.com\", apiPrefix: \"/storage/api/v1\", description: \"Object custody, files, assets, evidence packs, backups, and retention.\" },\n { key: \"template\", name: \"Template\", category: \"business\", frontendHost: \"template.busiversehq.com\", apiPrefix: \"/template/api/v1\", description: \"Templates, rendering, previews, versions, and branded exports.\" },\n { key: \"user\", name: \"User\", category: \"core\", frontendHost: \"user.busiversehq.com\", apiPrefix: \"/user/api/v1\", description: \"Human profile, preferences, memberships, and signup entry.\" },\n];\n\nexport function getBusiverseService(key: string): BusiverseServiceDefinition | undefined {\n return busiverseServices.find((service) => service.key === key);\n}\n","import * as React from \"react\";\nimport { BusiverseLogo } from \"../brand/BusiverseLogo\";\nimport { getBusiverseService, busiverseServices } from \"../../registry/services\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface AppShellProps {\n children: React.ReactNode;\n service: string;\n navigation?: Array<{ label: string; href: string; active?: boolean }>;\n rightSlot?: React.ReactNode;\n className?: string;\n}\n\nexport function AppShell({ children, service, navigation, rightSlot, className }: AppShellProps) {\n const current = getBusiverseService(service);\n const nav = navigation ?? [\n { label: \"Dashboard\", href: \"/\" },\n { label: \"Records\", href: \"/records\" },\n { label: \"Billing\", href: \"/billing\" },\n { label: \"Settings\", href: \"/settings\" },\n ];\n return (\n <div className={cn(\"busiverse-app-shell\", className)}>\n <aside className=\"busiverse-sidebar\">\n <a className=\"busiverse-sidebar-brand\" href=\"/\">\n <BusiverseLogo variant=\"icon\" tone=\"color\" className=\"busiverse-sidebar-logo\" />\n <span>{current?.name ?? \"BUSIVERSE\"}</span>\n </a>\n <nav className=\"busiverse-sidebar-nav\" aria-label=\"Service navigation\">\n {nav.map((item) => (\n <a key={item.href} href={item.href} className={cn(\"busiverse-sidebar-link\", item.active && \"is-active\")}>{item.label}</a>\n ))}\n </nav>\n <div className=\"busiverse-sidebar-services\">\n <span className=\"busiverse-sidebar-kicker\">Ecosystem</span>\n {busiverseServices.slice(0, 8).map((item) => (\n <a key={item.key} href={`https://${item.frontendHost}`} className=\"busiverse-sidebar-service-link\">{item.name}</a>\n ))}\n </div>\n </aside>\n <div className=\"busiverse-main-panel\">\n <header className=\"busiverse-topbar\">\n <BusiverseLogo variant=\"horizontal\" tone=\"white\" className=\"busiverse-topbar-logo\" />\n <div className=\"busiverse-topbar-right\">{rightSlot}</div>\n </header>\n <main id=\"main\" className=\"busiverse-main-content\">{children}</main>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface PageHeaderProps {\n title: string;\n description?: string;\n eyebrow?: string;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function PageHeader({ title, description, eyebrow, action, className }: PageHeaderProps) {\n return (\n <div className={cn(\"busiverse-page-header\", className)}>\n <div>\n {eyebrow && <p className=\"busiverse-eyebrow\">{eyebrow}</p>}\n <h1>{title}</h1>\n {description && <p>{description}</p>}\n </div>\n {action && <div className=\"busiverse-page-header-action\">{action}</div>}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport function ContentContainer({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"busiverse-container\", className)} {...props} />;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface DataTableColumn<T> {\n key: keyof T | string;\n header: React.ReactNode;\n render?: (row: T, index: number) => React.ReactNode;\n align?: \"left\" | \"right\" | \"center\";\n width?: string;\n}\n\nexport interface DataTableProps<T> {\n rows: T[];\n columns: Array<DataTableColumn<T>>;\n getRowKey?: (row: T, index: number) => React.Key;\n isLoading?: boolean;\n emptyState?: React.ReactNode;\n className?: string;\n dense?: boolean;\n}\n\nfunction getCellValue<T>(row: T, key: keyof T | string): React.ReactNode {\n const value = (row as Record<string, unknown>)[String(key)];\n if (value == null) return \"—\";\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return JSON.stringify(value);\n}\n\nexport function DataTable<T>({ rows, columns, getRowKey, isLoading, emptyState, className, dense }: DataTableProps<T>) {\n if (isLoading) return <div className=\"busiverse-table-state\">Loading records…</div>;\n if (!rows.length) return <div className=\"busiverse-table-state\">{emptyState ?? \"No records found.\"}</div>;\n return (\n <div className={cn(\"busiverse-table-wrap\", className)}>\n <table className={cn(\"busiverse-table\", dense && \"is-dense\")}>\n <thead>\n <tr>{columns.map((column) => <th key={String(column.key)} style={{ width: column.width, textAlign: column.align }}>{column.header}</th>)}</tr>\n </thead>\n <tbody>\n {rows.map((row, rowIndex) => (\n <tr key={getRowKey?.(row, rowIndex) ?? rowIndex}>\n {columns.map((column) => (\n <td key={String(column.key)} style={{ textAlign: column.align }}>\n {column.render ? column.render(row, rowIndex) : getCellValue(row, column.key)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { DataTable, type DataTableColumn } from \"./DataTable\";\n\nexport type TimeSeriesGranularity = \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"quarter\" | \"year\";\n\nexport interface TimeSeriesTableProps<T extends Record<string, unknown>> {\n rows: T[];\n timestampKey: keyof T | string;\n valueColumns: Array<keyof T | string>;\n locale?: string;\n timeZone?: string;\n granularity?: TimeSeriesGranularity;\n isLoading?: boolean;\n}\n\nfunction formatTimestamp(value: unknown, locale: string, timeZone: string, granularity?: TimeSeriesGranularity): string {\n const date = new Date(String(value));\n const base: Intl.DateTimeFormatOptions = { timeZone };\n const options: Intl.DateTimeFormatOptions =\n granularity === \"second\" ? { ...base, dateStyle: \"medium\", timeStyle: \"medium\" } :\n granularity === \"minute\" || granularity === \"hour\" ? { ...base, dateStyle: \"medium\", timeStyle: \"short\" } :\n granularity === \"year\" ? { ...base, year: \"numeric\" } :\n granularity === \"month\" ? { ...base, year: \"numeric\", month: \"short\" } :\n { ...base, dateStyle: \"medium\" };\n return new Intl.DateTimeFormat(locale, options).format(date);\n}\n\nexport function TimeSeriesTable<T extends Record<string, unknown>>({\n rows,\n timestampKey,\n valueColumns,\n locale = \"en-NG\",\n timeZone = \"Africa/Lagos\",\n granularity = \"minute\",\n isLoading,\n}: TimeSeriesTableProps<T>) {\n const columns: Array<DataTableColumn<T>> = [\n {\n key: String(timestampKey),\n header: \"Time\",\n render: (row) => formatTimestamp(row[String(timestampKey)], locale, timeZone, granularity),\n },\n ...valueColumns.map((key) => ({\n key: String(key),\n header: String(key),\n align: \"right\" as const,\n render: (row: T) => {\n const value = row[String(key)];\n return typeof value === \"number\" ? new Intl.NumberFormat(locale, { maximumFractionDigits: 3 }).format(value) : String(value ?? \"—\");\n },\n })),\n ];\n return <DataTable rows={rows} columns={columns} isLoading={isLoading} dense />;\n}\n","import * as React from \"react\";\nimport { Card } from \"../primitives/Card\";\n\nexport interface StatCardProps {\n label: string;\n value: React.ReactNode;\n helper?: React.ReactNode;\n}\n\nexport function StatCard({ label, value, helper }: StatCardProps) {\n return (\n <Card className=\"busiverse-stat-card\">\n <span>{label}</span>\n <strong>{value}</strong>\n {helper && <small>{helper}</small>}\n </Card>\n );\n}\n","import { Badge, type BadgeTone } from \"../primitives/Badge\";\n\nexport interface StatusPillProps {\n status: string;\n}\n\nconst toneByStatus: Record<string, BadgeTone> = {\n active: \"success\",\n healthy: \"success\",\n running: \"success\",\n pending: \"warning\",\n warning: \"warning\",\n failed: \"danger\",\n error: \"danger\",\n disabled: \"slate\",\n};\n\nexport function StatusPill({ status }: StatusPillProps) {\n const key = status.toLowerCase();\n return <Badge tone={toneByStatus[key] ?? \"blue\"}>{status}</Badge>;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface FieldProps {\n label: string;\n htmlFor?: string;\n hint?: string;\n error?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Field({ label, htmlFor, hint, error, children, className }: FieldProps) {\n return (\n <div className={cn(\"busiverse-field\", className)}>\n <label htmlFor={htmlFor}>{label}</label>\n {children}\n {hint && !error && <p className=\"busiverse-field-hint\">{hint}</p>}\n {error && <p className=\"busiverse-field-error\">{error}</p>}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Card } from \"../primitives/Card\";\nimport { Button } from \"../primitives/Button\";\n\nexport interface StateProps {\n title: string;\n description?: string;\n action?: React.ReactNode;\n}\n\nexport function EmptyState({ title, description, action }: StateProps) {\n return <Card className=\"busiverse-state\"><h2>{title}</h2>{description && <p>{description}</p>}{action}</Card>;\n}\n\nexport function ErrorState({ title = \"Something went wrong\", description, action }: Partial<StateProps>) {\n return <Card className=\"busiverse-state busiverse-state-error\"><h2>{title}</h2>{description && <p>{description}</p>}{action}</Card>;\n}\n\nexport function ForbiddenState({ description = \"You do not have permission to access this resource.\" }: { description?: string }) {\n return <ErrorState title=\"Access denied\" description={description} action={<Button variant=\"secondary\">Go back</Button>} />;\n}\n","import type { BusiverseRegionContext } from \"./types\";\n\nexport function formatCurrency(amount: number, region: Pick<BusiverseRegionContext, \"locale\" | \"currencyCode\">, options?: Intl.NumberFormatOptions): string {\n return new Intl.NumberFormat(region.locale, { style: \"currency\", currency: region.currencyCode, ...options }).format(amount);\n}\n\nexport function formatNumber(value: number, locale = \"en-NG\", options?: Intl.NumberFormatOptions): string {\n return new Intl.NumberFormat(locale, options).format(value);\n}\n\nexport function formatDate(value: string | number | Date, region: Pick<BusiverseRegionContext, \"locale\" | \"timeZone\">, options?: Intl.DateTimeFormatOptions): string {\n return new Intl.DateTimeFormat(region.locale, { timeZone: region.timeZone, dateStyle: \"medium\", timeStyle: \"short\", ...options }).format(new Date(value));\n}\n\nexport function toRegionHeaders(region: BusiverseRegionContext): Record<string, string> {\n return {\n \"Accept-Language\": region.locale,\n \"X-Busiverse-Country\": region.countryCode,\n \"X-Busiverse-Region\": region.regionCode ?? region.countryCode,\n \"X-Busiverse-Currency\": region.currencyCode,\n \"X-Busiverse-Timezone\": region.timeZone,\n };\n}\n","import type { BusiverseRegionContext } from \"../../i18n/types\";\nimport { formatCurrency } from \"../../i18n/format\";\n\nexport interface CurrencyAmountProps {\n amount: number;\n currency?: string;\n locale?: string;\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n}\n\nexport function CurrencyAmount({ amount, currency = \"NGN\", locale = \"en-NG\", minimumFractionDigits, maximumFractionDigits }: CurrencyAmountProps) {\n const region: Pick<BusiverseRegionContext, \"locale\" | \"currencyCode\"> = { locale, currencyCode: currency };\n return <>{formatCurrency(amount, region, { minimumFractionDigits, maximumFractionDigits })}</>;\n}\n","export interface UsageQuotaBarProps {\n used: number;\n limit: number;\n label: string;\n}\n\nexport function UsageQuotaBar({ used, limit, label }: UsageQuotaBarProps) {\n const percent = limit > 0 ? Math.min(100, Math.round((used / limit) * 100)) : 0;\n return (\n <div className=\"busiverse-quota\">\n <div className=\"busiverse-quota-row\"><span>{label}</span><span>{used.toLocaleString()} / {limit.toLocaleString()}</span></div>\n <div className=\"busiverse-quota-track\"><div className=\"busiverse-quota-fill\" style={{ width: `${percent}%` }} /></div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Button } from \"../primitives/Button\";\nimport { BusiverseLogo } from \"../brand/BusiverseLogo\";\n\nexport interface HeroSectionProps {\n title?: string;\n subtitle?: string;\n primaryCta?: React.ReactNode;\n secondaryCta?: React.ReactNode;\n}\n\nexport function HeroSection({\n title = \"Turn Ideas Into Operating Businesses\",\n subtitle = \"BUSIVERSE combines AI automation, blockchain-backed trust, and modular business services to help teams launch and operate ventures faster.\",\n primaryCta = <Button>Start Building</Button>,\n secondaryCta = <Button variant=\"secondary\">Explore the Platform</Button>,\n}: HeroSectionProps) {\n return (\n <section className=\"busiverse-hero\">\n <div className=\"busiverse-hero-content\">\n <BusiverseLogo variant=\"full\" tone=\"white\" className=\"busiverse-hero-logo\" />\n <h1>{title}</h1>\n <p>{subtitle}</p>\n <div className=\"busiverse-hero-actions\">{primaryCta}{secondaryCta}</div>\n </div>\n </section>\n );\n}\n","import type { BusiverseRegionContext } from \"../i18n/types\";\nimport { toRegionHeaders } from \"../i18n/format\";\n\nexport interface GatewayClientOptions {\n baseUrl: string;\n getAccessToken?: () => Promise<string | null | undefined> | string | null | undefined;\n region?: BusiverseRegionContext;\n defaultHeaders?: HeadersInit;\n onUnauthorized?: () => void;\n}\n\nexport interface GatewayRequestOptions extends RequestInit {\n idempotencyKey?: string;\n correlationId?: string;\n region?: BusiverseRegionContext;\n}\n\nexport class GatewayApiError extends Error {\n readonly status: number;\n readonly body: unknown;\n constructor(status: number, body: unknown, message = `Gateway request failed with ${status}`) {\n super(message);\n this.name = \"GatewayApiError\";\n this.status = status;\n this.body = body;\n }\n}\n\nasync function parseBody(response: Response): Promise<unknown> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"application/json\")) return response.json();\n return response.text();\n}\n\nexport function createGatewayClient(options: GatewayClientOptions) {\n const request = async <T>(path: string, init: GatewayRequestOptions = {}): Promise<T> => {\n const token = typeof options.getAccessToken === \"function\" ? await options.getAccessToken() : options.getAccessToken;\n const region = init.region ?? options.region;\n const headers = new Headers(options.defaultHeaders);\n headers.set(\"Accept\", \"application/json\");\n if (!(init.body instanceof FormData)) headers.set(\"Content-Type\", \"application/json\");\n if (token) headers.set(\"Authorization\", `Bearer ${token}`);\n if (init.idempotencyKey) headers.set(\"Idempotency-Key\", init.idempotencyKey);\n if (init.correlationId) headers.set(\"X-Correlation-Id\", init.correlationId);\n if (region) Object.entries(toRegionHeaders(region)).forEach(([key, value]) => headers.set(key, value));\n new Headers(init.headers).forEach((value, key) => headers.set(key, value));\n\n const response = await fetch(new URL(path, options.baseUrl).toString(), { ...init, headers });\n if (response.status === 401) options.onUnauthorized?.();\n if (!response.ok) throw new GatewayApiError(response.status, await parseBody(response));\n if (response.status === 204) return undefined as T;\n return parseBody(response) as Promise<T>;\n };\n\n return {\n request,\n get: <T>(path: string, init?: GatewayRequestOptions) => request<T>(path, { ...init, method: \"GET\" }),\n post: <T>(path: string, body?: unknown, init?: GatewayRequestOptions) => request<T>(path, { ...init, method: \"POST\", body: body instanceof FormData ? body : JSON.stringify(body ?? {}) }),\n put: <T>(path: string, body?: unknown, init?: GatewayRequestOptions) => request<T>(path, { ...init, method: \"PUT\", body: body instanceof FormData ? body : JSON.stringify(body ?? {}) }),\n patch: <T>(path: string, body?: unknown, init?: GatewayRequestOptions) => request<T>(path, { ...init, method: \"PATCH\", body: body instanceof FormData ? body : JSON.stringify(body ?? {}) }),\n delete: <T>(path: string, init?: GatewayRequestOptions) => request<T>(path, { ...init, method: \"DELETE\" }),\n };\n}\n","import * as React from \"react\";\n\nexport interface BusiverseAuthUser {\n id: string;\n name?: string;\n email?: string;\n avatarUrl?: string;\n}\n\nexport interface BusiverseAuthSession {\n user: BusiverseAuthUser | null;\n accessToken?: string | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n signIn: () => void | Promise<void>;\n signOut: () => void | Promise<void>;\n getAccessToken: () => Promise<string | null | undefined> | string | null | undefined;\n}\n\nconst AuthContext = React.createContext<BusiverseAuthSession | null>(null);\n\nexport function AuthSessionProvider({ children, session }: { children: React.ReactNode; session: BusiverseAuthSession }) {\n return <AuthContext.Provider value={session}>{children}</AuthContext.Provider>;\n}\n\nexport function useBusiverseAuth(): BusiverseAuthSession {\n const value = React.useContext(AuthContext);\n if (!value) throw new Error(\"useBusiverseAuth must be used inside AuthSessionProvider\");\n return value;\n}\n","import * as React from \"react\";\nimport { useBusiverseAuth } from \"./AuthSessionProvider\";\nimport { Button } from \"../components/primitives/Button\";\n\nexport function RequireAuth({ children }: { children: React.ReactNode }) {\n const auth = useBusiverseAuth();\n if (auth.isLoading) return <div className=\"busiverse-loading-state\">Checking session…</div>;\n if (!auth.isAuthenticated) {\n return (\n <div className=\"busiverse-auth-required\">\n <h1>Sign in required</h1>\n <p>Use your BUSIVERSE account to continue.</p>\n <Button onClick={() => void auth.signIn()}>Sign in</Button>\n </div>\n );\n }\n return <>{children}</>;\n}\n","import * as React from \"react\";\n\nexport interface SignUpLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n signupUrl?: string;\n}\n\nexport function SignUpLink({ signupUrl = \"https://user.busiversehq.com/signup\", children = \"Create your Busiverse account\", ...props }: SignUpLinkProps) {\n return <a href={signupUrl} {...props}>{children}</a>;\n}\n","import * as React from \"react\";\nimport { useBusiverseAuth } from \"./AuthSessionProvider\";\nimport { Button } from \"../components/primitives/Button\";\n\nexport function UserMenu() {\n const auth = useBusiverseAuth();\n if (!auth.isAuthenticated || !auth.user) return <Button size=\"sm\" onClick={() => void auth.signIn()}>Sign in</Button>;\n return (\n <div className=\"busiverse-user-menu\">\n <span>{auth.user.name ?? auth.user.email ?? \"User\"}</span>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => void auth.signOut()}>Sign out</Button>\n </div>\n );\n}\n","import * as React from \"react\";\nimport type { BusiverseRegionContext, TranslationBundles } from \"./types\";\n\nconst defaultRegion: BusiverseRegionContext = {\n locale: \"en-NG\",\n countryCode: \"NG\",\n regionCode: \"NG-LA\",\n currencyCode: \"NGN\",\n timeZone: \"Africa/Lagos\",\n};\n\ninterface I18nContextValue {\n region: BusiverseRegionContext;\n bundles: TranslationBundles;\n setRegion: (region: BusiverseRegionContext) => void;\n t: (key: string, fallback?: string, vars?: Record<string, string | number>) => string;\n}\n\nconst I18nContext = React.createContext<I18nContextValue | null>(null);\n\nexport interface BusiverseI18nProviderProps {\n children: React.ReactNode;\n initialRegion?: Partial<BusiverseRegionContext>;\n bundles?: TranslationBundles;\n}\n\nexport function BusiverseI18nProvider({ children, initialRegion, bundles = {} }: BusiverseI18nProviderProps) {\n const [region, setRegion] = React.useState<BusiverseRegionContext>({ ...defaultRegion, ...initialRegion });\n\n const t = React.useCallback<I18nContextValue[\"t\"]>((key, fallback, vars) => {\n const value = bundles[region.locale]?.[key] ?? bundles[region.locale.split(\"-\")[0]]?.[key] ?? fallback ?? key;\n if (!vars) return value;\n return Object.entries(vars).reduce((acc, [name, val]) => acc.replaceAll(`{${name}}`, String(val)), value);\n }, [bundles, region.locale]);\n\n return <I18nContext.Provider value={{ region, bundles, setRegion, t }}>{children}</I18nContext.Provider>;\n}\n\nexport function useBusiverseI18n(): I18nContextValue {\n const ctx = React.useContext(I18nContext);\n if (!ctx) throw new Error(\"useBusiverseI18n must be used inside BusiverseI18nProvider\");\n return ctx;\n}\n"],"mappings":"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","names":["jsx","Button","jsx","jsx","React","jsx","Input","React","jsx","Select","React","jsx","Textarea","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","React","jsx","Fragment","jsx","jsxs","jsx","jsx","jsxs","React","jsx"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tailwind/index.ts"],"sourcesContent":["import { busiverseColors } from \"../tokens/colors\";\nimport { busiverseRadius } from \"../tokens/radius\";\nimport { busiverseSpacing } from \"../tokens/spacing\";\nimport { busiverseTypography } from \"../tokens/typography\";\n\nexport const busiverseTailwindPreset = {\n theme: {\n extend: {\n colors: {\n brand: busiverseColors.brand,\n action: busiverseColors.action,\n busiverse: busiverseColors.background,\n },\n borderRadius: busiverseRadius,\n spacing: busiverseSpacing,\n fontFamily: {\n display: busiverseTypography.fontDisplay.split(\",\"),\n body: busiverseTypography.fontBody.split(\",\"),\n code: busiverseTypography.fontCode.split(\",\"),\n },\n },\n },\n};\n"],"mappings":";;;;;;;;AAKO,IAAM,0BAA0B;AAAA,EACrC,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,OAAO,gBAAgB;AAAA,QACvB,QAAQ,gBAAgB;AAAA,QACxB,WAAW,gBAAgB;AAAA,MAC7B;AAAA,MACA,cAAc;AAAA,MACd,SAAS;AAAA,MACT,YAAY;AAAA,QACV,SAAS,oBAAoB,YAAY,MAAM,GAAG;AAAA,QAClD,MAAM,oBAAoB,SAAS,MAAM,GAAG;AAAA,QAC5C,MAAM,oBAAoB,SAAS,MAAM,GAAG;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|