@cedros/pay-react 1.1.15 → 1.1.17

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 (149) hide show
  1. package/dist/AISettingsSection--jn-BNmd.mjs +539 -0
  2. package/dist/AISettingsSection-BrXUD4l_.js +51 -0
  3. package/dist/AutosaveIndicator-B3T328jH.mjs +35 -0
  4. package/dist/AutosaveIndicator-BQkm3cn8.js +1 -0
  5. package/dist/{CedrosContext-D7nh5-Zh.mjs → CedrosContext-BnJ2Cf7R.mjs} +1179 -642
  6. package/dist/CedrosContext-C26DlvLF.js +6 -0
  7. package/dist/CryptoButton-B4-oJ8lF.js +1 -0
  8. package/dist/CryptoButton-Dhxnk9d7.mjs +542 -0
  9. package/dist/FAQSection-BB1wJRsR.mjs +366 -0
  10. package/dist/FAQSection-aoAz35MV.js +1 -0
  11. package/dist/MessagingSection-BG9O62ko.mjs +347 -0
  12. package/dist/MessagingSection-DId-WJdU.js +1 -0
  13. package/dist/PaymentSettingsSection-D92IO4xJ.js +1 -0
  14. package/dist/PaymentSettingsSection-c13RAUxn.mjs +94 -0
  15. package/dist/SettingsSection-DUxjXl2G.js +1 -0
  16. package/dist/SettingsSection-htem-WL3.mjs +57 -0
  17. package/dist/SingleCategorySettings-BIEs6s6Z.mjs +1421 -0
  18. package/dist/SingleCategorySettings-CQ-osdzb.js +3 -0
  19. package/dist/StorefrontSection-CKTQt255.mjs +765 -0
  20. package/dist/StorefrontSection-DcSoDx-k.js +1 -0
  21. package/dist/SubscriptionsSection-C0hYf7Hr.js +1 -0
  22. package/dist/SubscriptionsSection-CONwHhT4.mjs +616 -0
  23. package/dist/Toggle-CsPSF8Dr.js +1 -0
  24. package/dist/Toggle-DAxIdpY4.mjs +48 -0
  25. package/dist/WalletManager-D6BYTwXn.js +1 -0
  26. package/dist/{WalletManager-oEjZhaFk.mjs → WalletManager-HXXyARQ7.mjs} +36 -32
  27. package/dist/components/CedrosPay.d.ts.map +1 -1
  28. package/dist/components/CryptoSubscribeButton.d.ts.map +1 -1
  29. package/dist/components/PaymentModal.d.ts.map +1 -1
  30. package/dist/components/SubscriptionManagementPanel.d.ts.map +1 -1
  31. package/dist/components/admin/AISettingsSection.d.ts.map +1 -1
  32. package/dist/components/admin/AdminAuthManager.d.ts +2 -1
  33. package/dist/components/admin/AdminAuthManager.d.ts.map +1 -1
  34. package/dist/components/admin/AutosaveIndicator.d.ts +7 -0
  35. package/dist/components/admin/AutosaveIndicator.d.ts.map +1 -0
  36. package/dist/components/admin/CedrosPayAdminDashboard.d.ts.map +1 -1
  37. package/dist/components/admin/ConfigEditor.d.ts +0 -2
  38. package/dist/components/admin/ConfigEditor.d.ts.map +1 -1
  39. package/dist/components/admin/MessagingSection.d.ts.map +1 -1
  40. package/dist/components/admin/ProductsSection.d.ts.map +1 -1
  41. package/dist/components/admin/RefundsSection.d.ts.map +1 -1
  42. package/dist/components/admin/SecretArrayEditor.d.ts +16 -0
  43. package/dist/components/admin/SecretArrayEditor.d.ts.map +1 -0
  44. package/dist/components/admin/SingleCategorySettings.d.ts.map +1 -1
  45. package/dist/components/admin/StorefrontSection.d.ts.map +1 -1
  46. package/dist/components/admin/Toggle.d.ts +14 -0
  47. package/dist/components/admin/Toggle.d.ts.map +1 -0
  48. package/dist/components/admin/TokenMintSelector.d.ts +27 -0
  49. package/dist/components/admin/TokenMintSelector.d.ts.map +1 -0
  50. package/dist/components/admin/configApi.d.ts +5 -3
  51. package/dist/components/admin/configApi.d.ts.map +1 -1
  52. package/dist/components/admin/index.d.ts +8 -9
  53. package/dist/components/admin/index.d.ts.map +1 -1
  54. package/dist/components/admin/sections-more.d.ts +2 -9
  55. package/dist/components/admin/sections-more.d.ts.map +1 -1
  56. package/dist/context/CedrosContext.d.ts +1 -1
  57. package/dist/context/CedrosContext.d.ts.map +1 -1
  58. package/dist/crypto-only.js +1 -1
  59. package/dist/crypto-only.mjs +391 -380
  60. package/dist/ecommerce/__tests__/inventoryHooks.test.d.ts +2 -0
  61. package/dist/ecommerce/__tests__/inventoryHooks.test.d.ts.map +1 -0
  62. package/dist/ecommerce/__tests__/storage.test.d.ts +2 -0
  63. package/dist/ecommerce/__tests__/storage.test.d.ts.map +1 -0
  64. package/dist/ecommerce/adapters/CommerceAdapter.d.ts +5 -0
  65. package/dist/ecommerce/adapters/CommerceAdapter.d.ts.map +1 -1
  66. package/dist/ecommerce/adapters/mock/mockAdapter.d.ts.map +1 -1
  67. package/dist/ecommerce/adapters/paywall/paywallAdapter.d.ts.map +1 -1
  68. package/dist/ecommerce/adapters/paywall/paywallAdapter.test.d.ts +2 -0
  69. package/dist/ecommerce/adapters/paywall/paywallAdapter.test.d.ts.map +1 -0
  70. package/dist/ecommerce/components/catalog/ProductCard.d.ts.map +1 -1
  71. package/dist/ecommerce/components/catalog/QuickViewDialog.d.ts.map +1 -1
  72. package/dist/ecommerce/components/chat/ShopChatPanel.d.ts +4 -0
  73. package/dist/ecommerce/components/chat/ShopChatPanel.d.ts.map +1 -1
  74. package/dist/ecommerce/components/checkout/PaymentStep.d.ts.map +1 -1
  75. package/dist/ecommerce/components/faq/FAQItem.d.ts.map +1 -1
  76. package/dist/ecommerce/config/context.d.ts.map +1 -1
  77. package/dist/ecommerce/hooks/useAIRelatedProducts.d.ts.map +1 -1
  78. package/dist/ecommerce/hooks/useCartInventory.d.ts.map +1 -1
  79. package/dist/ecommerce/hooks/useHoldExpiry.d.ts.map +1 -1
  80. package/dist/ecommerce/hooks/useInventoryVerification.d.ts.map +1 -1
  81. package/dist/ecommerce/hooks/useProducts.d.ts.map +1 -1
  82. package/dist/ecommerce/index.d.ts +2 -0
  83. package/dist/ecommerce/index.d.ts.map +1 -1
  84. package/dist/ecommerce/integrations/cedros-pay/useCedrosPayCheckoutAdapter.d.ts.map +1 -1
  85. package/dist/ecommerce/state/cart/CartProvider.d.ts.map +1 -1
  86. package/dist/ecommerce/state/checkout/checkoutSchema.d.ts +1 -1
  87. package/dist/ecommerce/state/checkout/useCheckout.d.ts.map +1 -1
  88. package/dist/ecommerce/templates/ProductTemplate.d.ts.map +1 -1
  89. package/dist/ecommerce/utils/storage.d.ts +1 -1
  90. package/dist/ecommerce/utils/storage.d.ts.map +1 -1
  91. package/dist/hooks/useCreditsPayment.d.ts.map +1 -1
  92. package/dist/hooks/useCreditsSubscription.d.ts.map +1 -1
  93. package/dist/hooks/useCryptoSubscription.d.ts.map +1 -1
  94. package/dist/hooks/useRefundVerification.d.ts.map +1 -1
  95. package/dist/hooks/useStripeCheckout.d.ts +1 -1
  96. package/dist/hooks/useStripeCheckout.d.ts.map +1 -1
  97. package/dist/hooks/useSubscription.d.ts.map +1 -1
  98. package/dist/hooks/useSubscriptionManagement.d.ts.map +1 -1
  99. package/dist/hooks/useX402Payment.d.ts.map +1 -1
  100. package/dist/index-2N_CMVAv.js +84 -0
  101. package/dist/index-C1hbnxn0.mjs +22915 -0
  102. package/dist/index.js +1 -1
  103. package/dist/index.mjs +67 -72
  104. package/dist/managers/CreditsManager.d.ts +6 -0
  105. package/dist/managers/CreditsManager.d.ts.map +1 -1
  106. package/dist/managers/ManagerCache.d.ts.map +1 -1
  107. package/dist/managers/RouteDiscoveryManager.d.ts +3 -0
  108. package/dist/managers/RouteDiscoveryManager.d.ts.map +1 -1
  109. package/dist/managers/StripeManager.d.ts +15 -0
  110. package/dist/managers/StripeManager.d.ts.map +1 -1
  111. package/dist/managers/SubscriptionChangeManager.d.ts.map +1 -1
  112. package/dist/managers/SubscriptionManager.d.ts +7 -14
  113. package/dist/managers/SubscriptionManager.d.ts.map +1 -1
  114. package/dist/managers/WalletManager.d.ts +2 -1
  115. package/dist/managers/WalletManager.d.ts.map +1 -1
  116. package/dist/managers/X402Manager.d.ts.map +1 -1
  117. package/dist/{sections-DG4Ws13b.js → sections-D2GMJuKq.js} +1 -1
  118. package/dist/{sections-Dl8qjlql.mjs → sections-DICaHGhz.mjs} +1 -1
  119. package/dist/stripe-only.js +1 -1
  120. package/dist/stripe-only.mjs +67 -72
  121. package/dist/telemetry.js +1 -1
  122. package/dist/telemetry.mjs +23 -25
  123. package/dist/testing/index.js +1 -1
  124. package/dist/testing/index.mjs +1 -1
  125. package/dist/types/index.d.ts +13 -2
  126. package/dist/types/index.d.ts.map +1 -1
  127. package/dist/useAutosave-B2p6iwh8.js +1 -0
  128. package/dist/useAutosave-YwMqRzqy.mjs +44 -0
  129. package/dist/utils/circuitBreaker.d.ts +3 -1
  130. package/dist/utils/circuitBreaker.d.ts.map +1 -1
  131. package/dist/utils/cspHelper.d.ts +6 -0
  132. package/dist/utils/cspHelper.d.ts.map +1 -1
  133. package/dist/utils/csvHelpers.d.ts +0 -41
  134. package/dist/utils/csvHelpers.d.ts.map +1 -1
  135. package/dist/utils/errorHandling.d.ts.map +1 -1
  136. package/dist/utils/exponentialBackoff.d.ts.map +1 -1
  137. package/dist/utils/requestDeduplication.d.ts.map +1 -1
  138. package/dist/utils/telemetry.d.ts.map +1 -1
  139. package/dist/utils/validateConfig.d.ts +1 -1
  140. package/dist/utils/validateConfig.d.ts.map +1 -1
  141. package/dist/walletDetection-JZR3UCOa.mjs +27 -0
  142. package/dist/walletDetection-bNmV5ItZ.js +1 -0
  143. package/dist/{walletPool-BR6etEiq.mjs → walletPool-BV_z1lEA.mjs} +1 -1
  144. package/dist/{walletPool-BZyAG4YS.js → walletPool-DjA7J3a9.js} +1 -1
  145. package/package.json +8 -7
  146. package/dist/CedrosContext-C2v_s8cc.js +0 -6
  147. package/dist/WalletManager-B5KLZK2D.js +0 -1
  148. package/dist/index-BjxGupjw.mjs +0 -27893
  149. package/dist/index-DW6XWuRP.js +0 -136
@@ -0,0 +1,616 @@
1
+ import { jsx as a, jsxs as i } from "react/jsx-runtime";
2
+ import { useState as g, useCallback as F, useEffect as D, useMemo as E } from "react";
3
+ import { $ as h, a0 as Z, a1 as K } from "./index-C1hbnxn0.mjs";
4
+ const l = {
5
+ enabled: !1,
6
+ plans: [],
7
+ pageTitle: "Choose Your Plan",
8
+ pageSubtitle: "Select the plan that best fits your needs.",
9
+ annualSavingsBadge: "2 months free",
10
+ popularBadgeText: "Best Deal",
11
+ footerNotice: ""
12
+ }, ee = {
13
+ title: "New Plan",
14
+ description: "",
15
+ priceMonthlyUsd: 0,
16
+ priceAnnualUsd: 0,
17
+ features: [],
18
+ featureHighlight: "",
19
+ buttonText: "Purchase",
20
+ isPopular: !1,
21
+ isActive: !0,
22
+ sortOrder: 0
23
+ };
24
+ function ae() {
25
+ return `plan_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
26
+ }
27
+ function le({ serverUrl: N, apiKey: _, authManager: v }) {
28
+ const [r, b] = g(l), [y, Q] = g(!0), [$, P] = g(null), [u, U] = g("plans"), [S, C] = g("idle"), [J, x] = g(null), [d, m] = g({
29
+ enabled: l.enabled,
30
+ pageTitle: l.pageTitle,
31
+ pageSubtitle: l.pageSubtitle,
32
+ annualSavingsBadge: l.annualSavingsBadge,
33
+ popularBadgeText: l.popularBadgeText,
34
+ footerNotice: l.footerNotice
35
+ }), [f, w] = g(d), [I, k] = g(""), A = F(async () => {
36
+ try {
37
+ x(null);
38
+ let e;
39
+ const n = "/admin/subscriptions/settings";
40
+ if (v?.isAuthenticated())
41
+ e = await v.fetchWithAuth(n);
42
+ else {
43
+ const s = { "Content-Type": "application/json" };
44
+ _ && (s["X-API-Key"] = _);
45
+ const t = await fetch(`${N}${n}`, { headers: s });
46
+ if (!t.ok) throw new Error(`Failed to fetch settings: ${t.status}`);
47
+ e = await t.json();
48
+ }
49
+ b({ ...l, ...e }), m({
50
+ enabled: e.enabled ?? l.enabled,
51
+ pageTitle: e.pageTitle ?? l.pageTitle,
52
+ pageSubtitle: e.pageSubtitle ?? l.pageSubtitle,
53
+ annualSavingsBadge: e.annualSavingsBadge ?? l.annualSavingsBadge,
54
+ popularBadgeText: e.popularBadgeText ?? l.popularBadgeText,
55
+ footerNotice: e.footerNotice ?? l.footerNotice
56
+ }), w({
57
+ enabled: e.enabled ?? l.enabled,
58
+ pageTitle: e.pageTitle ?? l.pageTitle,
59
+ pageSubtitle: e.pageSubtitle ?? l.pageSubtitle,
60
+ annualSavingsBadge: e.annualSavingsBadge ?? l.annualSavingsBadge,
61
+ popularBadgeText: e.popularBadgeText ?? l.popularBadgeText,
62
+ footerNotice: e.footerNotice ?? l.footerNotice
63
+ }), k(JSON.stringify(e.plans ?? []));
64
+ } catch {
65
+ b(l), m({
66
+ enabled: l.enabled,
67
+ pageTitle: l.pageTitle,
68
+ pageSubtitle: l.pageSubtitle,
69
+ annualSavingsBadge: l.annualSavingsBadge,
70
+ popularBadgeText: l.popularBadgeText,
71
+ footerNotice: l.footerNotice
72
+ }), w({
73
+ enabled: l.enabled,
74
+ pageTitle: l.pageTitle,
75
+ pageSubtitle: l.pageSubtitle,
76
+ annualSavingsBadge: l.annualSavingsBadge,
77
+ popularBadgeText: l.popularBadgeText,
78
+ footerNotice: l.footerNotice
79
+ }), k(JSON.stringify([])), x("Failed to load subscription settings");
80
+ } finally {
81
+ Q(!1);
82
+ }
83
+ }, [N, _, v]);
84
+ D(() => {
85
+ A();
86
+ }, [A]);
87
+ const L = F(async (e) => {
88
+ try {
89
+ x(null);
90
+ const n = "/admin/subscriptions/settings", s = JSON.stringify(e);
91
+ if (v?.isAuthenticated())
92
+ await v.fetchWithAuth(n, { method: "PUT", body: s });
93
+ else {
94
+ const t = { "Content-Type": "application/json" };
95
+ _ && (t["X-API-Key"] = _);
96
+ const o = await fetch(`${N}${n}`, { method: "PUT", headers: t, body: s });
97
+ if (!o.ok) throw new Error(`Failed to save settings: ${o.status}`);
98
+ }
99
+ return !0;
100
+ } catch {
101
+ return x("Failed to save subscription settings"), !1;
102
+ }
103
+ }, [v, _, N]), M = E(() => f.enabled !== d.enabled || f.pageTitle !== d.pageTitle || f.pageSubtitle !== d.pageSubtitle || f.annualSavingsBadge !== d.annualSavingsBadge || f.popularBadgeText !== d.popularBadgeText || f.footerNotice !== d.footerNotice, [d, f]), z = E(() => JSON.stringify(r.plans), [r.plans]), R = E(() => I !== z, [z, I]), T = F(async () => {
104
+ const e = {
105
+ ...r,
106
+ enabled: d.enabled,
107
+ pageTitle: d.pageTitle,
108
+ pageSubtitle: d.pageSubtitle,
109
+ annualSavingsBadge: d.annualSavingsBadge,
110
+ popularBadgeText: d.popularBadgeText,
111
+ footerNotice: d.footerNotice
112
+ };
113
+ C("saving");
114
+ const n = await L(e);
115
+ b(e), n && (w({
116
+ enabled: e.enabled,
117
+ pageTitle: e.pageTitle,
118
+ pageSubtitle: e.pageSubtitle,
119
+ annualSavingsBadge: e.annualSavingsBadge,
120
+ popularBadgeText: e.popularBadgeText,
121
+ footerNotice: e.footerNotice
122
+ }), k(JSON.stringify(e.plans))), C(n ? "saved" : "error"), setTimeout(() => C("idle"), 1500);
123
+ }, [d, L, r]);
124
+ D(() => {
125
+ if (u !== "page" || y || !M) return;
126
+ const e = setTimeout(T, 600);
127
+ return () => clearTimeout(e);
128
+ }, [u, M, y, T]), D(() => {
129
+ if (u !== "plans" || y || !R) return;
130
+ const e = setTimeout(T, 800);
131
+ return () => clearTimeout(e);
132
+ }, [u, R, y, T]);
133
+ const W = () => {
134
+ const e = {
135
+ ...ee,
136
+ id: ae(),
137
+ sortOrder: r.plans.length
138
+ };
139
+ b((n) => ({ ...n, plans: [...n.plans, e] })), P(e.id);
140
+ }, c = (e, n) => {
141
+ b((s) => ({
142
+ ...s,
143
+ plans: s.plans.map((t) => t.id === e ? { ...t, ...n } : t)
144
+ }));
145
+ }, X = (e) => {
146
+ confirm("Delete this plan? This cannot be undone.") && (b((n) => ({
147
+ ...n,
148
+ plans: n.plans.filter((s) => s.id !== e)
149
+ })), $ === e && P(null));
150
+ }, H = (e, n) => {
151
+ const s = r.plans.findIndex((p) => p.id === e);
152
+ if (s === -1 || n === "up" && s === 0 || n === "down" && s === r.plans.length - 1) return;
153
+ const t = [...r.plans], o = n === "up" ? s - 1 : s + 1;
154
+ [t[s], t[o]] = [t[o], t[s]], b((p) => ({ ...p, plans: t }));
155
+ }, Y = (e) => {
156
+ c(e, {
157
+ features: [...r.plans.find((n) => n.id === e)?.features || [], ""]
158
+ });
159
+ }, q = (e, n, s) => {
160
+ const t = r.plans.find((p) => p.id === e);
161
+ if (!t) return;
162
+ const o = [...t.features];
163
+ o[n] = s, c(e, { features: o });
164
+ }, G = (e, n) => {
165
+ const s = r.plans.find((o) => o.id === e);
166
+ if (!s) return;
167
+ const t = s.features.filter((o, p) => p !== n);
168
+ c(e, { features: t });
169
+ };
170
+ if (y)
171
+ return /* @__PURE__ */ a("div", { className: "cedros-admin__page", children: /* @__PURE__ */ i("div", { className: "cedros-admin__loading", children: [
172
+ h.loading,
173
+ " Loading subscription settings..."
174
+ ] }) });
175
+ const O = r.plans.filter((e) => e.isActive).length, j = r.plans.reduce((e, n) => e + (n.activeSubscribers ?? 0), 0), B = d.enabled, V = r.plans.filter((e) => e.isActive).map((e) => ({
176
+ label: e.title,
177
+ value: e.activeSubscribers ?? 0,
178
+ description: "subscribers"
179
+ }));
180
+ return /* @__PURE__ */ i("div", { className: "cedros-admin__page", children: [
181
+ /* @__PURE__ */ a(Z, { message: J, onRetry: A }),
182
+ /* @__PURE__ */ a(
183
+ K,
184
+ {
185
+ stats: [
186
+ { label: "Status", value: B ? "Enabled" : "Disabled", variant: B ? "success" : "muted" },
187
+ { label: "Active Plans", value: O, variant: O > 0 ? "success" : "muted" },
188
+ { label: "Total Subscribers", value: j, variant: j > 0 ? "success" : "muted" },
189
+ ...V
190
+ ],
191
+ isLoading: y
192
+ }
193
+ ),
194
+ /* @__PURE__ */ i("div", { className: "cedros-admin__section", children: [
195
+ /* @__PURE__ */ i("div", { className: "cedros-admin__section-header", children: [
196
+ /* @__PURE__ */ a("h3", { className: "cedros-admin__section-title", children: "Subscription Settings" }),
197
+ /* @__PURE__ */ i("div", { style: { display: "flex", alignItems: "center", gap: "0.75rem" }, children: [
198
+ u === "plans" && /* @__PURE__ */ i(
199
+ "button",
200
+ {
201
+ className: "cedros-admin__button cedros-admin__button--primary cedros-admin__button--action",
202
+ onClick: W,
203
+ disabled: !B,
204
+ children: [
205
+ h.plus,
206
+ "Add Plan"
207
+ ]
208
+ }
209
+ ),
210
+ /* @__PURE__ */ i("span", { className: `cedros-admin__autosave-indicator cedros-admin__autosave-indicator--${S}`, children: [
211
+ S === "saving" && "Saving...",
212
+ S === "saved" && "Saved",
213
+ S === "error" && "Error"
214
+ ] })
215
+ ] })
216
+ ] }),
217
+ /* @__PURE__ */ i("div", { className: "cedros-admin__tabs cedros-admin__tabs--line", children: [
218
+ /* @__PURE__ */ a(
219
+ "button",
220
+ {
221
+ type: "button",
222
+ className: `cedros-admin__tab ${u === "plans" ? "cedros-admin__tab--active" : ""}`,
223
+ onClick: () => U("plans"),
224
+ children: "Plans"
225
+ }
226
+ ),
227
+ /* @__PURE__ */ a(
228
+ "button",
229
+ {
230
+ type: "button",
231
+ className: `cedros-admin__tab ${u === "page" ? "cedros-admin__tab--active" : ""}`,
232
+ onClick: () => U("page"),
233
+ children: "Page Settings"
234
+ }
235
+ )
236
+ ] }),
237
+ u === "page" && /* @__PURE__ */ i("div", { children: [
238
+ /* @__PURE__ */ a("div", { className: "cedros-admin__form-row", children: /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
239
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Subscriptions" }),
240
+ /* @__PURE__ */ i("label", { className: "cedros-admin__toggle", children: [
241
+ /* @__PURE__ */ a(
242
+ "input",
243
+ {
244
+ type: "checkbox",
245
+ className: "cedros-admin__toggle-input",
246
+ checked: d.enabled,
247
+ onChange: (e) => m((n) => ({ ...n, enabled: e.target.checked }))
248
+ }
249
+ ),
250
+ /* @__PURE__ */ a("span", { className: "cedros-admin__toggle-track", children: /* @__PURE__ */ a("span", { className: "cedros-admin__toggle-thumb" }) }),
251
+ /* @__PURE__ */ a("span", { className: "cedros-admin__toggle-label", children: "Enable Subscriptions" })
252
+ ] })
253
+ ] }) }),
254
+ /* @__PURE__ */ i("div", { className: "cedros-admin__form-row", children: [
255
+ /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
256
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Page Title" }),
257
+ /* @__PURE__ */ a(
258
+ "input",
259
+ {
260
+ type: "text",
261
+ className: "cedros-admin__input",
262
+ value: d.pageTitle || "",
263
+ onChange: (e) => m((n) => ({ ...n, pageTitle: e.target.value })),
264
+ placeholder: "Choose Your Plan"
265
+ }
266
+ )
267
+ ] }),
268
+ /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
269
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Page Subtitle" }),
270
+ /* @__PURE__ */ a(
271
+ "input",
272
+ {
273
+ type: "text",
274
+ className: "cedros-admin__input",
275
+ value: d.pageSubtitle || "",
276
+ onChange: (e) => m((n) => ({ ...n, pageSubtitle: e.target.value })),
277
+ placeholder: "Select the plan that best fits your needs."
278
+ }
279
+ )
280
+ ] })
281
+ ] }),
282
+ /* @__PURE__ */ i("div", { className: "cedros-admin__form-row", children: [
283
+ /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
284
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Annual Savings Badge" }),
285
+ /* @__PURE__ */ a(
286
+ "input",
287
+ {
288
+ type: "text",
289
+ className: "cedros-admin__input",
290
+ value: d.annualSavingsBadge || "",
291
+ onChange: (e) => m((n) => ({ ...n, annualSavingsBadge: e.target.value })),
292
+ placeholder: "2 months free"
293
+ }
294
+ )
295
+ ] }),
296
+ /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
297
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Popular Plan Badge" }),
298
+ /* @__PURE__ */ a(
299
+ "input",
300
+ {
301
+ type: "text",
302
+ className: "cedros-admin__input",
303
+ value: d.popularBadgeText || "",
304
+ onChange: (e) => m((n) => ({ ...n, popularBadgeText: e.target.value })),
305
+ placeholder: "Best Deal"
306
+ }
307
+ )
308
+ ] })
309
+ ] }),
310
+ /* @__PURE__ */ a("div", { className: "cedros-admin__form-row", children: /* @__PURE__ */ i("div", { className: "cedros-admin__field", style: { flex: 1 }, children: [
311
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Footer Notice (optional)" }),
312
+ /* @__PURE__ */ a(
313
+ "input",
314
+ {
315
+ type: "text",
316
+ className: "cedros-admin__input",
317
+ value: d.footerNotice || "",
318
+ onChange: (e) => m((n) => ({ ...n, footerNotice: e.target.value })),
319
+ placeholder: "For information regarding invoices, taxes..."
320
+ }
321
+ )
322
+ ] }) })
323
+ ] }),
324
+ u === "plans" && /* @__PURE__ */ i("div", { children: [
325
+ !B && /* @__PURE__ */ a("div", { style: { padding: "1.5rem", textAlign: "center", opacity: 0.6 }, children: "Subscriptions are disabled. Enable them to configure plans." }),
326
+ r.plans.length === 0 ? /* @__PURE__ */ a("div", { style: { padding: "2rem", textAlign: "center", opacity: 0.6, border: "1px dashed currentColor", borderRadius: 8 }, children: 'No plans configured. Click "Add Plan" to create your first subscription tier.' }) : /* @__PURE__ */ a("div", { style: { display: "flex", flexDirection: "column", gap: "0.75rem" }, children: r.plans.map((e, n) => {
327
+ const s = $ === e.id;
328
+ return /* @__PURE__ */ i(
329
+ "div",
330
+ {
331
+ style: {
332
+ border: "1px solid var(--cedros-admin-border, #e5e5e5)",
333
+ borderRadius: 8,
334
+ overflow: "hidden",
335
+ background: e.isPopular ? "var(--cedros-admin-bg-accent, #f5f5f5)" : void 0
336
+ },
337
+ children: [
338
+ /* @__PURE__ */ i(
339
+ "div",
340
+ {
341
+ style: {
342
+ display: "flex",
343
+ alignItems: "center",
344
+ gap: "1rem",
345
+ padding: "0.75rem 1rem",
346
+ cursor: "pointer"
347
+ },
348
+ onClick: () => P(s ? null : e.id),
349
+ children: [
350
+ /* @__PURE__ */ a("span", { style: { opacity: 0.5 }, children: s ? h.chevronDown : h.chevronRight }),
351
+ /* @__PURE__ */ i("div", { style: { flex: 1 }, children: [
352
+ /* @__PURE__ */ a("span", { style: { fontWeight: 600 }, children: e.title || "Untitled Plan" }),
353
+ e.isPopular && /* @__PURE__ */ a("span", { style: {
354
+ marginLeft: "0.5rem",
355
+ fontSize: 11,
356
+ padding: "2px 6px",
357
+ borderRadius: 4,
358
+ background: "var(--cedros-admin-primary, #171717)",
359
+ color: "#fff"
360
+ }, children: "Popular" }),
361
+ !e.isActive && /* @__PURE__ */ a("span", { style: {
362
+ marginLeft: "0.5rem",
363
+ fontSize: 11,
364
+ padding: "2px 6px",
365
+ borderRadius: 4,
366
+ background: "#9ca3af",
367
+ color: "#fff"
368
+ }, children: "Inactive" })
369
+ ] }),
370
+ /* @__PURE__ */ i("span", { style: { opacity: 0.6, fontSize: 14 }, children: [
371
+ "$",
372
+ e.priceMonthlyUsd,
373
+ "/mo · $",
374
+ e.priceAnnualUsd,
375
+ "/yr"
376
+ ] }),
377
+ /* @__PURE__ */ i("div", { style: { display: "flex", gap: "0.25rem" }, onClick: (t) => t.stopPropagation(), children: [
378
+ /* @__PURE__ */ a(
379
+ "button",
380
+ {
381
+ className: "cedros-admin__button cedros-admin__button--ghost",
382
+ onClick: () => H(e.id, "up"),
383
+ disabled: n === 0,
384
+ title: "Move up",
385
+ style: { padding: "4px 8px" },
386
+ children: h.chevronUp
387
+ }
388
+ ),
389
+ /* @__PURE__ */ a(
390
+ "button",
391
+ {
392
+ className: "cedros-admin__button cedros-admin__button--ghost",
393
+ onClick: () => H(e.id, "down"),
394
+ disabled: n === r.plans.length - 1,
395
+ title: "Move down",
396
+ style: { padding: "4px 8px" },
397
+ children: h.chevronDown
398
+ }
399
+ ),
400
+ /* @__PURE__ */ a(
401
+ "button",
402
+ {
403
+ className: "cedros-admin__button cedros-admin__button--ghost",
404
+ onClick: () => X(e.id),
405
+ title: "Delete plan",
406
+ style: { padding: "4px 8px", color: "#dc2626" },
407
+ children: h.trash
408
+ }
409
+ )
410
+ ] })
411
+ ]
412
+ }
413
+ ),
414
+ s && /* @__PURE__ */ i("div", { style: { padding: "1rem", borderTop: "1px solid var(--cedros-admin-border, #e5e5e5)" }, children: [
415
+ /* @__PURE__ */ i("div", { className: "cedros-admin__form-row", children: [
416
+ /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
417
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Plan Name" }),
418
+ /* @__PURE__ */ a(
419
+ "input",
420
+ {
421
+ type: "text",
422
+ className: "cedros-admin__input",
423
+ value: e.title,
424
+ onChange: (t) => c(e.id, { title: t.target.value }),
425
+ placeholder: "e.g., Starter"
426
+ }
427
+ )
428
+ ] }),
429
+ /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
430
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Button Text" }),
431
+ /* @__PURE__ */ a(
432
+ "input",
433
+ {
434
+ type: "text",
435
+ className: "cedros-admin__input",
436
+ value: e.buttonText || "",
437
+ onChange: (t) => c(e.id, { buttonText: t.target.value }),
438
+ placeholder: "Purchase"
439
+ }
440
+ )
441
+ ] })
442
+ ] }),
443
+ /* @__PURE__ */ a("div", { className: "cedros-admin__form-row", children: /* @__PURE__ */ i("div", { className: "cedros-admin__field", style: { flex: 1 }, children: [
444
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Description" }),
445
+ /* @__PURE__ */ a(
446
+ "input",
447
+ {
448
+ type: "text",
449
+ className: "cedros-admin__input",
450
+ value: e.description,
451
+ onChange: (t) => c(e.id, { description: t.target.value }),
452
+ placeholder: "For entry-level developers managing lightweight workloads"
453
+ }
454
+ )
455
+ ] }) }),
456
+ /* @__PURE__ */ i("div", { className: "cedros-admin__form-row", children: [
457
+ /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
458
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Monthly Price (USD)" }),
459
+ /* @__PURE__ */ a(
460
+ "input",
461
+ {
462
+ type: "number",
463
+ className: "cedros-admin__input",
464
+ value: e.priceMonthlyUsd || "",
465
+ onChange: (t) => c(e.id, { priceMonthlyUsd: parseFloat(t.target.value) || 0 }),
466
+ placeholder: "10",
467
+ min: "0",
468
+ step: "0.01"
469
+ }
470
+ )
471
+ ] }),
472
+ /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
473
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Annual Price (USD)" }),
474
+ /* @__PURE__ */ a(
475
+ "input",
476
+ {
477
+ type: "number",
478
+ className: "cedros-admin__input",
479
+ value: e.priceAnnualUsd || "",
480
+ onChange: (t) => c(e.id, { priceAnnualUsd: parseFloat(t.target.value) || 0 }),
481
+ placeholder: "100",
482
+ min: "0",
483
+ step: "0.01"
484
+ }
485
+ )
486
+ ] })
487
+ ] }),
488
+ /* @__PURE__ */ a("div", { className: "cedros-admin__form-row", children: /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
489
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Feature Highlight" }),
490
+ /* @__PURE__ */ a(
491
+ "input",
492
+ {
493
+ type: "text",
494
+ className: "cedros-admin__input",
495
+ value: e.featureHighlight || "",
496
+ onChange: (t) => c(e.id, { featureHighlight: t.target.value }),
497
+ placeholder: "100 prompts every 5 hours"
498
+ }
499
+ ),
500
+ /* @__PURE__ */ a("div", { style: { marginTop: 4, fontSize: 12, opacity: 0.75 }, children: "Bold text shown above feature list" })
501
+ ] }) }),
502
+ /* @__PURE__ */ i("div", { className: "cedros-admin__form-row", children: [
503
+ /* @__PURE__ */ a("div", { className: "cedros-admin__field", children: /* @__PURE__ */ i("label", { style: { display: "flex", alignItems: "center", gap: "0.5rem", cursor: "pointer" }, children: [
504
+ /* @__PURE__ */ a(
505
+ "input",
506
+ {
507
+ type: "checkbox",
508
+ checked: e.isPopular || !1,
509
+ onChange: (t) => c(e.id, { isPopular: t.target.checked })
510
+ }
511
+ ),
512
+ "Mark as Popular (featured styling)"
513
+ ] }) }),
514
+ /* @__PURE__ */ a("div", { className: "cedros-admin__field", children: /* @__PURE__ */ i("label", { style: { display: "flex", alignItems: "center", gap: "0.5rem", cursor: "pointer" }, children: [
515
+ /* @__PURE__ */ a(
516
+ "input",
517
+ {
518
+ type: "checkbox",
519
+ checked: e.isActive,
520
+ onChange: (t) => c(e.id, { isActive: t.target.checked })
521
+ }
522
+ ),
523
+ "Active (available for purchase)"
524
+ ] }) })
525
+ ] }),
526
+ /* @__PURE__ */ i("div", { className: "cedros-admin__form-row", style: { marginTop: "0.5rem" }, children: [
527
+ /* @__PURE__ */ a("div", { className: "cedros-admin__field", children: /* @__PURE__ */ i("label", { style: { display: "flex", alignItems: "center", gap: "0.5rem", cursor: "pointer" }, children: [
528
+ /* @__PURE__ */ a(
529
+ "input",
530
+ {
531
+ type: "checkbox",
532
+ checked: e.inventoryQuantity != null,
533
+ onChange: (t) => c(e.id, { inventoryQuantity: t.target.checked ? 100 : null })
534
+ }
535
+ ),
536
+ "Limit quantity available"
537
+ ] }) }),
538
+ e.inventoryQuantity != null && /* @__PURE__ */ i("div", { className: "cedros-admin__field", children: [
539
+ /* @__PURE__ */ a("label", { className: "cedros-admin__field-label", children: "Total Available" }),
540
+ /* @__PURE__ */ a(
541
+ "input",
542
+ {
543
+ type: "number",
544
+ className: "cedros-admin__input",
545
+ value: e.inventoryQuantity ?? "",
546
+ onChange: (t) => c(e.id, { inventoryQuantity: parseInt(t.target.value) || 0 }),
547
+ min: "0",
548
+ style: { width: 100 }
549
+ }
550
+ ),
551
+ e.inventorySold != null && e.inventorySold > 0 && /* @__PURE__ */ i("div", { style: { marginTop: 4, fontSize: 12, opacity: 0.75 }, children: [
552
+ e.inventorySold,
553
+ " sold · ",
554
+ Math.max(0, e.inventoryQuantity - e.inventorySold),
555
+ " remaining"
556
+ ] })
557
+ ] })
558
+ ] }),
559
+ /* @__PURE__ */ i("div", { style: { marginTop: "1rem" }, children: [
560
+ /* @__PURE__ */ i("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: "0.5rem" }, children: [
561
+ /* @__PURE__ */ i("label", { className: "cedros-admin__field-label", style: { margin: 0 }, children: [
562
+ "Feature List (",
563
+ e.features.length,
564
+ ")"
565
+ ] }),
566
+ /* @__PURE__ */ a(
567
+ "button",
568
+ {
569
+ className: "cedros-admin__button cedros-admin__button--ghost",
570
+ onClick: () => Y(e.id),
571
+ style: { fontSize: 12, padding: "4px 8px" },
572
+ children: "+ Add Feature"
573
+ }
574
+ )
575
+ ] }),
576
+ e.features.length === 0 ? /* @__PURE__ */ a("div", { style: { padding: "1rem", textAlign: "center", opacity: 0.5, fontSize: 13, border: "1px dashed currentColor", borderRadius: 6 }, children: 'No features. Click "Add Feature" to add bullet points.' }) : /* @__PURE__ */ a("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: e.features.map((t, o) => /* @__PURE__ */ i("div", { style: { display: "flex", gap: "0.5rem", alignItems: "center" }, children: [
577
+ /* @__PURE__ */ i("span", { style: { opacity: 0.4, fontSize: 12 }, children: [
578
+ o + 1,
579
+ "."
580
+ ] }),
581
+ /* @__PURE__ */ a(
582
+ "input",
583
+ {
584
+ type: "text",
585
+ className: "cedros-admin__input",
586
+ value: t,
587
+ onChange: (p) => q(e.id, o, p.target.value),
588
+ placeholder: "e.g., Powered by MiniMax M2.1",
589
+ style: { flex: 1 }
590
+ }
591
+ ),
592
+ /* @__PURE__ */ a(
593
+ "button",
594
+ {
595
+ className: "cedros-admin__button cedros-admin__button--ghost",
596
+ onClick: () => G(e.id, o),
597
+ style: { padding: "4px 8px", color: "#dc2626" },
598
+ title: "Remove feature",
599
+ children: h.trash
600
+ }
601
+ )
602
+ ] }, o)) })
603
+ ] })
604
+ ] })
605
+ ]
606
+ },
607
+ e.id
608
+ );
609
+ }) })
610
+ ] })
611
+ ] })
612
+ ] });
613
+ }
614
+ export {
615
+ le as SubscriptionsSection
616
+ };
@@ -0,0 +1 @@
1
+ "use strict";const t=require("react/jsx-runtime");function n({checked:o,onChange:i,disabled:r=!1}){return t.jsx("button",{type:"button",role:"switch","aria-checked":o,disabled:r,onClick:()=>i(!o),style:{position:"relative",width:44,height:24,borderRadius:12,border:"none",backgroundColor:o?"var(--cedros-admin-primary, #171717)":"var(--cedros-admin-border, #d4d4d4)",cursor:r?"not-allowed":"pointer",transition:"background-color 0.2s",flexShrink:0,opacity:r?.5:1},children:t.jsx("span",{style:{position:"absolute",top:2,left:o?22:2,width:20,height:20,borderRadius:"50%",backgroundColor:"white",boxShadow:"0 1px 3px rgba(0,0,0,0.2)",transition:"left 0.2s"}})})}exports.Toggle=n;
@@ -0,0 +1,48 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ function a({
3
+ checked: o,
4
+ onChange: i,
5
+ disabled: r = !1
6
+ }) {
7
+ return /* @__PURE__ */ t(
8
+ "button",
9
+ {
10
+ type: "button",
11
+ role: "switch",
12
+ "aria-checked": o,
13
+ disabled: r,
14
+ onClick: () => i(!o),
15
+ style: {
16
+ position: "relative",
17
+ width: 44,
18
+ height: 24,
19
+ borderRadius: 12,
20
+ border: "none",
21
+ backgroundColor: o ? "var(--cedros-admin-primary, #171717)" : "var(--cedros-admin-border, #d4d4d4)",
22
+ cursor: r ? "not-allowed" : "pointer",
23
+ transition: "background-color 0.2s",
24
+ flexShrink: 0,
25
+ opacity: r ? 0.5 : 1
26
+ },
27
+ children: /* @__PURE__ */ t(
28
+ "span",
29
+ {
30
+ style: {
31
+ position: "absolute",
32
+ top: 2,
33
+ left: o ? 22 : 2,
34
+ width: 20,
35
+ height: 20,
36
+ borderRadius: "50%",
37
+ backgroundColor: "white",
38
+ boxShadow: "0 1px 3px rgba(0,0,0,0.2)",
39
+ transition: "left 0.2s"
40
+ }
41
+ }
42
+ )
43
+ }
44
+ );
45
+ }
46
+ export {
47
+ a as T
48
+ };