@burdenoff/microfe-store 2026.625.5 → 2026.626.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/StoreRoutes.js +3 -3
  2. package/dist/StoreRoutes.js.map +1 -1
  3. package/dist/components/AccessDenied.js +3 -3
  4. package/dist/components/AccessDenied.js.map +1 -1
  5. package/dist/components/InstallAppModal.js +175 -255
  6. package/dist/components/InstallAppModal.js.map +1 -1
  7. package/dist/components/cart/CartDrawer.js +10 -10
  8. package/dist/components/cart/CartDrawer.js.map +1 -1
  9. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/errors/CombinedGraphQLErrors.js +1 -1
  10. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +1 -0
  11. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/errors/utils.js +1 -1
  12. package/dist/node_modules/@apollo/client/errors/utils.js.map +1 -0
  13. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/link/core/ApolloLink.js +2 -2
  14. package/dist/node_modules/@apollo/client/link/core/ApolloLink.js.map +1 -0
  15. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/link/subscriptions/index.js +2 -2
  16. package/dist/node_modules/@apollo/client/link/subscriptions/index.js.map +1 -0
  17. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/link/utils/createOperation.js +1 -1
  18. package/dist/node_modules/@apollo/client/link/utils/createOperation.js.map +1 -0
  19. package/dist/node_modules/@apollo/client/utilities/caching/sizes.js.map +1 -0
  20. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/graphql/print.js +1 -1
  21. package/dist/node_modules/@apollo/client/utilities/graphql/print.js.map +1 -0
  22. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/caches.js +2 -2
  23. package/dist/node_modules/@apollo/client/utilities/internal/caches.js.map +1 -0
  24. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/checkDocument.js +1 -1
  25. package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +1 -0
  26. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/getMainDefinition.js +1 -1
  27. package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +1 -0
  28. package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +9 -0
  29. package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +1 -0
  30. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/getOperationDefinition.js +1 -1
  31. package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +1 -0
  32. package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js +8 -0
  33. package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +1 -0
  34. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/globals/global.js +1 -1
  35. package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js.map +1 -0
  36. package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js +10 -0
  37. package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +1 -0
  38. package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js +8 -0
  39. package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js.map +1 -0
  40. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/makeUniqueId.js +1 -1
  41. package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +1 -0
  42. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/memoize.js +2 -2
  43. package/dist/node_modules/@apollo/client/utilities/internal/memoize.js.map +1 -0
  44. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/stringifyForDisplay.js +1 -1
  45. package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +1 -0
  46. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/invariant/index.js +1 -1
  47. package/dist/node_modules/@apollo/client/utilities/invariant/index.js.map +1 -0
  48. package/dist/node_modules/@apollo/client/version.js +6 -0
  49. package/dist/node_modules/@apollo/client/version.js.map +1 -0
  50. package/dist/node_modules/{.bun/@wry_caches@1.0.1/node_modules/@wry → @wry}/caches/lib/weak.js +1 -1
  51. package/dist/node_modules/@wry/caches/lib/weak.js.map +1 -0
  52. package/dist/node_modules/{.bun/@wry_trie@0.5.0/node_modules/@wry → @wry}/trie/lib/index.js +1 -1
  53. package/dist/node_modules/@wry/trie/lib/index.js.map +1 -0
  54. package/dist/node_modules/{.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws → graphql-ws}/dist/client.js +1 -1
  55. package/dist/node_modules/graphql-ws/dist/client.js.map +1 -0
  56. package/dist/node_modules/{.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws → graphql-ws}/dist/common-CGW11Fyb.js +1 -1
  57. package/dist/node_modules/graphql-ws/dist/common-CGW11Fyb.js.map +1 -0
  58. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/NotificationFactories.js +1 -1
  59. package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +1 -0
  60. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/Observable.js +1 -1
  61. package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -0
  62. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/Subscriber.js +2 -2
  63. package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -0
  64. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/Subscription.js +2 -2
  65. package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -0
  66. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/config.js +1 -1
  67. package/dist/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -0
  68. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/observable/empty.js +1 -1
  69. package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -0
  70. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/scheduler/timeoutProvider.js +2 -2
  71. package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -0
  72. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/symbol/observable.js +1 -1
  73. package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -0
  74. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/UnsubscriptionError.js +1 -1
  75. package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -0
  76. package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +11 -0
  77. package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -0
  78. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/createErrorClass.js +1 -1
  79. package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -0
  80. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/errorContext.js +1 -1
  81. package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -0
  82. package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js +8 -0
  83. package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +1 -0
  84. package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +8 -0
  85. package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -0
  86. package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js +6 -0
  87. package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -0
  88. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/pipe.js +1 -1
  89. package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -0
  90. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/reportUnhandledError.js +1 -1
  91. package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -0
  92. package/dist/node_modules/{.bun/tslib@2.8.1 → rxjs}/node_modules/tslib/tslib.es6.js +1 -1
  93. package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js.map +1 -0
  94. package/dist/pages/AdminDashboardPage.js +118 -91
  95. package/dist/pages/AdminDashboardPage.js.map +1 -1
  96. package/dist/pages/AdminReviewModerationPage.js +67 -61
  97. package/dist/pages/AdminReviewModerationPage.js.map +1 -1
  98. package/dist/pages/AdminStoresPage.js +424 -371
  99. package/dist/pages/AdminStoresPage.js.map +1 -1
  100. package/dist/pages/AdminSubmissionsQueuePage.js +303 -286
  101. package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
  102. package/dist/pages/AppDetailPage.js +172 -135
  103. package/dist/pages/AppDetailPage.js.map +1 -1
  104. package/dist/pages/AppSettingsPage.js +83 -300
  105. package/dist/pages/AppSettingsPage.js.map +1 -1
  106. package/dist/pages/CartPage.js +71 -79
  107. package/dist/pages/CartPage.js.map +1 -1
  108. package/dist/pages/InstalledAppsPage.js +120 -337
  109. package/dist/pages/InstalledAppsPage.js.map +1 -1
  110. package/dist/pages/MarketplaceHomePage.js +196 -205
  111. package/dist/pages/MarketplaceHomePage.js.map +1 -1
  112. package/dist/pages/MyLicensesPage.js +70 -75
  113. package/dist/pages/MyLicensesPage.js.map +1 -1
  114. package/dist/pages/OrderConfirmationPage.js +70 -37
  115. package/dist/pages/OrderConfirmationPage.js.map +1 -1
  116. package/dist/pages/OrdersPage.js +60 -68
  117. package/dist/pages/OrdersPage.js.map +1 -1
  118. package/dist/pages/ProductDetailPage.js +794 -752
  119. package/dist/pages/ProductDetailPage.js.map +1 -1
  120. package/dist/pages/ProductReviewsPage.js +24 -19
  121. package/dist/pages/ProductReviewsPage.js.map +1 -1
  122. package/dist/pages/PublisherDashboardPage.js +134 -99
  123. package/dist/pages/PublisherDashboardPage.js.map +1 -1
  124. package/dist/pages/PublisherRevenuePage.js +65 -63
  125. package/dist/pages/PublisherRevenuePage.js.map +1 -1
  126. package/dist/pages/PublisherSubmissionsPage.js +120 -111
  127. package/dist/pages/PublisherSubmissionsPage.js.map +1 -1
  128. package/dist/pages/PublisherSubmitPage.js +197 -184
  129. package/dist/pages/PublisherSubmitPage.js.map +1 -1
  130. package/dist/providers/StoreProvider.js +3 -3
  131. package/package.json +2 -2
  132. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +0 -1
  133. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/errors/utils.js.map +0 -1
  134. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/link/core/ApolloLink.js.map +0 -1
  135. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/link/subscriptions/index.js.map +0 -1
  136. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/link/utils/createOperation.js.map +0 -1
  137. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/caching/sizes.js.map +0 -1
  138. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/graphql/print.js.map +0 -1
  139. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/caches.js.map +0 -1
  140. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +0 -1
  141. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +0 -1
  142. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +0 -9
  143. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +0 -1
  144. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +0 -1
  145. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getOperationName.js +0 -8
  146. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +0 -1
  147. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/globals/global.js.map +0 -1
  148. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/globals/maybe.js +0 -10
  149. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +0 -1
  150. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/isNonNullObject.js +0 -8
  151. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/isNonNullObject.js.map +0 -1
  152. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +0 -1
  153. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/memoize.js.map +0 -1
  154. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +0 -1
  155. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/invariant/index.js.map +0 -1
  156. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/version.js +0 -6
  157. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/version.js.map +0 -1
  158. package/dist/node_modules/.bun/@wry_caches@1.0.1/node_modules/@wry/caches/lib/weak.js.map +0 -1
  159. package/dist/node_modules/.bun/@wry_trie@0.5.0/node_modules/@wry/trie/lib/index.js.map +0 -1
  160. package/dist/node_modules/.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws/dist/client.js.map +0 -1
  161. package/dist/node_modules/.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws/dist/common-CGW11Fyb.js.map +0 -1
  162. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +0 -1
  163. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Observable.js.map +0 -1
  164. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +0 -1
  165. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +0 -1
  166. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/config.js.map +0 -1
  167. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +0 -1
  168. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +0 -1
  169. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +0 -1
  170. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +0 -1
  171. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +0 -11
  172. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +0 -1
  173. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +0 -1
  174. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +0 -1
  175. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js +0 -8
  176. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +0 -1
  177. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +0 -8
  178. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +0 -1
  179. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js +0 -6
  180. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +0 -1
  181. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +0 -1
  182. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +0 -1
  183. package/dist/node_modules/.bun/tslib@2.8.1/node_modules/tslib/tslib.es6.js.map +0 -1
  184. /package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/caching/sizes.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"PublisherRevenuePage.js","names":[],"sources":["../../src/pages/PublisherRevenuePage.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ArrowLeft, Wallet, Clock3, TrendingUp } from 'lucide-react';\nimport { useDeveloperEarnings } from '../hooks/useStoreGraphQL';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\ninterface EarningsPayload {\n totalEarnings: number;\n monthlyEarnings: number;\n totalOrders: number;\n monthlyOrders: number;\n currency: string;\n earnings?: Array<{\n month: string;\n year: number;\n earnings: number;\n orders: number;\n currency: string;\n }>;\n topSellingItems?: Array<{\n storeProduct: { id: string; name: string };\n totalSales: number;\n totalEarnings: number;\n monthlySales: number;\n monthlyEarnings: number;\n currency: string;\n }>;\n}\n\nexport const PublisherRevenuePage: FC = () => {\n const navigate = useNavigate();\n const { earnings, loading, error, refetch } = useDeveloperEarnings();\n const { t } = useI18n();\n\n const data = (earnings as EarningsPayload | null) ?? null;\n const currency = data?.currency || 'USD';\n\n const fmt = useMemo(\n () =>\n new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n maximumFractionDigits: 2,\n }),\n [currency]\n );\n\n return (\n <div className=\"flex h-full flex-col\">\n <header className=\"border-b border-border-default bg-bg-surface px-6 py-4\">\n <div className=\"mx-auto flex max-w-6xl items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigate(-1)}\n aria-label=\"Go back\"\n className=\"cursor-pointer rounded-lg p-2 text-text-muted hover:bg-bg-sunken hover:text-text-primary\"\n >\n <ArrowLeft className=\"size-5\" />\n </button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n {t('pages.publisherRevenue.title', { defaultValue: 'Revenue' })}\n </h1>\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherRevenue.subtitle', {\n defaultValue: 'Track publisher earnings and payouts',\n })}\n </p>\n </div>\n </div>\n </header>\n\n <main className=\"flex-1 overflow-y-auto p-6\">\n <div className=\"mx-auto max-w-6xl space-y-6\">\n {loading ? (\n <p role=\"status\" className=\"text-sm text-text-muted\">\n Loading earnings…\n </p>\n ) : error ? (\n <div\n role=\"alert\"\n className=\"space-y-2 rounded-xl border border-status-error-border bg-status-error-bg-subtle p-6\"\n >\n <p className=\"text-sm text-status-error-text\">\n {t('pages.publisherRevenue.failedToLoad', {\n defaultValue: 'Failed to load earnings data.',\n })}\n </p>\n <button\n type=\"button\"\n onClick={() => refetch()}\n className=\"cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-semibold text-action-primary-text\"\n >\n Retry\n </button>\n </div>\n ) : !data ? (\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-8 text-center text-sm text-text-muted\">\n {t('pages.publisherRevenue.noRevenue', {\n defaultValue: 'No revenue data available yet.',\n })}\n </div>\n ) : (\n <>\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <Wallet className=\"size-4\" />{' '}\n {t('pages.publisherRevenue.totalEarnings', { defaultValue: 'Total earnings' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold text-text-primary\">\n {fmt.format(data.totalEarnings)}\n </p>\n </div>\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <Clock3 className=\"size-4\" />{' '}\n {t('pages.publisherRevenue.monthlyEarnings', {\n defaultValue: 'Monthly earnings',\n })}\n </div>\n <p className=\"mt-2 text-2xl font-bold text-text-primary\">\n {fmt.format(data.monthlyEarnings)}\n </p>\n </div>\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <TrendingUp className=\"size-4\" />{' '}\n {t('pages.publisherRevenue.monthlyOrders', { defaultValue: 'Monthly orders' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold text-text-primary\">{data.monthlyOrders}</p>\n </div>\n </div>\n\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-5\">\n <h2 className=\"mb-3 text-lg font-semibold text-text-primary\">\n {t('pages.publisherRevenue.topSelling', { defaultValue: 'Top Selling Items' })}\n </h2>\n {!data.topSellingItems || data.topSellingItems.length === 0 ? (\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherRevenue.noSales', {\n defaultValue: 'No product sales found for this period.',\n })}\n </p>\n ) : (\n <ul className=\"space-y-2\">\n {data.topSellingItems.map((item) => (\n <li\n key={item.storeProduct.id}\n className=\"flex items-center justify-between rounded-lg border border-border-default p-3\"\n >\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {item.storeProduct.name}\n </p>\n <p className=\"text-xs text-text-muted\">\n {item.totalSales} total sales • {item.monthlySales} this period\n </p>\n </div>\n <p className=\"text-sm font-semibold text-text-primary\">\n {fmt.format(item.totalEarnings)}\n </p>\n </li>\n ))}\n </ul>\n )}\n </div>\n </>\n )}\n </div>\n </main>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"PublisherRevenuePage.js","names":[],"sources":["../../src/pages/PublisherRevenuePage.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ArrowLeft, Wallet, Clock3, TrendingUp } from 'lucide-react';\nimport { useDeveloperEarnings } from '../hooks/useStoreGraphQL';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n GlassCard,\n EmphasisPanel,\n PagePurpose,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\n\ninterface EarningsPayload {\n totalEarnings: number;\n monthlyEarnings: number;\n totalOrders: number;\n monthlyOrders: number;\n currency: string;\n earnings?: Array<{\n month: string;\n year: number;\n earnings: number;\n orders: number;\n currency: string;\n }>;\n topSellingItems?: Array<{\n storeProduct: { id: string; name: string };\n totalSales: number;\n totalEarnings: number;\n monthlySales: number;\n monthlyEarnings: number;\n currency: string;\n }>;\n}\n\nexport const PublisherRevenuePage: FC = () => {\n const navigate = useNavigate();\n const { earnings, loading, error, refetch } = useDeveloperEarnings();\n const { t } = useI18n();\n\n const data = (earnings as EarningsPayload | null) ?? null;\n const currency = data?.currency || 'USD';\n\n const fmt = useMemo(\n () =>\n new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n maximumFractionDigits: 2,\n }),\n [currency]\n );\n\n return (\n <div className=\"flex h-full flex-col\">\n <header className=\"border-b border-border-seam bg-bg-surface px-6 py-4\">\n <div className=\"mx-auto flex max-w-6xl items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigate(-1)}\n aria-label=\"Go back\"\n className=\"cursor-pointer rounded-lg p-2 text-text-muted hover:bg-bg-sunken hover:text-text-primary\"\n >\n <ArrowLeft className=\"size-5\" />\n </button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n {t('pages.publisherRevenue.title', { defaultValue: 'Revenue' })}\n </h1>\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherRevenue.subtitle', {\n defaultValue: 'Track publisher earnings and payouts',\n })}\n </p>\n </div>\n </div>\n </header>\n\n <main className=\"flex-1 overflow-y-auto p-6\">\n <div className=\"mx-auto max-w-6xl space-y-6\">\n <PagePurpose>\n See what your published products are actually earning. Track total and monthly revenue,\n how many orders came in, and which products sell best — so you know where your income\n comes from and which listings are worth doubling down on.\n </PagePurpose>\n {loading ? (\n <p role=\"status\" className=\"text-sm text-text-muted\">\n Loading earnings…\n </p>\n ) : error ? (\n <div\n role=\"alert\"\n className=\"space-y-2 rounded-xl border border-status-error-border bg-status-error-bg-subtle p-6\"\n >\n <p className=\"text-sm text-status-error-text\">\n {t('pages.publisherRevenue.failedToLoad', {\n defaultValue: 'Failed to load earnings data.',\n })}\n </p>\n <button\n type=\"button\"\n onClick={() => refetch()}\n className=\"cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-semibold text-action-primary-text\"\n >\n Retry\n </button>\n </div>\n ) : !data ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('pages.publisherRevenue.noRevenueTitle', {\n defaultValue: 'No revenue data yet',\n })}\n description={t('pages.publisherRevenue.noRevenue', {\n defaultValue:\n 'No revenue data available yet. Earnings will appear here once your published products start selling.',\n })}\n />\n ) : (\n <>\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <Wallet className=\"size-4\" />{' '}\n {t('pages.publisherRevenue.totalEarnings', { defaultValue: 'Total earnings' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {fmt.format(data.totalEarnings)}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <Clock3 className=\"size-4\" />{' '}\n {t('pages.publisherRevenue.monthlyEarnings', {\n defaultValue: 'Monthly earnings',\n })}\n </div>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {fmt.format(data.monthlyEarnings)}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <TrendingUp className=\"size-4\" />{' '}\n {t('pages.publisherRevenue.monthlyOrders', { defaultValue: 'Monthly orders' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {data.monthlyOrders}\n </p>\n </GlassCard>\n </div>\n\n <EmphasisPanel>\n <h2 className=\"mb-3 text-lg font-semibold text-text-primary\">\n {t('pages.publisherRevenue.topSelling', { defaultValue: 'Top Selling Items' })}\n </h2>\n {!data.topSellingItems || data.topSellingItems.length === 0 ? (\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherRevenue.noSales', {\n defaultValue: 'No product sales found for this period.',\n })}\n </p>\n ) : (\n <ul className=\"space-y-2\">\n {data.topSellingItems.map((item) => (\n <li\n key={item.storeProduct.id}\n className=\"flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface p-3\"\n >\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {item.storeProduct.name}\n </p>\n <p className=\"text-xs text-text-muted\">\n {item.totalSales} total sales • {item.monthlySales} this period\n </p>\n </div>\n <p className=\"text-sm font-semibold text-text-primary\">\n {fmt.format(item.totalEarnings)}\n </p>\n </li>\n ))}\n </ul>\n )}\n </EmphasisPanel>\n </>\n )}\n </div>\n </main>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -3,177 +3,186 @@ import { useSubmissionStatusUpdatedSubscription as t } from "../generated/global
3
3
  import { useMyPublishedProducts as n } from "../hooks/useStoreGraphQL.js";
4
4
  import { useMemo as r } from "react";
5
5
  import { useI18n as i } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
- import { ArrowLeft as a, CheckCircle2 as o, Clock3 as s, FileCheck2 as c, MessageSquare as l, XCircle as u } from "lucide-react";
7
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
8
- import { useNavigate as p } from "react-router-dom";
6
+ import { ArrowLeft as a, CheckCircle2 as o, Clock3 as s, MessageSquare as c, XCircle as l } from "lucide-react";
7
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
8
+ import { useNavigate as f } from "react-router-dom";
9
+ import { EmphasisPanel as p, GlassCard as m, IllustratedEmptyState as h, PagePurpose as g } from "@burdenoff/fe-libs/ui";
9
10
  //#region src/pages/PublisherSubmissionsPage.tsx
10
- var m = (e) => e === "PUBLISHED" || e === "APPROVED" ? "bg-status-success-bg-subtle text-status-success-text" : e === "REJECTED" || e === "UNLISTED" ? "bg-status-error-bg-subtle text-status-error-text" : e === "PENDING" || e === "SUBMITTED" || e === "UNDER_REVIEW" ? "bg-status-warning-bg-subtle text-status-warning-text" : "bg-bg-sunken text-text-muted", h = () => {
11
- let h = p(), { basePath: g, currentUser: _ } = e(), { products: v, hasMore: y, loading: b, error: x, refetch: S, loadMore: C } = n(), { t: w } = i(), T = _?.id;
11
+ var _ = (e) => e === "PUBLISHED" || e === "APPROVED" ? "bg-status-success-bg-subtle text-status-success-text" : e === "REJECTED" || e === "UNLISTED" ? "bg-status-error-bg-subtle text-status-error-text" : e === "PENDING" || e === "SUBMITTED" || e === "UNDER_REVIEW" ? "bg-status-warning-bg-subtle text-status-warning-text" : "bg-bg-sunken text-text-muted", v = () => {
12
+ let v = f(), { basePath: y, currentUser: b } = e(), { products: x, hasMore: S, loading: C, error: w, refetch: T, loadMore: E } = n(), { t: D } = i(), O = b?.id;
12
13
  t({
13
- variables: { publisherId: T ?? "" },
14
- skip: !T,
14
+ variables: { publisherId: O ?? "" },
15
+ skip: !O,
15
16
  onData: () => {
16
- S();
17
+ T();
17
18
  },
18
19
  onError: (e) => {
19
20
  console.warn("SubmissionStatusUpdated subscription error:", e.message);
20
21
  }
21
22
  });
22
- let E = r(() => {
23
- let e = v.filter((e) => e.status === "PUBLISHED" || e.status === "APPROVED").length, t = v.filter((e) => e.status === "REJECTED" || e.status === "UNLISTED").length;
23
+ let k = r(() => {
24
+ let e = x.filter((e) => e.status === "PUBLISHED" || e.status === "APPROVED").length, t = x.filter((e) => e.status === "REJECTED" || e.status === "UNLISTED").length;
24
25
  return {
25
26
  approved: e,
26
27
  rejected: t,
27
- pending: v.length - e - t
28
+ pending: x.length - e - t
28
29
  };
29
- }, [v]);
30
- return /* @__PURE__ */ f("div", {
30
+ }, [x]);
31
+ return /* @__PURE__ */ d("div", {
31
32
  className: "flex h-full flex-col",
32
- children: [/* @__PURE__ */ d("header", {
33
- className: "border-b border-border-default bg-bg-surface px-6 py-4",
34
- children: /* @__PURE__ */ f("div", {
33
+ children: [/* @__PURE__ */ u("header", {
34
+ className: "border-b border-border-seam bg-bg-surface px-6 py-4",
35
+ children: /* @__PURE__ */ d("div", {
35
36
  className: "mx-auto flex max-w-6xl items-center gap-3",
36
- children: [/* @__PURE__ */ d("button", {
37
+ children: [/* @__PURE__ */ u("button", {
37
38
  type: "button",
38
- onClick: () => h(-1),
39
+ onClick: () => v(-1),
39
40
  "aria-label": "Go back",
40
41
  className: "cursor-pointer rounded-lg p-2 text-text-muted hover:bg-bg-sunken hover:text-text-primary",
41
- children: /* @__PURE__ */ d(a, { className: "size-5" })
42
- }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h1", {
42
+ children: /* @__PURE__ */ u(a, { className: "size-5" })
43
+ }), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
43
44
  className: "text-2xl font-bold text-text-primary",
44
- children: w("pages.publisherSubmissions.title", { defaultValue: "Submissions" })
45
- }), /* @__PURE__ */ d("p", {
45
+ children: D("pages.publisherSubmissions.title", { defaultValue: "Submissions" })
46
+ }), /* @__PURE__ */ u("p", {
46
47
  className: "text-sm text-text-muted",
47
- children: w("pages.publisherSubmissions.subtitle", { defaultValue: "Track approval status for your store products" })
48
+ children: D("pages.publisherSubmissions.subtitle", { defaultValue: "Track approval status for your store products" })
48
49
  })] })]
49
50
  })
50
- }), /* @__PURE__ */ d("main", {
51
+ }), /* @__PURE__ */ u("main", {
51
52
  className: "flex-1 overflow-y-auto p-6",
52
- children: /* @__PURE__ */ f("div", {
53
+ children: /* @__PURE__ */ d("div", {
53
54
  className: "mx-auto max-w-6xl space-y-6",
54
- children: [/* @__PURE__ */ f("div", {
55
- className: "grid gap-4 sm:grid-cols-3",
56
- children: [
57
- /* @__PURE__ */ f("div", {
58
- className: "rounded-xl border border-border-default bg-bg-surface p-4",
59
- children: [/* @__PURE__ */ f("div", {
60
- className: "inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted",
61
- children: [
62
- /* @__PURE__ */ d(s, { className: "size-4" }),
63
- " ",
64
- w("store.status.pending", { defaultValue: "Pending" })
65
- ]
66
- }), /* @__PURE__ */ d("p", {
67
- className: "mt-2 text-2xl font-bold text-text-primary",
68
- children: E.pending
69
- })]
70
- }),
71
- /* @__PURE__ */ f("div", {
72
- className: "rounded-xl border border-border-default bg-bg-surface p-4",
73
- children: [/* @__PURE__ */ f("div", {
74
- className: "inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted",
75
- children: [
76
- /* @__PURE__ */ d(o, { className: "size-4" }),
77
- " ",
78
- w("store.status.approved", { defaultValue: "Approved" })
79
- ]
80
- }), /* @__PURE__ */ d("p", {
81
- className: "mt-2 text-2xl font-bold text-text-primary",
82
- children: E.approved
83
- })]
84
- }),
85
- /* @__PURE__ */ f("div", {
86
- className: "rounded-xl border border-border-default bg-bg-surface p-4",
87
- children: [/* @__PURE__ */ f("div", {
88
- className: "inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted",
89
- children: [
90
- /* @__PURE__ */ d(u, { className: "size-4" }),
91
- " ",
92
- w("store.status.rejected", { defaultValue: "Rejected" })
93
- ]
94
- }), /* @__PURE__ */ d("p", {
95
- className: "mt-2 text-2xl font-bold text-text-primary",
96
- children: E.rejected
97
- })]
98
- })
99
- ]
100
- }), /* @__PURE__ */ f("div", {
101
- className: "rounded-xl border border-border-default bg-bg-surface p-5",
102
- children: [/* @__PURE__ */ f("div", {
55
+ children: [
56
+ /* @__PURE__ */ u(g, { children: "Follow each product you've submitted through the review pipeline — pending, approved or rejected — so you always know what's live and what still needs attention. If a submission is rejected, open it to read the moderator's reason and resubmit a fixed version." }),
57
+ /* @__PURE__ */ d("div", {
58
+ className: "grid gap-4 sm:grid-cols-3",
59
+ children: [
60
+ /* @__PURE__ */ d(m, {
61
+ treatment: "metric",
62
+ className: "p-4",
63
+ children: [/* @__PURE__ */ d("div", {
64
+ className: "inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted",
65
+ children: [
66
+ /* @__PURE__ */ u(s, { className: "size-4" }),
67
+ " ",
68
+ D("store.status.pending", { defaultValue: "Pending" })
69
+ ]
70
+ }), /* @__PURE__ */ u("p", {
71
+ className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
72
+ children: k.pending
73
+ })]
74
+ }),
75
+ /* @__PURE__ */ d(m, {
76
+ treatment: "metric",
77
+ className: "p-4",
78
+ children: [/* @__PURE__ */ d("div", {
79
+ className: "inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted",
80
+ children: [
81
+ /* @__PURE__ */ u(o, { className: "size-4" }),
82
+ " ",
83
+ D("store.status.approved", { defaultValue: "Approved" })
84
+ ]
85
+ }), /* @__PURE__ */ u("p", {
86
+ className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
87
+ children: k.approved
88
+ })]
89
+ }),
90
+ /* @__PURE__ */ d(m, {
91
+ treatment: "metric",
92
+ className: "p-4",
93
+ children: [/* @__PURE__ */ d("div", {
94
+ className: "inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted",
95
+ children: [
96
+ /* @__PURE__ */ u(l, { className: "size-4" }),
97
+ " ",
98
+ D("store.status.rejected", { defaultValue: "Rejected" })
99
+ ]
100
+ }), /* @__PURE__ */ u("p", {
101
+ className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
102
+ children: k.rejected
103
+ })]
104
+ })
105
+ ]
106
+ }),
107
+ /* @__PURE__ */ d(p, { children: [/* @__PURE__ */ d("div", {
103
108
  className: "mb-4 flex items-center justify-between",
104
- children: [/* @__PURE__ */ d("h2", {
109
+ children: [/* @__PURE__ */ u("h2", {
105
110
  className: "text-lg font-semibold text-text-primary",
106
- children: w("pages.publisherSubmissions.timeline", { defaultValue: "Submission Timeline" })
107
- }), /* @__PURE__ */ d("button", {
111
+ children: D("pages.publisherSubmissions.timeline", { defaultValue: "Submission Timeline" })
112
+ }), /* @__PURE__ */ u("button", {
108
113
  type: "button",
109
- onClick: () => h(`${g}/publisher/submit`),
114
+ onClick: () => v(`${y}/publisher/submit`),
110
115
  className: "cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-sm font-semibold text-action-primary-text",
111
- children: w("pages.publisherSubmissions.newSubmission", { defaultValue: "New Submission" })
116
+ children: D("pages.publisherSubmissions.newSubmission", { defaultValue: "New Submission" })
112
117
  })]
113
- }), b ? /* @__PURE__ */ d("p", {
118
+ }), C ? /* @__PURE__ */ u("p", {
114
119
  role: "status",
115
120
  className: "text-sm text-text-muted",
116
121
  children: "Loading submissions…"
117
- }) : x ? /* @__PURE__ */ f("div", {
122
+ }) : w ? /* @__PURE__ */ d("div", {
118
123
  role: "alert",
119
124
  className: "space-y-2",
120
- children: [/* @__PURE__ */ d("p", {
125
+ children: [/* @__PURE__ */ u("p", {
121
126
  className: "text-sm text-status-error-text",
122
- children: w("pages.publisherSubmissions.failedToLoad", { defaultValue: "Failed to load submissions." })
123
- }), /* @__PURE__ */ d("button", {
127
+ children: D("pages.publisherSubmissions.failedToLoad", { defaultValue: "Failed to load submissions." })
128
+ }), /* @__PURE__ */ u("button", {
124
129
  type: "button",
125
- onClick: () => S(),
130
+ onClick: () => T(),
126
131
  className: "cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-semibold text-action-primary-text",
127
132
  children: "Retry"
128
133
  })]
129
- }) : v.length === 0 ? /* @__PURE__ */ f("div", {
130
- className: "rounded-lg border border-border-default bg-bg-sunken p-8 text-center",
131
- children: [/* @__PURE__ */ d(c, { className: "mx-auto mb-2 size-10 text-text-muted" }), /* @__PURE__ */ d("p", {
132
- className: "text-sm text-text-muted",
133
- children: w("pages.publisherSubmissions.emptyTitle", { defaultValue: "No submissions found yet." })
134
- })]
135
- }) : /* @__PURE__ */ f("ul", {
134
+ }) : x.length === 0 ? /* @__PURE__ */ u(h, {
135
+ illustration: "empty-data",
136
+ title: D("pages.publisherSubmissions.emptyTitle", { defaultValue: "No submissions found yet." }),
137
+ description: D("pages.publisherSubmissions.emptyDescription", { defaultValue: "Submit a product to start tracking it through review here." }),
138
+ action: /* @__PURE__ */ u("button", {
139
+ type: "button",
140
+ onClick: () => v(`${y}/publisher/submit`),
141
+ className: "cursor-pointer rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text hover:opacity-90",
142
+ children: D("pages.publisherSubmissions.newSubmission", { defaultValue: "New Submission" })
143
+ })
144
+ }) : /* @__PURE__ */ d("ul", {
136
145
  className: "space-y-3",
137
- children: [v.map((e) => /* @__PURE__ */ f("li", {
138
- className: "flex items-center justify-between rounded-lg border border-border-default p-3 transition-colors hover:bg-bg-sunken",
139
- children: [/* @__PURE__ */ f("button", {
146
+ children: [x.map((e) => /* @__PURE__ */ d("li", {
147
+ className: "flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface p-3 transition-[box-shadow,border-color] hover:border-border-strong hover:shadow-[var(--shadow-pop)]",
148
+ children: [/* @__PURE__ */ d("button", {
140
149
  type: "button",
141
- onClick: () => h(`${g}/marketplace/product/${e.id}`),
150
+ onClick: () => v(`${y}/marketplace/product/${e.id}`),
142
151
  className: "flex flex-1 cursor-pointer items-center justify-between text-left",
143
- children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
152
+ children: [/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
144
153
  className: "font-medium text-text-primary",
145
154
  children: e.name
146
- }), /* @__PURE__ */ f("p", {
155
+ }), /* @__PURE__ */ d("p", {
147
156
  className: "text-xs text-text-muted",
148
157
  children: ["Reviews: ", e.reviewCount]
149
- })] }), /* @__PURE__ */ d("span", {
150
- className: `rounded-full px-2.5 py-1 text-xs font-semibold ${m(e.status)}`,
158
+ })] }), /* @__PURE__ */ u("span", {
159
+ className: `rounded-full px-2.5 py-1 text-xs font-semibold ${_(e.status)}`,
151
160
  children: e.status
152
161
  })]
153
- }), /* @__PURE__ */ f("button", {
162
+ }), /* @__PURE__ */ d("button", {
154
163
  type: "button",
155
- onClick: () => h(`${g}/publisher/product/${e.id}/reviews`),
164
+ onClick: () => v(`${y}/publisher/product/${e.id}/reviews`),
156
165
  className: "ml-3 inline-flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-xs font-medium text-text-link hover:bg-bg-sunken hover:underline",
157
166
  title: "View reviews",
158
- children: [/* @__PURE__ */ d(l, { className: "size-3.5" }), "Reviews"]
167
+ children: [/* @__PURE__ */ u(c, { className: "size-3.5" }), "Reviews"]
159
168
  })]
160
- }, e.id)), y && /* @__PURE__ */ d("li", {
169
+ }, e.id)), S && /* @__PURE__ */ u("li", {
161
170
  className: "flex justify-center pt-4 list-none",
162
- children: /* @__PURE__ */ d("button", {
171
+ children: /* @__PURE__ */ u("button", {
163
172
  type: "button",
164
- onClick: C,
165
- disabled: b,
173
+ onClick: E,
174
+ disabled: C,
166
175
  className: "rounded-lg border border-border-default px-6 py-2.5 text-sm font-medium text-text-primary hover:bg-bg-subtle disabled:opacity-50",
167
- children: b ? "Loading…" : "Load more"
176
+ children: C ? "Loading…" : "Load more"
168
177
  })
169
178
  })]
170
- })]
171
- })]
179
+ })] })
180
+ ]
172
181
  })
173
182
  })]
174
183
  });
175
184
  };
176
185
  //#endregion
177
- export { h as PublisherSubmissionsPage };
186
+ export { v as PublisherSubmissionsPage };
178
187
 
179
188
  //# sourceMappingURL=PublisherSubmissionsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PublisherSubmissionsPage.js","names":[],"sources":["../../src/pages/PublisherSubmissionsPage.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ArrowLeft, FileCheck2, Clock3, CheckCircle2, XCircle, MessageSquare } from 'lucide-react';\nimport { useStore } from '../providers/StoreProvider';\nimport { useMyPublishedProducts } from '../hooks/useStoreGraphQL';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useSubmissionStatusUpdatedSubscription } from '../generated/global-operations';\n\nconst statusClass = (status: string): string => {\n if (status === 'PUBLISHED' || status === 'APPROVED') {\n return 'bg-status-success-bg-subtle text-status-success-text';\n }\n if (status === 'REJECTED' || status === 'UNLISTED') {\n return 'bg-status-error-bg-subtle text-status-error-text';\n }\n if (status === 'PENDING' || status === 'SUBMITTED' || status === 'UNDER_REVIEW') {\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n }\n return 'bg-bg-sunken text-text-muted';\n};\n\nexport const PublisherSubmissionsPage: FC = () => {\n const navigate = useNavigate();\n const { basePath, currentUser } = useStore();\n const { products, hasMore, loading, error, refetch, loadMore } = useMyPublishedProducts();\n const { t } = useI18n();\n\n const publisherId = currentUser?.id;\n useSubmissionStatusUpdatedSubscription({\n variables: { publisherId: publisherId ?? '' },\n skip: !publisherId,\n onData: () => {\n void refetch();\n },\n onError: (err) => {\n console.warn('SubmissionStatusUpdated subscription error:', err.message);\n },\n });\n\n const grouped = useMemo(() => {\n const approved = products.filter(\n (p) => p.status === 'PUBLISHED' || p.status === 'APPROVED'\n ).length;\n const rejected = products.filter(\n (p) => p.status === 'REJECTED' || p.status === 'UNLISTED'\n ).length;\n const pending = products.length - approved - rejected;\n return { approved, rejected, pending };\n }, [products]);\n\n return (\n <div className=\"flex h-full flex-col\">\n <header className=\"border-b border-border-default bg-bg-surface px-6 py-4\">\n <div className=\"mx-auto flex max-w-6xl items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigate(-1)}\n aria-label=\"Go back\"\n className=\"cursor-pointer rounded-lg p-2 text-text-muted hover:bg-bg-sunken hover:text-text-primary\"\n >\n <ArrowLeft className=\"size-5\" />\n </button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n {t('pages.publisherSubmissions.title', { defaultValue: 'Submissions' })}\n </h1>\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherSubmissions.subtitle', {\n defaultValue: 'Track approval status for your store products',\n })}\n </p>\n </div>\n </div>\n </header>\n\n <main className=\"flex-1 overflow-y-auto p-6\">\n <div className=\"mx-auto max-w-6xl space-y-6\">\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <Clock3 className=\"size-4\" />{' '}\n {t('store.status.pending', { defaultValue: 'Pending' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold text-text-primary\">{grouped.pending}</p>\n </div>\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <CheckCircle2 className=\"size-4\" />{' '}\n {t('store.status.approved', { defaultValue: 'Approved' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold text-text-primary\">{grouped.approved}</p>\n </div>\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <XCircle className=\"size-4\" />{' '}\n {t('store.status.rejected', { defaultValue: 'Rejected' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold text-text-primary\">{grouped.rejected}</p>\n </div>\n </div>\n\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-5\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('pages.publisherSubmissions.timeline', { defaultValue: 'Submission Timeline' })}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/publisher/submit`)}\n className=\"cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-sm font-semibold text-action-primary-text\"\n >\n {t('pages.publisherSubmissions.newSubmission', { defaultValue: 'New Submission' })}\n </button>\n </div>\n\n {loading ? (\n <p role=\"status\" className=\"text-sm text-text-muted\">\n Loading submissions…\n </p>\n ) : error ? (\n <div role=\"alert\" className=\"space-y-2\">\n <p className=\"text-sm text-status-error-text\">\n {t('pages.publisherSubmissions.failedToLoad', {\n defaultValue: 'Failed to load submissions.',\n })}\n </p>\n <button\n type=\"button\"\n onClick={() => refetch()}\n className=\"cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-semibold text-action-primary-text\"\n >\n Retry\n </button>\n </div>\n ) : products.length === 0 ? (\n <div className=\"rounded-lg border border-border-default bg-bg-sunken p-8 text-center\">\n <FileCheck2 className=\"mx-auto mb-2 size-10 text-text-muted\" />\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherSubmissions.emptyTitle', {\n defaultValue: 'No submissions found yet.',\n })}\n </p>\n </div>\n ) : (\n <ul className=\"space-y-3\">\n {products.map((product) => (\n <li\n key={product.id}\n className=\"flex items-center justify-between rounded-lg border border-border-default p-3 transition-colors hover:bg-bg-sunken\"\n >\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/marketplace/product/${product.id}`)}\n className=\"flex flex-1 cursor-pointer items-center justify-between text-left\"\n >\n <div>\n <p className=\"font-medium text-text-primary\">{product.name}</p>\n <p className=\"text-xs text-text-muted\">Reviews: {product.reviewCount}</p>\n </div>\n <span\n className={`rounded-full px-2.5 py-1 text-xs font-semibold ${statusClass(product.status)}`}\n >\n {product.status}\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() =>\n navigate(`${basePath}/publisher/product/${product.id}/reviews`)\n }\n className=\"ml-3 inline-flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-xs font-medium text-text-link hover:bg-bg-sunken hover:underline\"\n title=\"View reviews\"\n >\n <MessageSquare className=\"size-3.5\" />\n Reviews\n </button>\n </li>\n ))}\n {hasMore && (\n <li className=\"flex justify-center pt-4 list-none\">\n <button\n type=\"button\"\n onClick={loadMore}\n disabled={loading}\n className=\"rounded-lg border border-border-default px-6 py-2.5 text-sm font-medium text-text-primary hover:bg-bg-subtle disabled:opacity-50\"\n >\n {loading ? 'Loading\\u2026' : 'Load more'}\n </button>\n </li>\n )}\n </ul>\n )}\n </div>\n </div>\n </main>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"PublisherSubmissionsPage.js","names":[],"sources":["../../src/pages/PublisherSubmissionsPage.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ArrowLeft, Clock3, CheckCircle2, XCircle, MessageSquare } from 'lucide-react';\nimport { useStore } from '../providers/StoreProvider';\nimport { useMyPublishedProducts } from '../hooks/useStoreGraphQL';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n GlassCard,\n EmphasisPanel,\n PagePurpose,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { useSubmissionStatusUpdatedSubscription } from '../generated/global-operations';\n\nconst statusClass = (status: string): string => {\n if (status === 'PUBLISHED' || status === 'APPROVED') {\n return 'bg-status-success-bg-subtle text-status-success-text';\n }\n if (status === 'REJECTED' || status === 'UNLISTED') {\n return 'bg-status-error-bg-subtle text-status-error-text';\n }\n if (status === 'PENDING' || status === 'SUBMITTED' || status === 'UNDER_REVIEW') {\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n }\n return 'bg-bg-sunken text-text-muted';\n};\n\nexport const PublisherSubmissionsPage: FC = () => {\n const navigate = useNavigate();\n const { basePath, currentUser } = useStore();\n const { products, hasMore, loading, error, refetch, loadMore } = useMyPublishedProducts();\n const { t } = useI18n();\n\n const publisherId = currentUser?.id;\n useSubmissionStatusUpdatedSubscription({\n variables: { publisherId: publisherId ?? '' },\n skip: !publisherId,\n onData: () => {\n void refetch();\n },\n onError: (err) => {\n console.warn('SubmissionStatusUpdated subscription error:', err.message);\n },\n });\n\n const grouped = useMemo(() => {\n const approved = products.filter(\n (p) => p.status === 'PUBLISHED' || p.status === 'APPROVED'\n ).length;\n const rejected = products.filter(\n (p) => p.status === 'REJECTED' || p.status === 'UNLISTED'\n ).length;\n const pending = products.length - approved - rejected;\n return { approved, rejected, pending };\n }, [products]);\n\n return (\n <div className=\"flex h-full flex-col\">\n <header className=\"border-b border-border-seam bg-bg-surface px-6 py-4\">\n <div className=\"mx-auto flex max-w-6xl items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigate(-1)}\n aria-label=\"Go back\"\n className=\"cursor-pointer rounded-lg p-2 text-text-muted hover:bg-bg-sunken hover:text-text-primary\"\n >\n <ArrowLeft className=\"size-5\" />\n </button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n {t('pages.publisherSubmissions.title', { defaultValue: 'Submissions' })}\n </h1>\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherSubmissions.subtitle', {\n defaultValue: 'Track approval status for your store products',\n })}\n </p>\n </div>\n </div>\n </header>\n\n <main className=\"flex-1 overflow-y-auto p-6\">\n <div className=\"mx-auto max-w-6xl space-y-6\">\n <PagePurpose>\n Follow each product you've submitted through the review pipeline — pending, approved or\n rejected — so you always know what's live and what still needs attention. If a submission\n is rejected, open it to read the moderator's reason and resubmit a fixed version.\n </PagePurpose>\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <Clock3 className=\"size-4\" />{' '}\n {t('store.status.pending', { defaultValue: 'Pending' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {grouped.pending}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <CheckCircle2 className=\"size-4\" />{' '}\n {t('store.status.approved', { defaultValue: 'Approved' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {grouped.approved}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted\">\n <XCircle className=\"size-4\" />{' '}\n {t('store.status.rejected', { defaultValue: 'Rejected' })}\n </div>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {grouped.rejected}\n </p>\n </GlassCard>\n </div>\n\n <EmphasisPanel>\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('pages.publisherSubmissions.timeline', { defaultValue: 'Submission Timeline' })}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/publisher/submit`)}\n className=\"cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-sm font-semibold text-action-primary-text\"\n >\n {t('pages.publisherSubmissions.newSubmission', { defaultValue: 'New Submission' })}\n </button>\n </div>\n\n {loading ? (\n <p role=\"status\" className=\"text-sm text-text-muted\">\n Loading submissions…\n </p>\n ) : error ? (\n <div role=\"alert\" className=\"space-y-2\">\n <p className=\"text-sm text-status-error-text\">\n {t('pages.publisherSubmissions.failedToLoad', {\n defaultValue: 'Failed to load submissions.',\n })}\n </p>\n <button\n type=\"button\"\n onClick={() => refetch()}\n className=\"cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-semibold text-action-primary-text\"\n >\n Retry\n </button>\n </div>\n ) : products.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('pages.publisherSubmissions.emptyTitle', {\n defaultValue: 'No submissions found yet.',\n })}\n description={t('pages.publisherSubmissions.emptyDescription', {\n defaultValue:\n 'Submit a product to start tracking it through review here.',\n })}\n action={\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/publisher/submit`)}\n className=\"cursor-pointer rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text hover:opacity-90\"\n >\n {t('pages.publisherSubmissions.newSubmission', {\n defaultValue: 'New Submission',\n })}\n </button>\n }\n />\n ) : (\n <ul className=\"space-y-3\">\n {products.map((product) => (\n <li\n key={product.id}\n className=\"flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface p-3 transition-[box-shadow,border-color] hover:border-border-strong hover:shadow-[var(--shadow-pop)]\"\n >\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/marketplace/product/${product.id}`)}\n className=\"flex flex-1 cursor-pointer items-center justify-between text-left\"\n >\n <div>\n <p className=\"font-medium text-text-primary\">{product.name}</p>\n <p className=\"text-xs text-text-muted\">Reviews: {product.reviewCount}</p>\n </div>\n <span\n className={`rounded-full px-2.5 py-1 text-xs font-semibold ${statusClass(product.status)}`}\n >\n {product.status}\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() =>\n navigate(`${basePath}/publisher/product/${product.id}/reviews`)\n }\n className=\"ml-3 inline-flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-xs font-medium text-text-link hover:bg-bg-sunken hover:underline\"\n title=\"View reviews\"\n >\n <MessageSquare className=\"size-3.5\" />\n Reviews\n </button>\n </li>\n ))}\n {hasMore && (\n <li className=\"flex justify-center pt-4 list-none\">\n <button\n type=\"button\"\n onClick={loadMore}\n disabled={loading}\n className=\"rounded-lg border border-border-default px-6 py-2.5 text-sm font-medium text-text-primary hover:bg-bg-subtle disabled:opacity-50\"\n >\n {loading ? 'Loading\\u2026' : 'Load more'}\n </button>\n </li>\n )}\n </ul>\n )}\n </EmphasisPanel>\n </div>\n </main>\n </div>\n );\n};\n"],"mappings":"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"}