@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.
- package/dist/StoreRoot.js +47 -90
- package/dist/StoreRoot.js.map +1 -1
- package/dist/StoreRoutes.js +93 -158
- package/dist/StoreRoutes.js.map +1 -1
- package/dist/components/AccessDenied.js +3 -3
- package/dist/components/AccessDenied.js.map +1 -1
- package/dist/components/InstallAppModal.js +175 -255
- package/dist/components/InstallAppModal.js.map +1 -1
- package/dist/components/cart/CartDrawer.js +10 -10
- package/dist/components/cart/CartDrawer.js.map +1 -1
- package/dist/hooks/useStoreGraphQL.js +107 -177
- package/dist/hooks/useStoreGraphQL.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/errors/CombinedGraphQLErrors.js +1 -1
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/errors/utils.js +1 -1
- package/dist/node_modules/@apollo/client/errors/utils.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/link/core/ApolloLink.js +2 -2
- package/dist/node_modules/@apollo/client/link/core/ApolloLink.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/link/subscriptions/index.js +2 -2
- package/dist/node_modules/@apollo/client/link/subscriptions/index.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/link/utils/createOperation.js +1 -1
- package/dist/node_modules/@apollo/client/link/utils/createOperation.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/caching/sizes.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/graphql/print.js +1 -1
- package/dist/node_modules/@apollo/client/utilities/graphql/print.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/caches.js +2 -2
- package/dist/node_modules/@apollo/client/utilities/internal/caches.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/checkDocument.js +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/getMainDefinition.js +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +9 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/getOperationDefinition.js +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js +8 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/globals/global.js +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js +10 -0
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js +8 -0
- package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/makeUniqueId.js +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/memoize.js +2 -2
- package/dist/node_modules/@apollo/client/utilities/internal/memoize.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/internal/stringifyForDisplay.js +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +1 -0
- package/dist/node_modules/{.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo → @apollo}/client/utilities/invariant/index.js +1 -1
- package/dist/node_modules/@apollo/client/utilities/invariant/index.js.map +1 -0
- package/dist/node_modules/@apollo/client/version.js +6 -0
- package/dist/node_modules/@apollo/client/version.js.map +1 -0
- package/dist/node_modules/{.bun/@wry_caches@1.0.1/node_modules/@wry → @wry}/caches/lib/weak.js +1 -1
- package/dist/node_modules/@wry/caches/lib/weak.js.map +1 -0
- package/dist/node_modules/{.bun/@wry_trie@0.5.0/node_modules/@wry → @wry}/trie/lib/index.js +1 -1
- package/dist/node_modules/@wry/trie/lib/index.js.map +1 -0
- package/dist/node_modules/{.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws → graphql-ws}/dist/client.js +1 -1
- package/dist/node_modules/graphql-ws/dist/client.js.map +1 -0
- package/dist/node_modules/{.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws → graphql-ws}/dist/common-CGW11Fyb.js +1 -1
- package/dist/node_modules/graphql-ws/dist/common-CGW11Fyb.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/NotificationFactories.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/Observable.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/Subscriber.js +2 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/Subscription.js +2 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/config.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/observable/empty.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/scheduler/timeoutProvider.js +2 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/symbol/observable.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/UnsubscriptionError.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +11 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/createErrorClass.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/errorContext.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js +8 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +8 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js +6 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/pipe.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -0
- package/dist/node_modules/{.bun/rxjs@7.8.2/node_modules/rxjs → rxjs}/dist/esm5/internal/util/reportUnhandledError.js +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -0
- package/dist/node_modules/{.bun/tslib@2.8.1 → rxjs}/node_modules/tslib/tslib.es6.js +1 -1
- package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/pages/AdminDashboardPage.js +118 -91
- package/dist/pages/AdminDashboardPage.js.map +1 -1
- package/dist/pages/AdminReviewModerationPage.js +67 -61
- package/dist/pages/AdminReviewModerationPage.js.map +1 -1
- package/dist/pages/AdminStoresPage.js +424 -371
- package/dist/pages/AdminStoresPage.js.map +1 -1
- package/dist/pages/AdminSubmissionsQueuePage.js +303 -286
- package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
- package/dist/pages/AppDetailPage.js +172 -135
- package/dist/pages/AppDetailPage.js.map +1 -1
- package/dist/pages/AppSettingsPage.js +83 -300
- package/dist/pages/AppSettingsPage.js.map +1 -1
- package/dist/pages/CartPage.js +71 -79
- package/dist/pages/CartPage.js.map +1 -1
- package/dist/pages/InstalledAppsPage.js +120 -337
- package/dist/pages/InstalledAppsPage.js.map +1 -1
- package/dist/pages/MarketplaceHomePage.js +196 -205
- package/dist/pages/MarketplaceHomePage.js.map +1 -1
- package/dist/pages/MyLicensesPage.js +70 -75
- package/dist/pages/MyLicensesPage.js.map +1 -1
- package/dist/pages/OrderConfirmationPage.js +70 -37
- package/dist/pages/OrderConfirmationPage.js.map +1 -1
- package/dist/pages/OrdersPage.js +60 -68
- package/dist/pages/OrdersPage.js.map +1 -1
- package/dist/pages/ProductDetailPage.js +794 -752
- package/dist/pages/ProductDetailPage.js.map +1 -1
- package/dist/providers/StoreProvider.js +3 -3
- package/package.json +2 -2
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/errors/utils.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/link/core/ApolloLink.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/link/subscriptions/index.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/link/utils/createOperation.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/caching/sizes.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/graphql/print.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/caches.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +0 -9
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getOperationName.js +0 -8
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/globals/global.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/globals/maybe.js +0 -10
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/isNonNullObject.js +0 -8
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/isNonNullObject.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/memoize.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/utilities/invariant/index.js.map +0 -1
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/version.js +0 -6
- package/dist/node_modules/.bun/@apollo_client@4.1.9_e571b0b00fd00a97/node_modules/@apollo/client/version.js.map +0 -1
- package/dist/node_modules/.bun/@wry_caches@1.0.1/node_modules/@wry/caches/lib/weak.js.map +0 -1
- package/dist/node_modules/.bun/@wry_trie@0.5.0/node_modules/@wry/trie/lib/index.js.map +0 -1
- package/dist/node_modules/.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws/dist/client.js.map +0 -1
- package/dist/node_modules/.bun/graphql-ws@6.0.8_796ebe57c2b0ffe0/node_modules/graphql-ws/dist/common-CGW11Fyb.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Observable.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/config.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +0 -11
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js +0 -8
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +0 -8
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js +0 -6
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +0 -1
- package/dist/node_modules/.bun/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +0 -1
- package/dist/node_modules/.bun/tslib@2.8.1/node_modules/tslib/tslib.es6.js.map +0 -1
- package/dist/pages/ProductReviewsPage.js +0 -87
- package/dist/pages/ProductReviewsPage.js.map +0 -1
- package/dist/pages/PublisherDashboardPage.js +0 -160
- package/dist/pages/PublisherDashboardPage.js.map +0 -1
- package/dist/pages/PublisherRevenuePage.js +0 -140
- package/dist/pages/PublisherRevenuePage.js.map +0 -1
- package/dist/pages/PublisherSubmissionsPage.js +0 -179
- package/dist/pages/PublisherSubmissionsPage.js.map +0 -1
- package/dist/pages/PublisherSubmitPage.js +0 -230
- package/dist/pages/PublisherSubmitPage.js.map +0 -1
- /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
|
|
7
|
-
import { InstallAppModal as
|
|
8
|
-
import { useCallback as
|
|
9
|
-
import { AlertCircle as
|
|
10
|
-
import { Fragment as
|
|
11
|
-
import { useLocation as
|
|
12
|
-
import {
|
|
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
|
|
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
|
-
}),
|
|
87
|
+
}), Oe = ({ stars: e, percentage: t, count: r }) => /* @__PURE__ */ d("div", {
|
|
87
88
|
className: "flex items-center gap-2",
|
|
88
89
|
children: [
|
|
89
|
-
/* @__PURE__ */
|
|
90
|
+
/* @__PURE__ */ u("span", {
|
|
90
91
|
className: "w-3 text-xs text-text-muted",
|
|
91
92
|
children: e
|
|
92
93
|
}),
|
|
93
|
-
/* @__PURE__ */
|
|
94
|
+
/* @__PURE__ */ u("div", {
|
|
94
95
|
className: "h-2 flex-1 overflow-hidden rounded-full bg-bg-sunken",
|
|
95
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
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
|
-
}),
|
|
106
|
-
className: "rounded-lg border border-border-
|
|
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__ */
|
|
109
|
+
/* @__PURE__ */ u("div", {
|
|
109
110
|
className: "mb-3 flex items-start justify-between",
|
|
110
|
-
children: /* @__PURE__ */
|
|
111
|
+
children: /* @__PURE__ */ d("div", {
|
|
111
112
|
className: "flex items-center gap-3",
|
|
112
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
119
|
+
}), /* @__PURE__ */ d("div", {
|
|
119
120
|
className: "flex items-center gap-2",
|
|
120
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
129
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
155
|
+
/* @__PURE__ */ u("div", {
|
|
155
156
|
className: "flex items-center justify-between",
|
|
156
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
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
|
-
}),
|
|
167
|
+
}), Ae = () => /* @__PURE__ */ d("div", {
|
|
167
168
|
className: "h-full overflow-y-auto",
|
|
168
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
171
|
+
children: /* @__PURE__ */ d("div", {
|
|
171
172
|
className: "flex items-center gap-4",
|
|
172
173
|
children: [
|
|
173
|
-
/* @__PURE__ */
|
|
174
|
-
/* @__PURE__ */
|
|
175
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
182
|
+
}), /* @__PURE__ */ d("div", {
|
|
182
183
|
className: "mx-auto max-w-6xl p-6",
|
|
183
184
|
children: [
|
|
184
|
-
/* @__PURE__ */
|
|
185
|
+
/* @__PURE__ */ d("div", {
|
|
185
186
|
className: "mb-8 flex flex-col gap-6 md:flex-row",
|
|
186
|
-
children: [/* @__PURE__ */
|
|
187
|
+
children: [/* @__PURE__ */ d("div", {
|
|
187
188
|
className: "flex gap-4 md:w-1/2",
|
|
188
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
192
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
197
|
+
/* @__PURE__ */ d("div", {
|
|
197
198
|
className: "flex gap-3",
|
|
198
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
203
|
+
}), /* @__PURE__ */ d("div", {
|
|
203
204
|
className: "flex flex-col gap-4 md:w-1/2 md:items-end",
|
|
204
|
-
children: [/* @__PURE__ */
|
|
205
|
+
children: [/* @__PURE__ */ d("div", {
|
|
205
206
|
className: "flex items-center gap-4",
|
|
206
207
|
children: [
|
|
207
|
-
/* @__PURE__ */
|
|
208
|
+
/* @__PURE__ */ d("div", {
|
|
208
209
|
className: "text-center",
|
|
209
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
212
|
-
/* @__PURE__ */
|
|
212
|
+
/* @__PURE__ */ u("div", { className: "h-12 w-px bg-border-default" }),
|
|
213
|
+
/* @__PURE__ */ d("div", {
|
|
213
214
|
className: "text-center",
|
|
214
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
217
|
-
/* @__PURE__ */
|
|
217
|
+
/* @__PURE__ */ u("div", { className: "h-12 w-px bg-border-default" }),
|
|
218
|
+
/* @__PURE__ */ d("div", {
|
|
218
219
|
className: "text-center",
|
|
219
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
223
|
+
}), /* @__PURE__ */ d("div", {
|
|
223
224
|
className: "flex gap-3",
|
|
224
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
229
|
+
/* @__PURE__ */ d("section", {
|
|
229
230
|
className: "mb-8",
|
|
230
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
241
|
+
/* @__PURE__ */ d("section", {
|
|
241
242
|
className: "mb-8",
|
|
242
|
-
children: [/* @__PURE__ */
|
|
243
|
+
children: [/* @__PURE__ */ d("div", {
|
|
243
244
|
className: "mb-4 flex items-center gap-2",
|
|
244
|
-
children: [/* @__PURE__ */
|
|
245
|
-
}), /* @__PURE__ */
|
|
246
|
-
className: "animate-pulse rounded-lg border border-border-
|
|
247
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
251
|
-
/* @__PURE__ */
|
|
252
|
-
/* @__PURE__ */
|
|
253
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
267
|
+
/* @__PURE__ */ d("section", {
|
|
267
268
|
className: "mb-8",
|
|
268
269
|
children: [
|
|
269
|
-
/* @__PURE__ */
|
|
270
|
+
/* @__PURE__ */ d("div", {
|
|
270
271
|
className: "mb-4 flex items-center justify-between",
|
|
271
|
-
children: [/* @__PURE__ */
|
|
272
|
+
children: [/* @__PURE__ */ d("div", {
|
|
272
273
|
className: "flex items-center gap-2",
|
|
273
|
-
children: [/* @__PURE__ */
|
|
274
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
277
|
+
/* @__PURE__ */ d("div", {
|
|
277
278
|
className: "mb-6 flex flex-col gap-6 md:flex-row",
|
|
278
|
-
children: [/* @__PURE__ */
|
|
279
|
-
className: "animate-pulse rounded-lg border border-border-
|
|
280
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
283
|
+
children: [/* @__PURE__ */ d("div", {
|
|
283
284
|
className: "text-center",
|
|
284
285
|
children: [
|
|
285
|
-
/* @__PURE__ */
|
|
286
|
-
/* @__PURE__ */
|
|
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__ */
|
|
295
|
+
]].map((e, t) => /* @__PURE__ */ u("div", { className: "size-4 rounded bg-bg-sunken" }, t))
|
|
295
296
|
}),
|
|
296
|
-
/* @__PURE__ */
|
|
297
|
+
/* @__PURE__ */ u("div", { className: "h-3 w-20 rounded bg-bg-sunken" })
|
|
297
298
|
]
|
|
298
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
307
|
+
]].map((e, t) => /* @__PURE__ */ d("div", {
|
|
307
308
|
className: "flex items-center gap-2",
|
|
308
309
|
children: [
|
|
309
|
-
/* @__PURE__ */
|
|
310
|
-
/* @__PURE__ */
|
|
311
|
-
/* @__PURE__ */
|
|
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__ */
|
|
317
|
+
}), /* @__PURE__ */ u("div", { className: "h-12 w-32 animate-pulse rounded-lg bg-bg-sunken" })]
|
|
317
318
|
}),
|
|
318
|
-
/* @__PURE__ */
|
|
319
|
+
/* @__PURE__ */ u("div", {
|
|
319
320
|
className: "space-y-4",
|
|
320
|
-
children: [...[, ,]].map((e, t) => /* @__PURE__ */
|
|
321
|
-
className: "animate-pulse rounded-lg border border-border-
|
|
322
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
325
|
+
children: [/* @__PURE__ */ u("div", { className: "size-10 rounded-full bg-bg-sunken" }), /* @__PURE__ */ d("div", {
|
|
325
326
|
className: "flex-1",
|
|
326
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
337
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
341
|
+
}), /* @__PURE__ */ d("div", {
|
|
341
342
|
className: "space-y-2",
|
|
342
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
349
|
+
/* @__PURE__ */ d("section", {
|
|
349
350
|
className: "mb-8",
|
|
350
|
-
children: [/* @__PURE__ */
|
|
351
|
+
children: [/* @__PURE__ */ d("div", {
|
|
351
352
|
className: "mb-4 flex items-center gap-2",
|
|
352
|
-
children: [/* @__PURE__ */
|
|
353
|
-
}), /* @__PURE__ */
|
|
354
|
-
className: "animate-pulse rounded-lg border border-border-
|
|
355
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
369
|
+
/* @__PURE__ */ d("section", {
|
|
369
370
|
className: "mb-8",
|
|
370
|
-
children: [/* @__PURE__ */
|
|
371
|
+
children: [/* @__PURE__ */ d("div", {
|
|
371
372
|
className: "mb-4 flex items-center justify-between",
|
|
372
|
-
children: [/* @__PURE__ */
|
|
373
|
+
children: [/* @__PURE__ */ d("div", {
|
|
373
374
|
className: "flex items-center gap-2",
|
|
374
|
-
children: [/* @__PURE__ */
|
|
375
|
-
}), /* @__PURE__ */
|
|
376
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
384
|
-
className: "animate-pulse rounded-lg border border-border-
|
|
385
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
391
|
-
/* @__PURE__ */
|
|
392
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
403
|
+
/* @__PURE__ */ d("section", {
|
|
403
404
|
className: "mb-8",
|
|
404
|
-
children: [/* @__PURE__ */
|
|
405
|
-
className: "animate-pulse rounded-lg border border-border-
|
|
406
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
411
|
-
}), /* @__PURE__ */
|
|
412
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
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
|
-
}),
|
|
421
|
+
}), je = ({ error: e, onRetry: t, onBack: n }) => /* @__PURE__ */ u("div", {
|
|
421
422
|
className: "flex h-full items-center justify-center",
|
|
422
|
-
children: /* @__PURE__ */
|
|
423
|
+
children: /* @__PURE__ */ d("div", {
|
|
423
424
|
className: "text-center",
|
|
424
425
|
children: [
|
|
425
|
-
/* @__PURE__ */
|
|
426
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
435
|
+
/* @__PURE__ */ d("div", {
|
|
435
436
|
className: "flex justify-center gap-3",
|
|
436
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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
|
-
}),
|
|
451
|
-
let { productId:
|
|
452
|
-
filter:
|
|
453
|
-
productId:
|
|
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, [
|
|
456
|
+
} : void 0, [o, m]),
|
|
456
457
|
limit: 1
|
|
457
|
-
}),
|
|
458
|
-
id:
|
|
459
|
-
slug:
|
|
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
|
-
}),
|
|
466
|
-
if (
|
|
467
|
-
if (
|
|
468
|
-
|
|
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(
|
|
473
|
+
await h(De(B, V), void 0, 1);
|
|
473
474
|
} catch (e) {
|
|
474
|
-
console.error("Failed to add product to cart:", e),
|
|
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
|
-
|
|
479
|
-
|
|
479
|
+
B,
|
|
480
|
+
V,
|
|
480
481
|
h,
|
|
481
|
-
|
|
482
|
-
|
|
482
|
+
H,
|
|
483
|
+
l,
|
|
483
484
|
p
|
|
484
|
-
]),
|
|
485
|
-
if (
|
|
486
|
-
|
|
485
|
+
]), tt = i(async () => {
|
|
486
|
+
if (B) {
|
|
487
|
+
D(null), E(!0);
|
|
487
488
|
try {
|
|
488
|
-
let e =
|
|
489
|
+
let e = B.price || 0, t = await _({
|
|
489
490
|
total: e,
|
|
490
491
|
lineItems: [{
|
|
491
|
-
productId:
|
|
492
|
-
name:
|
|
492
|
+
productId: B.id,
|
|
493
|
+
name: B.name,
|
|
493
494
|
quantity: 1,
|
|
494
495
|
unitPrice: e,
|
|
495
496
|
subtotal: e,
|
|
496
|
-
itemType:
|
|
497
|
-
pricingModel:
|
|
497
|
+
itemType: B.nature?.toLowerCase() || "digital",
|
|
498
|
+
pricingModel: B.pricingModel || "PAID_ONETIME"
|
|
498
499
|
}],
|
|
499
500
|
billingAccountId: ""
|
|
500
501
|
});
|
|
501
|
-
t?.id ?
|
|
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),
|
|
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
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
]),
|
|
511
|
-
|
|
512
|
-
}, [
|
|
513
|
-
|
|
514
|
-
let
|
|
515
|
-
|
|
516
|
-
let e =
|
|
517
|
-
e &&
|
|
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
|
-
}, [
|
|
524
|
-
let
|
|
525
|
-
|
|
526
|
-
productId:
|
|
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 ${
|
|
529
|
+
}), console.log(`Successfully installed ${B.name} to workspace ${t} (${e})`), y());
|
|
529
530
|
}, [
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
]),
|
|
531
|
+
B,
|
|
532
|
+
C,
|
|
533
|
+
y
|
|
534
|
+
]), at = i((e) => {
|
|
534
535
|
console.error("Installation failed:", e.message);
|
|
535
|
-
}, []),
|
|
536
|
-
|
|
537
|
-
}, [
|
|
538
|
-
if (!
|
|
539
|
-
if (
|
|
540
|
-
|
|
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:
|
|
545
|
-
rating:
|
|
546
|
-
title:
|
|
547
|
-
comment:
|
|
545
|
+
productId: B.id,
|
|
546
|
+
rating: I,
|
|
547
|
+
title: M.trim() || void 0,
|
|
548
|
+
comment: P.trim() || void 0
|
|
548
549
|
};
|
|
549
|
-
if (!(
|
|
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
|
|
554
|
-
|
|
554
|
+
}) : await x(e))) {
|
|
555
|
+
k("error"), O("We could not save your review. Please try again.");
|
|
555
556
|
return;
|
|
556
557
|
}
|
|
557
|
-
|
|
558
|
-
productId:
|
|
559
|
-
rating:
|
|
560
|
-
}), await
|
|
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
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
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
|
|
579
|
-
|
|
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
|
-
|
|
583
|
+
k("success"), O("Your review was removed."), j(!1), N(""), F(""), L(5), ce("success"), await R();
|
|
583
584
|
}
|
|
584
585
|
}, [
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
]),
|
|
589
|
-
|
|
590
|
-
}, [
|
|
591
|
-
if (
|
|
592
|
-
if (
|
|
593
|
-
error:
|
|
594
|
-
onRetry:
|
|
595
|
-
onBack: () =>
|
|
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 (!
|
|
598
|
-
className: "flex h-full items-center justify-center",
|
|
599
|
-
children: /* @__PURE__ */
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
}),
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
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:
|
|
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 =
|
|
646
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
642
|
+
/* @__PURE__ */ u("div", {
|
|
650
643
|
className: "relative bg-bg-surface",
|
|
651
|
-
children: /* @__PURE__ */
|
|
644
|
+
children: /* @__PURE__ */ u("div", {
|
|
652
645
|
className: "mx-auto max-w-7xl",
|
|
653
|
-
children: /* @__PURE__ */
|
|
646
|
+
children: /* @__PURE__ */ d("div", {
|
|
654
647
|
className: "flex flex-col lg:flex-row",
|
|
655
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
651
|
+
/* @__PURE__ */ d("button", {
|
|
659
652
|
type: "button",
|
|
660
|
-
onClick: () =>
|
|
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__ */
|
|
655
|
+
children: [/* @__PURE__ */ u(pe, { className: "size-4" }), "Back"]
|
|
663
656
|
}),
|
|
664
|
-
/* @__PURE__ */
|
|
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__ */
|
|
661
|
+
/* @__PURE__ */ d("div", {
|
|
669
662
|
className: "mb-2",
|
|
670
|
-
children: [
|
|
671
|
-
href:
|
|
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:
|
|
676
|
-
}) : /* @__PURE__ */
|
|
668
|
+
children: V.name
|
|
669
|
+
}) : /* @__PURE__ */ u("span", {
|
|
677
670
|
className: "text-base font-medium text-text-primary",
|
|
678
|
-
children:
|
|
679
|
-
}),
|
|
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__ */
|
|
674
|
+
/* @__PURE__ */ d("p", {
|
|
682
675
|
className: "mb-6 text-sm text-text-muted",
|
|
683
676
|
children: [
|
|
684
|
-
X.category && /* @__PURE__ */
|
|
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__ */
|
|
691
|
-
className: "mb-6
|
|
683
|
+
/* @__PURE__ */ d(Se, {
|
|
684
|
+
className: "mb-6 p-5",
|
|
692
685
|
children: [
|
|
693
686
|
/* @__PURE__ */ d("div", {
|
|
694
|
-
className: "flex
|
|
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__ */
|
|
708
|
-
className: "
|
|
709
|
-
children:
|
|
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(
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
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__ */
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
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__ */
|
|
729
|
-
className: "
|
|
730
|
-
children: [/* @__PURE__ */ d("
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
804
|
+
}) : /* @__PURE__ */ u("div", {
|
|
807
805
|
className: "flex h-full min-h-[300px] items-center justify-center",
|
|
808
|
-
children: /* @__PURE__ */
|
|
806
|
+
children: /* @__PURE__ */ d("div", {
|
|
809
807
|
className: "text-center",
|
|
810
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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:
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
className: "flex-1 lg:max-w-3xl",
|
|
823
|
+
children: [
|
|
824
|
+
/* @__PURE__ */ d(Te, {
|
|
825
|
+
className: "mb-6",
|
|
829
826
|
children: [
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
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
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
})
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
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
|
-
})
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
className: "
|
|
939
|
-
children: [
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
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__ */
|
|
954
|
-
className: "text-
|
|
955
|
-
children:
|
|
956
|
-
}),
|
|
957
|
-
|
|
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__ */
|
|
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__ */
|
|
982
|
-
className: "
|
|
983
|
-
children: [
|
|
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
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
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
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
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
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
})
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
className: "
|
|
1176
|
-
children: "
|
|
1177
|
-
})
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
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
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
className: "
|
|
1192
|
-
children: [
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
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__ */
|
|
1203
|
-
|
|
1204
|
-
|
|
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__ */
|
|
1207
|
-
|
|
1208
|
-
|
|
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
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
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
|
-
},
|
|
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__ */
|
|
1226
|
-
isOpen:
|
|
1227
|
-
onClose: () =>
|
|
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:
|
|
1239
|
-
onInstallError:
|
|
1280
|
+
onInstallSuccess: it,
|
|
1281
|
+
onInstallError: at
|
|
1240
1282
|
})
|
|
1241
1283
|
]
|
|
1242
1284
|
});
|
|
1243
1285
|
};
|
|
1244
1286
|
//#endregion
|
|
1245
|
-
export {
|
|
1287
|
+
export { Me as ProductDetailPage };
|
|
1246
1288
|
|
|
1247
1289
|
//# sourceMappingURL=ProductDetailPage.js.map
|