@busiverse/ui 0.2.4 → 0.2.7
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 +16 -225
- package/dist/assets/assets.js +49 -0
- package/dist/chunk-2TTXWTIT.js +66 -0
- package/dist/chunk-32FPZZH2.js +40 -0
- package/dist/chunk-3XY5ZSTX.js +94 -0
- package/dist/chunk-ARMZUHU7.js +7833 -0
- package/dist/chunk-GRZVAWCA.js +63 -0
- package/dist/chunk-NZ65VTKR.js +0 -0
- package/dist/chunk-PYZVP4NI.js +24 -0
- package/dist/chunk-SZVGFEJG.js +115 -0
- package/dist/chunk-WDOMYE77.js +101 -0
- package/dist/components/billing/index.js +13 -0
- package/dist/components/brand/BusiverseBrandHead.d.ts.map +1 -1
- package/dist/components/brand/index.js +13 -0
- package/dist/components/marketing/MarketingFeatureCard.d.ts +11 -0
- package/dist/components/marketing/MarketingFeatureCard.d.ts.map +1 -0
- package/dist/components/marketing/MarketingPricingCard.d.ts +16 -0
- package/dist/components/marketing/MarketingPricingCard.d.ts.map +1 -0
- package/dist/components/marketing/MarketingSectionHeader.d.ts +10 -0
- package/dist/components/marketing/MarketingSectionHeader.d.ts.map +1 -0
- package/dist/components/marketing/index.d.ts +3 -0
- package/dist/components/marketing/index.d.ts.map +1 -1
- package/dist/components/marketing/index.js +15 -0
- package/dist/components/social/index.js +15 -0
- package/dist/i18n/index.js +20 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +156 -8298
- package/dist/styles.css +87 -0
- package/package.json +33 -3
package/README.md
CHANGED
|
@@ -1,248 +1,39 @@
|
|
|
1
1
|
# @busiverse/ui
|
|
2
2
|
|
|
3
|
-
Shared BUSIVERSE frontend package
|
|
3
|
+
Shared BUSIVERSE frontend UI package.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Version: `0.2.7`
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- Design tokens and Tailwind 4-compatible theme helpers.
|
|
9
|
-
- Global CSS, fonts, reduced-motion, focus states, glass cards, buttons, tables, forms, and app shell.
|
|
10
|
-
- Gateway-only API client foundation.
|
|
11
|
-
- OIDC/auth UI helpers for signin and user-frontend-only signup routing.
|
|
12
|
-
- Internationalization, country/region/currency, timezone, and locale utilities.
|
|
13
|
-
- CRUD and time-series-ready table components.
|
|
14
|
-
- Dashboard, billing, feedback, and marketing primitives.
|
|
7
|
+
## Purpose
|
|
15
8
|
|
|
16
|
-
|
|
9
|
+
`@busiverse/ui` is the shared UI foundation for separately deployed Busiverse frontends on Vercel. It owns reusable brand assets, design tokens, shared CSS, brand metadata, social icons, i18n region context, reusable app-shell primitives, data tables, internal pricing tooling, and customer-facing marketing primitives.
|
|
17
10
|
|
|
18
|
-
-
|
|
19
|
-
- npm `>=10.9.0`
|
|
20
|
-
- React `19.2.7` compatible frontend applications
|
|
11
|
+
The package remains network-neutral. It does not call `fetch`, load remote fonts, open sockets, or make network requests by itself. Frontends inject their own Gateway transport when they need API access.
|
|
21
12
|
|
|
22
|
-
|
|
13
|
+
## Public vs internal pricing
|
|
23
14
|
|
|
24
|
-
|
|
15
|
+
The package contains two separate layers:
|
|
25
16
|
|
|
26
|
-
`@busiverse/ui
|
|
17
|
+
- `@busiverse/ui/marketing`: public/customer-facing pricing cards and marketing primitives.
|
|
18
|
+
- `@busiverse/ui/billing`: internal/admin pricing explorer for operation-level tariffs, costs, margins, and chargeback visibility.
|
|
27
19
|
|
|
28
|
-
|
|
20
|
+
BusiLand should use the marketing layer. Internal/admin frontends may use the billing layer.
|
|
29
21
|
|
|
30
|
-
##
|
|
31
|
-
|
|
32
|
-
Recommended production option: publish to a private npm registry package.
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npm install @busiverse/ui
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Local package test option:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
cd packages/busiverse-ui
|
|
42
|
-
npm install
|
|
43
|
-
npm run build
|
|
44
|
-
npm pack
|
|
45
|
-
# then in each frontend
|
|
46
|
-
npm install ../packages/busiverse-ui/busiverse-ui-0.1.0.tgz
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Add CSS once per frontend
|
|
50
|
-
|
|
51
|
-
In `src/main.tsx` or `src/App.tsx`:
|
|
22
|
+
## Imports
|
|
52
23
|
|
|
53
24
|
```tsx
|
|
54
25
|
import "@busiverse/ui/styles.css";
|
|
26
|
+
import { BusiverseBrandHead, BusiverseLogo } from "@busiverse/ui/brand";
|
|
27
|
+
import { BusiverseI18nProvider } from "@busiverse/ui/i18n";
|
|
28
|
+
import { MarketingPricingCard } from "@busiverse/ui/marketing";
|
|
29
|
+
import { BusiverseGithubIcon } from "@busiverse/ui/social";
|
|
55
30
|
```
|
|
56
31
|
|
|
57
|
-
##
|
|
58
|
-
|
|
59
|
-
```env
|
|
60
|
-
VITE_GATEWAY_API_URL=https://api.busiversehq.com
|
|
61
|
-
VITE_SIGNUP_URL=https://user.busiversehq.com/signup
|
|
62
|
-
VITE_SERVICE_KEY=communication
|
|
63
|
-
VITE_DEFAULT_LOCALE=en-NG
|
|
64
|
-
VITE_DEFAULT_COUNTRY=NG
|
|
65
|
-
VITE_DEFAULT_REGION=NG-LA
|
|
66
|
-
VITE_DEFAULT_CURRENCY=NGN
|
|
67
|
-
VITE_DEFAULT_TIME_ZONE=Africa/Lagos
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Use AppShell
|
|
71
|
-
|
|
72
|
-
```tsx
|
|
73
|
-
import { AppShell, PageHeader, Button } from "@busiverse/ui";
|
|
74
|
-
|
|
75
|
-
export function Dashboard() {
|
|
76
|
-
return (
|
|
77
|
-
<AppShell service="communication">
|
|
78
|
-
<PageHeader
|
|
79
|
-
title="Communication"
|
|
80
|
-
description="Send, automate, and track messages across Busiverse."
|
|
81
|
-
action={<Button>New message</Button>}
|
|
82
|
-
/>
|
|
83
|
-
</AppShell>
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Use Gateway client
|
|
89
|
-
|
|
90
|
-
```tsx
|
|
91
|
-
import { createGatewayClient } from "@busiverse/ui";
|
|
92
|
-
|
|
93
|
-
const gateway = createGatewayClient({
|
|
94
|
-
baseUrl: import.meta.env.VITE_GATEWAY_API_URL,
|
|
95
|
-
getAccessToken: async () => token,
|
|
96
|
-
region: {
|
|
97
|
-
locale: "en-NG",
|
|
98
|
-
countryCode: "NG",
|
|
99
|
-
regionCode: "NG-LA",
|
|
100
|
-
currencyCode: "NGN",
|
|
101
|
-
timeZone: "Africa/Lagos"
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
await gateway.get("/communication/api/v1/messages");
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## Use the Tailwind preset only when needed
|
|
109
|
-
|
|
110
|
-
If a consuming app uses Tailwind and wants Busiverse tokens:
|
|
111
|
-
|
|
112
|
-
```ts
|
|
113
|
-
import { busiverseTailwindPreset } from "@busiverse/ui/tailwind";
|
|
114
|
-
|
|
115
|
-
export default {
|
|
116
|
-
presets: [busiverseTailwindPreset],
|
|
117
|
-
content: ["./index.html", "./src/**/*.{ts,tsx}"]
|
|
118
|
-
};
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
For Busiverse Vite frontends, Tailwind itself should be configured in the frontend app, not inside this UI package.
|
|
122
|
-
|
|
123
|
-
## Timeseries table
|
|
124
|
-
|
|
125
|
-
```tsx
|
|
126
|
-
import { TimeSeriesTable } from "@busiverse/ui";
|
|
127
|
-
|
|
128
|
-
<TimeSeriesTable
|
|
129
|
-
rows={metrics}
|
|
130
|
-
timestampKey="createdAt"
|
|
131
|
-
valueColumns={["requestCount", "p95LatencyMs", "errorRate"]}
|
|
132
|
-
/>
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## Signup rule
|
|
136
|
-
|
|
137
|
-
Only `user-frontend` should own real signup. Other frontends should use `<SignUpLink />` and route users to `https://user.busiversehq.com/signup`.
|
|
138
|
-
|
|
139
|
-
## Build and publish
|
|
32
|
+
## Publish
|
|
140
33
|
|
|
141
34
|
```bash
|
|
142
35
|
npm install
|
|
143
36
|
npm run typecheck
|
|
144
37
|
npm run build
|
|
145
|
-
npm audit --audit-level=low
|
|
146
|
-
npm pack --dry-run
|
|
147
38
|
npm publish --access public
|
|
148
39
|
```
|
|
149
|
-
|
|
150
|
-
## Version 0.2.0 additions
|
|
151
|
-
|
|
152
|
-
This release adds the BUSIVERSE standardized service pricing system used by `busiverse-landing` and reusable by every separately deployed Vercel frontend.
|
|
153
|
-
|
|
154
|
-
### Added
|
|
155
|
-
|
|
156
|
-
- `busiverseServicePricingCatalog` with 257 Account-rated operation rows.
|
|
157
|
-
- `ServicePricingExplorer` for external pricing, internal Busiverse chargeback, estimated direct cost, margin, and standardized equivalents.
|
|
158
|
-
- `RegionSelector` and supported pricing regions.
|
|
159
|
-
- Country/region/currency/time-zone aware pricing display helpers.
|
|
160
|
-
- Time-series aware service metadata for services that surface metrics, decision history, request metering, blockchain events, model jobs, and market data.
|
|
161
|
-
|
|
162
|
-
### Vercel frontend usage
|
|
163
|
-
|
|
164
|
-
Install from public npm after publishing this version:
|
|
165
|
-
|
|
166
|
-
```bash
|
|
167
|
-
npm install @busiverse/ui@^0.2.0
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
Import shared styles once in each Vite frontend entrypoint:
|
|
171
|
-
|
|
172
|
-
```tsx
|
|
173
|
-
import "@busiverse/ui/styles.css";
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
Wrap the frontend with the i18n provider:
|
|
177
|
-
|
|
178
|
-
```tsx
|
|
179
|
-
import { BusiverseI18nProvider } from "@busiverse/ui";
|
|
180
|
-
|
|
181
|
-
<BusiverseI18nProvider
|
|
182
|
-
initialRegion={{
|
|
183
|
-
locale: import.meta.env.VITE_DEFAULT_LOCALE ?? "en-NG",
|
|
184
|
-
countryCode: import.meta.env.VITE_DEFAULT_COUNTRY ?? "NG",
|
|
185
|
-
regionCode: import.meta.env.VITE_DEFAULT_REGION ?? "NG-LA",
|
|
186
|
-
currencyCode: import.meta.env.VITE_DEFAULT_CURRENCY ?? "NGN",
|
|
187
|
-
timeZone: import.meta.env.VITE_DEFAULT_TIME_ZONE ?? "Africa/Lagos",
|
|
188
|
-
}}
|
|
189
|
-
>
|
|
190
|
-
<App />
|
|
191
|
-
</BusiverseI18nProvider>
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
Use the standardized pricing explorer anywhere pricing must be shown:
|
|
195
|
-
|
|
196
|
-
```tsx
|
|
197
|
-
import { ServicePricingExplorer } from "@busiverse/ui";
|
|
198
|
-
|
|
199
|
-
<ServicePricingExplorer />
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
The current currency conversion rates are display fallbacks only. Final production charging still belongs to Account, with Location and Mint resolving region, currency, taxes, pass-through cost, and local pricing rules.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
## v0.2.1 network-neutral security patch
|
|
206
|
-
|
|
207
|
-
`@busiverse/ui` no longer performs direct network access from inside the package. The previous `createGatewayClient` implementation used the browser `fetch` global directly, which can be flagged by npm/package scanners as “network access”. The package now requires the consuming frontend to inject a transport function.
|
|
208
|
-
|
|
209
|
-
```ts
|
|
210
|
-
import { createGatewayClient } from "@busiverse/ui";
|
|
211
|
-
|
|
212
|
-
export const gateway = createGatewayClient({
|
|
213
|
-
baseUrl: import.meta.env.VITE_GATEWAY_API_URL,
|
|
214
|
-
transport: window.fetch.bind(window),
|
|
215
|
-
getAccessToken: async () => accessToken,
|
|
216
|
-
});
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
Font loading is also app-owned. The shared CSS does not import Google Fonts or any remote stylesheet. Each separately deployed Vercel frontend should self-host the BUSIVERSE fonts or load them explicitly at the app level.
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
## v0.2.2 brand asset ownership
|
|
223
|
-
|
|
224
|
-
`@busiverse/ui` is now the owner of BUSIVERSE favicons, platform icons, social preview defaults, and logo assets. Consuming frontends should not duplicate BUSIVERSE favicon/logo assets in their own `public/` folders unless a deployment platform explicitly requires a static file before JavaScript loads.
|
|
225
|
-
|
|
226
|
-
Use `BusiverseBrandHead` once near the root of each frontend to inject the shared favicons, app manifest, Open Graph metadata, Twitter card metadata, and Microsoft tile metadata from package-owned assets.
|
|
227
|
-
|
|
228
|
-
```tsx
|
|
229
|
-
import { BusiverseBrandHead } from "@busiverse/ui";
|
|
230
|
-
|
|
231
|
-
<BusiverseBrandHead
|
|
232
|
-
title="BUSIVERSE — Turn Ideas Into Operating Businesses"
|
|
233
|
-
description="BUSIVERSE combines AI automation, blockchain-backed trust, and modular business services to help teams launch and operate ventures faster."
|
|
234
|
-
/>
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
The package remains network-neutral: it does not call `fetch`, open sockets, or import remote fonts.
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
## v0.2.4 social icon ownership
|
|
241
|
-
|
|
242
|
-
`@busiverse/ui` owns BUSIVERSE-approved social icon wrappers so separately deployed frontends do not import brand icons from `lucide-react`. Lucide is an outline UI-icon library and newer builds do not export brand icons such as `Github`, `Twitter`, or `Linkedin`. Use:
|
|
243
|
-
|
|
244
|
-
```tsx
|
|
245
|
-
import { BusiverseGithubIcon, BusiverseXIcon, BusiverseLinkedInIcon, BusiverseMailIcon } from "@busiverse/ui";
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
The package remains network-neutral. The icons are inline SVG React components and do not fetch remote assets.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// src/assets/assets.ts
|
|
2
|
+
var busiverseAssets = {
|
|
3
|
+
logo: {
|
|
4
|
+
horizontal: {
|
|
5
|
+
white: new URL("./logo/busiverse-horizontal---white.svg", import.meta.url).href,
|
|
6
|
+
black: new URL("./logo/busiverse-horizontal---black.svg", import.meta.url).href,
|
|
7
|
+
color: new URL("./logo/busiverse-horizontal---color.svg", import.meta.url).href
|
|
8
|
+
},
|
|
9
|
+
full: {
|
|
10
|
+
white: new URL("./logo/busiverse-primary-full-logo---white.svg", import.meta.url).href,
|
|
11
|
+
black: new URL("./logo/busiverse-primary-full-logo---black.svg", import.meta.url).href,
|
|
12
|
+
color: new URL("./logo/busiverse-primary-full-logo---color.svg", import.meta.url).href
|
|
13
|
+
},
|
|
14
|
+
vertical: {
|
|
15
|
+
white: new URL("./logo/busiverse-vertical---white.svg", import.meta.url).href,
|
|
16
|
+
black: new URL("./logo/busiverse-vertical---black.svg", import.meta.url).href,
|
|
17
|
+
color: new URL("./logo/busiverse-vertical---color.svg", import.meta.url).href
|
|
18
|
+
},
|
|
19
|
+
icon: {
|
|
20
|
+
white: new URL("./icon/busiverse-icon-only---white.svg", import.meta.url).href,
|
|
21
|
+
black: new URL("./icon/busiverse-icon-only---black.svg", import.meta.url).href,
|
|
22
|
+
color: new URL("./icon/busiverse-icon-only---color.svg", import.meta.url).href
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
favicon: {
|
|
26
|
+
ico: new URL("./favicon.io/favicon.ico", import.meta.url).href,
|
|
27
|
+
png16: new URL("./favicon.io/favicon-16x16.png", import.meta.url).href,
|
|
28
|
+
png32: new URL("./favicon.io/favicon-32x32.png", import.meta.url).href,
|
|
29
|
+
png96: new URL("./favicon.io/favicon-96x96.png", import.meta.url).href,
|
|
30
|
+
appleTouchIcon: new URL("./favicon.io/apple-touch-icon.png", import.meta.url).href,
|
|
31
|
+
androidChrome192: new URL("./favicon.io/android-chrome-192x192.png", import.meta.url).href,
|
|
32
|
+
androidChrome512: new URL("./favicon.io/android-chrome-512x512.png", import.meta.url).href,
|
|
33
|
+
androidIcon192: new URL("./favicon.io/android-icon-192x192.png", import.meta.url).href,
|
|
34
|
+
msTile144: new URL("./favicon.io/ms-icon-144x144.png", import.meta.url).href
|
|
35
|
+
},
|
|
36
|
+
social: {
|
|
37
|
+
xHeader: new URL("./social/busiverse-twitter_x-header-2.7777777777777777x-darkbg.png", import.meta.url).href,
|
|
38
|
+
xProfile: new URL("./social/busiverse-twitter_x-profile-picture-2.2222222222222223x-darkbg.png", import.meta.url).href,
|
|
39
|
+
linkedInCover: new URL("./social/busiverse-linkedin-cover-photo-2.64x-darkbg.png", import.meta.url).href,
|
|
40
|
+
linkedInProfile: new URL("./social/busiverse-linkedin-profile-picture-2.2222222222222223x-darkbg.png", import.meta.url).href,
|
|
41
|
+
facebookCover: new URL("./social/busiverse-facebook-cover-photo-1.7333333333333334x-darkbg.png", import.meta.url).href,
|
|
42
|
+
facebookProfile: new URL("./social/busiverse-facebook-profile-picture-1x-darkbg.png", import.meta.url).href,
|
|
43
|
+
instagramPost: new URL("./social/busiverse-instagram-post-6x-darkbg.png", import.meta.url).href,
|
|
44
|
+
instagramProfile: new URL("./social/busiverse-instagram-profile-picture-1.7777777777777777x-darkbg.png", import.meta.url).href
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
export {
|
|
48
|
+
busiverseAssets
|
|
49
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-PYZVP4NI.js";
|
|
4
|
+
|
|
5
|
+
// src/components/social/SocialIcons.tsx
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
var paths = {
|
|
8
|
+
github: /* @__PURE__ */ jsx(
|
|
9
|
+
"path",
|
|
10
|
+
{
|
|
11
|
+
fillRule: "evenodd",
|
|
12
|
+
clipRule: "evenodd",
|
|
13
|
+
d: "M12 2.25c-5.52 0-10 4.48-10 10 0 4.42 2.87 8.17 6.84 9.5.5.09.68-.22.68-.48v-1.68c-2.78.6-3.37-1.34-3.37-1.34-.45-1.15-1.1-1.46-1.1-1.46-.9-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.89 1.52 2.34 1.08 2.91.83.09-.64.35-1.08.63-1.33-2.22-.25-4.56-1.11-4.56-4.94 0-1.09.39-1.98 1.03-2.68-.1-.25-.45-1.27.1-2.65 0 0 .84-.27 2.75 1.02A9.58 9.58 0 0 1 12 7.14c.85 0 1.7.11 2.5.34 1.9-1.29 2.74-1.02 2.74-1.02.55 1.38.2 2.4.1 2.65.64.7 1.03 1.59 1.03 2.68 0 3.84-2.34 4.69-4.57 4.94.36.31.68.92.68 1.86v2.76c0 .27.18.58.69.48A10.01 10.01 0 0 0 22 12.25c0-5.52-4.48-10-10-10Z"
|
|
14
|
+
}
|
|
15
|
+
),
|
|
16
|
+
x: /* @__PURE__ */ jsx("path", { d: "M13.66 10.62 21.24 2h-1.8l-6.58 7.48L7.6 2H1.54l7.95 11.31L1.54 22h1.8l6.95-7.53L15.84 22h6.06l-8.24-11.38Zm-2.46 2.8-.8-1.12L4 3.33h2.74l5.17 7.24.8 1.12 6.72 9.42H16.7l-5.5-7.69Z" }),
|
|
17
|
+
linkedin: /* @__PURE__ */ jsx("path", { d: "M5.34 8.25H2.7V21h2.64V8.25ZM5.52 4.3A1.53 1.53 0 1 0 2.46 4.3a1.53 1.53 0 0 0 3.06 0ZM21 13.68c0-3.42-1.83-5.01-4.28-5.01-1.97 0-2.86 1.08-3.35 1.84V8.25h-2.64V21h2.64v-6.31c0-1.66.31-3.28 2.38-3.28 2.04 0 2.07 1.91 2.07 3.38V21H21v-7.32Z" }),
|
|
18
|
+
mail: /* @__PURE__ */ jsx("path", { d: "M4.5 5.75A2.5 2.5 0 0 0 2 8.25v7.5a2.5 2.5 0 0 0 2.5 2.5h15a2.5 2.5 0 0 0 2.5-2.5v-7.5a2.5 2.5 0 0 0-2.5-2.5h-15Zm.17 2h14.66L12 12.87 4.67 7.75Zm-.67 2v6c0 .28.22.5.5.5h15a.5.5 0 0 0 .5-.5v-6l-7.43 5.2a1 1 0 0 1-1.14 0L4 9.75Z" })
|
|
19
|
+
};
|
|
20
|
+
function BusiverseSocialIcon({
|
|
21
|
+
name,
|
|
22
|
+
size = 20,
|
|
23
|
+
title,
|
|
24
|
+
className,
|
|
25
|
+
...props
|
|
26
|
+
}) {
|
|
27
|
+
const labelled = Boolean(title || props["aria-label"]);
|
|
28
|
+
return /* @__PURE__ */ jsxs(
|
|
29
|
+
"svg",
|
|
30
|
+
{
|
|
31
|
+
viewBox: "0 0 24 24",
|
|
32
|
+
width: size,
|
|
33
|
+
height: size,
|
|
34
|
+
fill: "currentColor",
|
|
35
|
+
role: labelled ? "img" : "presentation",
|
|
36
|
+
"aria-hidden": labelled ? void 0 : true,
|
|
37
|
+
className: cn("busiverse-social-icon", className),
|
|
38
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
39
|
+
...props,
|
|
40
|
+
children: [
|
|
41
|
+
title ? /* @__PURE__ */ jsx("title", { children: title }) : null,
|
|
42
|
+
paths[name]
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
function BusiverseGithubIcon(props) {
|
|
48
|
+
return /* @__PURE__ */ jsx(BusiverseSocialIcon, { name: "github", ...props });
|
|
49
|
+
}
|
|
50
|
+
function BusiverseXIcon(props) {
|
|
51
|
+
return /* @__PURE__ */ jsx(BusiverseSocialIcon, { name: "x", ...props });
|
|
52
|
+
}
|
|
53
|
+
function BusiverseLinkedInIcon(props) {
|
|
54
|
+
return /* @__PURE__ */ jsx(BusiverseSocialIcon, { name: "linkedin", ...props });
|
|
55
|
+
}
|
|
56
|
+
function BusiverseMailIcon(props) {
|
|
57
|
+
return /* @__PURE__ */ jsx(BusiverseSocialIcon, { name: "mail", ...props });
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export {
|
|
61
|
+
BusiverseSocialIcon,
|
|
62
|
+
BusiverseGithubIcon,
|
|
63
|
+
BusiverseXIcon,
|
|
64
|
+
BusiverseLinkedInIcon,
|
|
65
|
+
BusiverseMailIcon
|
|
66
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-PYZVP4NI.js";
|
|
4
|
+
|
|
5
|
+
// src/components/brand/BusiverseLogo.tsx
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
var 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>`;
|
|
8
|
+
var 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>`;
|
|
9
|
+
var 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>`;
|
|
10
|
+
var 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>`;
|
|
11
|
+
var 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>`;
|
|
12
|
+
var 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>`;
|
|
13
|
+
var 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>`;
|
|
14
|
+
var 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>`;
|
|
15
|
+
var 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>`;
|
|
16
|
+
var 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>`;
|
|
17
|
+
var 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>`;
|
|
18
|
+
var 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>`;
|
|
19
|
+
var svgMap = {
|
|
20
|
+
icon: { white: icon_white, black: icon_black, color: icon_color },
|
|
21
|
+
horizontal: { white: horizontal_white, black: horizontal_black, color: horizontal_color },
|
|
22
|
+
full: { white: full_white, black: full_black, color: full_color },
|
|
23
|
+
vertical: { white: vertical_white, black: vertical_black, color: vertical_color }
|
|
24
|
+
};
|
|
25
|
+
function BusiverseLogo({ variant = "horizontal", tone = "white", label = "BUSIVERSE", className, ...props }) {
|
|
26
|
+
return /* @__PURE__ */ jsx(
|
|
27
|
+
"span",
|
|
28
|
+
{
|
|
29
|
+
role: "img",
|
|
30
|
+
"aria-label": label,
|
|
31
|
+
className: cn("busiverse-logo", className),
|
|
32
|
+
dangerouslySetInnerHTML: { __html: svgMap[variant][tone] },
|
|
33
|
+
...props
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export {
|
|
39
|
+
BusiverseLogo
|
|
40
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Button,
|
|
3
|
+
Card
|
|
4
|
+
} from "./chunk-GRZVAWCA.js";
|
|
5
|
+
import {
|
|
6
|
+
BusiverseLogo
|
|
7
|
+
} from "./chunk-32FPZZH2.js";
|
|
8
|
+
import {
|
|
9
|
+
cn
|
|
10
|
+
} from "./chunk-PYZVP4NI.js";
|
|
11
|
+
|
|
12
|
+
// src/components/marketing/HeroSection.tsx
|
|
13
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
function HeroSection({
|
|
15
|
+
title = "Turn Ideas Into Operating Businesses",
|
|
16
|
+
subtitle = "BUSIVERSE combines AI automation, blockchain-backed trust, and modular business services to help teams launch and operate ventures faster.",
|
|
17
|
+
primaryCta = /* @__PURE__ */ jsx(Button, { children: "Start Building" }),
|
|
18
|
+
secondaryCta = /* @__PURE__ */ jsx(Button, { variant: "secondary", children: "Explore the Platform" })
|
|
19
|
+
}) {
|
|
20
|
+
return /* @__PURE__ */ jsx("section", { className: "busiverse-hero", children: /* @__PURE__ */ jsxs("div", { className: "busiverse-hero-content", children: [
|
|
21
|
+
/* @__PURE__ */ jsx(BusiverseLogo, { variant: "full", tone: "white", className: "busiverse-hero-logo" }),
|
|
22
|
+
/* @__PURE__ */ jsx("h1", { children: title }),
|
|
23
|
+
/* @__PURE__ */ jsx("p", { children: subtitle }),
|
|
24
|
+
/* @__PURE__ */ jsxs("div", { className: "busiverse-hero-actions", children: [
|
|
25
|
+
primaryCta,
|
|
26
|
+
secondaryCta
|
|
27
|
+
] })
|
|
28
|
+
] }) });
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// src/components/marketing/MarketingSectionHeader.tsx
|
|
32
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
33
|
+
function MarketingSectionHeader({ eyebrow, title, description, align = "center", className }) {
|
|
34
|
+
return /* @__PURE__ */ jsxs2("div", { className: cn("busiverse-marketing-section-header", align === "left" && "is-left", className), children: [
|
|
35
|
+
eyebrow && /* @__PURE__ */ jsx2("p", { className: "busiverse-marketing-eyebrow", children: eyebrow }),
|
|
36
|
+
/* @__PURE__ */ jsx2("h2", { children: title }),
|
|
37
|
+
description && /* @__PURE__ */ jsx2("p", { children: description })
|
|
38
|
+
] });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/components/marketing/MarketingFeatureCard.tsx
|
|
42
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
43
|
+
function MarketingFeatureCard({ icon, label, title, description, points, className }) {
|
|
44
|
+
return /* @__PURE__ */ jsxs3(Card, { className: cn("busiverse-marketing-feature-card", className), children: [
|
|
45
|
+
/* @__PURE__ */ jsxs3("div", { className: "busiverse-marketing-feature-topline", children: [
|
|
46
|
+
icon && /* @__PURE__ */ jsx3("div", { className: "busiverse-marketing-feature-icon", children: icon }),
|
|
47
|
+
label && /* @__PURE__ */ jsx3("span", { children: label })
|
|
48
|
+
] }),
|
|
49
|
+
/* @__PURE__ */ jsx3("h3", { children: title }),
|
|
50
|
+
/* @__PURE__ */ jsx3("p", { children: description }),
|
|
51
|
+
points && points.length > 0 && /* @__PURE__ */ jsx3("ul", { children: points.map((point, index) => /* @__PURE__ */ jsx3("li", { children: point }, index)) })
|
|
52
|
+
] });
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// src/components/marketing/MarketingPricingCard.tsx
|
|
56
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
57
|
+
function MarketingPricingCard({
|
|
58
|
+
name,
|
|
59
|
+
tagline,
|
|
60
|
+
price,
|
|
61
|
+
cadence,
|
|
62
|
+
description,
|
|
63
|
+
features,
|
|
64
|
+
ctaLabel = "Get started",
|
|
65
|
+
ctaHref,
|
|
66
|
+
featured = false,
|
|
67
|
+
note,
|
|
68
|
+
className
|
|
69
|
+
}) {
|
|
70
|
+
const actionClassName = cn(
|
|
71
|
+
"busiverse-focus-ring busiverse-btn busiverse-btn-md busiverse-marketing-pricing-button",
|
|
72
|
+
featured ? "busiverse-btn-primary" : "busiverse-btn-secondary"
|
|
73
|
+
);
|
|
74
|
+
return /* @__PURE__ */ jsxs4(Card, { className: cn("busiverse-marketing-pricing-card", featured && "is-featured", className), children: [
|
|
75
|
+
featured && /* @__PURE__ */ jsx4("div", { className: "busiverse-marketing-pricing-ribbon", children: "Recommended" }),
|
|
76
|
+
/* @__PURE__ */ jsx4("p", { className: "busiverse-marketing-pricing-tagline", children: tagline }),
|
|
77
|
+
/* @__PURE__ */ jsx4("h3", { children: name }),
|
|
78
|
+
/* @__PURE__ */ jsxs4("div", { className: "busiverse-marketing-pricing-price", children: [
|
|
79
|
+
/* @__PURE__ */ jsx4("strong", { children: price }),
|
|
80
|
+
cadence && /* @__PURE__ */ jsx4("span", { children: cadence })
|
|
81
|
+
] }),
|
|
82
|
+
/* @__PURE__ */ jsx4("p", { className: "busiverse-marketing-pricing-description", children: description }),
|
|
83
|
+
/* @__PURE__ */ jsx4("ul", { children: features.map((feature) => /* @__PURE__ */ jsx4("li", { children: feature }, feature)) }),
|
|
84
|
+
ctaHref ? /* @__PURE__ */ jsx4("a", { className: actionClassName, href: ctaHref, children: /* @__PURE__ */ jsx4("span", { children: ctaLabel }) }) : /* @__PURE__ */ jsx4("button", { className: actionClassName, type: "button", children: /* @__PURE__ */ jsx4("span", { children: ctaLabel }) }),
|
|
85
|
+
note && /* @__PURE__ */ jsx4("p", { className: "busiverse-marketing-pricing-note", children: note })
|
|
86
|
+
] });
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export {
|
|
90
|
+
HeroSection,
|
|
91
|
+
MarketingSectionHeader,
|
|
92
|
+
MarketingFeatureCard,
|
|
93
|
+
MarketingPricingCard
|
|
94
|
+
};
|