@burdenoff/microfe-store 2026.805.1 → 2026.819.2

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 (67) hide show
  1. package/dist/StoreAdminRoutes.js +27 -27
  2. package/dist/StoreRoot.js +78 -45
  3. package/dist/StoreRoot.js.map +1 -1
  4. package/dist/StoreRoutes.js +163 -85
  5. package/dist/StoreRoutes.js.map +1 -1
  6. package/dist/components/sourcing/SourcingConfirmationDialog.d.ts +15 -0
  7. package/dist/components/sourcing/SourcingConfirmationDialog.js +61 -0
  8. package/dist/components/sourcing/SourcingConfirmationDialog.js.map +1 -0
  9. package/dist/components/sourcing/SourcingUi.d.ts +51 -0
  10. package/dist/components/sourcing/SourcingUi.js +176 -0
  11. package/dist/components/sourcing/SourcingUi.js.map +1 -0
  12. package/dist/generated/global-operations.d.ts +713 -0
  13. package/dist/generated/global-operations.js +557 -175
  14. package/dist/generated/global-operations.js.map +1 -1
  15. package/dist/generated/global-types.d.ts +2152 -2159
  16. package/dist/generated/global-types.js +8 -2
  17. package/dist/generated/global-types.js.map +1 -1
  18. package/dist/hooks/useBackendCart.js +17 -17
  19. package/dist/hooks/useInstallations.js +32 -32
  20. package/dist/hooks/useOrders.js +7 -7
  21. package/dist/hooks/useSourcing.d.ts +319 -0
  22. package/dist/hooks/useSourcing.js +87 -0
  23. package/dist/hooks/useSourcing.js.map +1 -0
  24. package/dist/hooks/useStoreGraphQL.js +163 -163
  25. package/dist/index.js +12 -12
  26. package/dist/pages/AdminDashboardPage.js +132 -132
  27. package/dist/pages/AdminReviewModerationPage.js +55 -55
  28. package/dist/pages/AdminStoresPage.js +95 -95
  29. package/dist/pages/AdminSubmissionsQueuePage.js +297 -297
  30. package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
  31. package/dist/pages/AppDetailPage.js +65 -65
  32. package/dist/pages/AppSettingsPage.js +32 -32
  33. package/dist/pages/CartPage.js +66 -66
  34. package/dist/pages/CreateSourcingRequestPage.d.ts +3 -0
  35. package/dist/pages/CreateSourcingRequestPage.js +439 -0
  36. package/dist/pages/CreateSourcingRequestPage.js.map +1 -0
  37. package/dist/pages/InstalledAppsPage.js +15 -15
  38. package/dist/pages/InstalledAppsPage.js.map +1 -1
  39. package/dist/pages/MarketplaceHomePage.js +384 -384
  40. package/dist/pages/MarketplaceHomePage.js.map +1 -1
  41. package/dist/pages/MyLicensesPage.js +39 -39
  42. package/dist/pages/OrderConfirmationPage.js +57 -57
  43. package/dist/pages/OrdersPage.js +3 -3
  44. package/dist/pages/OrdersPage.js.map +1 -1
  45. package/dist/pages/ProductDetailPage.js +6 -6
  46. package/dist/pages/SellerSourcingOffersPage.d.ts +3 -0
  47. package/dist/pages/SellerSourcingOffersPage.js +284 -0
  48. package/dist/pages/SellerSourcingOffersPage.js.map +1 -0
  49. package/dist/pages/SellerSourcingOpportunitiesPage.d.ts +3 -0
  50. package/dist/pages/SellerSourcingOpportunitiesPage.js +272 -0
  51. package/dist/pages/SellerSourcingOpportunitiesPage.js.map +1 -0
  52. package/dist/pages/SellerSourcingOpportunityDetailPage.d.ts +3 -0
  53. package/dist/pages/SellerSourcingOpportunityDetailPage.js +465 -0
  54. package/dist/pages/SellerSourcingOpportunityDetailPage.js.map +1 -0
  55. package/dist/pages/SourcingRequestDetailPage.d.ts +3 -0
  56. package/dist/pages/SourcingRequestDetailPage.js +447 -0
  57. package/dist/pages/SourcingRequestDetailPage.js.map +1 -0
  58. package/dist/pages/SourcingRequestsPage.d.ts +3 -0
  59. package/dist/pages/SourcingRequestsPage.js +272 -0
  60. package/dist/pages/SourcingRequestsPage.js.map +1 -0
  61. package/dist/providers/SourcingAccessProvider.d.ts +21 -0
  62. package/dist/providers/SourcingAccessProvider.js +95 -0
  63. package/dist/providers/SourcingAccessProvider.js.map +1 -0
  64. package/dist/translations/en.d.ts +3 -0
  65. package/dist/translations/en.js +3 -0
  66. package/dist/translations/en.js.map +1 -1
  67. package/package.json +1 -1
@@ -2,17 +2,17 @@ import { useStore as e } from "../providers/StoreProvider.js";
2
2
  import { useCart as t } from "../hooks/useCart.js";
3
3
  import { formatPrice as n } from "../utils/index.js";
4
4
  import { useState as r } from "react";
5
- import { useI18n as i } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
- import { ArrowLeft as a, Loader2 as o, Minus as s, Plus as c, ShoppingBag as l, ShoppingCart as u, Tag as d, Trash2 as f, Zap as p } from "lucide-react";
7
- import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
8
- import { useNavigate as _ } from "react-router";
5
+ import { useNavigate as i } from "react-router";
6
+ import { useI18n as a } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
+ import { ArrowLeft as o, Loader2 as s, Minus as c, Plus as l, ShoppingBag as u, ShoppingCart as d, Tag as f, Trash2 as p, Zap as m } from "lucide-react";
8
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
9
9
  import { isQuotaExhaustedError as v } from "@burdenoff/fe-libs/shared/utils";
10
10
  import { EmphasisPanel as y, IllustratedEmptyState as b, PagePurpose as x } from "@burdenoff/fe-libs/ui";
11
11
  import { useEventBus as S } from "@burdenoff/fe-libs/shared/events";
12
12
  import { useQuotaErrorToast as C } from "@burdenoff/fe-libs/shared/hooks";
13
13
  //#region src/pages/CartPage.tsx
14
14
  var w = () => {
15
- let w = _(), { basePath: T } = e(), { cartItems: E, itemCount: D, total: O, updateQuantity: k, removeProduct: A, clearCart: j, createOrder: M } = t(), [N, P] = r(!1), [F, I] = r(null), { t: L } = i(), R = S(), { report: z } = C(), B = E.some((e) => e.itemType === "physical"), V = async () => {
15
+ let w = i(), { basePath: T } = e(), { cartItems: E, itemCount: D, total: O, updateQuantity: k, removeProduct: A, clearCart: j, createOrder: M } = t(), [N, P] = r(!1), [F, I] = r(null), { t: L } = a(), R = S(), { report: z } = C(), B = E.some((e) => e.itemType === "physical"), V = async () => {
16
16
  try {
17
17
  P(!0), I(null), R.emit("store.cart.checkout_started", {
18
18
  cartId: "",
@@ -47,29 +47,29 @@ var w = () => {
47
47
  }, H = () => {
48
48
  w(`${T}/marketplace`);
49
49
  };
50
- return /* @__PURE__ */ g("div", {
50
+ return /* @__PURE__ */ _("div", {
51
51
  className: "h-full overflow-y-auto",
52
- children: [/* @__PURE__ */ h("header", {
52
+ children: [/* @__PURE__ */ g("header", {
53
53
  className: "sticky top-0 z-10 border-b border-border-seam bg-bg-surface px-6 py-4",
54
- children: /* @__PURE__ */ h("div", {
54
+ children: /* @__PURE__ */ g("div", {
55
55
  className: "mx-auto max-w-6xl",
56
- children: /* @__PURE__ */ g("div", {
56
+ children: /* @__PURE__ */ _("div", {
57
57
  className: "flex items-center gap-4",
58
- children: [/* @__PURE__ */ h("button", {
58
+ children: [/* @__PURE__ */ g("button", {
59
59
  type: "button",
60
60
  onClick: () => w(-1),
61
61
  "aria-label": "Go back",
62
62
  className: "cursor-pointer rounded-lg p-2 text-text-muted transition-colors hover:bg-bg-sunken hover:text-text-primary",
63
- children: /* @__PURE__ */ h(a, { className: "size-5" })
64
- }), /* @__PURE__ */ g("div", {
63
+ children: /* @__PURE__ */ g(o, { className: "size-5" })
64
+ }), /* @__PURE__ */ _("div", {
65
65
  className: "flex items-center gap-3",
66
66
  children: [
67
- /* @__PURE__ */ h(u, { className: "size-6 text-text-primary" }),
68
- /* @__PURE__ */ h("h1", {
67
+ /* @__PURE__ */ g(d, { className: "size-6 text-text-primary" }),
68
+ /* @__PURE__ */ g("h1", {
69
69
  className: "text-xl font-bold text-text-primary",
70
70
  children: L("cart.title", { defaultValue: "Shopping Cart" })
71
71
  }),
72
- D > 0 && /* @__PURE__ */ g("span", {
72
+ D > 0 && /* @__PURE__ */ _("span", {
73
73
  className: "rounded-full bg-action-primary-bg px-2.5 py-0.5 text-sm font-medium text-action-primary-text",
74
74
  children: [
75
75
  D,
@@ -87,128 +87,128 @@ var w = () => {
87
87
  })]
88
88
  })
89
89
  })
90
- }), /* @__PURE__ */ h("main", {
90
+ }), /* @__PURE__ */ g("main", {
91
91
  className: "mx-auto max-w-6xl p-6",
92
- children: E.length === 0 ? /* @__PURE__ */ h(b, {
92
+ children: E.length === 0 ? /* @__PURE__ */ g(b, {
93
93
  illustration: "empty-generic",
94
94
  title: L("cart.empty", { defaultValue: "Your cart is empty" }),
95
95
  description: L("pages.cart.emptyDescription", { defaultValue: "Looks like you have not added any apps or products to your cart yet. Start exploring the marketplace to find something you will love!" }),
96
- action: /* @__PURE__ */ g("button", {
96
+ action: /* @__PURE__ */ _("button", {
97
97
  type: "button",
98
98
  onClick: H,
99
99
  className: "cursor-pointer flex items-center gap-2 rounded-lg bg-action-primary-bg px-6 py-3 font-semibold text-action-primary-text transition-opacity hover:opacity-90",
100
- children: [/* @__PURE__ */ h(l, { className: "size-5" }), L("pages.cart.browseMarketplace", { defaultValue: "Browse Marketplace" })]
100
+ children: [/* @__PURE__ */ g(u, { className: "size-5" }), L("pages.cart.browseMarketplace", { defaultValue: "Browse Marketplace" })]
101
101
  })
102
- }) : /* @__PURE__ */ g("div", {
102
+ }) : /* @__PURE__ */ _("div", {
103
103
  className: "mx-auto max-w-3xl",
104
- children: [/* @__PURE__ */ h(x, {
104
+ children: [/* @__PURE__ */ g(x, {
105
105
  className: "mb-6",
106
106
  children: "Review the apps and products you're about to buy, adjust quantities for physical items, and confirm the total before checkout. Nothing is charged until you proceed — once you do, your purchases become licenses you can install into a workspace."
107
- }), /* @__PURE__ */ g("div", { children: [
108
- /* @__PURE__ */ g("div", {
107
+ }), /* @__PURE__ */ _("div", { children: [
108
+ /* @__PURE__ */ _("div", {
109
109
  className: "mb-4 flex items-center justify-between",
110
- children: [/* @__PURE__ */ h("h2", {
110
+ children: [/* @__PURE__ */ g("h2", {
111
111
  className: "text-lg font-semibold text-text-primary",
112
112
  children: L("pages.cart.cartItems", {
113
113
  defaultValue: `Cart Items (${D})`,
114
114
  count: D
115
115
  })
116
- }), /* @__PURE__ */ g("button", {
116
+ }), /* @__PURE__ */ _("button", {
117
117
  type: "button",
118
118
  onClick: j,
119
119
  className: "cursor-pointer flex items-center gap-1 text-sm text-text-muted transition-colors hover:text-status-error-text",
120
- children: [/* @__PURE__ */ h(f, { className: "size-4" }), L("cart.clearCart", { defaultValue: "Clear Cart" })]
120
+ children: [/* @__PURE__ */ g(p, { className: "size-4" }), L("cart.clearCart", { defaultValue: "Clear Cart" })]
121
121
  })]
122
122
  }),
123
- /* @__PURE__ */ h("ul", {
123
+ /* @__PURE__ */ g("ul", {
124
124
  className: "space-y-4",
125
- children: E.map((e) => /* @__PURE__ */ g("li", {
125
+ children: E.map((e) => /* @__PURE__ */ _("li", {
126
126
  className: "flex gap-4 rounded-xl border border-border-seam bg-bg-surface p-4 transition-[box-shadow,border-color] hover:border-border-strong hover:shadow-[var(--shadow-pop)]",
127
- children: [/* @__PURE__ */ h("div", {
127
+ children: [/* @__PURE__ */ g("div", {
128
128
  className: "size-24 flex-shrink-0 overflow-hidden rounded-lg bg-bg-sunken",
129
- children: e.product?.iconUrl ? /* @__PURE__ */ h("img", {
129
+ children: e.product?.iconUrl ? /* @__PURE__ */ g("img", {
130
130
  src: e.product.iconUrl,
131
131
  alt: e.product.displayName,
132
132
  className: "size-full object-cover"
133
- }) : /* @__PURE__ */ h("div", {
133
+ }) : /* @__PURE__ */ g("div", {
134
134
  className: "flex size-full items-center justify-center text-2xl font-bold text-text-muted",
135
135
  children: e.product?.displayName?.charAt(0) || "P"
136
136
  })
137
- }), /* @__PURE__ */ g("div", {
137
+ }), /* @__PURE__ */ _("div", {
138
138
  className: "flex flex-1 flex-col",
139
139
  children: [
140
- /* @__PURE__ */ g("div", {
140
+ /* @__PURE__ */ _("div", {
141
141
  className: "flex items-start justify-between",
142
- children: [/* @__PURE__ */ g("div", { children: [
143
- /* @__PURE__ */ h("h3", {
142
+ children: [/* @__PURE__ */ _("div", { children: [
143
+ /* @__PURE__ */ g("h3", {
144
144
  className: "font-semibold text-text-primary",
145
145
  children: e.product?.displayName || "Product"
146
146
  }),
147
- /* @__PURE__ */ h("p", {
147
+ /* @__PURE__ */ g("p", {
148
148
  className: "text-sm text-text-muted",
149
149
  children: e.product?.publisher?.displayName || "Unknown Publisher"
150
150
  }),
151
- e.variant && /* @__PURE__ */ g("p", {
151
+ e.variant && /* @__PURE__ */ _("p", {
152
152
  className: "mt-1 text-xs text-text-muted",
153
153
  children: ["Version ", e.variant.version]
154
154
  })
155
- ] }), /* @__PURE__ */ h("button", {
155
+ ] }), /* @__PURE__ */ g("button", {
156
156
  type: "button",
157
157
  onClick: () => A(e.id),
158
158
  className: "cursor-pointer rounded-lg p-2 text-text-muted transition-colors hover:bg-status-error-bg-subtle/10 hover:text-status-error-text",
159
159
  "aria-label": `Remove ${e.product?.displayName ?? "item"} from cart`,
160
160
  title: "Remove item",
161
- children: /* @__PURE__ */ h(f, { className: "size-5" })
161
+ children: /* @__PURE__ */ g(p, { className: "size-5" })
162
162
  })]
163
163
  }),
164
- /* @__PURE__ */ g("div", {
164
+ /* @__PURE__ */ _("div", {
165
165
  className: "mt-2 flex items-center gap-2",
166
- children: [/* @__PURE__ */ h("span", {
166
+ children: [/* @__PURE__ */ g("span", {
167
167
  className: "inline-flex items-center gap-1 rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-muted",
168
- children: e.itemType === "digital" ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(p, { className: "size-3" }), L("pages.cart.digital", { defaultValue: "Digital" })] }) : /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(d, { className: "size-3" }), L("pages.cart.physical", { defaultValue: "Physical" })] })
169
- }), e.product?.pricingModel === "SUBSCRIPTION" && /* @__PURE__ */ h("span", {
168
+ children: e.itemType === "digital" ? /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(m, { className: "size-3" }), L("pages.cart.digital", { defaultValue: "Digital" })] }) : /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(f, { className: "size-3" }), L("pages.cart.physical", { defaultValue: "Physical" })] })
169
+ }), e.product?.pricingModel === "SUBSCRIPTION" && /* @__PURE__ */ g("span", {
170
170
  className: "inline-flex items-center gap-1 rounded-full bg-bg-accent/10 px-2 py-0.5 text-xs font-medium text-text-link",
171
171
  children: L("store.pricingModels.subscription", { defaultValue: "Subscription" })
172
172
  })]
173
173
  }),
174
- /* @__PURE__ */ g("div", {
174
+ /* @__PURE__ */ _("div", {
175
175
  className: "mt-auto flex items-center justify-between pt-3",
176
- children: [e.itemType === "physical" ? /* @__PURE__ */ g("div", {
176
+ children: [e.itemType === "physical" ? /* @__PURE__ */ _("div", {
177
177
  className: "flex items-center gap-3",
178
- children: [/* @__PURE__ */ h("span", {
178
+ children: [/* @__PURE__ */ g("span", {
179
179
  className: "text-sm text-text-muted",
180
180
  children: "Qty:"
181
- }), /* @__PURE__ */ g("div", {
181
+ }), /* @__PURE__ */ _("div", {
182
182
  className: "flex items-center rounded-lg border border-border-default",
183
183
  children: [
184
- /* @__PURE__ */ h("button", {
184
+ /* @__PURE__ */ g("button", {
185
185
  type: "button",
186
186
  onClick: () => k(e.id, e.quantity - 1),
187
187
  className: "cursor-pointer rounded-l-lg p-2 transition-colors hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-50",
188
188
  disabled: e.quantity <= 1,
189
- children: /* @__PURE__ */ h(s, { className: "size-4" })
189
+ children: /* @__PURE__ */ g(c, { className: "size-4" })
190
190
  }),
191
- /* @__PURE__ */ h("span", {
191
+ /* @__PURE__ */ g("span", {
192
192
  className: "min-w-[3rem] text-center font-medium",
193
193
  children: e.quantity
194
194
  }),
195
- /* @__PURE__ */ h("button", {
195
+ /* @__PURE__ */ g("button", {
196
196
  type: "button",
197
197
  onClick: () => k(e.id, e.quantity + 1),
198
198
  className: "cursor-pointer rounded-r-lg p-2 transition-colors hover:bg-bg-sunken",
199
- children: /* @__PURE__ */ h(c, { className: "size-4" })
199
+ children: /* @__PURE__ */ g(l, { className: "size-4" })
200
200
  })
201
201
  ]
202
202
  })]
203
- }) : /* @__PURE__ */ h("div", {
203
+ }) : /* @__PURE__ */ g("div", {
204
204
  className: "text-sm text-text-muted",
205
205
  children: L("pages.cart.singleLicense", { defaultValue: "Single license" })
206
- }), /* @__PURE__ */ g("div", {
206
+ }), /* @__PURE__ */ _("div", {
207
207
  className: "text-right",
208
- children: [/* @__PURE__ */ h("p", {
208
+ children: [/* @__PURE__ */ g("p", {
209
209
  className: "text-lg font-bold text-text-primary",
210
210
  children: n(e.totalPrice)
211
- }), e.quantity > 1 && e.itemType === "physical" && /* @__PURE__ */ g("p", {
211
+ }), e.quantity > 1 && e.itemType === "physical" && /* @__PURE__ */ _("p", {
212
212
  className: "text-xs text-text-muted",
213
213
  children: [n(e.unitPrice), " each"]
214
214
  })]
@@ -218,41 +218,41 @@ var w = () => {
218
218
  })]
219
219
  }, e.id))
220
220
  }),
221
- /* @__PURE__ */ g(y, {
221
+ /* @__PURE__ */ _(y, {
222
222
  className: "mt-8",
223
223
  children: [
224
- F && /* @__PURE__ */ h("div", {
224
+ F && /* @__PURE__ */ g("div", {
225
225
  role: "alert",
226
226
  className: "mb-4 rounded-lg border border-status-error-border bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text",
227
227
  children: F
228
228
  }),
229
- /* @__PURE__ */ h("p", {
229
+ /* @__PURE__ */ g("p", {
230
230
  className: "mb-3 text-xs text-text-muted",
231
231
  children: B ? "Physical orders ship to your delivery address. Returns and refunds are handled by the seller per their store policy." : "All digital app purchases are final and non-refundable. Once an order is completed it cannot be cancelled or reversed."
232
232
  }),
233
- /* @__PURE__ */ g("div", {
233
+ /* @__PURE__ */ _("div", {
234
234
  className: "flex items-center justify-between",
235
- children: [/* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
235
+ children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
236
236
  className: "text-sm text-text-muted",
237
237
  children: "Total"
238
- }), /* @__PURE__ */ h("p", {
238
+ }), /* @__PURE__ */ g("p", {
239
239
  className: "text-2xl font-bold tabular-nums text-text-primary",
240
240
  children: n(O)
241
- })] }), /* @__PURE__ */ h("button", {
241
+ })] }), /* @__PURE__ */ g("button", {
242
242
  type: "button",
243
243
  onClick: V,
244
244
  disabled: N,
245
245
  className: "flex cursor-pointer items-center gap-2 rounded-lg bg-action-primary-bg px-6 py-3 font-semibold text-action-primary-text transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-70",
246
- children: N ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(o, { className: "size-4 animate-spin" }), L("pages.cart.processing", { defaultValue: "Processing..." })] }) : /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(p, { className: "size-4" }), L("pages.cart.proceedToCheckout", { defaultValue: "Proceed to Checkout" })] })
246
+ children: N ? /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(s, { className: "size-4 animate-spin" }), L("pages.cart.processing", { defaultValue: "Processing..." })] }) : /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(m, { className: "size-4" }), L("pages.cart.proceedToCheckout", { defaultValue: "Proceed to Checkout" })] })
247
247
  })]
248
248
  })
249
249
  ]
250
250
  }),
251
- /* @__PURE__ */ g("button", {
251
+ /* @__PURE__ */ _("button", {
252
252
  type: "button",
253
253
  onClick: H,
254
254
  className: "cursor-pointer mt-4 flex items-center gap-2 text-sm font-medium text-text-link hover:underline",
255
- children: [/* @__PURE__ */ h(a, { className: "size-4" }), L("cart.continueShopping", { defaultValue: "Continue Shopping" })]
255
+ children: [/* @__PURE__ */ g(o, { className: "size-4" }), L("cart.continueShopping", { defaultValue: "Continue Shopping" })]
256
256
  })
257
257
  ] })]
258
258
  })
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+
3
+ export declare const CreateSourcingRequestPage: FC;