@burdenoff/website-sdk 2026.716.2 → 2026.716.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,200 +1,10 @@
1
- import { createContext, useState, useEffect, useRef, useMemo, useContext } from 'react';
1
+ import { createContext, useState, useEffect, useRef, useContext } from 'react';
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { Helmet } from 'react-helmet-async';
4
4
 
5
5
  var __defProp = Object.defineProperty;
6
6
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
7
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8
- function formatPrice(price, currency, pricingModel) {
9
- if (pricingModel === "FREE" || !price || price === 0) return "Free";
10
- const curr = currency || "USD";
11
- try {
12
- return new Intl.NumberFormat("en-US", {
13
- style: "currency",
14
- currency: curr
15
- }).format(price);
16
- } catch {
17
- return `${curr} ${price.toFixed(2)}`;
18
- }
19
- }
20
- function formatDownloads(n) {
21
- if (!n) return "0";
22
- if (n >= 1e6) return `${(n / 1e6).toFixed(1)}M`;
23
- if (n >= 1e3) return `${(n / 1e3).toFixed(1)}K`;
24
- return n.toString();
25
- }
26
- function StarRating({ rating }) {
27
- return /* @__PURE__ */ jsx("span", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsx(
28
- "svg",
29
- {
30
- viewBox: "0 0 12 12",
31
- className: `w-3 h-3 ${star <= Math.round(rating) ? "text-amber-400 fill-current" : "text-muted-foreground/30 fill-current"}`,
32
- children: /* @__PURE__ */ jsx("path", { d: "M6 1l1.545 3.09L11 4.59l-2.5 2.41.59 3.41L6 8.79l-3.09 1.61L3.5 7 1 4.59l3.455-.5L6 1z" })
33
- },
34
- star
35
- )) });
36
- }
37
- function TypeBadge({ type }) {
38
- const labels = {
39
- APP: "App",
40
- NODE: "Node",
41
- WORKFLOW: "Workflow",
42
- TEMPLATE: "Template",
43
- INTEGRATION: "Integration",
44
- EXTENSION: "Extension",
45
- THEME: "Theme"
46
- };
47
- return /* @__PURE__ */ jsx("span", { className: "inline-block text-xs px-2 py-0.5 rounded-full bg-primary/10 text-primary font-medium", children: labels[type] ?? type });
48
- }
49
- function ProductCard({ product, onClick, href }) {
50
- const priceLabel = formatPrice(
51
- product.price,
52
- product.currency,
53
- product.pricingModel
54
- );
55
- const inner = /* @__PURE__ */ jsxs("div", { className: "group bg-card border border-border rounded-xl p-4 flex flex-col gap-3 transition-all duration-200 hover:shadow-md hover:border-primary/30 cursor-pointer h-full", children: [
56
- /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
57
- /* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-lg bg-muted flex-shrink-0 overflow-hidden", children: product.icon ? /* @__PURE__ */ jsx(
58
- "img",
59
- {
60
- src: product.icon,
61
- alt: "",
62
- "aria-hidden": "true",
63
- className: "w-full h-full object-cover"
64
- }
65
- ) : /* @__PURE__ */ jsx("div", { className: "w-full h-full flex items-center justify-center bg-gradient-to-br from-primary/15 to-primary/5", children: /* @__PURE__ */ jsxs(
66
- "svg",
67
- {
68
- viewBox: "0 0 32 32",
69
- className: "w-8 h-8",
70
- fill: "none",
71
- xmlns: "http://www.w3.org/2000/svg",
72
- "aria-hidden": "true",
73
- children: [
74
- /* @__PURE__ */ jsx(
75
- "polygon",
76
- {
77
- points: "16,4 28,10 16,16 4,10",
78
- className: "fill-primary/30",
79
- stroke: "currentColor",
80
- strokeWidth: "0.6",
81
- strokeOpacity: "0.35"
82
- }
83
- ),
84
- /* @__PURE__ */ jsx(
85
- "polygon",
86
- {
87
- points: "4,10 16,16 16,28 4,22",
88
- className: "fill-primary/15",
89
- stroke: "currentColor",
90
- strokeWidth: "0.6",
91
- strokeOpacity: "0.35"
92
- }
93
- ),
94
- /* @__PURE__ */ jsx(
95
- "polygon",
96
- {
97
- points: "28,10 16,16 16,28 28,22",
98
- className: "fill-primary/20",
99
- stroke: "currentColor",
100
- strokeWidth: "0.6",
101
- strokeOpacity: "0.35"
102
- }
103
- )
104
- ]
105
- }
106
- ) }) }),
107
- /* @__PURE__ */ jsx(TypeBadge, { type: product.type })
108
- ] }),
109
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
110
- /* @__PURE__ */ jsx("h3", { className: "font-semibold text-foreground text-sm leading-snug line-clamp-1 group-hover:text-primary transition-colors", children: product.name }),
111
- product.description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-xs mt-1 line-clamp-2 leading-relaxed", children: product.description })
112
- ] }),
113
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
114
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5", children: product.rating != null && product.rating > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
115
- /* @__PURE__ */ jsx(StarRating, { rating: product.rating }),
116
- /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: product.rating.toFixed(1) })
117
- ] }) : /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "No reviews yet" }) }),
118
- /* @__PURE__ */ jsx(
119
- "span",
120
- {
121
- className: `text-xs font-semibold ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`,
122
- children: priceLabel
123
- }
124
- )
125
- ] })
126
- ] });
127
- if (href) {
128
- return /* @__PURE__ */ jsx("a", { href, onClick, className: "block h-full no-underline", children: inner });
129
- }
130
- return /* @__PURE__ */ jsx(
131
- "button",
132
- {
133
- type: "button",
134
- onClick,
135
- className: "block w-full text-left h-full",
136
- children: inner
137
- }
138
- );
139
- }
140
-
141
- // src/store/queries.ts
142
- var STORE_PRODUCT_FIELDS = `
143
- fragment StoreProductFields on StoreProduct {
144
- id name slug type subType nature status pricingModel
145
- price currency description icon bannerUrl screenshots
146
- category tags featured downloads viewCount rating reviewCount
147
- publisherId authorName license compatibleProducts
148
- }
149
- `;
150
- var HOME_GROUPED_PRODUCTS_QUERY = `
151
- ${STORE_PRODUCT_FIELDS}
152
- query HomeGroupedProducts($compatibleWith: String) {
153
- homeGroupedProducts(compatibleWith: $compatibleWith) {
154
- featured { ...StoreProductFields }
155
- mostDownloaded { ...StoreProductFields }
156
- recentlyAdded { ...StoreProductFields }
157
- freeItems { ...StoreProductFields }
158
- }
159
- }
160
- `;
161
- var BROWSE_STORE_QUERY = `
162
- ${STORE_PRODUCT_FIELDS}
163
- query BrowseStore($input: BrowseStoreInput!) {
164
- browseStore(input: $input) {
165
- products { ...StoreProductFields }
166
- totalCount
167
- hasMore
168
- nextCursor
169
- facets {
170
- types { value count }
171
- categories { value count }
172
- pricingModels { value count }
173
- priceRange { min max }
174
- }
175
- }
176
- }
177
- `;
178
- var STORE_PRODUCT_DETAILS_QUERY = `
179
- ${STORE_PRODUCT_FIELDS}
180
- query StoreProductDetails($input: StoreProductDetailsInput!) {
181
- storeProductDetails(input: $input) {
182
- product { ...StoreProductFields longDescription videoUrls minPlatformVersion }
183
- publisher { id name email websiteUrl logoUrl bio isVerified tier }
184
- reviews { id rating title comment verifiedPurchase helpful createdAt }
185
- reviewsCount
186
- relatedProducts { ...StoreProductFields }
187
- ratingDistribution { fiveStars fourStars threeStars twoStars oneStar }
188
- }
189
- }
190
- `;
191
- var CATEGORIES_QUERY = `
192
- query Categories {
193
- categories {
194
- id name slug description icon parentId
195
- }
196
- }
197
- `;
198
8
 
199
9
  // src/client/security.ts
200
10
  var LOOPBACK_HOSTS = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "::1"]);
@@ -392,6 +202,155 @@ function PageHead({
392
202
  ))
393
203
  ] });
394
204
  }
205
+ function formatPrice(price, currency, pricingModel) {
206
+ if (pricingModel === "FREE" || !price || price === 0) return "Free";
207
+ const curr = currency || "USD";
208
+ try {
209
+ return new Intl.NumberFormat("en-US", {
210
+ style: "currency",
211
+ currency: curr
212
+ }).format(price);
213
+ } catch {
214
+ return `${curr} ${price.toFixed(2)}`;
215
+ }
216
+ }
217
+ function formatDownloads(n) {
218
+ if (!n) return "0";
219
+ if (n >= 1e6) return `${(n / 1e6).toFixed(1)}M`;
220
+ if (n >= 1e3) return `${(n / 1e3).toFixed(1)}K`;
221
+ return n.toString();
222
+ }
223
+ function StarRating({ rating }) {
224
+ return /* @__PURE__ */ jsx("span", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsx(
225
+ "svg",
226
+ {
227
+ viewBox: "0 0 12 12",
228
+ className: `w-3 h-3 ${star <= Math.round(rating) ? "text-amber-400 fill-current" : "text-muted-foreground/30 fill-current"}`,
229
+ children: /* @__PURE__ */ jsx("path", { d: "M6 1l1.545 3.09L11 4.59l-2.5 2.41.59 3.41L6 8.79l-3.09 1.61L3.5 7 1 4.59l3.455-.5L6 1z" })
230
+ },
231
+ star
232
+ )) });
233
+ }
234
+ function TypeBadge({ type }) {
235
+ const labels = {
236
+ APP: "App",
237
+ NODE: "Node",
238
+ WORKFLOW: "Workflow",
239
+ TEMPLATE: "Template",
240
+ INTEGRATION: "Integration",
241
+ EXTENSION: "Extension",
242
+ THEME: "Theme"
243
+ };
244
+ return /* @__PURE__ */ jsx("span", { className: "inline-block text-xs px-2 py-0.5 rounded-full bg-primary/10 text-primary font-medium", children: labels[type] ?? type });
245
+ }
246
+ function ProductCard({ product, onClick, href }) {
247
+ const priceLabel = formatPrice(product.price, product.currency, product.pricingModel);
248
+ const inner = /* @__PURE__ */ jsxs("div", { className: "group bg-card border border-border rounded-xl p-4 flex flex-col gap-3 transition-all duration-200 hover:shadow-md hover:border-primary/30 cursor-pointer h-full", children: [
249
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
250
+ /* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-lg bg-muted flex-shrink-0 overflow-hidden", children: product.icon ? /* @__PURE__ */ jsx(
251
+ "img",
252
+ {
253
+ src: product.icon,
254
+ alt: "",
255
+ "aria-hidden": "true",
256
+ className: "w-full h-full object-cover"
257
+ }
258
+ ) : /* @__PURE__ */ jsx("div", { className: "w-full h-full flex items-center justify-center bg-gradient-to-br from-primary/15 to-primary/5", children: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 32 32", className: "w-8 h-8", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
259
+ /* @__PURE__ */ jsx("polygon", { points: "16,4 28,10 16,16 4,10", className: "fill-primary/30", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.35" }),
260
+ /* @__PURE__ */ jsx("polygon", { points: "4,10 16,16 16,28 4,22", className: "fill-primary/15", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.35" }),
261
+ /* @__PURE__ */ jsx("polygon", { points: "28,10 16,16 16,28 28,22", className: "fill-primary/20", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.35" })
262
+ ] }) }) }),
263
+ /* @__PURE__ */ jsx(TypeBadge, { type: product.type })
264
+ ] }),
265
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
266
+ /* @__PURE__ */ jsx("h3", { className: "font-semibold text-foreground text-sm leading-snug line-clamp-1 group-hover:text-primary transition-colors", children: product.name }),
267
+ product.description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-xs mt-1 line-clamp-2 leading-relaxed", children: product.description })
268
+ ] }),
269
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
270
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5", children: product.rating != null && product.rating > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
271
+ /* @__PURE__ */ jsx(StarRating, { rating: product.rating }),
272
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: product.rating.toFixed(1) })
273
+ ] }) : /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "No reviews yet" }) }),
274
+ /* @__PURE__ */ jsx(
275
+ "span",
276
+ {
277
+ className: `text-xs font-semibold ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`,
278
+ children: priceLabel
279
+ }
280
+ )
281
+ ] })
282
+ ] });
283
+ if (href) {
284
+ return /* @__PURE__ */ jsx("a", { href, onClick, className: "block h-full no-underline", children: inner });
285
+ }
286
+ return /* @__PURE__ */ jsx(
287
+ "button",
288
+ {
289
+ type: "button",
290
+ onClick,
291
+ className: "block w-full text-left h-full",
292
+ children: inner
293
+ }
294
+ );
295
+ }
296
+
297
+ // src/store/queries.ts
298
+ var STORE_PRODUCT_FIELDS = `
299
+ fragment StoreProductFields on StoreProduct {
300
+ id name slug type subType nature status pricingModel
301
+ price currency description icon bannerUrl screenshots
302
+ category tags featured downloads viewCount rating reviewCount
303
+ publisherId authorName license compatibleProducts
304
+ }
305
+ `;
306
+ var HOME_GROUPED_PRODUCTS_QUERY = `
307
+ ${STORE_PRODUCT_FIELDS}
308
+ query HomeGroupedProducts($compatibleWith: String) {
309
+ homeGroupedProducts(compatibleWith: $compatibleWith) {
310
+ featured { ...StoreProductFields }
311
+ mostDownloaded { ...StoreProductFields }
312
+ recentlyAdded { ...StoreProductFields }
313
+ freeItems { ...StoreProductFields }
314
+ }
315
+ }
316
+ `;
317
+ var BROWSE_STORE_QUERY = `
318
+ ${STORE_PRODUCT_FIELDS}
319
+ query BrowseStore($input: BrowseStoreInput!) {
320
+ browseStore(input: $input) {
321
+ products { ...StoreProductFields }
322
+ totalCount
323
+ hasMore
324
+ nextCursor
325
+ facets {
326
+ types { value count }
327
+ categories { value count }
328
+ pricingModels { value count }
329
+ priceRange { min max }
330
+ }
331
+ }
332
+ }
333
+ `;
334
+ var STORE_PRODUCT_DETAILS_QUERY = `
335
+ ${STORE_PRODUCT_FIELDS}
336
+ query StoreProductDetails($input: StoreProductDetailsInput!) {
337
+ storeProductDetails(input: $input) {
338
+ product { ...StoreProductFields longDescription videoUrls minPlatformVersion }
339
+ publisher { id name email websiteUrl logoUrl bio isVerified tier }
340
+ reviews { id rating title comment verifiedPurchase helpful createdAt }
341
+ reviewsCount
342
+ relatedProducts { ...StoreProductFields }
343
+ ratingDistribution { fiveStars fourStars threeStars twoStars oneStar }
344
+ }
345
+ }
346
+ `;
347
+ var CATEGORIES_QUERY = `
348
+ query Categories {
349
+ categories {
350
+ id name slug description icon parentId
351
+ }
352
+ }
353
+ `;
395
354
  function dedupAcross(lists) {
396
355
  const seen = /* @__PURE__ */ new Set();
397
356
  return lists.map((list) => {
@@ -409,11 +368,7 @@ function FeaturedHeroCard({
409
368
  product,
410
369
  onNavigate
411
370
  }) {
412
- const priceLabel = formatPrice(
413
- product.price,
414
- product.currency,
415
- product.pricingModel
416
- );
371
+ const priceLabel = formatPrice(product.price, product.currency, product.pricingModel);
417
372
  return /* @__PURE__ */ jsxs(
418
373
  "button",
419
374
  {
@@ -422,155 +377,28 @@ function FeaturedHeroCard({
422
377
  className: "group w-full text-left h-full rounded-2xl border border-border bg-card overflow-hidden hover:border-primary/40 transition-all duration-300 hover:shadow-xl hover:shadow-primary/10 flex flex-col",
423
378
  children: [
424
379
  /* @__PURE__ */ jsxs("div", { className: "relative h-44 sm:h-52 bg-gradient-to-br from-primary/20 via-primary/8 to-background overflow-hidden flex-shrink-0", children: [
425
- product.bannerUrl ? /* @__PURE__ */ jsx(
426
- "img",
427
- {
428
- src: product.bannerUrl,
429
- alt: "",
430
- "aria-hidden": "true",
431
- className: "w-full h-full object-cover"
432
- }
433
- ) : /* @__PURE__ */ jsxs(Fragment, { children: [
434
- /* @__PURE__ */ jsxs(
435
- "svg",
436
- {
437
- className: "absolute inset-0 w-full h-full opacity-[0.07]",
438
- xmlns: "http://www.w3.org/2000/svg",
439
- "aria-hidden": "true",
440
- children: [
441
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
442
- "pattern",
443
- {
444
- id: "fg-hero-grid",
445
- width: "36",
446
- height: "36",
447
- patternUnits: "userSpaceOnUse",
448
- children: /* @__PURE__ */ jsx(
449
- "path",
450
- {
451
- d: "M 36 0 L 0 0 0 36",
452
- fill: "none",
453
- stroke: "currentColor",
454
- strokeWidth: "1"
455
- }
456
- )
457
- }
458
- ) }),
459
- /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#fg-hero-grid)" })
460
- ]
461
- }
462
- ),
463
- /* @__PURE__ */ jsx(
464
- "div",
465
- {
466
- className: "absolute inset-0 flex items-center justify-center",
467
- "aria-hidden": "true",
468
- children: /* @__PURE__ */ jsxs(
469
- "svg",
470
- {
471
- viewBox: "0 0 64 64",
472
- className: "w-20 h-20 opacity-25",
473
- fill: "none",
474
- xmlns: "http://www.w3.org/2000/svg",
475
- children: [
476
- /* @__PURE__ */ jsx(
477
- "polygon",
478
- {
479
- points: "32,8 56,20 32,32 8,20",
480
- className: "fill-primary/40",
481
- stroke: "currentColor",
482
- strokeWidth: "1",
483
- strokeOpacity: "0.5"
484
- }
485
- ),
486
- /* @__PURE__ */ jsx(
487
- "polygon",
488
- {
489
- points: "8,20 32,32 32,56 8,44",
490
- className: "fill-primary/20",
491
- stroke: "currentColor",
492
- strokeWidth: "1",
493
- strokeOpacity: "0.5"
494
- }
495
- ),
496
- /* @__PURE__ */ jsx(
497
- "polygon",
498
- {
499
- points: "56,20 32,32 32,56 56,44",
500
- className: "fill-primary/30",
501
- stroke: "currentColor",
502
- strokeWidth: "1",
503
- strokeOpacity: "0.5"
504
- }
505
- )
506
- ]
507
- }
508
- )
509
- }
510
- )
380
+ product.bannerUrl ? /* @__PURE__ */ jsx("img", { src: product.bannerUrl, alt: "", "aria-hidden": "true", className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
381
+ /* @__PURE__ */ jsxs("svg", { className: "absolute inset-0 w-full h-full opacity-[0.07]", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
382
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("pattern", { id: "fg-hero-grid", width: "36", height: "36", patternUnits: "userSpaceOnUse", children: /* @__PURE__ */ jsx("path", { d: "M 36 0 L 0 0 0 36", fill: "none", stroke: "currentColor", strokeWidth: "1" }) }) }),
383
+ /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#fg-hero-grid)" })
384
+ ] }),
385
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center", "aria-hidden": "true", children: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 64 64", className: "w-20 h-20 opacity-25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
386
+ /* @__PURE__ */ jsx("polygon", { points: "32,8 56,20 32,32 8,20", className: "fill-primary/40", stroke: "currentColor", strokeWidth: "1", strokeOpacity: "0.5" }),
387
+ /* @__PURE__ */ jsx("polygon", { points: "8,20 32,32 32,56 8,44", className: "fill-primary/20", stroke: "currentColor", strokeWidth: "1", strokeOpacity: "0.5" }),
388
+ /* @__PURE__ */ jsx("polygon", { points: "56,20 32,32 32,56 56,44", className: "fill-primary/30", stroke: "currentColor", strokeWidth: "1", strokeOpacity: "0.5" })
389
+ ] }) })
511
390
  ] }),
512
391
  /* @__PURE__ */ jsx("span", { className: "absolute top-3 left-3 text-xs font-semibold px-2.5 py-1 rounded-full bg-primary text-primary-foreground shadow-sm", children: "Featured" }),
513
- /* @__PURE__ */ jsx("div", { className: "absolute bottom-4 left-4 w-14 h-14 rounded-xl shadow-lg overflow-hidden border-2 border-background", children: product.icon ? /* @__PURE__ */ jsx(
514
- "img",
515
- {
516
- src: product.icon,
517
- alt: "",
518
- "aria-hidden": "true",
519
- className: "w-full h-full object-cover"
520
- }
521
- ) : /* @__PURE__ */ jsx("div", { className: "w-full h-full bg-gradient-to-br from-primary/25 to-primary/10 flex items-center justify-center", children: /* @__PURE__ */ jsxs(
522
- "svg",
523
- {
524
- viewBox: "0 0 32 32",
525
- className: "w-8 h-8",
526
- fill: "none",
527
- xmlns: "http://www.w3.org/2000/svg",
528
- "aria-hidden": "true",
529
- children: [
530
- /* @__PURE__ */ jsx(
531
- "polygon",
532
- {
533
- points: "16,4 28,10 16,16 4,10",
534
- className: "fill-primary/40",
535
- stroke: "currentColor",
536
- strokeWidth: "0.6",
537
- strokeOpacity: "0.4"
538
- }
539
- ),
540
- /* @__PURE__ */ jsx(
541
- "polygon",
542
- {
543
- points: "4,10 16,16 16,28 4,22",
544
- className: "fill-primary/20",
545
- stroke: "currentColor",
546
- strokeWidth: "0.6",
547
- strokeOpacity: "0.4"
548
- }
549
- ),
550
- /* @__PURE__ */ jsx(
551
- "polygon",
552
- {
553
- points: "28,10 16,16 16,28 28,22",
554
- className: "fill-primary/30",
555
- stroke: "currentColor",
556
- strokeWidth: "0.6",
557
- strokeOpacity: "0.4"
558
- }
559
- )
560
- ]
561
- }
562
- ) }) })
392
+ /* @__PURE__ */ jsx("div", { className: "absolute bottom-4 left-4 w-14 h-14 rounded-xl shadow-lg overflow-hidden border-2 border-background", children: product.icon ? /* @__PURE__ */ jsx("img", { src: product.icon, alt: "", "aria-hidden": "true", className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsx("div", { className: "w-full h-full bg-gradient-to-br from-primary/25 to-primary/10 flex items-center justify-center", children: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 32 32", className: "w-8 h-8", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
393
+ /* @__PURE__ */ jsx("polygon", { points: "16,4 28,10 16,16 4,10", className: "fill-primary/40", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" }),
394
+ /* @__PURE__ */ jsx("polygon", { points: "4,10 16,16 16,28 4,22", className: "fill-primary/20", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" }),
395
+ /* @__PURE__ */ jsx("polygon", { points: "28,10 16,16 16,28 28,22", className: "fill-primary/30", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" })
396
+ ] }) }) })
563
397
  ] }),
564
398
  /* @__PURE__ */ jsxs("div", { className: "p-5 flex flex-col flex-1", children: [
565
399
  /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3 mb-2", children: [
566
400
  /* @__PURE__ */ jsx("h3", { className: "text-base font-bold text-foreground group-hover:text-primary transition-colors line-clamp-1", children: product.name }),
567
- /* @__PURE__ */ jsx(
568
- "span",
569
- {
570
- className: `text-sm font-bold flex-shrink-0 ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`,
571
- children: priceLabel
572
- }
573
- )
401
+ /* @__PURE__ */ jsx("span", { className: `text-sm font-bold flex-shrink-0 ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`, children: priceLabel })
574
402
  ] }),
575
403
  product.description && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground line-clamp-2 leading-relaxed flex-1", children: product.description }),
576
404
  /* @__PURE__ */ jsxs("div", { className: "mt-3 flex items-center gap-2", children: [
@@ -591,10 +419,7 @@ function ScrollRow({
591
419
  }) {
592
420
  const ref = useRef(null);
593
421
  function scroll(dir) {
594
- ref.current?.scrollBy({
595
- left: dir === "r" ? 272 : -272,
596
- behavior: "smooth"
597
- });
422
+ ref.current?.scrollBy({ left: dir === "r" ? 272 : -272, behavior: "smooth" });
598
423
  }
599
424
  return /* @__PURE__ */ jsxs("div", { className: "relative group/row", children: [
600
425
  /* @__PURE__ */ jsx(
@@ -604,19 +429,7 @@ function ScrollRow({
604
429
  onClick: () => scroll("l"),
605
430
  "aria-label": "Scroll left",
606
431
  className: "absolute left-0 top-1/2 -translate-y-1/2 -translate-x-4 z-10 w-8 h-8 rounded-full bg-background border border-border shadow-md items-center justify-center text-muted-foreground hover:text-primary hover:border-primary/40 transition-all hidden sm:flex opacity-0 group-hover/row:opacity-100",
607
- children: /* @__PURE__ */ jsx(
608
- "svg",
609
- {
610
- viewBox: "0 0 16 16",
611
- className: "w-4 h-4",
612
- fill: "none",
613
- stroke: "currentColor",
614
- strokeWidth: "1.5",
615
- strokeLinecap: "round",
616
- strokeLinejoin: "round",
617
- children: /* @__PURE__ */ jsx("path", { d: "M10 3L6 8l4 5" })
618
- }
619
- )
432
+ children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", className: "w-4 h-4", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M10 3L6 8l4 5" }) })
620
433
  }
621
434
  ),
622
435
  /* @__PURE__ */ jsx(
@@ -625,13 +438,7 @@ function ScrollRow({
625
438
  ref,
626
439
  className: "flex gap-3 overflow-x-auto pb-1 snap-x snap-mandatory",
627
440
  style: { scrollbarWidth: "none", msOverflowStyle: "none" },
628
- children: products.map((product) => /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 w-56 snap-start", children: /* @__PURE__ */ jsx(
629
- ProductCard,
630
- {
631
- product,
632
- onClick: () => onProductClick(product)
633
- }
634
- ) }, product.id))
441
+ children: products.map((product) => /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 w-56 snap-start", children: /* @__PURE__ */ jsx(ProductCard, { product, onClick: () => onProductClick(product) }) }, product.id))
635
442
  }
636
443
  ),
637
444
  /* @__PURE__ */ jsx(
@@ -641,19 +448,7 @@ function ScrollRow({
641
448
  onClick: () => scroll("r"),
642
449
  "aria-label": "Scroll right",
643
450
  className: "absolute right-0 top-1/2 -translate-y-1/2 translate-x-4 z-10 w-8 h-8 rounded-full bg-background border border-border shadow-md items-center justify-center text-muted-foreground hover:text-primary hover:border-primary/40 transition-all hidden sm:flex opacity-0 group-hover/row:opacity-100",
644
- children: /* @__PURE__ */ jsx(
645
- "svg",
646
- {
647
- viewBox: "0 0 16 16",
648
- className: "w-4 h-4",
649
- fill: "none",
650
- stroke: "currentColor",
651
- strokeWidth: "1.5",
652
- strokeLinecap: "round",
653
- strokeLinejoin: "round",
654
- children: /* @__PURE__ */ jsx("path", { d: "M6 3l4 5-4 5" })
655
- }
656
- )
451
+ children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", className: "w-4 h-4", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M6 3l4 5-4 5" }) })
657
452
  }
658
453
  )
659
454
  ] });
@@ -756,8 +551,10 @@ function StoreHomePage({
756
551
  const [grouped, setGrouped] = useState(null);
757
552
  const [loading, setLoading] = useState(true);
758
553
  const [error, setError] = useState(null);
554
+ const [retryKey, setRetryKey] = useState(0);
759
555
  useEffect(() => {
760
556
  let cancelled = false;
557
+ let autoRetryTimer = null;
761
558
  async function load() {
762
559
  setLoading(true);
763
560
  try {
@@ -771,7 +568,15 @@ function StoreHomePage({
771
568
  setGrouped(res.data.homeGroupedProducts);
772
569
  setError(null);
773
570
  } catch {
774
- if (!cancelled) setError("Failed to load store. Please try again.");
571
+ if (!cancelled) {
572
+ if (retryKey < 1) {
573
+ autoRetryTimer = setTimeout(() => {
574
+ if (!cancelled) setRetryKey(1);
575
+ }, 2e3);
576
+ } else {
577
+ setError("Failed to load store. Please try again.");
578
+ }
579
+ }
775
580
  } finally {
776
581
  if (!cancelled) setLoading(false);
777
582
  }
@@ -779,8 +584,9 @@ function StoreHomePage({
779
584
  load();
780
585
  return () => {
781
586
  cancelled = true;
587
+ if (autoRetryTimer) clearTimeout(autoRetryTimer);
782
588
  };
783
- }, [client, compatibleWith]);
589
+ }, [client, compatibleWith, retryKey]);
784
590
  function navigate(path) {
785
591
  if (onNavigate) {
786
592
  onNavigate(path);
@@ -808,65 +614,16 @@ function StoreHomePage({
808
614
  }
809
615
  ),
810
616
  /* @__PURE__ */ jsxs("section", { className: "relative overflow-hidden pt-14 pb-12 sm:pt-20 sm:pb-16", children: [
811
- /* @__PURE__ */ jsx(
812
- "div",
813
- {
814
- className: "absolute inset-0 bg-gradient-to-b from-background via-primary/[0.06] to-background pointer-events-none",
815
- "aria-hidden": "true"
816
- }
817
- ),
818
- /* @__PURE__ */ jsxs(
819
- "svg",
820
- {
821
- className: "absolute inset-0 w-full h-full opacity-[0.035] pointer-events-none",
822
- xmlns: "http://www.w3.org/2000/svg",
823
- "aria-hidden": "true",
824
- children: [
825
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
826
- "pattern",
827
- {
828
- id: "store-home-grid",
829
- width: "40",
830
- height: "40",
831
- patternUnits: "userSpaceOnUse",
832
- children: /* @__PURE__ */ jsx(
833
- "path",
834
- {
835
- d: "M 40 0 L 0 0 0 40",
836
- fill: "none",
837
- stroke: "currentColor",
838
- strokeWidth: "1"
839
- }
840
- )
841
- }
842
- ) }),
843
- /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#store-home-grid)" })
844
- ]
845
- }
846
- ),
847
- /* @__PURE__ */ jsx(
848
- "div",
849
- {
850
- className: "absolute -top-16 left-1/3 w-80 h-80 rounded-full bg-primary/10 blur-3xl pointer-events-none",
851
- "aria-hidden": "true"
852
- }
853
- ),
854
- /* @__PURE__ */ jsx(
855
- "div",
856
- {
857
- className: "absolute top-8 right-1/4 w-56 h-56 rounded-full bg-primary/8 blur-2xl pointer-events-none",
858
- "aria-hidden": "true"
859
- }
860
- ),
617
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-b from-background via-primary/[0.06] to-background pointer-events-none", "aria-hidden": "true" }),
618
+ /* @__PURE__ */ jsxs("svg", { className: "absolute inset-0 w-full h-full opacity-[0.035] pointer-events-none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
619
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("pattern", { id: "store-home-grid", width: "40", height: "40", patternUnits: "userSpaceOnUse", children: /* @__PURE__ */ jsx("path", { d: "M 40 0 L 0 0 0 40", fill: "none", stroke: "currentColor", strokeWidth: "1" }) }) }),
620
+ /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#store-home-grid)" })
621
+ ] }),
622
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-16 left-1/3 w-80 h-80 rounded-full bg-primary/10 blur-3xl pointer-events-none", "aria-hidden": "true" }),
623
+ /* @__PURE__ */ jsx("div", { className: "absolute top-8 right-1/4 w-56 h-56 rounded-full bg-primary/8 blur-2xl pointer-events-none", "aria-hidden": "true" }),
861
624
  /* @__PURE__ */ jsxs("div", { className: "relative max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: [
862
625
  /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2 px-3 py-1 rounded-full border border-primary/30 bg-primary/10 text-xs font-semibold text-primary mb-5", children: [
863
- /* @__PURE__ */ jsx(
864
- "span",
865
- {
866
- className: "w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0",
867
- "aria-hidden": "true"
868
- }
869
- ),
626
+ /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0", "aria-hidden": "true" }),
870
627
  "Community Marketplace"
871
628
  ] }),
872
629
  /* @__PURE__ */ jsx("h1", { className: "text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-foreground mb-4 leading-[1.08]", children: resolvedTitle }),
@@ -878,9 +635,7 @@ function StoreHomePage({
878
635
  onSubmit: (e) => {
879
636
  e.preventDefault();
880
637
  const q = new FormData(e.currentTarget).get("q");
881
- navigate(
882
- q.trim() ? `${browsePath}?q=${encodeURIComponent(q.trim())}` : browsePath
883
- );
638
+ navigate(q.trim() ? `${browsePath}?q=${encodeURIComponent(q.trim())}` : browsePath);
884
639
  },
885
640
  children: [
886
641
  /* @__PURE__ */ jsx(
@@ -922,23 +677,9 @@ function StoreHomePage({
922
677
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: [...Array(4)].map((_, i) => /* @__PURE__ */ jsx(GridCardSkeleton, {}, i)) })
923
678
  ] }) : error ? /* @__PURE__ */ jsxs("div", { className: "py-16 text-center", children: [
924
679
  /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-4", children: error }),
925
- /* @__PURE__ */ jsx(
926
- "button",
927
- {
928
- type: "button",
929
- onClick: () => window.location.reload(),
930
- className: "text-sm text-primary hover:underline",
931
- children: "Retry"
932
- }
933
- )
680
+ /* @__PURE__ */ jsx("button", { type: "button", onClick: () => setRetryKey((k) => k + 1), className: "text-sm text-primary hover:underline", children: "Retry" })
934
681
  ] }) : featuredItems.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-[1fr_2fr] gap-4 items-start", children: [
935
- /* @__PURE__ */ jsx(
936
- FeaturedHeroCard,
937
- {
938
- product: featuredItems[0],
939
- onNavigate: navigate
940
- }
941
- ),
682
+ /* @__PURE__ */ jsx(FeaturedHeroCard, { product: featuredItems[0], onNavigate: navigate }),
942
683
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: featuredItems.slice(1, 5).map((product) => /* @__PURE__ */ jsx(
943
684
  ProductCard,
944
685
  {
@@ -959,13 +700,7 @@ function StoreHomePage({
959
700
  onNavigate: navigate
960
701
  }
961
702
  ),
962
- loading ? /* @__PURE__ */ jsx("div", { className: "flex gap-3 overflow-hidden", children: [...Array(5)].map((_, i) => /* @__PURE__ */ jsx(ScrollCardSkeleton, {}, i)) }) : /* @__PURE__ */ jsx(
963
- ScrollRow,
964
- {
965
- products: popularItems,
966
- onProductClick: handleProductClick
967
- }
968
- )
703
+ loading ? /* @__PURE__ */ jsx("div", { className: "flex gap-3 overflow-hidden", children: [...Array(5)].map((_, i) => /* @__PURE__ */ jsx(ScrollCardSkeleton, {}, i)) }) : /* @__PURE__ */ jsx(ScrollRow, { products: popularItems, onProductClick: handleProductClick })
969
704
  ] }),
970
705
  (loading || freeItems.length > 0) && /* @__PURE__ */ jsxs("section", { children: [
971
706
  /* @__PURE__ */ jsx(
@@ -988,35 +723,16 @@ function StoreHomePage({
988
723
  ] })
989
724
  ] }),
990
725
  /* @__PURE__ */ jsxs("section", { className: "relative overflow-hidden border-t border-border", children: [
991
- /* @__PURE__ */ jsx(
992
- "div",
993
- {
994
- className: "absolute inset-0 bg-gradient-to-br from-primary/8 via-background to-primary/5 pointer-events-none",
995
- "aria-hidden": "true"
996
- }
997
- ),
998
- /* @__PURE__ */ jsx(
999
- "div",
1000
- {
1001
- className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-80 h-40 rounded-full bg-primary/12 blur-3xl pointer-events-none",
1002
- "aria-hidden": "true"
1003
- }
1004
- ),
726
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-primary/8 via-background to-primary/5 pointer-events-none", "aria-hidden": "true" }),
727
+ /* @__PURE__ */ jsx("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-80 h-40 rounded-full bg-primary/12 blur-3xl pointer-events-none", "aria-hidden": "true" }),
1005
728
  /* @__PURE__ */ jsxs("div", { className: "relative max-w-2xl mx-auto px-4 py-16 text-center", children: [
1006
729
  /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2 px-3 py-1 rounded-full border border-primary/30 bg-primary/10 text-xs font-semibold text-primary mb-5", children: [
1007
- /* @__PURE__ */ jsx(
1008
- "span",
1009
- {
1010
- className: "w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0",
1011
- "aria-hidden": "true"
1012
- }
1013
- ),
730
+ /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0", "aria-hidden": "true" }),
1014
731
  "Become a publisher"
1015
732
  ] }),
1016
733
  /* @__PURE__ */ jsx("h2", { className: "text-2xl sm:text-3xl font-bold text-foreground mb-3", children: "Built something useful?" }),
1017
734
  /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground mb-8 max-w-lg mx-auto leading-relaxed", children: [
1018
- "Share your workflows, nodes, and integrations with",
1019
- " ",
735
+ "Share your workflows, nodes, and integrations with ",
1020
736
  productName ?? "the",
1021
737
  " community. Earn from your work or contribute for free."
1022
738
  ] }),
@@ -1072,14 +788,7 @@ var PRICING_OPTIONS = [
1072
788
  ];
1073
789
  function parseUrlParams() {
1074
790
  if (typeof window === "undefined")
1075
- return {
1076
- q: "",
1077
- type: "",
1078
- pricingModel: "",
1079
- category: "",
1080
- sortBy: "RELEVANCE",
1081
- featured: false
1082
- };
791
+ return { q: "", type: "", pricingModel: "", category: "", sortBy: "RELEVANCE", featured: false };
1083
792
  const p = new URLSearchParams(window.location.search);
1084
793
  return {
1085
794
  q: p.get("q") ?? "",
@@ -1131,9 +840,7 @@ function StoreBrowsePage({
1131
840
  const [featured, setFeatured] = useState(initial.featured);
1132
841
  const [offset, setOffset] = useState(0);
1133
842
  const [result, setResult] = useState(null);
1134
- const [allProducts, setAllProducts] = useState(
1135
- []
1136
- );
843
+ const [allProducts, setAllProducts] = useState([]);
1137
844
  const [categories, setCategories] = useState([]);
1138
845
  const [loading, setLoading] = useState(true);
1139
846
  const [loadingMore, setLoadingMore] = useState(false);
@@ -1177,16 +884,7 @@ function StoreBrowsePage({
1177
884
  return () => {
1178
885
  cancelled = true;
1179
886
  };
1180
- }, [
1181
- client,
1182
- search,
1183
- type,
1184
- pricingModel,
1185
- category,
1186
- sortBy,
1187
- compatibleWith,
1188
- featured
1189
- ]);
887
+ }, [client, search, type, pricingModel, category, sortBy, compatibleWith, featured]);
1190
888
  function loadMore() {
1191
889
  const nextOffset = offset + PAGE_SIZE;
1192
890
  setLoadingMore(true);
@@ -1362,8 +1060,7 @@ function StoreBrowsePage({
1362
1060
  onClick: () => setFiltersOpen(!filtersOpen),
1363
1061
  className: "lg:hidden h-10 px-4 rounded-lg border border-border bg-background text-sm text-foreground hover:bg-muted/50 transition-colors",
1364
1062
  children: [
1365
- "Filters",
1366
- " ",
1063
+ "Filters ",
1367
1064
  hasActiveFilters && /* @__PURE__ */ jsx("span", { className: "text-primary", children: "\u2022" })
1368
1065
  ]
1369
1066
  }
@@ -1377,32 +1074,14 @@ function StoreBrowsePage({
1377
1074
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-4 flex-wrap", children: [
1378
1075
  /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: loading ? "Loading\u2026" : `${result?.totalCount ?? 0} results` }),
1379
1076
  hasActiveFilters && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-1.5", children: [
1380
- search && /* @__PURE__ */ jsx(
1381
- Chip,
1382
- {
1383
- label: `"${search}"`,
1384
- onRemove: () => {
1385
- setSearch("");
1386
- setInputValue("");
1387
- }
1388
- }
1389
- ),
1077
+ search && /* @__PURE__ */ jsx(Chip, { label: `"${search}"`, onRemove: () => {
1078
+ setSearch("");
1079
+ setInputValue("");
1080
+ } }),
1390
1081
  type && /* @__PURE__ */ jsx(Chip, { label: type, onRemove: () => setType("") }),
1391
- pricingModel && /* @__PURE__ */ jsx(
1392
- Chip,
1393
- {
1394
- label: pricingModel,
1395
- onRemove: () => setPricingModel("")
1396
- }
1397
- ),
1082
+ pricingModel && /* @__PURE__ */ jsx(Chip, { label: pricingModel, onRemove: () => setPricingModel("") }),
1398
1083
  category && /* @__PURE__ */ jsx(Chip, { label: category, onRemove: () => setCategory("") }),
1399
- featured && /* @__PURE__ */ jsx(
1400
- Chip,
1401
- {
1402
- label: "Featured",
1403
- onRemove: () => setFeatured(false)
1404
- }
1405
- )
1084
+ featured && /* @__PURE__ */ jsx(Chip, { label: "Featured", onRemove: () => setFeatured(false) })
1406
1085
  ] })
1407
1086
  ] }),
1408
1087
  loading ? /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-4", children: [...Array(12)].map((_, i) => /* @__PURE__ */ jsx(
@@ -1454,97 +1133,9 @@ function StoreBrowsePage({
1454
1133
  function Chip({ label, onRemove }) {
1455
1134
  return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-xs bg-primary/10 text-primary rounded-full px-2.5 py-0.5 font-medium", children: [
1456
1135
  label,
1457
- /* @__PURE__ */ jsx(
1458
- "button",
1459
- {
1460
- type: "button",
1461
- onClick: onRemove,
1462
- "aria-label": `Remove ${label}`,
1463
- className: "hover:opacity-70",
1464
- children: "\xD7"
1465
- }
1466
- )
1136
+ /* @__PURE__ */ jsx("button", { type: "button", onClick: onRemove, "aria-label": `Remove ${label}`, className: "hover:opacity-70", children: "\xD7" })
1467
1137
  ] });
1468
1138
  }
1469
- function detectTheme() {
1470
- if (typeof document === "undefined") return "light";
1471
- const root = document.documentElement;
1472
- return root.classList.contains("dark") || root.getAttribute("data-theme") === "dark" ? "dark" : "light";
1473
- }
1474
- function WorkflowEmbed({
1475
- appUrl,
1476
- productId,
1477
- theme,
1478
- clickToInteract = true,
1479
- hideCta = false,
1480
- className,
1481
- onError
1482
- }) {
1483
- const iframeRef = useRef(null);
1484
- const [status, setStatus] = useState("loading");
1485
- const [interactive, setInteractive] = useState(!clickToInteract);
1486
- const resolvedTheme = useMemo(() => theme ?? detectTheme(), [theme]);
1487
- const src = useMemo(() => {
1488
- const base = appUrl.replace(/\/+$/, "");
1489
- const params = new URLSearchParams({
1490
- productId,
1491
- theme: resolvedTheme
1492
- });
1493
- if (hideCta) params.set("cta", "false");
1494
- return `${base}/embed/workflow?${params.toString()}`;
1495
- }, [appUrl, productId, resolvedTheme, hideCta]);
1496
- useEffect(() => {
1497
- const handler = (event) => {
1498
- if (event.source !== iframeRef.current?.contentWindow) return;
1499
- const data = event.data;
1500
- if (data?.type === "fluidgrids:embed:loaded") setStatus("loaded");
1501
- if (data?.type === "fluidgrids:embed:error") {
1502
- setStatus("error");
1503
- onError?.(data.message ?? "Failed to load workflow preview");
1504
- }
1505
- };
1506
- window.addEventListener("message", handler);
1507
- return () => window.removeEventListener("message", handler);
1508
- }, [onError]);
1509
- if (status === "error") return null;
1510
- return /* @__PURE__ */ jsxs(
1511
- "div",
1512
- {
1513
- className: `relative w-full overflow-hidden rounded-xl border border-border bg-muted ${className ?? ""}`,
1514
- style: { aspectRatio: "16 / 9" },
1515
- children: [
1516
- status === "loading" && /* @__PURE__ */ jsx(
1517
- "div",
1518
- {
1519
- className: "absolute inset-0 animate-pulse bg-muted",
1520
- "aria-hidden": "true"
1521
- }
1522
- ),
1523
- /* @__PURE__ */ jsx(
1524
- "iframe",
1525
- {
1526
- ref: iframeRef,
1527
- src,
1528
- title: "Workflow preview",
1529
- loading: "lazy",
1530
- className: "h-full w-full border-0",
1531
- style: interactive ? void 0 : { pointerEvents: "none" }
1532
- }
1533
- ),
1534
- clickToInteract && !interactive && status === "loaded" && /* @__PURE__ */ jsx(
1535
- "button",
1536
- {
1537
- type: "button",
1538
- onClick: () => setInteractive(true),
1539
- className: "absolute inset-0 flex items-end justify-center bg-transparent pb-4",
1540
- "aria-label": "Click to explore the workflow",
1541
- children: /* @__PURE__ */ jsx("span", { className: "rounded-full border border-border bg-background/90 px-4 py-1.5 text-xs font-medium text-foreground shadow-sm backdrop-blur transition-colors hover:bg-background", children: "Click to explore" })
1542
- }
1543
- )
1544
- ]
1545
- }
1546
- );
1547
- }
1548
1139
  var ANIM_STYLES = `
1549
1140
  @keyframes sdFadeUp {
1550
1141
  from { opacity: 0; transform: translateY(16px); }
@@ -1577,11 +1168,50 @@ var ANIM_STYLES = `
1577
1168
  .sd-d5 { animation-delay: 320ms; }
1578
1169
  .sd-d6 { animation-delay: 400ms; }
1579
1170
  `;
1580
- function RatingBar({
1581
- label,
1582
- count,
1583
- total
1584
- }) {
1171
+ function mdInline(text) {
1172
+ const parts = text.split(/(\*\*[^*]+\*\*)/g);
1173
+ if (parts.length === 1) return text;
1174
+ return /* @__PURE__ */ jsx(Fragment, { children: parts.map(
1175
+ (part, i) => part.startsWith("**") && part.endsWith("**") ? /* @__PURE__ */ jsx("strong", { className: "font-semibold text-foreground", children: part.slice(2, -2) }, i) : part || null
1176
+ ) });
1177
+ }
1178
+ function MdAbout({ content }) {
1179
+ let key = 0;
1180
+ const nodes = [];
1181
+ let listItems = [];
1182
+ const flushList = () => {
1183
+ if (!listItems.length) return;
1184
+ nodes.push(
1185
+ /* @__PURE__ */ jsx("ul", { className: "list-disc list-inside space-y-0.5 my-2", children: listItems.map((item, i) => /* @__PURE__ */ jsx("li", { className: "text-sm leading-relaxed", children: mdInline(item) }, i)) }, key++)
1186
+ );
1187
+ listItems = [];
1188
+ };
1189
+ for (const line of content.split("\n")) {
1190
+ if (!line.trim()) {
1191
+ flushList();
1192
+ continue;
1193
+ }
1194
+ const hm = line.match(/^(#{1,3})\s+(.*)/);
1195
+ if (hm) {
1196
+ flushList();
1197
+ nodes.push(
1198
+ /* @__PURE__ */ jsx("p", { className: "font-semibold text-foreground mt-4 first:mt-0 text-sm", children: mdInline(hm[2]) }, key++)
1199
+ );
1200
+ continue;
1201
+ }
1202
+ if (/^[-*]\s/.test(line)) {
1203
+ listItems.push(line.replace(/^[-*]\s+/, ""));
1204
+ continue;
1205
+ }
1206
+ flushList();
1207
+ nodes.push(
1208
+ /* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed mb-1", children: mdInline(line) }, key++)
1209
+ );
1210
+ }
1211
+ flushList();
1212
+ return /* @__PURE__ */ jsx(Fragment, { children: nodes });
1213
+ }
1214
+ function RatingBar({ label, count, total }) {
1585
1215
  const pct = total > 0 ? Math.round(count / total * 100) : 0;
1586
1216
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
1587
1217
  /* @__PURE__ */ jsx("span", { className: "w-12 text-right shrink-0", children: label }),
@@ -1597,63 +1227,12 @@ function RatingBar({
1597
1227
  }
1598
1228
  function IconBlock({ src }) {
1599
1229
  return /* @__PURE__ */ jsxs("div", { className: "relative flex-shrink-0", children: [
1600
- /* @__PURE__ */ jsx(
1601
- "div",
1602
- {
1603
- className: "sd-gp absolute -inset-1.5 rounded-2xl bg-primary/30 blur-md pointer-events-none",
1604
- "aria-hidden": "true"
1605
- }
1606
- ),
1607
- /* @__PURE__ */ jsx("div", { className: "sd-si relative w-20 h-20 rounded-2xl overflow-hidden shadow-lg ring-1 ring-border", children: src ? /* @__PURE__ */ jsx(
1608
- "img",
1609
- {
1610
- src,
1611
- alt: "",
1612
- "aria-hidden": true,
1613
- className: "w-full h-full object-cover"
1614
- }
1615
- ) : /* @__PURE__ */ jsx("div", { className: "w-full h-full bg-gradient-to-br from-primary/25 to-primary/8 flex items-center justify-center", children: /* @__PURE__ */ jsxs(
1616
- "svg",
1617
- {
1618
- viewBox: "0 0 40 40",
1619
- className: "w-10 h-10",
1620
- fill: "none",
1621
- xmlns: "http://www.w3.org/2000/svg",
1622
- "aria-hidden": "true",
1623
- children: [
1624
- /* @__PURE__ */ jsx(
1625
- "polygon",
1626
- {
1627
- points: "20,4 34,11 20,18 6,11",
1628
- className: "fill-primary/40",
1629
- stroke: "currentColor",
1630
- strokeWidth: "0.6",
1631
- strokeOpacity: "0.4"
1632
- }
1633
- ),
1634
- /* @__PURE__ */ jsx(
1635
- "polygon",
1636
- {
1637
- points: "6,11 20,18 20,34 6,27",
1638
- className: "fill-primary/20",
1639
- stroke: "currentColor",
1640
- strokeWidth: "0.6",
1641
- strokeOpacity: "0.4"
1642
- }
1643
- ),
1644
- /* @__PURE__ */ jsx(
1645
- "polygon",
1646
- {
1647
- points: "34,11 20,18 20,34 34,27",
1648
- className: "fill-primary/30",
1649
- stroke: "currentColor",
1650
- strokeWidth: "0.6",
1651
- strokeOpacity: "0.4"
1652
- }
1653
- )
1654
- ]
1655
- }
1656
- ) }) })
1230
+ /* @__PURE__ */ jsx("div", { className: "sd-gp absolute -inset-1.5 rounded-2xl bg-primary/30 blur-md pointer-events-none", "aria-hidden": "true" }),
1231
+ /* @__PURE__ */ jsx("div", { className: "sd-si relative w-20 h-20 rounded-2xl overflow-hidden shadow-lg ring-1 ring-border", children: src ? /* @__PURE__ */ jsx("img", { src, alt: "", "aria-hidden": true, className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsx("div", { className: "w-full h-full bg-gradient-to-br from-primary/25 to-primary/8 flex items-center justify-center", children: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 40 40", className: "w-10 h-10", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
1232
+ /* @__PURE__ */ jsx("polygon", { points: "20,4 34,11 20,18 6,11", className: "fill-primary/40", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" }),
1233
+ /* @__PURE__ */ jsx("polygon", { points: "6,11 20,18 20,34 6,27", className: "fill-primary/20", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" }),
1234
+ /* @__PURE__ */ jsx("polygon", { points: "34,11 20,18 20,34 34,27", className: "fill-primary/30", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" })
1235
+ ] }) }) })
1657
1236
  ] });
1658
1237
  }
1659
1238
  function StoreProductDetailPage({
@@ -1669,7 +1248,6 @@ function StoreProductDetailPage({
1669
1248
  const [error, setError] = useState(null);
1670
1249
  const [activeScreenshot, setActiveScreenshot] = useState(0);
1671
1250
  const [screenshotKey, setScreenshotKey] = useState(0);
1672
- const [embedFailed, setEmbedFailed] = useState(false);
1673
1251
  useEffect(() => {
1674
1252
  if (!slug && !id) {
1675
1253
  setError("Product not found.");
@@ -1723,30 +1301,11 @@ function StoreProductDetailPage({
1723
1301
  if (error || !details) {
1724
1302
  return /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 text-center", children: [
1725
1303
  /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-4", children: error ?? "Product not found." }),
1726
- /* @__PURE__ */ jsx(
1727
- "button",
1728
- {
1729
- type: "button",
1730
- onClick: () => navigate("/store"),
1731
- className: "text-sm text-primary hover:underline",
1732
- children: "Back to Store"
1733
- }
1734
- )
1304
+ /* @__PURE__ */ jsx("button", { type: "button", onClick: () => navigate("/store"), className: "text-sm text-primary hover:underline", children: "Back to Store" })
1735
1305
  ] });
1736
1306
  }
1737
- const {
1738
- product,
1739
- publisher,
1740
- reviews,
1741
- reviewsCount,
1742
- relatedProducts,
1743
- ratingDistribution
1744
- } = details;
1745
- const priceLabel = formatPrice(
1746
- product.price,
1747
- product.currency,
1748
- product.pricingModel
1749
- );
1307
+ const { product, publisher, reviews, reviewsCount, relatedProducts, ratingDistribution } = details;
1308
+ const priceLabel = formatPrice(product.price, product.currency, product.pricingModel);
1750
1309
  const screenshots = product.screenshots ?? [];
1751
1310
  const totalRatings = ratingDistribution ? ratingDistribution.fiveStars + ratingDistribution.fourStars + ratingDistribution.threeStars + ratingDistribution.twoStars + ratingDistribution.oneStar : 0;
1752
1311
  return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
@@ -1760,60 +1319,15 @@ function StoreProductDetailPage({
1760
1319
  }
1761
1320
  ),
1762
1321
  /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden", children: [
1763
- /* @__PURE__ */ jsx(
1764
- "div",
1765
- {
1766
- className: "absolute inset-0 bg-gradient-to-b from-primary/[0.07] via-background to-background pointer-events-none",
1767
- "aria-hidden": "true"
1768
- }
1769
- ),
1770
- /* @__PURE__ */ jsxs(
1771
- "svg",
1772
- {
1773
- className: "absolute inset-0 w-full h-full opacity-[0.04] pointer-events-none",
1774
- xmlns: "http://www.w3.org/2000/svg",
1775
- "aria-hidden": "true",
1776
- children: [
1777
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
1778
- "pattern",
1779
- {
1780
- id: "sd-grid",
1781
- width: "40",
1782
- height: "40",
1783
- patternUnits: "userSpaceOnUse",
1784
- children: /* @__PURE__ */ jsx(
1785
- "path",
1786
- {
1787
- d: "M 40 0 L 0 0 0 40",
1788
- fill: "none",
1789
- stroke: "currentColor",
1790
- strokeWidth: "1"
1791
- }
1792
- )
1793
- }
1794
- ) }),
1795
- /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#sd-grid)" })
1796
- ]
1797
- }
1798
- ),
1799
- /* @__PURE__ */ jsx(
1800
- "div",
1801
- {
1802
- className: "absolute -top-12 -left-12 w-72 h-72 rounded-full bg-primary/10 blur-3xl pointer-events-none",
1803
- "aria-hidden": "true"
1804
- }
1805
- ),
1322
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-b from-primary/[0.07] via-background to-background pointer-events-none", "aria-hidden": "true" }),
1323
+ /* @__PURE__ */ jsxs("svg", { className: "absolute inset-0 w-full h-full opacity-[0.04] pointer-events-none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
1324
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("pattern", { id: "sd-grid", width: "40", height: "40", patternUnits: "userSpaceOnUse", children: /* @__PURE__ */ jsx("path", { d: "M 40 0 L 0 0 0 40", fill: "none", stroke: "currentColor", strokeWidth: "1" }) }) }),
1325
+ /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#sd-grid)" })
1326
+ ] }),
1327
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-12 -left-12 w-72 h-72 rounded-full bg-primary/10 blur-3xl pointer-events-none", "aria-hidden": "true" }),
1806
1328
  /* @__PURE__ */ jsxs("div", { className: "relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-6 pb-8", children: [
1807
1329
  /* @__PURE__ */ jsxs("nav", { className: "sd-fi text-sm text-muted-foreground mb-6 flex items-center gap-1.5 flex-wrap", children: [
1808
- /* @__PURE__ */ jsx(
1809
- "button",
1810
- {
1811
- type: "button",
1812
- onClick: () => navigate("/store"),
1813
- className: "hover:text-primary transition-colors",
1814
- children: "Store"
1815
- }
1816
- ),
1330
+ /* @__PURE__ */ jsx("button", { type: "button", onClick: () => navigate("/store"), className: "hover:text-primary transition-colors", children: "Store" }),
1817
1331
  /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u203A" }),
1818
1332
  product.category && /* @__PURE__ */ jsxs(Fragment, { children: [
1819
1333
  /* @__PURE__ */ jsx(
@@ -1879,14 +1393,6 @@ function StoreProductDetailPage({
1879
1393
  }
1880
1394
  )
1881
1395
  ] }),
1882
- product.type === "WORKFLOW" && !embedFailed && /* @__PURE__ */ jsx("div", { className: "sd-fu sd-d3 mb-8", children: /* @__PURE__ */ jsx(
1883
- WorkflowEmbed,
1884
- {
1885
- appUrl: appLoginUrl,
1886
- productId: product.id,
1887
- onError: () => setEmbedFailed(true)
1888
- }
1889
- ) }),
1890
1396
  screenshots.length > 0 && /* @__PURE__ */ jsxs("div", { className: "sd-fu sd-d3 mb-8", children: [
1891
1397
  /* @__PURE__ */ jsx("div", { className: "rounded-xl overflow-hidden bg-muted aspect-video mb-3 shadow-md", children: /* @__PURE__ */ jsx(
1892
1398
  "img",
@@ -1903,33 +1409,19 @@ function StoreProductDetailPage({
1903
1409
  type: "button",
1904
1410
  onClick: () => switchScreenshot(i),
1905
1411
  className: `w-20 h-14 rounded-lg overflow-hidden flex-shrink-0 border-2 transition-all duration-200 ${i === activeScreenshot ? "border-primary shadow-sm shadow-primary/20" : "border-transparent opacity-50 hover:opacity-80"}`,
1906
- children: /* @__PURE__ */ jsx(
1907
- "img",
1908
- {
1909
- src,
1910
- alt: `Thumbnail ${i + 1}`,
1911
- className: "w-full h-full object-cover"
1912
- }
1913
- )
1412
+ children: /* @__PURE__ */ jsx("img", { src, alt: `Thumbnail ${i + 1}`, className: "w-full h-full object-cover" })
1914
1413
  },
1915
1414
  i
1916
1415
  )) })
1917
1416
  ] }),
1918
1417
  product.longDescription && /* @__PURE__ */ jsxs("div", { className: "sd-fu sd-d4 mb-8", children: [
1919
1418
  /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold text-foreground mb-3", children: "About" }),
1920
- /* @__PURE__ */ jsx("div", { className: "prose prose-sm max-w-none text-muted-foreground leading-relaxed whitespace-pre-line", children: product.longDescription })
1419
+ /* @__PURE__ */ jsx("div", { className: "text-muted-foreground", children: /* @__PURE__ */ jsx(MdAbout, { content: product.longDescription }) })
1921
1420
  ] }),
1922
1421
  publisher && /* @__PURE__ */ jsxs("div", { className: "sd-fu sd-d5 mb-8 p-4 rounded-xl border border-border bg-card hover:border-primary/30 transition-colors duration-300", children: [
1923
1422
  /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold text-foreground mb-3", children: "Publisher" }),
1924
1423
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
1925
- publisher.logoUrl ? /* @__PURE__ */ jsx(
1926
- "img",
1927
- {
1928
- src: publisher.logoUrl,
1929
- alt: publisher.name,
1930
- className: "w-10 h-10 rounded-full object-cover"
1931
- }
1932
- ) : /* @__PURE__ */ jsx("div", { className: "w-10 h-10 rounded-full bg-primary/10 flex items-center justify-center text-primary text-sm font-bold", children: publisher.name.charAt(0).toUpperCase() }),
1424
+ publisher.logoUrl ? /* @__PURE__ */ jsx("img", { src: publisher.logoUrl, alt: publisher.name, className: "w-10 h-10 rounded-full object-cover" }) : /* @__PURE__ */ jsx("div", { className: "w-10 h-10 rounded-full bg-primary/10 flex items-center justify-center text-primary text-sm font-bold", children: publisher.name.charAt(0).toUpperCase() }),
1933
1425
  /* @__PURE__ */ jsxs("div", { children: [
1934
1426
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
1935
1427
  /* @__PURE__ */ jsx("span", { className: "font-semibold text-foreground text-sm", children: publisher.name }),
@@ -1955,46 +1447,11 @@ function StoreProductDetailPage({
1955
1447
  ] })
1956
1448
  ] }),
1957
1449
  /* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-1.5 pt-1", children: [
1958
- /* @__PURE__ */ jsx(
1959
- RatingBar,
1960
- {
1961
- label: "5 \u2605",
1962
- count: ratingDistribution.fiveStars,
1963
- total: totalRatings
1964
- }
1965
- ),
1966
- /* @__PURE__ */ jsx(
1967
- RatingBar,
1968
- {
1969
- label: "4 \u2605",
1970
- count: ratingDistribution.fourStars,
1971
- total: totalRatings
1972
- }
1973
- ),
1974
- /* @__PURE__ */ jsx(
1975
- RatingBar,
1976
- {
1977
- label: "3 \u2605",
1978
- count: ratingDistribution.threeStars,
1979
- total: totalRatings
1980
- }
1981
- ),
1982
- /* @__PURE__ */ jsx(
1983
- RatingBar,
1984
- {
1985
- label: "2 \u2605",
1986
- count: ratingDistribution.twoStars,
1987
- total: totalRatings
1988
- }
1989
- ),
1990
- /* @__PURE__ */ jsx(
1991
- RatingBar,
1992
- {
1993
- label: "1 \u2605",
1994
- count: ratingDistribution.oneStar,
1995
- total: totalRatings
1996
- }
1997
- )
1450
+ /* @__PURE__ */ jsx(RatingBar, { label: "5 \u2605", count: ratingDistribution.fiveStars, total: totalRatings }),
1451
+ /* @__PURE__ */ jsx(RatingBar, { label: "4 \u2605", count: ratingDistribution.fourStars, total: totalRatings }),
1452
+ /* @__PURE__ */ jsx(RatingBar, { label: "3 \u2605", count: ratingDistribution.threeStars, total: totalRatings }),
1453
+ /* @__PURE__ */ jsx(RatingBar, { label: "2 \u2605", count: ratingDistribution.twoStars, total: totalRatings }),
1454
+ /* @__PURE__ */ jsx(RatingBar, { label: "1 \u2605", count: ratingDistribution.oneStar, total: totalRatings })
1998
1455
  ] })
1999
1456
  ] }),
2000
1457
  /* @__PURE__ */ jsx("div", { className: "space-y-3", children: reviews.slice(0, 5).map((review, idx) => /* @__PURE__ */ jsxs(
@@ -2009,14 +1466,11 @@ function StoreProductDetailPage({
2009
1466
  ] }),
2010
1467
  review.title && /* @__PURE__ */ jsx("p", { className: "font-semibold text-sm text-foreground mb-1", children: review.title }),
2011
1468
  review.comment && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: review.comment }),
2012
- review.createdAt && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-2", children: new Date(review.createdAt).toLocaleDateString(
2013
- "en-US",
2014
- {
2015
- year: "numeric",
2016
- month: "short",
2017
- day: "numeric"
2018
- }
2019
- ) })
1469
+ review.createdAt && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-2", children: new Date(review.createdAt).toLocaleDateString("en-US", {
1470
+ year: "numeric",
1471
+ month: "short",
1472
+ day: "numeric"
1473
+ }) })
2020
1474
  ]
2021
1475
  },
2022
1476
  review.id
@@ -2036,13 +1490,7 @@ function StoreProductDetailPage({
2036
1490
  ] }),
2037
1491
  /* @__PURE__ */ jsx("aside", { className: "lg:sticky lg:top-24 self-start", children: /* @__PURE__ */ jsxs("div", { className: "sd-fu sd-d4 bg-card border border-border rounded-xl p-5 space-y-4 hover:border-primary/30 transition-colors duration-300 hover:shadow-lg hover:shadow-primary/5", children: [
2038
1492
  /* @__PURE__ */ jsxs("div", { children: [
2039
- /* @__PURE__ */ jsx(
2040
- "div",
2041
- {
2042
- className: `text-3xl font-extrabold ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`,
2043
- children: priceLabel
2044
- }
2045
- ),
1493
+ /* @__PURE__ */ jsx("div", { className: `text-3xl font-extrabold ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`, children: priceLabel }),
2046
1494
  product.pricingModel === "SUBSCRIPTION" && /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: "per month" })
2047
1495
  ] }),
2048
1496
  /* @__PURE__ */ jsx(
@@ -2095,6 +1543,6 @@ function StoreProductDetailPage({
2095
1543
  ] });
2096
1544
  }
2097
1545
 
2098
- export { ProductCard, StarRating, StoreBrowsePage, StoreHomePage, StoreProductDetailPage, TypeBadge, WorkflowEmbed, formatDownloads, formatPrice };
1546
+ export { ProductCard, StarRating, StoreBrowsePage, StoreHomePage, StoreProductDetailPage, TypeBadge, formatDownloads, formatPrice };
2099
1547
  //# sourceMappingURL=index.mjs.map
2100
1548
  //# sourceMappingURL=index.mjs.map