@burdenoff/microfe-store 2026.625.5 → 2026.626.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/StoreRoot.js +47 -90
  2. package/dist/StoreRoot.js.map +1 -1
  3. package/dist/StoreRoutes.js +93 -158
  4. package/dist/StoreRoutes.js.map +1 -1
  5. package/dist/components/AccessDenied.js +3 -3
  6. package/dist/components/AccessDenied.js.map +1 -1
  7. package/dist/components/InstallAppModal.js +175 -255
  8. package/dist/components/InstallAppModal.js.map +1 -1
  9. package/dist/components/cart/CartDrawer.js +10 -10
  10. package/dist/components/cart/CartDrawer.js.map +1 -1
  11. package/dist/hooks/useStoreGraphQL.js +107 -177
  12. package/dist/hooks/useStoreGraphQL.js.map +1 -1
  13. package/dist/index.js +3 -3
  14. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/errors/CombinedGraphQLErrors.js +1 -1
  15. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +1 -0
  16. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/errors/utils.js +1 -1
  17. package/dist/node_modules/@apollo/client/errors/utils.js.map +1 -0
  18. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/link/core/ApolloLink.js +2 -2
  19. package/dist/node_modules/@apollo/client/link/core/ApolloLink.js.map +1 -0
  20. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/link/subscriptions/index.js +2 -2
  21. package/dist/node_modules/@apollo/client/link/subscriptions/index.js.map +1 -0
  22. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/link/utils/createOperation.js +1 -1
  23. package/dist/node_modules/@apollo/client/link/utils/createOperation.js.map +1 -0
  24. package/dist/node_modules/@apollo/client/utilities/caching/sizes.js.map +1 -0
  25. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/graphql/print.js +1 -1
  26. package/dist/node_modules/@apollo/client/utilities/graphql/print.js.map +1 -0
  27. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/caches.js +2 -2
  28. package/dist/node_modules/@apollo/client/utilities/internal/caches.js.map +1 -0
  29. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/checkDocument.js +1 -1
  30. package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +1 -0
  31. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/getMainDefinition.js +1 -1
  32. package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +1 -0
  33. package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +9 -0
  34. package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +1 -0
  35. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/getOperationDefinition.js +1 -1
  36. package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +1 -0
  37. package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js +8 -0
  38. package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +1 -0
  39. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/globals/global.js +1 -1
  40. package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js.map +1 -0
  41. package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js +10 -0
  42. package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +1 -0
  43. package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js +8 -0
  44. package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js.map +1 -0
  45. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/makeUniqueId.js +1 -1
  46. package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +1 -0
  47. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/memoize.js +2 -2
  48. package/dist/node_modules/@apollo/client/utilities/internal/memoize.js.map +1 -0
  49. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/stringifyForDisplay.js +1 -1
  50. package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +1 -0
  51. package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/invariant/index.js +1 -1
  52. package/dist/node_modules/@apollo/client/utilities/invariant/index.js.map +1 -0
  53. package/dist/node_modules/@apollo/client/version.js +6 -0
  54. package/dist/node_modules/@apollo/client/version.js.map +1 -0
  55. package/dist/node_modules/{.bun/@wry_caches@1.0.1/node_modules/@wry → @wry}/caches/lib/weak.js +1 -1
  56. package/dist/node_modules/@wry/caches/lib/weak.js.map +1 -0
  57. package/dist/node_modules/{.bun/@wry_trie@0.5.0/node_modules/@wry → @wry}/trie/lib/index.js +1 -1
  58. package/dist/node_modules/@wry/trie/lib/index.js.map +1 -0
  59. package/dist/node_modules/{.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws → graphql-ws}/dist/client.js +1 -1
  60. package/dist/node_modules/graphql-ws/dist/client.js.map +1 -0
  61. package/dist/node_modules/{.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws → graphql-ws}/dist/common-CGW11Fyb.js +1 -1
  62. package/dist/node_modules/graphql-ws/dist/common-CGW11Fyb.js.map +1 -0
  63. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/NotificationFactories.js +1 -1
  64. package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +1 -0
  65. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/Observable.js +1 -1
  66. package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -0
  67. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/Subscriber.js +2 -2
  68. package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -0
  69. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/Subscription.js +2 -2
  70. package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -0
  71. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/config.js +1 -1
  72. package/dist/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -0
  73. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/observable/empty.js +1 -1
  74. package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -0
  75. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/scheduler/timeoutProvider.js +2 -2
  76. package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -0
  77. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/symbol/observable.js +1 -1
  78. package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -0
  79. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/UnsubscriptionError.js +1 -1
  80. package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -0
  81. package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +11 -0
  82. package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -0
  83. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/createErrorClass.js +1 -1
  84. package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -0
  85. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/errorContext.js +1 -1
  86. package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -0
  87. package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js +8 -0
  88. package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +1 -0
  89. package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +8 -0
  90. package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -0
  91. package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js +6 -0
  92. package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -0
  93. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/pipe.js +1 -1
  94. package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -0
  95. package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/reportUnhandledError.js +1 -1
  96. package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -0
  97. package/dist/node_modules/{.bun/tslib@2.8.1 → rxjs}/node_modules/tslib/tslib.es6.js +1 -1
  98. package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js.map +1 -0
  99. package/dist/pages/AdminDashboardPage.js +118 -91
  100. package/dist/pages/AdminDashboardPage.js.map +1 -1
  101. package/dist/pages/AdminReviewModerationPage.js +67 -61
  102. package/dist/pages/AdminReviewModerationPage.js.map +1 -1
  103. package/dist/pages/AdminStoresPage.js +424 -371
  104. package/dist/pages/AdminStoresPage.js.map +1 -1
  105. package/dist/pages/AdminSubmissionsQueuePage.js +303 -286
  106. package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
  107. package/dist/pages/AppDetailPage.js +172 -135
  108. package/dist/pages/AppDetailPage.js.map +1 -1
  109. package/dist/pages/AppSettingsPage.js +83 -300
  110. package/dist/pages/AppSettingsPage.js.map +1 -1
  111. package/dist/pages/CartPage.js +71 -79
  112. package/dist/pages/CartPage.js.map +1 -1
  113. package/dist/pages/InstalledAppsPage.js +120 -337
  114. package/dist/pages/InstalledAppsPage.js.map +1 -1
  115. package/dist/pages/MarketplaceHomePage.js +196 -205
  116. package/dist/pages/MarketplaceHomePage.js.map +1 -1
  117. package/dist/pages/MyLicensesPage.js +70 -75
  118. package/dist/pages/MyLicensesPage.js.map +1 -1
  119. package/dist/pages/OrderConfirmationPage.js +70 -37
  120. package/dist/pages/OrderConfirmationPage.js.map +1 -1
  121. package/dist/pages/OrdersPage.js +60 -68
  122. package/dist/pages/OrdersPage.js.map +1 -1
  123. package/dist/pages/ProductDetailPage.js +794 -752
  124. package/dist/pages/ProductDetailPage.js.map +1 -1
  125. package/dist/providers/StoreProvider.js +3 -3
  126. package/package.json +2 -2
  127. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +0 -1
  128. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/errors/utils.js.map +0 -1
  129. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/link/core/ApolloLink.js.map +0 -1
  130. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/link/subscriptions/index.js.map +0 -1
  131. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/link/utils/createOperation.js.map +0 -1
  132. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/caching/sizes.js.map +0 -1
  133. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/graphql/print.js.map +0 -1
  134. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/caches.js.map +0 -1
  135. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +0 -1
  136. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +0 -1
  137. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +0 -9
  138. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +0 -1
  139. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +0 -1
  140. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getOperationName.js +0 -8
  141. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +0 -1
  142. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/globals/global.js.map +0 -1
  143. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/globals/maybe.js +0 -10
  144. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +0 -1
  145. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/isNonNullObject.js +0 -8
  146. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/isNonNullObject.js.map +0 -1
  147. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +0 -1
  148. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/memoize.js.map +0 -1
  149. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +0 -1
  150. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/invariant/index.js.map +0 -1
  151. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/version.js +0 -6
  152. package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/version.js.map +0 -1
  153. package/dist/node_modules/.bun/@wry_caches@1.0.1/node_modules/@wry/caches/lib/weak.js.map +0 -1
  154. package/dist/node_modules/.bun/@wry_trie@0.5.0/node_modules/@wry/trie/lib/index.js.map +0 -1
  155. package/dist/node_modules/.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws/dist/client.js.map +0 -1
  156. package/dist/node_modules/.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws/dist/common-CGW11Fyb.js.map +0 -1
  157. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +0 -1
  158. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Observable.js.map +0 -1
  159. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +0 -1
  160. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +0 -1
  161. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/config.js.map +0 -1
  162. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +0 -1
  163. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +0 -1
  164. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +0 -1
  165. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +0 -1
  166. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +0 -11
  167. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +0 -1
  168. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +0 -1
  169. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +0 -1
  170. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js +0 -8
  171. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +0 -1
  172. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +0 -8
  173. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +0 -1
  174. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js +0 -6
  175. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +0 -1
  176. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +0 -1
  177. package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +0 -1
  178. package/dist/node_modules/.bun/tslib@2.8.1/node_modules/tslib/tslib.es6.js.map +0 -1
  179. package/dist/pages/ProductReviewsPage.js +0 -87
  180. package/dist/pages/ProductReviewsPage.js.map +0 -1
  181. package/dist/pages/PublisherDashboardPage.js +0 -160
  182. package/dist/pages/PublisherDashboardPage.js.map +0 -1
  183. package/dist/pages/PublisherRevenuePage.js +0 -140
  184. package/dist/pages/PublisherRevenuePage.js.map +0 -1
  185. package/dist/pages/PublisherSubmissionsPage.js +0 -179
  186. package/dist/pages/PublisherSubmissionsPage.js.map +0 -1
  187. package/dist/pages/PublisherSubmitPage.js +0 -230
  188. package/dist/pages/PublisherSubmitPage.js.map +0 -1
  189. /package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/caching/sizes.js +0 -0
@@ -3,15 +3,16 @@ import { useCart as t } from "../hooks/useCart.js";
3
3
  import { formatNumber as n, formatPrice as r } from "../utils/index.js";
4
4
  import { useCreateReview as ee, useDeleteReview as te, useMarkReviewHelpful as ne, useStoreProductDetails as re, useUpdateReview as ie } from "../hooks/useStoreGraphQL.js";
5
5
  import { useInstallations as ae } from "../hooks/useInstallations.js";
6
- import { nativeConfirm as oe, nativeImpact as se, nativeNotify as i } from "../utils/nativeBridge.js";
7
- import { InstallAppModal as ce } from "../components/InstallAppModal.js";
8
- import { useCallback as a, useEffect as le, useMemo as ue, useRef as de, useState as o } from "react";
9
- import { AlertCircle as s, ArrowLeft as fe, Check as pe, Loader2 as me, Package as he, ShieldCheck as c, ShoppingCart as ge, Star as l, ThumbsUp as u } from "lucide-react";
10
- import { Fragment as _e, jsx as d, jsxs as f } from "react/jsx-runtime";
11
- import { useLocation as ve, useNavigate as ye, useParams as be } from "react-router-dom";
12
- import { useEventBus as xe } from "@burdenoff/fe-libs/shared/events";
6
+ import { nativeConfirm as oe, nativeImpact as se, nativeNotify as ce } from "../utils/nativeBridge.js";
7
+ import { InstallAppModal as le } from "../components/InstallAppModal.js";
8
+ import { useCallback as i, useEffect as ue, useMemo as de, useRef as fe, useState as a } from "react";
9
+ import { AlertCircle as o, ArrowLeft as pe, Check as me, Loader2 as he, Package as ge, ShieldCheck as s, ShoppingCart as _e, Star as c, ThumbsUp as l } from "lucide-react";
10
+ import { Fragment as ve, jsx as u, jsxs as d } from "react/jsx-runtime";
11
+ import { useLocation as ye, useNavigate as be, useParams as xe } from "react-router-dom";
12
+ import { EmphasisPanel as Se, GlassCard as f, IllustratedEmptyState as Ce, NextSteps as we, PagePurpose as Te } from "@burdenoff/fe-libs/ui";
13
+ import { useEventBus as Ee } from "@burdenoff/fe-libs/shared/events";
13
14
  //#region src/pages/ProductDetailPage.tsx
14
- var Se = (e, t) => ({
15
+ var De = (e, t) => ({
15
16
  id: e.id,
16
17
  publisherId: t?.id || "",
17
18
  publisher: {
@@ -83,41 +84,41 @@ var Se = (e, t) => ({
83
84
  createdAt: e.createdAt,
84
85
  updatedAt: e.updatedAt,
85
86
  publishedAt: e.publishedAt
86
- }), Ce = ({ stars: e, percentage: t, count: r }) => /* @__PURE__ */ f("div", {
87
+ }), Oe = ({ stars: e, percentage: t, count: r }) => /* @__PURE__ */ d("div", {
87
88
  className: "flex items-center gap-2",
88
89
  children: [
89
- /* @__PURE__ */ d("span", {
90
+ /* @__PURE__ */ u("span", {
90
91
  className: "w-3 text-xs text-text-muted",
91
92
  children: e
92
93
  }),
93
- /* @__PURE__ */ d("div", {
94
+ /* @__PURE__ */ u("div", {
94
95
  className: "h-2 flex-1 overflow-hidden rounded-full bg-bg-sunken",
95
- children: /* @__PURE__ */ d("div", {
96
+ children: /* @__PURE__ */ u("div", {
96
97
  className: "h-full rounded-full bg-status-warning-bg-subtle",
97
98
  style: { width: `${t}%` }
98
99
  })
99
100
  }),
100
- /* @__PURE__ */ d("span", {
101
+ /* @__PURE__ */ u("span", {
101
102
  className: "w-12 text-right text-xs text-text-muted",
102
103
  children: n(r)
103
104
  })
104
105
  ]
105
- }), we = ({ review: e, onMarkHelpful: t, markingHelpful: n }) => /* @__PURE__ */ f("div", {
106
- className: "rounded-lg border border-border-default bg-bg-surface p-4",
106
+ }), ke = ({ review: e, onMarkHelpful: t, markingHelpful: n }) => /* @__PURE__ */ d("div", {
107
+ className: "rounded-lg border border-border-seam bg-bg-surface p-4 transition-[box-shadow,border-color] hover:border-border-strong hover:shadow-[var(--shadow-pop)]",
107
108
  children: [
108
- /* @__PURE__ */ d("div", {
109
+ /* @__PURE__ */ u("div", {
109
110
  className: "mb-3 flex items-start justify-between",
110
- children: /* @__PURE__ */ f("div", {
111
+ children: /* @__PURE__ */ d("div", {
111
112
  className: "flex items-center gap-3",
112
- children: [/* @__PURE__ */ d("div", {
113
+ children: [/* @__PURE__ */ u("div", {
113
114
  className: "flex size-10 items-center justify-center rounded-full bg-bg-sunken text-text-muted",
114
115
  children: e.userId.charAt(0).toUpperCase()
115
- }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ f("p", {
116
+ }), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ d("p", {
116
117
  className: "font-medium text-text-primary",
117
118
  children: ["User ", e.userId.slice(0, 8)]
118
- }), /* @__PURE__ */ f("div", {
119
+ }), /* @__PURE__ */ d("div", {
119
120
  className: "flex items-center gap-2",
120
- children: [/* @__PURE__ */ d("div", {
121
+ children: [/* @__PURE__ */ u("div", {
121
122
  className: "flex gap-0.5",
122
123
  children: [
123
124
  1,
@@ -125,8 +126,8 @@ var Se = (e, t) => ({
125
126
  3,
126
127
  4,
127
128
  5
128
- ].map((t) => /* @__PURE__ */ d(l, { className: `size-3 ${t <= e.rating ? "fill-current text-status-warning-text" : "text-text-muted"}` }, t))
129
- }), /* @__PURE__ */ d("span", {
129
+ ].map((t) => /* @__PURE__ */ u(c, { className: `size-3 ${t <= e.rating ? "fill-current text-status-warning-text" : "text-text-muted"}` }, t))
130
+ }), /* @__PURE__ */ u("span", {
130
131
  className: "text-xs text-text-muted",
131
132
  children: ((e) => {
132
133
  try {
@@ -143,147 +144,147 @@ var Se = (e, t) => ({
143
144
  })] })]
144
145
  })
145
146
  }),
146
- e.title && /* @__PURE__ */ d("h4", {
147
+ e.title && /* @__PURE__ */ u("h4", {
147
148
  className: "mb-2 font-medium text-text-primary",
148
149
  children: e.title
149
150
  }),
150
- e.comment && /* @__PURE__ */ d("p", {
151
+ e.comment && /* @__PURE__ */ u("p", {
151
152
  className: "mb-3 text-sm text-text-muted",
152
153
  children: e.comment
153
154
  }),
154
- /* @__PURE__ */ d("div", {
155
+ /* @__PURE__ */ u("div", {
155
156
  className: "flex items-center justify-between",
156
- children: /* @__PURE__ */ f("button", {
157
+ children: /* @__PURE__ */ d("button", {
157
158
  type: "button",
158
159
  onClick: () => t(e.id),
159
160
  disabled: n,
160
161
  "aria-label": `Mark review from ${e.userId} as helpful`,
161
162
  className: "flex items-center gap-1 text-xs text-text-muted transition-colors hover:text-text-primary disabled:cursor-not-allowed disabled:opacity-60",
162
- children: [/* @__PURE__ */ d(u, { className: "size-3.5" }), /* @__PURE__ */ d("span", { children: n ? "Updating…" : `Helpful (${e.helpful})` })]
163
+ children: [/* @__PURE__ */ u(l, { className: "size-3.5" }), /* @__PURE__ */ u("span", { children: n ? "Updating…" : `Helpful (${e.helpful})` })]
163
164
  })
164
165
  })
165
166
  ]
166
- }), Te = () => /* @__PURE__ */ f("div", {
167
+ }), Ae = () => /* @__PURE__ */ d("div", {
167
168
  className: "h-full overflow-y-auto",
168
- children: [/* @__PURE__ */ d("div", {
169
+ children: [/* @__PURE__ */ u("div", {
169
170
  className: "sticky top-0 z-10 border-b border-border-default bg-bg-surface px-6 py-4",
170
- children: /* @__PURE__ */ f("div", {
171
+ children: /* @__PURE__ */ d("div", {
171
172
  className: "flex items-center gap-4",
172
173
  children: [
173
- /* @__PURE__ */ d("div", { className: "size-10 animate-pulse rounded-lg bg-bg-sunken" }),
174
- /* @__PURE__ */ d("div", { className: "h-6 w-48 flex-1 animate-pulse rounded bg-bg-sunken" }),
175
- /* @__PURE__ */ f("div", {
174
+ /* @__PURE__ */ u("div", { className: "size-10 animate-pulse rounded-lg bg-bg-sunken" }),
175
+ /* @__PURE__ */ u("div", { className: "h-6 w-48 flex-1 animate-pulse rounded bg-bg-sunken" }),
176
+ /* @__PURE__ */ d("div", {
176
177
  className: "flex gap-2",
177
- children: [/* @__PURE__ */ d("div", { className: "size-10 animate-pulse rounded-lg bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "size-10 animate-pulse rounded-lg bg-bg-sunken" })]
178
+ children: [/* @__PURE__ */ u("div", { className: "size-10 animate-pulse rounded-lg bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "size-10 animate-pulse rounded-lg bg-bg-sunken" })]
178
179
  })
179
180
  ]
180
181
  })
181
- }), /* @__PURE__ */ f("div", {
182
+ }), /* @__PURE__ */ d("div", {
182
183
  className: "mx-auto max-w-6xl p-6",
183
184
  children: [
184
- /* @__PURE__ */ f("div", {
185
+ /* @__PURE__ */ d("div", {
185
186
  className: "mb-8 flex flex-col gap-6 md:flex-row",
186
- children: [/* @__PURE__ */ f("div", {
187
+ children: [/* @__PURE__ */ d("div", {
187
188
  className: "flex gap-4 md:w-1/2",
188
- children: [/* @__PURE__ */ d("div", { className: "size-28 animate-pulse rounded-2xl bg-bg-sunken" }), /* @__PURE__ */ f("div", {
189
+ children: [/* @__PURE__ */ u("div", { className: "size-28 animate-pulse rounded-2xl bg-bg-sunken" }), /* @__PURE__ */ d("div", {
189
190
  className: "flex flex-1 flex-col justify-center gap-2",
190
191
  children: [
191
- /* @__PURE__ */ d("div", { className: "h-8 w-3/4 animate-pulse rounded bg-bg-sunken" }),
192
- /* @__PURE__ */ f("div", {
192
+ /* @__PURE__ */ u("div", { className: "h-8 w-3/4 animate-pulse rounded bg-bg-sunken" }),
193
+ /* @__PURE__ */ d("div", {
193
194
  className: "flex items-center gap-2",
194
- children: [/* @__PURE__ */ d("div", { className: "h-4 w-32 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "size-4 animate-pulse rounded-full bg-bg-sunken" })]
195
+ children: [/* @__PURE__ */ u("div", { className: "h-4 w-32 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "size-4 animate-pulse rounded-full bg-bg-sunken" })]
195
196
  }),
196
- /* @__PURE__ */ f("div", {
197
+ /* @__PURE__ */ d("div", {
197
198
  className: "flex gap-3",
198
- children: [/* @__PURE__ */ d("div", { className: "h-5 w-16 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "h-5 w-24 animate-pulse rounded bg-bg-sunken" })]
199
+ children: [/* @__PURE__ */ u("div", { className: "h-5 w-16 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "h-5 w-24 animate-pulse rounded bg-bg-sunken" })]
199
200
  })
200
201
  ]
201
202
  })]
202
- }), /* @__PURE__ */ f("div", {
203
+ }), /* @__PURE__ */ d("div", {
203
204
  className: "flex flex-col gap-4 md:w-1/2 md:items-end",
204
- children: [/* @__PURE__ */ f("div", {
205
+ children: [/* @__PURE__ */ d("div", {
205
206
  className: "flex items-center gap-4",
206
207
  children: [
207
- /* @__PURE__ */ f("div", {
208
+ /* @__PURE__ */ d("div", {
208
209
  className: "text-center",
209
- children: [/* @__PURE__ */ d("div", { className: "h-10 w-16 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "mt-1 h-3 w-20 animate-pulse rounded bg-bg-sunken" })]
210
+ children: [/* @__PURE__ */ u("div", { className: "h-10 w-16 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "mt-1 h-3 w-20 animate-pulse rounded bg-bg-sunken" })]
210
211
  }),
211
- /* @__PURE__ */ d("div", { className: "h-12 w-px bg-border-default" }),
212
- /* @__PURE__ */ f("div", {
212
+ /* @__PURE__ */ u("div", { className: "h-12 w-px bg-border-default" }),
213
+ /* @__PURE__ */ d("div", {
213
214
  className: "text-center",
214
- children: [/* @__PURE__ */ d("div", { className: "h-8 w-16 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "mt-1 h-3 w-16 animate-pulse rounded bg-bg-sunken" })]
215
+ children: [/* @__PURE__ */ u("div", { className: "h-8 w-16 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "mt-1 h-3 w-16 animate-pulse rounded bg-bg-sunken" })]
215
216
  }),
216
- /* @__PURE__ */ d("div", { className: "h-12 w-px bg-border-default" }),
217
- /* @__PURE__ */ f("div", {
217
+ /* @__PURE__ */ u("div", { className: "h-12 w-px bg-border-default" }),
218
+ /* @__PURE__ */ d("div", {
218
219
  className: "text-center",
219
- children: [/* @__PURE__ */ d("div", { className: "h-8 w-20 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "mt-1 h-3 w-12 animate-pulse rounded bg-bg-sunken" })]
220
+ children: [/* @__PURE__ */ u("div", { className: "h-8 w-20 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "mt-1 h-3 w-12 animate-pulse rounded bg-bg-sunken" })]
220
221
  })
221
222
  ]
222
- }), /* @__PURE__ */ f("div", {
223
+ }), /* @__PURE__ */ d("div", {
223
224
  className: "flex gap-3",
224
- children: [/* @__PURE__ */ d("div", { className: "h-12 w-40 animate-pulse rounded-lg bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "size-12 animate-pulse rounded-lg bg-bg-sunken" })]
225
+ children: [/* @__PURE__ */ u("div", { className: "h-12 w-40 animate-pulse rounded-lg bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "size-12 animate-pulse rounded-lg bg-bg-sunken" })]
225
226
  })]
226
227
  })]
227
228
  }),
228
- /* @__PURE__ */ f("section", {
229
+ /* @__PURE__ */ d("section", {
229
230
  className: "mb-8",
230
- children: [/* @__PURE__ */ d("div", { className: "aspect-video animate-pulse rounded-lg bg-bg-sunken" }), /* @__PURE__ */ d("div", {
231
+ children: [/* @__PURE__ */ u("div", { className: "aspect-video animate-pulse rounded-lg bg-bg-sunken" }), /* @__PURE__ */ u("div", {
231
232
  className: "mt-4 flex gap-4",
232
233
  children: [...[
233
234
  ,
234
235
  ,
235
236
  ,
236
237
  ,
237
- ]].map((e, t) => /* @__PURE__ */ d("div", { className: "h-20 w-36 animate-pulse rounded-lg bg-bg-sunken" }, t))
238
+ ]].map((e, t) => /* @__PURE__ */ u("div", { className: "h-20 w-36 animate-pulse rounded-lg bg-bg-sunken" }, t))
238
239
  })]
239
240
  }),
240
- /* @__PURE__ */ f("section", {
241
+ /* @__PURE__ */ d("section", {
241
242
  className: "mb-8",
242
- children: [/* @__PURE__ */ f("div", {
243
+ children: [/* @__PURE__ */ d("div", {
243
244
  className: "mb-4 flex items-center gap-2",
244
- children: [/* @__PURE__ */ d("div", { className: "size-5 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "h-6 w-32 animate-pulse rounded bg-bg-sunken" })]
245
- }), /* @__PURE__ */ f("div", {
246
- className: "animate-pulse rounded-lg border border-border-default bg-bg-surface p-4",
247
- children: [/* @__PURE__ */ f("div", {
245
+ children: [/* @__PURE__ */ u("div", { className: "size-5 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "h-6 w-32 animate-pulse rounded bg-bg-sunken" })]
246
+ }), /* @__PURE__ */ d("div", {
247
+ className: "animate-pulse rounded-lg border border-border-seam bg-bg-surface p-4",
248
+ children: [/* @__PURE__ */ d("div", {
248
249
  className: "space-y-2",
249
250
  children: [
250
- /* @__PURE__ */ d("div", { className: "h-4 w-full rounded bg-bg-sunken" }),
251
- /* @__PURE__ */ d("div", { className: "h-4 w-full rounded bg-bg-sunken" }),
252
- /* @__PURE__ */ d("div", { className: "h-4 w-3/4 rounded bg-bg-sunken" }),
253
- /* @__PURE__ */ d("div", { className: "h-4 w-5/6 rounded bg-bg-sunken" })
251
+ /* @__PURE__ */ u("div", { className: "h-4 w-full rounded bg-bg-sunken" }),
252
+ /* @__PURE__ */ u("div", { className: "h-4 w-full rounded bg-bg-sunken" }),
253
+ /* @__PURE__ */ u("div", { className: "h-4 w-3/4 rounded bg-bg-sunken" }),
254
+ /* @__PURE__ */ u("div", { className: "h-4 w-5/6 rounded bg-bg-sunken" })
254
255
  ]
255
- }), /* @__PURE__ */ d("div", {
256
+ }), /* @__PURE__ */ u("div", {
256
257
  className: "mt-4 flex gap-2",
257
258
  children: [...[
258
259
  ,
259
260
  ,
260
261
  ,
261
262
  ,
262
- ]].map((e, t) => /* @__PURE__ */ d("div", { className: "h-6 w-16 rounded-full bg-bg-sunken" }, t))
263
+ ]].map((e, t) => /* @__PURE__ */ u("div", { className: "h-6 w-16 rounded-full bg-bg-sunken" }, t))
263
264
  })]
264
265
  })]
265
266
  }),
266
- /* @__PURE__ */ f("section", {
267
+ /* @__PURE__ */ d("section", {
267
268
  className: "mb-8",
268
269
  children: [
269
- /* @__PURE__ */ f("div", {
270
+ /* @__PURE__ */ d("div", {
270
271
  className: "mb-4 flex items-center justify-between",
271
- children: [/* @__PURE__ */ f("div", {
272
+ children: [/* @__PURE__ */ d("div", {
272
273
  className: "flex items-center gap-2",
273
- children: [/* @__PURE__ */ d("div", { className: "size-5 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "h-6 w-40 animate-pulse rounded bg-bg-sunken" })]
274
- }), /* @__PURE__ */ d("div", { className: "h-4 w-16 animate-pulse rounded bg-bg-sunken" })]
274
+ children: [/* @__PURE__ */ u("div", { className: "size-5 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "h-6 w-40 animate-pulse rounded bg-bg-sunken" })]
275
+ }), /* @__PURE__ */ u("div", { className: "h-4 w-16 animate-pulse rounded bg-bg-sunken" })]
275
276
  }),
276
- /* @__PURE__ */ f("div", {
277
+ /* @__PURE__ */ d("div", {
277
278
  className: "mb-6 flex flex-col gap-6 md:flex-row",
278
- children: [/* @__PURE__ */ d("div", {
279
- className: "animate-pulse rounded-lg border border-border-default bg-bg-surface p-4 md:w-64",
280
- children: /* @__PURE__ */ f("div", {
279
+ children: [/* @__PURE__ */ u("div", {
280
+ className: "animate-pulse rounded-lg border border-border-seam bg-bg-surface p-4 md:w-64",
281
+ children: /* @__PURE__ */ d("div", {
281
282
  className: "flex items-center gap-6",
282
- children: [/* @__PURE__ */ f("div", {
283
+ children: [/* @__PURE__ */ d("div", {
283
284
  className: "text-center",
284
285
  children: [
285
- /* @__PURE__ */ d("div", { className: "h-12 w-16 rounded bg-bg-sunken" }),
286
- /* @__PURE__ */ d("div", {
286
+ /* @__PURE__ */ u("div", { className: "h-12 w-16 rounded bg-bg-sunken" }),
287
+ /* @__PURE__ */ u("div", {
287
288
  className: "my-1 flex justify-center gap-0.5",
288
289
  children: [...[
289
290
  ,
@@ -291,11 +292,11 @@ var Se = (e, t) => ({
291
292
  ,
292
293
  ,
293
294
  ,
294
- ]].map((e, t) => /* @__PURE__ */ d("div", { className: "size-4 rounded bg-bg-sunken" }, t))
295
+ ]].map((e, t) => /* @__PURE__ */ u("div", { className: "size-4 rounded bg-bg-sunken" }, t))
295
296
  }),
296
- /* @__PURE__ */ d("div", { className: "h-3 w-20 rounded bg-bg-sunken" })
297
+ /* @__PURE__ */ u("div", { className: "h-3 w-20 rounded bg-bg-sunken" })
297
298
  ]
298
- }), /* @__PURE__ */ d("div", {
299
+ }), /* @__PURE__ */ u("div", {
299
300
  className: "flex-1 space-y-1",
300
301
  children: [...[
301
302
  ,
@@ -303,29 +304,29 @@ var Se = (e, t) => ({
303
304
  ,
304
305
  ,
305
306
  ,
306
- ]].map((e, t) => /* @__PURE__ */ f("div", {
307
+ ]].map((e, t) => /* @__PURE__ */ d("div", {
307
308
  className: "flex items-center gap-2",
308
309
  children: [
309
- /* @__PURE__ */ d("div", { className: "h-2 w-3 rounded bg-bg-sunken" }),
310
- /* @__PURE__ */ d("div", { className: "h-2 flex-1 rounded-full bg-bg-sunken" }),
311
- /* @__PURE__ */ d("div", { className: "h-2 w-8 rounded bg-bg-sunken" })
310
+ /* @__PURE__ */ u("div", { className: "h-2 w-3 rounded bg-bg-sunken" }),
311
+ /* @__PURE__ */ u("div", { className: "h-2 flex-1 rounded-full bg-bg-sunken" }),
312
+ /* @__PURE__ */ u("div", { className: "h-2 w-8 rounded bg-bg-sunken" })
312
313
  ]
313
314
  }, t))
314
315
  })]
315
316
  })
316
- }), /* @__PURE__ */ d("div", { className: "h-12 w-32 animate-pulse rounded-lg bg-bg-sunken" })]
317
+ }), /* @__PURE__ */ u("div", { className: "h-12 w-32 animate-pulse rounded-lg bg-bg-sunken" })]
317
318
  }),
318
- /* @__PURE__ */ d("div", {
319
+ /* @__PURE__ */ u("div", {
319
320
  className: "space-y-4",
320
- children: [...[, ,]].map((e, t) => /* @__PURE__ */ f("div", {
321
- className: "animate-pulse rounded-lg border border-border-default bg-bg-surface p-4",
322
- children: [/* @__PURE__ */ f("div", {
321
+ children: [...[, ,]].map((e, t) => /* @__PURE__ */ d("div", {
322
+ className: "animate-pulse rounded-lg border border-border-seam bg-bg-surface p-4",
323
+ children: [/* @__PURE__ */ d("div", {
323
324
  className: "mb-3 flex items-start gap-3",
324
- children: [/* @__PURE__ */ d("div", { className: "size-10 rounded-full bg-bg-sunken" }), /* @__PURE__ */ f("div", {
325
+ children: [/* @__PURE__ */ u("div", { className: "size-10 rounded-full bg-bg-sunken" }), /* @__PURE__ */ d("div", {
325
326
  className: "flex-1",
326
- children: [/* @__PURE__ */ d("div", { className: "h-4 w-32 rounded bg-bg-sunken" }), /* @__PURE__ */ f("div", {
327
+ children: [/* @__PURE__ */ u("div", { className: "h-4 w-32 rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", {
327
328
  className: "mt-1 flex items-center gap-2",
328
- children: [/* @__PURE__ */ d("div", {
329
+ children: [/* @__PURE__ */ u("div", {
329
330
  className: "flex gap-0.5",
330
331
  children: [...[
331
332
  ,
@@ -333,26 +334,26 @@ var Se = (e, t) => ({
333
334
  ,
334
335
  ,
335
336
  ,
336
- ]].map((e, t) => /* @__PURE__ */ d("div", { className: "size-3 rounded bg-bg-sunken" }, t))
337
- }), /* @__PURE__ */ d("div", { className: "h-3 w-20 rounded bg-bg-sunken" })]
337
+ ]].map((e, t) => /* @__PURE__ */ u("div", { className: "size-3 rounded bg-bg-sunken" }, t))
338
+ }), /* @__PURE__ */ u("div", { className: "h-3 w-20 rounded bg-bg-sunken" })]
338
339
  })]
339
340
  })]
340
- }), /* @__PURE__ */ f("div", {
341
+ }), /* @__PURE__ */ d("div", {
341
342
  className: "space-y-2",
342
- children: [/* @__PURE__ */ d("div", { className: "h-4 w-full rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "h-4 w-2/3 rounded bg-bg-sunken" })]
343
+ children: [/* @__PURE__ */ u("div", { className: "h-4 w-full rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "h-4 w-2/3 rounded bg-bg-sunken" })]
343
344
  })]
344
345
  }, t))
345
346
  })
346
347
  ]
347
348
  }),
348
- /* @__PURE__ */ f("section", {
349
+ /* @__PURE__ */ d("section", {
349
350
  className: "mb-8",
350
- children: [/* @__PURE__ */ f("div", {
351
+ children: [/* @__PURE__ */ d("div", {
351
352
  className: "mb-4 flex items-center gap-2",
352
- children: [/* @__PURE__ */ d("div", { className: "size-5 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "h-6 w-48 animate-pulse rounded bg-bg-sunken" })]
353
- }), /* @__PURE__ */ d("div", {
354
- className: "animate-pulse rounded-lg border border-border-default bg-bg-surface p-4",
355
- children: /* @__PURE__ */ d("div", {
353
+ children: [/* @__PURE__ */ u("div", { className: "size-5 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "h-6 w-48 animate-pulse rounded bg-bg-sunken" })]
354
+ }), /* @__PURE__ */ u("div", {
355
+ className: "animate-pulse rounded-lg border border-border-seam bg-bg-surface p-4",
356
+ children: /* @__PURE__ */ u("div", {
356
357
  className: "grid gap-4 md:grid-cols-2",
357
358
  children: [...[
358
359
  ,
@@ -361,37 +362,37 @@ var Se = (e, t) => ({
361
362
  ,
362
363
  ,
363
364
  ,
364
- ]].map((e, t) => /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("div", { className: "h-3 w-16 rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "mt-1 h-5 w-24 rounded bg-bg-sunken" })] }, t))
365
+ ]].map((e, t) => /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("div", { className: "h-3 w-16 rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "mt-1 h-5 w-24 rounded bg-bg-sunken" })] }, t))
365
366
  })
366
367
  })]
367
368
  }),
368
- /* @__PURE__ */ f("section", {
369
+ /* @__PURE__ */ d("section", {
369
370
  className: "mb-8",
370
- children: [/* @__PURE__ */ f("div", {
371
+ children: [/* @__PURE__ */ d("div", {
371
372
  className: "mb-4 flex items-center justify-between",
372
- children: [/* @__PURE__ */ f("div", {
373
+ children: [/* @__PURE__ */ d("div", {
373
374
  className: "flex items-center gap-2",
374
- children: [/* @__PURE__ */ d("div", { className: "size-5 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "h-6 w-40 animate-pulse rounded bg-bg-sunken" })]
375
- }), /* @__PURE__ */ d("div", { className: "h-4 w-16 animate-pulse rounded bg-bg-sunken" })]
376
- }), /* @__PURE__ */ d("div", {
375
+ children: [/* @__PURE__ */ u("div", { className: "size-5 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "h-6 w-40 animate-pulse rounded bg-bg-sunken" })]
376
+ }), /* @__PURE__ */ u("div", { className: "h-4 w-16 animate-pulse rounded bg-bg-sunken" })]
377
+ }), /* @__PURE__ */ u("div", {
377
378
  className: "grid gap-4 md:grid-cols-4",
378
379
  children: [...[
379
380
  ,
380
381
  ,
381
382
  ,
382
383
  ,
383
- ]].map((e, t) => /* @__PURE__ */ d("div", {
384
- className: "animate-pulse rounded-lg border border-border-default bg-bg-surface p-3",
385
- children: /* @__PURE__ */ f("div", {
384
+ ]].map((e, t) => /* @__PURE__ */ u("div", {
385
+ className: "animate-pulse rounded-lg border border-border-seam bg-bg-surface p-3",
386
+ children: /* @__PURE__ */ d("div", {
386
387
  className: "flex items-center gap-3",
387
- children: [/* @__PURE__ */ d("div", { className: "size-14 rounded-xl bg-bg-sunken" }), /* @__PURE__ */ f("div", {
388
+ children: [/* @__PURE__ */ u("div", { className: "size-14 rounded-xl bg-bg-sunken" }), /* @__PURE__ */ d("div", {
388
389
  className: "flex-1",
389
390
  children: [
390
- /* @__PURE__ */ d("div", { className: "h-4 w-24 rounded bg-bg-sunken" }),
391
- /* @__PURE__ */ d("div", { className: "mt-1 h-3 w-16 rounded bg-bg-sunken" }),
392
- /* @__PURE__ */ f("div", {
391
+ /* @__PURE__ */ u("div", { className: "h-4 w-24 rounded bg-bg-sunken" }),
392
+ /* @__PURE__ */ u("div", { className: "mt-1 h-3 w-16 rounded bg-bg-sunken" }),
393
+ /* @__PURE__ */ d("div", {
393
394
  className: "mt-1 flex items-center gap-2",
394
- children: [/* @__PURE__ */ d("div", { className: "h-3 w-8 rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "h-3 w-12 rounded bg-bg-sunken" })]
395
+ children: [/* @__PURE__ */ u("div", { className: "h-3 w-8 rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "h-3 w-12 rounded bg-bg-sunken" })]
395
396
  })
396
397
  ]
397
398
  })]
@@ -399,46 +400,46 @@ var Se = (e, t) => ({
399
400
  }, t))
400
401
  })]
401
402
  }),
402
- /* @__PURE__ */ f("section", {
403
+ /* @__PURE__ */ d("section", {
403
404
  className: "mb-8",
404
- children: [/* @__PURE__ */ d("div", { className: "mb-4 h-6 w-36 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ f("div", {
405
- className: "animate-pulse rounded-lg border border-border-default bg-bg-surface p-4",
406
- children: [/* @__PURE__ */ f("div", {
405
+ children: [/* @__PURE__ */ u("div", { className: "mb-4 h-6 w-36 animate-pulse rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", {
406
+ className: "animate-pulse rounded-lg border border-border-seam bg-bg-surface p-4",
407
+ children: [/* @__PURE__ */ d("div", {
407
408
  className: "flex items-center gap-4",
408
- children: [/* @__PURE__ */ d("div", { className: "size-12 rounded-lg bg-bg-sunken" }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ f("div", {
409
+ children: [/* @__PURE__ */ u("div", { className: "size-12 rounded-lg bg-bg-sunken" }), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ d("div", {
409
410
  className: "flex items-center gap-2",
410
- children: [/* @__PURE__ */ d("div", { className: "h-5 w-32 rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "size-4 rounded-full bg-bg-sunken" })]
411
- }), /* @__PURE__ */ d("div", { className: "mt-1 h-4 w-40 rounded bg-bg-sunken" })] })]
412
- }), /* @__PURE__ */ f("div", {
411
+ children: [/* @__PURE__ */ u("div", { className: "h-5 w-32 rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "size-4 rounded-full bg-bg-sunken" })]
412
+ }), /* @__PURE__ */ u("div", { className: "mt-1 h-4 w-40 rounded bg-bg-sunken" })] })]
413
+ }), /* @__PURE__ */ d("div", {
413
414
  className: "mt-3 space-y-2",
414
- children: [/* @__PURE__ */ d("div", { className: "h-4 w-full rounded bg-bg-sunken" }), /* @__PURE__ */ d("div", { className: "h-4 w-2/3 rounded bg-bg-sunken" })]
415
+ children: [/* @__PURE__ */ u("div", { className: "h-4 w-full rounded bg-bg-sunken" }), /* @__PURE__ */ u("div", { className: "h-4 w-2/3 rounded bg-bg-sunken" })]
415
416
  })]
416
417
  })]
417
418
  })
418
419
  ]
419
420
  })]
420
- }), Ee = ({ error: e, onRetry: t, onBack: n }) => /* @__PURE__ */ d("div", {
421
+ }), je = ({ error: e, onRetry: t, onBack: n }) => /* @__PURE__ */ u("div", {
421
422
  className: "flex h-full items-center justify-center",
422
- children: /* @__PURE__ */ f("div", {
423
+ children: /* @__PURE__ */ d("div", {
423
424
  className: "text-center",
424
425
  children: [
425
- /* @__PURE__ */ d(s, { className: "mx-auto mb-4 size-12 text-status-error-text" }),
426
- /* @__PURE__ */ d("h2", {
426
+ /* @__PURE__ */ u(o, { className: "mx-auto mb-4 size-12 text-status-error-text" }),
427
+ /* @__PURE__ */ u("h2", {
427
428
  className: "mb-2 text-xl font-semibold text-text-primary",
428
429
  children: "Failed to load product"
429
430
  }),
430
- /* @__PURE__ */ d("p", {
431
+ /* @__PURE__ */ u("p", {
431
432
  className: "mb-4 text-text-muted",
432
433
  children: e.message || "An error occurred while loading the product details."
433
434
  }),
434
- /* @__PURE__ */ f("div", {
435
+ /* @__PURE__ */ d("div", {
435
436
  className: "flex justify-center gap-3",
436
- children: [/* @__PURE__ */ d("button", {
437
+ children: [/* @__PURE__ */ u("button", {
437
438
  type: "button",
438
439
  onClick: t,
439
440
  className: "rounded-lg bg-action-primary-bg px-4 py-2 text-action-primary-text transition-opacity hover:opacity-90",
440
441
  children: "Try Again"
441
- }), /* @__PURE__ */ d("button", {
442
+ }), /* @__PURE__ */ u("button", {
442
443
  type: "button",
443
444
  onClick: n,
444
445
  className: "rounded-lg border border-border-default px-4 py-2 text-text-primary transition-colors hover:bg-bg-sunken",
@@ -447,176 +448,168 @@ var Se = (e, t) => ({
447
448
  })
448
449
  ]
449
450
  })
450
- }), De = () => {
451
- let { productId: s } = be(), u = ye(), De = ve(), { basePath: p, workspaceId: m } = e(), { addProduct: h, cartItems: Oe, addingToCart: ke, createOrder: Ae, checkingOut: je } = t(), { installations: Me, refetch: g } = ae({
452
- filter: ue(() => s && m ? {
453
- productId: s,
451
+ }), Me = () => {
452
+ let { productId: o } = xe(), l = be(), Me = ye(), { basePath: p, workspaceId: m } = e(), { addProduct: h, cartItems: Ne, addingToCart: g, createOrder: _, checkingOut: v } = t(), { installations: Pe, refetch: y } = ae({
453
+ filter: de(() => o && m ? {
454
+ productId: o,
454
455
  workspaceId: m
455
- } : void 0, [s, m]),
456
+ } : void 0, [o, m]),
456
457
  limit: 1
457
- }), Ne = Me.some((e) => e.productId === s && e.workspaceId === m && e.status === "ACTIVE"), { createReview: _, loading: v } = ee(), { updateReview: y, loading: Pe } = ie(), { deleteReview: b, loading: Fe } = te(), { markHelpful: Ie, loading: Le } = ne(), x = xe(), [S, Re] = o(!1), [C, ze] = o(!1), [Be, w] = o(!1), [Ve, T] = o(null), [E, D] = o(null), [He, O] = o("success"), [k, A] = o(!1), [j, M] = o(""), [N, P] = o(""), [F, I] = o(5), [Ue, L] = o(null), [We, R] = o(!1), { data: Ge, loading: Ke, error: z, refetch: B } = re({
458
- id: s,
459
- slug: s,
458
+ }), b = Pe.some((e) => e.productId === o && e.workspaceId === m && e.status === "ACTIVE"), { createReview: x, loading: S } = ee(), { updateReview: Fe, loading: Ie } = ie(), { deleteReview: Le, loading: Re } = te(), { markHelpful: ze, loading: Be } = ne(), C = Ee(), [w, Ve] = a(!1), [T, He] = a(!1), [Ue, E] = a(!1), [We, D] = a(null), [Ge, O] = a(null), [Ke, k] = a("success"), [A, j] = a(!1), [M, N] = a(""), [P, F] = a(""), [I, L] = a(5), [qe, Je] = a(null), [Ye, Xe] = a(!1), { data: Ze, loading: Qe, error: $e, refetch: R } = re({
459
+ id: o,
460
+ slug: o,
460
461
  includeReviews: !0,
461
462
  reviewsLimit: 10,
462
463
  includeRelated: !0,
463
464
  relatedLimit: 4,
464
465
  includeVersions: !0
465
- }), V = Ge, H = V?.product, U = V?.publisher, W = Oe.some((e) => e.productId === H?.id), qe = a(async () => {
466
- if (H) {
467
- if (T(null), W) {
468
- u(`${p}/cart`);
466
+ }), z = Ze, B = z?.product, V = z?.publisher, H = Ne.some((e) => e.productId === B?.id), et = i(async () => {
467
+ if (B) {
468
+ if (D(null), H) {
469
+ l(`${p}/cart`);
469
470
  return;
470
471
  }
471
472
  try {
472
- await h(Se(H, U), void 0, 1);
473
+ await h(De(B, V), void 0, 1);
473
474
  } catch (e) {
474
- console.error("Failed to add product to cart:", e), T("Failed to add this product to cart. Please try again.");
475
+ console.error("Failed to add product to cart:", e), D("Failed to add this product to cart. Please try again.");
475
476
  }
476
477
  }
477
478
  }, [
478
- H,
479
- U,
479
+ B,
480
+ V,
480
481
  h,
481
- W,
482
- u,
482
+ H,
483
+ l,
483
484
  p
484
- ]), Je = a(async () => {
485
- if (H) {
486
- T(null), w(!0);
485
+ ]), tt = i(async () => {
486
+ if (B) {
487
+ D(null), E(!0);
487
488
  try {
488
- let e = H.price || 0, t = await Ae({
489
+ let e = B.price || 0, t = await _({
489
490
  total: e,
490
491
  lineItems: [{
491
- productId: H.id,
492
- name: H.name,
492
+ productId: B.id,
493
+ name: B.name,
493
494
  quantity: 1,
494
495
  unitPrice: e,
495
496
  subtotal: e,
496
- itemType: H.nature?.toLowerCase() || "digital",
497
- pricingModel: H.pricingModel || "PAID_ONETIME"
497
+ itemType: B.nature?.toLowerCase() || "digital",
498
+ pricingModel: B.pricingModel || "PAID_ONETIME"
498
499
  }],
499
500
  billingAccountId: ""
500
501
  });
501
- t?.id ? u(`/billing/checkout/store/${t.id}${De.search}`) : (console.error("Failed to create order"), T("Failed to create order. Please try again."), w(!1));
502
+ t?.id ? l(`/billing/checkout/store/${t.id}${Me.search}`) : (console.error("Failed to create order"), D("Failed to create order. Please try again."), E(!1));
502
503
  } catch (e) {
503
- console.error("Buy Now error:", e), T(e instanceof Error ? e.message : "Failed to start checkout"), w(!1);
504
+ console.error("Buy Now error:", e), D(e instanceof Error ? e.message : "Failed to start checkout"), E(!1);
504
505
  }
505
506
  }
506
507
  }, [
507
- H,
508
- Ae,
509
- u
510
- ]), Ye = a(() => {
511
- H && R(!0);
512
- }, [H]), Xe = de(H);
513
- Xe.current = H;
514
- let Ze = de(x);
515
- Ze.current = x, le(() => {
516
- let e = Xe.current;
517
- e && Ze.current.emit("store.product.viewed", {
508
+ B,
509
+ _,
510
+ l
511
+ ]), U = i(() => {
512
+ B && Xe(!0);
513
+ }, [B]), nt = fe(B);
514
+ nt.current = B;
515
+ let rt = fe(C);
516
+ rt.current = C, ue(() => {
517
+ let e = nt.current;
518
+ e && rt.current.emit("store.product.viewed", {
518
519
  productId: e.id,
519
520
  productSlug: e.slug,
520
521
  productType: e.type,
521
522
  pricingModel: e.pricingModel
522
523
  });
523
- }, [H?.id]);
524
- let Qe = a((e, t) => {
525
- H && (x.emit("store.product.installed", {
526
- productId: H.id,
524
+ }, [B?.id]);
525
+ let it = i((e, t) => {
526
+ B && (C.emit("store.product.installed", {
527
+ productId: B.id,
527
528
  workspaceId: e
528
- }), console.log(`Successfully installed ${H.name} to workspace ${t} (${e})`), g());
529
+ }), console.log(`Successfully installed ${B.name} to workspace ${t} (${e})`), y());
529
530
  }, [
530
- H,
531
- x,
532
- g
533
- ]), $e = a((e) => {
531
+ B,
532
+ C,
533
+ y
534
+ ]), at = i((e) => {
534
535
  console.error("Installation failed:", e.message);
535
- }, []), et = a(() => {
536
- M(V?.userReview?.title ?? ""), P(V?.userReview?.comment ?? ""), I(V?.userReview?.rating ?? 5), D(null), O("success"), A(!0);
537
- }, [V?.userReview]), tt = a(async () => {
538
- if (!H) return;
539
- if (F < 1 || F > 5) {
540
- O("error"), D("Choose a rating from 1 to 5 stars.");
536
+ }, []), ot = i(() => {
537
+ N(z?.userReview?.title ?? ""), F(z?.userReview?.comment ?? ""), L(z?.userReview?.rating ?? 5), O(null), k("success"), j(!0);
538
+ }, [z?.userReview]), st = i(async () => {
539
+ if (!B) return;
540
+ if (I < 1 || I > 5) {
541
+ k("error"), O("Choose a rating from 1 to 5 stars.");
541
542
  return;
542
543
  }
543
544
  let e = {
544
- productId: H.id,
545
- rating: F,
546
- title: j.trim() || void 0,
547
- comment: N.trim() || void 0
545
+ productId: B.id,
546
+ rating: I,
547
+ title: M.trim() || void 0,
548
+ comment: P.trim() || void 0
548
549
  };
549
- if (!(V?.userReview ? await y(V.userReview.id, {
550
+ if (!(z?.userReview ? await Fe(z.userReview.id, {
550
551
  rating: e.rating,
551
552
  title: e.title,
552
553
  comment: e.comment
553
- }) : await _(e))) {
554
- O("error"), D("We could not save your review. Please try again.");
554
+ }) : await x(e))) {
555
+ k("error"), O("We could not save your review. Please try again.");
555
556
  return;
556
557
  }
557
- O("success"), D(V?.userReview ? "Your review was updated." : "Your review was submitted."), A(!1), x.emit("store.review.submitted", {
558
- productId: H.id,
559
- rating: F
560
- }), await B();
558
+ k("success"), O(z?.userReview ? "Your review was updated." : "Your review was submitted."), j(!1), C.emit("store.review.submitted", {
559
+ productId: B.id,
560
+ rating: I
561
+ }), await R();
561
562
  }, [
563
+ C,
562
564
  x,
563
- _,
564
- H,
565
- V?.userReview,
566
565
  B,
567
- N,
568
- F,
569
- j,
570
- y
571
- ]), nt = a(async () => {
572
- if (V?.userReview && (se("medium"), await oe({
566
+ z?.userReview,
567
+ R,
568
+ P,
569
+ I,
570
+ M,
571
+ Fe
572
+ ]), ct = i(async () => {
573
+ if (z?.userReview && (se("medium"), await oe({
573
574
  title: "Delete review",
574
575
  message: "Are you sure you want to remove your review?",
575
576
  okButtonTitle: "Delete",
576
577
  cancelButtonTitle: "Cancel"
577
578
  }) !== !1)) {
578
- if (!await b(V.userReview.id)) {
579
- O("error"), D("We could not remove your review. Please try again."), i("error");
579
+ if (!await Le(z.userReview.id)) {
580
+ k("error"), O("We could not remove your review. Please try again."), ce("error");
580
581
  return;
581
582
  }
582
- O("success"), D("Your review was removed."), A(!1), M(""), P(""), I(5), i("success"), await B();
583
+ k("success"), O("Your review was removed."), j(!1), N(""), F(""), L(5), ce("success"), await R();
583
584
  }
584
585
  }, [
585
- b,
586
- V?.userReview,
587
- B
588
- ]), rt = a(async (e) => {
589
- L(e), await Ie(e) && await B(), L(null);
590
- }, [Ie, B]);
591
- if (Ke) return /* @__PURE__ */ d(Te, {});
592
- if (z) return /* @__PURE__ */ d(Ee, {
593
- error: z,
594
- onRetry: B,
595
- onBack: () => u(`${p}/marketplace`)
586
+ Le,
587
+ z?.userReview,
588
+ R
589
+ ]), lt = i(async (e) => {
590
+ Je(e), await ze(e) && await R(), Je(null);
591
+ }, [ze, R]);
592
+ if (Qe) return /* @__PURE__ */ u(Ae, {});
593
+ if ($e) return /* @__PURE__ */ u(je, {
594
+ error: $e,
595
+ onRetry: R,
596
+ onBack: () => l(`${p}/marketplace`)
596
597
  });
597
- if (!V?.product) return /* @__PURE__ */ d("div", {
598
- className: "flex h-full items-center justify-center",
599
- children: /* @__PURE__ */ f("div", {
600
- className: "text-center",
601
- children: [
602
- /* @__PURE__ */ d("h2", {
603
- className: "mb-2 text-xl font-semibold text-text-primary",
604
- children: "Product not found"
605
- }),
606
- /* @__PURE__ */ d("p", {
607
- className: "mb-4 text-text-muted",
608
- children: "The product you are looking for does not exist or has been removed."
609
- }),
610
- /* @__PURE__ */ d("button", {
611
- type: "button",
612
- onClick: () => u(`${p}/marketplace`),
613
- className: "rounded-lg bg-action-primary-bg px-4 py-2 text-action-primary-text transition-opacity hover:opacity-90",
614
- children: "Back to Marketplace"
615
- })
616
- ]
598
+ if (!z?.product) return /* @__PURE__ */ u("div", {
599
+ className: "flex h-full items-center justify-center p-6",
600
+ children: /* @__PURE__ */ u(Ce, {
601
+ illustration: "empty-search",
602
+ title: "Product not found",
603
+ description: "The product you are looking for does not exist or has been removed.",
604
+ action: /* @__PURE__ */ u("button", {
605
+ type: "button",
606
+ onClick: () => l(`${p}/marketplace`),
607
+ className: "rounded-lg bg-action-primary-bg px-4 py-2 text-action-primary-text transition-opacity hover:opacity-90",
608
+ children: "Back to Marketplace"
609
+ })
617
610
  })
618
611
  });
619
- let { reviews: G, reviewsCount: it, relatedProducts: K, ratingDistribution: q, isPurchased: J, userEntitlement: Y } = V, X = H, Z = q ? q.fiveStars + q.fourStars + q.threeStars + q.twoStars + q.oneStar : 0, at = q ? [
612
+ let { reviews: W, reviewsCount: G, relatedProducts: K, ratingDistribution: q, isPurchased: J, userEntitlement: Y } = z, X = B, Z = q ? q.fiveStars + q.fourStars + q.threeStars + q.twoStars + q.oneStar : 0, ut = q ? [
620
613
  {
621
614
  stars: 5,
622
615
  count: q.fiveStars,
@@ -642,175 +635,180 @@ var Se = (e, t) => ({
642
635
  count: q.oneStar,
643
636
  percentage: Z > 0 ? q.oneStar / Z * 100 : 0
644
637
  }
645
- ] : [], Q = (X.requiredPermissions || []).filter((e) => e && e !== "[object Object]"), ot = X.integrationDeps || [], st = () => X.pricingModel === "FREE" ? "Free" : X.pricingModel === "SUBSCRIPTION" ? `${r(X.price, X.currency)}/mo` : r(X.price, X.currency), $ = X.pricingModel === "FREE" || X.price === 0;
646
- return /* @__PURE__ */ f("div", {
638
+ ] : [], Q = X.requiredPermissions || [], dt = X.integrationDeps || [], ft = () => X.pricingModel === "FREE" ? "Free" : X.pricingModel === "SUBSCRIPTION" ? `${r(X.price, X.currency)}/mo` : r(X.price, X.currency), $ = X.pricingModel === "FREE" || X.price === 0;
639
+ return /* @__PURE__ */ d("div", {
647
640
  className: "h-full overflow-y-auto bg-bg-base",
648
641
  children: [
649
- /* @__PURE__ */ d("div", {
642
+ /* @__PURE__ */ u("div", {
650
643
  className: "relative bg-bg-surface",
651
- children: /* @__PURE__ */ d("div", {
644
+ children: /* @__PURE__ */ u("div", {
652
645
  className: "mx-auto max-w-7xl",
653
- children: /* @__PURE__ */ f("div", {
646
+ children: /* @__PURE__ */ d("div", {
654
647
  className: "flex flex-col lg:flex-row",
655
- children: [/* @__PURE__ */ f("div", {
648
+ children: [/* @__PURE__ */ d("div", {
656
649
  className: "flex-1 px-6 py-8 lg:max-w-xl lg:py-12",
657
650
  children: [
658
- /* @__PURE__ */ f("button", {
651
+ /* @__PURE__ */ d("button", {
659
652
  type: "button",
660
- onClick: () => u(-1),
653
+ onClick: () => l(-1),
661
654
  className: "mb-6 cursor-pointer inline-flex items-center gap-2 text-sm text-text-muted transition-colors hover:text-text-primary",
662
- children: [/* @__PURE__ */ d(fe, { className: "size-4" }), "Back"]
655
+ children: [/* @__PURE__ */ u(pe, { className: "size-4" }), "Back"]
663
656
  }),
664
- /* @__PURE__ */ d("h1", {
657
+ /* @__PURE__ */ u("h1", {
665
658
  className: "mb-4 text-4xl font-normal leading-tight text-text-primary lg:text-5xl",
666
659
  children: X.name
667
660
  }),
668
- /* @__PURE__ */ f("div", {
661
+ /* @__PURE__ */ d("div", {
669
662
  className: "mb-2",
670
- children: [U?.websiteUrl ? /* @__PURE__ */ d("a", {
671
- href: U.websiteUrl,
663
+ children: [V?.websiteUrl ? /* @__PURE__ */ u("a", {
664
+ href: V.websiteUrl,
672
665
  target: "_blank",
673
666
  rel: "noreferrer",
674
667
  className: "text-base font-medium text-text-link hover:underline",
675
- children: U.name
676
- }) : /* @__PURE__ */ d("span", {
668
+ children: V.name
669
+ }) : /* @__PURE__ */ u("span", {
677
670
  className: "text-base font-medium text-text-primary",
678
- children: U?.name || X.authorName || "Unknown Publisher"
679
- }), U?.isVerified && /* @__PURE__ */ d(c, { className: "ml-1.5 inline size-4 text-status-success-text" })]
671
+ children: V?.name || X.authorName || "Unknown Publisher"
672
+ }), V?.isVerified && /* @__PURE__ */ u(s, { className: "ml-1.5 inline size-4 text-status-success-text" })]
680
673
  }),
681
- /* @__PURE__ */ f("p", {
674
+ /* @__PURE__ */ d("p", {
682
675
  className: "mb-6 text-sm text-text-muted",
683
676
  children: [
684
- X.category && /* @__PURE__ */ d("span", { children: X.category }),
677
+ X.category && /* @__PURE__ */ u("span", { children: X.category }),
685
678
  X.category && " · ",
686
679
  n(X.downloads),
687
680
  "+ downloads"
688
681
  ]
689
682
  }),
690
- /* @__PURE__ */ f("div", {
691
- className: "mb-6 flex items-center gap-4",
683
+ /* @__PURE__ */ d(Se, {
684
+ className: "mb-6 p-5",
692
685
  children: [
693
686
  /* @__PURE__ */ d("div", {
694
- className: "flex size-12 items-center justify-center overflow-hidden rounded-xl bg-bg-sunken",
695
- children: X.icon ? /* @__PURE__ */ d("img", {
696
- src: X.icon,
697
- alt: "",
698
- className: "size-full object-cover"
699
- }) : /* @__PURE__ */ d("span", {
700
- className: "text-lg font-bold text-text-muted",
701
- children: X.name.charAt(0)
702
- })
703
- }),
704
- /* @__PURE__ */ f("div", {
705
- className: "flex items-center gap-1 border-l border-border-default pl-4",
687
+ className: "mb-6 flex items-center gap-4",
706
688
  children: [
707
- /* @__PURE__ */ d("span", {
708
- className: "text-sm font-medium text-text-primary",
709
- children: (X.rating || 0).toFixed(1)
689
+ /* @__PURE__ */ u("div", {
690
+ className: "flex size-12 items-center justify-center overflow-hidden rounded-xl bg-bg-sunken",
691
+ children: X.icon ? /* @__PURE__ */ u("img", {
692
+ src: X.icon,
693
+ alt: "",
694
+ className: "size-full object-cover"
695
+ }) : /* @__PURE__ */ u("span", {
696
+ className: "text-lg font-bold text-text-muted",
697
+ children: X.name.charAt(0)
698
+ })
699
+ }),
700
+ /* @__PURE__ */ d("div", {
701
+ className: "flex items-center gap-1 border-l border-border-default pl-4",
702
+ children: [
703
+ /* @__PURE__ */ u("span", {
704
+ className: "text-sm font-medium text-text-primary",
705
+ children: (X.rating || 0).toFixed(1)
706
+ }),
707
+ /* @__PURE__ */ u(c, { className: "size-4 fill-current text-status-warning-text" }),
708
+ /* @__PURE__ */ d("span", {
709
+ className: "ml-1 text-xs text-text-muted",
710
+ children: [n(G || X.reviewCount), " reviews"]
711
+ })
712
+ ]
713
+ }),
714
+ /* @__PURE__ */ d("div", {
715
+ className: "border-l border-border-default pl-4",
716
+ children: [/* @__PURE__ */ d("span", {
717
+ className: "text-sm font-medium text-text-primary",
718
+ children: [n(X.downloads), "+"]
719
+ }), /* @__PURE__ */ u("p", {
720
+ className: "text-xs text-text-muted",
721
+ children: "Downloads"
722
+ })]
710
723
  }),
711
- /* @__PURE__ */ d(l, { className: "size-4 fill-current text-status-warning-text" }),
712
- /* @__PURE__ */ f("span", {
713
- className: "ml-1 text-xs text-text-muted",
714
- children: [n(it || X.reviewCount), " reviews"]
724
+ /* @__PURE__ */ d("div", {
725
+ className: "border-l border-border-default pl-4",
726
+ children: [/* @__PURE__ */ u("span", {
727
+ className: "rounded bg-bg-sunken px-2 py-1 text-xs font-medium text-text-primary",
728
+ children: X.type
729
+ }), /* @__PURE__ */ u("p", {
730
+ className: "mt-0.5 text-xs text-text-muted",
731
+ children: "Type"
732
+ })]
715
733
  })
716
734
  ]
717
735
  }),
718
- /* @__PURE__ */ f("div", {
719
- className: "border-l border-border-default pl-4",
720
- children: [/* @__PURE__ */ f("span", {
721
- className: "text-sm font-medium text-text-primary",
722
- children: [n(X.downloads), "+"]
723
- }), /* @__PURE__ */ d("p", {
724
- className: "text-xs text-text-muted",
725
- children: "Downloads"
726
- })]
736
+ We && /* @__PURE__ */ u("div", {
737
+ role: "alert",
738
+ className: "mb-4 rounded-lg border border-status-error-bg bg-status-error-bg-subtle px-4 py-3 text-sm text-status-error-text",
739
+ children: We
727
740
  }),
728
- /* @__PURE__ */ f("div", {
729
- className: "border-l border-border-default pl-4",
730
- children: [/* @__PURE__ */ d("span", {
731
- className: "rounded bg-bg-sunken px-2 py-1 text-xs font-medium text-text-primary",
732
- children: X.type
733
- }), /* @__PURE__ */ d("p", {
734
- className: "mt-0.5 text-xs text-text-muted",
735
- children: "Type"
741
+ /* @__PURE__ */ d("div", {
742
+ className: "mb-6 flex items-center gap-3",
743
+ children: [b ? /* @__PURE__ */ d("button", {
744
+ type: "button",
745
+ disabled: !0,
746
+ className: "flex items-center gap-2 rounded-full bg-status-success-bg-subtle px-8 py-3 font-medium text-status-success-text cursor-default",
747
+ children: [/* @__PURE__ */ u("svg", {
748
+ className: "size-4",
749
+ viewBox: "0 0 16 16",
750
+ fill: "none",
751
+ stroke: "currentColor",
752
+ strokeWidth: "2",
753
+ strokeLinecap: "round",
754
+ strokeLinejoin: "round",
755
+ "aria-hidden": "true",
756
+ children: /* @__PURE__ */ u("polyline", { points: "2,8 6,12 14,4" })
757
+ }), "Installed"]
758
+ }) : J && !$ ? /* @__PURE__ */ u("button", {
759
+ type: "button",
760
+ onClick: U,
761
+ className: "cursor-pointer rounded-full bg-action-primary-bg px-8 py-3 font-medium text-action-primary-text transition-opacity hover:opacity-90",
762
+ children: "Install to Workspace"
763
+ }) : $ ? /* @__PURE__ */ u("button", {
764
+ type: "button",
765
+ onClick: U,
766
+ className: "cursor-pointer rounded-full bg-action-primary-bg px-8 py-3 font-medium text-action-primary-text transition-opacity hover:opacity-90",
767
+ children: "Install"
768
+ }) : /* @__PURE__ */ u("button", {
769
+ type: "button",
770
+ onClick: tt,
771
+ disabled: Ue || v,
772
+ className: "cursor-pointer flex items-center gap-2 rounded-full bg-action-primary-bg px-8 py-3 font-medium text-action-primary-text transition-opacity hover:opacity-90 disabled:opacity-70",
773
+ children: Ue || v ? /* @__PURE__ */ d(ve, { children: [/* @__PURE__ */ u(he, { className: "size-4 animate-spin" }), "Processing…"] }) : `Buy ${ft()}`
774
+ }), !$ && !J && /* @__PURE__ */ d("button", {
775
+ type: "button",
776
+ onClick: et,
777
+ disabled: g,
778
+ className: "cursor-pointer flex items-center gap-2 rounded-full border border-border-default px-4 py-3 text-sm text-text-primary transition-colors hover:bg-bg-sunken disabled:opacity-50",
779
+ children: [g ? /* @__PURE__ */ u(he, { className: "size-4 animate-spin" }) : H ? /* @__PURE__ */ u(me, { className: "size-4 text-status-success-text" }) : /* @__PURE__ */ u(_e, { className: "size-4" }), H ? "In Cart" : "Add to Cart"]
736
780
  })]
781
+ }),
782
+ /* @__PURE__ */ d("p", {
783
+ className: "flex items-center gap-2 text-xs text-text-muted",
784
+ children: [/* @__PURE__ */ u(ge, { className: "size-4" }), "This app is available for your workspace"]
785
+ }),
786
+ Y && /* @__PURE__ */ d("p", {
787
+ className: "mt-2 flex items-center gap-2 text-xs text-text-muted",
788
+ children: [
789
+ /* @__PURE__ */ u(s, { className: "size-4 text-status-success-text" }),
790
+ "License: ",
791
+ Y.status,
792
+ Y.expiresAt && ` (Expires: ${new Date(Y.expiresAt).toLocaleDateString()})`
793
+ ]
737
794
  })
738
795
  ]
739
- }),
740
- Ve && /* @__PURE__ */ d("div", {
741
- role: "alert",
742
- className: "mb-4 rounded-lg border border-status-error-bg bg-status-error-bg-subtle px-4 py-3 text-sm text-status-error-text",
743
- children: Ve
744
- }),
745
- /* @__PURE__ */ f("div", {
746
- className: "mb-6 flex items-center gap-3",
747
- children: [Ne ? /* @__PURE__ */ f("button", {
748
- type: "button",
749
- disabled: !0,
750
- className: "flex items-center gap-2 rounded-full bg-status-success-bg-subtle px-8 py-3 font-medium text-status-success-text cursor-default",
751
- children: [/* @__PURE__ */ d("svg", {
752
- className: "size-4",
753
- viewBox: "0 0 16 16",
754
- fill: "none",
755
- stroke: "currentColor",
756
- strokeWidth: "2",
757
- strokeLinecap: "round",
758
- strokeLinejoin: "round",
759
- "aria-hidden": "true",
760
- children: /* @__PURE__ */ d("polyline", { points: "2,8 6,12 14,4" })
761
- }), "Installed"]
762
- }) : J && !$ ? /* @__PURE__ */ d("button", {
763
- type: "button",
764
- onClick: Ye,
765
- className: "cursor-pointer rounded-full bg-action-primary-bg px-8 py-3 font-medium text-action-primary-text transition-opacity hover:opacity-90",
766
- children: "Install to Workspace"
767
- }) : $ ? /* @__PURE__ */ d("button", {
768
- type: "button",
769
- onClick: Ye,
770
- className: "cursor-pointer rounded-full bg-action-primary-bg px-8 py-3 font-medium text-action-primary-text transition-opacity hover:opacity-90",
771
- children: "Install"
772
- }) : /* @__PURE__ */ d("button", {
773
- type: "button",
774
- onClick: Je,
775
- disabled: Be || je,
776
- className: "cursor-pointer flex items-center gap-2 rounded-full bg-action-primary-bg px-8 py-3 font-medium text-action-primary-text transition-opacity hover:opacity-90 disabled:opacity-70",
777
- children: Be || je ? /* @__PURE__ */ f(_e, { children: [/* @__PURE__ */ d(me, { className: "size-4 animate-spin" }), "Processing…"] }) : `Buy ${st()}`
778
- }), !$ && !J && /* @__PURE__ */ f("button", {
779
- type: "button",
780
- onClick: qe,
781
- disabled: ke,
782
- className: "cursor-pointer flex items-center gap-2 rounded-full border border-border-default px-4 py-3 text-sm text-text-primary transition-colors hover:bg-bg-sunken disabled:opacity-50",
783
- children: [ke ? /* @__PURE__ */ d(me, { className: "size-4 animate-spin" }) : W ? /* @__PURE__ */ d(pe, { className: "size-4 text-status-success-text" }) : /* @__PURE__ */ d(ge, { className: "size-4" }), W ? "In Cart" : "Add to Cart"]
784
- })]
785
- }),
786
- /* @__PURE__ */ f("p", {
787
- className: "flex items-center gap-2 text-xs text-text-muted",
788
- children: [/* @__PURE__ */ d(he, { className: "size-4" }), "This app is available for your workspace"]
789
- }),
790
- Y && /* @__PURE__ */ f("p", {
791
- className: "mt-2 flex items-center gap-2 text-xs text-text-muted",
792
- children: [
793
- /* @__PURE__ */ d(c, { className: "size-4 text-status-success-text" }),
794
- "License: ",
795
- Y.status,
796
- Y.expiresAt && ` (Expires: ${new Date(Y.expiresAt).toLocaleDateString()})`
797
- ]
798
796
  })
799
797
  ]
800
- }), /* @__PURE__ */ d("div", {
798
+ }), /* @__PURE__ */ u("div", {
801
799
  className: "relative flex-1 bg-bg-sunken lg:min-h-[500px]",
802
- children: X.screenshots && X.screenshots.length > 0 ? /* @__PURE__ */ d("img", {
800
+ children: X.screenshots && X.screenshots.length > 0 ? /* @__PURE__ */ u("img", {
803
801
  src: X.screenshots[0],
804
802
  alt: `${X.name} screenshot`,
805
803
  className: "size-full object-cover"
806
- }) : /* @__PURE__ */ d("div", {
804
+ }) : /* @__PURE__ */ u("div", {
807
805
  className: "flex h-full min-h-[300px] items-center justify-center",
808
- children: /* @__PURE__ */ f("div", {
806
+ children: /* @__PURE__ */ d("div", {
809
807
  className: "text-center",
810
- children: [/* @__PURE__ */ d("div", {
808
+ children: [/* @__PURE__ */ u("div", {
811
809
  className: "mx-auto mb-4 flex size-24 items-center justify-center rounded-2xl bg-bg-surface text-4xl font-bold text-text-muted",
812
810
  children: X.name.charAt(0)
813
- }), /* @__PURE__ */ d("p", {
811
+ }), /* @__PURE__ */ u("p", {
814
812
  className: "text-sm text-text-muted",
815
813
  children: "No preview available"
816
814
  })]
@@ -822,426 +820,470 @@ var Se = (e, t) => ({
822
820
  }),
823
821
  /* @__PURE__ */ d("main", {
824
822
  className: "mx-auto max-w-7xl px-6 py-8",
825
- children: /* @__PURE__ */ f("div", {
826
- className: "flex flex-col gap-8 lg:flex-row",
827
- children: [/* @__PURE__ */ f("div", {
828
- className: "flex-1 lg:max-w-3xl",
823
+ children: [
824
+ /* @__PURE__ */ d(Te, {
825
+ className: "mb-6",
829
826
  children: [
830
- X.screenshots && X.screenshots.length > 1 && /* @__PURE__ */ d("section", {
831
- className: "mb-8",
832
- children: /* @__PURE__ */ d("div", {
833
- className: "flex gap-4 overflow-x-auto pb-4",
834
- children: X.screenshots.map((e, t) => /* @__PURE__ */ d("div", {
835
- className: "relative h-64 w-96 flex-shrink-0 overflow-hidden rounded-xl bg-bg-sunken",
836
- children: /* @__PURE__ */ d("img", {
837
- src: e,
838
- alt: `Screenshot ${t + 1}`,
839
- className: "size-full object-cover"
840
- })
841
- }, t))
842
- })
843
- }),
844
- /* @__PURE__ */ f("section", {
845
- className: "mb-8",
846
- children: [
847
- /* @__PURE__ */ d("div", {
848
- className: "mb-4 flex items-center justify-between text-left",
849
- children: /* @__PURE__ */ d("h2", {
850
- className: "text-lg font-medium text-text-primary",
851
- children: "About this app"
852
- })
853
- }),
854
- /* @__PURE__ */ f("div", {
855
- className: "text-sm leading-relaxed text-text-secondary",
856
- children: [/* @__PURE__ */ d("p", {
857
- className: S ? "" : "line-clamp-4",
858
- children: X.longDescription || X.description || "No description available."
859
- }), ((X.longDescription || X.description)?.length ?? 0) > 200 && /* @__PURE__ */ d("button", {
860
- type: "button",
861
- onClick: () => Re(!S),
862
- className: "cursor-pointer mt-3 text-sm font-medium text-text-link",
863
- children: S ? "Show less" : "Show more"
864
- })]
865
- }),
866
- X.tags && X.tags.length > 0 && /* @__PURE__ */ d("div", {
867
- className: "mt-4 flex flex-wrap gap-2",
868
- children: X.tags.map((e) => /* @__PURE__ */ d("span", {
869
- className: "rounded-full border border-border-default px-3 py-1.5 text-xs text-text-muted transition-colors hover:bg-bg-sunken",
870
- children: e
871
- }, e))
827
+ "Everything you need to decide whether to install ",
828
+ X.name,
829
+ ": what it does, screenshots, pricing, the permissions and integrations it needs, and real customer reviews. When you're ready, install it (free apps) or buy it, then add it to a workspace — and leave a review once you've used it."
830
+ ]
831
+ }),
832
+ /* @__PURE__ */ u(we, {
833
+ className: "mb-8",
834
+ storageKey: "store-product-detail",
835
+ steps: [
836
+ $ ? {
837
+ id: "install",
838
+ label: "Install this app",
839
+ description: "It’s free — add it to a workspace in a couple of clicks.",
840
+ onClick: U,
841
+ done: b
842
+ } : {
843
+ id: "buy",
844
+ label: J ? "Install to a workspace" : "Buy or add to cart",
845
+ description: J ? "You already own this — install it where you need it." : "Purchase now, or add it to your cart to check out later.",
846
+ onClick: J ? U : tt,
847
+ done: b
848
+ },
849
+ ...Q.length > 0 ? [{
850
+ id: "permissions",
851
+ label: "Review what it can access",
852
+ description: "Check the permissions this app requires before installing.",
853
+ href: "#about-permissions"
854
+ }] : [],
855
+ {
856
+ id: "reviews",
857
+ label: "Read the reviews",
858
+ description: "See what other customers think before committing.",
859
+ href: "#ratings-reviews"
860
+ }
861
+ ]
862
+ }),
863
+ /* @__PURE__ */ d("div", {
864
+ className: "flex flex-col gap-8 lg:flex-row",
865
+ children: [/* @__PURE__ */ d("div", {
866
+ className: "flex-1 lg:max-w-3xl",
867
+ children: [
868
+ X.screenshots && X.screenshots.length > 1 && /* @__PURE__ */ u("section", {
869
+ className: "mb-8",
870
+ children: /* @__PURE__ */ u("div", {
871
+ className: "flex gap-4 overflow-x-auto pb-4",
872
+ children: X.screenshots.map((e, t) => /* @__PURE__ */ u("div", {
873
+ className: "relative h-64 w-96 flex-shrink-0 overflow-hidden rounded-xl bg-bg-sunken",
874
+ children: /* @__PURE__ */ u("img", {
875
+ src: e,
876
+ alt: `Screenshot ${t + 1}`,
877
+ className: "size-full object-cover"
878
+ })
879
+ }, t))
872
880
  })
873
- ]
874
- }),
875
- /* @__PURE__ */ f("section", {
876
- className: "mb-8",
877
- children: [
878
- /* @__PURE__ */ d("div", {
879
- className: "mb-4 flex items-center justify-between text-left",
880
- children: /* @__PURE__ */ d("h2", {
881
- className: "text-lg font-medium text-text-primary",
882
- children: "Ratings & Reviews"
883
- })
884
- }),
885
- /* @__PURE__ */ f("div", {
886
- className: "rounded-xl border border-border-default bg-bg-surface p-5",
887
- children: [G && G.length > 0 ? /* @__PURE__ */ f("div", {
888
- className: "flex items-start gap-8",
889
- children: [/* @__PURE__ */ f("div", {
890
- className: "text-center",
891
- children: [
892
- /* @__PURE__ */ d("p", {
893
- className: "text-5xl font-light text-text-primary",
894
- children: (X.rating || 0).toFixed(1)
895
- }),
896
- /* @__PURE__ */ d("div", {
897
- className: "my-2 flex justify-center gap-0.5",
898
- children: [
899
- 1,
900
- 2,
901
- 3,
902
- 4,
903
- 5
904
- ].map((e) => /* @__PURE__ */ d(l, { className: `size-4 ${e <= Math.round(X.rating || 0) ? "fill-current text-status-warning-text" : "text-text-muted"}` }, e))
905
- }),
906
- /* @__PURE__ */ f("p", {
907
- className: "text-sm text-text-muted",
908
- children: [n(it || X.reviewCount), " reviews"]
909
- })
910
- ]
911
- }), at.length > 0 && /* @__PURE__ */ d("div", {
912
- className: "flex-1 space-y-1.5",
913
- children: at.map((e) => /* @__PURE__ */ d(Ce, { ...e }, e.stars))
881
+ }),
882
+ /* @__PURE__ */ d("section", {
883
+ className: "mb-8",
884
+ children: [
885
+ /* @__PURE__ */ u("div", {
886
+ className: "mb-4 flex items-center justify-between text-left",
887
+ children: /* @__PURE__ */ u("h2", {
888
+ className: "text-lg font-medium text-text-primary",
889
+ children: "About this app"
890
+ })
891
+ }),
892
+ /* @__PURE__ */ d("div", {
893
+ className: "text-sm leading-relaxed text-text-secondary",
894
+ children: [/* @__PURE__ */ u("p", {
895
+ className: w ? "" : "line-clamp-4",
896
+ children: X.longDescription || X.description || "No description available."
897
+ }), ((X.longDescription || X.description)?.length ?? 0) > 200 && /* @__PURE__ */ u("button", {
898
+ type: "button",
899
+ onClick: () => Ve(!w),
900
+ className: "cursor-pointer mt-3 text-sm font-medium text-text-link",
901
+ children: w ? "Show less" : "Show more"
914
902
  })]
915
- }) : /* @__PURE__ */ f("div", {
916
- className: "flex flex-col items-center justify-center py-6 text-center",
917
- children: [
918
- /* @__PURE__ */ d("div", {
919
- className: "mb-3 flex gap-0.5",
920
- children: [
921
- 1,
922
- 2,
923
- 3,
924
- 4,
925
- 5
926
- ].map((e) => /* @__PURE__ */ d(l, { className: "size-5 text-border-default" }, e))
927
- }),
928
- /* @__PURE__ */ d("p", {
929
- className: "font-medium text-text-primary",
930
- children: "No reviews yet"
931
- }),
932
- /* @__PURE__ */ d("p", {
933
- className: "mt-1 text-sm text-text-muted",
934
- children: "Be the first to share your experience with this app."
935
- })
936
- ]
937
- }), /* @__PURE__ */ f("div", {
938
- className: "mt-6 border-t border-border-default pt-4",
939
- children: [E && /* @__PURE__ */ d("p", {
940
- role: He === "success" ? "status" : "alert",
941
- className: `mb-3 rounded-lg px-3 py-2 text-sm ${He === "success" ? "bg-status-success-bg-subtle text-status-success-text" : "bg-status-error-bg-subtle text-status-error-text"}`,
942
- children: E
943
- }), J || V?.userReview ? /* @__PURE__ */ f("div", {
944
- className: "space-y-4",
945
- children: [/* @__PURE__ */ d("button", {
946
- type: "button",
947
- onClick: () => k ? A(!1) : et(),
948
- className: "w-full cursor-pointer py-2 text-center text-sm font-medium text-text-primary transition-colors hover:text-text-link",
949
- children: V?.userReview ? k ? "Cancel review editing" : "Edit your review" : k ? "Cancel review" : "Write a Review"
950
- }), k && /* @__PURE__ */ f("div", {
951
- className: "rounded-xl border border-border-default bg-bg-sunken p-4",
903
+ }),
904
+ X.tags && X.tags.length > 0 && /* @__PURE__ */ u("div", {
905
+ className: "mt-4 flex flex-wrap gap-2",
906
+ children: X.tags.map((e) => /* @__PURE__ */ u("span", {
907
+ className: "rounded-full border border-border-seam px-3 py-1.5 text-xs text-text-muted transition-colors hover:bg-bg-sunken",
908
+ children: e
909
+ }, e))
910
+ })
911
+ ]
912
+ }),
913
+ /* @__PURE__ */ d("section", {
914
+ id: "ratings-reviews",
915
+ className: "mb-8 scroll-mt-6",
916
+ children: [
917
+ /* @__PURE__ */ u("div", {
918
+ className: "mb-4 flex items-center justify-between text-left",
919
+ children: /* @__PURE__ */ u("h2", {
920
+ className: "text-lg font-medium text-text-primary",
921
+ children: "Ratings & Reviews"
922
+ })
923
+ }),
924
+ /* @__PURE__ */ d(f, {
925
+ treatment: "insight",
926
+ className: "p-5",
927
+ children: [W && W.length > 0 ? /* @__PURE__ */ d("div", {
928
+ className: "flex items-start gap-8",
929
+ children: [/* @__PURE__ */ d("div", {
930
+ className: "text-center",
952
931
  children: [
953
- /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
954
- className: "text-sm font-medium text-text-primary",
955
- children: "Your rating"
956
- }), /* @__PURE__ */ d("div", {
957
- className: "mt-2 flex flex-wrap gap-2",
932
+ /* @__PURE__ */ u("p", {
933
+ className: "text-5xl font-light tabular-nums text-text-primary",
934
+ children: (X.rating || 0).toFixed(1)
935
+ }),
936
+ /* @__PURE__ */ u("div", {
937
+ className: "my-2 flex justify-center gap-0.5",
958
938
  children: [
959
939
  1,
960
940
  2,
961
941
  3,
962
942
  4,
963
943
  5
964
- ].map((e) => /* @__PURE__ */ f("button", {
965
- type: "button",
966
- onClick: () => I(e),
967
- className: `cursor-pointer rounded-full border px-3 py-1.5 text-sm transition-colors ${F === e ? "border-action-primary-border bg-action-primary-bg text-action-primary-text" : "border-border-default bg-bg-surface text-text-primary hover:bg-bg-surface"}`,
968
- children: [e, " ★"]
969
- }, e))
970
- })] }),
971
- /* @__PURE__ */ f("label", {
972
- className: "mt-4 block text-sm font-medium text-text-primary",
973
- children: ["Title", /* @__PURE__ */ d("input", {
974
- "aria-label": "Review title",
975
- value: j,
976
- onChange: (e) => M(e.target.value),
977
- className: "mt-2 w-full rounded-lg border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary outline-none focus:border-action-primary-border",
978
- placeholder: "Summarize your experience"
979
- })]
944
+ ].map((e) => /* @__PURE__ */ u(c, { className: `size-4 ${e <= Math.round(X.rating || 0) ? "fill-current text-status-warning-text" : "text-text-muted"}` }, e))
980
945
  }),
981
- /* @__PURE__ */ f("label", {
982
- className: "mt-4 block text-sm font-medium text-text-primary",
983
- children: ["Review", /* @__PURE__ */ d("textarea", {
984
- "aria-label": "Review body",
985
- value: N,
986
- onChange: (e) => P(e.target.value),
987
- rows: 4,
988
- required: !0,
989
- "aria-required": "true",
990
- className: "mt-2 w-full rounded-lg border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary outline-none focus:border-action-primary-border",
991
- placeholder: "What worked well? What should improve?"
992
- })]
993
- }),
994
- /* @__PURE__ */ f("div", {
995
- className: "mt-4 flex flex-wrap gap-3",
996
- children: [/* @__PURE__ */ d("button", {
997
- type: "button",
998
- onClick: tt,
999
- disabled: v || Pe,
1000
- className: "cursor-pointer rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60",
1001
- children: v || Pe ? "Saving..." : V?.userReview ? "Update Review" : "Submit Review"
1002
- }), V?.userReview && /* @__PURE__ */ d("button", {
1003
- type: "button",
1004
- onClick: nt,
1005
- disabled: Fe,
1006
- className: "cursor-pointer rounded-lg border border-status-error-border px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle disabled:cursor-not-allowed disabled:opacity-60",
1007
- children: Fe ? "Removing..." : "Delete Review"
1008
- })]
946
+ /* @__PURE__ */ d("p", {
947
+ className: "text-sm text-text-muted",
948
+ children: [n(G || X.reviewCount), " reviews"]
1009
949
  })
1010
950
  ]
951
+ }), ut.length > 0 && /* @__PURE__ */ u("div", {
952
+ className: "flex-1 space-y-1.5",
953
+ children: ut.map((e) => /* @__PURE__ */ u(Oe, { ...e }, e.stars))
954
+ })]
955
+ }) : /* @__PURE__ */ d("div", {
956
+ className: "flex flex-col items-center justify-center py-6 text-center",
957
+ children: [
958
+ /* @__PURE__ */ u("div", {
959
+ className: "mb-3 flex gap-0.5",
960
+ children: [
961
+ 1,
962
+ 2,
963
+ 3,
964
+ 4,
965
+ 5
966
+ ].map((e) => /* @__PURE__ */ u(c, { className: "size-5 text-border-default" }, e))
967
+ }),
968
+ /* @__PURE__ */ u("p", {
969
+ className: "font-medium text-text-primary",
970
+ children: "No reviews yet"
971
+ }),
972
+ /* @__PURE__ */ u("p", {
973
+ className: "mt-1 text-sm text-text-muted",
974
+ children: "Be the first to share your experience with this app."
975
+ })
976
+ ]
977
+ }), /* @__PURE__ */ d("div", {
978
+ className: "mt-6 border-t border-border-seam pt-4",
979
+ children: [Ge && /* @__PURE__ */ u("p", {
980
+ role: Ke === "success" ? "status" : "alert",
981
+ className: `mb-3 rounded-lg px-3 py-2 text-sm ${Ke === "success" ? "bg-status-success-bg-subtle text-status-success-text" : "bg-status-error-bg-subtle text-status-error-text"}`,
982
+ children: Ge
983
+ }), J || z?.userReview ? /* @__PURE__ */ d("div", {
984
+ className: "space-y-4",
985
+ children: [/* @__PURE__ */ u("button", {
986
+ type: "button",
987
+ onClick: () => A ? j(!1) : ot(),
988
+ className: "w-full cursor-pointer py-2 text-center text-sm font-medium text-text-primary transition-colors hover:text-text-link",
989
+ children: z?.userReview ? A ? "Cancel review editing" : "Edit your review" : A ? "Cancel review" : "Write a Review"
990
+ }), A && /* @__PURE__ */ d("div", {
991
+ className: "rounded-xl border border-border-seam bg-bg-sunken p-4",
992
+ children: [
993
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
994
+ className: "text-sm font-medium text-text-primary",
995
+ children: "Your rating"
996
+ }), /* @__PURE__ */ u("div", {
997
+ className: "mt-2 flex flex-wrap gap-2",
998
+ children: [
999
+ 1,
1000
+ 2,
1001
+ 3,
1002
+ 4,
1003
+ 5
1004
+ ].map((e) => /* @__PURE__ */ d("button", {
1005
+ type: "button",
1006
+ onClick: () => L(e),
1007
+ className: `cursor-pointer rounded-full border px-3 py-1.5 text-sm transition-colors ${I === e ? "border-action-primary-border bg-action-primary-bg text-action-primary-text" : "border-border-default bg-bg-surface text-text-primary hover:bg-bg-surface"}`,
1008
+ children: [e, " ★"]
1009
+ }, e))
1010
+ })] }),
1011
+ /* @__PURE__ */ d("label", {
1012
+ className: "mt-4 block text-sm font-medium text-text-primary",
1013
+ children: ["Title", /* @__PURE__ */ u("input", {
1014
+ "aria-label": "Review title",
1015
+ value: M,
1016
+ onChange: (e) => N(e.target.value),
1017
+ className: "mt-2 w-full rounded-lg border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary outline-none focus:border-action-primary-border",
1018
+ placeholder: "Summarize your experience"
1019
+ })]
1020
+ }),
1021
+ /* @__PURE__ */ d("label", {
1022
+ className: "mt-4 block text-sm font-medium text-text-primary",
1023
+ children: ["Review", /* @__PURE__ */ u("textarea", {
1024
+ "aria-label": "Review body",
1025
+ value: P,
1026
+ onChange: (e) => F(e.target.value),
1027
+ rows: 4,
1028
+ required: !0,
1029
+ "aria-required": "true",
1030
+ className: "mt-2 w-full rounded-lg border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary outline-none focus:border-action-primary-border",
1031
+ placeholder: "What worked well? What should improve?"
1032
+ })]
1033
+ }),
1034
+ /* @__PURE__ */ d("div", {
1035
+ className: "mt-4 flex flex-wrap gap-3",
1036
+ children: [/* @__PURE__ */ u("button", {
1037
+ type: "button",
1038
+ onClick: st,
1039
+ disabled: S || Ie,
1040
+ className: "cursor-pointer rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60",
1041
+ children: S || Ie ? "Saving..." : z?.userReview ? "Update Review" : "Submit Review"
1042
+ }), z?.userReview && /* @__PURE__ */ u("button", {
1043
+ type: "button",
1044
+ onClick: ct,
1045
+ disabled: Re,
1046
+ className: "cursor-pointer rounded-lg border border-status-error-border px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle disabled:cursor-not-allowed disabled:opacity-60",
1047
+ children: Re ? "Removing..." : "Delete Review"
1048
+ })]
1049
+ })
1050
+ ]
1051
+ })]
1052
+ }) : /* @__PURE__ */ u("p", {
1053
+ className: "text-center text-sm text-text-muted",
1054
+ children: "Purchase this app to submit a review."
1011
1055
  })]
1012
- }) : /* @__PURE__ */ d("p", {
1013
- className: "text-center text-sm text-text-muted",
1014
- children: "Purchase this app to submit a review."
1015
1056
  })]
1016
- })]
1017
- }),
1018
- G && G.length > 0 && /* @__PURE__ */ f("div", {
1019
- className: "mt-4 space-y-3",
1020
- children: [/* @__PURE__ */ d("ul", {
1021
- className: "space-y-3",
1022
- children: (C ? G : G.slice(0, 2)).map((e) => /* @__PURE__ */ d("li", { children: /* @__PURE__ */ d(we, {
1023
- review: e,
1024
- onMarkHelpful: rt,
1025
- markingHelpful: Le && Ue === e.id
1026
- }) }, e.id))
1027
- }), G.length > 2 && /* @__PURE__ */ d("button", {
1028
- type: "button",
1029
- onClick: () => ze(!C),
1030
- className: "cursor-pointer text-sm font-medium text-text-link",
1031
- children: C ? "Show less" : `Show all ${G.length} reviews`
1032
- })]
1033
- }),
1034
- (!G || G.length === 0) && /* @__PURE__ */ d("p", {
1035
- className: "mt-4 text-sm text-text-muted",
1036
- children: "No reviews yet. Be the first to review!"
1037
- })
1038
- ]
1039
- }),
1040
- Q.length > 0 && /* @__PURE__ */ f("section", {
1041
- className: "mb-8",
1042
- children: [/* @__PURE__ */ d("h2", {
1043
- className: "mb-4 text-lg font-medium text-text-primary",
1044
- children: "Required Permissions"
1045
- }), /* @__PURE__ */ d("div", {
1046
- className: "space-y-2",
1047
- children: Q.map((e) => /* @__PURE__ */ f("div", {
1048
- className: "flex items-center gap-3 rounded-lg bg-bg-surface px-4 py-3",
1049
- children: [/* @__PURE__ */ d(c, { className: "size-5 text-status-success-text" }), /* @__PURE__ */ d("span", {
1050
- className: "text-sm text-text-primary",
1051
- children: e
1052
- })]
1053
- }, e))
1054
- })]
1055
- }),
1056
- ot.length > 0 && /* @__PURE__ */ f("section", {
1057
- className: "mb-8",
1058
- children: [/* @__PURE__ */ d("h2", {
1059
- className: "mb-4 text-lg font-medium text-text-primary",
1060
- children: "Integrations"
1061
- }), /* @__PURE__ */ d("div", {
1062
- className: "flex flex-wrap gap-2",
1063
- children: ot.map((e) => /* @__PURE__ */ d("span", {
1064
- className: "rounded-lg bg-bg-surface px-4 py-2 text-sm font-medium text-text-primary",
1065
- children: e
1066
- }, e))
1067
- })]
1068
- }),
1069
- /* @__PURE__ */ f("section", {
1070
- className: "mb-8",
1071
- children: [/* @__PURE__ */ d("h2", {
1072
- className: "mb-4 text-lg font-medium text-text-primary",
1073
- children: "Additional Information"
1074
- }), /* @__PURE__ */ f("div", {
1075
- className: "grid grid-cols-2 gap-6 md:grid-cols-3",
1076
- children: [
1077
- X.manifestVersion && /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
1078
- className: "text-xs text-text-muted",
1079
- children: "Version"
1080
- }), /* @__PURE__ */ d("p", {
1081
- className: "mt-1 text-sm font-medium text-text-primary",
1082
- children: X.manifestVersion
1083
- })] }),
1084
- /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
1085
- className: "text-xs text-text-muted",
1086
- children: "Type"
1087
- }), /* @__PURE__ */ d("p", {
1088
- className: "mt-1 text-sm font-medium text-text-primary",
1089
- children: X.type
1090
- })] }),
1091
- X.publishedAt && /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
1092
- className: "text-xs text-text-muted",
1093
- children: "Published"
1094
- }), /* @__PURE__ */ d("p", {
1095
- className: "mt-1 text-sm font-medium text-text-primary",
1096
- children: new Date(X.publishedAt).toLocaleDateString()
1097
- })] }),
1098
- /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
1099
- className: "text-xs text-text-muted",
1100
- children: "Updated"
1101
- }), /* @__PURE__ */ d("p", {
1102
- className: "mt-1 text-sm font-medium text-text-primary",
1103
- children: new Date(X.updatedAt).toLocaleDateString()
1104
- })] }),
1105
- X.license && /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
1106
- className: "text-xs text-text-muted",
1107
- children: "License"
1108
- }), /* @__PURE__ */ d("p", {
1109
- className: "mt-1 text-sm font-medium text-text-primary",
1110
- children: X.license
1111
- })] }),
1112
- X.minPlatformVersion && /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
1113
- className: "text-xs text-text-muted",
1114
- children: "Min Platform Version"
1115
- }), /* @__PURE__ */ d("p", {
1116
- className: "mt-1 text-sm font-medium text-text-primary",
1117
- children: X.minPlatformVersion
1118
- })] })
1119
- ]
1120
- })]
1121
- })
1122
- ]
1123
- }), /* @__PURE__ */ f("div", {
1124
- className: "w-full lg:w-80",
1125
- children: [
1126
- (X.documentationUrl || X.repositoryUrl || U?.email) && /* @__PURE__ */ f("div", {
1127
- className: "mb-6 rounded-xl border border-border-default bg-bg-surface p-4",
1128
- children: [/* @__PURE__ */ d("h3", {
1129
- className: "font-medium text-text-primary",
1130
- children: "App support"
1131
- }), /* @__PURE__ */ f("div", {
1132
- className: "mt-3 space-y-2 text-sm",
1133
- children: [
1134
- X.documentationUrl && /* @__PURE__ */ d("a", {
1135
- href: X.documentationUrl,
1136
- target: "_blank",
1137
- rel: "noreferrer",
1138
- className: "block text-text-link hover:underline",
1139
- children: "Documentation"
1140
1057
  }),
1141
- X.repositoryUrl && /* @__PURE__ */ d("a", {
1142
- href: X.repositoryUrl,
1143
- target: "_blank",
1144
- rel: "noreferrer",
1145
- className: "block text-text-link hover:underline",
1146
- children: "Source repository"
1058
+ W && W.length > 0 && /* @__PURE__ */ d("div", {
1059
+ className: "mt-4 space-y-3",
1060
+ children: [/* @__PURE__ */ u("ul", {
1061
+ className: "space-y-3",
1062
+ children: (T ? W : W.slice(0, 2)).map((e) => /* @__PURE__ */ u("li", { children: /* @__PURE__ */ u(ke, {
1063
+ review: e,
1064
+ onMarkHelpful: lt,
1065
+ markingHelpful: Be && qe === e.id
1066
+ }) }, e.id))
1067
+ }), W.length > 2 && /* @__PURE__ */ u("button", {
1068
+ type: "button",
1069
+ onClick: () => He(!T),
1070
+ className: "cursor-pointer text-sm font-medium text-text-link",
1071
+ children: T ? "Show less" : `Show all ${W.length} reviews`
1072
+ })]
1147
1073
  }),
1148
- U?.email && /* @__PURE__ */ d("a", {
1149
- href: `mailto:${U.email}`,
1150
- className: "block text-text-link hover:underline",
1151
- children: "Contact publisher"
1074
+ (!W || W.length === 0) && /* @__PURE__ */ u("p", {
1075
+ className: "mt-4 text-sm text-text-muted",
1076
+ children: "No reviews yet. Be the first to review!"
1152
1077
  })
1153
1078
  ]
1154
- })]
1155
- }),
1156
- U && /* @__PURE__ */ f("div", {
1157
- className: "mb-6 rounded-xl border border-border-default bg-bg-surface p-4",
1158
- children: [
1159
- /* @__PURE__ */ d("h3", {
1160
- className: "font-medium text-text-primary",
1161
- children: "Publisher"
1162
- }),
1163
- /* @__PURE__ */ d("p", {
1164
- className: "mt-2 text-sm text-text-primary",
1165
- children: U.name
1166
- }),
1167
- U.bio && /* @__PURE__ */ d("p", {
1168
- className: "mt-2 text-sm text-text-muted",
1169
- children: U.bio
1170
- }),
1171
- U.websiteUrl && /* @__PURE__ */ d("a", {
1172
- href: U.websiteUrl,
1173
- target: "_blank",
1174
- rel: "noreferrer",
1175
- className: "mt-3 inline-block text-sm text-text-link hover:underline",
1176
- children: "Visit publisher website"
1177
- })
1178
- ]
1179
- }),
1180
- K && K.length > 0 && /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("div", {
1181
- className: "mb-4 flex items-center justify-between text-left",
1182
- children: /* @__PURE__ */ d("span", {
1183
- className: "font-medium text-text-primary",
1184
- children: "Similar apps"
1079
+ }),
1080
+ Q.length > 0 && /* @__PURE__ */ d("section", {
1081
+ id: "about-permissions",
1082
+ className: "mb-8 scroll-mt-6",
1083
+ children: [/* @__PURE__ */ u("h2", {
1084
+ className: "mb-4 text-lg font-medium text-text-primary",
1085
+ children: "Required Permissions"
1086
+ }), /* @__PURE__ */ u("div", {
1087
+ className: "space-y-2",
1088
+ children: Q.map((e) => /* @__PURE__ */ d("div", {
1089
+ className: "flex items-center gap-3 rounded-lg bg-bg-surface px-4 py-3",
1090
+ children: [/* @__PURE__ */ u(s, { className: "size-5 text-status-success-text" }), /* @__PURE__ */ u("span", {
1091
+ className: "text-sm text-text-primary",
1092
+ children: e
1093
+ })]
1094
+ }, e))
1095
+ })]
1096
+ }),
1097
+ dt.length > 0 && /* @__PURE__ */ d("section", {
1098
+ className: "mb-8",
1099
+ children: [/* @__PURE__ */ u("h2", {
1100
+ className: "mb-4 text-lg font-medium text-text-primary",
1101
+ children: "Integrations"
1102
+ }), /* @__PURE__ */ u("div", {
1103
+ className: "flex flex-wrap gap-2",
1104
+ children: dt.map((e) => /* @__PURE__ */ u("span", {
1105
+ className: "rounded-lg bg-bg-surface px-4 py-2 text-sm font-medium text-text-primary",
1106
+ children: e
1107
+ }, e))
1108
+ })]
1109
+ }),
1110
+ /* @__PURE__ */ d("section", {
1111
+ className: "mb-8",
1112
+ children: [/* @__PURE__ */ u("h2", {
1113
+ className: "mb-4 text-lg font-medium text-text-primary",
1114
+ children: "Additional Information"
1115
+ }), /* @__PURE__ */ d(f, {
1116
+ treatment: "metric",
1117
+ className: "grid grid-cols-2 gap-6 p-5 md:grid-cols-3",
1118
+ children: [
1119
+ X.manifestVersion && /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
1120
+ className: "text-xs text-text-muted",
1121
+ children: "Version"
1122
+ }), /* @__PURE__ */ u("p", {
1123
+ className: "mt-1 text-sm font-medium text-text-primary",
1124
+ children: X.manifestVersion
1125
+ })] }),
1126
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
1127
+ className: "text-xs text-text-muted",
1128
+ children: "Type"
1129
+ }), /* @__PURE__ */ u("p", {
1130
+ className: "mt-1 text-sm font-medium text-text-primary",
1131
+ children: X.type
1132
+ })] }),
1133
+ X.publishedAt && /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
1134
+ className: "text-xs text-text-muted",
1135
+ children: "Published"
1136
+ }), /* @__PURE__ */ u("p", {
1137
+ className: "mt-1 text-sm font-medium text-text-primary",
1138
+ children: new Date(X.publishedAt).toLocaleDateString()
1139
+ })] }),
1140
+ /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
1141
+ className: "text-xs text-text-muted",
1142
+ children: "Updated"
1143
+ }), /* @__PURE__ */ u("p", {
1144
+ className: "mt-1 text-sm font-medium text-text-primary",
1145
+ children: new Date(X.updatedAt).toLocaleDateString()
1146
+ })] }),
1147
+ X.license && /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
1148
+ className: "text-xs text-text-muted",
1149
+ children: "License"
1150
+ }), /* @__PURE__ */ u("p", {
1151
+ className: "mt-1 text-sm font-medium text-text-primary",
1152
+ children: X.license
1153
+ })] }),
1154
+ X.minPlatformVersion && /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
1155
+ className: "text-xs text-text-muted",
1156
+ children: "Min Platform Version"
1157
+ }), /* @__PURE__ */ u("p", {
1158
+ className: "mt-1 text-sm font-medium text-text-primary",
1159
+ children: X.minPlatformVersion
1160
+ })] })
1161
+ ]
1162
+ })]
1185
1163
  })
1186
- }), /* @__PURE__ */ d("div", {
1187
- className: "space-y-3",
1188
- children: K.slice(0, 4).map((e) => /* @__PURE__ */ f("button", {
1189
- type: "button",
1190
- onClick: () => u(`${p}/marketplace/product/${e.id}`),
1191
- className: "flex w-full cursor-pointer items-center gap-3 rounded-lg p-2 text-left transition-colors hover:bg-bg-sunken",
1192
- children: [e.icon ? /* @__PURE__ */ d("img", {
1193
- src: e.icon,
1194
- alt: e.name,
1195
- className: "size-12 rounded-xl object-cover"
1196
- }) : /* @__PURE__ */ d("div", {
1197
- className: "flex size-12 items-center justify-center rounded-xl bg-bg-sunken text-lg font-bold text-text-muted",
1198
- children: e.name.charAt(0)
1199
- }), /* @__PURE__ */ f("div", {
1200
- className: "flex-1 overflow-hidden",
1164
+ ]
1165
+ }), /* @__PURE__ */ d("div", {
1166
+ className: "w-full lg:w-80",
1167
+ children: [
1168
+ (X.documentationUrl || X.repositoryUrl || V?.email) && /* @__PURE__ */ d(f, {
1169
+ className: "mb-6 p-4",
1170
+ children: [/* @__PURE__ */ u("h3", {
1171
+ className: "font-medium text-text-primary",
1172
+ children: "App support"
1173
+ }), /* @__PURE__ */ d("div", {
1174
+ className: "mt-3 space-y-2 text-sm",
1201
1175
  children: [
1202
- /* @__PURE__ */ d("p", {
1203
- className: "truncate text-sm font-medium text-text-primary",
1204
- children: e.name
1176
+ X.documentationUrl && /* @__PURE__ */ u("a", {
1177
+ href: X.documentationUrl,
1178
+ target: "_blank",
1179
+ rel: "noreferrer",
1180
+ className: "block text-text-link hover:underline",
1181
+ children: "Documentation"
1205
1182
  }),
1206
- /* @__PURE__ */ d("p", {
1207
- className: "text-xs text-text-muted",
1208
- children: U?.name || "Unknown"
1183
+ X.repositoryUrl && /* @__PURE__ */ u("a", {
1184
+ href: X.repositoryUrl,
1185
+ target: "_blank",
1186
+ rel: "noreferrer",
1187
+ className: "block text-text-link hover:underline",
1188
+ children: "Source repository"
1209
1189
  }),
1210
- (e.reviewCount ?? 0) > 0 && /* @__PURE__ */ f("div", {
1211
- className: "flex items-center gap-1",
1212
- children: [/* @__PURE__ */ d("span", {
1213
- className: "text-xs text-text-muted",
1214
- children: (e.rating || 0).toFixed(1)
1215
- }), /* @__PURE__ */ d(l, { className: "size-3 fill-current text-status-warning-text" })]
1190
+ V?.email && /* @__PURE__ */ u("a", {
1191
+ href: `mailto:${V.email}`,
1192
+ className: "block text-text-link hover:underline",
1193
+ children: "Contact publisher"
1216
1194
  })
1217
1195
  ]
1218
1196
  })]
1219
- }, e.id))
1220
- })] })
1221
- ]
1222
- })]
1223
- })
1197
+ }),
1198
+ V && /* @__PURE__ */ d(f, {
1199
+ className: "mb-6 p-4",
1200
+ children: [
1201
+ /* @__PURE__ */ u("h3", {
1202
+ className: "font-medium text-text-primary",
1203
+ children: "Publisher"
1204
+ }),
1205
+ /* @__PURE__ */ u("p", {
1206
+ className: "mt-2 text-sm text-text-primary",
1207
+ children: V.name
1208
+ }),
1209
+ V.bio && /* @__PURE__ */ u("p", {
1210
+ className: "mt-2 text-sm text-text-muted",
1211
+ children: V.bio
1212
+ }),
1213
+ V.websiteUrl && /* @__PURE__ */ u("a", {
1214
+ href: V.websiteUrl,
1215
+ target: "_blank",
1216
+ rel: "noreferrer",
1217
+ className: "mt-3 inline-block text-sm text-text-link hover:underline",
1218
+ children: "Visit publisher website"
1219
+ })
1220
+ ]
1221
+ }),
1222
+ K && K.length > 0 && /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("div", {
1223
+ className: "mb-4 flex items-center justify-between text-left",
1224
+ children: /* @__PURE__ */ u("span", {
1225
+ className: "font-medium text-text-primary",
1226
+ children: "Similar apps"
1227
+ })
1228
+ }), /* @__PURE__ */ u("div", {
1229
+ className: "space-y-3",
1230
+ children: K.slice(0, 4).map((e) => /* @__PURE__ */ d("button", {
1231
+ type: "button",
1232
+ onClick: () => l(`${p}/marketplace/product/${e.id}`),
1233
+ className: "flex w-full cursor-pointer items-center gap-3 rounded-lg p-2 text-left transition-colors hover:bg-bg-sunken",
1234
+ children: [e.icon ? /* @__PURE__ */ u("img", {
1235
+ src: e.icon,
1236
+ alt: e.name,
1237
+ className: "size-12 rounded-xl object-cover"
1238
+ }) : /* @__PURE__ */ u("div", {
1239
+ className: "flex size-12 items-center justify-center rounded-xl bg-bg-sunken text-lg font-bold text-text-muted",
1240
+ children: e.name.charAt(0)
1241
+ }), /* @__PURE__ */ d("div", {
1242
+ className: "flex-1 overflow-hidden",
1243
+ children: [
1244
+ /* @__PURE__ */ u("p", {
1245
+ className: "truncate text-sm font-medium text-text-primary",
1246
+ children: e.name
1247
+ }),
1248
+ /* @__PURE__ */ u("p", {
1249
+ className: "text-xs text-text-muted",
1250
+ children: V?.name || "Unknown"
1251
+ }),
1252
+ (e.reviewCount ?? 0) > 0 && /* @__PURE__ */ d("div", {
1253
+ className: "flex items-center gap-1",
1254
+ children: [/* @__PURE__ */ u("span", {
1255
+ className: "text-xs text-text-muted",
1256
+ children: (e.rating || 0).toFixed(1)
1257
+ }), /* @__PURE__ */ u(c, { className: "size-3 fill-current text-status-warning-text" })]
1258
+ })
1259
+ ]
1260
+ })]
1261
+ }, e.id))
1262
+ })] })
1263
+ ]
1264
+ })]
1265
+ })
1266
+ ]
1224
1267
  }),
1225
- X && /* @__PURE__ */ d(ce, {
1226
- isOpen: We,
1227
- onClose: () => R(!1),
1268
+ X && /* @__PURE__ */ u(le, {
1269
+ isOpen: Ye,
1270
+ onClose: () => Xe(!1),
1228
1271
  app: {
1229
1272
  id: X.id,
1230
1273
  name: X.name,
1231
1274
  slug: X.slug,
1232
1275
  icon: X.icon,
1233
1276
  type: X.type,
1234
- version: X.manifestVersion,
1235
- requiredPermissions: Q
1277
+ version: X.manifestVersion
1236
1278
  },
1237
1279
  purchaseState: J && !$ ? "purchased" : "free",
1238
- onInstallSuccess: Qe,
1239
- onInstallError: $e
1280
+ onInstallSuccess: it,
1281
+ onInstallError: at
1240
1282
  })
1241
1283
  ]
1242
1284
  });
1243
1285
  };
1244
1286
  //#endregion
1245
- export { De as ProductDetailPage };
1287
+ export { Me as ProductDetailPage };
1246
1288
 
1247
1289
  //# sourceMappingURL=ProductDetailPage.js.map