@burdenoff/website-sdk 2026.710.1 → 2026.716.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -6240,7 +6240,11 @@ function TypeBadge({ type }) {
6240
6240
  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 });
6241
6241
  }
6242
6242
  function ProductCard({ product, onClick, href }) {
6243
- const priceLabel = formatPrice2(product.price, product.currency, product.pricingModel);
6243
+ const priceLabel = formatPrice2(
6244
+ product.price,
6245
+ product.currency,
6246
+ product.pricingModel
6247
+ );
6244
6248
  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: [
6245
6249
  /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
6246
6250
  /* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-lg bg-muted flex-shrink-0 overflow-hidden", children: product.icon ? /* @__PURE__ */ jsx(
@@ -6251,11 +6255,48 @@ function ProductCard({ product, onClick, href }) {
6251
6255
  "aria-hidden": "true",
6252
6256
  className: "w-full h-full object-cover"
6253
6257
  }
6254
- ) : /* @__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: [
6255
- /* @__PURE__ */ jsx("polygon", { points: "16,4 28,10 16,16 4,10", className: "fill-primary/30", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.35" }),
6256
- /* @__PURE__ */ jsx("polygon", { points: "4,10 16,16 16,28 4,22", className: "fill-primary/15", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.35" }),
6257
- /* @__PURE__ */ jsx("polygon", { points: "28,10 16,16 16,28 28,22", className: "fill-primary/20", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.35" })
6258
- ] }) }) }),
6258
+ ) : /* @__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(
6259
+ "svg",
6260
+ {
6261
+ viewBox: "0 0 32 32",
6262
+ className: "w-8 h-8",
6263
+ fill: "none",
6264
+ xmlns: "http://www.w3.org/2000/svg",
6265
+ "aria-hidden": "true",
6266
+ children: [
6267
+ /* @__PURE__ */ jsx(
6268
+ "polygon",
6269
+ {
6270
+ points: "16,4 28,10 16,16 4,10",
6271
+ className: "fill-primary/30",
6272
+ stroke: "currentColor",
6273
+ strokeWidth: "0.6",
6274
+ strokeOpacity: "0.35"
6275
+ }
6276
+ ),
6277
+ /* @__PURE__ */ jsx(
6278
+ "polygon",
6279
+ {
6280
+ points: "4,10 16,16 16,28 4,22",
6281
+ className: "fill-primary/15",
6282
+ stroke: "currentColor",
6283
+ strokeWidth: "0.6",
6284
+ strokeOpacity: "0.35"
6285
+ }
6286
+ ),
6287
+ /* @__PURE__ */ jsx(
6288
+ "polygon",
6289
+ {
6290
+ points: "28,10 16,16 16,28 28,22",
6291
+ className: "fill-primary/20",
6292
+ stroke: "currentColor",
6293
+ strokeWidth: "0.6",
6294
+ strokeOpacity: "0.35"
6295
+ }
6296
+ )
6297
+ ]
6298
+ }
6299
+ ) }) }),
6259
6300
  /* @__PURE__ */ jsx(TypeBadge, { type: product.type })
6260
6301
  ] }),
6261
6302
  /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
@@ -6364,7 +6405,11 @@ function FeaturedHeroCard({
6364
6405
  product,
6365
6406
  onNavigate
6366
6407
  }) {
6367
- const priceLabel = formatPrice2(product.price, product.currency, product.pricingModel);
6408
+ const priceLabel = formatPrice2(
6409
+ product.price,
6410
+ product.currency,
6411
+ product.pricingModel
6412
+ );
6368
6413
  return /* @__PURE__ */ jsxs(
6369
6414
  "button",
6370
6415
  {
@@ -6373,28 +6418,155 @@ function FeaturedHeroCard({
6373
6418
  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",
6374
6419
  children: [
6375
6420
  /* @__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: [
6376
- product.bannerUrl ? /* @__PURE__ */ jsx("img", { src: product.bannerUrl, alt: "", "aria-hidden": "true", className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
6377
- /* @__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: [
6378
- /* @__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" }) }) }),
6379
- /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#fg-hero-grid)" })
6380
- ] }),
6381
- /* @__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: [
6382
- /* @__PURE__ */ jsx("polygon", { points: "32,8 56,20 32,32 8,20", className: "fill-primary/40", stroke: "currentColor", strokeWidth: "1", strokeOpacity: "0.5" }),
6383
- /* @__PURE__ */ jsx("polygon", { points: "8,20 32,32 32,56 8,44", className: "fill-primary/20", stroke: "currentColor", strokeWidth: "1", strokeOpacity: "0.5" }),
6384
- /* @__PURE__ */ jsx("polygon", { points: "56,20 32,32 32,56 56,44", className: "fill-primary/30", stroke: "currentColor", strokeWidth: "1", strokeOpacity: "0.5" })
6385
- ] }) })
6421
+ product.bannerUrl ? /* @__PURE__ */ jsx(
6422
+ "img",
6423
+ {
6424
+ src: product.bannerUrl,
6425
+ alt: "",
6426
+ "aria-hidden": "true",
6427
+ className: "w-full h-full object-cover"
6428
+ }
6429
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
6430
+ /* @__PURE__ */ jsxs(
6431
+ "svg",
6432
+ {
6433
+ className: "absolute inset-0 w-full h-full opacity-[0.07]",
6434
+ xmlns: "http://www.w3.org/2000/svg",
6435
+ "aria-hidden": "true",
6436
+ children: [
6437
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
6438
+ "pattern",
6439
+ {
6440
+ id: "fg-hero-grid",
6441
+ width: "36",
6442
+ height: "36",
6443
+ patternUnits: "userSpaceOnUse",
6444
+ children: /* @__PURE__ */ jsx(
6445
+ "path",
6446
+ {
6447
+ d: "M 36 0 L 0 0 0 36",
6448
+ fill: "none",
6449
+ stroke: "currentColor",
6450
+ strokeWidth: "1"
6451
+ }
6452
+ )
6453
+ }
6454
+ ) }),
6455
+ /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#fg-hero-grid)" })
6456
+ ]
6457
+ }
6458
+ ),
6459
+ /* @__PURE__ */ jsx(
6460
+ "div",
6461
+ {
6462
+ className: "absolute inset-0 flex items-center justify-center",
6463
+ "aria-hidden": "true",
6464
+ children: /* @__PURE__ */ jsxs(
6465
+ "svg",
6466
+ {
6467
+ viewBox: "0 0 64 64",
6468
+ className: "w-20 h-20 opacity-25",
6469
+ fill: "none",
6470
+ xmlns: "http://www.w3.org/2000/svg",
6471
+ children: [
6472
+ /* @__PURE__ */ jsx(
6473
+ "polygon",
6474
+ {
6475
+ points: "32,8 56,20 32,32 8,20",
6476
+ className: "fill-primary/40",
6477
+ stroke: "currentColor",
6478
+ strokeWidth: "1",
6479
+ strokeOpacity: "0.5"
6480
+ }
6481
+ ),
6482
+ /* @__PURE__ */ jsx(
6483
+ "polygon",
6484
+ {
6485
+ points: "8,20 32,32 32,56 8,44",
6486
+ className: "fill-primary/20",
6487
+ stroke: "currentColor",
6488
+ strokeWidth: "1",
6489
+ strokeOpacity: "0.5"
6490
+ }
6491
+ ),
6492
+ /* @__PURE__ */ jsx(
6493
+ "polygon",
6494
+ {
6495
+ points: "56,20 32,32 32,56 56,44",
6496
+ className: "fill-primary/30",
6497
+ stroke: "currentColor",
6498
+ strokeWidth: "1",
6499
+ strokeOpacity: "0.5"
6500
+ }
6501
+ )
6502
+ ]
6503
+ }
6504
+ )
6505
+ }
6506
+ )
6386
6507
  ] }),
6387
6508
  /* @__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" }),
6388
- /* @__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: [
6389
- /* @__PURE__ */ jsx("polygon", { points: "16,4 28,10 16,16 4,10", className: "fill-primary/40", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" }),
6390
- /* @__PURE__ */ jsx("polygon", { points: "4,10 16,16 16,28 4,22", className: "fill-primary/20", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" }),
6391
- /* @__PURE__ */ jsx("polygon", { points: "28,10 16,16 16,28 28,22", className: "fill-primary/30", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" })
6392
- ] }) }) })
6509
+ /* @__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(
6510
+ "img",
6511
+ {
6512
+ src: product.icon,
6513
+ alt: "",
6514
+ "aria-hidden": "true",
6515
+ className: "w-full h-full object-cover"
6516
+ }
6517
+ ) : /* @__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(
6518
+ "svg",
6519
+ {
6520
+ viewBox: "0 0 32 32",
6521
+ className: "w-8 h-8",
6522
+ fill: "none",
6523
+ xmlns: "http://www.w3.org/2000/svg",
6524
+ "aria-hidden": "true",
6525
+ children: [
6526
+ /* @__PURE__ */ jsx(
6527
+ "polygon",
6528
+ {
6529
+ points: "16,4 28,10 16,16 4,10",
6530
+ className: "fill-primary/40",
6531
+ stroke: "currentColor",
6532
+ strokeWidth: "0.6",
6533
+ strokeOpacity: "0.4"
6534
+ }
6535
+ ),
6536
+ /* @__PURE__ */ jsx(
6537
+ "polygon",
6538
+ {
6539
+ points: "4,10 16,16 16,28 4,22",
6540
+ className: "fill-primary/20",
6541
+ stroke: "currentColor",
6542
+ strokeWidth: "0.6",
6543
+ strokeOpacity: "0.4"
6544
+ }
6545
+ ),
6546
+ /* @__PURE__ */ jsx(
6547
+ "polygon",
6548
+ {
6549
+ points: "28,10 16,16 16,28 28,22",
6550
+ className: "fill-primary/30",
6551
+ stroke: "currentColor",
6552
+ strokeWidth: "0.6",
6553
+ strokeOpacity: "0.4"
6554
+ }
6555
+ )
6556
+ ]
6557
+ }
6558
+ ) }) })
6393
6559
  ] }),
6394
6560
  /* @__PURE__ */ jsxs("div", { className: "p-5 flex flex-col flex-1", children: [
6395
6561
  /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3 mb-2", children: [
6396
6562
  /* @__PURE__ */ jsx("h3", { className: "text-base font-bold text-foreground group-hover:text-primary transition-colors line-clamp-1", children: product.name }),
6397
- /* @__PURE__ */ jsx("span", { className: `text-sm font-bold flex-shrink-0 ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`, children: priceLabel })
6563
+ /* @__PURE__ */ jsx(
6564
+ "span",
6565
+ {
6566
+ className: `text-sm font-bold flex-shrink-0 ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`,
6567
+ children: priceLabel
6568
+ }
6569
+ )
6398
6570
  ] }),
6399
6571
  product.description && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground line-clamp-2 leading-relaxed flex-1", children: product.description }),
6400
6572
  /* @__PURE__ */ jsxs("div", { className: "mt-3 flex items-center gap-2", children: [
@@ -6415,7 +6587,10 @@ function ScrollRow({
6415
6587
  }) {
6416
6588
  const ref = useRef(null);
6417
6589
  function scroll(dir) {
6418
- ref.current?.scrollBy({ left: dir === "r" ? 272 : -272, behavior: "smooth" });
6590
+ ref.current?.scrollBy({
6591
+ left: dir === "r" ? 272 : -272,
6592
+ behavior: "smooth"
6593
+ });
6419
6594
  }
6420
6595
  return /* @__PURE__ */ jsxs("div", { className: "relative group/row", children: [
6421
6596
  /* @__PURE__ */ jsx(
@@ -6425,7 +6600,19 @@ function ScrollRow({
6425
6600
  onClick: () => scroll("l"),
6426
6601
  "aria-label": "Scroll left",
6427
6602
  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",
6428
- 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" }) })
6603
+ children: /* @__PURE__ */ jsx(
6604
+ "svg",
6605
+ {
6606
+ viewBox: "0 0 16 16",
6607
+ className: "w-4 h-4",
6608
+ fill: "none",
6609
+ stroke: "currentColor",
6610
+ strokeWidth: "1.5",
6611
+ strokeLinecap: "round",
6612
+ strokeLinejoin: "round",
6613
+ children: /* @__PURE__ */ jsx("path", { d: "M10 3L6 8l4 5" })
6614
+ }
6615
+ )
6429
6616
  }
6430
6617
  ),
6431
6618
  /* @__PURE__ */ jsx(
@@ -6434,7 +6621,13 @@ function ScrollRow({
6434
6621
  ref,
6435
6622
  className: "flex gap-3 overflow-x-auto pb-1 snap-x snap-mandatory",
6436
6623
  style: { scrollbarWidth: "none", msOverflowStyle: "none" },
6437
- 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))
6624
+ children: products.map((product) => /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 w-56 snap-start", children: /* @__PURE__ */ jsx(
6625
+ ProductCard,
6626
+ {
6627
+ product,
6628
+ onClick: () => onProductClick(product)
6629
+ }
6630
+ ) }, product.id))
6438
6631
  }
6439
6632
  ),
6440
6633
  /* @__PURE__ */ jsx(
@@ -6444,7 +6637,19 @@ function ScrollRow({
6444
6637
  onClick: () => scroll("r"),
6445
6638
  "aria-label": "Scroll right",
6446
6639
  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",
6447
- 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" }) })
6640
+ children: /* @__PURE__ */ jsx(
6641
+ "svg",
6642
+ {
6643
+ viewBox: "0 0 16 16",
6644
+ className: "w-4 h-4",
6645
+ fill: "none",
6646
+ stroke: "currentColor",
6647
+ strokeWidth: "1.5",
6648
+ strokeLinecap: "round",
6649
+ strokeLinejoin: "round",
6650
+ children: /* @__PURE__ */ jsx("path", { d: "M6 3l4 5-4 5" })
6651
+ }
6652
+ )
6448
6653
  }
6449
6654
  )
6450
6655
  ] });
@@ -6599,16 +6804,65 @@ function StoreHomePage({
6599
6804
  }
6600
6805
  ),
6601
6806
  /* @__PURE__ */ jsxs("section", { className: "relative overflow-hidden pt-14 pb-12 sm:pt-20 sm:pb-16", children: [
6602
- /* @__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" }),
6603
- /* @__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: [
6604
- /* @__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" }) }) }),
6605
- /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#store-home-grid)" })
6606
- ] }),
6607
- /* @__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" }),
6608
- /* @__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" }),
6807
+ /* @__PURE__ */ jsx(
6808
+ "div",
6809
+ {
6810
+ className: "absolute inset-0 bg-gradient-to-b from-background via-primary/[0.06] to-background pointer-events-none",
6811
+ "aria-hidden": "true"
6812
+ }
6813
+ ),
6814
+ /* @__PURE__ */ jsxs(
6815
+ "svg",
6816
+ {
6817
+ className: "absolute inset-0 w-full h-full opacity-[0.035] pointer-events-none",
6818
+ xmlns: "http://www.w3.org/2000/svg",
6819
+ "aria-hidden": "true",
6820
+ children: [
6821
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
6822
+ "pattern",
6823
+ {
6824
+ id: "store-home-grid",
6825
+ width: "40",
6826
+ height: "40",
6827
+ patternUnits: "userSpaceOnUse",
6828
+ children: /* @__PURE__ */ jsx(
6829
+ "path",
6830
+ {
6831
+ d: "M 40 0 L 0 0 0 40",
6832
+ fill: "none",
6833
+ stroke: "currentColor",
6834
+ strokeWidth: "1"
6835
+ }
6836
+ )
6837
+ }
6838
+ ) }),
6839
+ /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#store-home-grid)" })
6840
+ ]
6841
+ }
6842
+ ),
6843
+ /* @__PURE__ */ jsx(
6844
+ "div",
6845
+ {
6846
+ className: "absolute -top-16 left-1/3 w-80 h-80 rounded-full bg-primary/10 blur-3xl pointer-events-none",
6847
+ "aria-hidden": "true"
6848
+ }
6849
+ ),
6850
+ /* @__PURE__ */ jsx(
6851
+ "div",
6852
+ {
6853
+ className: "absolute top-8 right-1/4 w-56 h-56 rounded-full bg-primary/8 blur-2xl pointer-events-none",
6854
+ "aria-hidden": "true"
6855
+ }
6856
+ ),
6609
6857
  /* @__PURE__ */ jsxs("div", { className: "relative max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: [
6610
6858
  /* @__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: [
6611
- /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0", "aria-hidden": "true" }),
6859
+ /* @__PURE__ */ jsx(
6860
+ "span",
6861
+ {
6862
+ className: "w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0",
6863
+ "aria-hidden": "true"
6864
+ }
6865
+ ),
6612
6866
  "Community Marketplace"
6613
6867
  ] }),
6614
6868
  /* @__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 }),
@@ -6620,7 +6874,9 @@ function StoreHomePage({
6620
6874
  onSubmit: (e) => {
6621
6875
  e.preventDefault();
6622
6876
  const q = new FormData(e.currentTarget).get("q");
6623
- navigate(q.trim() ? `${browsePath}?q=${encodeURIComponent(q.trim())}` : browsePath);
6877
+ navigate(
6878
+ q.trim() ? `${browsePath}?q=${encodeURIComponent(q.trim())}` : browsePath
6879
+ );
6624
6880
  },
6625
6881
  children: [
6626
6882
  /* @__PURE__ */ jsx(
@@ -6662,9 +6918,23 @@ function StoreHomePage({
6662
6918
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: [...Array(4)].map((_, i) => /* @__PURE__ */ jsx(GridCardSkeleton, {}, i)) })
6663
6919
  ] }) : error ? /* @__PURE__ */ jsxs("div", { className: "py-16 text-center", children: [
6664
6920
  /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-4", children: error }),
6665
- /* @__PURE__ */ jsx("button", { type: "button", onClick: () => window.location.reload(), className: "text-sm text-primary hover:underline", children: "Retry" })
6921
+ /* @__PURE__ */ jsx(
6922
+ "button",
6923
+ {
6924
+ type: "button",
6925
+ onClick: () => window.location.reload(),
6926
+ className: "text-sm text-primary hover:underline",
6927
+ children: "Retry"
6928
+ }
6929
+ )
6666
6930
  ] }) : featuredItems.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-[1fr_2fr] gap-4 items-start", children: [
6667
- /* @__PURE__ */ jsx(FeaturedHeroCard, { product: featuredItems[0], onNavigate: navigate }),
6931
+ /* @__PURE__ */ jsx(
6932
+ FeaturedHeroCard,
6933
+ {
6934
+ product: featuredItems[0],
6935
+ onNavigate: navigate
6936
+ }
6937
+ ),
6668
6938
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: featuredItems.slice(1, 5).map((product) => /* @__PURE__ */ jsx(
6669
6939
  ProductCard,
6670
6940
  {
@@ -6685,7 +6955,13 @@ function StoreHomePage({
6685
6955
  onNavigate: navigate
6686
6956
  }
6687
6957
  ),
6688
- 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 })
6958
+ loading ? /* @__PURE__ */ jsx("div", { className: "flex gap-3 overflow-hidden", children: [...Array(5)].map((_, i) => /* @__PURE__ */ jsx(ScrollCardSkeleton, {}, i)) }) : /* @__PURE__ */ jsx(
6959
+ ScrollRow,
6960
+ {
6961
+ products: popularItems,
6962
+ onProductClick: handleProductClick
6963
+ }
6964
+ )
6689
6965
  ] }),
6690
6966
  (loading || freeItems.length > 0) && /* @__PURE__ */ jsxs("section", { children: [
6691
6967
  /* @__PURE__ */ jsx(
@@ -6708,16 +6984,35 @@ function StoreHomePage({
6708
6984
  ] })
6709
6985
  ] }),
6710
6986
  /* @__PURE__ */ jsxs("section", { className: "relative overflow-hidden border-t border-border", children: [
6711
- /* @__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" }),
6712
- /* @__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" }),
6987
+ /* @__PURE__ */ jsx(
6988
+ "div",
6989
+ {
6990
+ className: "absolute inset-0 bg-gradient-to-br from-primary/8 via-background to-primary/5 pointer-events-none",
6991
+ "aria-hidden": "true"
6992
+ }
6993
+ ),
6994
+ /* @__PURE__ */ jsx(
6995
+ "div",
6996
+ {
6997
+ 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",
6998
+ "aria-hidden": "true"
6999
+ }
7000
+ ),
6713
7001
  /* @__PURE__ */ jsxs("div", { className: "relative max-w-2xl mx-auto px-4 py-16 text-center", children: [
6714
7002
  /* @__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: [
6715
- /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0", "aria-hidden": "true" }),
7003
+ /* @__PURE__ */ jsx(
7004
+ "span",
7005
+ {
7006
+ className: "w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0",
7007
+ "aria-hidden": "true"
7008
+ }
7009
+ ),
6716
7010
  "Become a publisher"
6717
7011
  ] }),
6718
7012
  /* @__PURE__ */ jsx("h2", { className: "text-2xl sm:text-3xl font-bold text-foreground mb-3", children: "Built something useful?" }),
6719
7013
  /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground mb-8 max-w-lg mx-auto leading-relaxed", children: [
6720
- "Share your workflows, nodes, and integrations with ",
7014
+ "Share your workflows, nodes, and integrations with",
7015
+ " ",
6721
7016
  productName ?? "the",
6722
7017
  " community. Earn from your work or contribute for free."
6723
7018
  ] }),
@@ -6773,7 +7068,14 @@ var PRICING_OPTIONS = [
6773
7068
  ];
6774
7069
  function parseUrlParams() {
6775
7070
  if (typeof window === "undefined")
6776
- return { q: "", type: "", pricingModel: "", category: "", sortBy: "RELEVANCE", featured: false };
7071
+ return {
7072
+ q: "",
7073
+ type: "",
7074
+ pricingModel: "",
7075
+ category: "",
7076
+ sortBy: "RELEVANCE",
7077
+ featured: false
7078
+ };
6777
7079
  const p = new URLSearchParams(window.location.search);
6778
7080
  return {
6779
7081
  q: p.get("q") ?? "",
@@ -6825,7 +7127,9 @@ function StoreBrowsePage({
6825
7127
  const [featured, setFeatured] = useState(initial.featured);
6826
7128
  const [offset, setOffset] = useState(0);
6827
7129
  const [result, setResult] = useState(null);
6828
- const [allProducts, setAllProducts] = useState([]);
7130
+ const [allProducts, setAllProducts] = useState(
7131
+ []
7132
+ );
6829
7133
  const [categories, setCategories] = useState([]);
6830
7134
  const [loading, setLoading] = useState(true);
6831
7135
  const [loadingMore, setLoadingMore] = useState(false);
@@ -6869,7 +7173,16 @@ function StoreBrowsePage({
6869
7173
  return () => {
6870
7174
  cancelled = true;
6871
7175
  };
6872
- }, [client, search, type, pricingModel, category, sortBy, compatibleWith, featured]);
7176
+ }, [
7177
+ client,
7178
+ search,
7179
+ type,
7180
+ pricingModel,
7181
+ category,
7182
+ sortBy,
7183
+ compatibleWith,
7184
+ featured
7185
+ ]);
6873
7186
  function loadMore() {
6874
7187
  const nextOffset = offset + PAGE_SIZE;
6875
7188
  setLoadingMore(true);
@@ -7045,7 +7358,8 @@ function StoreBrowsePage({
7045
7358
  onClick: () => setFiltersOpen(!filtersOpen),
7046
7359
  className: "lg:hidden h-10 px-4 rounded-lg border border-border bg-background text-sm text-foreground hover:bg-muted/50 transition-colors",
7047
7360
  children: [
7048
- "Filters ",
7361
+ "Filters",
7362
+ " ",
7049
7363
  hasActiveFilters && /* @__PURE__ */ jsx("span", { className: "text-primary", children: "\u2022" })
7050
7364
  ]
7051
7365
  }
@@ -7059,14 +7373,32 @@ function StoreBrowsePage({
7059
7373
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-4 flex-wrap", children: [
7060
7374
  /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: loading ? "Loading\u2026" : `${result?.totalCount ?? 0} results` }),
7061
7375
  hasActiveFilters && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-1.5", children: [
7062
- search && /* @__PURE__ */ jsx(Chip, { label: `"${search}"`, onRemove: () => {
7063
- setSearch("");
7064
- setInputValue("");
7065
- } }),
7376
+ search && /* @__PURE__ */ jsx(
7377
+ Chip,
7378
+ {
7379
+ label: `"${search}"`,
7380
+ onRemove: () => {
7381
+ setSearch("");
7382
+ setInputValue("");
7383
+ }
7384
+ }
7385
+ ),
7066
7386
  type && /* @__PURE__ */ jsx(Chip, { label: type, onRemove: () => setType("") }),
7067
- pricingModel && /* @__PURE__ */ jsx(Chip, { label: pricingModel, onRemove: () => setPricingModel("") }),
7387
+ pricingModel && /* @__PURE__ */ jsx(
7388
+ Chip,
7389
+ {
7390
+ label: pricingModel,
7391
+ onRemove: () => setPricingModel("")
7392
+ }
7393
+ ),
7068
7394
  category && /* @__PURE__ */ jsx(Chip, { label: category, onRemove: () => setCategory("") }),
7069
- featured && /* @__PURE__ */ jsx(Chip, { label: "Featured", onRemove: () => setFeatured(false) })
7395
+ featured && /* @__PURE__ */ jsx(
7396
+ Chip,
7397
+ {
7398
+ label: "Featured",
7399
+ onRemove: () => setFeatured(false)
7400
+ }
7401
+ )
7070
7402
  ] })
7071
7403
  ] }),
7072
7404
  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(
@@ -7118,9 +7450,97 @@ function StoreBrowsePage({
7118
7450
  function Chip({ label, onRemove }) {
7119
7451
  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: [
7120
7452
  label,
7121
- /* @__PURE__ */ jsx("button", { type: "button", onClick: onRemove, "aria-label": `Remove ${label}`, className: "hover:opacity-70", children: "\xD7" })
7453
+ /* @__PURE__ */ jsx(
7454
+ "button",
7455
+ {
7456
+ type: "button",
7457
+ onClick: onRemove,
7458
+ "aria-label": `Remove ${label}`,
7459
+ className: "hover:opacity-70",
7460
+ children: "\xD7"
7461
+ }
7462
+ )
7122
7463
  ] });
7123
7464
  }
7465
+ function detectTheme() {
7466
+ if (typeof document === "undefined") return "light";
7467
+ const root = document.documentElement;
7468
+ return root.classList.contains("dark") || root.getAttribute("data-theme") === "dark" ? "dark" : "light";
7469
+ }
7470
+ function WorkflowEmbed({
7471
+ appUrl,
7472
+ productId,
7473
+ theme,
7474
+ clickToInteract = true,
7475
+ hideCta = false,
7476
+ className,
7477
+ onError
7478
+ }) {
7479
+ const iframeRef = useRef(null);
7480
+ const [status, setStatus] = useState("loading");
7481
+ const [interactive, setInteractive] = useState(!clickToInteract);
7482
+ const resolvedTheme = useMemo(() => theme ?? detectTheme(), [theme]);
7483
+ const src = useMemo(() => {
7484
+ const base = appUrl.replace(/\/+$/, "");
7485
+ const params = new URLSearchParams({
7486
+ productId,
7487
+ theme: resolvedTheme
7488
+ });
7489
+ if (hideCta) params.set("cta", "false");
7490
+ return `${base}/embed/workflow?${params.toString()}`;
7491
+ }, [appUrl, productId, resolvedTheme, hideCta]);
7492
+ useEffect(() => {
7493
+ const handler = (event) => {
7494
+ if (event.source !== iframeRef.current?.contentWindow) return;
7495
+ const data = event.data;
7496
+ if (data?.type === "fluidgrids:embed:loaded") setStatus("loaded");
7497
+ if (data?.type === "fluidgrids:embed:error") {
7498
+ setStatus("error");
7499
+ onError?.(data.message ?? "Failed to load workflow preview");
7500
+ }
7501
+ };
7502
+ window.addEventListener("message", handler);
7503
+ return () => window.removeEventListener("message", handler);
7504
+ }, [onError]);
7505
+ if (status === "error") return null;
7506
+ return /* @__PURE__ */ jsxs(
7507
+ "div",
7508
+ {
7509
+ className: `relative w-full overflow-hidden rounded-xl border border-border bg-muted ${className ?? ""}`,
7510
+ style: { aspectRatio: "16 / 9" },
7511
+ children: [
7512
+ status === "loading" && /* @__PURE__ */ jsx(
7513
+ "div",
7514
+ {
7515
+ className: "absolute inset-0 animate-pulse bg-muted",
7516
+ "aria-hidden": "true"
7517
+ }
7518
+ ),
7519
+ /* @__PURE__ */ jsx(
7520
+ "iframe",
7521
+ {
7522
+ ref: iframeRef,
7523
+ src,
7524
+ title: "Workflow preview",
7525
+ loading: "lazy",
7526
+ className: "h-full w-full border-0",
7527
+ style: interactive ? void 0 : { pointerEvents: "none" }
7528
+ }
7529
+ ),
7530
+ clickToInteract && !interactive && status === "loaded" && /* @__PURE__ */ jsx(
7531
+ "button",
7532
+ {
7533
+ type: "button",
7534
+ onClick: () => setInteractive(true),
7535
+ className: "absolute inset-0 flex items-end justify-center bg-transparent pb-4",
7536
+ "aria-label": "Click to explore the workflow",
7537
+ 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" })
7538
+ }
7539
+ )
7540
+ ]
7541
+ }
7542
+ );
7543
+ }
7124
7544
  var ANIM_STYLES = `
7125
7545
  @keyframes sdFadeUp {
7126
7546
  from { opacity: 0; transform: translateY(16px); }
@@ -7153,7 +7573,11 @@ var ANIM_STYLES = `
7153
7573
  .sd-d5 { animation-delay: 320ms; }
7154
7574
  .sd-d6 { animation-delay: 400ms; }
7155
7575
  `;
7156
- function RatingBar({ label, count, total }) {
7576
+ function RatingBar({
7577
+ label,
7578
+ count,
7579
+ total
7580
+ }) {
7157
7581
  const pct = total > 0 ? Math.round(count / total * 100) : 0;
7158
7582
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
7159
7583
  /* @__PURE__ */ jsx("span", { className: "w-12 text-right shrink-0", children: label }),
@@ -7169,12 +7593,63 @@ function RatingBar({ label, count, total }) {
7169
7593
  }
7170
7594
  function IconBlock({ src }) {
7171
7595
  return /* @__PURE__ */ jsxs("div", { className: "relative flex-shrink-0", children: [
7172
- /* @__PURE__ */ jsx("div", { className: "sd-gp absolute -inset-1.5 rounded-2xl bg-primary/30 blur-md pointer-events-none", "aria-hidden": "true" }),
7173
- /* @__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: [
7174
- /* @__PURE__ */ jsx("polygon", { points: "20,4 34,11 20,18 6,11", className: "fill-primary/40", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" }),
7175
- /* @__PURE__ */ jsx("polygon", { points: "6,11 20,18 20,34 6,27", className: "fill-primary/20", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" }),
7176
- /* @__PURE__ */ jsx("polygon", { points: "34,11 20,18 20,34 34,27", className: "fill-primary/30", stroke: "currentColor", strokeWidth: "0.6", strokeOpacity: "0.4" })
7177
- ] }) }) })
7596
+ /* @__PURE__ */ jsx(
7597
+ "div",
7598
+ {
7599
+ className: "sd-gp absolute -inset-1.5 rounded-2xl bg-primary/30 blur-md pointer-events-none",
7600
+ "aria-hidden": "true"
7601
+ }
7602
+ ),
7603
+ /* @__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(
7604
+ "img",
7605
+ {
7606
+ src,
7607
+ alt: "",
7608
+ "aria-hidden": true,
7609
+ className: "w-full h-full object-cover"
7610
+ }
7611
+ ) : /* @__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(
7612
+ "svg",
7613
+ {
7614
+ viewBox: "0 0 40 40",
7615
+ className: "w-10 h-10",
7616
+ fill: "none",
7617
+ xmlns: "http://www.w3.org/2000/svg",
7618
+ "aria-hidden": "true",
7619
+ children: [
7620
+ /* @__PURE__ */ jsx(
7621
+ "polygon",
7622
+ {
7623
+ points: "20,4 34,11 20,18 6,11",
7624
+ className: "fill-primary/40",
7625
+ stroke: "currentColor",
7626
+ strokeWidth: "0.6",
7627
+ strokeOpacity: "0.4"
7628
+ }
7629
+ ),
7630
+ /* @__PURE__ */ jsx(
7631
+ "polygon",
7632
+ {
7633
+ points: "6,11 20,18 20,34 6,27",
7634
+ className: "fill-primary/20",
7635
+ stroke: "currentColor",
7636
+ strokeWidth: "0.6",
7637
+ strokeOpacity: "0.4"
7638
+ }
7639
+ ),
7640
+ /* @__PURE__ */ jsx(
7641
+ "polygon",
7642
+ {
7643
+ points: "34,11 20,18 20,34 34,27",
7644
+ className: "fill-primary/30",
7645
+ stroke: "currentColor",
7646
+ strokeWidth: "0.6",
7647
+ strokeOpacity: "0.4"
7648
+ }
7649
+ )
7650
+ ]
7651
+ }
7652
+ ) }) })
7178
7653
  ] });
7179
7654
  }
7180
7655
  function StoreProductDetailPage({
@@ -7190,6 +7665,7 @@ function StoreProductDetailPage({
7190
7665
  const [error, setError] = useState(null);
7191
7666
  const [activeScreenshot, setActiveScreenshot] = useState(0);
7192
7667
  const [screenshotKey, setScreenshotKey] = useState(0);
7668
+ const [embedFailed, setEmbedFailed] = useState(false);
7193
7669
  useEffect(() => {
7194
7670
  if (!slug && !id) {
7195
7671
  setError("Product not found.");
@@ -7243,11 +7719,30 @@ function StoreProductDetailPage({
7243
7719
  if (error || !details) {
7244
7720
  return /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 text-center", children: [
7245
7721
  /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-4", children: error ?? "Product not found." }),
7246
- /* @__PURE__ */ jsx("button", { type: "button", onClick: () => navigate("/store"), className: "text-sm text-primary hover:underline", children: "Back to Store" })
7722
+ /* @__PURE__ */ jsx(
7723
+ "button",
7724
+ {
7725
+ type: "button",
7726
+ onClick: () => navigate("/store"),
7727
+ className: "text-sm text-primary hover:underline",
7728
+ children: "Back to Store"
7729
+ }
7730
+ )
7247
7731
  ] });
7248
7732
  }
7249
- const { product, publisher, reviews, reviewsCount, relatedProducts, ratingDistribution } = details;
7250
- const priceLabel = formatPrice2(product.price, product.currency, product.pricingModel);
7733
+ const {
7734
+ product,
7735
+ publisher,
7736
+ reviews,
7737
+ reviewsCount,
7738
+ relatedProducts,
7739
+ ratingDistribution
7740
+ } = details;
7741
+ const priceLabel = formatPrice2(
7742
+ product.price,
7743
+ product.currency,
7744
+ product.pricingModel
7745
+ );
7251
7746
  const screenshots = product.screenshots ?? [];
7252
7747
  const totalRatings = ratingDistribution ? ratingDistribution.fiveStars + ratingDistribution.fourStars + ratingDistribution.threeStars + ratingDistribution.twoStars + ratingDistribution.oneStar : 0;
7253
7748
  return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
@@ -7261,15 +7756,60 @@ function StoreProductDetailPage({
7261
7756
  }
7262
7757
  ),
7263
7758
  /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden", children: [
7264
- /* @__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" }),
7265
- /* @__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: [
7266
- /* @__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" }) }) }),
7267
- /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#sd-grid)" })
7268
- ] }),
7269
- /* @__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" }),
7759
+ /* @__PURE__ */ jsx(
7760
+ "div",
7761
+ {
7762
+ className: "absolute inset-0 bg-gradient-to-b from-primary/[0.07] via-background to-background pointer-events-none",
7763
+ "aria-hidden": "true"
7764
+ }
7765
+ ),
7766
+ /* @__PURE__ */ jsxs(
7767
+ "svg",
7768
+ {
7769
+ className: "absolute inset-0 w-full h-full opacity-[0.04] pointer-events-none",
7770
+ xmlns: "http://www.w3.org/2000/svg",
7771
+ "aria-hidden": "true",
7772
+ children: [
7773
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
7774
+ "pattern",
7775
+ {
7776
+ id: "sd-grid",
7777
+ width: "40",
7778
+ height: "40",
7779
+ patternUnits: "userSpaceOnUse",
7780
+ children: /* @__PURE__ */ jsx(
7781
+ "path",
7782
+ {
7783
+ d: "M 40 0 L 0 0 0 40",
7784
+ fill: "none",
7785
+ stroke: "currentColor",
7786
+ strokeWidth: "1"
7787
+ }
7788
+ )
7789
+ }
7790
+ ) }),
7791
+ /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#sd-grid)" })
7792
+ ]
7793
+ }
7794
+ ),
7795
+ /* @__PURE__ */ jsx(
7796
+ "div",
7797
+ {
7798
+ className: "absolute -top-12 -left-12 w-72 h-72 rounded-full bg-primary/10 blur-3xl pointer-events-none",
7799
+ "aria-hidden": "true"
7800
+ }
7801
+ ),
7270
7802
  /* @__PURE__ */ jsxs("div", { className: "relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-6 pb-8", children: [
7271
7803
  /* @__PURE__ */ jsxs("nav", { className: "sd-fi text-sm text-muted-foreground mb-6 flex items-center gap-1.5 flex-wrap", children: [
7272
- /* @__PURE__ */ jsx("button", { type: "button", onClick: () => navigate("/store"), className: "hover:text-primary transition-colors", children: "Store" }),
7804
+ /* @__PURE__ */ jsx(
7805
+ "button",
7806
+ {
7807
+ type: "button",
7808
+ onClick: () => navigate("/store"),
7809
+ className: "hover:text-primary transition-colors",
7810
+ children: "Store"
7811
+ }
7812
+ ),
7273
7813
  /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u203A" }),
7274
7814
  product.category && /* @__PURE__ */ jsxs(Fragment, { children: [
7275
7815
  /* @__PURE__ */ jsx(
@@ -7335,6 +7875,14 @@ function StoreProductDetailPage({
7335
7875
  }
7336
7876
  )
7337
7877
  ] }),
7878
+ product.type === "WORKFLOW" && !embedFailed && /* @__PURE__ */ jsx("div", { className: "sd-fu sd-d3 mb-8", children: /* @__PURE__ */ jsx(
7879
+ WorkflowEmbed,
7880
+ {
7881
+ appUrl: appLoginUrl,
7882
+ productId: product.id,
7883
+ onError: () => setEmbedFailed(true)
7884
+ }
7885
+ ) }),
7338
7886
  screenshots.length > 0 && /* @__PURE__ */ jsxs("div", { className: "sd-fu sd-d3 mb-8", children: [
7339
7887
  /* @__PURE__ */ jsx("div", { className: "rounded-xl overflow-hidden bg-muted aspect-video mb-3 shadow-md", children: /* @__PURE__ */ jsx(
7340
7888
  "img",
@@ -7351,7 +7899,14 @@ function StoreProductDetailPage({
7351
7899
  type: "button",
7352
7900
  onClick: () => switchScreenshot(i),
7353
7901
  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"}`,
7354
- children: /* @__PURE__ */ jsx("img", { src, alt: `Thumbnail ${i + 1}`, className: "w-full h-full object-cover" })
7902
+ children: /* @__PURE__ */ jsx(
7903
+ "img",
7904
+ {
7905
+ src,
7906
+ alt: `Thumbnail ${i + 1}`,
7907
+ className: "w-full h-full object-cover"
7908
+ }
7909
+ )
7355
7910
  },
7356
7911
  i
7357
7912
  )) })
@@ -7363,7 +7918,14 @@ function StoreProductDetailPage({
7363
7918
  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: [
7364
7919
  /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold text-foreground mb-3", children: "Publisher" }),
7365
7920
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
7366
- 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() }),
7921
+ publisher.logoUrl ? /* @__PURE__ */ jsx(
7922
+ "img",
7923
+ {
7924
+ src: publisher.logoUrl,
7925
+ alt: publisher.name,
7926
+ className: "w-10 h-10 rounded-full object-cover"
7927
+ }
7928
+ ) : /* @__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() }),
7367
7929
  /* @__PURE__ */ jsxs("div", { children: [
7368
7930
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
7369
7931
  /* @__PURE__ */ jsx("span", { className: "font-semibold text-foreground text-sm", children: publisher.name }),
@@ -7389,11 +7951,46 @@ function StoreProductDetailPage({
7389
7951
  ] })
7390
7952
  ] }),
7391
7953
  /* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-1.5 pt-1", children: [
7392
- /* @__PURE__ */ jsx(RatingBar, { label: "5 \u2605", count: ratingDistribution.fiveStars, total: totalRatings }),
7393
- /* @__PURE__ */ jsx(RatingBar, { label: "4 \u2605", count: ratingDistribution.fourStars, total: totalRatings }),
7394
- /* @__PURE__ */ jsx(RatingBar, { label: "3 \u2605", count: ratingDistribution.threeStars, total: totalRatings }),
7395
- /* @__PURE__ */ jsx(RatingBar, { label: "2 \u2605", count: ratingDistribution.twoStars, total: totalRatings }),
7396
- /* @__PURE__ */ jsx(RatingBar, { label: "1 \u2605", count: ratingDistribution.oneStar, total: totalRatings })
7954
+ /* @__PURE__ */ jsx(
7955
+ RatingBar,
7956
+ {
7957
+ label: "5 \u2605",
7958
+ count: ratingDistribution.fiveStars,
7959
+ total: totalRatings
7960
+ }
7961
+ ),
7962
+ /* @__PURE__ */ jsx(
7963
+ RatingBar,
7964
+ {
7965
+ label: "4 \u2605",
7966
+ count: ratingDistribution.fourStars,
7967
+ total: totalRatings
7968
+ }
7969
+ ),
7970
+ /* @__PURE__ */ jsx(
7971
+ RatingBar,
7972
+ {
7973
+ label: "3 \u2605",
7974
+ count: ratingDistribution.threeStars,
7975
+ total: totalRatings
7976
+ }
7977
+ ),
7978
+ /* @__PURE__ */ jsx(
7979
+ RatingBar,
7980
+ {
7981
+ label: "2 \u2605",
7982
+ count: ratingDistribution.twoStars,
7983
+ total: totalRatings
7984
+ }
7985
+ ),
7986
+ /* @__PURE__ */ jsx(
7987
+ RatingBar,
7988
+ {
7989
+ label: "1 \u2605",
7990
+ count: ratingDistribution.oneStar,
7991
+ total: totalRatings
7992
+ }
7993
+ )
7397
7994
  ] })
7398
7995
  ] }),
7399
7996
  /* @__PURE__ */ jsx("div", { className: "space-y-3", children: reviews.slice(0, 5).map((review, idx) => /* @__PURE__ */ jsxs(
@@ -7408,11 +8005,14 @@ function StoreProductDetailPage({
7408
8005
  ] }),
7409
8006
  review.title && /* @__PURE__ */ jsx("p", { className: "font-semibold text-sm text-foreground mb-1", children: review.title }),
7410
8007
  review.comment && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: review.comment }),
7411
- review.createdAt && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-2", children: new Date(review.createdAt).toLocaleDateString("en-US", {
7412
- year: "numeric",
7413
- month: "short",
7414
- day: "numeric"
7415
- }) })
8008
+ review.createdAt && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-2", children: new Date(review.createdAt).toLocaleDateString(
8009
+ "en-US",
8010
+ {
8011
+ year: "numeric",
8012
+ month: "short",
8013
+ day: "numeric"
8014
+ }
8015
+ ) })
7416
8016
  ]
7417
8017
  },
7418
8018
  review.id
@@ -7432,7 +8032,13 @@ function StoreProductDetailPage({
7432
8032
  ] }),
7433
8033
  /* @__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: [
7434
8034
  /* @__PURE__ */ jsxs("div", { children: [
7435
- /* @__PURE__ */ jsx("div", { className: `text-3xl font-extrabold ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`, children: priceLabel }),
8035
+ /* @__PURE__ */ jsx(
8036
+ "div",
8037
+ {
8038
+ className: `text-3xl font-extrabold ${priceLabel === "Free" ? "text-emerald-500" : "text-foreground"}`,
8039
+ children: priceLabel
8040
+ }
8041
+ ),
7436
8042
  product.pricingModel === "SUBSCRIPTION" && /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: "per month" })
7437
8043
  ] }),
7438
8044
  /* @__PURE__ */ jsx(