@burdenoff/microfe-billing 2026.1014.2 → 2026.1023.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,50 @@
1
+ //#region src/billing/modules/plans/constants/enterprise.ts
2
+ var e = {
3
+ highlights: [
4
+ "Custom usage volumes",
5
+ "SSO / SCIM provisioning",
6
+ "Custom SLA & support contract",
7
+ "Volume-based custom pricing",
8
+ "Audit log with custom retention",
9
+ "Priority onboarding & migration"
10
+ ],
11
+ summary: "SSO/SCIM · Custom SLA · Custom pricing",
12
+ contactEmail: "contact@burdenoff.com"
13
+ }, t = {
14
+ fluidgrids: {
15
+ highlights: [
16
+ "Custom workflow and run volumes",
17
+ "Custom storage and retention",
18
+ "SSO & SAML",
19
+ "SCIM provisioning",
20
+ "99.95%+ uptime SLA",
21
+ "Dedicated support with SLA",
22
+ "OEM embedding of the builder SDK",
23
+ "Data residency options"
24
+ ],
25
+ summary: "Custom volumes · SSO/SCIM · OEM builder SDK",
26
+ contactEmail: "contact@fluidgrids.com"
27
+ },
28
+ vibecontrols: {
29
+ highlights: [
30
+ "Everything in Pro",
31
+ "Unlimited agents & seats",
32
+ "Production SSO/SCIM · SIEM streaming",
33
+ "Data residency · customer-managed keys",
34
+ "Dedicated tenant / self-host",
35
+ "Custom SLA · dedicated support"
36
+ ],
37
+ summary: "Dedicated tenant · SSO/SCIM · Custom SLA",
38
+ contactEmail: "contact@vibecontrols.com"
39
+ }
40
+ };
41
+ function n(n) {
42
+ return n ? t[n.toLowerCase()] ?? e : e;
43
+ }
44
+ function r(e) {
45
+ return `mailto:${e.contactEmail}?subject=Enterprise%20Plan%20Inquiry`;
46
+ }
47
+ //#endregion
48
+ export { r as enterpriseMailto, n as getEnterpriseOffer };
49
+
50
+ //# sourceMappingURL=enterprise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enterprise.js","names":[],"sources":["../../../../../src/billing/modules/plans/constants/enterprise.ts"],"sourcesContent":["/**\n * Enterprise \"Contact Us\" copy for the plans browse page.\n *\n * Enterprise is contact-sales in every product and has no backend plan\n * record, so its card is static. The highlights are product-specific and must\n * match the product website's Enterprise card, so a FluidGrids shell never\n * shows VibeControls wording (and vice versa). Products without curated copy\n * fall back to product-neutral highlights.\n */\n\nexport interface EnterpriseOffer {\n /** Bullet points on the grid card, in display order. */\n highlights: readonly string[];\n /** One-line summary for the compact list row. */\n summary: string;\n /** Sales inbox the Contact Us button opens. */\n contactEmail: string;\n}\n\nconst DEFAULT_ENTERPRISE_OFFER: EnterpriseOffer = {\n highlights: [\n 'Custom usage volumes',\n 'SSO / SCIM provisioning',\n 'Custom SLA & support contract',\n 'Volume-based custom pricing',\n 'Audit log with custom retention',\n 'Priority onboarding & migration',\n ],\n summary: 'SSO/SCIM · Custom SLA · Custom pricing',\n contactEmail: 'contact@burdenoff.com',\n};\n\n/** Keyed by billing product id. Mirrors each product website's Enterprise card. */\nconst ENTERPRISE_OFFERS: Readonly<Record<string, EnterpriseOffer>> = {\n // fluidgrids-website src/config/product.ts (plan key \"enterprise\")\n fluidgrids: {\n highlights: [\n 'Custom workflow and run volumes',\n 'Custom storage and retention',\n 'SSO & SAML',\n 'SCIM provisioning',\n '99.95%+ uptime SLA',\n 'Dedicated support with SLA',\n 'OEM embedding of the builder SDK',\n 'Data residency options',\n ],\n summary: 'Custom volumes · SSO/SCIM · OEM builder SDK',\n contactEmail: 'contact@fluidgrids.com',\n },\n // vibecontrols-website src/config/product.ts VC_ENTERPRISE_FEATURES\n vibecontrols: {\n highlights: [\n 'Everything in Pro',\n 'Unlimited agents & seats',\n 'Production SSO/SCIM · SIEM streaming',\n 'Data residency · customer-managed keys',\n 'Dedicated tenant / self-host',\n 'Custom SLA · dedicated support',\n ],\n summary: 'Dedicated tenant · SSO/SCIM · Custom SLA',\n contactEmail: 'contact@vibecontrols.com',\n },\n};\n\nexport function getEnterpriseOffer(productId: string | null | undefined): EnterpriseOffer {\n if (!productId) return DEFAULT_ENTERPRISE_OFFER;\n return ENTERPRISE_OFFERS[productId.toLowerCase()] ?? DEFAULT_ENTERPRISE_OFFER;\n}\n\nexport function enterpriseMailto(offer: EnterpriseOffer): string {\n return `mailto:${offer.contactEmail}?subject=${encodeURIComponent('Enterprise Plan Inquiry')}`;\n}\n"],"mappings":";AAmBA,IAAM,IAA4C;CAChD,YAAY;EACV;EACA;EACA;EACA;EACA;EACA;CACF;CACA,SAAS;CACT,cAAc;AAChB,GAGM,IAA+D;CAEnE,YAAY;EACV,YAAY;GACV;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,SAAS;EACT,cAAc;CAChB;CAEA,cAAc;EACZ,YAAY;GACV;GACA;GACA;GACA;GACA;GACA;EACF;EACA,SAAS;EACT,cAAc;CAChB;AACF;AAEA,SAAgB,EAAmB,GAAuD;CAExF,OADK,IACE,EAAkB,EAAU,YAAY,MAAM,IAD9B;AAEzB;AAEA,SAAgB,EAAiB,GAAgC;CAC/D,OAAO,UAAU,EAAM,aAAa;AACtC"}
@@ -11,13 +11,14 @@ import { getDisplayPrice as l, useDefaultBillingCurrency as u } from "../../../h
11
11
  import { usePlans as d } from "../hooks/usePlans.js";
12
12
  import "../hooks/index.js";
13
13
  import { FEATURED_QUOTA_LABELS as f, FEATURED_QUOTA_NAMES as p, formatFeaturedQuotaValue as m } from "../constants/featuredQuotas.js";
14
- import { useState as h } from "react";
15
- import { ArrowRight as g, Check as _, Sparkles as v } from "lucide-react";
16
- import { jsx as y, jsxs as b } from "react/jsx-runtime";
17
- import { useI18n as x } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
18
- import { IllustratedEmptyState as S, PagePurpose as C } from "@burdenoff/fe-libs/ui";
14
+ import { enterpriseMailto as h, getEnterpriseOffer as g } from "../constants/enterprise.js";
15
+ import { useState as _ } from "react";
16
+ import { ArrowRight as v, Check as y, Sparkles as b } from "lucide-react";
17
+ import { jsx as x, jsxs as S } from "react/jsx-runtime";
18
+ import { useI18n as C } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
19
+ import { IllustratedEmptyState as w, PagePurpose as T } from "@burdenoff/fe-libs/ui";
19
20
  //#region src/billing/modules/plans/pages/PlansBrowsePage.tsx
20
- function w(e) {
21
+ function E(e) {
21
22
  let t = /* @__PURE__ */ new Map();
22
23
  for (let n of e) {
23
24
  if (!n.quota) continue;
@@ -30,110 +31,110 @@ function w(e) {
30
31
  }
31
32
  return Array.from(t.values());
32
33
  }
33
- function T(e) {
34
- let t = w(e), n = new Map(t.map((e) => [e.name, e]));
34
+ function D(e) {
35
+ let t = E(e), n = new Map(t.map((e) => [e.name, e]));
35
36
  return p.flatMap((e) => {
36
37
  let t = n.get(e);
37
38
  return t ? [t] : [];
38
39
  });
39
40
  }
40
- var E = () => {
41
- let { t: r } = x(), i = (e, t) => {
41
+ var O = () => {
42
+ let { t: r } = C(), i = (e, t) => {
42
43
  let n = r(e);
43
44
  return n === e ? t : n;
44
- }, a = c(), { productId: s } = e(), { plans: l, isLoading: u, error: f, refetch: p } = d({
45
+ }, a = c(), { productId: s } = e(), l = g(s), { plans: u, isLoading: f, error: p, refetch: m } = d({
45
46
  includeFree: !1,
46
47
  productId: s ?? void 0
47
- }), [m, g] = h("grid"), [_, v] = h(n.MONTHLY), w = l.filter((e) => e.isActive && e.isPurchasable !== !1 && e.duration === _), T = w.length >= 2 ? 1 : -1;
48
- return u && l.length === 0 ? /* @__PURE__ */ b("div", {
48
+ }), [h, v] = _("grid"), [y, b] = _(n.MONTHLY), E = u.filter((e) => e.isActive && e.isPurchasable !== !1 && e.duration === y), D = E.length >= 2 ? 1 : -1;
49
+ return f && u.length === 0 ? /* @__PURE__ */ S("div", {
49
50
  className: "space-y-6 px-6 lg:px-8 py-6",
50
- children: [/* @__PURE__ */ y("div", { className: "h-8 w-48 bg-bg-sunken animate-pulse rounded-card" }), /* @__PURE__ */ y("div", {
51
+ children: [/* @__PURE__ */ x("div", { className: "h-8 w-48 bg-bg-sunken animate-pulse rounded-card" }), /* @__PURE__ */ x("div", {
51
52
  className: "grid grid-cols-1 md:grid-cols-3 gap-6",
52
53
  children: [
53
54
  1,
54
55
  2,
55
56
  3
56
- ].map((e) => /* @__PURE__ */ b("div", {
57
+ ].map((e) => /* @__PURE__ */ S("div", {
57
58
  className: "border border-border-seam rounded-card bg-bg-surface shadow-elevation-1 p-5 space-y-4",
58
59
  children: [
59
- /* @__PURE__ */ y("div", { className: "h-6 w-24 bg-bg-sunken animate-pulse rounded" }),
60
- /* @__PURE__ */ y("div", { className: "h-8 w-32 bg-bg-sunken animate-pulse rounded" }),
61
- /* @__PURE__ */ y("div", {
60
+ /* @__PURE__ */ x("div", { className: "h-6 w-24 bg-bg-sunken animate-pulse rounded" }),
61
+ /* @__PURE__ */ x("div", { className: "h-8 w-32 bg-bg-sunken animate-pulse rounded" }),
62
+ /* @__PURE__ */ x("div", {
62
63
  className: "space-y-2",
63
64
  children: [
64
65
  1,
65
66
  2,
66
67
  3
67
- ].map((e) => /* @__PURE__ */ y("div", { className: "h-4 w-full bg-bg-sunken animate-pulse rounded" }, e))
68
+ ].map((e) => /* @__PURE__ */ x("div", { className: "h-4 w-full bg-bg-sunken animate-pulse rounded" }, e))
68
69
  })
69
70
  ]
70
71
  }, e))
71
72
  })]
72
- }) : f && o(f) ? /* @__PURE__ */ y("div", {
73
+ }) : p && o(p) ? /* @__PURE__ */ x("div", {
73
74
  className: "p-6",
74
- children: /* @__PURE__ */ y(t, {
75
+ children: /* @__PURE__ */ x(t, {
75
76
  title: i("billing.plans.serverUnavailable", "Server Unavailable"),
76
77
  message: i("billing.plans.unableToLoadPlans", "Unable to load plans."),
77
- onRetry: () => p(),
78
+ onRetry: () => m(),
78
79
  showRetry: !0
79
80
  })
80
- }) : /* @__PURE__ */ b("div", {
81
+ }) : /* @__PURE__ */ S("div", {
81
82
  className: "space-y-6 px-6 lg:px-8 py-6",
82
83
  children: [
83
- /* @__PURE__ */ b("div", { children: [
84
- /* @__PURE__ */ y("h1", {
84
+ /* @__PURE__ */ S("div", { children: [
85
+ /* @__PURE__ */ x("h1", {
85
86
  className: "text-2xl md:text-3xl font-semibold tracking-tight text-text-primary",
86
87
  children: i("billing.plans.browsePlansTitle", "Plans")
87
88
  }),
88
- /* @__PURE__ */ y("p", {
89
+ /* @__PURE__ */ x("p", {
89
90
  className: "text-sm text-text-secondary mt-1",
90
91
  children: i("billing.plans.browsePlansSubtitle", "Choose a plan that fits your needs")
91
92
  }),
92
- /* @__PURE__ */ y(C, {
93
+ /* @__PURE__ */ x(T, {
93
94
  className: "mt-3",
94
95
  children: i("billing.plans.browsePurpose", "Compare what each plan includes — quotas, features and price — and subscribe to the one that fits your team. Switch between monthly and yearly billing to see the difference, or contact us for a custom Enterprise contract.")
95
96
  })
96
97
  ] }),
97
- /* @__PURE__ */ b("div", {
98
+ /* @__PURE__ */ S("div", {
98
99
  className: "flex flex-wrap items-center gap-4 pb-4 border-b border-border-subtle",
99
- children: [/* @__PURE__ */ y("div", {
100
+ children: [/* @__PURE__ */ x("div", {
100
101
  className: "inline-flex rounded-lg border border-border-subtle p-1 bg-bg-sunken",
101
- children: [n.MONTHLY, n.YEARLY].map((e) => /* @__PURE__ */ y("button", {
102
+ children: [n.MONTHLY, n.YEARLY].map((e) => /* @__PURE__ */ x("button", {
102
103
  type: "button",
103
- onClick: () => v(e),
104
- className: `px-3 py-1.5 text-sm font-medium rounded-button transition-colors ${_ === e ? "bg-bg-surface text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"}`,
104
+ onClick: () => b(e),
105
+ className: `px-3 py-1.5 text-sm font-medium rounded-button transition-colors ${y === e ? "bg-bg-surface text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"}`,
105
106
  children: e === n.MONTHLY ? "Monthly" : "Yearly"
106
107
  }, e))
107
- }), /* @__PURE__ */ b("div", {
108
+ }), /* @__PURE__ */ S("div", {
108
109
  className: "ml-auto inline-flex rounded-lg border border-border-subtle p-1 bg-bg-sunken",
109
- children: [/* @__PURE__ */ y("button", {
110
+ children: [/* @__PURE__ */ x("button", {
110
111
  type: "button",
111
- onClick: () => g("grid"),
112
- className: `p-1.5 rounded-button transition-colors ${m === "grid" ? "bg-bg-surface text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"}`,
112
+ onClick: () => v("grid"),
113
+ className: `p-1.5 rounded-button transition-colors ${h === "grid" ? "bg-bg-surface text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"}`,
113
114
  title: "Grid view",
114
- children: /* @__PURE__ */ y("svg", {
115
+ children: /* @__PURE__ */ x("svg", {
115
116
  className: "size-4",
116
117
  fill: "none",
117
118
  viewBox: "0 0 24 24",
118
119
  stroke: "currentColor",
119
- children: /* @__PURE__ */ y("path", {
120
+ children: /* @__PURE__ */ x("path", {
120
121
  strokeLinecap: "round",
121
122
  strokeLinejoin: "round",
122
123
  strokeWidth: 2,
123
124
  d: "M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z"
124
125
  })
125
126
  })
126
- }), /* @__PURE__ */ y("button", {
127
+ }), /* @__PURE__ */ x("button", {
127
128
  type: "button",
128
- onClick: () => g("list"),
129
- className: `p-1.5 rounded-button transition-colors ${m === "list" ? "bg-bg-surface text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"}`,
129
+ onClick: () => v("list"),
130
+ className: `p-1.5 rounded-button transition-colors ${h === "list" ? "bg-bg-surface text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"}`,
130
131
  title: "List view",
131
- children: /* @__PURE__ */ y("svg", {
132
+ children: /* @__PURE__ */ x("svg", {
132
133
  className: "size-4",
133
134
  fill: "none",
134
135
  viewBox: "0 0 24 24",
135
136
  stroke: "currentColor",
136
- children: /* @__PURE__ */ y("path", {
137
+ children: /* @__PURE__ */ x("path", {
137
138
  strokeLinecap: "round",
138
139
  strokeLinejoin: "round",
139
140
  strokeWidth: 2,
@@ -143,104 +144,95 @@ var E = () => {
143
144
  })]
144
145
  })]
145
146
  }),
146
- w.length === 0 ? /* @__PURE__ */ y(S, {
147
+ E.length === 0 ? /* @__PURE__ */ x(w, {
147
148
  illustration: "empty-data",
148
149
  title: i("billing.plans.noPlansAvailable", "No plans available"),
149
150
  description: i("billing.plans.checkBackLater", "Check back later for new plans.")
150
- }) : m === "grid" ? /* @__PURE__ */ b("div", {
151
+ }) : h === "grid" ? /* @__PURE__ */ S("div", {
151
152
  className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 items-stretch",
152
- children: [w.map((e, t) => /* @__PURE__ */ y(A, {
153
+ children: [E.map((e, t) => /* @__PURE__ */ x(j, {
153
154
  plan: e,
154
- highlighted: t === T,
155
+ highlighted: t === D,
155
156
  onView: () => a(`/plans/${e.id}`),
156
157
  onSubscribe: () => a(`/checkout/${e.id}`)
157
- }, e.id)), /* @__PURE__ */ y(O, {})]
158
- }) : /* @__PURE__ */ b("div", {
158
+ }, e.id)), /* @__PURE__ */ x(k, { offer: l })]
159
+ }) : /* @__PURE__ */ S("div", {
159
160
  className: "space-y-3",
160
- children: [w.map((e) => /* @__PURE__ */ y(j, {
161
+ children: [E.map((e) => /* @__PURE__ */ x(M, {
161
162
  plan: e,
162
163
  onView: () => a(`/plans/${e.id}`),
163
164
  onSubscribe: () => a(`/checkout/${e.id}`)
164
- }, e.id)), /* @__PURE__ */ y(k, {})]
165
+ }, e.id)), /* @__PURE__ */ x(A, { offer: l })]
165
166
  })
166
167
  ]
167
168
  });
168
- }, D = [
169
- "Unlimited Agents & Sessions",
170
- "Dedicated single-tenant infra",
171
- "Customer-managed encryption keys",
172
- "SSO / SCIM provisioning",
173
- "Custom SLA & support contract",
174
- "Volume-based custom pricing",
175
- "Audit log with custom retention",
176
- "Priority onboarding & migration"
177
- ], O = () => /* @__PURE__ */ b("div", {
169
+ }, k = ({ offer: e }) => /* @__PURE__ */ S("div", {
178
170
  className: "border border-border-strong bg-[var(--color-accent-soft)] rounded-card shadow-elevation-1 p-5 flex flex-col h-full",
179
171
  children: [
180
- /* @__PURE__ */ b("div", {
172
+ /* @__PURE__ */ S("div", {
181
173
  className: "mb-4",
182
- children: [/* @__PURE__ */ b("div", {
174
+ children: [/* @__PURE__ */ S("div", {
183
175
  className: "flex items-center gap-2",
184
- children: [/* @__PURE__ */ y("h3", {
176
+ children: [/* @__PURE__ */ x("h3", {
185
177
  className: "text-lg font-semibold text-text-primary",
186
178
  children: "Enterprise"
187
- }), /* @__PURE__ */ y("span", {
179
+ }), /* @__PURE__ */ x("span", {
188
180
  className: "text-xs font-medium px-2 py-0.5 rounded-full bg-bg-surface text-text-link",
189
181
  children: "Contact Us"
190
182
  })]
191
- }), /* @__PURE__ */ y("span", {
183
+ }), /* @__PURE__ */ x("span", {
192
184
  className: "text-sm text-text-secondary",
193
185
  children: "Custom contract"
194
186
  })]
195
187
  }),
196
- /* @__PURE__ */ y("div", {
188
+ /* @__PURE__ */ x("div", {
197
189
  className: "flex items-baseline gap-1 mb-4",
198
- children: /* @__PURE__ */ y("span", {
190
+ children: /* @__PURE__ */ x("span", {
199
191
  className: "text-2xl font-semibold text-text-primary",
200
192
  children: "Custom pricing"
201
193
  })
202
194
  }),
203
- /* @__PURE__ */ y("ul", {
195
+ /* @__PURE__ */ x("ul", {
204
196
  className: "space-y-2 mb-4 flex-1",
205
- children: D.map((e) => /* @__PURE__ */ b("li", {
197
+ children: e.highlights.map((e) => /* @__PURE__ */ S("li", {
206
198
  className: "flex items-center gap-2 text-sm",
207
- children: [/* @__PURE__ */ y("svg", {
199
+ children: [/* @__PURE__ */ x("svg", {
208
200
  className: "size-4 text-status-success-text shrink-0",
209
201
  fill: "none",
210
202
  viewBox: "0 0 24 24",
211
203
  stroke: "currentColor",
212
- children: /* @__PURE__ */ y("path", {
204
+ children: /* @__PURE__ */ x("path", {
213
205
  strokeLinecap: "round",
214
206
  strokeLinejoin: "round",
215
207
  strokeWidth: 2,
216
208
  d: "M5 13l4 4L19 7"
217
209
  })
218
- }), /* @__PURE__ */ y("span", {
210
+ }), /* @__PURE__ */ x("span", {
219
211
  className: "text-text-primary",
220
212
  children: e
221
213
  })]
222
214
  }, e))
223
215
  }),
224
- /* @__PURE__ */ y("div", {
216
+ /* @__PURE__ */ x("div", {
225
217
  className: "space-y-2 pt-4 border-t border-border-subtle mt-auto",
226
- children: /* @__PURE__ */ y("a", {
227
- href: "mailto:contact@burdenoff.com?subject=Enterprise Plan Inquiry",
218
+ children: /* @__PURE__ */ x("a", {
219
+ href: h(e),
228
220
  className: "block w-full px-4 py-2 text-sm font-medium text-center bg-action-primary-bg text-action-primary-text rounded-button hover:bg-action-primary-bgHover transition-colors duration-200",
229
221
  children: "Contact Us"
230
222
  })
231
223
  })
232
224
  ]
233
- }), k = () => /* @__PURE__ */ b("div", {
225
+ }), A = ({ offer: e }) => /* @__PURE__ */ S("div", {
234
226
  className: "flex items-center gap-4 p-5 border border-border-strong rounded-card bg-[var(--color-accent-soft)] shadow-elevation-1 transition-all duration-200 hover:shadow-elevation-2",
235
227
  children: [
236
- /* @__PURE__ */ y("div", {
228
+ /* @__PURE__ */ x("div", {
237
229
  className: "size-10 rounded-lg bg-bg-surface flex items-center justify-center shrink-0 shadow-elevation-1",
238
- children: /* @__PURE__ */ y("svg", {
230
+ children: /* @__PURE__ */ x("svg", {
239
231
  className: "size-5 text-text-link",
240
232
  fill: "none",
241
233
  viewBox: "0 0 24 24",
242
234
  stroke: "currentColor",
243
- children: /* @__PURE__ */ y("path", {
235
+ children: /* @__PURE__ */ x("path", {
244
236
  strokeLinecap: "round",
245
237
  strokeLinejoin: "round",
246
238
  strokeWidth: 2,
@@ -248,91 +240,91 @@ var E = () => {
248
240
  })
249
241
  })
250
242
  }),
251
- /* @__PURE__ */ b("div", {
243
+ /* @__PURE__ */ S("div", {
252
244
  className: "flex-1 min-w-0",
253
- children: [/* @__PURE__ */ b("div", {
245
+ children: [/* @__PURE__ */ S("div", {
254
246
  className: "flex items-center gap-2",
255
- children: [/* @__PURE__ */ y("h3", {
247
+ children: [/* @__PURE__ */ x("h3", {
256
248
  className: "font-semibold text-text-primary",
257
249
  children: "Enterprise"
258
- }), /* @__PURE__ */ y("span", {
250
+ }), /* @__PURE__ */ x("span", {
259
251
  className: "text-xs font-medium px-2 py-0.5 rounded-full bg-bg-surface text-text-link shrink-0",
260
252
  children: "Contact Us"
261
253
  })]
262
- }), /* @__PURE__ */ y("p", {
254
+ }), /* @__PURE__ */ x("p", {
263
255
  className: "text-sm text-text-secondary",
264
- children: "Dedicated infra · SSO/SCIM · Custom SLA"
256
+ children: e.summary
265
257
  })]
266
258
  }),
267
- /* @__PURE__ */ b("div", {
259
+ /* @__PURE__ */ S("div", {
268
260
  className: "text-right",
269
- children: [/* @__PURE__ */ y("div", {
261
+ children: [/* @__PURE__ */ x("div", {
270
262
  className: "font-semibold text-text-primary",
271
263
  children: "Custom pricing"
272
- }), /* @__PURE__ */ y("div", {
264
+ }), /* @__PURE__ */ x("div", {
273
265
  className: "text-sm text-text-secondary",
274
266
  children: "contract-based"
275
267
  })]
276
268
  }),
277
- /* @__PURE__ */ y("a", {
278
- href: "mailto:contact@burdenoff.com?subject=Enterprise Plan Inquiry",
269
+ /* @__PURE__ */ x("a", {
270
+ href: h(e),
279
271
  className: "px-3 py-1.5 text-sm font-medium bg-action-primary-bg text-action-primary-text rounded-button hover:bg-action-primary-bgHover transition-colors duration-200 shrink-0",
280
272
  children: "Contact Us"
281
273
  })
282
274
  ]
283
- }), A = ({ plan: e, highlighted: t = !1, onView: n, onSubscribe: o }) => {
284
- let s = T(e.features || []), c = w(e.features || []).length - s.length, d = u(), { price: p, currency: h } = l(e.price, e.currency, e.currencyPrices, d);
285
- return /* @__PURE__ */ b("div", {
275
+ }), j = ({ plan: e, highlighted: t = !1, onView: n, onSubscribe: o }) => {
276
+ let s = D(e.features || []), c = E(e.features || []).length - s.length, d = u(), { price: p, currency: h } = l(e.price, e.currency, e.currencyPrices, d);
277
+ return /* @__PURE__ */ S("div", {
286
278
  className: `relative flex flex-col h-full rounded-card bg-bg-surface p-6 transition-[border-color,box-shadow] duration-200 ${t ? "border-2 border-action-primary-bg shadow-[var(--shadow-glow)]" : "border border-border-subtle shadow-elevation-1 hover:border-border-strong hover:shadow-elevation-2"}`,
287
279
  children: [
288
- t && /* @__PURE__ */ b("span", {
280
+ t && /* @__PURE__ */ S("span", {
289
281
  className: "absolute -top-3 left-1/2 -translate-x-1/2 inline-flex items-center gap-1 rounded-full bg-action-primary-bg px-3 py-1 text-xs font-semibold text-action-primary-text shadow-elevation-2",
290
- children: [/* @__PURE__ */ y(v, {
282
+ children: [/* @__PURE__ */ x(b, {
291
283
  className: "size-3.5",
292
284
  "aria-hidden": "true"
293
285
  }), "Most popular"]
294
286
  }),
295
- /* @__PURE__ */ b("div", {
287
+ /* @__PURE__ */ S("div", {
296
288
  className: "mb-4",
297
- children: [/* @__PURE__ */ y("h3", {
289
+ children: [/* @__PURE__ */ x("h3", {
298
290
  className: "text-lg font-semibold text-text-primary",
299
291
  children: e.name
300
- }), /* @__PURE__ */ y("span", {
292
+ }), /* @__PURE__ */ x("span", {
301
293
  className: "text-sm text-text-secondary",
302
294
  children: a(e.duration)
303
295
  })]
304
296
  }),
305
- /* @__PURE__ */ b("div", {
297
+ /* @__PURE__ */ S("div", {
306
298
  className: "flex items-baseline gap-1.5 mb-5",
307
- children: [/* @__PURE__ */ y("span", {
299
+ children: [/* @__PURE__ */ x("span", {
308
300
  className: "text-4xl font-bold tabular-nums tracking-tight text-text-primary",
309
301
  children: r(p, h)
310
- }), /* @__PURE__ */ b("span", {
302
+ }), /* @__PURE__ */ S("span", {
311
303
  className: "text-text-secondary text-sm",
312
304
  children: ["/ ", i(e.duration)]
313
305
  })]
314
306
  }),
315
- s.length > 0 && /* @__PURE__ */ b("ul", {
307
+ s.length > 0 && /* @__PURE__ */ S("ul", {
316
308
  className: "space-y-2.5 mb-5 flex-1",
317
- children: [s.map((e) => /* @__PURE__ */ b("li", {
309
+ children: [s.map((e) => /* @__PURE__ */ S("li", {
318
310
  className: "flex items-center justify-between gap-2 text-sm",
319
- children: [/* @__PURE__ */ b("span", {
311
+ children: [/* @__PURE__ */ S("span", {
320
312
  className: "flex items-center gap-2 min-w-0",
321
- children: [/* @__PURE__ */ y("span", {
313
+ children: [/* @__PURE__ */ x("span", {
322
314
  className: "flex size-5 shrink-0 items-center justify-center rounded-full bg-[var(--color-accent-soft)]",
323
- children: /* @__PURE__ */ y(_, {
315
+ children: /* @__PURE__ */ x(y, {
324
316
  className: "size-3 text-action-primary-bg",
325
317
  "aria-hidden": "true"
326
318
  })
327
- }), /* @__PURE__ */ y("span", {
319
+ }), /* @__PURE__ */ x("span", {
328
320
  className: "truncate text-text-primary",
329
321
  children: f[e.name] ?? e.name
330
322
  })]
331
- }), /* @__PURE__ */ y("span", {
323
+ }), /* @__PURE__ */ x("span", {
332
324
  className: "font-semibold text-text-primary tabular-nums shrink-0",
333
325
  children: m(e.name, e.totalValue)
334
326
  })]
335
- }, e.quotaId)), c > 0 && /* @__PURE__ */ b("li", {
327
+ }, e.quotaId)), c > 0 && /* @__PURE__ */ S("li", {
336
328
  className: "text-sm text-text-secondary pl-7",
337
329
  children: [
338
330
  "+",
@@ -341,17 +333,17 @@ var E = () => {
341
333
  ]
342
334
  })]
343
335
  }),
344
- /* @__PURE__ */ b("div", {
336
+ /* @__PURE__ */ S("div", {
345
337
  className: "space-y-2 pt-4 border-t border-border-subtle mt-auto",
346
- children: [/* @__PURE__ */ b("button", {
338
+ children: [/* @__PURE__ */ S("button", {
347
339
  type: "button",
348
340
  onClick: o,
349
341
  className: "group inline-flex w-full items-center justify-center gap-2 rounded-button bg-action-primary-bg px-4 py-2.5 text-sm font-semibold text-action-primary-text shadow-elevation-1 transition-colors duration-200 hover:bg-action-primary-bgHover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
350
- children: ["Subscribe", /* @__PURE__ */ y(g, {
342
+ children: ["Subscribe", /* @__PURE__ */ x(v, {
351
343
  className: "size-4 transition-transform duration-200",
352
344
  "aria-hidden": "true"
353
345
  })]
354
- }), /* @__PURE__ */ y("button", {
346
+ }), /* @__PURE__ */ x("button", {
355
347
  type: "button",
356
348
  onClick: n,
357
349
  className: "w-full px-4 py-2 text-sm font-medium border border-border-subtle text-text-secondary rounded-button hover:bg-bg-sunken hover:text-text-primary hover:border-border-strong transition-colors duration-200",
@@ -360,19 +352,19 @@ var E = () => {
360
352
  })
361
353
  ]
362
354
  });
363
- }, j = ({ plan: e, onView: t, onSubscribe: n }) => {
364
- let a = T(e.features || []), o = u();
365
- return /* @__PURE__ */ b("div", {
355
+ }, M = ({ plan: e, onView: t, onSubscribe: n }) => {
356
+ let a = D(e.features || []), o = u();
357
+ return /* @__PURE__ */ S("div", {
366
358
  className: "flex items-center gap-4 p-5 border border-border-seam rounded-card bg-bg-surface shadow-elevation-1 transition-all duration-200 hover:border-border-strong hover:shadow-elevation-2",
367
359
  children: [
368
- /* @__PURE__ */ y("div", {
360
+ /* @__PURE__ */ x("div", {
369
361
  className: "size-10 rounded-lg bg-[var(--color-accent-soft)] flex items-center justify-center shrink-0",
370
- children: /* @__PURE__ */ y("svg", {
362
+ children: /* @__PURE__ */ x("svg", {
371
363
  className: "size-5 text-text-link",
372
364
  fill: "none",
373
365
  viewBox: "0 0 24 24",
374
366
  stroke: "currentColor",
375
- children: /* @__PURE__ */ y("path", {
367
+ children: /* @__PURE__ */ x("path", {
376
368
  strokeLinecap: "round",
377
369
  strokeLinejoin: "round",
378
370
  strokeWidth: 2,
@@ -380,12 +372,12 @@ var E = () => {
380
372
  })
381
373
  })
382
374
  }),
383
- /* @__PURE__ */ b("div", {
375
+ /* @__PURE__ */ S("div", {
384
376
  className: "flex-1 min-w-0",
385
- children: [/* @__PURE__ */ y("h3", {
377
+ children: [/* @__PURE__ */ x("h3", {
386
378
  className: "font-semibold text-text-primary truncate",
387
379
  children: e.name
388
- }), /* @__PURE__ */ b("p", {
380
+ }), /* @__PURE__ */ S("p", {
389
381
  className: "text-sm text-text-secondary",
390
382
  children: [
391
383
  a.length,
@@ -395,27 +387,27 @@ var E = () => {
395
387
  ]
396
388
  })]
397
389
  }),
398
- /* @__PURE__ */ b("div", {
390
+ /* @__PURE__ */ S("div", {
399
391
  className: "text-right",
400
- children: [/* @__PURE__ */ y("div", {
392
+ children: [/* @__PURE__ */ x("div", {
401
393
  className: "font-semibold text-text-primary",
402
394
  children: (() => {
403
395
  let { price: t, currency: n } = l(e.price, e.currency, e.currencyPrices, o);
404
396
  return r(t, n);
405
397
  })()
406
- }), /* @__PURE__ */ b("div", {
398
+ }), /* @__PURE__ */ S("div", {
407
399
  className: "text-sm text-text-secondary",
408
400
  children: ["per ", i(e.duration)]
409
401
  })]
410
402
  }),
411
- /* @__PURE__ */ b("div", {
403
+ /* @__PURE__ */ S("div", {
412
404
  className: "flex items-center gap-2",
413
- children: [/* @__PURE__ */ y("button", {
405
+ children: [/* @__PURE__ */ x("button", {
414
406
  type: "button",
415
407
  onClick: n,
416
408
  className: "px-3 py-1.5 text-sm font-medium bg-action-primary-bg text-action-primary-text rounded-button hover:bg-action-primary-bgHover transition-colors duration-200",
417
409
  children: "Subscribe"
418
- }), /* @__PURE__ */ y("button", {
410
+ }), /* @__PURE__ */ x("button", {
419
411
  type: "button",
420
412
  onClick: t,
421
413
  className: "px-3 py-1.5 text-sm font-medium border border-border-subtle text-text-primary rounded-button hover:bg-bg-sunken hover:border-border-strong transition-all duration-200",
@@ -426,6 +418,6 @@ var E = () => {
426
418
  });
427
419
  };
428
420
  //#endregion
429
- export { E as PlansBrowsePage };
421
+ export { O as PlansBrowsePage };
430
422
 
431
423
  //# sourceMappingURL=PlansBrowsePage.js.map