@busiverse/ui 0.2.4 → 0.2.5

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 CHANGED
@@ -246,3 +246,37 @@ import { BusiverseGithubIcon, BusiverseXIcon, BusiverseLinkedInIcon, BusiverseMa
246
246
  ```
247
247
 
248
248
  The package remains network-neutral. The icons are inline SVG React components and do not fetch remote assets.
249
+
250
+ ## v0.2.5 root export and asset policy
251
+
252
+ The root `@busiverse/ui` entry no longer re-exports the full brand asset manifest. This prevents every separately deployed frontend from emitting all social/profile/cover assets just because it imports a component from `@busiverse/ui`.
253
+
254
+ Use root imports for components and helpers:
255
+
256
+ ```ts
257
+ import { BusiverseBrandHead, BusiverseLogo, ServicePricingExplorer } from "@busiverse/ui";
258
+ ```
259
+
260
+ Use the explicit asset subpath only when an app truly needs the raw asset manifest:
261
+
262
+ ```ts
263
+ import { busiverseAssets } from "@busiverse/ui/assets";
264
+ ```
265
+
266
+ This keeps BusiLand and the other Vercel frontends smaller while preserving the shared asset source of truth.
267
+
268
+ ## v0.2.5 subpath imports
269
+
270
+ `@busiverse/ui` now publishes explicit subpath entrypoints so separately deployed Vercel frontends can avoid pulling unrelated pricing, social, or raw asset modules into the initial bundle.
271
+
272
+ Preferred imports:
273
+
274
+ ```ts
275
+ import { BusiverseLogo, BusiverseBrandHead } from "@busiverse/ui/brand";
276
+ import { BusiverseI18nProvider, RegionSelector } from "@busiverse/ui/i18n";
277
+ import { ServicePricingExplorer } from "@busiverse/ui/billing";
278
+ import { BusiverseGithubIcon, BusiverseXIcon } from "@busiverse/ui/social";
279
+ import { busiverseAssets } from "@busiverse/ui/assets";
280
+ ```
281
+
282
+ The root package export remains for compatibility, but production frontends should use subpath imports when working with large modules.
@@ -0,0 +1,2 @@
1
+ export * from "./assets";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,49 @@
1
+ // src/assets/assets.ts
2
+ var busiverseAssets = {
3
+ logo: {
4
+ horizontal: {
5
+ white: new URL("./assets/logo/busiverse-horizontal---white.svg", import.meta.url).href,
6
+ black: new URL("./assets/logo/busiverse-horizontal---black.svg", import.meta.url).href,
7
+ color: new URL("./assets/logo/busiverse-horizontal---color.svg", import.meta.url).href
8
+ },
9
+ full: {
10
+ white: new URL("./assets/logo/busiverse-primary-full-logo---white.svg", import.meta.url).href,
11
+ black: new URL("./assets/logo/busiverse-primary-full-logo---black.svg", import.meta.url).href,
12
+ color: new URL("./assets/logo/busiverse-primary-full-logo---color.svg", import.meta.url).href
13
+ },
14
+ vertical: {
15
+ white: new URL("./assets/logo/busiverse-vertical---white.svg", import.meta.url).href,
16
+ black: new URL("./assets/logo/busiverse-vertical---black.svg", import.meta.url).href,
17
+ color: new URL("./assets/logo/busiverse-vertical---color.svg", import.meta.url).href
18
+ },
19
+ icon: {
20
+ white: new URL("./assets/icon/busiverse-icon-only---white.svg", import.meta.url).href,
21
+ black: new URL("./assets/icon/busiverse-icon-only---black.svg", import.meta.url).href,
22
+ color: new URL("./assets/icon/busiverse-icon-only---color.svg", import.meta.url).href
23
+ }
24
+ },
25
+ favicon: {
26
+ ico: new URL("./assets/favicon.io/favicon.ico", import.meta.url).href,
27
+ png16: new URL("./assets/favicon.io/favicon-16x16.png", import.meta.url).href,
28
+ png32: new URL("./assets/favicon.io/favicon-32x32.png", import.meta.url).href,
29
+ png96: new URL("./assets/favicon.io/favicon-96x96.png", import.meta.url).href,
30
+ appleTouchIcon: new URL("./assets/favicon.io/apple-touch-icon.png", import.meta.url).href,
31
+ androidChrome192: new URL("./assets/favicon.io/android-chrome-192x192.png", import.meta.url).href,
32
+ androidChrome512: new URL("./assets/favicon.io/android-chrome-512x512.png", import.meta.url).href,
33
+ androidIcon192: new URL("./assets/favicon.io/android-icon-192x192.png", import.meta.url).href,
34
+ msTile144: new URL("./assets/favicon.io/ms-icon-144x144.png", import.meta.url).href
35
+ },
36
+ social: {
37
+ xHeader: new URL("./assets/social/busiverse-twitter_x-header-2.7777777777777777x-darkbg.png", import.meta.url).href,
38
+ xProfile: new URL("./assets/social/busiverse-twitter_x-profile-picture-2.2222222222222223x-darkbg.png", import.meta.url).href,
39
+ linkedInCover: new URL("./assets/social/busiverse-linkedin-cover-photo-2.64x-darkbg.png", import.meta.url).href,
40
+ linkedInProfile: new URL("./assets/social/busiverse-linkedin-profile-picture-2.2222222222222223x-darkbg.png", import.meta.url).href,
41
+ facebookCover: new URL("./assets/social/busiverse-facebook-cover-photo-1.7333333333333334x-darkbg.png", import.meta.url).href,
42
+ facebookProfile: new URL("./assets/social/busiverse-facebook-profile-picture-1x-darkbg.png", import.meta.url).href,
43
+ instagramPost: new URL("./assets/social/busiverse-instagram-post-6x-darkbg.png", import.meta.url).href,
44
+ instagramProfile: new URL("./assets/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
+ };
File without changes
@@ -0,0 +1,153 @@
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
+ // src/components/brand/BusiverseBrandHead.tsx
39
+ import * as React from "react";
40
+ var faviconIco = new URL("../../assets/assets/favicon.io/favicon.ico", import.meta.url).href;
41
+ var faviconPng16 = new URL("../../assets/assets/favicon.io/favicon-16x16.png", import.meta.url).href;
42
+ var faviconPng32 = new URL("../../assets/assets/favicon.io/favicon-32x32.png", import.meta.url).href;
43
+ var faviconPng96 = new URL("../../assets/assets/favicon.io/favicon-96x96.png", import.meta.url).href;
44
+ var appleTouchIcon = new URL("../../assets/assets/favicon.io/apple-touch-icon.png", import.meta.url).href;
45
+ var androidIcon192 = new URL("../../assets/assets/favicon.io/android-icon-192x192.png", import.meta.url).href;
46
+ var androidChrome192 = new URL("../../assets/assets/favicon.io/android-chrome-192x192.png", import.meta.url).href;
47
+ var androidChrome512 = new URL("../../assets/assets/favicon.io/android-chrome-512x512.png", import.meta.url).href;
48
+ var msTile144 = new URL("../../assets/assets/favicon.io/ms-icon-144x144.png", import.meta.url).href;
49
+ var defaultSocialImage = new URL("../../assets/assets/social/busiverse-twitter_x-header-2.7777777777777777x-darkbg.png", import.meta.url).href;
50
+ var DEFAULT_TITLE = "BUSIVERSE \u2014 Turn Ideas Into Operating Businesses";
51
+ var DEFAULT_DESCRIPTION = "BUSIVERSE combines AI automation, blockchain-backed trust, and modular business services to help teams launch and operate ventures faster.";
52
+ var DEFAULT_THEME_COLOR = "#020617";
53
+ function ensureMeta(selector, attributes) {
54
+ let node = document.head.querySelector(selector);
55
+ if (!node) {
56
+ node = document.createElement("meta");
57
+ document.head.appendChild(node);
58
+ }
59
+ Object.entries(attributes).forEach(([key, value]) => node?.setAttribute(key, value));
60
+ return node;
61
+ }
62
+ function ensureLink(selector, attributes) {
63
+ let node = document.head.querySelector(selector);
64
+ if (!node) {
65
+ node = document.createElement("link");
66
+ node.setAttribute("data-busiverse-ui-head", "true");
67
+ document.head.appendChild(node);
68
+ }
69
+ Object.entries(attributes).forEach(([key, value]) => node?.setAttribute(key, value));
70
+ return node;
71
+ }
72
+ function createManifestDataUrl(title, description, themeColor) {
73
+ const manifest = {
74
+ name: title,
75
+ short_name: "BUSIVERSE",
76
+ description,
77
+ start_url: "/",
78
+ scope: "/",
79
+ display: "standalone",
80
+ background_color: themeColor,
81
+ theme_color: themeColor,
82
+ icons: [
83
+ { src: androidChrome192, sizes: "192x192", type: "image/png" },
84
+ { src: androidChrome512, sizes: "512x512", type: "image/png" }
85
+ ]
86
+ };
87
+ return `data:application/manifest+json,${encodeURIComponent(JSON.stringify(manifest))}`;
88
+ }
89
+ function applyBusiverseBrandHead({
90
+ title = DEFAULT_TITLE,
91
+ description = DEFAULT_DESCRIPTION,
92
+ siteName = "Busiverse",
93
+ url,
94
+ image = defaultSocialImage,
95
+ twitterSite = "@busiverse1",
96
+ keywords = "Busiverse, AI automation, blockchain-backed trust, modular business services, distributed business infrastructure",
97
+ locale = "en_NG",
98
+ themeColor = DEFAULT_THEME_COLOR,
99
+ appleMobileWebAppTitle = "BUSIVERSE",
100
+ applicationName = "BUSIVERSE"
101
+ } = {}) {
102
+ document.title = title;
103
+ ensureMeta('meta[name="description"]', { name: "description", content: description });
104
+ ensureMeta('meta[name="keywords"]', { name: "keywords", content: keywords });
105
+ ensureMeta('meta[name="theme-color"]', { name: "theme-color", content: themeColor });
106
+ ensureMeta('meta[name="application-name"]', { name: "application-name", content: applicationName });
107
+ ensureMeta('meta[name="apple-mobile-web-app-title"]', { name: "apple-mobile-web-app-title", content: appleMobileWebAppTitle });
108
+ ensureMeta('meta[name="msapplication-TileColor"]', { name: "msapplication-TileColor", content: themeColor });
109
+ ensureMeta('meta[name="msapplication-TileImage"]', { name: "msapplication-TileImage", content: msTile144 });
110
+ ensureLink('link[data-busiverse-ui-head="icon-ico"]', { rel: "icon", type: "image/x-icon", href: faviconIco, "data-busiverse-ui-head": "icon-ico" });
111
+ ensureLink('link[data-busiverse-ui-head="icon-16"]', { rel: "icon", type: "image/png", sizes: "16x16", href: faviconPng16, "data-busiverse-ui-head": "icon-16" });
112
+ ensureLink('link[data-busiverse-ui-head="icon-32"]', { rel: "icon", type: "image/png", sizes: "32x32", href: faviconPng32, "data-busiverse-ui-head": "icon-32" });
113
+ ensureLink('link[data-busiverse-ui-head="icon-96"]', { rel: "icon", type: "image/png", sizes: "96x96", href: faviconPng96, "data-busiverse-ui-head": "icon-96" });
114
+ ensureLink('link[data-busiverse-ui-head="icon-192"]', { rel: "icon", type: "image/png", sizes: "192x192", href: androidIcon192, "data-busiverse-ui-head": "icon-192" });
115
+ ensureLink('link[data-busiverse-ui-head="apple-touch-icon"]', { rel: "apple-touch-icon", sizes: "180x180", href: appleTouchIcon, "data-busiverse-ui-head": "apple-touch-icon" });
116
+ ensureLink('link[data-busiverse-ui-head="manifest"]', { rel: "manifest", href: createManifestDataUrl(title, description, themeColor), "data-busiverse-ui-head": "manifest" });
117
+ ensureMeta('meta[property="og:title"]', { property: "og:title", content: title });
118
+ ensureMeta('meta[property="og:description"]', { property: "og:description", content: description });
119
+ ensureMeta('meta[property="og:type"]', { property: "og:type", content: "website" });
120
+ ensureMeta('meta[property="og:site_name"]', { property: "og:site_name", content: siteName });
121
+ ensureMeta('meta[property="og:locale"]', { property: "og:locale", content: locale });
122
+ ensureMeta('meta[property="og:image"]', { property: "og:image", content: image });
123
+ if (url) ensureMeta('meta[property="og:url"]', { property: "og:url", content: url });
124
+ ensureMeta('meta[name="twitter:card"]', { name: "twitter:card", content: "summary_large_image" });
125
+ ensureMeta('meta[name="twitter:title"]', { name: "twitter:title", content: title });
126
+ ensureMeta('meta[name="twitter:description"]', { name: "twitter:description", content: description });
127
+ ensureMeta('meta[name="twitter:site"]', { name: "twitter:site", content: twitterSite });
128
+ ensureMeta('meta[name="twitter:image"]', { name: "twitter:image", content: image });
129
+ }
130
+ function BusiverseBrandHead(props) {
131
+ React.useEffect(() => {
132
+ applyBusiverseBrandHead(props);
133
+ }, [
134
+ props.title,
135
+ props.description,
136
+ props.siteName,
137
+ props.url,
138
+ props.image,
139
+ props.twitterSite,
140
+ props.keywords,
141
+ props.locale,
142
+ props.themeColor,
143
+ props.appleMobileWebAppTitle,
144
+ props.applicationName
145
+ ]);
146
+ return null;
147
+ }
148
+
149
+ export {
150
+ BusiverseLogo,
151
+ applyBusiverseBrandHead,
152
+ BusiverseBrandHead
153
+ };
@@ -0,0 +1,24 @@
1
+ // src/utils/cn.ts
2
+ function cn(...values) {
3
+ const out = [];
4
+ const push = (value) => {
5
+ if (!value) return;
6
+ if (typeof value === "string" || typeof value === "number") {
7
+ out.push(String(value));
8
+ return;
9
+ }
10
+ if (Array.isArray(value)) {
11
+ value.forEach(push);
12
+ return;
13
+ }
14
+ Object.entries(value).forEach(([key, enabled]) => {
15
+ if (enabled) out.push(key);
16
+ });
17
+ };
18
+ values.forEach(push);
19
+ return out.join(" ");
20
+ }
21
+
22
+ export {
23
+ cn
24
+ };