@kubuild/components 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/blocks/index.cjs +601 -12
  2. package/dist/blocks/index.cjs.map +1 -1
  3. package/dist/blocks/index.d.ts +2 -1
  4. package/dist/blocks/index.d.ts.map +1 -1
  5. package/dist/blocks/index.js +3 -1
  6. package/dist/blocks/sales.d.ts +7 -0
  7. package/dist/blocks/sales.d.ts.map +1 -0
  8. package/dist/canonical-props.d.ts +8 -0
  9. package/dist/canonical-props.d.ts.map +1 -0
  10. package/dist/{chunk-3HU2KE2B.js → chunk-CJN5OHHX.js} +596 -9
  11. package/dist/chunk-CJN5OHHX.js.map +1 -0
  12. package/dist/{chunk-JTQ35OQQ.js → chunk-DIZKTXJI.js} +601 -13
  13. package/dist/chunk-DIZKTXJI.js.map +1 -0
  14. package/dist/definitions/constants.d.ts.map +1 -1
  15. package/dist/definitions/conversion/accordion.d.ts +8 -0
  16. package/dist/definitions/conversion/accordion.d.ts.map +1 -0
  17. package/dist/definitions/conversion/carousel.d.ts +7 -0
  18. package/dist/definitions/conversion/carousel.d.ts.map +1 -0
  19. package/dist/definitions/conversion/countdown.d.ts +19 -0
  20. package/dist/definitions/conversion/countdown.d.ts.map +1 -0
  21. package/dist/definitions/conversion/divider.d.ts +9 -0
  22. package/dist/definitions/conversion/divider.d.ts.map +1 -0
  23. package/dist/definitions/conversion/index.d.ts +7 -0
  24. package/dist/definitions/conversion/index.d.ts.map +1 -0
  25. package/dist/definitions/conversion/rating.d.ts +7 -0
  26. package/dist/definitions/conversion/rating.d.ts.map +1 -0
  27. package/dist/definitions/conversion/tabs.d.ts +9 -0
  28. package/dist/definitions/conversion/tabs.d.ts.map +1 -0
  29. package/dist/definitions/form/button.d.ts.map +1 -1
  30. package/dist/definitions/index.cjs +746 -147
  31. package/dist/definitions/index.cjs.map +1 -1
  32. package/dist/definitions/index.d.ts +1 -0
  33. package/dist/definitions/index.d.ts.map +1 -1
  34. package/dist/definitions/index.js +27 -1
  35. package/dist/definitions/types.d.ts +4 -1
  36. package/dist/definitions/types.d.ts.map +1 -1
  37. package/dist/definitions/typography/badge.d.ts.map +1 -1
  38. package/dist/definitions/typography/blockquote.d.ts.map +1 -1
  39. package/dist/definitions/typography/heading.d.ts.map +1 -1
  40. package/dist/definitions/typography/link.d.ts.map +1 -1
  41. package/dist/definitions/typography/paragraph.d.ts.map +1 -1
  42. package/dist/definitions/typography/text.d.ts.map +1 -1
  43. package/dist/index.cjs +1417 -227
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +32 -2
  48. package/dist/index.js.map +1 -1
  49. package/dist/registry.d.ts +12 -0
  50. package/dist/registry.d.ts.map +1 -1
  51. package/package.json +3 -3
  52. package/dist/chunk-3HU2KE2B.js.map +0 -1
  53. package/dist/chunk-JTQ35OQQ.js.map +0 -1
@@ -22,6 +22,7 @@ var blocks_exports = {};
22
22
  __export(blocks_exports, {
23
23
  FORM_STARTER_BLOCKS: () => FORM_STARTER_BLOCKS,
24
24
  LAYOUT_STARTER_BLOCKS: () => LAYOUT_STARTER_BLOCKS,
25
+ SALES_STARTER_BLOCKS: () => SALES_STARTER_BLOCKS,
25
26
  STARTER_BLOCKS: () => STARTER_BLOCKS,
26
27
  UI_STARTER_BLOCKS: () => UI_STARTER_BLOCKS,
27
28
  defaultGenId: () => defaultGenId
@@ -616,7 +617,7 @@ var UI_STARTER_BLOCKS = [
616
617
  id: gen("paragraph"),
617
618
  type: "paragraph",
618
619
  props: {
619
- content: "A visual builder designed for maximum craft, responsiveness, and performance."
620
+ text: "A visual builder designed for maximum craft, responsiveness, and performance."
620
621
  },
621
622
  styles: {
622
623
  base: {
@@ -674,7 +675,7 @@ var UI_STARTER_BLOCKS = [
674
675
  {
675
676
  id: gen("badge"),
676
677
  type: "badge",
677
- props: { label: "PRO FEATURE", variant: "primary" },
678
+ props: { text: "PRO FEATURE", variant: "primary" },
678
679
  styles: { base: { marginBottom: "12px", display: "inline-block" } }
679
680
  },
680
681
  {
@@ -689,7 +690,7 @@ var UI_STARTER_BLOCKS = [
689
690
  id: gen("paragraph"),
690
691
  type: "paragraph",
691
692
  props: {
692
- content: "Engineered for sub-millisecond render updates and zero runtime overhead."
693
+ text: "Engineered for sub-millisecond render updates and zero runtime overhead."
693
694
  },
694
695
  styles: { base: { fontSize: "14px", color: "#64748b", lineHeight: "1.5" } }
695
696
  }
@@ -753,7 +754,7 @@ var UI_STARTER_BLOCKS = [
753
754
  {
754
755
  id: gen("paragraph"),
755
756
  type: "paragraph",
756
- props: { content: "High dynamic range gradients crafted for modern presentations." },
757
+ props: { text: "High dynamic range gradients crafted for modern presentations." },
757
758
  styles: { base: { fontSize: "13px", color: "#64748b", lineHeight: "1.4" } }
758
759
  }
759
760
  ]
@@ -787,7 +788,7 @@ var UI_STARTER_BLOCKS = [
787
788
  {
788
789
  id: gen("badge"),
789
790
  type: "badge",
790
- props: { label: "MOST POPULAR", variant: "primary" },
791
+ props: { text: "MOST POPULAR", variant: "primary" },
791
792
  styles: { base: { marginBottom: "12px", display: "inline-block" } }
792
793
  },
793
794
  {
@@ -807,7 +808,7 @@ var UI_STARTER_BLOCKS = [
807
808
  {
808
809
  id: gen("paragraph"),
809
810
  type: "paragraph",
810
- props: { content: "Includes unlimited pages, custom domains, and team collaboration." },
811
+ props: { text: "Includes unlimited pages, custom domains, and team collaboration." },
811
812
  styles: { base: { fontSize: "14px", color: "#64748b", marginBottom: "24px" } }
812
813
  },
813
814
  {
@@ -864,7 +865,7 @@ var UI_STARTER_BLOCKS = [
864
865
  {
865
866
  id: gen("paragraph"),
866
867
  type: "paragraph",
867
- props: { content: "Start building with zero installation and instant live preview." },
868
+ props: { text: "Start building with zero installation and instant live preview." },
868
869
  styles: {
869
870
  base: { fontSize: "16px", color: "#94a3b8", marginBottom: "24px", maxWidth: "600px", margin: "0 auto 24px auto" }
870
871
  }
@@ -947,7 +948,7 @@ var FORM_STARTER_BLOCKS = [
947
948
  id: gen("paragraph"),
948
949
  type: "paragraph",
949
950
  props: {
950
- content: "Have questions or need assistance? Fill out the form below and we will get back to you shortly."
951
+ text: "Have questions or need assistance? Fill out the form below and we will get back to you shortly."
951
952
  },
952
953
  styles: {
953
954
  base: {
@@ -1205,7 +1206,7 @@ var FORM_STARTER_BLOCKS = [
1205
1206
  id: gen("paragraph"),
1206
1207
  type: "paragraph",
1207
1208
  props: {
1208
- content: "Subscribe to our newsletter for weekly curated insights, updates, and best practices."
1209
+ text: "Subscribe to our newsletter for weekly curated insights, updates, and best practices."
1209
1210
  },
1210
1211
  styles: {
1211
1212
  base: {
@@ -1383,7 +1384,7 @@ var FORM_STARTER_BLOCKS = [
1383
1384
  {
1384
1385
  id: gen("badge"),
1385
1386
  type: "badge",
1386
- props: { label: "FREE CONSULTATION", variant: "primary" },
1387
+ props: { text: "FREE CONSULTATION", variant: "primary" },
1387
1388
  styles: { base: { marginBottom: "12px", display: "inline-block" } }
1388
1389
  },
1389
1390
  {
@@ -1403,7 +1404,7 @@ var FORM_STARTER_BLOCKS = [
1403
1404
  id: gen("paragraph"),
1404
1405
  type: "paragraph",
1405
1406
  props: {
1406
- content: "Share your project details with our solutions team. We will analyze your needs and provide a personalized roadmap."
1407
+ text: "Share your project details with our solutions team. We will analyze your needs and provide a personalized roadmap."
1407
1408
  },
1408
1409
  styles: {
1409
1410
  base: {
@@ -1644,16 +1645,604 @@ var FORM_STARTER_BLOCKS = [
1644
1645
  }
1645
1646
  ];
1646
1647
 
1648
+ // src/blocks/sales.ts
1649
+ var SALES_CATEGORY = "sales";
1650
+ var SALES_CATEGORY_LABEL = "Sales & Conversion";
1651
+ function sectionShell(gen, children, sectionStyles = {}, maxWidth = "960px") {
1652
+ return {
1653
+ id: gen("section"),
1654
+ type: "section",
1655
+ styles: {
1656
+ ...sectionStyles,
1657
+ base: {
1658
+ paddingTop: "64px",
1659
+ paddingBottom: "64px",
1660
+ paddingLeft: "24px",
1661
+ paddingRight: "24px",
1662
+ width: "100%",
1663
+ ...sectionStyles.base ?? {}
1664
+ },
1665
+ mobile: {
1666
+ paddingTop: "40px",
1667
+ paddingBottom: "40px",
1668
+ paddingLeft: "16px",
1669
+ paddingRight: "16px",
1670
+ ...sectionStyles.mobile ?? {}
1671
+ }
1672
+ },
1673
+ children: [
1674
+ {
1675
+ id: gen("container"),
1676
+ type: "container",
1677
+ props: { tag: "div" },
1678
+ styles: {
1679
+ base: {
1680
+ maxWidth,
1681
+ margin: "0 auto",
1682
+ width: "100%",
1683
+ display: "flex",
1684
+ flexDirection: "column",
1685
+ gap: "24px"
1686
+ }
1687
+ },
1688
+ children
1689
+ }
1690
+ ]
1691
+ };
1692
+ }
1693
+ function sectionHeading(gen, text, subtitle, color = "#0f172a") {
1694
+ const nodes = [
1695
+ {
1696
+ id: gen("heading"),
1697
+ type: "heading",
1698
+ props: { text, level: 2 },
1699
+ styles: {
1700
+ base: { fontSize: "32px", fontWeight: "800", color, textAlign: "center", margin: "0" },
1701
+ mobile: { fontSize: "26px" }
1702
+ }
1703
+ }
1704
+ ];
1705
+ if (subtitle) {
1706
+ nodes.push({
1707
+ id: gen("paragraph"),
1708
+ type: "paragraph",
1709
+ props: { text: subtitle },
1710
+ styles: { base: { fontSize: "16px", color: "#64748b", textAlign: "center", margin: "0" } }
1711
+ });
1712
+ }
1713
+ return nodes;
1714
+ }
1715
+ function faqItem(gen, question, answer) {
1716
+ return {
1717
+ id: gen("accordion-item"),
1718
+ type: "accordion-item",
1719
+ props: { title: question },
1720
+ styles: { base: { borderBottom: "1px solid #e2e8f0" } },
1721
+ children: [
1722
+ {
1723
+ id: gen("paragraph"),
1724
+ type: "paragraph",
1725
+ props: { text: answer },
1726
+ styles: { base: { fontSize: "15px", color: "#475569", margin: "0", lineHeight: "1.6" } }
1727
+ }
1728
+ ]
1729
+ };
1730
+ }
1731
+ function testimonialSlide(gen, quote, name, role, rating) {
1732
+ return {
1733
+ id: gen("flex"),
1734
+ type: "flex",
1735
+ styles: {
1736
+ base: {
1737
+ display: "flex",
1738
+ flexDirection: "column",
1739
+ alignItems: "center",
1740
+ gap: "16px",
1741
+ padding: "32px 48px",
1742
+ textAlign: "center"
1743
+ },
1744
+ mobile: { padding: "24px 40px" }
1745
+ },
1746
+ children: [
1747
+ {
1748
+ id: gen("rating"),
1749
+ type: "rating",
1750
+ props: { value: rating, max: 5, size: 20, color: "#f59e0b" }
1751
+ },
1752
+ {
1753
+ id: gen("blockquote"),
1754
+ type: "blockquote",
1755
+ props: { text: quote },
1756
+ styles: {
1757
+ base: {
1758
+ fontSize: "18px",
1759
+ color: "#0f172a",
1760
+ fontStyle: "italic",
1761
+ margin: "0",
1762
+ lineHeight: "1.6"
1763
+ }
1764
+ }
1765
+ },
1766
+ {
1767
+ id: gen("text"),
1768
+ type: "text",
1769
+ props: { text: `${name} \u2014 ${role}` },
1770
+ styles: { base: { fontSize: "14px", fontWeight: "600", color: "#64748b" } }
1771
+ }
1772
+ ]
1773
+ };
1774
+ }
1775
+ function badgeItem(gen, iconName, label) {
1776
+ return {
1777
+ id: gen("flex"),
1778
+ type: "flex",
1779
+ styles: {
1780
+ base: {
1781
+ display: "flex",
1782
+ flexDirection: "column",
1783
+ alignItems: "center",
1784
+ gap: "8px",
1785
+ padding: "16px",
1786
+ textAlign: "center"
1787
+ }
1788
+ },
1789
+ children: [
1790
+ {
1791
+ id: gen("icon"),
1792
+ type: "icon",
1793
+ props: { name: iconName, size: 28, color: "#16a34a", ariaLabel: label }
1794
+ },
1795
+ {
1796
+ id: gen("text"),
1797
+ type: "text",
1798
+ props: { text: label },
1799
+ styles: { base: { fontSize: "14px", fontWeight: "600", color: "#334155" } }
1800
+ }
1801
+ ]
1802
+ };
1803
+ }
1804
+ function planCard(gen, name, price, features, highlighted) {
1805
+ return {
1806
+ id: gen("container"),
1807
+ type: "container",
1808
+ props: { tag: "div" },
1809
+ styles: {
1810
+ base: {
1811
+ display: "flex",
1812
+ flexDirection: "column",
1813
+ gap: "12px",
1814
+ padding: "28px 24px",
1815
+ backgroundColor: "#ffffff",
1816
+ borderRadius: "16px",
1817
+ border: highlighted ? "2px solid #2563eb" : "1px solid #e2e8f0"
1818
+ }
1819
+ },
1820
+ children: [
1821
+ {
1822
+ id: gen("heading"),
1823
+ type: "heading",
1824
+ props: { text: name, level: 3 },
1825
+ styles: { base: { fontSize: "20px", fontWeight: "700", color: "#0f172a", margin: "0" } }
1826
+ },
1827
+ {
1828
+ id: gen("heading"),
1829
+ type: "heading",
1830
+ props: { text: price, level: 4 },
1831
+ styles: { base: { fontSize: "32px", fontWeight: "800", color: "#2563eb", margin: "0" } }
1832
+ },
1833
+ {
1834
+ id: gen("list"),
1835
+ type: "list",
1836
+ props: { tag: "ul", listStyleType: "disc" },
1837
+ styles: { base: { fontSize: "14px", color: "#475569", paddingLeft: "20px", margin: "0" } },
1838
+ children: features.map((feature) => ({
1839
+ id: gen("list-item"),
1840
+ type: "list-item",
1841
+ props: { text: feature }
1842
+ }))
1843
+ },
1844
+ {
1845
+ id: gen("button"),
1846
+ type: "button",
1847
+ props: {
1848
+ label: `Choose ${name}`,
1849
+ href: "#checkout",
1850
+ variant: highlighted ? "primary" : "secondary"
1851
+ },
1852
+ styles: {
1853
+ base: {
1854
+ width: "100%",
1855
+ padding: "12px",
1856
+ borderRadius: "8px",
1857
+ fontWeight: "600",
1858
+ marginTop: "8px"
1859
+ }
1860
+ }
1861
+ }
1862
+ ]
1863
+ };
1864
+ }
1865
+ function planColumns(gen, plans) {
1866
+ return {
1867
+ id: gen("columns"),
1868
+ type: "columns",
1869
+ props: { columns: plans.length, gap: "16px" },
1870
+ styles: {
1871
+ base: {
1872
+ display: "grid",
1873
+ gridTemplateColumns: `repeat(${plans.length}, minmax(0, 1fr))`,
1874
+ gap: "16px"
1875
+ },
1876
+ mobile: { gridTemplateColumns: "repeat(1, minmax(0, 1fr))" }
1877
+ },
1878
+ children: plans.map(
1879
+ ([name, price, features, highlighted]) => planCard(gen, name, price, features, highlighted)
1880
+ )
1881
+ };
1882
+ }
1883
+ var SALES_STARTER_BLOCKS = [
1884
+ {
1885
+ id: "sales-faq",
1886
+ name: "FAQ",
1887
+ category: SALES_CATEGORY,
1888
+ categoryLabel: SALES_CATEGORY_LABEL,
1889
+ description: "Frequently asked questions accordion with FAQPage structured data for SEO",
1890
+ icon: "chevron-down",
1891
+ createNodeTree: (gen = defaultGenId) => sectionShell(
1892
+ gen,
1893
+ [
1894
+ ...sectionHeading(
1895
+ gen,
1896
+ "Frequently Asked Questions",
1897
+ "Everything you need to know before you buy."
1898
+ ),
1899
+ {
1900
+ id: gen("accordion"),
1901
+ type: "accordion",
1902
+ props: { allowMultiple: false, defaultOpenIndex: 0, icon: "chevron", faqSchema: true },
1903
+ styles: {
1904
+ base: {
1905
+ display: "flex",
1906
+ flexDirection: "column",
1907
+ width: "100%",
1908
+ borderTop: "1px solid #e2e8f0"
1909
+ }
1910
+ },
1911
+ children: [
1912
+ faqItem(
1913
+ gen,
1914
+ "What exactly do I get?",
1915
+ "Instant access to the full program, all bonuses, and every future update."
1916
+ ),
1917
+ faqItem(
1918
+ gen,
1919
+ "How long do I have access?",
1920
+ "Lifetime access \u2014 learn at your own pace, on any device."
1921
+ ),
1922
+ faqItem(
1923
+ gen,
1924
+ "Is there a money-back guarantee?",
1925
+ "Yes. If you are not satisfied within 30 days, we refund you in full."
1926
+ ),
1927
+ faqItem(
1928
+ gen,
1929
+ "How do I pay?",
1930
+ "We accept cards, bank transfer, and e-wallets through a secure checkout."
1931
+ )
1932
+ ]
1933
+ }
1934
+ ],
1935
+ {},
1936
+ "760px"
1937
+ )
1938
+ },
1939
+ {
1940
+ id: "sales-testimonials",
1941
+ name: "Testimonials Carousel",
1942
+ category: SALES_CATEGORY,
1943
+ categoryLabel: SALES_CATEGORY_LABEL,
1944
+ description: "Customer testimonial slider with star ratings",
1945
+ icon: "star",
1946
+ createNodeTree: (gen = defaultGenId) => sectionShell(
1947
+ gen,
1948
+ [
1949
+ ...sectionHeading(gen, "What Our Customers Say"),
1950
+ {
1951
+ id: gen("carousel"),
1952
+ type: "carousel",
1953
+ props: {
1954
+ autoplay: true,
1955
+ interval: 6e3,
1956
+ loop: true,
1957
+ showDots: true,
1958
+ showArrows: true,
1959
+ ariaLabel: "Testimonials"
1960
+ },
1961
+ styles: {
1962
+ base: {
1963
+ position: "relative",
1964
+ width: "100%",
1965
+ overflow: "hidden",
1966
+ backgroundColor: "#f8fafc",
1967
+ borderRadius: "16px"
1968
+ }
1969
+ },
1970
+ children: [
1971
+ testimonialSlide(
1972
+ gen,
1973
+ "This completely changed how I run my business. Worth every cent.",
1974
+ "Sarah K.",
1975
+ "Founder",
1976
+ 5
1977
+ ),
1978
+ testimonialSlide(
1979
+ gen,
1980
+ "Clear, practical, and easy to follow. I saw results in the first week.",
1981
+ "Budi S.",
1982
+ "Marketing Lead",
1983
+ 4.5
1984
+ ),
1985
+ testimonialSlide(
1986
+ gen,
1987
+ "The support team is amazing and the material is top-notch.",
1988
+ "Aisha R.",
1989
+ "Freelancer",
1990
+ 5
1991
+ )
1992
+ ]
1993
+ }
1994
+ ],
1995
+ { base: { backgroundColor: "#ffffff" } },
1996
+ "760px"
1997
+ )
1998
+ },
1999
+ {
2000
+ id: "sales-countdown-banner",
2001
+ name: "Countdown Banner",
2002
+ category: SALES_CATEGORY,
2003
+ categoryLabel: SALES_CATEGORY_LABEL,
2004
+ description: "Limited-time offer banner with an evergreen countdown timer and CTA",
2005
+ icon: "clock",
2006
+ createNodeTree: (gen = defaultGenId) => sectionShell(
2007
+ gen,
2008
+ [
2009
+ ...sectionHeading(gen, "Special Launch Price Ends Soon", void 0, "#ffffff"),
2010
+ {
2011
+ id: gen("countdown"),
2012
+ type: "countdown",
2013
+ props: {
2014
+ mode: "evergreen",
2015
+ durationMinutes: 30,
2016
+ format: "d h m s",
2017
+ labelDays: "Days",
2018
+ labelHours: "Hours",
2019
+ labelMinutes: "Minutes",
2020
+ labelSeconds: "Seconds",
2021
+ expireBehavior: "text",
2022
+ expiredText: "The special price has ended.",
2023
+ storage: "session",
2024
+ ariaLabel: "Offer ends in"
2025
+ },
2026
+ styles: {
2027
+ base: {
2028
+ display: "flex",
2029
+ alignItems: "center",
2030
+ justifyContent: "center",
2031
+ gap: "16px",
2032
+ fontSize: "36px",
2033
+ fontWeight: "800",
2034
+ color: "#ffffff",
2035
+ fontVariantNumeric: "tabular-nums"
2036
+ },
2037
+ mobile: { fontSize: "28px", gap: "8px" }
2038
+ }
2039
+ },
2040
+ {
2041
+ id: gen("button"),
2042
+ type: "button",
2043
+ props: { label: "Claim the Offer", href: "#checkout" },
2044
+ styles: {
2045
+ base: {
2046
+ alignSelf: "center",
2047
+ backgroundColor: "#f59e0b",
2048
+ color: "#0f172a",
2049
+ padding: "14px 32px",
2050
+ borderRadius: "9999px",
2051
+ fontSize: "16px",
2052
+ fontWeight: "700"
2053
+ }
2054
+ }
2055
+ }
2056
+ ],
2057
+ { base: { backgroundColor: "#0f172a" } }
2058
+ )
2059
+ },
2060
+ {
2061
+ id: "sales-guarantee",
2062
+ name: "Money-Back Guarantee",
2063
+ category: SALES_CATEGORY,
2064
+ categoryLabel: SALES_CATEGORY_LABEL,
2065
+ description: "Risk-reversal guarantee section with shield icon",
2066
+ icon: "badge",
2067
+ createNodeTree: (gen = defaultGenId) => sectionShell(
2068
+ gen,
2069
+ [
2070
+ {
2071
+ id: gen("flex"),
2072
+ type: "flex",
2073
+ styles: {
2074
+ base: {
2075
+ display: "flex",
2076
+ flexDirection: "row",
2077
+ alignItems: "center",
2078
+ gap: "24px",
2079
+ padding: "32px",
2080
+ backgroundColor: "#f0fdf4",
2081
+ border: "2px dashed #16a34a",
2082
+ borderRadius: "16px"
2083
+ },
2084
+ mobile: { flexDirection: "column", textAlign: "center", padding: "24px" }
2085
+ },
2086
+ children: [
2087
+ {
2088
+ id: gen("icon"),
2089
+ type: "icon",
2090
+ props: { name: "shield-check", size: 64, color: "#16a34a", ariaLabel: "Guarantee" }
2091
+ },
2092
+ {
2093
+ id: gen("flex"),
2094
+ type: "flex",
2095
+ styles: { base: { display: "flex", flexDirection: "column", gap: "8px" } },
2096
+ children: [
2097
+ {
2098
+ id: gen("heading"),
2099
+ type: "heading",
2100
+ props: { text: "30-Day Money-Back Guarantee", level: 3 },
2101
+ styles: {
2102
+ base: { fontSize: "22px", fontWeight: "800", color: "#14532d", margin: "0" }
2103
+ }
2104
+ },
2105
+ {
2106
+ id: gen("paragraph"),
2107
+ type: "paragraph",
2108
+ props: {
2109
+ text: "Try it risk-free. If it is not right for you, email us within 30 days and we will refund every cent \u2014 no questions asked."
2110
+ },
2111
+ styles: {
2112
+ base: { fontSize: "15px", color: "#166534", margin: "0", lineHeight: "1.6" }
2113
+ }
2114
+ }
2115
+ ]
2116
+ }
2117
+ ]
2118
+ }
2119
+ ],
2120
+ {},
2121
+ "760px"
2122
+ )
2123
+ },
2124
+ {
2125
+ id: "sales-trust-badges",
2126
+ name: "Trust Badges",
2127
+ category: SALES_CATEGORY,
2128
+ categoryLabel: SALES_CATEGORY_LABEL,
2129
+ description: "Row of trust signals: secure payment, guarantee, support, and delivery",
2130
+ icon: "grid",
2131
+ createNodeTree: (gen = defaultGenId) => sectionShell(
2132
+ gen,
2133
+ [
2134
+ {
2135
+ id: gen("grid"),
2136
+ type: "grid",
2137
+ styles: {
2138
+ base: {
2139
+ display: "grid",
2140
+ gridTemplateColumns: "repeat(4, minmax(0, 1fr))",
2141
+ gap: "16px"
2142
+ },
2143
+ mobile: { gridTemplateColumns: "repeat(2, minmax(0, 1fr))" }
2144
+ },
2145
+ children: [
2146
+ badgeItem(gen, "lock", "Secure Payment"),
2147
+ badgeItem(gen, "shield-check", "Money-Back Guarantee"),
2148
+ badgeItem(gen, "headphones", "24/7 Support"),
2149
+ badgeItem(gen, "zap", "Instant Access")
2150
+ ]
2151
+ },
2152
+ {
2153
+ id: gen("divider"),
2154
+ type: "divider",
2155
+ props: { lineStyle: "solid", thickness: 1, color: "#e2e8f0", label: "" }
2156
+ },
2157
+ {
2158
+ id: gen("paragraph"),
2159
+ type: "paragraph",
2160
+ props: { text: "Trusted by 10,000+ customers." },
2161
+ styles: {
2162
+ base: { fontSize: "14px", color: "#64748b", textAlign: "center", margin: "0" }
2163
+ }
2164
+ }
2165
+ ],
2166
+ { base: { paddingTop: "32px", paddingBottom: "32px" } }
2167
+ )
2168
+ },
2169
+ {
2170
+ id: "sales-plan-comparison",
2171
+ name: "Plan Comparison",
2172
+ category: SALES_CATEGORY,
2173
+ categoryLabel: SALES_CATEGORY_LABEL,
2174
+ description: "Monthly/yearly tabs comparing pricing plans side by side",
2175
+ icon: "columns",
2176
+ createNodeTree: (gen = defaultGenId) => sectionShell(gen, [
2177
+ ...sectionHeading(gen, "Choose Your Plan", "Switch between monthly and yearly billing."),
2178
+ {
2179
+ id: gen("tabs"),
2180
+ type: "tabs",
2181
+ props: { activeIndex: 0, ariaLabel: "Billing period" },
2182
+ styles: { base: { display: "flex", flexDirection: "column", width: "100%" } },
2183
+ children: [
2184
+ {
2185
+ id: gen("tab-panel"),
2186
+ type: "tab-panel",
2187
+ props: { label: "Monthly" },
2188
+ styles: { base: { paddingTop: "24px" } },
2189
+ children: [
2190
+ planColumns(gen, [
2191
+ ["Basic", "$19 / mo", ["1 project", "Email support", "Core features"], false],
2192
+ [
2193
+ "Pro",
2194
+ "$49 / mo",
2195
+ ["Unlimited projects", "Priority support", "All features"],
2196
+ true
2197
+ ]
2198
+ ])
2199
+ ]
2200
+ },
2201
+ {
2202
+ id: gen("tab-panel"),
2203
+ type: "tab-panel",
2204
+ props: { label: "Yearly" },
2205
+ styles: { base: { paddingTop: "24px" } },
2206
+ children: [
2207
+ planColumns(gen, [
2208
+ [
2209
+ "Basic",
2210
+ "$190 / yr",
2211
+ ["1 project", "Email support", "Core features", "2 months free"],
2212
+ false
2213
+ ],
2214
+ [
2215
+ "Pro",
2216
+ "$490 / yr",
2217
+ ["Unlimited projects", "Priority support", "All features", "2 months free"],
2218
+ true
2219
+ ]
2220
+ ])
2221
+ ]
2222
+ }
2223
+ ]
2224
+ },
2225
+ {
2226
+ id: gen("spacer"),
2227
+ type: "spacer",
2228
+ styles: { base: { width: "100%", height: "16px" }, mobile: { height: "8px" } }
2229
+ }
2230
+ ])
2231
+ }
2232
+ ];
2233
+
1647
2234
  // src/blocks/index.ts
1648
2235
  var STARTER_BLOCKS = [
1649
2236
  ...LAYOUT_STARTER_BLOCKS,
1650
2237
  ...UI_STARTER_BLOCKS,
1651
- ...FORM_STARTER_BLOCKS
2238
+ ...FORM_STARTER_BLOCKS,
2239
+ ...SALES_STARTER_BLOCKS
1652
2240
  ];
1653
2241
  // Annotate the CommonJS export names for ESM import in node:
1654
2242
  0 && (module.exports = {
1655
2243
  FORM_STARTER_BLOCKS,
1656
2244
  LAYOUT_STARTER_BLOCKS,
2245
+ SALES_STARTER_BLOCKS,
1657
2246
  STARTER_BLOCKS,
1658
2247
  UI_STARTER_BLOCKS,
1659
2248
  defaultGenId