@burdenoff/microfe-billing 2026.530.2 → 2026.530.3
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/dist/billing/BillingAdminRoutes.js +84 -71
- package/dist/billing/BillingAdminRoutes.js.map +1 -1
- package/dist/billing/BillingUserRoutes.js +103 -90
- package/dist/billing/BillingUserRoutes.js.map +1 -1
- package/dist/billing/modules/billing/index.js +2 -1
- package/dist/billing/modules/billing/pages/InvoicesListPage.js +135 -126
- package/dist/billing/modules/billing/pages/InvoicesListPage.js.map +1 -1
- package/dist/billing/modules/billing/pages/UserRefundsPage.js +417 -0
- package/dist/billing/modules/billing/pages/UserRefundsPage.js.map +1 -0
- package/dist/billing/modules/billing/pages/index.js +1 -0
- package/dist/billing/modules/plans/constants/featuredQuotas.js +37 -0
- package/dist/billing/modules/plans/constants/featuredQuotas.js.map +1 -0
- package/dist/billing/modules/plans/index.js +2 -1
- package/dist/billing/modules/plans/pages/PlanAssignFreePage.js +205 -0
- package/dist/billing/modules/plans/pages/PlanAssignFreePage.js.map +1 -0
- package/dist/billing/modules/plans/pages/PlanCreatePage.js +51 -33
- package/dist/billing/modules/plans/pages/PlanCreatePage.js.map +1 -1
- package/dist/billing/modules/plans/pages/PlanEditPage.js +78 -60
- package/dist/billing/modules/plans/pages/PlanEditPage.js.map +1 -1
- package/dist/billing/modules/plans/pages/PlansBrowsePage.js +246 -126
- package/dist/billing/modules/plans/pages/PlansBrowsePage.js.map +1 -1
- package/dist/billing/modules/plans/pages/index.js +1 -0
- package/dist/billing/shared/types/graphql.js.map +1 -1
- package/dist/generated/global-operations.js +317 -287
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/global-types.js +3 -1
- package/dist/generated/global-types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
import { useBilling as e } from "../../../providers/BillingProvider.js";
|
|
2
2
|
import { ServerError as t } from "../../../shared/components/ServerError.js";
|
|
3
3
|
import "../../../shared/components/index.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { PlanDuration as n } from "../../../shared/types/graphql.js";
|
|
5
|
+
import { formatCurrency as r, formatPlanDuration as i, formatPlanDurationLabel as a } from "../../../shared/utils/format.js";
|
|
6
|
+
import { isServerError as o } from "../../../shared/utils/error.js";
|
|
7
|
+
import { getPlanFeatureQuantity as s } from "../../../shared/utils/planFeatureQuantity.js";
|
|
7
8
|
import "../../../shared/utils/index.js";
|
|
8
|
-
import { useBillingNavigate as
|
|
9
|
-
import { getDisplayPrice as
|
|
10
|
-
import { usePlans as
|
|
9
|
+
import { useBillingNavigate as c } from "../../../hooks/useBillingNavigate.js";
|
|
10
|
+
import { getDisplayPrice as l, useDefaultBillingCurrency as u } from "../../../hooks/useDefaultBillingCurrency.js";
|
|
11
|
+
import { usePlans as d } from "../hooks/usePlans.js";
|
|
11
12
|
import "../hooks/index.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
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 { jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
16
|
+
import { useI18n as v } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
15
17
|
//#region src/billing/modules/plans/pages/PlansBrowsePage.tsx
|
|
16
|
-
function
|
|
18
|
+
function y(e) {
|
|
17
19
|
let t = /* @__PURE__ */ new Map();
|
|
18
20
|
for (let n of e) {
|
|
19
21
|
if (!n.quota) continue;
|
|
20
|
-
let e = n.quota.id, r =
|
|
22
|
+
let e = n.quota.id, r = s(n), i = t.get(e);
|
|
21
23
|
i ? i.totalValue += r : t.set(e, {
|
|
22
24
|
quotaId: e,
|
|
23
25
|
name: n.quota.name ?? "Unknown Quota",
|
|
@@ -26,100 +28,103 @@ function h(e) {
|
|
|
26
28
|
}
|
|
27
29
|
return Array.from(t.values());
|
|
28
30
|
}
|
|
29
|
-
|
|
30
|
-
let
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
function b(e) {
|
|
32
|
+
let t = y(e), n = new Map(t.map((e) => [e.name, e]));
|
|
33
|
+
return p.flatMap((e) => {
|
|
34
|
+
let t = n.get(e);
|
|
35
|
+
return t ? [t] : [];
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
var x = () => {
|
|
39
|
+
let { t: r } = v(), i = (e, t) => {
|
|
40
|
+
let n = r(e);
|
|
41
|
+
return n === e ? t : n;
|
|
42
|
+
}, a = c(), { productId: s } = e(), { plans: l, isLoading: u, error: f, refetch: p } = d({
|
|
34
43
|
includeFree: !1,
|
|
35
|
-
productId:
|
|
36
|
-
}), [
|
|
37
|
-
return
|
|
44
|
+
productId: s ?? void 0
|
|
45
|
+
}), [m, y] = h("grid"), [b, x] = h(n.MONTHLY), S = l.filter((e) => e.isActive && e.duration === b);
|
|
46
|
+
return u && l.length === 0 ? /* @__PURE__ */ _("div", {
|
|
38
47
|
className: "space-y-6 p-6",
|
|
39
|
-
children: [/* @__PURE__ */
|
|
48
|
+
children: [/* @__PURE__ */ g("div", { className: "h-8 w-48 bg-muted animate-pulse rounded" }), /* @__PURE__ */ g("div", {
|
|
40
49
|
className: "grid grid-cols-1 md:grid-cols-3 gap-6",
|
|
41
50
|
children: [
|
|
42
51
|
1,
|
|
43
52
|
2,
|
|
44
53
|
3
|
|
45
|
-
].map((e) => /* @__PURE__ */
|
|
54
|
+
].map((e) => /* @__PURE__ */ _("div", {
|
|
46
55
|
className: "border border-border rounded-lg p-6 space-y-4",
|
|
47
56
|
children: [
|
|
48
|
-
/* @__PURE__ */
|
|
49
|
-
/* @__PURE__ */
|
|
50
|
-
/* @__PURE__ */
|
|
57
|
+
/* @__PURE__ */ g("div", { className: "h-6 w-24 bg-muted animate-pulse rounded" }),
|
|
58
|
+
/* @__PURE__ */ g("div", { className: "h-8 w-32 bg-muted animate-pulse rounded" }),
|
|
59
|
+
/* @__PURE__ */ g("div", {
|
|
51
60
|
className: "space-y-2",
|
|
52
61
|
children: [
|
|
53
62
|
1,
|
|
54
63
|
2,
|
|
55
64
|
3
|
|
56
|
-
].map((e) => /* @__PURE__ */
|
|
65
|
+
].map((e) => /* @__PURE__ */ g("div", { className: "h-4 w-full bg-muted animate-pulse rounded" }, e))
|
|
57
66
|
})
|
|
58
67
|
]
|
|
59
68
|
}, e))
|
|
60
69
|
})]
|
|
61
|
-
}) :
|
|
70
|
+
}) : f && o(f) ? /* @__PURE__ */ g("div", {
|
|
62
71
|
className: "p-6",
|
|
63
|
-
children: /* @__PURE__ */
|
|
64
|
-
title:
|
|
65
|
-
message:
|
|
66
|
-
onRetry: () =>
|
|
72
|
+
children: /* @__PURE__ */ g(t, {
|
|
73
|
+
title: i("billing.plans.serverUnavailable", "Server Unavailable"),
|
|
74
|
+
message: i("billing.plans.unableToLoadPlans", "Unable to load plans."),
|
|
75
|
+
onRetry: () => p(),
|
|
67
76
|
showRetry: !0
|
|
68
77
|
})
|
|
69
|
-
}) : /* @__PURE__ */
|
|
78
|
+
}) : /* @__PURE__ */ _("div", {
|
|
70
79
|
className: "space-y-6 p-6",
|
|
71
80
|
children: [
|
|
72
|
-
/* @__PURE__ */
|
|
81
|
+
/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("h1", {
|
|
73
82
|
className: "text-2xl font-bold text-foreground",
|
|
74
|
-
children:
|
|
75
|
-
}), /* @__PURE__ */
|
|
83
|
+
children: i("billing.plans.browsePlansTitle", "Plans")
|
|
84
|
+
}), /* @__PURE__ */ g("p", {
|
|
76
85
|
className: "text-sm text-muted-foreground mt-1",
|
|
77
|
-
children:
|
|
86
|
+
children: i("billing.plans.browsePlansSubtitle", "Choose a plan that fits your needs")
|
|
78
87
|
})] }),
|
|
79
|
-
/* @__PURE__ */
|
|
88
|
+
/* @__PURE__ */ _("div", {
|
|
80
89
|
className: "flex flex-wrap items-center gap-4 pb-4 border-b border-border",
|
|
81
|
-
children: [/* @__PURE__ */
|
|
90
|
+
children: [/* @__PURE__ */ g("div", {
|
|
82
91
|
className: "inline-flex rounded-lg border border-border p-1 bg-muted/50",
|
|
83
|
-
children: [
|
|
84
|
-
"all",
|
|
85
|
-
"monthly",
|
|
86
|
-
"yearly"
|
|
87
|
-
].map((e) => /* @__PURE__ */ f("button", {
|
|
92
|
+
children: [n.MONTHLY, n.YEARLY].map((e) => /* @__PURE__ */ g("button", {
|
|
88
93
|
type: "button",
|
|
89
|
-
onClick: () =>
|
|
90
|
-
className: `px-3 py-1.5 text-sm font-medium rounded-md transition-colors ${
|
|
91
|
-
children: e ===
|
|
94
|
+
onClick: () => x(e),
|
|
95
|
+
className: `px-3 py-1.5 text-sm font-medium rounded-md transition-colors ${b === e ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"}`,
|
|
96
|
+
children: e === n.MONTHLY ? "Monthly" : "Yearly"
|
|
92
97
|
}, e))
|
|
93
|
-
}), /* @__PURE__ */
|
|
98
|
+
}), /* @__PURE__ */ _("div", {
|
|
94
99
|
className: "ml-auto inline-flex rounded-lg border border-border p-1 bg-muted/50",
|
|
95
|
-
children: [/* @__PURE__ */
|
|
100
|
+
children: [/* @__PURE__ */ g("button", {
|
|
96
101
|
type: "button",
|
|
97
|
-
onClick: () =>
|
|
98
|
-
className: `p-1.5 rounded-md transition-colors ${
|
|
102
|
+
onClick: () => y("grid"),
|
|
103
|
+
className: `p-1.5 rounded-md transition-colors ${m === "grid" ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"}`,
|
|
99
104
|
title: "Grid view",
|
|
100
|
-
children: /* @__PURE__ */
|
|
105
|
+
children: /* @__PURE__ */ g("svg", {
|
|
101
106
|
className: "size-4",
|
|
102
107
|
fill: "none",
|
|
103
108
|
viewBox: "0 0 24 24",
|
|
104
109
|
stroke: "currentColor",
|
|
105
|
-
children: /* @__PURE__ */
|
|
110
|
+
children: /* @__PURE__ */ g("path", {
|
|
106
111
|
strokeLinecap: "round",
|
|
107
112
|
strokeLinejoin: "round",
|
|
108
113
|
strokeWidth: 2,
|
|
109
114
|
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"
|
|
110
115
|
})
|
|
111
116
|
})
|
|
112
|
-
}), /* @__PURE__ */
|
|
117
|
+
}), /* @__PURE__ */ g("button", {
|
|
113
118
|
type: "button",
|
|
114
|
-
onClick: () =>
|
|
115
|
-
className: `p-1.5 rounded-md transition-colors ${
|
|
119
|
+
onClick: () => y("list"),
|
|
120
|
+
className: `p-1.5 rounded-md transition-colors ${m === "list" ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"}`,
|
|
116
121
|
title: "List view",
|
|
117
|
-
children: /* @__PURE__ */
|
|
122
|
+
children: /* @__PURE__ */ g("svg", {
|
|
118
123
|
className: "size-4",
|
|
119
124
|
fill: "none",
|
|
120
125
|
viewBox: "0 0 24 24",
|
|
121
126
|
stroke: "currentColor",
|
|
122
|
-
children: /* @__PURE__ */
|
|
127
|
+
children: /* @__PURE__ */ g("path", {
|
|
123
128
|
strokeLinecap: "round",
|
|
124
129
|
strokeLinejoin: "round",
|
|
125
130
|
strokeWidth: 2,
|
|
@@ -129,17 +134,17 @@ var g = () => {
|
|
|
129
134
|
})]
|
|
130
135
|
})]
|
|
131
136
|
}),
|
|
132
|
-
|
|
137
|
+
S.length === 0 ? /* @__PURE__ */ _("div", {
|
|
133
138
|
className: "flex flex-col items-center justify-center py-12 border border-dashed border-border rounded-lg",
|
|
134
139
|
children: [
|
|
135
|
-
/* @__PURE__ */
|
|
140
|
+
/* @__PURE__ */ g("div", {
|
|
136
141
|
className: "size-12 rounded-full bg-muted flex items-center justify-center mb-4",
|
|
137
|
-
children: /* @__PURE__ */
|
|
142
|
+
children: /* @__PURE__ */ g("svg", {
|
|
138
143
|
className: "size-6 text-muted-foreground",
|
|
139
144
|
fill: "none",
|
|
140
145
|
viewBox: "0 0 24 24",
|
|
141
146
|
stroke: "currentColor",
|
|
142
|
-
children: /* @__PURE__ */
|
|
147
|
+
children: /* @__PURE__ */ g("path", {
|
|
143
148
|
strokeLinecap: "round",
|
|
144
149
|
strokeLinejoin: "round",
|
|
145
150
|
strokeWidth: 2,
|
|
@@ -147,102 +152,217 @@ var g = () => {
|
|
|
147
152
|
})
|
|
148
153
|
})
|
|
149
154
|
}),
|
|
150
|
-
/* @__PURE__ */
|
|
155
|
+
/* @__PURE__ */ g("h3", {
|
|
151
156
|
className: "text-lg font-medium text-foreground",
|
|
152
|
-
children:
|
|
157
|
+
children: i("billing.plans.noPlansAvailable", "No plans available")
|
|
153
158
|
}),
|
|
154
|
-
/* @__PURE__ */
|
|
159
|
+
/* @__PURE__ */ g("p", {
|
|
155
160
|
className: "text-sm text-muted-foreground mt-1",
|
|
156
|
-
children:
|
|
161
|
+
children: i("billing.plans.checkBackLater", "Check back later for new plans.")
|
|
157
162
|
})
|
|
158
163
|
]
|
|
159
|
-
}) :
|
|
164
|
+
}) : m === "grid" ? /* @__PURE__ */ _("div", {
|
|
160
165
|
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",
|
|
161
|
-
children:
|
|
166
|
+
children: [S.map((e) => /* @__PURE__ */ g(T, {
|
|
162
167
|
plan: e,
|
|
163
|
-
onView: () =>
|
|
164
|
-
onSubscribe: () =>
|
|
165
|
-
}, e.id))
|
|
166
|
-
}) : /* @__PURE__ */
|
|
168
|
+
onView: () => a(`/plans/${e.id}`),
|
|
169
|
+
onSubscribe: () => a(`/checkout/${e.id}`)
|
|
170
|
+
}, e.id)), /* @__PURE__ */ g(C, {})]
|
|
171
|
+
}) : /* @__PURE__ */ _("div", {
|
|
167
172
|
className: "space-y-3",
|
|
168
|
-
children:
|
|
173
|
+
children: [S.map((e) => /* @__PURE__ */ g(E, {
|
|
169
174
|
plan: e,
|
|
170
|
-
onView: () =>
|
|
171
|
-
onSubscribe: () =>
|
|
172
|
-
}, e.id))
|
|
175
|
+
onView: () => a(`/plans/${e.id}`),
|
|
176
|
+
onSubscribe: () => a(`/checkout/${e.id}`)
|
|
177
|
+
}, e.id)), /* @__PURE__ */ g(w, {})]
|
|
173
178
|
})
|
|
174
179
|
]
|
|
175
180
|
});
|
|
176
|
-
},
|
|
177
|
-
|
|
178
|
-
|
|
181
|
+
}, S = [
|
|
182
|
+
"Unlimited Agents & Sessions",
|
|
183
|
+
"Dedicated single-tenant infra",
|
|
184
|
+
"Customer-managed encryption keys",
|
|
185
|
+
"SSO / SCIM provisioning",
|
|
186
|
+
"Custom SLA & support contract",
|
|
187
|
+
"Volume-based custom pricing",
|
|
188
|
+
"Audit log with custom retention",
|
|
189
|
+
"Priority onboarding & migration"
|
|
190
|
+
], C = () => /* @__PURE__ */ _("div", {
|
|
191
|
+
className: "border border-action-primary-bg/40 bg-action-primary-bg/5 rounded-lg p-6 flex flex-col h-full",
|
|
192
|
+
children: [
|
|
193
|
+
/* @__PURE__ */ _("div", {
|
|
194
|
+
className: "mb-4",
|
|
195
|
+
children: [/* @__PURE__ */ _("div", {
|
|
196
|
+
className: "flex items-center gap-2",
|
|
197
|
+
children: [/* @__PURE__ */ g("h3", {
|
|
198
|
+
className: "text-lg font-bold text-foreground",
|
|
199
|
+
children: "Enterprise"
|
|
200
|
+
}), /* @__PURE__ */ g("span", {
|
|
201
|
+
className: "text-xs font-medium px-2 py-0.5 rounded-full bg-action-primary-bg/15 text-action-primary-bg",
|
|
202
|
+
children: "Contact Us"
|
|
203
|
+
})]
|
|
204
|
+
}), /* @__PURE__ */ g("span", {
|
|
205
|
+
className: "text-sm text-muted-foreground",
|
|
206
|
+
children: "Custom contract"
|
|
207
|
+
})]
|
|
208
|
+
}),
|
|
209
|
+
/* @__PURE__ */ g("div", {
|
|
210
|
+
className: "flex items-baseline gap-1 mb-4",
|
|
211
|
+
children: /* @__PURE__ */ g("span", {
|
|
212
|
+
className: "text-2xl font-bold text-foreground",
|
|
213
|
+
children: "Custom pricing"
|
|
214
|
+
})
|
|
215
|
+
}),
|
|
216
|
+
/* @__PURE__ */ g("ul", {
|
|
217
|
+
className: "space-y-2 mb-4 flex-1",
|
|
218
|
+
children: S.map((e) => /* @__PURE__ */ _("li", {
|
|
219
|
+
className: "flex items-center gap-2 text-sm",
|
|
220
|
+
children: [/* @__PURE__ */ g("svg", {
|
|
221
|
+
className: "size-4 text-status-success-text shrink-0",
|
|
222
|
+
fill: "none",
|
|
223
|
+
viewBox: "0 0 24 24",
|
|
224
|
+
stroke: "currentColor",
|
|
225
|
+
children: /* @__PURE__ */ g("path", {
|
|
226
|
+
strokeLinecap: "round",
|
|
227
|
+
strokeLinejoin: "round",
|
|
228
|
+
strokeWidth: 2,
|
|
229
|
+
d: "M5 13l4 4L19 7"
|
|
230
|
+
})
|
|
231
|
+
}), /* @__PURE__ */ g("span", {
|
|
232
|
+
className: "text-foreground",
|
|
233
|
+
children: e
|
|
234
|
+
})]
|
|
235
|
+
}, e))
|
|
236
|
+
}),
|
|
237
|
+
/* @__PURE__ */ g("div", {
|
|
238
|
+
className: "space-y-2 pt-4 border-t border-border mt-auto",
|
|
239
|
+
children: /* @__PURE__ */ g("a", {
|
|
240
|
+
href: "mailto:contact@burdenoff.com?subject=Enterprise Plan Inquiry",
|
|
241
|
+
className: "block w-full px-4 py-2 text-sm font-medium text-center bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
|
|
242
|
+
children: "Contact Us"
|
|
243
|
+
})
|
|
244
|
+
})
|
|
245
|
+
]
|
|
246
|
+
}), w = () => /* @__PURE__ */ _("div", {
|
|
247
|
+
className: "flex items-center gap-4 p-4 border border-action-primary-bg/40 rounded-lg bg-action-primary-bg/5 transition-all hover:shadow-sm",
|
|
248
|
+
children: [
|
|
249
|
+
/* @__PURE__ */ g("div", {
|
|
250
|
+
className: "size-10 rounded-lg bg-action-primary-bg/10 flex items-center justify-center shrink-0",
|
|
251
|
+
children: /* @__PURE__ */ g("svg", {
|
|
252
|
+
className: "size-5 text-action-primary-bg",
|
|
253
|
+
fill: "none",
|
|
254
|
+
viewBox: "0 0 24 24",
|
|
255
|
+
stroke: "currentColor",
|
|
256
|
+
children: /* @__PURE__ */ g("path", {
|
|
257
|
+
strokeLinecap: "round",
|
|
258
|
+
strokeLinejoin: "round",
|
|
259
|
+
strokeWidth: 2,
|
|
260
|
+
d: "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-2 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"
|
|
261
|
+
})
|
|
262
|
+
})
|
|
263
|
+
}),
|
|
264
|
+
/* @__PURE__ */ _("div", {
|
|
265
|
+
className: "flex-1 min-w-0",
|
|
266
|
+
children: [/* @__PURE__ */ _("div", {
|
|
267
|
+
className: "flex items-center gap-2",
|
|
268
|
+
children: [/* @__PURE__ */ g("h3", {
|
|
269
|
+
className: "font-semibold text-foreground",
|
|
270
|
+
children: "Enterprise"
|
|
271
|
+
}), /* @__PURE__ */ g("span", {
|
|
272
|
+
className: "text-xs font-medium px-2 py-0.5 rounded-full bg-action-primary-bg/15 text-action-primary-bg shrink-0",
|
|
273
|
+
children: "Contact Us"
|
|
274
|
+
})]
|
|
275
|
+
}), /* @__PURE__ */ g("p", {
|
|
276
|
+
className: "text-sm text-muted-foreground",
|
|
277
|
+
children: "Dedicated infra · SSO/SCIM · Custom SLA"
|
|
278
|
+
})]
|
|
279
|
+
}),
|
|
280
|
+
/* @__PURE__ */ _("div", {
|
|
281
|
+
className: "text-right",
|
|
282
|
+
children: [/* @__PURE__ */ g("div", {
|
|
283
|
+
className: "font-semibold text-foreground",
|
|
284
|
+
children: "Custom pricing"
|
|
285
|
+
}), /* @__PURE__ */ g("div", {
|
|
286
|
+
className: "text-sm text-muted-foreground",
|
|
287
|
+
children: "contract-based"
|
|
288
|
+
})]
|
|
289
|
+
}),
|
|
290
|
+
/* @__PURE__ */ g("a", {
|
|
291
|
+
href: "mailto:contact@burdenoff.com?subject=Enterprise Plan Inquiry",
|
|
292
|
+
className: "px-3 py-1.5 text-sm font-medium bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors shrink-0",
|
|
293
|
+
children: "Contact Us"
|
|
294
|
+
})
|
|
295
|
+
]
|
|
296
|
+
}), T = ({ plan: e, onView: t, onSubscribe: n }) => {
|
|
297
|
+
let o = b(e.features || []), s = y(e.features || []).length - o.length, c = u();
|
|
298
|
+
return /* @__PURE__ */ _("div", {
|
|
179
299
|
className: "border border-border rounded-lg bg-card p-6 transition-all hover:shadow-md flex flex-col h-full",
|
|
180
300
|
children: [
|
|
181
|
-
/* @__PURE__ */
|
|
301
|
+
/* @__PURE__ */ _("div", {
|
|
182
302
|
className: "mb-4",
|
|
183
|
-
children: [/* @__PURE__ */
|
|
303
|
+
children: [/* @__PURE__ */ g("h3", {
|
|
184
304
|
className: "text-lg font-bold text-foreground",
|
|
185
305
|
children: e.name
|
|
186
|
-
}), /* @__PURE__ */
|
|
306
|
+
}), /* @__PURE__ */ g("span", {
|
|
187
307
|
className: "text-sm text-muted-foreground",
|
|
188
|
-
children:
|
|
308
|
+
children: a(e.duration)
|
|
189
309
|
})]
|
|
190
310
|
}),
|
|
191
|
-
/* @__PURE__ */
|
|
311
|
+
/* @__PURE__ */ _("div", {
|
|
192
312
|
className: "flex items-baseline gap-1 mb-4",
|
|
193
|
-
children: [/* @__PURE__ */
|
|
313
|
+
children: [/* @__PURE__ */ g("span", {
|
|
194
314
|
className: "text-3xl font-bold text-foreground",
|
|
195
315
|
children: (() => {
|
|
196
|
-
let { price: t, currency:
|
|
197
|
-
return
|
|
316
|
+
let { price: t, currency: n } = l(e.price, e.currency, e.currencyPrices, c);
|
|
317
|
+
return r(t, n);
|
|
198
318
|
})()
|
|
199
|
-
}), /* @__PURE__ */
|
|
319
|
+
}), /* @__PURE__ */ _("span", {
|
|
200
320
|
className: "text-muted-foreground text-sm",
|
|
201
|
-
children: ["/ ",
|
|
321
|
+
children: ["/ ", i(e.duration)]
|
|
202
322
|
})]
|
|
203
323
|
}),
|
|
204
|
-
o.length > 0 && /* @__PURE__ */
|
|
205
|
-
className: "space-y-2 mb-4",
|
|
206
|
-
children: [o.
|
|
324
|
+
o.length > 0 && /* @__PURE__ */ _("ul", {
|
|
325
|
+
className: "space-y-2 mb-4 flex-1",
|
|
326
|
+
children: [o.map((e) => /* @__PURE__ */ _("li", {
|
|
207
327
|
className: "flex items-center justify-between text-sm",
|
|
208
|
-
children: [/* @__PURE__ */
|
|
328
|
+
children: [/* @__PURE__ */ _("div", {
|
|
209
329
|
className: "flex items-center gap-2",
|
|
210
|
-
children: [/* @__PURE__ */
|
|
330
|
+
children: [/* @__PURE__ */ g("svg", {
|
|
211
331
|
className: "size-4 text-status-success-text shrink-0",
|
|
212
332
|
fill: "none",
|
|
213
333
|
viewBox: "0 0 24 24",
|
|
214
334
|
stroke: "currentColor",
|
|
215
|
-
children: /* @__PURE__ */
|
|
335
|
+
children: /* @__PURE__ */ g("path", {
|
|
216
336
|
strokeLinecap: "round",
|
|
217
337
|
strokeLinejoin: "round",
|
|
218
338
|
strokeWidth: 2,
|
|
219
339
|
d: "M5 13l4 4L19 7"
|
|
220
340
|
})
|
|
221
|
-
}), /* @__PURE__ */
|
|
341
|
+
}), /* @__PURE__ */ g("span", {
|
|
222
342
|
className: "text-foreground",
|
|
223
|
-
children: e.name
|
|
343
|
+
children: f[e.name] ?? e.name
|
|
224
344
|
})]
|
|
225
|
-
}), /* @__PURE__ */
|
|
226
|
-
className: "font-medium text-foreground",
|
|
227
|
-
children: e.totalValue
|
|
345
|
+
}), /* @__PURE__ */ g("span", {
|
|
346
|
+
className: "font-medium text-foreground tabular-nums",
|
|
347
|
+
children: m(e.name, e.totalValue)
|
|
228
348
|
})]
|
|
229
|
-
}, e.quotaId)),
|
|
349
|
+
}, e.quotaId)), s > 0 && /* @__PURE__ */ _("li", {
|
|
230
350
|
className: "text-sm text-muted-foreground pl-6",
|
|
231
351
|
children: [
|
|
232
352
|
"+",
|
|
233
|
-
|
|
234
|
-
" more"
|
|
353
|
+
s,
|
|
354
|
+
" more — see details"
|
|
235
355
|
]
|
|
236
356
|
})]
|
|
237
357
|
}),
|
|
238
|
-
/* @__PURE__ */
|
|
358
|
+
/* @__PURE__ */ _("div", {
|
|
239
359
|
className: "space-y-2 pt-4 border-t border-border mt-auto",
|
|
240
|
-
children: [/* @__PURE__ */
|
|
360
|
+
children: [/* @__PURE__ */ g("button", {
|
|
241
361
|
type: "button",
|
|
242
|
-
onClick:
|
|
362
|
+
onClick: n,
|
|
243
363
|
className: "w-full px-4 py-2 text-sm font-medium bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors",
|
|
244
364
|
children: "Subscribe"
|
|
245
|
-
}), /* @__PURE__ */
|
|
365
|
+
}), /* @__PURE__ */ g("button", {
|
|
246
366
|
type: "button",
|
|
247
367
|
onClick: t,
|
|
248
368
|
className: "w-full px-4 py-2 text-sm font-medium border border-border text-foreground rounded-md hover:bg-muted transition-colors",
|
|
@@ -251,19 +371,19 @@ var g = () => {
|
|
|
251
371
|
})
|
|
252
372
|
]
|
|
253
373
|
});
|
|
254
|
-
},
|
|
255
|
-
let a =
|
|
256
|
-
return /* @__PURE__ */
|
|
374
|
+
}, E = ({ plan: e, onView: t, onSubscribe: n }) => {
|
|
375
|
+
let a = b(e.features || []), o = u();
|
|
376
|
+
return /* @__PURE__ */ _("div", {
|
|
257
377
|
className: "flex items-center gap-4 p-4 border border-border rounded-lg bg-card transition-all hover:shadow-sm",
|
|
258
378
|
children: [
|
|
259
|
-
/* @__PURE__ */
|
|
379
|
+
/* @__PURE__ */ g("div", {
|
|
260
380
|
className: "size-10 rounded-lg bg-primary/10 flex items-center justify-center shrink-0",
|
|
261
|
-
children: /* @__PURE__ */
|
|
381
|
+
children: /* @__PURE__ */ g("svg", {
|
|
262
382
|
className: "size-5 text-primary",
|
|
263
383
|
fill: "none",
|
|
264
384
|
viewBox: "0 0 24 24",
|
|
265
385
|
stroke: "currentColor",
|
|
266
|
-
children: /* @__PURE__ */
|
|
386
|
+
children: /* @__PURE__ */ g("path", {
|
|
267
387
|
strokeLinecap: "round",
|
|
268
388
|
strokeLinejoin: "round",
|
|
269
389
|
strokeWidth: 2,
|
|
@@ -271,42 +391,42 @@ var g = () => {
|
|
|
271
391
|
})
|
|
272
392
|
})
|
|
273
393
|
}),
|
|
274
|
-
/* @__PURE__ */
|
|
394
|
+
/* @__PURE__ */ _("div", {
|
|
275
395
|
className: "flex-1 min-w-0",
|
|
276
|
-
children: [/* @__PURE__ */
|
|
396
|
+
children: [/* @__PURE__ */ g("h3", {
|
|
277
397
|
className: "font-semibold text-foreground truncate",
|
|
278
398
|
children: e.name
|
|
279
|
-
}), /* @__PURE__ */
|
|
399
|
+
}), /* @__PURE__ */ _("p", {
|
|
280
400
|
className: "text-sm text-muted-foreground",
|
|
281
401
|
children: [
|
|
282
402
|
a.length,
|
|
283
|
-
"
|
|
403
|
+
" key feature",
|
|
284
404
|
a.length === 1 ? "" : "s",
|
|
285
405
|
" included"
|
|
286
406
|
]
|
|
287
407
|
})]
|
|
288
408
|
}),
|
|
289
|
-
/* @__PURE__ */
|
|
409
|
+
/* @__PURE__ */ _("div", {
|
|
290
410
|
className: "text-right",
|
|
291
|
-
children: [/* @__PURE__ */
|
|
411
|
+
children: [/* @__PURE__ */ g("div", {
|
|
292
412
|
className: "font-semibold text-foreground",
|
|
293
413
|
children: (() => {
|
|
294
|
-
let { price: t, currency:
|
|
295
|
-
return
|
|
414
|
+
let { price: t, currency: n } = l(e.price, e.currency, e.currencyPrices, o);
|
|
415
|
+
return r(t, n);
|
|
296
416
|
})()
|
|
297
|
-
}), /* @__PURE__ */
|
|
417
|
+
}), /* @__PURE__ */ _("div", {
|
|
298
418
|
className: "text-sm text-muted-foreground",
|
|
299
|
-
children: ["per ",
|
|
419
|
+
children: ["per ", i(e.duration)]
|
|
300
420
|
})]
|
|
301
421
|
}),
|
|
302
|
-
/* @__PURE__ */
|
|
422
|
+
/* @__PURE__ */ _("div", {
|
|
303
423
|
className: "flex items-center gap-2",
|
|
304
|
-
children: [/* @__PURE__ */
|
|
424
|
+
children: [/* @__PURE__ */ g("button", {
|
|
305
425
|
type: "button",
|
|
306
|
-
onClick:
|
|
426
|
+
onClick: n,
|
|
307
427
|
className: "px-3 py-1.5 text-sm font-medium bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors",
|
|
308
428
|
children: "Subscribe"
|
|
309
|
-
}), /* @__PURE__ */
|
|
429
|
+
}), /* @__PURE__ */ g("button", {
|
|
310
430
|
type: "button",
|
|
311
431
|
onClick: t,
|
|
312
432
|
className: "px-3 py-1.5 text-sm font-medium border border-border text-foreground rounded-md hover:bg-muted transition-colors",
|
|
@@ -317,6 +437,6 @@ var g = () => {
|
|
|
317
437
|
});
|
|
318
438
|
};
|
|
319
439
|
//#endregion
|
|
320
|
-
export {
|
|
440
|
+
export { x as PlansBrowsePage };
|
|
321
441
|
|
|
322
442
|
//# sourceMappingURL=PlansBrowsePage.js.map
|