@burdenoff/microfe-billing 2026.530.2 → 2026.530.4

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 (40) hide show
  1. package/dist/billing/BillingAdminRoutes.js +110 -71
  2. package/dist/billing/BillingAdminRoutes.js.map +1 -1
  3. package/dist/billing/BillingRoot.js +81 -73
  4. package/dist/billing/BillingRoot.js.map +1 -1
  5. package/dist/billing/BillingUserRoutes.js +103 -90
  6. package/dist/billing/BillingUserRoutes.js.map +1 -1
  7. package/dist/billing/modules/billing/index.js +2 -1
  8. package/dist/billing/modules/billing/pages/InvoicesListPage.js +135 -126
  9. package/dist/billing/modules/billing/pages/InvoicesListPage.js.map +1 -1
  10. package/dist/billing/modules/billing/pages/UserRefundsPage.js +417 -0
  11. package/dist/billing/modules/billing/pages/UserRefundsPage.js.map +1 -0
  12. package/dist/billing/modules/billing/pages/index.js +1 -0
  13. package/dist/billing/modules/checkout/hooks/useCheckout.js +163 -161
  14. package/dist/billing/modules/checkout/hooks/useCheckout.js.map +1 -1
  15. package/dist/billing/modules/coupons/pages/CreateCouponPage.js +344 -167
  16. package/dist/billing/modules/coupons/pages/CreateCouponPage.js.map +1 -1
  17. package/dist/billing/modules/plans/constants/featuredQuotas.js +37 -0
  18. package/dist/billing/modules/plans/constants/featuredQuotas.js.map +1 -0
  19. package/dist/billing/modules/plans/index.js +2 -1
  20. package/dist/billing/modules/plans/pages/PlanAssignFreePage.js +205 -0
  21. package/dist/billing/modules/plans/pages/PlanAssignFreePage.js.map +1 -0
  22. package/dist/billing/modules/plans/pages/PlanCreatePage.js +51 -33
  23. package/dist/billing/modules/plans/pages/PlanCreatePage.js.map +1 -1
  24. package/dist/billing/modules/plans/pages/PlanEditPage.js +78 -60
  25. package/dist/billing/modules/plans/pages/PlanEditPage.js.map +1 -1
  26. package/dist/billing/modules/plans/pages/PlansBrowsePage.js +246 -126
  27. package/dist/billing/modules/plans/pages/PlansBrowsePage.js.map +1 -1
  28. package/dist/billing/modules/plans/pages/index.js +1 -0
  29. package/dist/billing/modules/promotions/index.js +4 -0
  30. package/dist/billing/modules/promotions/pages/CreatePromotionPage.js +289 -0
  31. package/dist/billing/modules/promotions/pages/CreatePromotionPage.js.map +1 -0
  32. package/dist/billing/modules/promotions/pages/PromotionsListPage.js +168 -0
  33. package/dist/billing/modules/promotions/pages/PromotionsListPage.js.map +1 -0
  34. package/dist/billing/modules/promotions/pages/index.js +2 -0
  35. package/dist/billing/shared/types/graphql.js.map +1 -1
  36. package/dist/generated/global-operations.js +422 -290
  37. package/dist/generated/global-operations.js.map +1 -1
  38. package/dist/generated/global-types.js +3 -1
  39. package/dist/generated/global-types.js.map +1 -1
  40. package/package.json +1 -1
@@ -8,20 +8,20 @@ import { FeatureGate as s } from "@burdenoff/fe-libs/shared/feature-flags";
8
8
  import { Navigate as c, Route as l, Routes as u, useNavigate as d } from "react-router-dom";
9
9
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
10
  //#region src/billing/BillingAdminRoutes.tsx
11
- var m = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlansListPage }))), h = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanDetailPage }))), g = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanEditPage }))), _ = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanCreatePage }))), v = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonsListPage }))), y = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonDetailPage }))), b = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonEditPage }))), x = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonCreatePage }))), S = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplatesListPage }))), C = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateDetailPage }))), w = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateCreatePage }))), T = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateEditPage }))), E = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponsListPage }))), D = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CreateCouponPage }))), O = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.EditCouponPage }))), k = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponDetailPage }))), A = a(() => import("./modules/discounts/index.js").then((e) => ({ default: e.DiscountsListPage }))), j = a(() => import("./modules/billing/index.js").then((e) => ({ default: e.RefundsPage }))), M = a(() => import("./modules/credits/index.js").then((e) => ({ default: e.AdminCreditsPage }))), N = a(() => import("./modules/analytics/index.js").then((e) => ({ default: e.AnalyticsPage }))), P = a(() => import("./modules/earnings/index.js").then((e) => ({ default: e.PayoutAdminPage })));
12
- function F() {
11
+ var m = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlansListPage }))), h = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanDetailPage }))), g = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanEditPage }))), _ = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanCreatePage }))), v = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanAssignFreePage }))), y = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonsListPage }))), b = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonDetailPage }))), x = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonEditPage }))), S = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonCreatePage }))), C = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplatesListPage }))), w = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateDetailPage }))), T = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateCreatePage }))), E = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateEditPage }))), D = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponsListPage }))), O = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CreateCouponPage }))), k = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.EditCouponPage }))), A = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponDetailPage }))), j = a(() => import("./modules/promotions/index.js").then((e) => ({ default: e.PromotionsListPage }))), M = a(() => import("./modules/promotions/index.js").then((e) => ({ default: e.CreatePromotionPage }))), N = a(() => import("./modules/discounts/index.js").then((e) => ({ default: e.DiscountsListPage }))), P = a(() => import("./modules/billing/index.js").then((e) => ({ default: e.RefundsPage }))), F = a(() => import("./modules/credits/index.js").then((e) => ({ default: e.AdminCreditsPage }))), I = a(() => import("./modules/analytics/index.js").then((e) => ({ default: e.AnalyticsPage }))), L = a(() => import("./modules/earnings/index.js").then((e) => ({ default: e.PayoutAdminPage })));
12
+ function R() {
13
13
  let { basePath: t } = e(), n = d(), r = t && t !== "/" ? t.replace(/\/$/, "") : "";
14
14
  return o(() => {
15
15
  n(`${r}/plans`, { replace: !0 });
16
16
  }, [r, n]), null;
17
17
  }
18
- function I() {
18
+ function z() {
19
19
  return /* @__PURE__ */ f("div", {
20
20
  className: "flex min-h-[400px] items-center justify-center",
21
21
  children: /* @__PURE__ */ f("div", { className: "size-8 animate-spin rounded-full border-4 border-primary border-t-transparent" })
22
22
  });
23
23
  }
24
- function L({ title: e, featureFlag: t }) {
24
+ function B({ title: e, featureFlag: t }) {
25
25
  return /* @__PURE__ */ f("div", {
26
26
  className: "flex min-h-[400px] items-center justify-center p-6",
27
27
  children: /* @__PURE__ */ p("div", {
@@ -44,7 +44,7 @@ function L({ title: e, featureFlag: t }) {
44
44
  })
45
45
  });
46
46
  }
47
- function R({ title: e, featureFlag: i, permission: a, eventName: c, children: l }) {
47
+ function V({ title: e, featureFlag: i, permission: a, eventName: c, children: l }) {
48
48
  let u = r(), { emit: d } = n(), p = !!u[a];
49
49
  return o(() => {
50
50
  p && d(c, { source: "BillingAdminRoutes" });
@@ -52,20 +52,20 @@ function R({ title: e, featureFlag: i, permission: a, eventName: c, children: l
52
52
  d,
53
53
  c,
54
54
  p
55
- ]), u.isLoading ? /* @__PURE__ */ f(I, {}) : /* @__PURE__ */ f(s, {
55
+ ]), u.isLoading ? /* @__PURE__ */ f(z, {}) : /* @__PURE__ */ f(s, {
56
56
  flag: i,
57
57
  defaultValue: !0,
58
- fallback: /* @__PURE__ */ f(L, {
58
+ fallback: /* @__PURE__ */ f(B, {
59
59
  title: e,
60
60
  featureFlag: i
61
61
  }),
62
62
  children: p ? l : /* @__PURE__ */ f(t, { message: `You don't have permission to access ${e}.` })
63
63
  });
64
64
  }
65
- function z(e) {
66
- return /* @__PURE__ */ f(R, { ...e });
65
+ function H(e) {
66
+ return /* @__PURE__ */ f(V, { ...e });
67
67
  }
68
- function B() {
68
+ function U() {
69
69
  return /* @__PURE__ */ p(u, { children: [
70
70
  /* @__PURE__ */ f(l, {
71
71
  index: !0,
@@ -76,284 +76,323 @@ function B() {
76
76
  }),
77
77
  /* @__PURE__ */ f(l, {
78
78
  path: "plans",
79
- element: z({
79
+ element: H({
80
80
  title: "Plans",
81
81
  featureFlag: "billing.plans",
82
82
  permission: "canViewPlans",
83
83
  eventName: "billing.plan.viewed",
84
84
  children: /* @__PURE__ */ f(i, {
85
- fallback: /* @__PURE__ */ f(I, {}),
85
+ fallback: /* @__PURE__ */ f(z, {}),
86
86
  children: /* @__PURE__ */ f(m, {})
87
87
  })
88
88
  })
89
89
  }),
90
90
  /* @__PURE__ */ f(l, {
91
91
  path: "plans/new",
92
- element: z({
92
+ element: H({
93
93
  title: "Create plan",
94
94
  featureFlag: "billing.plans.manage",
95
95
  permission: "canManagePlans",
96
96
  eventName: "billing.plan.viewed",
97
97
  children: /* @__PURE__ */ f(i, {
98
- fallback: /* @__PURE__ */ f(I, {}),
98
+ fallback: /* @__PURE__ */ f(z, {}),
99
99
  children: /* @__PURE__ */ f(_, {})
100
100
  })
101
101
  })
102
102
  }),
103
+ /* @__PURE__ */ f(l, {
104
+ path: "plans/assign-free",
105
+ element: H({
106
+ title: "Assign plan for free",
107
+ featureFlag: "billing.plans.manage",
108
+ permission: "canManagePlans",
109
+ eventName: "billing.plan.viewed",
110
+ children: /* @__PURE__ */ f(i, {
111
+ fallback: /* @__PURE__ */ f(z, {}),
112
+ children: /* @__PURE__ */ f(v, {})
113
+ })
114
+ })
115
+ }),
103
116
  /* @__PURE__ */ f(l, {
104
117
  path: "plans/:planId",
105
- element: z({
118
+ element: H({
106
119
  title: "Plan details",
107
120
  featureFlag: "billing.plans",
108
121
  permission: "canViewPlans",
109
122
  eventName: "billing.plan.viewed",
110
123
  children: /* @__PURE__ */ f(i, {
111
- fallback: /* @__PURE__ */ f(I, {}),
124
+ fallback: /* @__PURE__ */ f(z, {}),
112
125
  children: /* @__PURE__ */ f(h, {})
113
126
  })
114
127
  })
115
128
  }),
116
129
  /* @__PURE__ */ f(l, {
117
130
  path: "plans/:planId/edit",
118
- element: z({
131
+ element: H({
119
132
  title: "Edit plan",
120
133
  featureFlag: "billing.plans.manage",
121
134
  permission: "canManagePlans",
122
135
  eventName: "billing.plan.viewed",
123
136
  children: /* @__PURE__ */ f(i, {
124
- fallback: /* @__PURE__ */ f(I, {}),
137
+ fallback: /* @__PURE__ */ f(z, {}),
125
138
  children: /* @__PURE__ */ f(g, {})
126
139
  })
127
140
  })
128
141
  }),
129
142
  /* @__PURE__ */ f(l, {
130
143
  path: "addons",
131
- element: z({
144
+ element: H({
132
145
  title: "Addons",
133
146
  featureFlag: "billing.addons",
134
147
  permission: "canViewAddons",
135
148
  eventName: "billing.addon.viewed",
136
149
  children: /* @__PURE__ */ f(i, {
137
- fallback: /* @__PURE__ */ f(I, {}),
138
- children: /* @__PURE__ */ f(v, {})
150
+ fallback: /* @__PURE__ */ f(z, {}),
151
+ children: /* @__PURE__ */ f(y, {})
139
152
  })
140
153
  })
141
154
  }),
142
155
  /* @__PURE__ */ f(l, {
143
156
  path: "addons/new",
144
- element: z({
157
+ element: H({
145
158
  title: "Create addon",
146
159
  featureFlag: "billing.addons.manage",
147
160
  permission: "canManageAddons",
148
161
  eventName: "billing.addon.viewed",
149
162
  children: /* @__PURE__ */ f(i, {
150
- fallback: /* @__PURE__ */ f(I, {}),
151
- children: /* @__PURE__ */ f(x, {})
163
+ fallback: /* @__PURE__ */ f(z, {}),
164
+ children: /* @__PURE__ */ f(S, {})
152
165
  })
153
166
  })
154
167
  }),
155
168
  /* @__PURE__ */ f(l, {
156
169
  path: "addons/:addonId",
157
- element: z({
170
+ element: H({
158
171
  title: "Addon details",
159
172
  featureFlag: "billing.addons",
160
173
  permission: "canViewAddons",
161
174
  eventName: "billing.addon.viewed",
162
175
  children: /* @__PURE__ */ f(i, {
163
- fallback: /* @__PURE__ */ f(I, {}),
164
- children: /* @__PURE__ */ f(y, {})
176
+ fallback: /* @__PURE__ */ f(z, {}),
177
+ children: /* @__PURE__ */ f(b, {})
165
178
  })
166
179
  })
167
180
  }),
168
181
  /* @__PURE__ */ f(l, {
169
182
  path: "addons/:addonId/edit",
170
- element: z({
183
+ element: H({
171
184
  title: "Edit addon",
172
185
  featureFlag: "billing.addons.manage",
173
186
  permission: "canManageAddons",
174
187
  eventName: "billing.addon.viewed",
175
188
  children: /* @__PURE__ */ f(i, {
176
- fallback: /* @__PURE__ */ f(I, {}),
177
- children: /* @__PURE__ */ f(b, {})
189
+ fallback: /* @__PURE__ */ f(z, {}),
190
+ children: /* @__PURE__ */ f(x, {})
178
191
  })
179
192
  })
180
193
  }),
181
194
  /* @__PURE__ */ f(l, {
182
195
  path: "quotas",
183
- element: z({
196
+ element: H({
184
197
  title: "Quota templates",
185
198
  featureFlag: "billing.quotas",
186
199
  permission: "canViewQuotas",
187
200
  eventName: "billing.quota.viewed",
188
201
  children: /* @__PURE__ */ f(i, {
189
- fallback: /* @__PURE__ */ f(I, {}),
190
- children: /* @__PURE__ */ f(S, {})
202
+ fallback: /* @__PURE__ */ f(z, {}),
203
+ children: /* @__PURE__ */ f(C, {})
191
204
  })
192
205
  })
193
206
  }),
194
207
  /* @__PURE__ */ f(l, {
195
208
  path: "quotas/new",
196
- element: z({
209
+ element: H({
197
210
  title: "Create quota template",
198
211
  featureFlag: "billing.quotas.manage",
199
212
  permission: "canManageQuotas",
200
213
  eventName: "billing.quota.viewed",
201
214
  children: /* @__PURE__ */ f(i, {
202
- fallback: /* @__PURE__ */ f(I, {}),
203
- children: /* @__PURE__ */ f(w, {})
215
+ fallback: /* @__PURE__ */ f(z, {}),
216
+ children: /* @__PURE__ */ f(T, {})
204
217
  })
205
218
  })
206
219
  }),
207
220
  /* @__PURE__ */ f(l, {
208
221
  path: "quotas/:quotaId",
209
- element: z({
222
+ element: H({
210
223
  title: "Quota template details",
211
224
  featureFlag: "billing.quotas",
212
225
  permission: "canViewQuotas",
213
226
  eventName: "billing.quota.viewed",
214
227
  children: /* @__PURE__ */ f(i, {
215
- fallback: /* @__PURE__ */ f(I, {}),
216
- children: /* @__PURE__ */ f(C, {})
228
+ fallback: /* @__PURE__ */ f(z, {}),
229
+ children: /* @__PURE__ */ f(w, {})
217
230
  })
218
231
  })
219
232
  }),
220
233
  /* @__PURE__ */ f(l, {
221
234
  path: "quotas/:quotaId/edit",
222
- element: z({
235
+ element: H({
223
236
  title: "Edit quota template",
224
237
  featureFlag: "billing.quotas.manage",
225
238
  permission: "canManageQuotas",
226
239
  eventName: "billing.quota.viewed",
227
240
  children: /* @__PURE__ */ f(i, {
228
- fallback: /* @__PURE__ */ f(I, {}),
229
- children: /* @__PURE__ */ f(T, {})
241
+ fallback: /* @__PURE__ */ f(z, {}),
242
+ children: /* @__PURE__ */ f(E, {})
230
243
  })
231
244
  })
232
245
  }),
233
246
  /* @__PURE__ */ f(l, {
234
247
  path: "coupons",
235
- element: z({
248
+ element: H({
236
249
  title: "Coupons",
237
250
  featureFlag: "billing.discounts",
238
251
  permission: "canManageDiscounts",
239
252
  eventName: "billing.transaction.viewed",
240
253
  children: /* @__PURE__ */ f(i, {
241
- fallback: /* @__PURE__ */ f(I, {}),
242
- children: /* @__PURE__ */ f(E, {})
254
+ fallback: /* @__PURE__ */ f(z, {}),
255
+ children: /* @__PURE__ */ f(D, {})
243
256
  })
244
257
  })
245
258
  }),
246
259
  /* @__PURE__ */ f(l, {
247
260
  path: "coupons/create",
248
- element: z({
261
+ element: H({
249
262
  title: "Create coupon",
250
263
  featureFlag: "billing.discounts",
251
264
  permission: "canManageDiscounts",
252
265
  eventName: "billing.transaction.viewed",
253
266
  children: /* @__PURE__ */ f(i, {
254
- fallback: /* @__PURE__ */ f(I, {}),
255
- children: /* @__PURE__ */ f(D, {})
267
+ fallback: /* @__PURE__ */ f(z, {}),
268
+ children: /* @__PURE__ */ f(O, {})
256
269
  })
257
270
  })
258
271
  }),
259
272
  /* @__PURE__ */ f(l, {
260
273
  path: "coupons/:id",
261
- element: z({
274
+ element: H({
262
275
  title: "Coupon details",
263
276
  featureFlag: "billing.discounts",
264
277
  permission: "canManageDiscounts",
265
278
  eventName: "billing.transaction.viewed",
266
279
  children: /* @__PURE__ */ f(i, {
267
- fallback: /* @__PURE__ */ f(I, {}),
268
- children: /* @__PURE__ */ f(k, {})
280
+ fallback: /* @__PURE__ */ f(z, {}),
281
+ children: /* @__PURE__ */ f(A, {})
269
282
  })
270
283
  })
271
284
  }),
272
285
  /* @__PURE__ */ f(l, {
273
286
  path: "coupons/:id/edit",
274
- element: z({
287
+ element: H({
275
288
  title: "Edit coupon",
276
289
  featureFlag: "billing.discounts",
277
290
  permission: "canManageDiscounts",
278
291
  eventName: "billing.transaction.viewed",
279
292
  children: /* @__PURE__ */ f(i, {
280
- fallback: /* @__PURE__ */ f(I, {}),
281
- children: /* @__PURE__ */ f(O, {})
293
+ fallback: /* @__PURE__ */ f(z, {}),
294
+ children: /* @__PURE__ */ f(k, {})
295
+ })
296
+ })
297
+ }),
298
+ /* @__PURE__ */ f(l, {
299
+ path: "promotions",
300
+ element: H({
301
+ title: "Promotions",
302
+ featureFlag: "billing.plans.manage",
303
+ permission: "canManagePlans",
304
+ eventName: "billing.plan.viewed",
305
+ children: /* @__PURE__ */ f(i, {
306
+ fallback: /* @__PURE__ */ f(z, {}),
307
+ children: /* @__PURE__ */ f(j, {})
308
+ })
309
+ })
310
+ }),
311
+ /* @__PURE__ */ f(l, {
312
+ path: "promotions/create",
313
+ element: H({
314
+ title: "Create Promotion",
315
+ featureFlag: "billing.plans.manage",
316
+ permission: "canManagePlans",
317
+ eventName: "billing.plan.viewed",
318
+ children: /* @__PURE__ */ f(i, {
319
+ fallback: /* @__PURE__ */ f(z, {}),
320
+ children: /* @__PURE__ */ f(M, {})
282
321
  })
283
322
  })
284
323
  }),
285
324
  /* @__PURE__ */ f(l, {
286
325
  path: "discounts",
287
- element: z({
326
+ element: H({
288
327
  title: "Discounts",
289
328
  featureFlag: "billing.discounts",
290
329
  permission: "canManageDiscounts",
291
330
  eventName: "billing.transaction.viewed",
292
331
  children: /* @__PURE__ */ f(i, {
293
- fallback: /* @__PURE__ */ f(I, {}),
294
- children: /* @__PURE__ */ f(A, {})
332
+ fallback: /* @__PURE__ */ f(z, {}),
333
+ children: /* @__PURE__ */ f(N, {})
295
334
  })
296
335
  })
297
336
  }),
298
337
  /* @__PURE__ */ f(l, {
299
338
  path: "credits",
300
- element: z({
339
+ element: H({
301
340
  title: "Credit grants",
302
341
  featureFlag: "billing.credits.grants",
303
342
  permission: "canGrantCredits",
304
343
  eventName: "billing.credit.viewed",
305
344
  children: /* @__PURE__ */ f(i, {
306
- fallback: /* @__PURE__ */ f(I, {}),
307
- children: /* @__PURE__ */ f(M, {})
345
+ fallback: /* @__PURE__ */ f(z, {}),
346
+ children: /* @__PURE__ */ f(F, {})
308
347
  })
309
348
  })
310
349
  }),
311
350
  /* @__PURE__ */ f(l, {
312
351
  path: "refunds",
313
- element: z({
352
+ element: H({
314
353
  title: "Refunds",
315
354
  featureFlag: "billing.refunds",
316
355
  permission: "canProcessRefund",
317
356
  eventName: "billing.transaction.viewed",
318
357
  children: /* @__PURE__ */ f(i, {
319
- fallback: /* @__PURE__ */ f(I, {}),
320
- children: /* @__PURE__ */ f(j, {})
358
+ fallback: /* @__PURE__ */ f(z, {}),
359
+ children: /* @__PURE__ */ f(P, {})
321
360
  })
322
361
  })
323
362
  }),
324
363
  /* @__PURE__ */ f(l, {
325
364
  path: "analytics",
326
- element: z({
365
+ element: H({
327
366
  title: "Billing analytics",
328
367
  featureFlag: "billing.analytics",
329
368
  permission: "canViewAnalytics",
330
369
  eventName: "billing.usage.viewed",
331
370
  children: /* @__PURE__ */ f(i, {
332
- fallback: /* @__PURE__ */ f(I, {}),
333
- children: /* @__PURE__ */ f(N, {})
371
+ fallback: /* @__PURE__ */ f(z, {}),
372
+ children: /* @__PURE__ */ f(I, {})
334
373
  })
335
374
  })
336
375
  }),
337
376
  /* @__PURE__ */ f(l, {
338
377
  path: "payouts",
339
- element: z({
378
+ element: H({
340
379
  title: "Payout administration",
341
380
  featureFlag: "billing.payouts.admin",
342
381
  permission: "isBillingAdmin",
343
382
  eventName: "billing.payout.viewed",
344
383
  children: /* @__PURE__ */ f(i, {
345
- fallback: /* @__PURE__ */ f(I, {}),
346
- children: /* @__PURE__ */ f(P, {})
384
+ fallback: /* @__PURE__ */ f(z, {}),
385
+ children: /* @__PURE__ */ f(L, {})
347
386
  })
348
387
  })
349
388
  }),
350
389
  /* @__PURE__ */ f(l, {
351
390
  path: "*",
352
- element: /* @__PURE__ */ f(F, {})
391
+ element: /* @__PURE__ */ f(R, {})
353
392
  })
354
393
  ] });
355
394
  }
356
395
  //#endregion
357
- export { B as BillingAdminRoutes };
396
+ export { U as BillingAdminRoutes };
358
397
 
359
398
  //# sourceMappingURL=BillingAdminRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BillingAdminRoutes.js","names":[],"sources":["../../src/billing/BillingAdminRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, useEffect, type ReactNode } from 'react';\nimport { Navigate, Route, Routes, useNavigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useBillingEventEmitter, type BillingDomainEvent } from './hooks/useBillingEventEmitter';\nimport { useBillingPermissions } from './hooks/useBillingPermissions';\nimport { useBilling } from './providers/BillingProvider';\nimport { AccessDenied } from './shared/components';\n\n// Lazy loaded pages - Plans (full CRUD)\nconst PlansListPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlansListPage }))\n);\nconst PlanDetailPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanDetailPage }))\n);\nconst PlanEditPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanEditPage }))\n);\nconst PlanCreatePage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanCreatePage }))\n);\n\n// Lazy loaded pages - Addons (full CRUD)\nconst AddonsListPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonsListPage }))\n);\nconst AddonDetailPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonDetailPage }))\n);\nconst AddonEditPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonEditPage }))\n);\nconst AddonCreatePage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonCreatePage }))\n);\n\n// Lazy loaded pages - Quota Templates (full CRUD)\nconst QuotaTemplatesListPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplatesListPage }))\n);\nconst QuotaTemplateDetailPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateDetailPage }))\n);\nconst QuotaTemplateCreatePage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateCreatePage }))\n);\nconst QuotaTemplateEditPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateEditPage }))\n);\n\n// Lazy loaded pages - Coupons\nconst CouponsListPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CouponsListPage }))\n);\nconst CreateCouponPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CreateCouponPage }))\n);\nconst EditCouponPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.EditCouponPage }))\n);\nconst CouponDetailPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CouponDetailPage }))\n);\n\n// Lazy loaded pages - Discounts\nconst DiscountsListPage = lazy(() =>\n import('./modules/discounts').then((m) => ({ default: m.DiscountsListPage }))\n);\n\n// Lazy loaded pages - Refunds\nconst RefundsPage = lazy(() =>\n import('./modules/billing').then((m) => ({ default: m.RefundsPage }))\n);\n\n// Lazy loaded pages - Credits admin\nconst AdminCreditsPage = lazy(() =>\n import('./modules/credits').then((m) => ({ default: m.AdminCreditsPage }))\n);\n\n// Lazy loaded pages - Analytics\nconst AnalyticsPage = lazy(() =>\n import('./modules/analytics').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst PayoutAdminPage = lazy(() =>\n import('./modules/earnings').then((m) => ({ default: m.PayoutAdminPage }))\n);\n\nfunction DefaultRedirect() {\n const { basePath } = useBilling();\n const routerNavigate = useNavigate();\n const base = basePath && basePath !== '/' ? basePath.replace(/\\/$/, '') : '';\n useEffect(() => {\n routerNavigate(`${base}/plans`, { replace: true });\n }, [base, routerNavigate]);\n return null;\n}\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <div className=\"size-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n </div>\n );\n}\n\ntype BillingPermissions = ReturnType<typeof useBillingPermissions>;\ntype BillingPermissionKey = Exclude<\n {\n [K in keyof BillingPermissions]: BillingPermissions[K] extends boolean ? K : never;\n }[keyof BillingPermissions],\n 'isLoading'\n>;\n\ninterface BillingAdminRouteGateProps {\n title: string;\n featureFlag: string;\n permission: BillingPermissionKey;\n eventName: BillingDomainEvent;\n children: ReactNode;\n}\n\nfunction FeatureDisabled({ title, featureFlag }: { title: string; featureFlag: string }) {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-muted-foreground\">\n Ask an administrator to enable the <span className=\"font-mono\">{featureFlag}</span>{' '}\n feature flag for this organization.\n </p>\n </div>\n </div>\n );\n}\n\nfunction BillingAdminRouteGate({\n title,\n featureFlag,\n permission,\n eventName,\n children,\n}: BillingAdminRouteGateProps) {\n const permissions = useBillingPermissions();\n const { emit } = useBillingEventEmitter();\n const hasPermission = Boolean(permissions[permission]);\n\n useEffect(() => {\n if (hasPermission) {\n emit(eventName, { source: 'BillingAdminRoutes' });\n }\n }, [emit, eventName, hasPermission]);\n\n if (permissions.isLoading) {\n return <PageLoader />;\n }\n\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {hasPermission ? (\n children\n ) : (\n <AccessDenied message={`You don't have permission to access ${title}.`} />\n )}\n </FeatureGate>\n );\n}\n\nfunction adminPage(props: BillingAdminRouteGateProps): ReactNode {\n return <BillingAdminRouteGate {...props} />;\n}\n\n/**\n * Admin-only billing routes.\n * Includes plans/addons/quota-templates CRUD, coupons, discounts, refunds, and analytics.\n */\nexport function BillingAdminRoutes() {\n return (\n <Routes>\n <Route index element={<Navigate to=\"plans\" replace />} />\n\n {/* Plans - full CRUD */}\n <Route\n path=\"plans\"\n element={adminPage({\n title: 'Plans',\n featureFlag: 'billing.plans',\n permission: 'canViewPlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlansListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/new\"\n element={adminPage({\n title: 'Create plan',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/:planId\"\n element={adminPage({\n title: 'Plan details',\n featureFlag: 'billing.plans',\n permission: 'canViewPlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/:planId/edit\"\n element={adminPage({\n title: 'Edit plan',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Addons - full CRUD */}\n <Route\n path=\"addons\"\n element={adminPage({\n title: 'Addons',\n featureFlag: 'billing.addons',\n permission: 'canViewAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/new\"\n element={adminPage({\n title: 'Create addon',\n featureFlag: 'billing.addons.manage',\n permission: 'canManageAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/:addonId\"\n element={adminPage({\n title: 'Addon details',\n featureFlag: 'billing.addons',\n permission: 'canViewAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/:addonId/edit\"\n element={adminPage({\n title: 'Edit addon',\n featureFlag: 'billing.addons.manage',\n permission: 'canManageAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Quota Templates - full CRUD */}\n <Route\n path=\"quotas\"\n element={adminPage({\n title: 'Quota templates',\n featureFlag: 'billing.quotas',\n permission: 'canViewQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplatesListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/new\"\n element={adminPage({\n title: 'Create quota template',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/:quotaId\"\n element={adminPage({\n title: 'Quota template details',\n featureFlag: 'billing.quotas',\n permission: 'canViewQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/:quotaId/edit\"\n element={adminPage({\n title: 'Edit quota template',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Coupons */}\n <Route\n path=\"coupons\"\n element={adminPage({\n title: 'Coupons',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CouponsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/create\"\n element={adminPage({\n title: 'Create coupon',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CreateCouponPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/:id\"\n element={adminPage({\n title: 'Coupon details',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CouponDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/:id/edit\"\n element={adminPage({\n title: 'Edit coupon',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <EditCouponPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Discounts */}\n <Route\n path=\"discounts\"\n element={adminPage({\n title: 'Discounts',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <DiscountsListPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Credit grants */}\n <Route\n path=\"credits\"\n element={adminPage({\n title: 'Credit grants',\n featureFlag: 'billing.credits.grants',\n permission: 'canGrantCredits',\n eventName: 'billing.credit.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AdminCreditsPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Refunds */}\n <Route\n path=\"refunds\"\n element={adminPage({\n title: 'Refunds',\n featureFlag: 'billing.refunds',\n permission: 'canProcessRefund',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <RefundsPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Analytics */}\n <Route\n path=\"analytics\"\n element={adminPage({\n title: 'Billing analytics',\n featureFlag: 'billing.analytics',\n permission: 'canViewAnalytics',\n eventName: 'billing.usage.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AnalyticsPage />\n </Suspense>\n ),\n })}\n />\n\n <Route\n path=\"payouts\"\n element={adminPage({\n title: 'Payout administration',\n featureFlag: 'billing.payouts.admin',\n permission: 'isBillingAdmin',\n eventName: 'billing.payout.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PayoutAdminPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Catch-all — uses absolute path to avoid relative-navigation loop */}\n <Route path=\"*\" element={<DefaultRedirect />} />\n </Routes>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BillingAdminRoutes.js","names":[],"sources":["../../src/billing/BillingAdminRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, useEffect, type ReactNode } from 'react';\nimport { Navigate, Route, Routes, useNavigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useBillingEventEmitter, type BillingDomainEvent } from './hooks/useBillingEventEmitter';\nimport { useBillingPermissions } from './hooks/useBillingPermissions';\nimport { useBilling } from './providers/BillingProvider';\nimport { AccessDenied } from './shared/components';\n\n// Lazy loaded pages - Plans (full CRUD)\nconst PlansListPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlansListPage }))\n);\nconst PlanDetailPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanDetailPage }))\n);\nconst PlanEditPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanEditPage }))\n);\nconst PlanCreatePage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanCreatePage }))\n);\nconst PlanAssignFreePage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanAssignFreePage }))\n);\n\n// Lazy loaded pages - Addons (full CRUD)\nconst AddonsListPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonsListPage }))\n);\nconst AddonDetailPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonDetailPage }))\n);\nconst AddonEditPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonEditPage }))\n);\nconst AddonCreatePage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonCreatePage }))\n);\n\n// Lazy loaded pages - Quota Templates (full CRUD)\nconst QuotaTemplatesListPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplatesListPage }))\n);\nconst QuotaTemplateDetailPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateDetailPage }))\n);\nconst QuotaTemplateCreatePage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateCreatePage }))\n);\nconst QuotaTemplateEditPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateEditPage }))\n);\n\n// Lazy loaded pages - Coupons\nconst CouponsListPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CouponsListPage }))\n);\nconst CreateCouponPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CreateCouponPage }))\n);\nconst EditCouponPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.EditCouponPage }))\n);\nconst CouponDetailPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CouponDetailPage }))\n);\n\n// Lazy loaded pages - Promotions\nconst PromotionsListPage = lazy(() =>\n import('./modules/promotions').then((m) => ({ default: m.PromotionsListPage }))\n);\nconst CreatePromotionPage = lazy(() =>\n import('./modules/promotions').then((m) => ({ default: m.CreatePromotionPage }))\n);\n\n// Lazy loaded pages - Discounts\nconst DiscountsListPage = lazy(() =>\n import('./modules/discounts').then((m) => ({ default: m.DiscountsListPage }))\n);\n\n// Lazy loaded pages - Refunds\nconst RefundsPage = lazy(() =>\n import('./modules/billing').then((m) => ({ default: m.RefundsPage }))\n);\n\n// Lazy loaded pages - Credits admin\nconst AdminCreditsPage = lazy(() =>\n import('./modules/credits').then((m) => ({ default: m.AdminCreditsPage }))\n);\n\n// Lazy loaded pages - Analytics\nconst AnalyticsPage = lazy(() =>\n import('./modules/analytics').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst PayoutAdminPage = lazy(() =>\n import('./modules/earnings').then((m) => ({ default: m.PayoutAdminPage }))\n);\n\nfunction DefaultRedirect() {\n const { basePath } = useBilling();\n const routerNavigate = useNavigate();\n const base = basePath && basePath !== '/' ? basePath.replace(/\\/$/, '') : '';\n useEffect(() => {\n routerNavigate(`${base}/plans`, { replace: true });\n }, [base, routerNavigate]);\n return null;\n}\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <div className=\"size-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n </div>\n );\n}\n\ntype BillingPermissions = ReturnType<typeof useBillingPermissions>;\ntype BillingPermissionKey = Exclude<\n {\n [K in keyof BillingPermissions]: BillingPermissions[K] extends boolean ? K : never;\n }[keyof BillingPermissions],\n 'isLoading'\n>;\n\ninterface BillingAdminRouteGateProps {\n title: string;\n featureFlag: string;\n permission: BillingPermissionKey;\n eventName: BillingDomainEvent;\n children: ReactNode;\n}\n\nfunction FeatureDisabled({ title, featureFlag }: { title: string; featureFlag: string }) {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-muted-foreground\">\n Ask an administrator to enable the <span className=\"font-mono\">{featureFlag}</span>{' '}\n feature flag for this organization.\n </p>\n </div>\n </div>\n );\n}\n\nfunction BillingAdminRouteGate({\n title,\n featureFlag,\n permission,\n eventName,\n children,\n}: BillingAdminRouteGateProps) {\n const permissions = useBillingPermissions();\n const { emit } = useBillingEventEmitter();\n const hasPermission = Boolean(permissions[permission]);\n\n useEffect(() => {\n if (hasPermission) {\n emit(eventName, { source: 'BillingAdminRoutes' });\n }\n }, [emit, eventName, hasPermission]);\n\n if (permissions.isLoading) {\n return <PageLoader />;\n }\n\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {hasPermission ? (\n children\n ) : (\n <AccessDenied message={`You don't have permission to access ${title}.`} />\n )}\n </FeatureGate>\n );\n}\n\nfunction adminPage(props: BillingAdminRouteGateProps): ReactNode {\n return <BillingAdminRouteGate {...props} />;\n}\n\n/**\n * Admin-only billing routes.\n * Includes plans/addons/quota-templates CRUD, coupons, discounts, refunds, and analytics.\n */\nexport function BillingAdminRoutes() {\n return (\n <Routes>\n <Route index element={<Navigate to=\"plans\" replace />} />\n\n {/* Plans - full CRUD */}\n <Route\n path=\"plans\"\n element={adminPage({\n title: 'Plans',\n featureFlag: 'billing.plans',\n permission: 'canViewPlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlansListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/new\"\n element={adminPage({\n title: 'Create plan',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/assign-free\"\n element={adminPage({\n title: 'Assign plan for free',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanAssignFreePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/:planId\"\n element={adminPage({\n title: 'Plan details',\n featureFlag: 'billing.plans',\n permission: 'canViewPlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/:planId/edit\"\n element={adminPage({\n title: 'Edit plan',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Addons - full CRUD */}\n <Route\n path=\"addons\"\n element={adminPage({\n title: 'Addons',\n featureFlag: 'billing.addons',\n permission: 'canViewAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/new\"\n element={adminPage({\n title: 'Create addon',\n featureFlag: 'billing.addons.manage',\n permission: 'canManageAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/:addonId\"\n element={adminPage({\n title: 'Addon details',\n featureFlag: 'billing.addons',\n permission: 'canViewAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/:addonId/edit\"\n element={adminPage({\n title: 'Edit addon',\n featureFlag: 'billing.addons.manage',\n permission: 'canManageAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Quota Templates - full CRUD */}\n <Route\n path=\"quotas\"\n element={adminPage({\n title: 'Quota templates',\n featureFlag: 'billing.quotas',\n permission: 'canViewQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplatesListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/new\"\n element={adminPage({\n title: 'Create quota template',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/:quotaId\"\n element={adminPage({\n title: 'Quota template details',\n featureFlag: 'billing.quotas',\n permission: 'canViewQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/:quotaId/edit\"\n element={adminPage({\n title: 'Edit quota template',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Coupons */}\n <Route\n path=\"coupons\"\n element={adminPage({\n title: 'Coupons',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CouponsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/create\"\n element={adminPage({\n title: 'Create coupon',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CreateCouponPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/:id\"\n element={adminPage({\n title: 'Coupon details',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CouponDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/:id/edit\"\n element={adminPage({\n title: 'Edit coupon',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <EditCouponPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Promotions */}\n <Route\n path=\"promotions\"\n element={adminPage({\n title: 'Promotions',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PromotionsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"promotions/create\"\n element={adminPage({\n title: 'Create Promotion',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CreatePromotionPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Discounts */}\n <Route\n path=\"discounts\"\n element={adminPage({\n title: 'Discounts',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <DiscountsListPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Credit grants */}\n <Route\n path=\"credits\"\n element={adminPage({\n title: 'Credit grants',\n featureFlag: 'billing.credits.grants',\n permission: 'canGrantCredits',\n eventName: 'billing.credit.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AdminCreditsPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Refunds */}\n <Route\n path=\"refunds\"\n element={adminPage({\n title: 'Refunds',\n featureFlag: 'billing.refunds',\n permission: 'canProcessRefund',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <RefundsPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Analytics */}\n <Route\n path=\"analytics\"\n element={adminPage({\n title: 'Billing analytics',\n featureFlag: 'billing.analytics',\n permission: 'canViewAnalytics',\n eventName: 'billing.usage.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AnalyticsPage />\n </Suspense>\n ),\n })}\n />\n\n <Route\n path=\"payouts\"\n element={adminPage({\n title: 'Payout administration',\n featureFlag: 'billing.payouts.admin',\n permission: 'isBillingAdmin',\n eventName: 'billing.payout.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PayoutAdminPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Catch-all — uses absolute path to avoid relative-navigation loop */}\n <Route path=\"*\" element={<DefaultRedirect />} />\n </Routes>\n );\n}\n"],"mappings":"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"}