@burdenoff/microfe-store 2026.625.2 → 2026.625.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +107 -120
  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 +90 -89
  95. package/dist/pages/AdminDashboardPage.js.map +1 -1
  96. package/dist/pages/AdminReviewModerationPage.js +58 -56
  97. package/dist/pages/AdminReviewModerationPage.js.map +1 -1
  98. package/dist/pages/AdminStoresPage.js +391 -372
  99. package/dist/pages/AdminStoresPage.js.map +1 -1
  100. package/dist/pages/AdminSubmissionsQueuePage.js +134 -148
  101. package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
  102. package/dist/pages/AppDetailPage.js +123 -120
  103. package/dist/pages/AppDetailPage.js.map +1 -1
  104. package/dist/pages/AppSettingsPage.js +70 -297
  105. package/dist/pages/AppSettingsPage.js.map +1 -1
  106. package/dist/pages/CartPage.js +65 -76
  107. package/dist/pages/CartPage.js.map +1 -1
  108. package/dist/pages/InstalledAppsPage.js +71 -100
  109. package/dist/pages/InstalledAppsPage.js.map +1 -1
  110. package/dist/pages/MarketplaceHomePage.js +368 -378
  111. package/dist/pages/MarketplaceHomePage.js.map +1 -1
  112. package/dist/pages/MyLicensesPage.js +67 -75
  113. package/dist/pages/MyLicensesPage.js.map +1 -1
  114. package/dist/pages/OrderConfirmationPage.js +38 -37
  115. package/dist/pages/OrderConfirmationPage.js.map +1 -1
  116. package/dist/pages/OrdersPage.js +53 -64
  117. package/dist/pages/OrdersPage.js.map +1 -1
  118. package/dist/pages/ProductDetailPage.js +101 -98
  119. package/dist/pages/ProductDetailPage.js.map +1 -1
  120. package/dist/pages/ProductReviewsPage.js +2 -2
  121. package/dist/pages/ProductReviewsPage.js.map +1 -1
  122. package/dist/pages/PublisherDashboardPage.js +93 -92
  123. package/dist/pages/PublisherDashboardPage.js.map +1 -1
  124. package/dist/pages/PublisherRevenuePage.js +61 -60
  125. package/dist/pages/PublisherRevenuePage.js.map +1 -1
  126. package/dist/pages/PublisherSubmissionsPage.js +97 -96
  127. package/dist/pages/PublisherSubmissionsPage.js.map +1 -1
  128. package/dist/pages/PublisherSubmitPage.js +189 -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
@@ -5,40 +5,41 @@ import { useI18n as r } from "@burdenoff/fe-libs/shared/providers/shell/I18nProv
5
5
  import { ArrowLeft as i, Download as a, LineChart as o, MessageSquare as s, Package2 as c, Plus as l, Star as u } from "lucide-react";
6
6
  import { jsx as d, jsxs as f } from "react/jsx-runtime";
7
7
  import { useNavigate as p } from "react-router-dom";
8
+ import { EmphasisPanel as m, GlassCard as h } from "@burdenoff/fe-libs/ui";
8
9
  //#region src/pages/PublisherDashboardPage.tsx
9
- var m = () => {
10
- let m = p(), { basePath: h } = e(), { t: g } = r(), { products: _, loading: v, error: y, refetch: b } = t(), x = n(() => {
11
- let e = _.length;
10
+ var g = () => {
11
+ let g = p(), { basePath: _ } = e(), { t: v } = r(), { products: y, loading: b, error: x, refetch: S } = t(), C = n(() => {
12
+ let e = y.length;
12
13
  return {
13
14
  totalProducts: e,
14
- totalDownloads: _.reduce((e, t) => e + (t.downloads ?? 0), 0),
15
- avgRating: e > 0 ? _.reduce((e, t) => e + (t.rating ?? 0), 0) / e : 0
15
+ totalDownloads: y.reduce((e, t) => e + (t.downloads ?? 0), 0),
16
+ avgRating: e > 0 ? y.reduce((e, t) => e + (t.rating ?? 0), 0) / e : 0
16
17
  };
17
- }, [_]);
18
+ }, [y]);
18
19
  return /* @__PURE__ */ f("div", {
19
20
  className: "flex h-full flex-col",
20
21
  children: [/* @__PURE__ */ d("header", {
21
- className: "border-b border-border-default bg-bg-surface px-6 py-4",
22
+ className: "border-b border-border-seam bg-bg-surface px-6 py-4",
22
23
  children: /* @__PURE__ */ f("div", {
23
24
  className: "mx-auto flex max-w-6xl items-center justify-between",
24
25
  children: [/* @__PURE__ */ f("div", {
25
26
  className: "flex items-center gap-3",
26
27
  children: [/* @__PURE__ */ d("button", {
27
28
  type: "button",
28
- onClick: () => m(-1),
29
+ onClick: () => g(-1),
29
30
  "aria-label": "Go back",
30
31
  className: "cursor-pointer rounded-lg p-2 text-text-muted transition-colors hover:bg-bg-sunken hover:text-text-primary",
31
32
  children: /* @__PURE__ */ d(i, { className: "size-5" })
32
33
  }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h1", {
33
34
  className: "text-2xl font-bold text-text-primary",
34
- children: g("pages.publisherDashboard.title", { defaultValue: "Publisher Dashboard" })
35
+ children: v("pages.publisherDashboard.title", { defaultValue: "Publisher Dashboard" })
35
36
  }), /* @__PURE__ */ d("p", {
36
37
  className: "text-sm text-text-muted",
37
- children: g("pages.publisherDashboard.subtitle", { defaultValue: "Manage your published products and performance" })
38
+ children: v("pages.publisherDashboard.subtitle", { defaultValue: "Manage your published products and performance" })
38
39
  })] })]
39
40
  }), /* @__PURE__ */ f("button", {
40
41
  type: "button",
41
- onClick: () => m(`${h}/publisher/submit`),
42
+ onClick: () => g(`${_}/publisher/submit`),
42
43
  className: "inline-flex cursor-pointer items-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text",
43
44
  children: [/* @__PURE__ */ d(l, { className: "size-4" }), "Submit Product"]
44
45
  })]
@@ -50,111 +51,111 @@ var m = () => {
50
51
  children: [/* @__PURE__ */ f("div", {
51
52
  className: "grid gap-4 sm:grid-cols-3",
52
53
  children: [
53
- /* @__PURE__ */ f("div", {
54
- className: "rounded-xl border border-border-default bg-bg-surface p-4",
54
+ /* @__PURE__ */ f(h, {
55
+ treatment: "metric",
56
+ className: "p-4",
55
57
  children: [/* @__PURE__ */ d("p", {
56
58
  className: "text-xs uppercase tracking-wide text-text-muted",
57
- children: g("pages.publisherDashboard.totalProducts", { defaultValue: "Published products" })
59
+ children: v("pages.publisherDashboard.totalProducts", { defaultValue: "Published products" })
58
60
  }), /* @__PURE__ */ d("p", {
59
- className: "mt-2 text-2xl font-bold text-text-primary",
60
- children: x.totalProducts
61
+ className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
62
+ children: C.totalProducts
61
63
  })]
62
64
  }),
63
- /* @__PURE__ */ f("div", {
64
- className: "rounded-xl border border-border-default bg-bg-surface p-4",
65
+ /* @__PURE__ */ f(h, {
66
+ treatment: "metric",
67
+ className: "p-4",
65
68
  children: [/* @__PURE__ */ d("p", {
66
69
  className: "text-xs uppercase tracking-wide text-text-muted",
67
- children: g("pages.publisherDashboard.totalInstalls", { defaultValue: "Total downloads" })
70
+ children: v("pages.publisherDashboard.totalInstalls", { defaultValue: "Total downloads" })
68
71
  }), /* @__PURE__ */ d("p", {
69
- className: "mt-2 text-2xl font-bold text-text-primary",
70
- children: x.totalDownloads
72
+ className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
73
+ children: C.totalDownloads
71
74
  })]
72
75
  }),
73
- /* @__PURE__ */ f("div", {
74
- className: "rounded-xl border border-border-default bg-bg-surface p-4",
76
+ /* @__PURE__ */ f(h, {
77
+ treatment: "metric",
78
+ className: "p-4",
75
79
  children: [/* @__PURE__ */ d("p", {
76
80
  className: "text-xs uppercase tracking-wide text-text-muted",
77
- children: g("pages.publisherDashboard.avgRating", { defaultValue: "Average rating" })
81
+ children: v("pages.publisherDashboard.avgRating", { defaultValue: "Average rating" })
78
82
  }), /* @__PURE__ */ d("p", {
79
- className: "mt-2 text-2xl font-bold text-text-primary",
80
- children: x.avgRating.toFixed(1)
83
+ className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
84
+ children: C.avgRating.toFixed(1)
81
85
  })]
82
86
  })
83
87
  ]
84
- }), /* @__PURE__ */ f("div", {
85
- className: "rounded-xl border border-border-default bg-bg-surface p-5",
86
- children: [/* @__PURE__ */ f("div", {
87
- className: "mb-4 flex items-center justify-between",
88
- children: [/* @__PURE__ */ d("h2", {
89
- className: "text-lg font-semibold text-text-primary",
90
- children: g("pages.publisherDashboard.yourProducts", { defaultValue: "Your Products" })
91
- }), /* @__PURE__ */ f("button", {
92
- type: "button",
93
- onClick: () => m(`${h}/publisher/revenue`),
94
- className: "inline-flex cursor-pointer items-center gap-1.5 text-sm font-medium text-text-link hover:underline",
95
- children: [/* @__PURE__ */ d(o, { className: "size-4" }), "Revenue"]
96
- })]
97
- }), v ? /* @__PURE__ */ d("p", {
98
- role: "status",
88
+ }), /* @__PURE__ */ f(m, { children: [/* @__PURE__ */ f("div", {
89
+ className: "mb-4 flex items-center justify-between",
90
+ children: [/* @__PURE__ */ d("h2", {
91
+ className: "text-lg font-semibold text-text-primary",
92
+ children: v("pages.publisherDashboard.yourProducts", { defaultValue: "Your Products" })
93
+ }), /* @__PURE__ */ f("button", {
94
+ type: "button",
95
+ onClick: () => g(`${_}/publisher/revenue`),
96
+ className: "inline-flex cursor-pointer items-center gap-1.5 text-sm font-medium text-text-link hover:underline",
97
+ children: [/* @__PURE__ */ d(o, { className: "size-4" }), "Revenue"]
98
+ })]
99
+ }), b ? /* @__PURE__ */ d("p", {
100
+ role: "status",
101
+ className: "text-sm text-text-muted",
102
+ children: v("common.loading", { defaultValue: "Loading..." })
103
+ }) : x ? /* @__PURE__ */ f("div", {
104
+ role: "alert",
105
+ className: "space-y-2",
106
+ children: [/* @__PURE__ */ d("p", {
107
+ className: "text-sm text-status-error-text",
108
+ children: v("pages.publisherDashboard.failedToLoad", { defaultValue: "Failed to load publisher products." })
109
+ }), /* @__PURE__ */ d("button", {
110
+ type: "button",
111
+ onClick: () => S(),
112
+ className: "cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-semibold text-action-primary-text",
113
+ children: "Retry"
114
+ })]
115
+ }) : y.length === 0 ? /* @__PURE__ */ f("div", {
116
+ className: "rounded-lg border border-border-default bg-bg-sunken p-6 text-center",
117
+ children: [/* @__PURE__ */ d(c, { className: "mx-auto mb-2 size-8 text-text-muted" }), /* @__PURE__ */ d("p", {
99
118
  className: "text-sm text-text-muted",
100
- children: g("common.loading", { defaultValue: "Loading..." })
101
- }) : y ? /* @__PURE__ */ f("div", {
102
- role: "alert",
103
- className: "space-y-2",
104
- children: [/* @__PURE__ */ d("p", {
105
- className: "text-sm text-status-error-text",
106
- children: g("pages.publisherDashboard.failedToLoad", { defaultValue: "Failed to load publisher products." })
107
- }), /* @__PURE__ */ d("button", {
119
+ children: v("pages.publisherDashboard.noProducts", { defaultValue: "No published products yet. Submit your first product to get started." })
120
+ })]
121
+ }) : /* @__PURE__ */ d("ul", {
122
+ className: "space-y-3",
123
+ children: y.map((e) => /* @__PURE__ */ f("li", {
124
+ 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)]",
125
+ children: [/* @__PURE__ */ f("button", {
108
126
  type: "button",
109
- onClick: () => b(),
110
- className: "cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-semibold text-action-primary-text",
111
- children: "Retry"
112
- })]
113
- }) : _.length === 0 ? /* @__PURE__ */ f("div", {
114
- className: "rounded-lg border border-border-default bg-bg-sunken p-6 text-center",
115
- children: [/* @__PURE__ */ d(c, { className: "mx-auto mb-2 size-8 text-text-muted" }), /* @__PURE__ */ d("p", {
116
- className: "text-sm text-text-muted",
117
- children: g("pages.publisherDashboard.noProducts", { defaultValue: "No published products yet. Submit your first product to get started." })
118
- })]
119
- }) : /* @__PURE__ */ d("ul", {
120
- className: "space-y-3",
121
- children: _.map((e) => /* @__PURE__ */ f("li", {
122
- className: "flex items-center justify-between rounded-lg border border-border-default p-3 transition-colors hover:bg-bg-sunken",
123
- children: [/* @__PURE__ */ f("button", {
124
- type: "button",
125
- onClick: () => m(`${h}/marketplace/product/${e.id}`),
126
- className: "flex flex-1 cursor-pointer items-center justify-between text-left",
127
- children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
128
- className: "font-medium text-text-primary",
129
- children: e.name
130
- }), /* @__PURE__ */ d("p", {
131
- className: "text-xs text-text-muted",
132
- children: e.status
133
- })] }), /* @__PURE__ */ f("div", {
134
- className: "flex items-center gap-4 text-xs text-text-muted",
135
- children: [/* @__PURE__ */ f("span", {
136
- className: "inline-flex items-center gap-1",
137
- children: [/* @__PURE__ */ d(u, { className: "size-3.5" }), (e.rating ?? 0).toFixed(1)]
138
- }), /* @__PURE__ */ f("span", {
139
- className: "inline-flex items-center gap-1",
140
- children: [/* @__PURE__ */ d(a, { className: "size-3.5" }), e.downloads]
141
- })]
127
+ onClick: () => g(`${_}/marketplace/product/${e.id}`),
128
+ className: "flex flex-1 cursor-pointer items-center justify-between text-left",
129
+ children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
130
+ className: "font-medium text-text-primary",
131
+ children: e.name
132
+ }), /* @__PURE__ */ d("p", {
133
+ className: "text-xs text-text-muted",
134
+ children: e.status
135
+ })] }), /* @__PURE__ */ f("div", {
136
+ className: "flex items-center gap-4 text-xs text-text-muted",
137
+ children: [/* @__PURE__ */ f("span", {
138
+ className: "inline-flex items-center gap-1",
139
+ children: [/* @__PURE__ */ d(u, { className: "size-3.5" }), (e.rating ?? 0).toFixed(1)]
140
+ }), /* @__PURE__ */ f("span", {
141
+ className: "inline-flex items-center gap-1",
142
+ children: [/* @__PURE__ */ d(a, { className: "size-3.5" }), e.downloads]
142
143
  })]
143
- }), /* @__PURE__ */ f("button", {
144
- type: "button",
145
- onClick: () => m(`${h}/publisher/product/${e.id}/reviews`),
146
- 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",
147
- title: "View reviews",
148
- children: [/* @__PURE__ */ d(s, { className: "size-3.5" }), "Reviews"]
149
144
  })]
150
- }, e.id))
151
- })]
152
- })]
145
+ }), /* @__PURE__ */ f("button", {
146
+ type: "button",
147
+ onClick: () => g(`${_}/publisher/product/${e.id}/reviews`),
148
+ 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",
149
+ title: "View reviews",
150
+ children: [/* @__PURE__ */ d(s, { className: "size-3.5" }), "Reviews"]
151
+ })]
152
+ }, e.id))
153
+ })] })]
153
154
  })
154
155
  })]
155
156
  });
156
157
  };
157
158
  //#endregion
158
- export { m as PublisherDashboardPage };
159
+ export { g as PublisherDashboardPage };
159
160
 
160
161
  //# sourceMappingURL=PublisherDashboardPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PublisherDashboardPage.js","names":[],"sources":["../../src/pages/PublisherDashboardPage.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ArrowLeft, Package2, Star, Download, Plus, LineChart, MessageSquare } from 'lucide-react';\nimport { useStore } from '../providers/StoreProvider';\nimport { useMyPublishedProducts } from '../hooks/useStoreGraphQL';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\nexport const PublisherDashboardPage: FC = () => {\n const navigate = useNavigate();\n const { basePath } = useStore();\n const { t } = useI18n();\n const { products, loading, error, refetch } = useMyPublishedProducts();\n\n const metrics = useMemo(() => {\n const totalProducts = products.length;\n const totalDownloads = products.reduce((sum, p) => sum + (p.downloads ?? 0), 0);\n const avgRating =\n totalProducts > 0 ? products.reduce((sum, p) => sum + (p.rating ?? 0), 0) / totalProducts : 0;\n return {\n totalProducts,\n totalDownloads,\n avgRating,\n };\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 justify-between\">\n <div className=\"flex 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 transition-colors 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.publisherDashboard.title', { defaultValue: 'Publisher Dashboard' })}\n </h1>\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherDashboard.subtitle', {\n defaultValue: 'Manage your published products and performance',\n })}\n </p>\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/publisher/submit`)}\n className=\"inline-flex cursor-pointer items-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text\"\n >\n <Plus className=\"size-4\" />\n Submit Product\n </button>\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 <p className=\"text-xs uppercase tracking-wide text-text-muted\">\n {t('pages.publisherDashboard.totalProducts', {\n defaultValue: 'Published products',\n })}\n </p>\n <p className=\"mt-2 text-2xl font-bold text-text-primary\">{metrics.totalProducts}</p>\n </div>\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-4\">\n <p className=\"text-xs uppercase tracking-wide text-text-muted\">\n {t('pages.publisherDashboard.totalInstalls', { defaultValue: 'Total downloads' })}\n </p>\n <p className=\"mt-2 text-2xl font-bold text-text-primary\">{metrics.totalDownloads}</p>\n </div>\n <div className=\"rounded-xl border border-border-default bg-bg-surface p-4\">\n <p className=\"text-xs uppercase tracking-wide text-text-muted\">\n {t('pages.publisherDashboard.avgRating', { defaultValue: 'Average rating' })}\n </p>\n <p className=\"mt-2 text-2xl font-bold text-text-primary\">\n {metrics.avgRating.toFixed(1)}\n </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.publisherDashboard.yourProducts', { defaultValue: 'Your Products' })}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/publisher/revenue`)}\n className=\"inline-flex cursor-pointer items-center gap-1.5 text-sm font-medium text-text-link hover:underline\"\n >\n <LineChart className=\"size-4\" />\n Revenue\n </button>\n </div>\n\n {loading ? (\n <p role=\"status\" className=\"text-sm text-text-muted\">\n {t('common.loading', { defaultValue: 'Loading...' })}\n </p>\n ) : error ? (\n <div role=\"alert\" className=\"space-y-2\">\n <p className=\"text-sm text-status-error-text\">\n {t('pages.publisherDashboard.failedToLoad', {\n defaultValue: 'Failed to load publisher products.',\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-6 text-center\">\n <Package2 className=\"mx-auto mb-2 size-8 text-text-muted\" />\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherDashboard.noProducts', {\n defaultValue:\n 'No published products yet. Submit your first product to get started.',\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\">{product.status}</p>\n </div>\n <div className=\"flex items-center gap-4 text-xs text-text-muted\">\n <span className=\"inline-flex items-center gap-1\">\n <Star className=\"size-3.5\" />\n {(product.rating ?? 0).toFixed(1)}\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <Download className=\"size-3.5\" />\n {product.downloads}\n </span>\n </div>\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 </ul>\n )}\n </div>\n </div>\n </main>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"PublisherDashboardPage.js","names":[],"sources":["../../src/pages/PublisherDashboardPage.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ArrowLeft, Package2, Star, Download, Plus, LineChart, 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 { GlassCard, EmphasisPanel } from '@burdenoff/fe-libs/ui';\n\nexport const PublisherDashboardPage: FC = () => {\n const navigate = useNavigate();\n const { basePath } = useStore();\n const { t } = useI18n();\n const { products, loading, error, refetch } = useMyPublishedProducts();\n\n const metrics = useMemo(() => {\n const totalProducts = products.length;\n const totalDownloads = products.reduce((sum, p) => sum + (p.downloads ?? 0), 0);\n const avgRating =\n totalProducts > 0 ? products.reduce((sum, p) => sum + (p.rating ?? 0), 0) / totalProducts : 0;\n return {\n totalProducts,\n totalDownloads,\n avgRating,\n };\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 justify-between\">\n <div className=\"flex 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 transition-colors 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.publisherDashboard.title', { defaultValue: 'Publisher Dashboard' })}\n </h1>\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherDashboard.subtitle', {\n defaultValue: 'Manage your published products and performance',\n })}\n </p>\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/publisher/submit`)}\n className=\"inline-flex cursor-pointer items-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text\"\n >\n <Plus className=\"size-4\" />\n Submit Product\n </button>\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 <GlassCard treatment=\"metric\" className=\"p-4\">\n <p className=\"text-xs uppercase tracking-wide text-text-muted\">\n {t('pages.publisherDashboard.totalProducts', {\n defaultValue: 'Published products',\n })}\n </p>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {metrics.totalProducts}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <p className=\"text-xs uppercase tracking-wide text-text-muted\">\n {t('pages.publisherDashboard.totalInstalls', { defaultValue: 'Total downloads' })}\n </p>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {metrics.totalDownloads}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <p className=\"text-xs uppercase tracking-wide text-text-muted\">\n {t('pages.publisherDashboard.avgRating', { defaultValue: 'Average rating' })}\n </p>\n <p className=\"mt-2 text-2xl font-bold tabular-nums text-text-primary\">\n {metrics.avgRating.toFixed(1)}\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.publisherDashboard.yourProducts', { defaultValue: 'Your Products' })}\n </h2>\n <button\n type=\"button\"\n onClick={() => navigate(`${basePath}/publisher/revenue`)}\n className=\"inline-flex cursor-pointer items-center gap-1.5 text-sm font-medium text-text-link hover:underline\"\n >\n <LineChart className=\"size-4\" />\n Revenue\n </button>\n </div>\n\n {loading ? (\n <p role=\"status\" className=\"text-sm text-text-muted\">\n {t('common.loading', { defaultValue: 'Loading...' })}\n </p>\n ) : error ? (\n <div role=\"alert\" className=\"space-y-2\">\n <p className=\"text-sm text-status-error-text\">\n {t('pages.publisherDashboard.failedToLoad', {\n defaultValue: 'Failed to load publisher products.',\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-6 text-center\">\n <Package2 className=\"mx-auto mb-2 size-8 text-text-muted\" />\n <p className=\"text-sm text-text-muted\">\n {t('pages.publisherDashboard.noProducts', {\n defaultValue:\n 'No published products yet. Submit your first product to get started.',\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-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\">{product.status}</p>\n </div>\n <div className=\"flex items-center gap-4 text-xs text-text-muted\">\n <span className=\"inline-flex items-center gap-1\">\n <Star className=\"size-3.5\" />\n {(product.rating ?? 0).toFixed(1)}\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <Download className=\"size-3.5\" />\n {product.downloads}\n </span>\n </div>\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 </ul>\n )}\n </EmphasisPanel>\n </div>\n </main>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -4,137 +4,138 @@ import { useI18n as n } from "@burdenoff/fe-libs/shared/providers/shell/I18nProv
4
4
  import { ArrowLeft as r, Clock3 as i, TrendingUp as a, Wallet as o } from "lucide-react";
5
5
  import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
6
6
  import { useNavigate as u } from "react-router-dom";
7
+ import { EmphasisPanel as d, GlassCard as f } from "@burdenoff/fe-libs/ui";
7
8
  //#region src/pages/PublisherRevenuePage.tsx
8
- var d = () => {
9
- let d = u(), { earnings: f, loading: p, error: m, refetch: h } = e(), { t: g } = n(), _ = f ?? null, v = _?.currency || "USD", y = t(() => new Intl.NumberFormat(void 0, {
9
+ var p = () => {
10
+ let p = u(), { earnings: m, loading: h, error: g, refetch: _ } = e(), { t: v } = n(), y = m ?? null, b = y?.currency || "USD", x = t(() => new Intl.NumberFormat(void 0, {
10
11
  style: "currency",
11
- currency: v,
12
+ currency: b,
12
13
  maximumFractionDigits: 2
13
- }), [v]);
14
+ }), [b]);
14
15
  return /* @__PURE__ */ l("div", {
15
16
  className: "flex h-full flex-col",
16
17
  children: [/* @__PURE__ */ c("header", {
17
- className: "border-b border-border-default bg-bg-surface px-6 py-4",
18
+ className: "border-b border-border-seam bg-bg-surface px-6 py-4",
18
19
  children: /* @__PURE__ */ l("div", {
19
20
  className: "mx-auto flex max-w-6xl items-center gap-3",
20
21
  children: [/* @__PURE__ */ c("button", {
21
22
  type: "button",
22
- onClick: () => d(-1),
23
+ onClick: () => p(-1),
23
24
  "aria-label": "Go back",
24
25
  className: "cursor-pointer rounded-lg p-2 text-text-muted hover:bg-bg-sunken hover:text-text-primary",
25
26
  children: /* @__PURE__ */ c(r, { className: "size-5" })
26
27
  }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
27
28
  className: "text-2xl font-bold text-text-primary",
28
- children: g("pages.publisherRevenue.title", { defaultValue: "Revenue" })
29
+ children: v("pages.publisherRevenue.title", { defaultValue: "Revenue" })
29
30
  }), /* @__PURE__ */ c("p", {
30
31
  className: "text-sm text-text-muted",
31
- children: g("pages.publisherRevenue.subtitle", { defaultValue: "Track publisher earnings and payouts" })
32
+ children: v("pages.publisherRevenue.subtitle", { defaultValue: "Track publisher earnings and payouts" })
32
33
  })] })]
33
34
  })
34
35
  }), /* @__PURE__ */ c("main", {
35
36
  className: "flex-1 overflow-y-auto p-6",
36
37
  children: /* @__PURE__ */ c("div", {
37
38
  className: "mx-auto max-w-6xl space-y-6",
38
- children: p ? /* @__PURE__ */ c("p", {
39
+ children: h ? /* @__PURE__ */ c("p", {
39
40
  role: "status",
40
41
  className: "text-sm text-text-muted",
41
42
  children: "Loading earnings…"
42
- }) : m ? /* @__PURE__ */ l("div", {
43
+ }) : g ? /* @__PURE__ */ l("div", {
43
44
  role: "alert",
44
45
  className: "space-y-2 rounded-xl border border-status-error-border bg-status-error-bg-subtle p-6",
45
46
  children: [/* @__PURE__ */ c("p", {
46
47
  className: "text-sm text-status-error-text",
47
- children: g("pages.publisherRevenue.failedToLoad", { defaultValue: "Failed to load earnings data." })
48
+ children: v("pages.publisherRevenue.failedToLoad", { defaultValue: "Failed to load earnings data." })
48
49
  }), /* @__PURE__ */ c("button", {
49
50
  type: "button",
50
- onClick: () => h(),
51
+ onClick: () => _(),
51
52
  className: "cursor-pointer rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-semibold text-action-primary-text",
52
53
  children: "Retry"
53
54
  })]
54
- }) : _ ? /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ l("div", {
55
+ }) : y ? /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ l("div", {
55
56
  className: "grid gap-4 sm:grid-cols-3",
56
57
  children: [
57
- /* @__PURE__ */ l("div", {
58
- className: "rounded-xl border border-border-default bg-bg-surface p-4",
58
+ /* @__PURE__ */ l(f, {
59
+ treatment: "glass",
60
+ className: "p-4",
59
61
  children: [/* @__PURE__ */ l("div", {
60
62
  className: "inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted",
61
63
  children: [
62
64
  /* @__PURE__ */ c(o, { className: "size-4" }),
63
65
  " ",
64
- g("pages.publisherRevenue.totalEarnings", { defaultValue: "Total earnings" })
66
+ v("pages.publisherRevenue.totalEarnings", { defaultValue: "Total earnings" })
65
67
  ]
66
68
  }), /* @__PURE__ */ c("p", {
67
- className: "mt-2 text-2xl font-bold text-text-primary",
68
- children: y.format(_.totalEarnings)
69
+ className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
70
+ children: x.format(y.totalEarnings)
69
71
  })]
70
72
  }),
71
- /* @__PURE__ */ l("div", {
72
- className: "rounded-xl border border-border-default bg-bg-surface p-4",
73
+ /* @__PURE__ */ l(f, {
74
+ treatment: "metric",
75
+ className: "p-4",
73
76
  children: [/* @__PURE__ */ l("div", {
74
77
  className: "inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted",
75
78
  children: [
76
79
  /* @__PURE__ */ c(i, { className: "size-4" }),
77
80
  " ",
78
- g("pages.publisherRevenue.monthlyEarnings", { defaultValue: "Monthly earnings" })
81
+ v("pages.publisherRevenue.monthlyEarnings", { defaultValue: "Monthly earnings" })
79
82
  ]
80
83
  }), /* @__PURE__ */ c("p", {
81
- className: "mt-2 text-2xl font-bold text-text-primary",
82
- children: y.format(_.monthlyEarnings)
84
+ className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
85
+ children: x.format(y.monthlyEarnings)
83
86
  })]
84
87
  }),
85
- /* @__PURE__ */ l("div", {
86
- className: "rounded-xl border border-border-default bg-bg-surface p-4",
88
+ /* @__PURE__ */ l(f, {
89
+ treatment: "metric",
90
+ className: "p-4",
87
91
  children: [/* @__PURE__ */ l("div", {
88
92
  className: "inline-flex items-center gap-2 text-xs uppercase tracking-wide text-text-muted",
89
93
  children: [
90
94
  /* @__PURE__ */ c(a, { className: "size-4" }),
91
95
  " ",
92
- g("pages.publisherRevenue.monthlyOrders", { defaultValue: "Monthly orders" })
96
+ v("pages.publisherRevenue.monthlyOrders", { defaultValue: "Monthly orders" })
93
97
  ]
94
98
  }), /* @__PURE__ */ c("p", {
95
- className: "mt-2 text-2xl font-bold text-text-primary",
96
- children: _.monthlyOrders
99
+ className: "mt-2 text-2xl font-bold tabular-nums text-text-primary",
100
+ children: y.monthlyOrders
97
101
  })]
98
102
  })
99
103
  ]
100
- }), /* @__PURE__ */ l("div", {
101
- className: "rounded-xl border border-border-default bg-bg-surface p-5",
102
- children: [/* @__PURE__ */ c("h2", {
103
- className: "mb-3 text-lg font-semibold text-text-primary",
104
- children: g("pages.publisherRevenue.topSelling", { defaultValue: "Top Selling Items" })
105
- }), !_.topSellingItems || _.topSellingItems.length === 0 ? /* @__PURE__ */ c("p", {
106
- className: "text-sm text-text-muted",
107
- children: g("pages.publisherRevenue.noSales", { defaultValue: "No product sales found for this period." })
108
- }) : /* @__PURE__ */ c("ul", {
109
- className: "space-y-2",
110
- children: _.topSellingItems.map((e) => /* @__PURE__ */ l("li", {
111
- className: "flex items-center justify-between rounded-lg border border-border-default p-3",
112
- children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
113
- className: "text-sm font-medium text-text-primary",
114
- children: e.storeProduct.name
115
- }), /* @__PURE__ */ l("p", {
116
- className: "text-xs text-text-muted",
117
- children: [
118
- e.totalSales,
119
- " total sales • ",
120
- e.monthlySales,
121
- " this period"
122
- ]
123
- })] }), /* @__PURE__ */ c("p", {
124
- className: "text-sm font-semibold text-text-primary",
125
- children: y.format(e.totalEarnings)
126
- })]
127
- }, e.storeProduct.id))
128
- })]
129
- })] }) : /* @__PURE__ */ c("div", {
104
+ }), /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c("h2", {
105
+ className: "mb-3 text-lg font-semibold text-text-primary",
106
+ children: v("pages.publisherRevenue.topSelling", { defaultValue: "Top Selling Items" })
107
+ }), !y.topSellingItems || y.topSellingItems.length === 0 ? /* @__PURE__ */ c("p", {
108
+ className: "text-sm text-text-muted",
109
+ children: v("pages.publisherRevenue.noSales", { defaultValue: "No product sales found for this period." })
110
+ }) : /* @__PURE__ */ c("ul", {
111
+ className: "space-y-2",
112
+ children: y.topSellingItems.map((e) => /* @__PURE__ */ l("li", {
113
+ className: "flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface p-3",
114
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
115
+ className: "text-sm font-medium text-text-primary",
116
+ children: e.storeProduct.name
117
+ }), /* @__PURE__ */ l("p", {
118
+ className: "text-xs text-text-muted",
119
+ children: [
120
+ e.totalSales,
121
+ " total sales • ",
122
+ e.monthlySales,
123
+ " this period"
124
+ ]
125
+ })] }), /* @__PURE__ */ c("p", {
126
+ className: "text-sm font-semibold text-text-primary",
127
+ children: x.format(e.totalEarnings)
128
+ })]
129
+ }, e.storeProduct.id))
130
+ })] })] }) : /* @__PURE__ */ c("div", {
130
131
  className: "rounded-xl border border-border-default bg-bg-surface p-8 text-center text-sm text-text-muted",
131
- children: g("pages.publisherRevenue.noRevenue", { defaultValue: "No revenue data available yet." })
132
+ children: v("pages.publisherRevenue.noRevenue", { defaultValue: "No revenue data available yet." })
132
133
  })
133
134
  })
134
135
  })]
135
136
  });
136
137
  };
137
138
  //#endregion
138
- export { d as PublisherRevenuePage };
139
+ export { p as PublisherRevenuePage };
139
140
 
140
141
  //# sourceMappingURL=PublisherRevenuePage.js.map
@@ -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 { GlassCard, EmphasisPanel } 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 {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 <GlassCard treatment=\"glass\" 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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"}