@busiverse/ui 0.2.5 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +8 -27
  2. package/dist/assets-public.d.ts +2 -0
  3. package/dist/assets-public.d.ts.map +1 -0
  4. package/dist/assets-public.js +6 -0
  5. package/dist/billing.d.ts +3 -0
  6. package/dist/billing.d.ts.map +1 -0
  7. package/dist/billing.js +46 -0
  8. package/dist/brand.d.ts +2 -0
  9. package/dist/brand.d.ts.map +1 -0
  10. package/dist/brand.js +14 -0
  11. package/dist/{chunk-PTOKOI4Q.js → chunk-32FPZZH2.js} +1 -114
  12. package/dist/chunk-IVTESKF4.js +40 -0
  13. package/dist/{chunk-UU2CXC3N.js → chunk-MPBOCUY4.js} +112 -143
  14. package/dist/chunk-NN24XQYI.js +109 -0
  15. package/dist/chunk-NUGBTLBK.js +72 -0
  16. package/dist/chunk-QK6O2RHQ.js +50 -0
  17. package/dist/components/brand/BusiverseBrandHead.d.ts.map +1 -1
  18. package/dist/components/marketing/MarketingFeatureCard.d.ts +11 -0
  19. package/dist/components/marketing/MarketingFeatureCard.d.ts.map +1 -0
  20. package/dist/components/marketing/MarketingPricingCard.d.ts +14 -0
  21. package/dist/components/marketing/MarketingPricingCard.d.ts.map +1 -0
  22. package/dist/components/marketing/MarketingSectionHeader.d.ts +10 -0
  23. package/dist/components/marketing/MarketingSectionHeader.d.ts.map +1 -0
  24. package/dist/components/marketing/index.d.ts +3 -0
  25. package/dist/components/marketing/index.d.ts.map +1 -1
  26. package/dist/i18n-public.d.ts +2 -0
  27. package/dist/i18n-public.d.ts.map +1 -0
  28. package/dist/{i18n/index.js → i18n-public.js} +2 -3
  29. package/dist/index.d.ts +1 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +46 -49
  32. package/dist/marketing.d.ts +2 -0
  33. package/dist/marketing.d.ts.map +1 -0
  34. package/dist/marketing.js +15 -0
  35. package/dist/social.d.ts +2 -0
  36. package/dist/social.d.ts.map +1 -0
  37. package/dist/{components/social/index.js → social.js} +2 -2
  38. package/dist/styles.css +57 -0
  39. package/dist/tailwind-public.d.ts +2 -0
  40. package/dist/tailwind-public.d.ts.map +1 -0
  41. package/dist/{tailwind/index.js → tailwind-public.js} +1 -1
  42. package/package.json +29 -24
  43. package/dist/assets/index.d.ts +0 -2
  44. package/dist/assets/index.d.ts.map +0 -1
  45. package/dist/assets/index.js +0 -49
  46. package/dist/chunk-NZ65VTKR.js +0 -0
  47. package/dist/components/billing/index.js +0 -12
  48. package/dist/components/brand/index.js +0 -11
@@ -5,65 +5,76 @@ import {
5
5
  getSupportedRegion,
6
6
  useBusiverseI18n
7
7
  } from "./chunk-WDOMYE77.js";
8
+ import {
9
+ Button
10
+ } from "./chunk-IVTESKF4.js";
8
11
  import {
9
12
  cn
10
13
  } from "./chunk-PYZVP4NI.js";
11
14
 
12
- // src/components/primitives/Button.tsx
13
- import * as React from "react";
14
- import { jsx, jsxs } from "react/jsx-runtime";
15
- var variants = {
16
- primary: "busiverse-btn-primary",
17
- secondary: "busiverse-btn-secondary",
18
- ghost: "busiverse-btn-ghost",
19
- danger: "busiverse-btn-danger",
20
- success: "busiverse-btn-success",
21
- link: "busiverse-btn-link"
22
- };
23
- var sizes = {
24
- sm: "busiverse-btn-sm",
25
- md: "busiverse-btn-md",
26
- lg: "busiverse-btn-lg"
27
- };
28
- var Button = React.forwardRef(function Button2({ className, variant = "primary", size = "md", isLoading, children, disabled, ...props }, ref) {
29
- return /* @__PURE__ */ jsxs(
30
- "button",
31
- {
32
- ref,
33
- className: cn("busiverse-focus-ring busiverse-btn", variants[variant], sizes[size], className),
34
- disabled: disabled || isLoading,
35
- "aria-busy": isLoading || void 0,
36
- ...props,
37
- children: [
38
- isLoading && /* @__PURE__ */ jsx("span", { className: "busiverse-spinner", "aria-hidden": "true" }),
39
- /* @__PURE__ */ jsx("span", { children })
40
- ]
41
- }
42
- );
43
- });
15
+ // src/components/billing/CurrencyAmount.tsx
16
+ import { Fragment, jsx } from "react/jsx-runtime";
17
+ function CurrencyAmount({ amount, currency = "NGN", locale = "en-NG", minimumFractionDigits, maximumFractionDigits }) {
18
+ const region = { locale, currencyCode: currency };
19
+ return /* @__PURE__ */ jsx(Fragment, { children: formatCurrency(amount, region, { minimumFractionDigits, maximumFractionDigits }) });
20
+ }
21
+
22
+ // src/components/billing/UsageQuotaBar.tsx
23
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
24
+ function UsageQuotaBar({ used, limit, label }) {
25
+ const percent = limit > 0 ? Math.min(100, Math.round(used / limit * 100)) : 0;
26
+ return /* @__PURE__ */ jsxs("div", { className: "busiverse-quota", children: [
27
+ /* @__PURE__ */ jsxs("div", { className: "busiverse-quota-row", children: [
28
+ /* @__PURE__ */ jsx2("span", { children: label }),
29
+ /* @__PURE__ */ jsxs("span", { children: [
30
+ used.toLocaleString(),
31
+ " / ",
32
+ limit.toLocaleString()
33
+ ] })
34
+ ] }),
35
+ /* @__PURE__ */ jsx2("div", { className: "busiverse-quota-track", children: /* @__PURE__ */ jsx2("div", { className: "busiverse-quota-fill", style: { width: `${percent}%` } }) })
36
+ ] });
37
+ }
38
+
39
+ // src/components/data/DataTable.tsx
40
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
41
+ function getCellValue(row, key) {
42
+ const value = row[String(key)];
43
+ if (value == null) return "\u2014";
44
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return String(value);
45
+ return JSON.stringify(value);
46
+ }
47
+ function DataTable({ rows, columns, getRowKey, isLoading, emptyState, className, dense }) {
48
+ if (isLoading) return /* @__PURE__ */ jsx3("div", { className: "busiverse-table-state", children: "Loading records\u2026" });
49
+ if (!rows.length) return /* @__PURE__ */ jsx3("div", { className: "busiverse-table-state", children: emptyState ?? "No records found." });
50
+ return /* @__PURE__ */ jsx3("div", { className: cn("busiverse-table-wrap", className), children: /* @__PURE__ */ jsxs2("table", { className: cn("busiverse-table", dense && "is-dense"), children: [
51
+ /* @__PURE__ */ jsx3("thead", { children: /* @__PURE__ */ jsx3("tr", { children: columns.map((column) => /* @__PURE__ */ jsx3("th", { style: { width: column.width, textAlign: column.align }, children: column.header }, String(column.key))) }) }),
52
+ /* @__PURE__ */ jsx3("tbody", { children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx3("tr", { children: columns.map((column) => /* @__PURE__ */ jsx3("td", { style: { textAlign: column.align }, children: column.render ? column.render(row, rowIndex) : getCellValue(row, column.key) }, String(column.key))) }, getRowKey?.(row, rowIndex) ?? rowIndex)) })
53
+ ] }) });
54
+ }
55
+
56
+ // src/components/primitives/Badge.tsx
57
+ import { jsx as jsx4 } from "react/jsx-runtime";
58
+ function Badge({ className, tone = "blue", ...props }) {
59
+ return /* @__PURE__ */ jsx4("span", { className: cn("busiverse-badge", `busiverse-badge-${tone}`, className), ...props });
60
+ }
44
61
 
45
62
  // src/components/primitives/Card.tsx
46
- import { jsx as jsx2 } from "react/jsx-runtime";
63
+ import { jsx as jsx5 } from "react/jsx-runtime";
47
64
  function Card({ className, interactive, ...props }) {
48
- return /* @__PURE__ */ jsx2("div", { className: cn("busiverse-card", interactive && "busiverse-card-interactive", className), ...props });
65
+ return /* @__PURE__ */ jsx5("div", { className: cn("busiverse-card", interactive && "busiverse-card-interactive", className), ...props });
49
66
  }
50
67
  function CardHeader({ className, ...props }) {
51
- return /* @__PURE__ */ jsx2("div", { className: cn("busiverse-card-header", className), ...props });
68
+ return /* @__PURE__ */ jsx5("div", { className: cn("busiverse-card-header", className), ...props });
52
69
  }
53
70
  function CardTitle({ className, ...props }) {
54
- return /* @__PURE__ */ jsx2("h3", { className: cn("busiverse-card-title", className), ...props });
71
+ return /* @__PURE__ */ jsx5("h3", { className: cn("busiverse-card-title", className), ...props });
55
72
  }
56
73
  function CardDescription({ className, ...props }) {
57
- return /* @__PURE__ */ jsx2("p", { className: cn("busiverse-card-description", className), ...props });
74
+ return /* @__PURE__ */ jsx5("p", { className: cn("busiverse-card-description", className), ...props });
58
75
  }
59
76
  function CardContent({ className, ...props }) {
60
- return /* @__PURE__ */ jsx2("div", { className: cn("busiverse-card-content", className), ...props });
61
- }
62
-
63
- // src/components/primitives/Badge.tsx
64
- import { jsx as jsx3 } from "react/jsx-runtime";
65
- function Badge({ className, tone = "blue", ...props }) {
66
- return /* @__PURE__ */ jsx3("span", { className: cn("busiverse-badge", `busiverse-badge-${tone}`, className), ...props });
77
+ return /* @__PURE__ */ jsx5("div", { className: cn("busiverse-card-content", className), ...props });
67
78
  }
68
79
 
69
80
  // src/registry/services.ts
@@ -104,47 +115,6 @@ function getBusiverseService(key) {
104
115
  return busiverseServices.find((service) => service.key === key);
105
116
  }
106
117
 
107
- // src/components/data/DataTable.tsx
108
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
109
- function getCellValue(row, key) {
110
- const value = row[String(key)];
111
- if (value == null) return "\u2014";
112
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return String(value);
113
- return JSON.stringify(value);
114
- }
115
- function DataTable({ rows, columns, getRowKey, isLoading, emptyState, className, dense }) {
116
- if (isLoading) return /* @__PURE__ */ jsx4("div", { className: "busiverse-table-state", children: "Loading records\u2026" });
117
- if (!rows.length) return /* @__PURE__ */ jsx4("div", { className: "busiverse-table-state", children: emptyState ?? "No records found." });
118
- return /* @__PURE__ */ jsx4("div", { className: cn("busiverse-table-wrap", className), children: /* @__PURE__ */ jsxs2("table", { className: cn("busiverse-table", dense && "is-dense"), children: [
119
- /* @__PURE__ */ jsx4("thead", { children: /* @__PURE__ */ jsx4("tr", { children: columns.map((column) => /* @__PURE__ */ jsx4("th", { style: { width: column.width, textAlign: column.align }, children: column.header }, String(column.key))) }) }),
120
- /* @__PURE__ */ jsx4("tbody", { children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx4("tr", { children: columns.map((column) => /* @__PURE__ */ jsx4("td", { style: { textAlign: column.align }, children: column.render ? column.render(row, rowIndex) : getCellValue(row, column.key) }, String(column.key))) }, getRowKey?.(row, rowIndex) ?? rowIndex)) })
121
- ] }) });
122
- }
123
-
124
- // src/components/billing/CurrencyAmount.tsx
125
- import { Fragment, jsx as jsx5 } from "react/jsx-runtime";
126
- function CurrencyAmount({ amount, currency = "NGN", locale = "en-NG", minimumFractionDigits, maximumFractionDigits }) {
127
- const region = { locale, currencyCode: currency };
128
- return /* @__PURE__ */ jsx5(Fragment, { children: formatCurrency(amount, region, { minimumFractionDigits, maximumFractionDigits }) });
129
- }
130
-
131
- // src/components/billing/UsageQuotaBar.tsx
132
- import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
133
- function UsageQuotaBar({ used, limit, label }) {
134
- const percent = limit > 0 ? Math.min(100, Math.round(used / limit * 100)) : 0;
135
- return /* @__PURE__ */ jsxs3("div", { className: "busiverse-quota", children: [
136
- /* @__PURE__ */ jsxs3("div", { className: "busiverse-quota-row", children: [
137
- /* @__PURE__ */ jsx6("span", { children: label }),
138
- /* @__PURE__ */ jsxs3("span", { children: [
139
- used.toLocaleString(),
140
- " / ",
141
- limit.toLocaleString()
142
- ] })
143
- ] }),
144
- /* @__PURE__ */ jsx6("div", { className: "busiverse-quota-track", children: /* @__PURE__ */ jsx6("div", { className: "busiverse-quota-fill", style: { width: `${percent}%` } }) })
145
- ] });
146
- }
147
-
148
118
  // src/pricing/servicePricingCatalog.ts
149
119
  var busiverseServicePricingCatalog = [
150
120
  {
@@ -7704,8 +7674,8 @@ function describeTimeEquivalents(row, region) {
7704
7674
  }
7705
7675
 
7706
7676
  // src/components/billing/ServicePricingExplorer.tsx
7707
- import * as React2 from "react";
7708
- import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
7677
+ import * as React from "react";
7678
+ import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
7709
7679
  var categoryOrder = ["all", "core", "security", "finance", "business", "commerce", "operations", "intelligence", "blockchain", "developer"];
7710
7680
  var categoryLabels = {
7711
7681
  all: "All services",
@@ -7727,7 +7697,7 @@ function summarizeRange(min, max, region) {
7727
7697
  return `${formatPricingValue(min, region)} \u2013 ${formatPricingValue(max, region)}`;
7728
7698
  }
7729
7699
  function useFilteredSummaries(rows) {
7730
- return React2.useMemo(() => {
7700
+ return React.useMemo(() => {
7731
7701
  const serviceKeys = [...new Set(rows.map((row) => row.service))];
7732
7702
  return getServicePricingSummaries(busiverseServices.filter((service) => serviceKeys.includes(service.key)));
7733
7703
  }, [rows]);
@@ -7742,28 +7712,28 @@ function ServicePricingExplorer({
7742
7712
  maxInitialRows = 48
7743
7713
  }) {
7744
7714
  const { region } = useBusiverseI18n();
7745
- const [audience, setAudience] = React2.useState(defaultAudience);
7746
- const [category, setCategory] = React2.useState("all");
7747
- const [query, setQuery] = React2.useState("");
7748
- const [showAllRows, setShowAllRows] = React2.useState(false);
7715
+ const [audience, setAudience] = React.useState(defaultAudience);
7716
+ const [category, setCategory] = React.useState("all");
7717
+ const [query, setQuery] = React.useState("");
7718
+ const [showAllRows, setShowAllRows] = React.useState(false);
7749
7719
  const summaries = useFilteredSummaries(rows);
7750
- const filteredSummaries = React2.useMemo(() => summaries.filter((summary) => {
7720
+ const filteredSummaries = React.useMemo(() => summaries.filter((summary) => {
7751
7721
  const service = getBusiverseService(summary.service);
7752
7722
  if (category !== "all" && service?.category !== category) return false;
7753
7723
  if (!query.trim()) return true;
7754
7724
  const haystack = `${summary.service} ${service?.name ?? ""} ${service?.description ?? ""}`.toLowerCase();
7755
7725
  return haystack.includes(query.toLowerCase());
7756
7726
  }), [category, query, summaries]);
7757
- const filteredRows = React2.useMemo(() => {
7727
+ const filteredRows = React.useMemo(() => {
7758
7728
  const allowedServices = new Set(filteredSummaries.map((summary) => summary.service));
7759
7729
  return rows.filter((row) => allowedServices.has(row.service));
7760
7730
  }, [rows, filteredSummaries]);
7761
7731
  const visibleRows = showAllRows ? filteredRows : filteredRows.slice(0, maxInitialRows);
7762
7732
  const columns = [
7763
7733
  { key: "service", header: "Service", render: (row) => serviceLabel(row.service), width: "160px" },
7764
- { key: "displayName", header: "Operation", render: (row) => /* @__PURE__ */ jsxs4("span", { children: [
7765
- /* @__PURE__ */ jsx7("strong", { children: row.displayName }),
7766
- /* @__PURE__ */ jsx7("small", { className: "busiverse-pricing-code", children: row.operationCode })
7734
+ { key: "displayName", header: "Operation", render: (row) => /* @__PURE__ */ jsxs3("span", { children: [
7735
+ /* @__PURE__ */ jsx6("strong", { children: row.displayName }),
7736
+ /* @__PURE__ */ jsx6("small", { className: "busiverse-pricing-code", children: row.operationCode })
7767
7737
  ] }) },
7768
7738
  { key: "cadence", header: "Unit", render: (row) => `${labelCadence(row.cadence)} \xB7 ${row.unit}` },
7769
7739
  { key: "standaloneUsd", header: audience === "external" ? "External price" : "Internal price", align: "right", render: (row) => formatPricingValue(getRowPriceUsd(row, audience), region) },
@@ -7771,17 +7741,17 @@ function ServicePricingExplorer({
7771
7741
  { key: "standaloneGrossMargin", header: "Margin", align: "right", render: (row) => formatMargin(getRowGrossMargin(row, audience), region.locale) },
7772
7742
  { key: "perMonthUsd", header: "Standard equivalents", render: (row) => describeTimeEquivalents(row, region) || "\u2014" }
7773
7743
  ];
7774
- return /* @__PURE__ */ jsxs4("section", { className: cn("busiverse-pricing-explorer", className), children: [
7775
- /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-header", children: [
7776
- /* @__PURE__ */ jsxs4("div", { children: [
7777
- /* @__PURE__ */ jsx7(Badge, { tone: "blue", children: "Account-rated catalog" }),
7778
- /* @__PURE__ */ jsx7("h2", { children: title }),
7779
- /* @__PURE__ */ jsx7("p", { children: description })
7744
+ return /* @__PURE__ */ jsxs3("section", { className: cn("busiverse-pricing-explorer", className), children: [
7745
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-header", children: [
7746
+ /* @__PURE__ */ jsxs3("div", { children: [
7747
+ /* @__PURE__ */ jsx6(Badge, { tone: "blue", children: "Account-rated catalog" }),
7748
+ /* @__PURE__ */ jsx6("h2", { children: title }),
7749
+ /* @__PURE__ */ jsx6("p", { children: description })
7780
7750
  ] }),
7781
- showRegionSelector && /* @__PURE__ */ jsx7(RegionSelector, {})
7751
+ showRegionSelector && /* @__PURE__ */ jsx6(RegionSelector, {})
7782
7752
  ] }),
7783
- /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-controls", role: "search", children: [
7784
- /* @__PURE__ */ jsx7(
7753
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-controls", role: "search", children: [
7754
+ /* @__PURE__ */ jsx6(
7785
7755
  "input",
7786
7756
  {
7787
7757
  "aria-label": "Search services",
@@ -7791,26 +7761,26 @@ function ServicePricingExplorer({
7791
7761
  onChange: (event) => setQuery(event.target.value)
7792
7762
  }
7793
7763
  ),
7794
- /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-toggle", "aria-label": "Pricing audience", children: [
7795
- /* @__PURE__ */ jsx7(Button, { size: "sm", variant: audience === "external" ? "primary" : "secondary", onClick: () => setAudience("external"), children: "External" }),
7796
- /* @__PURE__ */ jsx7(Button, { size: "sm", variant: audience === "internal" ? "primary" : "secondary", onClick: () => setAudience("internal"), children: "Internal Busiverse" })
7764
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-toggle", "aria-label": "Pricing audience", children: [
7765
+ /* @__PURE__ */ jsx6(Button, { size: "sm", variant: audience === "external" ? "primary" : "secondary", onClick: () => setAudience("external"), children: "External" }),
7766
+ /* @__PURE__ */ jsx6(Button, { size: "sm", variant: audience === "internal" ? "primary" : "secondary", onClick: () => setAudience("internal"), children: "Internal Busiverse" })
7797
7767
  ] })
7798
7768
  ] }),
7799
- /* @__PURE__ */ jsx7("div", { className: "busiverse-pricing-tabs", "aria-label": "Service categories", children: categoryOrder.map((item) => /* @__PURE__ */ jsx7("button", { className: cn(item === category && "is-active"), onClick: () => setCategory(item), type: "button", children: categoryLabels[item] ?? item }, item)) }),
7800
- /* @__PURE__ */ jsx7("div", { className: "busiverse-pricing-grid", children: filteredSummaries.map((summary) => /* @__PURE__ */ jsx7(ServicePricingCard, { summary, audience }, summary.service)) }),
7801
- /* @__PURE__ */ jsxs4(Card, { className: "busiverse-pricing-table-card", children: [
7802
- /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-table-heading", children: [
7803
- /* @__PURE__ */ jsxs4("div", { children: [
7804
- /* @__PURE__ */ jsx7("h3", { children: "Operation-level tariff sheet" }),
7805
- /* @__PURE__ */ jsx7("p", { children: "Rows include external price, internal chargeback, estimated direct cost, gross margin, and standardized time equivalents where applicable." })
7769
+ /* @__PURE__ */ jsx6("div", { className: "busiverse-pricing-tabs", "aria-label": "Service categories", children: categoryOrder.map((item) => /* @__PURE__ */ jsx6("button", { className: cn(item === category && "is-active"), onClick: () => setCategory(item), type: "button", children: categoryLabels[item] ?? item }, item)) }),
7770
+ /* @__PURE__ */ jsx6("div", { className: "busiverse-pricing-grid", children: filteredSummaries.map((summary) => /* @__PURE__ */ jsx6(ServicePricingCard, { summary, audience }, summary.service)) }),
7771
+ /* @__PURE__ */ jsxs3(Card, { className: "busiverse-pricing-table-card", children: [
7772
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-table-heading", children: [
7773
+ /* @__PURE__ */ jsxs3("div", { children: [
7774
+ /* @__PURE__ */ jsx6("h3", { children: "Operation-level tariff sheet" }),
7775
+ /* @__PURE__ */ jsx6("p", { children: "Rows include external price, internal chargeback, estimated direct cost, gross margin, and standardized time equivalents where applicable." })
7806
7776
  ] }),
7807
- /* @__PURE__ */ jsxs4(Badge, { tone: "cyan", children: [
7777
+ /* @__PURE__ */ jsxs3(Badge, { tone: "cyan", children: [
7808
7778
  filteredRows.length,
7809
7779
  " operations"
7810
7780
  ] })
7811
7781
  ] }),
7812
- /* @__PURE__ */ jsx7(DataTable, { rows: visibleRows, columns, dense: true, getRowKey: (row) => row.operationCode, emptyState: "No pricing operations match the current filter." }),
7813
- filteredRows.length > maxInitialRows && /* @__PURE__ */ jsx7("div", { className: "busiverse-pricing-table-more", children: /* @__PURE__ */ jsx7(Button, { variant: "secondary", onClick: () => setShowAllRows((value) => !value), children: showAllRows ? "Show fewer operations" : `Show all ${filteredRows.length} operations` }) })
7782
+ /* @__PURE__ */ jsx6(DataTable, { rows: visibleRows, columns, dense: true, getRowKey: (row) => row.operationCode, emptyState: "No pricing operations match the current filter." }),
7783
+ filteredRows.length > maxInitialRows && /* @__PURE__ */ jsx6("div", { className: "busiverse-pricing-table-more", children: /* @__PURE__ */ jsx6(Button, { variant: "secondary", onClick: () => setShowAllRows((value) => !value), children: showAllRows ? "Show fewer operations" : `Show all ${filteredRows.length} operations` }) })
7814
7784
  ] })
7815
7785
  ] });
7816
7786
  }
@@ -7819,34 +7789,34 @@ function ServicePricingCard({ summary, audience }) {
7819
7789
  const service = getBusiverseService(summary.service);
7820
7790
  const minPrice = audience === "internal" ? summary.minBusiverseUsd : summary.minStandaloneUsd;
7821
7791
  const maxPrice = audience === "internal" ? summary.maxBusiverseUsd : summary.maxStandaloneUsd;
7822
- return /* @__PURE__ */ jsxs4(Card, { className: "busiverse-pricing-card", interactive: true, children: [
7823
- /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-card-topline", children: [
7824
- /* @__PURE__ */ jsx7(Badge, { tone: summary.hasPassThrough ? "warning" : "blue", children: summary.hasPassThrough ? "Pass-through aware" : "Fixed rated" }),
7825
- service?.usesTimeSeries && /* @__PURE__ */ jsx7(Badge, { tone: "cyan", children: "Time-series" })
7792
+ return /* @__PURE__ */ jsxs3(Card, { className: "busiverse-pricing-card", interactive: true, children: [
7793
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-card-topline", children: [
7794
+ /* @__PURE__ */ jsx6(Badge, { tone: summary.hasPassThrough ? "warning" : "blue", children: summary.hasPassThrough ? "Pass-through aware" : "Fixed rated" }),
7795
+ service?.usesTimeSeries && /* @__PURE__ */ jsx6(Badge, { tone: "cyan", children: "Time-series" })
7826
7796
  ] }),
7827
- /* @__PURE__ */ jsx7("h3", { children: service?.name ?? serviceLabel(summary.service) }),
7828
- /* @__PURE__ */ jsx7("p", { children: service?.description ?? "BUSIVERSE service pricing." }),
7829
- /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-card-price", children: [
7830
- /* @__PURE__ */ jsx7("span", { children: "Usage range" }),
7831
- /* @__PURE__ */ jsx7("strong", { children: summarizeRange(minPrice, maxPrice, region) })
7797
+ /* @__PURE__ */ jsx6("h3", { children: service?.name ?? serviceLabel(summary.service) }),
7798
+ /* @__PURE__ */ jsx6("p", { children: service?.description ?? "BUSIVERSE service pricing." }),
7799
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-card-price", children: [
7800
+ /* @__PURE__ */ jsx6("span", { children: "Usage range" }),
7801
+ /* @__PURE__ */ jsx6("strong", { children: summarizeRange(minPrice, maxPrice, region) })
7832
7802
  ] }),
7833
- summary.minMonthlyUsd != null && summary.maxMonthlyUsd != null && /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-card-metric", children: [
7834
- /* @__PURE__ */ jsx7("span", { children: "Monthly equivalent" }),
7835
- /* @__PURE__ */ jsx7("b", { children: summarizeRange(summary.minMonthlyUsd, summary.maxMonthlyUsd, region) })
7803
+ summary.minMonthlyUsd != null && summary.maxMonthlyUsd != null && /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-card-metric", children: [
7804
+ /* @__PURE__ */ jsx6("span", { children: "Monthly equivalent" }),
7805
+ /* @__PURE__ */ jsx6("b", { children: summarizeRange(summary.minMonthlyUsd, summary.maxMonthlyUsd, region) })
7836
7806
  ] }),
7837
- /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-card-metric", children: [
7838
- /* @__PURE__ */ jsx7("span", { children: "Direct cost range" }),
7839
- /* @__PURE__ */ jsx7("b", { children: summarizeRange(summary.minDirectCostUsd, summary.maxDirectCostUsd, region) })
7807
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-card-metric", children: [
7808
+ /* @__PURE__ */ jsx6("span", { children: "Direct cost range" }),
7809
+ /* @__PURE__ */ jsx6("b", { children: summarizeRange(summary.minDirectCostUsd, summary.maxDirectCostUsd, region) })
7840
7810
  ] }),
7841
- /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-card-metric", children: [
7842
- /* @__PURE__ */ jsx7("span", { children: "Gross margin" }),
7843
- /* @__PURE__ */ jsxs4("b", { children: [
7811
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-card-metric", children: [
7812
+ /* @__PURE__ */ jsx6("span", { children: "Gross margin" }),
7813
+ /* @__PURE__ */ jsxs3("b", { children: [
7844
7814
  formatMargin(summary.minGrossMargin, region.locale),
7845
7815
  " \u2013 ",
7846
7816
  formatMargin(summary.maxGrossMargin, region.locale)
7847
7817
  ] })
7848
7818
  ] }),
7849
- /* @__PURE__ */ jsxs4("div", { className: "busiverse-pricing-card-footer", children: [
7819
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-pricing-card-footer", children: [
7850
7820
  summary.operationCount,
7851
7821
  " rated operations \xB7 ",
7852
7822
  summary.cadences.length,
@@ -7856,18 +7826,17 @@ function ServicePricingCard({ summary, audience }) {
7856
7826
  }
7857
7827
 
7858
7828
  export {
7859
- Button,
7829
+ CurrencyAmount,
7830
+ UsageQuotaBar,
7831
+ DataTable,
7832
+ Badge,
7860
7833
  Card,
7861
7834
  CardHeader,
7862
7835
  CardTitle,
7863
7836
  CardDescription,
7864
7837
  CardContent,
7865
- Badge,
7866
7838
  busiverseServices,
7867
7839
  getBusiverseService,
7868
- DataTable,
7869
- CurrencyAmount,
7870
- UsageQuotaBar,
7871
7840
  busiverseServicePricingCatalog,
7872
7841
  getPricingRowsByService,
7873
7842
  getServicePricingSummary,
@@ -0,0 +1,109 @@
1
+ import {
2
+ busiverseAssets
3
+ } from "./chunk-QK6O2RHQ.js";
4
+
5
+ // src/components/brand/BusiverseBrandHead.tsx
6
+ import * as React from "react";
7
+ var DEFAULT_TITLE = "BUSIVERSE \u2014 Turn Ideas Into Operating Businesses";
8
+ var DEFAULT_DESCRIPTION = "BUSIVERSE combines AI automation, blockchain-backed trust, and modular business services to help teams launch and operate ventures faster.";
9
+ var DEFAULT_THEME_COLOR = "#020617";
10
+ function ensureMeta(selector, attributes) {
11
+ let node = document.head.querySelector(selector);
12
+ if (!node) {
13
+ node = document.createElement("meta");
14
+ document.head.appendChild(node);
15
+ }
16
+ Object.entries(attributes).forEach(([key, value]) => node?.setAttribute(key, value));
17
+ return node;
18
+ }
19
+ function ensureLink(selector, attributes) {
20
+ let node = document.head.querySelector(selector);
21
+ if (!node) {
22
+ node = document.createElement("link");
23
+ node.setAttribute("data-busiverse-ui-head", "true");
24
+ document.head.appendChild(node);
25
+ }
26
+ Object.entries(attributes).forEach(([key, value]) => node?.setAttribute(key, value));
27
+ return node;
28
+ }
29
+ function createManifestDataUrl(title, description, themeColor) {
30
+ const manifest = {
31
+ name: title,
32
+ short_name: "BUSIVERSE",
33
+ description,
34
+ start_url: "/",
35
+ scope: "/",
36
+ display: "standalone",
37
+ background_color: themeColor,
38
+ theme_color: themeColor,
39
+ icons: [
40
+ { src: busiverseAssets.favicon.androidChrome192, sizes: "192x192", type: "image/png" },
41
+ { src: busiverseAssets.favicon.androidChrome512, sizes: "512x512", type: "image/png" }
42
+ ]
43
+ };
44
+ return `data:application/manifest+json,${encodeURIComponent(JSON.stringify(manifest))}`;
45
+ }
46
+ function applyBusiverseBrandHead({
47
+ title = DEFAULT_TITLE,
48
+ description = DEFAULT_DESCRIPTION,
49
+ siteName = "Busiverse",
50
+ url,
51
+ image = busiverseAssets.social.xHeader,
52
+ twitterSite = "@busiverse1",
53
+ keywords = "Busiverse, AI automation, blockchain-backed trust, modular business services, distributed business infrastructure",
54
+ locale = "en_NG",
55
+ themeColor = DEFAULT_THEME_COLOR,
56
+ appleMobileWebAppTitle = "BUSIVERSE",
57
+ applicationName = "BUSIVERSE"
58
+ } = {}) {
59
+ document.title = title;
60
+ ensureMeta('meta[name="description"]', { name: "description", content: description });
61
+ ensureMeta('meta[name="keywords"]', { name: "keywords", content: keywords });
62
+ ensureMeta('meta[name="theme-color"]', { name: "theme-color", content: themeColor });
63
+ ensureMeta('meta[name="application-name"]', { name: "application-name", content: applicationName });
64
+ ensureMeta('meta[name="apple-mobile-web-app-title"]', { name: "apple-mobile-web-app-title", content: appleMobileWebAppTitle });
65
+ ensureMeta('meta[name="msapplication-TileColor"]', { name: "msapplication-TileColor", content: themeColor });
66
+ ensureMeta('meta[name="msapplication-TileImage"]', { name: "msapplication-TileImage", content: busiverseAssets.favicon.msTile144 });
67
+ ensureLink('link[data-busiverse-ui-head="icon-ico"]', { rel: "icon", type: "image/x-icon", href: busiverseAssets.favicon.ico, "data-busiverse-ui-head": "icon-ico" });
68
+ ensureLink('link[data-busiverse-ui-head="icon-16"]', { rel: "icon", type: "image/png", sizes: "16x16", href: busiverseAssets.favicon.png16, "data-busiverse-ui-head": "icon-16" });
69
+ ensureLink('link[data-busiverse-ui-head="icon-32"]', { rel: "icon", type: "image/png", sizes: "32x32", href: busiverseAssets.favicon.png32, "data-busiverse-ui-head": "icon-32" });
70
+ ensureLink('link[data-busiverse-ui-head="icon-96"]', { rel: "icon", type: "image/png", sizes: "96x96", href: busiverseAssets.favicon.png96, "data-busiverse-ui-head": "icon-96" });
71
+ ensureLink('link[data-busiverse-ui-head="icon-192"]', { rel: "icon", type: "image/png", sizes: "192x192", href: busiverseAssets.favicon.androidIcon192, "data-busiverse-ui-head": "icon-192" });
72
+ ensureLink('link[data-busiverse-ui-head="apple-touch-icon"]', { rel: "apple-touch-icon", sizes: "180x180", href: busiverseAssets.favicon.appleTouchIcon, "data-busiverse-ui-head": "apple-touch-icon" });
73
+ ensureLink('link[data-busiverse-ui-head="manifest"]', { rel: "manifest", href: createManifestDataUrl(title, description, themeColor), "data-busiverse-ui-head": "manifest" });
74
+ ensureMeta('meta[property="og:title"]', { property: "og:title", content: title });
75
+ ensureMeta('meta[property="og:description"]', { property: "og:description", content: description });
76
+ ensureMeta('meta[property="og:type"]', { property: "og:type", content: "website" });
77
+ ensureMeta('meta[property="og:site_name"]', { property: "og:site_name", content: siteName });
78
+ ensureMeta('meta[property="og:locale"]', { property: "og:locale", content: locale });
79
+ ensureMeta('meta[property="og:image"]', { property: "og:image", content: image });
80
+ if (url) ensureMeta('meta[property="og:url"]', { property: "og:url", content: url });
81
+ ensureMeta('meta[name="twitter:card"]', { name: "twitter:card", content: "summary_large_image" });
82
+ ensureMeta('meta[name="twitter:title"]', { name: "twitter:title", content: title });
83
+ ensureMeta('meta[name="twitter:description"]', { name: "twitter:description", content: description });
84
+ ensureMeta('meta[name="twitter:site"]', { name: "twitter:site", content: twitterSite });
85
+ ensureMeta('meta[name="twitter:image"]', { name: "twitter:image", content: image });
86
+ }
87
+ function BusiverseBrandHead(props) {
88
+ React.useEffect(() => {
89
+ applyBusiverseBrandHead(props);
90
+ }, [
91
+ props.title,
92
+ props.description,
93
+ props.siteName,
94
+ props.url,
95
+ props.image,
96
+ props.twitterSite,
97
+ props.keywords,
98
+ props.locale,
99
+ props.themeColor,
100
+ props.appleMobileWebAppTitle,
101
+ props.applicationName
102
+ ]);
103
+ return null;
104
+ }
105
+
106
+ export {
107
+ applyBusiverseBrandHead,
108
+ BusiverseBrandHead
109
+ };
@@ -0,0 +1,72 @@
1
+ import {
2
+ Button
3
+ } from "./chunk-IVTESKF4.js";
4
+ import {
5
+ BusiverseLogo
6
+ } from "./chunk-32FPZZH2.js";
7
+
8
+ // src/components/marketing/HeroSection.tsx
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ function HeroSection({
11
+ title = "Turn Ideas Into Operating Businesses",
12
+ subtitle = "BUSIVERSE combines AI automation, blockchain-backed trust, and modular business services to help teams launch and operate ventures faster.",
13
+ primaryCta = /* @__PURE__ */ jsx(Button, { children: "Start Building" }),
14
+ secondaryCta = /* @__PURE__ */ jsx(Button, { variant: "secondary", children: "Explore the Platform" })
15
+ }) {
16
+ return /* @__PURE__ */ jsx("section", { className: "busiverse-hero", children: /* @__PURE__ */ jsxs("div", { className: "busiverse-hero-content", children: [
17
+ /* @__PURE__ */ jsx(BusiverseLogo, { variant: "full", tone: "white", className: "busiverse-hero-logo" }),
18
+ /* @__PURE__ */ jsx("h1", { children: title }),
19
+ /* @__PURE__ */ jsx("p", { children: subtitle }),
20
+ /* @__PURE__ */ jsxs("div", { className: "busiverse-hero-actions", children: [
21
+ primaryCta,
22
+ secondaryCta
23
+ ] })
24
+ ] }) });
25
+ }
26
+
27
+ // src/components/marketing/MarketingSectionHeader.tsx
28
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
29
+ function MarketingSectionHeader({ eyebrow, title, description, align = "center", className }) {
30
+ return /* @__PURE__ */ jsxs2("div", { className: ["busiverse-marketing-section-header", align === "left" ? "is-left" : "is-center", className].filter(Boolean).join(" "), children: [
31
+ eyebrow ? /* @__PURE__ */ jsx2("p", { className: "busiverse-eyebrow", children: eyebrow }) : null,
32
+ /* @__PURE__ */ jsx2("h2", { children: title }),
33
+ description ? /* @__PURE__ */ jsx2("p", { children: description }) : null
34
+ ] });
35
+ }
36
+
37
+ // src/components/marketing/MarketingFeatureCard.tsx
38
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
39
+ function MarketingFeatureCard({ title, description, icon, kicker, children, className }) {
40
+ return /* @__PURE__ */ jsxs3("article", { className: ["busiverse-marketing-card", className].filter(Boolean).join(" "), children: [
41
+ /* @__PURE__ */ jsxs3("div", { className: "busiverse-marketing-card-topline", children: [
42
+ icon ? /* @__PURE__ */ jsx3("div", { className: "busiverse-marketing-card-icon", "aria-hidden": "true", children: icon }) : null,
43
+ kicker ? /* @__PURE__ */ jsx3("span", { children: kicker }) : null
44
+ ] }),
45
+ /* @__PURE__ */ jsx3("h3", { children: title }),
46
+ /* @__PURE__ */ jsx3("p", { children: description }),
47
+ children ? /* @__PURE__ */ jsx3("div", { className: "busiverse-marketing-card-body", children }) : null
48
+ ] });
49
+ }
50
+
51
+ // src/components/marketing/MarketingPricingCard.tsx
52
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
53
+ function MarketingPricingCard({ name, eyebrow, price, cadence, description, features, action, featured, className }) {
54
+ return /* @__PURE__ */ jsxs4("article", { className: ["busiverse-marketing-pricing-card", featured ? "is-featured" : "", className].filter(Boolean).join(" "), children: [
55
+ eyebrow ? /* @__PURE__ */ jsx4("span", { className: "busiverse-marketing-price-eyebrow", children: eyebrow }) : null,
56
+ /* @__PURE__ */ jsx4("h3", { children: name }),
57
+ /* @__PURE__ */ jsxs4("div", { className: "busiverse-marketing-price-line", children: [
58
+ /* @__PURE__ */ jsx4("strong", { children: price }),
59
+ cadence ? /* @__PURE__ */ jsx4("span", { children: cadence }) : null
60
+ ] }),
61
+ /* @__PURE__ */ jsx4("p", { children: description }),
62
+ /* @__PURE__ */ jsx4("ul", { children: features.map((feature, index) => /* @__PURE__ */ jsx4("li", { children: feature }, index)) }),
63
+ action ? /* @__PURE__ */ jsx4("div", { className: "busiverse-marketing-price-action", children: action }) : null
64
+ ] });
65
+ }
66
+
67
+ export {
68
+ HeroSection,
69
+ MarketingSectionHeader,
70
+ MarketingFeatureCard,
71
+ MarketingPricingCard
72
+ };
@@ -0,0 +1,50 @@
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
+
48
+ export {
49
+ busiverseAssets
50
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"BusiverseBrandHead.d.ts","sourceRoot":"","sources":["../../../src/components/brand/BusiverseBrandHead.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6CD,wBAAgB,uBAAuB,CAAC,EACtC,KAAqB,EACrB,WAAiC,EACjC,QAAsB,EACtB,GAAG,EACH,KAA0B,EAC1B,WAA2B,EAC3B,QAA8H,EAC9H,MAAgB,EAChB,UAAgC,EAChC,sBAAoC,EACpC,eAA6B,GAC9B,GAAE,uBAA4B,QAgC9B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,QAkBhE"}
1
+ {"version":3,"file":"BusiverseBrandHead.d.ts","sourceRoot":"","sources":["../../../src/components/brand/BusiverseBrandHead.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6CD,wBAAgB,uBAAuB,CAAC,EACtC,KAAqB,EACrB,WAAiC,EACjC,QAAsB,EACtB,GAAG,EACH,KAAsC,EACtC,WAA2B,EAC3B,QAA8H,EAC9H,MAAgB,EAChB,UAAgC,EAChC,sBAAoC,EACpC,eAA6B,GAC9B,GAAE,uBAA4B,QAgC9B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,QAkBhE"}
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ export interface MarketingFeatureCardProps {
3
+ title: React.ReactNode;
4
+ description: React.ReactNode;
5
+ icon?: React.ReactNode;
6
+ kicker?: React.ReactNode;
7
+ children?: React.ReactNode;
8
+ className?: string;
9
+ }
10
+ export declare function MarketingFeatureCard({ title, description, icon, kicker, children, className }: MarketingFeatureCardProps): React.JSX.Element;
11
+ //# sourceMappingURL=MarketingFeatureCard.d.ts.map