@mdxui/named 8.0.0 → 8.1.0

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.
@@ -1373,15 +1373,610 @@ function ExecutiveView({ content, brandName, hostname }) {
1373
1373
  ] });
1374
1374
  }
1375
1375
 
1376
- // src/view/view.tsx
1376
+ // src/templates/gallery/components/navigation.tsx
1377
+ import { useState as useState4, useEffect as useEffect4 } from "react";
1378
+ import Link5 from "next/link";
1379
+ import { Menu as Menu3, X as X3 } from "lucide-react";
1380
+
1381
+ // src/templates/gallery/ui/button.tsx
1382
+ import * as React4 from "react";
1377
1383
  import { jsx as jsx25 } from "react/jsx-runtime";
1384
+ var baseClasses3 = "inline-flex items-center justify-center gap-2 whitespace-nowrap uppercase tracking-[0.14em] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-ring) disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0 cursor-pointer rounded-[4px]";
1385
+ var variantClasses3 = {
1386
+ default: "bg-(--color-btn-primary-to) text-(--color-btn-primary-fg) hover:bg-(--color-accent)",
1387
+ bone: "bg-(--color-placard) text-(--color-accent-field) hover:bg-(--color-accent-fg)",
1388
+ secondary: "bg-transparent text-(--color-fg) border border-(--color-border-strong) hover:bg-(--color-hover)"
1389
+ };
1390
+ var sizeClasses3 = {
1391
+ default: "h-11 px-6 text-xs",
1392
+ sm: "h-9 px-4 text-[11px]"
1393
+ };
1394
+ var GalButton = React4.forwardRef(
1395
+ ({ className, variant = "default", size = "default", asChild = false, children, ...props }, ref) => {
1396
+ const classes = cn(baseClasses3, variantClasses3[variant], sizeClasses3[size], className);
1397
+ if (asChild && React4.isValidElement(children)) {
1398
+ const child = children;
1399
+ return React4.cloneElement(child, {
1400
+ ...props,
1401
+ className: cn(classes, child.props.className)
1402
+ });
1403
+ }
1404
+ return /* @__PURE__ */ jsx25("button", { ref, className: classes, ...props, children });
1405
+ }
1406
+ );
1407
+ GalButton.displayName = "GalButton";
1408
+
1409
+ // src/templates/gallery/ui/placard.tsx
1410
+ import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
1411
+ function GalLabel({ children, className }) {
1412
+ return /* @__PURE__ */ jsx26("span", { className: cn("gal-label block text-(--color-fg-muted)", className), children });
1413
+ }
1414
+ function GalDiamond({ className }) {
1415
+ return /* @__PURE__ */ jsx26(
1416
+ "span",
1417
+ {
1418
+ className: cn("inline-block size-[5px] rotate-45 bg-(--color-accent-strong)", className),
1419
+ "aria-hidden": "true"
1420
+ }
1421
+ );
1422
+ }
1423
+ function GalSectionHead({ heading, statement, className }) {
1424
+ return /* @__PURE__ */ jsxs19("div", { className: cn("grid gap-y-8 md:grid-cols-12 md:gap-x-6", className), children: [
1425
+ /* @__PURE__ */ jsx26("div", { className: "md:col-span-7", children: /* @__PURE__ */ jsx26("h2", { className: "text-[clamp(40px,5.5vw,76px)] text-(--color-fg)", children: heading }) }),
1426
+ statement && /* @__PURE__ */ jsx26("div", { className: "md:col-span-4 md:col-start-9 md:self-end", children: /* @__PURE__ */ jsx26("p", { className: "max-w-[40ch] text-base leading-relaxed text-(--color-fg-soft)", children: statement }) })
1427
+ ] });
1428
+ }
1429
+
1430
+ // src/templates/gallery/components/navigation.tsx
1431
+ import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
1432
+ function GalNavigation({
1433
+ logo = "Priya",
1434
+ logoHref = "/",
1435
+ links = [
1436
+ { label: "Features", href: "#features" },
1437
+ { label: "Pricing", href: "#pricing" },
1438
+ { label: "FAQ", href: "#faq" }
1439
+ ],
1440
+ ctaText = "Hire me",
1441
+ ctaHref = "#pricing",
1442
+ className
1443
+ }) {
1444
+ const [mobileMenuOpen, setMobileMenuOpen] = useState4(false);
1445
+ const [isScrolled, setIsScrolled] = useState4(false);
1446
+ useEffect4(() => {
1447
+ const handleScroll = () => setIsScrolled(window.scrollY > 10);
1448
+ window.addEventListener("scroll", handleScroll);
1449
+ return () => window.removeEventListener("scroll", handleScroll);
1450
+ }, []);
1451
+ return /* @__PURE__ */ jsx27(
1452
+ "nav",
1453
+ {
1454
+ className: cn(
1455
+ "sticky top-0 z-50 w-full border-b bg-(--color-surface) transition-[border-color] duration-200",
1456
+ isScrolled ? "border-(--color-border-strong)" : "border-(--color-border)",
1457
+ className
1458
+ ),
1459
+ children: /* @__PURE__ */ jsxs20("div", { className: "mx-auto max-w-6xl px-6 py-5 lg:px-10", children: [
1460
+ /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-between", children: [
1461
+ /* @__PURE__ */ jsxs20(Link5, { href: logoHref, className: "flex items-center gap-2.5", children: [
1462
+ /* @__PURE__ */ jsx27("span", { className: "gal-display text-xl font-[560] tracking-[-0.01em] text-(--color-fg)", children: logo }),
1463
+ /* @__PURE__ */ jsx27(GalDiamond, {})
1464
+ ] }),
1465
+ /* @__PURE__ */ jsx27("div", { className: "hidden items-center gap-10 lg:flex", children: links.map((link) => /* @__PURE__ */ jsx27(
1466
+ "a",
1467
+ {
1468
+ href: link.href,
1469
+ className: "gal-label text-(--color-fg-muted) transition-colors hover:text-(--color-fg)",
1470
+ children: link.label
1471
+ },
1472
+ link.href
1473
+ )) }),
1474
+ ctaText && ctaHref && /* @__PURE__ */ jsx27("div", { className: "hidden items-center lg:flex", children: /* @__PURE__ */ jsx27(GalButton, { asChild: true, variant: "secondary", size: "sm", children: /* @__PURE__ */ jsx27("a", { href: ctaHref, children: ctaText }) }) }),
1475
+ /* @__PURE__ */ jsx27(
1476
+ "button",
1477
+ {
1478
+ className: "p-2 text-(--color-fg) lg:hidden",
1479
+ onClick: () => setMobileMenuOpen(!mobileMenuOpen),
1480
+ "aria-label": "Toggle menu",
1481
+ children: mobileMenuOpen ? /* @__PURE__ */ jsx27(X3, { className: "h-5 w-5" }) : /* @__PURE__ */ jsx27(Menu3, { className: "h-5 w-5" })
1482
+ }
1483
+ )
1484
+ ] }),
1485
+ mobileMenuOpen && /* @__PURE__ */ jsx27("div", { className: "mt-5 border-t border-(--color-border) lg:hidden", children: /* @__PURE__ */ jsxs20("div", { className: "flex flex-col py-2", children: [
1486
+ links.map((link) => /* @__PURE__ */ jsx27(
1487
+ "a",
1488
+ {
1489
+ href: link.href,
1490
+ className: "gal-label border-b border-(--color-border) py-4 text-(--color-fg) last:border-b-0",
1491
+ onClick: () => setMobileMenuOpen(false),
1492
+ children: link.label
1493
+ },
1494
+ link.href
1495
+ )),
1496
+ ctaText && ctaHref && /* @__PURE__ */ jsx27(
1497
+ GalButton,
1498
+ {
1499
+ asChild: true,
1500
+ variant: "secondary",
1501
+ size: "sm",
1502
+ className: "mt-4 self-start",
1503
+ onClick: () => setMobileMenuOpen(false),
1504
+ children: /* @__PURE__ */ jsx27("a", { href: ctaHref, children: ctaText })
1505
+ }
1506
+ )
1507
+ ] }) })
1508
+ ] })
1509
+ }
1510
+ );
1511
+ }
1512
+
1513
+ // src/templates/gallery/components/hero.tsx
1514
+ import { HiArrowRight as HiArrowRight4 } from "react-icons/hi";
1515
+ import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
1516
+ function GalHero({
1517
+ presenter = "Priya",
1518
+ badgeText,
1519
+ heading = "Your AI Product Manager for GitHub",
1520
+ description = "Priya triages issues, plans sprints, and grooms your backlog automatically. You focus on building.",
1521
+ ctaText = "Get Started",
1522
+ ctaHref = "#pricing",
1523
+ secondaryCtaText,
1524
+ secondaryCtaHref,
1525
+ marqueeTitle = "Tools I work with",
1526
+ marqueeImages = [],
1527
+ className
1528
+ }) {
1529
+ const tools = marqueeImages.filter(
1530
+ (s) => !/^(https?:)?\/\//i.test(s.trim()) && !s.trim().startsWith("data:")
1531
+ );
1532
+ return /* @__PURE__ */ jsxs21("section", { className: cn("gal-wash bg-(--color-surface)", className), children: [
1533
+ /* @__PURE__ */ jsxs21("div", { className: "mx-auto max-w-6xl px-6 lg:px-10", children: [
1534
+ /* @__PURE__ */ jsx28(ScrollReveal, { direction: "none", trigger: "mount", children: /* @__PURE__ */ jsx28("div", { className: "pt-8 md:pt-16 md:text-center", children: /* @__PURE__ */ jsx28(GalLabel, { className: "text-(--color-fg)", children: badgeText ?? presenter }) }) }),
1535
+ /* @__PURE__ */ jsx28(ScrollReveal, { direction: "up", trigger: "mount", children: /* @__PURE__ */ jsx28("h1", { className: "max-w-[16ch] pt-8 text-[clamp(46px,6.5vw,96px)] text-(--color-fg) md:mx-auto md:pt-14 md:text-center", children: heading }) }),
1536
+ /* @__PURE__ */ jsx28("div", { className: "pt-7 pb-16 md:pt-12 md:pb-32", children: /* @__PURE__ */ jsxs21(ScrollReveal, { direction: "up", delay: 0.12, trigger: "mount", children: [
1537
+ /* @__PURE__ */ jsx28("p", { className: "max-w-[52ch] text-lg leading-relaxed text-(--color-fg-soft) md:mx-auto md:text-center md:text-xl", children: description }),
1538
+ /* @__PURE__ */ jsxs21("div", { className: "mt-9 flex flex-col gap-3 sm:flex-row md:justify-center", children: [
1539
+ /* @__PURE__ */ jsx28(GalButton, { asChild: true, children: /* @__PURE__ */ jsxs21("a", { href: ctaHref, children: [
1540
+ ctaText,
1541
+ /* @__PURE__ */ jsx28(HiArrowRight4, { className: "h-3.5 w-3.5" })
1542
+ ] }) }),
1543
+ secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ jsx28(GalButton, { asChild: true, variant: "secondary", children: /* @__PURE__ */ jsx28("a", { href: secondaryCtaHref, children: secondaryCtaText }) })
1544
+ ] })
1545
+ ] }) })
1546
+ ] }),
1547
+ tools.length > 0 && /* @__PURE__ */ jsx28("div", { className: "border-t border-b border-(--color-border)", "aria-label": marqueeTitle, children: /* @__PURE__ */ jsx28(Marquee, { className: "py-3.5 [--duration:48s] [--gap:3rem]", children: tools.map((tool, i) => /* @__PURE__ */ jsxs21(
1548
+ "span",
1549
+ {
1550
+ className: "gal-label flex items-center gap-x-12 whitespace-nowrap text-(--color-fg-muted)",
1551
+ children: [
1552
+ brandLabel(tool),
1553
+ /* @__PURE__ */ jsx28(GalDiamond, { className: "size-1" })
1554
+ ]
1555
+ },
1556
+ `${tool}-${i}`
1557
+ )) }) })
1558
+ ] });
1559
+ }
1560
+
1561
+ // src/templates/gallery/components/features.tsx
1562
+ import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
1563
+ var catalogueNo = (badge) => {
1564
+ const n = parseInt(badge, 10);
1565
+ return Number.isNaN(n) ? badge : String(n);
1566
+ };
1567
+ function GalFeatures({
1568
+ heading = "How It Works",
1569
+ description,
1570
+ features = [],
1571
+ className
1572
+ }) {
1573
+ return /* @__PURE__ */ jsx29("section", { id: "features", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs22("div", { className: "mx-auto max-w-6xl px-6 py-28 md:py-40 lg:px-10", children: [
1574
+ /* @__PURE__ */ jsx29(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx29(
1575
+ GalSectionHead,
1576
+ {
1577
+ heading,
1578
+ statement: description
1579
+ }
1580
+ ) }),
1581
+ /* @__PURE__ */ jsx29("div", { className: "mt-24 space-y-28 md:mt-36 md:space-y-44", children: features.map((feature, index) => {
1582
+ const reversed = index % 2 === 1;
1583
+ const language = feature.language ?? "typescript";
1584
+ return /* @__PURE__ */ jsx29(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsxs22("article", { className: "grid items-center gap-y-10 md:grid-cols-12 md:gap-x-10", children: [
1585
+ feature.code && /* @__PURE__ */ jsx29("div", { className: cn("md:col-span-7", reversed && "md:order-2"), children: /* @__PURE__ */ jsx29("div", { className: "rounded-[2px] md:border md:border-(--color-vitrine-border) md:bg-(--color-placard) md:p-1.5 md:shadow-(--shadow-lg)", children: /* @__PURE__ */ jsx29(
1586
+ CodeWindow,
1587
+ {
1588
+ code: feature.code,
1589
+ language,
1590
+ className: "rounded-[2px] bg-(--color-vitrine) p-6 text-left text-xs leading-relaxed text-(--color-vitrine-fg) md:p-8"
1591
+ }
1592
+ ) }) }),
1593
+ /* @__PURE__ */ jsx29(
1594
+ "div",
1595
+ {
1596
+ className: cn(
1597
+ feature.code ? "md:col-span-5" : "md:col-span-7",
1598
+ reversed && "md:order-1"
1599
+ ),
1600
+ children: /* @__PURE__ */ jsxs22("div", { className: "rounded-[4px] border border-(--color-placard-border) bg-(--color-placard) p-7 text-(--color-placard-fg) shadow-(--shadow-md) md:p-9", children: [
1601
+ /* @__PURE__ */ jsx29("div", { className: "border-b border-(--color-placard-border) pb-4", children: /* @__PURE__ */ jsxs22("span", { className: "gal-no text-2xl text-(--color-accent-strong)", children: [
1602
+ "No. ",
1603
+ catalogueNo(feature.badge)
1604
+ ] }) }),
1605
+ /* @__PURE__ */ jsx29("h3", { className: "mt-6 text-2xl font-semibold tracking-[-0.01em] text-(--color-placard-fg)", children: feature.title }),
1606
+ /* @__PURE__ */ jsx29("p", { className: "mt-5 text-sm leading-relaxed text-(--color-placard-soft)", children: feature.description }),
1607
+ feature.items.length > 0 && /* @__PURE__ */ jsx29("ul", { className: "mt-7 space-y-3 border-t border-(--color-placard-border) pt-5", children: feature.items.map((item, itemIndex) => /* @__PURE__ */ jsxs22(
1608
+ "li",
1609
+ {
1610
+ className: "flex items-baseline gap-3 text-sm text-(--color-placard-fg)",
1611
+ children: [
1612
+ /* @__PURE__ */ jsx29(GalDiamond, { className: "shrink-0 -translate-y-px" }),
1613
+ item.text
1614
+ ]
1615
+ },
1616
+ itemIndex
1617
+ )) })
1618
+ ] })
1619
+ }
1620
+ )
1621
+ ] }) }, index);
1622
+ }) })
1623
+ ] }) });
1624
+ }
1625
+
1626
+ // src/templates/gallery/components/pricing.tsx
1627
+ import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
1628
+ function GalPricing({
1629
+ heading = "Simple, transparent pricing",
1630
+ subheading,
1631
+ price = "$16",
1632
+ priceUnit = "/ month",
1633
+ trialText,
1634
+ ctaText = "Get Started",
1635
+ ctaHref = "#contact",
1636
+ featuresHeading = "What's included",
1637
+ features = [],
1638
+ securityNote,
1639
+ className
1640
+ }) {
1641
+ return /* @__PURE__ */ jsx30("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs23("div", { className: "mx-auto max-w-6xl px-6 py-28 md:py-40 lg:px-10", children: [
1642
+ /* @__PURE__ */ jsx30(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx30(GalSectionHead, { heading, statement: subheading }) }),
1643
+ /* @__PURE__ */ jsx30(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx30("div", { className: "mt-20 rounded-[4px] border border-(--color-placard-border) bg-(--color-placard) p-8 text-(--color-placard-fg) shadow-(--shadow-md) md:mt-28 md:p-12", children: /* @__PURE__ */ jsxs23("div", { className: "grid gap-y-10 md:grid-cols-12 md:gap-x-10", children: [
1644
+ /* @__PURE__ */ jsxs23("div", { className: "md:col-span-5", children: [
1645
+ /* @__PURE__ */ jsxs23("div", { className: "flex items-baseline gap-2.5", children: [
1646
+ /* @__PURE__ */ jsx30("span", { className: "gal-display text-7xl font-[560] tracking-[-0.02em] text-(--color-placard-fg) md:text-8xl", children: price }),
1647
+ /* @__PURE__ */ jsx30("span", { className: "text-sm text-(--color-placard-muted)", children: priceUnit })
1648
+ ] }),
1649
+ trialText && /* @__PURE__ */ jsx30("p", { className: "mt-4 text-sm text-(--color-placard-soft)", children: trialText }),
1650
+ /* @__PURE__ */ jsx30("div", { className: "mt-9", children: /* @__PURE__ */ jsx30(GalButton, { asChild: true, children: /* @__PURE__ */ jsx30("a", { href: ctaHref, children: ctaText }) }) })
1651
+ ] }),
1652
+ /* @__PURE__ */ jsxs23("div", { className: "md:col-span-6 md:col-start-7", children: [
1653
+ /* @__PURE__ */ jsx30(GalLabel, { className: "text-(--color-placard-muted)", children: featuresHeading }),
1654
+ /* @__PURE__ */ jsx30("ul", { className: "mt-5 columns-1 gap-x-10 sm:columns-2", children: features.map((feature, index) => /* @__PURE__ */ jsx30(
1655
+ "li",
1656
+ {
1657
+ className: "break-inside-avoid border-t border-(--color-placard-border) py-3 text-sm text-(--color-placard-fg)",
1658
+ children: feature.text
1659
+ },
1660
+ index
1661
+ )) })
1662
+ ] })
1663
+ ] }) }) }),
1664
+ securityNote && /* @__PURE__ */ jsx30("div", { className: "mt-14 border-t border-(--color-border) pt-6", children: /* @__PURE__ */ jsx30("p", { className: "max-w-[70ch] text-xs leading-relaxed text-(--color-fg-muted)", children: securityNote }) })
1665
+ ] }) });
1666
+ }
1667
+
1668
+ // src/templates/gallery/components/pricing-tiers.tsx
1669
+ import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
1670
+ function GalPricingTiers({
1671
+ heading = "Simple, transparent pricing",
1672
+ subheading,
1673
+ tiers = [],
1674
+ securityNote,
1675
+ className
1676
+ }) {
1677
+ return /* @__PURE__ */ jsx31("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs24("div", { className: "mx-auto max-w-6xl px-6 py-28 md:py-40 lg:px-10", children: [
1678
+ /* @__PURE__ */ jsx31(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx31(
1679
+ GalSectionHead,
1680
+ {
1681
+ heading,
1682
+ statement: subheading
1683
+ }
1684
+ ) }),
1685
+ /* @__PURE__ */ jsx31("div", { className: "mt-20 grid gap-8 md:mt-28 md:grid-cols-2", children: tiers.map((tier, index) => {
1686
+ const featured = !!tier.featured;
1687
+ return /* @__PURE__ */ jsx31(ScrollReveal, { direction: "up", delay: index * 0.06, children: /* @__PURE__ */ jsxs24(
1688
+ "div",
1689
+ {
1690
+ className: cn(
1691
+ "flex h-full flex-col rounded-[4px] p-8 md:p-10",
1692
+ featured ? "bg-(--color-accent-field) text-(--color-accent-fg) shadow-(--shadow-xl)" : "border border-(--color-placard-border) bg-(--color-placard) text-(--color-placard-fg) shadow-(--shadow-md)"
1693
+ ),
1694
+ children: [
1695
+ /* @__PURE__ */ jsx31(
1696
+ "h3",
1697
+ {
1698
+ className: cn(
1699
+ "text-2xl font-semibold tracking-[-0.01em]",
1700
+ featured ? "text-(--color-accent-fg)" : "text-(--color-placard-fg)"
1701
+ ),
1702
+ children: tier.title
1703
+ }
1704
+ ),
1705
+ /* @__PURE__ */ jsx31(
1706
+ "p",
1707
+ {
1708
+ className: cn(
1709
+ "mt-3 max-w-[44ch] text-sm leading-relaxed",
1710
+ featured ? "text-(--color-accent-fg)/80" : "text-(--color-placard-soft)"
1711
+ ),
1712
+ children: tier.description
1713
+ }
1714
+ ),
1715
+ /* @__PURE__ */ jsxs24("div", { className: "mt-10 flex items-baseline gap-2.5", children: [
1716
+ /* @__PURE__ */ jsx31(
1717
+ "span",
1718
+ {
1719
+ className: cn(
1720
+ "gal-display text-7xl font-[560] tracking-[-0.02em] md:text-8xl",
1721
+ featured ? "text-(--color-accent-fg)" : "text-(--color-placard-fg)"
1722
+ ),
1723
+ children: tier.price
1724
+ }
1725
+ ),
1726
+ /* @__PURE__ */ jsx31(
1727
+ "span",
1728
+ {
1729
+ className: cn(
1730
+ "text-sm",
1731
+ featured ? "text-(--color-accent-fg)/70" : "text-(--color-placard-muted)"
1732
+ ),
1733
+ children: tier.priceUnit
1734
+ }
1735
+ )
1736
+ ] }),
1737
+ /* @__PURE__ */ jsx31("div", { className: "mt-9", children: tier.ctaVariant === "secondary" ? /* @__PURE__ */ jsx31(
1738
+ GalButton,
1739
+ {
1740
+ asChild: true,
1741
+ variant: "secondary",
1742
+ className: cn(
1743
+ "w-full sm:w-auto",
1744
+ featured ? "border-(--color-accent-fg)/40 text-(--color-accent-fg) hover:bg-(--color-accent-fg)/10" : "border-(--color-placard-fg)/35 text-(--color-placard-fg) hover:bg-(--color-placard-fg)/5"
1745
+ ),
1746
+ children: /* @__PURE__ */ jsx31("a", { href: tier.ctaHref || "#", children: tier.ctaText })
1747
+ }
1748
+ ) : featured ? /* @__PURE__ */ jsx31(GalButton, { asChild: true, variant: "bone", className: "w-full sm:w-auto", children: /* @__PURE__ */ jsx31("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }) : /* @__PURE__ */ jsx31(GalButton, { asChild: true, className: "w-full sm:w-auto", children: /* @__PURE__ */ jsx31("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }) }),
1749
+ /* @__PURE__ */ jsx31("ul", { className: "mt-10 flex-1", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsx31(
1750
+ "li",
1751
+ {
1752
+ className: cn(
1753
+ "border-t py-3 text-sm first:border-t-0",
1754
+ featured ? "border-(--color-accent-fg)/20 text-(--color-accent-fg)/90" : "border-(--color-placard-border) text-(--color-placard-fg)"
1755
+ ),
1756
+ children: feature.text
1757
+ },
1758
+ featureIndex
1759
+ )) })
1760
+ ]
1761
+ }
1762
+ ) }, index);
1763
+ }) }),
1764
+ securityNote && /* @__PURE__ */ jsx31("div", { className: "mt-14 border-t border-(--color-border) pt-6", children: /* @__PURE__ */ jsx31("p", { className: "max-w-[70ch] text-xs leading-relaxed text-(--color-fg-muted)", children: securityNote }) })
1765
+ ] }) });
1766
+ }
1767
+
1768
+ // src/templates/gallery/components/faq.tsx
1769
+ import {
1770
+ Accordion as Accordion3,
1771
+ AccordionContent as AccordionContent3,
1772
+ AccordionItem as AccordionItem3,
1773
+ AccordionTrigger as AccordionTrigger3
1774
+ } from "@mdxui/primitives";
1775
+ import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
1776
+ function GalFAQ({ heading = "FAQs", faqs = [], className }) {
1777
+ return /* @__PURE__ */ jsx32("section", { id: "faq", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs25("div", { className: "mx-auto max-w-6xl px-6 py-28 md:py-40 lg:px-10", children: [
1778
+ /* @__PURE__ */ jsx32(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx32(
1779
+ GalSectionHead,
1780
+ {
1781
+ heading
1782
+ }
1783
+ ) }),
1784
+ /* @__PURE__ */ jsx32(Accordion3, { type: "single", collapsible: true, className: "mt-16 border-t border-(--color-border) md:mt-24", children: faqs.map((faq, index) => /* @__PURE__ */ jsxs25(
1785
+ AccordionItem3,
1786
+ {
1787
+ value: `item-${index}`,
1788
+ className: "rounded-none border-b border-(--color-border)",
1789
+ children: [
1790
+ /* @__PURE__ */ jsx32(AccordionTrigger3, { className: "gap-6 py-7 text-base font-medium text-(--color-fg) hover:no-underline", children: /* @__PURE__ */ jsxs25("span", { className: "flex items-baseline gap-6 text-left", children: [
1791
+ /* @__PURE__ */ jsxs25("span", { className: "gal-no shrink-0 text-sm text-(--color-accent-strong)", "aria-hidden": "true", children: [
1792
+ "No. ",
1793
+ index + 1
1794
+ ] }),
1795
+ faq.question
1796
+ ] }) }),
1797
+ /* @__PURE__ */ jsx32(AccordionContent3, { className: "max-w-[62ch] pb-8 pl-18 text-sm leading-relaxed text-(--color-fg-soft)", children: faq.answer })
1798
+ ]
1799
+ },
1800
+ index
1801
+ )) })
1802
+ ] }) });
1803
+ }
1804
+
1805
+ // src/templates/gallery/components/cta.tsx
1806
+ import { HiArrowRight as HiArrowRight5 } from "react-icons/hi";
1807
+ import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
1808
+ function GalCTA({
1809
+ heading = "Ready to Save 15 Hours Per Week?",
1810
+ subheading,
1811
+ buttons = [{ text: "Get Started", href: "#pricing", variant: "primary", showArrow: true }],
1812
+ hostname,
1813
+ className
1814
+ }) {
1815
+ return /* @__PURE__ */ jsx33("section", { className: cn("bg-(--color-accent-field) text-(--color-accent-fg)", className), children: /* @__PURE__ */ jsx33("div", { className: "mx-auto max-w-6xl px-6 py-24 md:py-36 lg:px-10", children: /* @__PURE__ */ jsxs26(ScrollReveal, { direction: "up", children: [
1816
+ hostname && /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-3", children: [
1817
+ /* @__PURE__ */ jsx33(GalDiamond, { className: "bg-(--color-accent-fg)" }),
1818
+ /* @__PURE__ */ jsx33("span", { className: "gal-label text-(--color-accent-fg)/70", children: hostname })
1819
+ ] }),
1820
+ /* @__PURE__ */ jsxs26("div", { className: "grid items-end gap-y-12 pt-10 md:grid-cols-12 md:gap-x-6 md:pt-14", children: [
1821
+ /* @__PURE__ */ jsxs26("div", { className: "md:col-span-8", children: [
1822
+ /* @__PURE__ */ jsx33("h2", { className: "max-w-[15ch] text-[clamp(44px,6.5vw,96px)] text-(--color-accent-fg)", children: heading }),
1823
+ subheading && /* @__PURE__ */ jsx33("p", { className: "mt-6 max-w-[44ch] text-lg leading-relaxed text-(--color-accent-fg)/80 md:text-xl", children: subheading })
1824
+ ] }),
1825
+ /* @__PURE__ */ jsx33("div", { className: "md:col-span-4 md:flex md:justify-end", children: /* @__PURE__ */ jsx33("div", { className: "flex flex-col gap-3 sm:flex-row", children: buttons.map(
1826
+ (button, index) => button.variant === "primary" || !button.variant ? /* @__PURE__ */ jsx33(GalButton, { asChild: true, variant: "bone", children: /* @__PURE__ */ jsxs26("a", { href: button.href, children: [
1827
+ button.text,
1828
+ button.showArrow && /* @__PURE__ */ jsx33(HiArrowRight5, { className: "h-3.5 w-3.5" })
1829
+ ] }) }, index) : /* @__PURE__ */ jsx33(
1830
+ GalButton,
1831
+ {
1832
+ asChild: true,
1833
+ variant: "secondary",
1834
+ className: "border-(--color-accent-fg)/40 text-(--color-accent-fg) hover:bg-(--color-accent-fg)/10",
1835
+ children: /* @__PURE__ */ jsxs26("a", { href: button.href, children: [
1836
+ button.text,
1837
+ button.showArrow && /* @__PURE__ */ jsx33(HiArrowRight5, { className: "h-3.5 w-3.5" })
1838
+ ] })
1839
+ },
1840
+ index
1841
+ )
1842
+ ) }) })
1843
+ ] })
1844
+ ] }) }) });
1845
+ }
1846
+
1847
+ // src/templates/gallery/components/footer.tsx
1848
+ import Link6 from "next/link";
1849
+ import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
1850
+ function GalFooter({
1851
+ logo = "Priya",
1852
+ description = "Your AI Product Manager for GitHub. Automate issue triage, sprint planning, and backlog grooming.",
1853
+ quickLinks = [
1854
+ { label: "Features", href: "/#features" },
1855
+ { label: "Pricing", href: "/#pricing" },
1856
+ { label: "FAQ", href: "/#faq" }
1857
+ ],
1858
+ socialLinks = [
1859
+ { label: "GitHub", href: "https://github.com" },
1860
+ { label: "npm", href: "https://npmjs.com" },
1861
+ { label: "X", href: "https://x.com/dotdo_ai" }
1862
+ ],
1863
+ copyrightText = "Priya.do \xA9 2025. All rights reserved.",
1864
+ className
1865
+ }) {
1866
+ return /* @__PURE__ */ jsx34("footer", { className: cn("border-t border-(--color-border) bg-(--color-surface)", className), children: /* @__PURE__ */ jsx34("div", { className: "mx-auto max-w-6xl px-6 py-20 md:py-28 lg:px-10", children: /* @__PURE__ */ jsxs27("div", { className: "flex flex-col items-center text-center", children: [
1867
+ /* @__PURE__ */ jsx34(GalDiamond, { className: "size-2" }),
1868
+ /* @__PURE__ */ jsx34(Link6, { href: "/", className: "mt-6 inline-block", children: /* @__PURE__ */ jsx34("span", { className: "gal-display text-4xl font-[560] tracking-[-0.015em] text-(--color-fg) md:text-5xl", children: logo }) }),
1869
+ /* @__PURE__ */ jsx34("p", { className: "mt-5 max-w-[52ch] text-sm leading-relaxed text-(--color-fg-muted)", children: description }),
1870
+ /* @__PURE__ */ jsx34(
1871
+ "nav",
1872
+ {
1873
+ className: "mt-12 flex flex-wrap items-center justify-center gap-x-5 gap-y-4",
1874
+ "aria-label": "Footer",
1875
+ children: [...quickLinks, ...socialLinks].map((link, index, all) => {
1876
+ const external = /^https?:\/\//.test(link.href);
1877
+ return /* @__PURE__ */ jsxs27("span", { className: "flex items-center gap-x-5", children: [
1878
+ /* @__PURE__ */ jsx34(
1879
+ Link6,
1880
+ {
1881
+ href: link.href,
1882
+ ...external ? { target: "_blank", rel: "noopener noreferrer" } : {},
1883
+ className: "gal-label text-(--color-fg-soft) transition-colors hover:text-(--color-fg)",
1884
+ children: link.label
1885
+ }
1886
+ ),
1887
+ index < all.length - 1 && /* @__PURE__ */ jsx34(GalDiamond, { className: "size-1" })
1888
+ ] }, `${link.label}-${index}`);
1889
+ })
1890
+ }
1891
+ ),
1892
+ /* @__PURE__ */ jsx34("div", { className: "mt-14 w-full max-w-md border-t border-(--color-border) pt-6", children: /* @__PURE__ */ jsx34("p", { className: "text-xs leading-relaxed text-(--color-fg-muted)", children: copyrightText }) })
1893
+ ] }) }) });
1894
+ }
1895
+
1896
+ // src/templates/gallery/view.tsx
1897
+ import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
1898
+ function GalleryView({ content, brandName, hostname }) {
1899
+ const { hero, features, pricing, faq, cta } = content;
1900
+ return /* @__PURE__ */ jsxs28(Fragment4, { children: [
1901
+ /* @__PURE__ */ jsx35(GalNavigation, { logo: brandName }),
1902
+ /* @__PURE__ */ jsxs28("main", { children: [
1903
+ /* @__PURE__ */ jsx35(
1904
+ GalHero,
1905
+ {
1906
+ presenter: brandName,
1907
+ badgeText: hero.badgeText,
1908
+ heading: hero.heading,
1909
+ description: hero.description,
1910
+ ctaText: hero.ctaText,
1911
+ ctaHref: hero.ctaHref,
1912
+ secondaryCtaText: hero.secondaryCtaText,
1913
+ secondaryCtaHref: hero.secondaryCtaHref,
1914
+ marqueeTitle: hero.marqueeTitle,
1915
+ marqueeImages: hero.marqueeImages
1916
+ }
1917
+ ),
1918
+ /* @__PURE__ */ jsx35(
1919
+ GalFeatures,
1920
+ {
1921
+ heading: features.heading,
1922
+ description: features.description,
1923
+ features: features.features
1924
+ }
1925
+ ),
1926
+ pricing.variant === "single" ? /* @__PURE__ */ jsx35(
1927
+ GalPricing,
1928
+ {
1929
+ heading: pricing.heading,
1930
+ subheading: pricing.subheading,
1931
+ price: pricing.price,
1932
+ priceUnit: pricing.priceUnit,
1933
+ trialText: pricing.trialText,
1934
+ ctaText: pricing.ctaText,
1935
+ ctaHref: pricing.ctaHref,
1936
+ featuresHeading: pricing.featuresHeading,
1937
+ features: pricing.features,
1938
+ securityNote: pricing.securityNote
1939
+ }
1940
+ ) : /* @__PURE__ */ jsx35(
1941
+ GalPricingTiers,
1942
+ {
1943
+ heading: pricing.heading,
1944
+ subheading: pricing.subheading,
1945
+ tiers: pricing.tiers,
1946
+ securityNote: pricing.securityNote
1947
+ }
1948
+ ),
1949
+ /* @__PURE__ */ jsx35(GalFAQ, { heading: faq.heading, faqs: faq.faqs }),
1950
+ /* @__PURE__ */ jsx35(
1951
+ GalCTA,
1952
+ {
1953
+ heading: cta.heading,
1954
+ subheading: cta.subheading,
1955
+ buttons: cta.buttons,
1956
+ hostname
1957
+ }
1958
+ )
1959
+ ] }),
1960
+ /* @__PURE__ */ jsx35(
1961
+ GalFooter,
1962
+ {
1963
+ logo: brandName,
1964
+ description: hero.description,
1965
+ copyrightText: `${hostname} \xA9 ${(/* @__PURE__ */ new Date()).getFullYear()}. All rights reserved.`
1966
+ }
1967
+ )
1968
+ ] });
1969
+ }
1970
+
1971
+ // src/view/view.tsx
1972
+ import { jsx as jsx36 } from "react/jsx-runtime";
1378
1973
  function NamedAgentView({ content, theme, mode, brandName, hostname, template = "studio" }) {
1379
1974
  return (
1380
1975
  // texture={false}: DialectShell's NoiseTexture grain defaults on for the
1381
1976
  // agent dialects, but the named baseline renders NO overlay — the fixed
1382
1977
  // full-viewport speckle layer sits over every pixel and subtly shifts the
1383
1978
  // whole palette off the baseline values.
1384
- /* @__PURE__ */ jsx25(DialectShell, { theme, mode, texture: false, children: /* @__PURE__ */ jsx25("div", { "data-dialect": "named", "data-template": template, children: template === "executive" ? /* @__PURE__ */ jsx25(ExecutiveView, { content, brandName, hostname }) : /* @__PURE__ */ jsx25(StudioView, { content, brandName, hostname }) }) })
1979
+ /* @__PURE__ */ jsx36(DialectShell, { theme, mode, texture: false, children: /* @__PURE__ */ jsx36("div", { "data-dialect": "named", "data-template": template, children: template === "executive" ? /* @__PURE__ */ jsx36(ExecutiveView, { content, brandName, hostname }) : template === "gallery" ? /* @__PURE__ */ jsx36(GalleryView, { content, brandName, hostname }) : /* @__PURE__ */ jsx36(StudioView, { content, brandName, hostname }) }) })
1385
1980
  );
1386
1981
  }
1387
1982
  var view_default = NamedAgentView;