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