@stampui/blocks 1.1.1 → 2.0.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.
Files changed (54) hide show
  1. package/dist/manifests.js +917 -170
  2. package/package.json +15 -10
  3. package/src/components/blocks/animated-counter.tsx +70 -0
  4. package/src/components/blocks/gradient-text.tsx +39 -0
  5. package/src/components/blocks/grid-wave.tsx +40 -0
  6. package/src/components/blocks/loading-card.tsx +48 -0
  7. package/src/components/blocks/loading-dots.tsx +68 -0
  8. package/src/components/blocks/orbit-trail.tsx +30 -0
  9. package/src/components/blocks/progress-ring.tsx +72 -0
  10. package/src/components/blocks/registry-card.tsx +6 -7
  11. package/src/components/blocks/signal-arc.tsx +32 -0
  12. package/src/components/blocks/typewriter-text.tsx +62 -0
  13. package/src/components/core/alert-dialog.tsx +2 -2
  14. package/src/components/core/avatar.tsx +8 -4
  15. package/src/components/core/button.tsx +1 -1
  16. package/src/components/core/checkbox.tsx +1 -1
  17. package/src/components/core/combobox.tsx +1 -1
  18. package/src/components/core/command.tsx +7 -4
  19. package/src/components/core/date-picker.tsx +1 -1
  20. package/src/components/core/dialog.tsx +1 -1
  21. package/src/components/core/drawer.tsx +1 -1
  22. package/src/components/core/input.tsx +2 -0
  23. package/src/components/core/label.tsx +1 -1
  24. package/src/components/core/multi-select.tsx +1 -1
  25. package/src/components/core/native-select.tsx +1 -1
  26. package/src/components/core/password-input.tsx +3 -0
  27. package/src/components/core/radio-group.tsx +1 -1
  28. package/src/components/core/resizable.tsx +1 -1
  29. package/src/components/core/select.tsx +1 -1
  30. package/src/components/core/sheet.tsx +1 -1
  31. package/src/components/core/slider.tsx +1 -1
  32. package/src/components/core/status-pulse.tsx +6 -0
  33. package/src/components/core/switch.tsx +1 -1
  34. package/src/components/core/table.tsx +7 -2
  35. package/src/components/core/tabs.tsx +1 -1
  36. package/src/components/core/toggle.tsx +1 -1
  37. package/src/components/core/typing-indicator.tsx +41 -27
  38. package/src/manifests.ts +932 -183
  39. package/src/components/blocks/ai-chat-shell.tsx +0 -97
  40. package/src/components/blocks/auth-panel.tsx +0 -203
  41. package/src/components/blocks/dashboard-shell.tsx +0 -135
  42. package/src/components/blocks/notification-center.tsx +0 -185
  43. package/src/components/blocks/onboarding-flow.tsx +0 -230
  44. package/src/components/blocks/project-command-center.tsx +0 -188
  45. package/src/components/blocks/prompt-input.tsx +0 -81
  46. package/src/components/blocks/settings-layout.tsx +0 -178
  47. package/src/components/blocks/token-stream.tsx +0 -42
  48. package/src/components/core/carousel.tsx +0 -170
  49. package/src/components/core/chart.tsx +0 -377
  50. package/src/components/core/data-table.tsx +0 -173
  51. package/src/components/core/file-upload.tsx +0 -143
  52. package/src/components/core/input-otp.tsx +0 -108
  53. package/src/components/core/stepper.tsx +0 -111
  54. package/src/components/core/timeline.tsx +0 -81
package/src/manifests.ts CHANGED
@@ -949,7 +949,7 @@ export const manifests: Record<string, BlockManifest> = {
949
949
  version: "1.0.0",
950
950
  updatedAt: "2026-05-10",
951
951
  changelog: ["Initial release"],
952
- status: "new",
952
+ status: "pro",
953
953
  difficulty: "intermediate",
954
954
  frameworks: ["nextjs", "react", "vite"],
955
955
  dependencies: ["lucide-react"],
@@ -968,7 +968,7 @@ export const manifests: Record<string, BlockManifest> = {
968
968
  version: "1.0.0",
969
969
  updatedAt: "2026-05-10",
970
970
  changelog: ["Initial release"],
971
- status: "new",
971
+ status: "pro",
972
972
  difficulty: "intermediate",
973
973
  frameworks: ["nextjs", "react", "vite"],
974
974
  dependencies: [],
@@ -987,7 +987,7 @@ export const manifests: Record<string, BlockManifest> = {
987
987
  version: "1.0.0",
988
988
  updatedAt: "2026-05-10",
989
989
  changelog: ["Initial release"],
990
- status: "new",
990
+ status: "pro",
991
991
  difficulty: "advanced",
992
992
  frameworks: ["nextjs", "react", "vite"],
993
993
  dependencies: ["lucide-react"],
@@ -1006,7 +1006,7 @@ export const manifests: Record<string, BlockManifest> = {
1006
1006
  version: "1.0.0",
1007
1007
  updatedAt: "2026-05-10",
1008
1008
  changelog: ["Initial release"],
1009
- status: "new",
1009
+ status: "pro",
1010
1010
  difficulty: "intermediate",
1011
1011
  frameworks: ["nextjs", "react", "vite"],
1012
1012
  dependencies: ["lucide-react"],
@@ -1025,7 +1025,7 @@ export const manifests: Record<string, BlockManifest> = {
1025
1025
  version: "1.0.0",
1026
1026
  updatedAt: "2026-05-10",
1027
1027
  changelog: ["Initial release"],
1028
- status: "new",
1028
+ status: "pro",
1029
1029
  difficulty: "intermediate",
1030
1030
  frameworks: ["nextjs", "react", "vite"],
1031
1031
  dependencies: ["lucide-react"],
@@ -1044,7 +1044,7 @@ export const manifests: Record<string, BlockManifest> = {
1044
1044
  version: "1.0.0",
1045
1045
  updatedAt: "2026-05-10",
1046
1046
  changelog: ["Initial release"],
1047
- status: "new",
1047
+ status: "pro",
1048
1048
  difficulty: "beginner",
1049
1049
  frameworks: ["nextjs", "react", "vite"],
1050
1050
  dependencies: [],
@@ -1063,7 +1063,7 @@ export const manifests: Record<string, BlockManifest> = {
1063
1063
  version: "1.0.0",
1064
1064
  updatedAt: "2026-05-10",
1065
1065
  changelog: ["Initial release"],
1066
- status: "new",
1066
+ status: "pro",
1067
1067
  difficulty: "intermediate",
1068
1068
  frameworks: ["nextjs", "react", "vite"],
1069
1069
  dependencies: [],
@@ -1126,7 +1126,7 @@ export const manifests: Record<string, BlockManifest> = {
1126
1126
  version: "1.0.0",
1127
1127
  updatedAt: "2026-05-09",
1128
1128
  changelog: ["Initial release"],
1129
- status: "free",
1129
+ status: "pro",
1130
1130
  difficulty: "beginner",
1131
1131
  frameworks: ["nextjs", "react"],
1132
1132
  dependencies: [],
@@ -1145,7 +1145,7 @@ export const manifests: Record<string, BlockManifest> = {
1145
1145
  version: "1.0.0",
1146
1146
  updatedAt: "2026-05-09",
1147
1147
  changelog: ["Initial release"],
1148
- status: "free",
1148
+ status: "pro",
1149
1149
  difficulty: "beginner",
1150
1150
  frameworks: ["nextjs", "react"],
1151
1151
  dependencies: ["lucide-react"],
@@ -1227,7 +1227,7 @@ export const manifests: Record<string, BlockManifest> = {
1227
1227
  version: "1.0.0",
1228
1228
  updatedAt: "2026-05-09",
1229
1229
  changelog: ["Initial release"],
1230
- status: "new",
1230
+ status: "pro",
1231
1231
  difficulty: "intermediate",
1232
1232
  frameworks: ["nextjs", "react"],
1233
1233
  dependencies: ["lucide-react"],
@@ -1370,25 +1370,6 @@ export const manifests: Record<string, BlockManifest> = {
1370
1370
  supportsLightMode: true,
1371
1371
  promptReady: true,
1372
1372
  },
1373
- "project-command-center": {
1374
- slug: "project-command-center",
1375
- title: "Project Command Center",
1376
- description: "Compact project dashboard with launch metrics, milestone progress, team avatars, activity, and health tabs.",
1377
- category: "App",
1378
- tags: ["dashboard", "project", "progress", "team", "status"],
1379
- version: "1.0.0",
1380
- updatedAt: "2026-05-11",
1381
- changelog: ["Initial release"],
1382
- status: "new",
1383
- difficulty: "intermediate",
1384
- frameworks: ["nextjs", "react"],
1385
- dependencies: ["lucide-react"],
1386
- files: [{ path: "components/blocks/project-command-center.tsx", type: "block" }],
1387
- tokens: ["background", "card", "border", "foreground", "muted-foreground", "surface"],
1388
- supportsDarkMode: true,
1389
- supportsLightMode: true,
1390
- promptReady: true,
1391
- },
1392
1373
  "registry-explorer": {
1393
1374
  slug: "registry-explorer",
1394
1375
  title: "Registry Explorer",
@@ -1678,14 +1659,14 @@ export const manifests: Record<string, BlockManifest> = {
1678
1659
  promptReady: true,
1679
1660
  },
1680
1661
 
1681
- // ─── New Blocks ───────────────────────────────────────────────────────────
1662
+ // ─── Motion ───────────────────────────────────────────────────────────────
1682
1663
 
1683
- "waitlist-section": {
1684
- slug: "waitlist-section",
1685
- title: "Waitlist Section",
1686
- description: "Email signup section with a waitlist counter and thank-you state.",
1687
- category: "Marketing",
1688
- tags: ["waitlist", "email", "signup", "landing"],
1664
+ "orbit-trail": {
1665
+ slug: "orbit-trail",
1666
+ title: "Orbit Trail",
1667
+ description: "Three dots orbiting a center point at different radii and speeds.",
1668
+ category: "Motion",
1669
+ tags: ["loader", "spinner", "orbital", "animation"],
1689
1670
  version: "1.0.0",
1690
1671
  updatedAt: "2026-05-17",
1691
1672
  changelog: ["Initial release"],
@@ -1693,19 +1674,18 @@ export const manifests: Record<string, BlockManifest> = {
1693
1674
  difficulty: "beginner",
1694
1675
  frameworks: ["nextjs", "react", "vite"],
1695
1676
  dependencies: [],
1696
- files: [{ path: "components/blocks/waitlist-section.tsx", type: "block" }],
1697
- tokens: ["foreground", "muted-foreground", "border", "surface-2"],
1677
+ files: [{ path: "components/blocks/orbit-trail.tsx", type: "block" }],
1678
+ tokens: ["foreground"],
1698
1679
  supportsDarkMode: true,
1699
- supportsLightMode: false,
1680
+ supportsLightMode: true,
1700
1681
  promptReady: true,
1701
1682
  },
1702
-
1703
- "changelog-feed": {
1704
- slug: "changelog-feed",
1705
- title: "Changelog Feed",
1706
- description: "Vertical timeline of versioned product updates with type tags.",
1707
- category: "Display",
1708
- tags: ["changelog", "timeline", "updates", "versioning"],
1683
+ "grid-wave": {
1684
+ slug: "grid-wave",
1685
+ title: "Grid Wave",
1686
+ description: "4×4 dot grid with diagonal ripple wave animation.",
1687
+ category: "Motion",
1688
+ tags: ["loader", "grid", "dots", "wave", "animation"],
1709
1689
  version: "1.0.0",
1710
1690
  updatedAt: "2026-05-17",
1711
1691
  changelog: ["Initial release"],
@@ -1713,139 +1693,135 @@ export const manifests: Record<string, BlockManifest> = {
1713
1693
  difficulty: "beginner",
1714
1694
  frameworks: ["nextjs", "react", "vite"],
1715
1695
  dependencies: [],
1716
- files: [{ path: "components/blocks/changelog-feed.tsx", type: "block" }],
1717
- tokens: ["foreground", "muted-foreground", "border", "surface-2"],
1696
+ files: [{ path: "components/blocks/grid-wave.tsx", type: "block" }],
1697
+ tokens: ["foreground"],
1718
1698
  supportsDarkMode: true,
1719
- supportsLightMode: false,
1699
+ supportsLightMode: true,
1720
1700
  promptReady: true,
1721
1701
  },
1722
-
1723
- "faq-accordion": {
1724
- slug: "faq-accordion",
1725
- title: "FAQ Accordion",
1726
- description: "Expandable FAQ section built without external accordion dependencies.",
1727
- category: "Marketing",
1728
- tags: ["faq", "accordion", "help", "landing"],
1702
+ "signal-arc": {
1703
+ slug: "signal-arc",
1704
+ title: "Signal Arc",
1705
+ description: "Concentric rings that expand and fade like sonar pulses.",
1706
+ category: "Motion",
1707
+ tags: ["loader", "pulse", "sonar", "rings", "animation"],
1729
1708
  version: "1.0.0",
1730
1709
  updatedAt: "2026-05-17",
1731
1710
  changelog: ["Initial release"],
1732
1711
  status: "free",
1733
1712
  difficulty: "beginner",
1734
1713
  frameworks: ["nextjs", "react", "vite"],
1735
- dependencies: ["lucide-react"],
1736
- files: [{ path: "components/blocks/faq-accordion.tsx", type: "block" }],
1737
- tokens: ["foreground", "muted-foreground", "border"],
1714
+ dependencies: [],
1715
+ files: [{ path: "components/blocks/signal-arc.tsx", type: "block" }],
1716
+ tokens: ["foreground"],
1738
1717
  supportsDarkMode: true,
1739
- supportsLightMode: false,
1718
+ supportsLightMode: true,
1740
1719
  promptReady: true,
1741
1720
  },
1742
-
1743
- "cta-banner": {
1744
- slug: "cta-banner",
1745
- title: "CTA Banner",
1746
- description: "End-of-page call-to-action section with primary and secondary buttons.",
1747
- category: "Marketing",
1748
- tags: ["cta", "call-to-action", "landing", "conversion"],
1721
+ "data-flow": {
1722
+ slug: "data-flow",
1723
+ title: "Data Flow",
1724
+ description: "Streaming dots that flow across in a continuous horizontal stream.",
1725
+ category: "Motion",
1726
+ tags: ["loader", "stream", "flow", "dots", "animation"],
1749
1727
  version: "1.0.0",
1750
1728
  updatedAt: "2026-05-17",
1751
1729
  changelog: ["Initial release"],
1752
- status: "free",
1730
+ status: "pro",
1753
1731
  difficulty: "beginner",
1754
1732
  frameworks: ["nextjs", "react", "vite"],
1755
1733
  dependencies: [],
1756
- files: [{ path: "components/blocks/cta-banner.tsx", type: "block" }],
1757
- tokens: ["foreground", "muted-foreground", "border"],
1734
+ files: [{ path: "components/blocks/data-flow.tsx", type: "block" }],
1735
+ tokens: ["foreground"],
1758
1736
  supportsDarkMode: true,
1759
- supportsLightMode: false,
1737
+ supportsLightMode: true,
1760
1738
  promptReady: true,
1761
1739
  },
1762
-
1763
- "site-footer": {
1764
- slug: "site-footer",
1765
- title: "Site Footer",
1766
- description: "Full site footer with brand, grouped nav links, social icons, and copyright.",
1767
- category: "Navigation",
1768
- tags: ["footer", "navigation", "links", "social"],
1740
+ "bloom-burst": {
1741
+ slug: "bloom-burst",
1742
+ title: "Bloom Burst",
1743
+ description: "Eight radial lines that bloom outward and retract like a starburst.",
1744
+ category: "Motion",
1745
+ tags: ["loader", "radial", "burst", "bloom", "animation"],
1769
1746
  version: "1.0.0",
1770
1747
  updatedAt: "2026-05-17",
1771
1748
  changelog: ["Initial release"],
1772
- status: "free",
1749
+ status: "pro",
1773
1750
  difficulty: "beginner",
1774
1751
  frameworks: ["nextjs", "react", "vite"],
1775
- dependencies: ["lucide-react"],
1776
- files: [{ path: "components/blocks/site-footer.tsx", type: "block" }],
1777
- tokens: ["foreground", "muted-foreground", "border", "surface-2"],
1752
+ dependencies: [],
1753
+ files: [{ path: "components/blocks/bloom-burst.tsx", type: "block" }],
1754
+ tokens: ["foreground"],
1778
1755
  supportsDarkMode: true,
1779
- supportsLightMode: false,
1756
+ supportsLightMode: true,
1780
1757
  promptReady: true,
1781
1758
  },
1782
-
1783
- "testimonials-wall": {
1784
- slug: "testimonials-wall",
1785
- title: "Testimonials Wall",
1786
- description: "Responsive grid of testimonial cards with author avatars and quotes.",
1787
- category: "Marketing",
1788
- tags: ["testimonials", "social-proof", "quotes", "grid"],
1759
+ "helix-wave": {
1760
+ slug: "helix-wave",
1761
+ title: "Helix Wave",
1762
+ description: "Two rows of dots oscillating in counterphase to create a DNA helix illusion.",
1763
+ category: "Motion",
1764
+ tags: ["loader", "helix", "wave", "dots", "animation"],
1789
1765
  version: "1.0.0",
1790
1766
  updatedAt: "2026-05-17",
1791
1767
  changelog: ["Initial release"],
1792
- status: "free",
1768
+ status: "pro",
1793
1769
  difficulty: "beginner",
1794
1770
  frameworks: ["nextjs", "react", "vite"],
1795
1771
  dependencies: [],
1796
- files: [{ path: "components/blocks/testimonials-wall.tsx", type: "block" }],
1797
- tokens: ["foreground", "muted-foreground", "border", "surface-2"],
1772
+ files: [{ path: "components/blocks/helix-wave.tsx", type: "block" }],
1773
+ tokens: ["foreground"],
1798
1774
  supportsDarkMode: true,
1799
- supportsLightMode: false,
1775
+ supportsLightMode: true,
1800
1776
  promptReady: true,
1801
1777
  },
1802
-
1803
- "metrics-grid": {
1804
- slug: "metrics-grid",
1805
- title: "Metrics Grid",
1806
- description: "Dashboard KPI grid with trend indicators, icons, and configurable columns.",
1807
- category: "Dashboard",
1808
- tags: ["metrics", "kpi", "dashboard", "stats", "analytics"],
1778
+ "trace-path": {
1779
+ slug: "trace-path",
1780
+ title: "Trace Path",
1781
+ description: "A circuit-like path that draws itself with a moving dot at its head.",
1782
+ category: "Motion",
1783
+ tags: ["loader", "circuit", "trace", "path", "animation"],
1809
1784
  version: "1.0.0",
1810
1785
  updatedAt: "2026-05-17",
1811
1786
  changelog: ["Initial release"],
1812
- status: "free",
1813
- difficulty: "intermediate",
1814
- frameworks: ["nextjs", "react"],
1815
- dependencies: ["lucide-react"],
1816
- files: [{ path: "components/blocks/metrics-grid.tsx", type: "block" }],
1817
- tokens: ["foreground", "muted-foreground", "border", "surface-2"],
1787
+ status: "pro",
1788
+ difficulty: "beginner",
1789
+ frameworks: ["nextjs", "react", "vite"],
1790
+ dependencies: [],
1791
+ files: [{ path: "components/blocks/trace-path.tsx", type: "block" }],
1792
+ tokens: ["foreground"],
1818
1793
  supportsDarkMode: true,
1819
- supportsLightMode: false,
1794
+ supportsLightMode: true,
1820
1795
  promptReady: true,
1821
1796
  },
1822
-
1823
- "announcement-bar": {
1824
- slug: "announcement-bar",
1825
- title: "Announcement Bar",
1826
- description: "Dismissible top-of-page announcement banner with optional CTA.",
1827
- category: "Feedback",
1828
- tags: ["announcement", "banner", "notification", "top-bar"],
1797
+ "scatter-field": {
1798
+ slug: "scatter-field",
1799
+ title: "Scatter Field",
1800
+ description: "Nine dots scatter outward from a grid and reconverge in a rhythmic loop.",
1801
+ category: "Motion",
1802
+ tags: ["loader", "scatter", "particles", "grid", "animation"],
1829
1803
  version: "1.0.0",
1830
1804
  updatedAt: "2026-05-17",
1831
1805
  changelog: ["Initial release"],
1832
- status: "free",
1806
+ status: "pro",
1833
1807
  difficulty: "beginner",
1834
1808
  frameworks: ["nextjs", "react", "vite"],
1835
- dependencies: ["lucide-react"],
1836
- files: [{ path: "components/blocks/announcement-bar.tsx", type: "block" }],
1837
- tokens: ["foreground", "muted-foreground", "border", "surface-2"],
1809
+ dependencies: [],
1810
+ files: [{ path: "components/blocks/scatter-field.tsx", type: "block" }],
1811
+ tokens: ["foreground"],
1838
1812
  supportsDarkMode: true,
1839
- supportsLightMode: false,
1813
+ supportsLightMode: true,
1840
1814
  promptReady: true,
1841
1815
  },
1842
1816
 
1843
- "social-proof-bar": {
1844
- slug: "social-proof-bar",
1845
- title: "Social Proof Bar",
1846
- description: "Horizontal logo strip showing companies or teams using your product.",
1847
- category: "Marketing",
1848
- tags: ["logos", "social-proof", "companies", "trust"],
1817
+ // ─── Motion: Animation & Loaders ─────────────────────────────────────────
1818
+
1819
+ "animated-counter": {
1820
+ slug: "animated-counter",
1821
+ title: "Animated Counter",
1822
+ description: "Number that animates to its target value with easing on mount.",
1823
+ category: "Motion",
1824
+ tags: ["counter", "number", "animation", "motion"],
1849
1825
  version: "1.0.0",
1850
1826
  updatedAt: "2026-05-17",
1851
1827
  changelog: ["Initial release"],
@@ -1853,79 +1829,75 @@ export const manifests: Record<string, BlockManifest> = {
1853
1829
  difficulty: "beginner",
1854
1830
  frameworks: ["nextjs", "react", "vite"],
1855
1831
  dependencies: [],
1856
- files: [{ path: "components/blocks/social-proof-bar.tsx", type: "block" }],
1857
- tokens: ["muted-foreground", "border"],
1832
+ files: [{ path: "components/blocks/animated-counter.tsx", type: "block" }],
1833
+ tokens: ["foreground", "muted-foreground"],
1858
1834
  supportsDarkMode: true,
1859
- supportsLightMode: false,
1835
+ supportsLightMode: true,
1860
1836
  promptReady: true,
1861
1837
  },
1862
-
1863
- "feature-comparison": {
1864
- slug: "feature-comparison",
1865
- title: "Feature Comparison",
1866
- description: "Plan comparison table with highlighted column, checkmarks, and custom values.",
1867
- category: "Marketing",
1868
- tags: ["pricing", "comparison", "table", "features", "plans"],
1838
+ "typewriter-text": {
1839
+ slug: "typewriter-text",
1840
+ title: "Typewriter Text",
1841
+ description: "Text that types, pauses, and deletes itself in a looping typewriter effect.",
1842
+ category: "Motion",
1843
+ tags: ["typewriter", "text", "animation", "motion"],
1869
1844
  version: "1.0.0",
1870
1845
  updatedAt: "2026-05-17",
1871
1846
  changelog: ["Initial release"],
1872
1847
  status: "free",
1873
- difficulty: "intermediate",
1848
+ difficulty: "beginner",
1874
1849
  frameworks: ["nextjs", "react", "vite"],
1875
1850
  dependencies: [],
1876
- files: [{ path: "components/blocks/feature-comparison.tsx", type: "block" }],
1877
- tokens: ["foreground", "muted-foreground", "border", "surface-2"],
1851
+ files: [{ path: "components/blocks/typewriter-text.tsx", type: "block" }],
1852
+ tokens: ["foreground"],
1878
1853
  supportsDarkMode: true,
1879
- supportsLightMode: false,
1854
+ supportsLightMode: true,
1880
1855
  promptReady: true,
1881
1856
  },
1882
-
1883
- "team-grid": {
1884
- slug: "team-grid",
1885
- title: "Team Grid",
1886
- description: "Responsive grid of team member cards with avatars, roles, bios, and social links.",
1887
- category: "Display",
1888
- tags: ["team", "about", "members", "grid", "people"],
1857
+ "loading-card": {
1858
+ slug: "loading-card",
1859
+ title: "Loading Card",
1860
+ description: "Card skeleton with shimmer animation for loading states.",
1861
+ category: "Motion",
1862
+ tags: ["skeleton", "loading", "shimmer", "card"],
1889
1863
  version: "1.0.0",
1890
1864
  updatedAt: "2026-05-17",
1891
1865
  changelog: ["Initial release"],
1892
1866
  status: "free",
1893
1867
  difficulty: "beginner",
1894
1868
  frameworks: ["nextjs", "react", "vite"],
1895
- dependencies: ["lucide-react"],
1896
- files: [{ path: "components/blocks/team-grid.tsx", type: "block" }],
1897
- tokens: ["foreground", "muted-foreground", "border", "surface-2"],
1869
+ dependencies: [],
1870
+ files: [{ path: "components/blocks/loading-card.tsx", type: "block" }],
1871
+ tokens: ["surface-2", "surface-3"],
1898
1872
  supportsDarkMode: true,
1899
- supportsLightMode: false,
1873
+ supportsLightMode: true,
1900
1874
  promptReady: true,
1901
1875
  },
1902
-
1903
- "empty-state": {
1904
- slug: "empty-state",
1905
- title: "Empty State",
1906
- description: "Centered empty state with icon, title, description, and optional action.",
1907
- category: "Feedback",
1908
- tags: ["empty", "no-data", "placeholder", "state"],
1876
+ "loading-dots": {
1877
+ slug: "loading-dots",
1878
+ title: "Loading Dots",
1879
+ description: "Three dots that bounce sequentially as a loading indicator.",
1880
+ category: "Motion",
1881
+ tags: ["loader", "dots", "bouncing", "spinner"],
1909
1882
  version: "1.0.0",
1910
1883
  updatedAt: "2026-05-17",
1911
1884
  changelog: ["Initial release"],
1912
1885
  status: "free",
1913
1886
  difficulty: "beginner",
1914
1887
  frameworks: ["nextjs", "react", "vite"],
1915
- dependencies: ["lucide-react"],
1916
- files: [{ path: "components/blocks/empty-state.tsx", type: "block" }],
1917
- tokens: ["foreground", "muted-foreground", "border"],
1888
+ dependencies: [],
1889
+ files: [{ path: "components/blocks/loading-dots.tsx", type: "block" }],
1890
+ tokens: ["foreground"],
1918
1891
  supportsDarkMode: true,
1919
- supportsLightMode: false,
1892
+ supportsLightMode: true,
1920
1893
  promptReady: true,
1921
1894
  },
1922
-
1923
- "error-page": {
1924
- slug: "error-page",
1925
- title: "Error Page",
1926
- description: "Minimal full-page error display (404/500) with code, title, and back button.",
1927
- category: "Feedback",
1928
- tags: ["error", "404", "500", "not-found", "page"],
1895
+ "progress-ring": {
1896
+ slug: "progress-ring",
1897
+ title: "Progress Ring",
1898
+ description: "SVG circular progress ring with animated fill and percentage label.",
1899
+ category: "Motion",
1900
+ tags: ["progress", "ring", "circular", "animation"],
1929
1901
  version: "1.0.0",
1930
1902
  updatedAt: "2026-05-17",
1931
1903
  changelog: ["Initial release"],
@@ -1933,33 +1905,810 @@ export const manifests: Record<string, BlockManifest> = {
1933
1905
  difficulty: "beginner",
1934
1906
  frameworks: ["nextjs", "react", "vite"],
1935
1907
  dependencies: [],
1936
- files: [{ path: "components/blocks/error-page.tsx", type: "block" }],
1908
+ files: [{ path: "components/blocks/progress-ring.tsx", type: "block" }],
1909
+ tokens: ["foreground", "surface-3"],
1910
+ supportsDarkMode: true,
1911
+ supportsLightMode: true,
1912
+ promptReady: true,
1913
+ },
1914
+ "skeleton-feed": {
1915
+ slug: "skeleton-feed",
1916
+ title: "Skeleton Feed",
1917
+ description: "Feed-style skeleton rows with avatar and text shimmer placeholders.",
1918
+ category: "Motion",
1919
+ tags: ["skeleton", "feed", "loading", "shimmer"],
1920
+ version: "1.0.0",
1921
+ updatedAt: "2026-05-17",
1922
+ changelog: ["Initial release"],
1923
+ status: "pro",
1924
+ difficulty: "beginner",
1925
+ frameworks: ["nextjs", "react", "vite"],
1926
+ dependencies: [],
1927
+ files: [{ path: "components/blocks/skeleton-feed.tsx", type: "block" }],
1928
+ tokens: ["surface-2", "surface-3"],
1929
+ supportsDarkMode: true,
1930
+ supportsLightMode: true,
1931
+ promptReady: true,
1932
+ },
1933
+ "skeleton-table": {
1934
+ slug: "skeleton-table",
1935
+ title: "Skeleton Table",
1936
+ description: "Table skeleton with header and row shimmer placeholders.",
1937
+ category: "Motion",
1938
+ tags: ["skeleton", "table", "loading", "shimmer"],
1939
+ version: "1.0.0",
1940
+ updatedAt: "2026-05-17",
1941
+ changelog: ["Initial release"],
1942
+ status: "pro",
1943
+ difficulty: "beginner",
1944
+ frameworks: ["nextjs", "react", "vite"],
1945
+ dependencies: [],
1946
+ files: [{ path: "components/blocks/skeleton-table.tsx", type: "block" }],
1947
+ tokens: ["surface-2", "surface-3"],
1948
+ supportsDarkMode: true,
1949
+ supportsLightMode: true,
1950
+ promptReady: true,
1951
+ },
1952
+ "blur-reveal": {
1953
+ slug: "blur-reveal",
1954
+ title: "Blur Reveal",
1955
+ description: "Content that blurs in with fade when it enters the viewport.",
1956
+ category: "Motion",
1957
+ tags: ["reveal", "blur", "scroll", "animation"],
1958
+ version: "1.0.0",
1959
+ updatedAt: "2026-05-17",
1960
+ changelog: ["Initial release"],
1961
+ status: "pro",
1962
+ difficulty: "intermediate",
1963
+ frameworks: ["nextjs", "react", "vite"],
1964
+ dependencies: [],
1965
+ files: [{ path: "components/blocks/blur-reveal.tsx", type: "block" }],
1937
1966
  tokens: ["foreground", "muted-foreground"],
1938
1967
  supportsDarkMode: true,
1939
- supportsLightMode: false,
1968
+ supportsLightMode: true,
1940
1969
  promptReady: true,
1941
1970
  },
1942
-
1943
- "cookie-consent": {
1944
- slug: "cookie-consent",
1945
- title: "Cookie Consent",
1946
- description: "GDPR-compliant fixed-bottom cookie consent banner with accept/decline/customize actions.",
1947
- category: "UI",
1948
- tags: ["cookie", "gdpr", "consent", "privacy", "banner"],
1971
+ "stagger-reveal": {
1972
+ slug: "stagger-reveal",
1973
+ title: "Stagger Reveal",
1974
+ description: "List items that slide in one by one with staggered delay on scroll.",
1975
+ category: "Motion",
1976
+ tags: ["reveal", "stagger", "scroll", "animation"],
1949
1977
  version: "1.0.0",
1950
1978
  updatedAt: "2026-05-17",
1951
1979
  changelog: ["Initial release"],
1952
- status: "free",
1980
+ status: "pro",
1981
+ difficulty: "intermediate",
1982
+ frameworks: ["nextjs", "react", "vite"],
1983
+ dependencies: [],
1984
+ files: [{ path: "components/blocks/stagger-reveal.tsx", type: "block" }],
1985
+ tokens: ["foreground", "surface-2", "border"],
1986
+ supportsDarkMode: true,
1987
+ supportsLightMode: true,
1988
+ promptReady: true,
1989
+ },
1990
+ "scroll-reveal": {
1991
+ slug: "scroll-reveal",
1992
+ title: "Scroll Reveal",
1993
+ description: "Elements that fade and slide up when they enter the viewport.",
1994
+ category: "Motion",
1995
+ tags: ["reveal", "scroll", "fade", "animation"],
1996
+ version: "1.0.0",
1997
+ updatedAt: "2026-05-17",
1998
+ changelog: ["Initial release"],
1999
+ status: "pro",
2000
+ difficulty: "intermediate",
2001
+ frameworks: ["nextjs", "react", "vite"],
2002
+ dependencies: [],
2003
+ files: [{ path: "components/blocks/scroll-reveal.tsx", type: "block" }],
2004
+ tokens: ["foreground", "muted-foreground"],
2005
+ supportsDarkMode: true,
2006
+ supportsLightMode: true,
2007
+ promptReady: true,
2008
+ },
2009
+ "number-flow": {
2010
+ slug: "number-flow",
2011
+ title: "Number Flow",
2012
+ description: "Numbers that animate digit-by-digit when their value changes.",
2013
+ category: "Motion",
2014
+ tags: ["number", "counter", "animation", "motion"],
2015
+ version: "1.0.0",
2016
+ updatedAt: "2026-05-17",
2017
+ changelog: ["Initial release"],
2018
+ status: "pro",
2019
+ difficulty: "intermediate",
2020
+ frameworks: ["nextjs", "react", "vite"],
2021
+ dependencies: [],
2022
+ files: [{ path: "components/blocks/number-flow.tsx", type: "block" }],
2023
+ tokens: ["foreground", "muted-foreground"],
2024
+ supportsDarkMode: true,
2025
+ supportsLightMode: true,
2026
+ promptReady: true,
2027
+ },
2028
+ "shimmer-overlay": {
2029
+ slug: "shimmer-overlay",
2030
+ title: "Shimmer Overlay",
2031
+ description: "Shimmer highlight that sweeps across any content as a loading overlay.",
2032
+ category: "Motion",
2033
+ tags: ["shimmer", "overlay", "loading", "animation"],
2034
+ version: "1.0.0",
2035
+ updatedAt: "2026-05-17",
2036
+ changelog: ["Initial release"],
2037
+ status: "pro",
1953
2038
  difficulty: "beginner",
1954
2039
  frameworks: ["nextjs", "react", "vite"],
1955
2040
  dependencies: [],
1956
- files: [{ path: "components/blocks/cookie-consent.tsx", type: "block" }],
1957
- tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2041
+ files: [{ path: "components/blocks/shimmer-overlay.tsx", type: "block" }],
2042
+ tokens: ["surface-2", "surface-3", "border"],
1958
2043
  supportsDarkMode: true,
1959
- supportsLightMode: false,
2044
+ supportsLightMode: true,
1960
2045
  promptReady: true,
1961
2046
  },
1962
-
2047
+ "morphing-loader": {
2048
+ slug: "morphing-loader",
2049
+ title: "Morphing Loader",
2050
+ description: "A shape that continuously morphs its border-radius in a fluid loop.",
2051
+ category: "Motion",
2052
+ tags: ["loader", "morph", "shape", "animation"],
2053
+ version: "1.0.0",
2054
+ updatedAt: "2026-05-17",
2055
+ changelog: ["Initial release"],
2056
+ status: "pro",
2057
+ difficulty: "beginner",
2058
+ frameworks: ["nextjs", "react", "vite"],
2059
+ dependencies: [],
2060
+ files: [{ path: "components/blocks/morphing-loader.tsx", type: "block" }],
2061
+ tokens: ["foreground"],
2062
+ supportsDarkMode: true,
2063
+ supportsLightMode: true,
2064
+ promptReady: true,
2065
+ },
2066
+ "text-scramble": {
2067
+ slug: "text-scramble",
2068
+ title: "Text Scramble",
2069
+ description: "Text that scrambles through random characters before resolving to the final string.",
2070
+ category: "Motion",
2071
+ tags: ["text", "scramble", "animation", "motion"],
2072
+ version: "1.0.0",
2073
+ updatedAt: "2026-05-17",
2074
+ changelog: ["Initial release"],
2075
+ status: "pro",
2076
+ difficulty: "intermediate",
2077
+ frameworks: ["nextjs", "react", "vite"],
2078
+ dependencies: [],
2079
+ files: [{ path: "components/blocks/text-scramble.tsx", type: "block" }],
2080
+ tokens: ["foreground", "muted-foreground"],
2081
+ supportsDarkMode: true,
2082
+ supportsLightMode: true,
2083
+ promptReady: true,
2084
+ },
2085
+
2086
+ // ─── New Core Components ──────────────────────────────────────────────────
2087
+
2088
+ "phone-input": {
2089
+ slug: "phone-input",
2090
+ title: "Phone Input",
2091
+ description: "International phone number input with searchable country code selector and flag emoji. Supports 50+ countries.",
2092
+ category: "Forms",
2093
+ tags: ["phone", "input", "country", "international", "form"],
2094
+ version: "1.0.0",
2095
+ updatedAt: "2026-05-26",
2096
+ changelog: ["Initial release"],
2097
+ status: "pro",
2098
+ difficulty: "beginner",
2099
+ frameworks: ["nextjs", "react", "vite"],
2100
+ dependencies: ["lucide-react"],
2101
+ files: [{ path: "components/core/phone-input.tsx", type: "registry:ui" }],
2102
+ tokens: ["border", "border-strong", "surface-2", "surface-3", "foreground", "muted-foreground", "input", "background"],
2103
+ supportsDarkMode: true,
2104
+ supportsLightMode: true,
2105
+ promptReady: true,
2106
+ },
2107
+ "color-picker": {
2108
+ slug: "color-picker",
2109
+ title: "Color Picker",
2110
+ description: "Popover color picker with 24-color swatch grid and hex input. Controlled and uncontrolled modes.",
2111
+ category: "Forms",
2112
+ tags: ["color", "picker", "swatch", "hex", "form"],
2113
+ version: "1.0.0",
2114
+ updatedAt: "2026-05-26",
2115
+ changelog: ["Initial release"],
2116
+ status: "pro",
2117
+ difficulty: "beginner",
2118
+ frameworks: ["nextjs", "react", "vite"],
2119
+ dependencies: ["lucide-react"],
2120
+ files: [{ path: "components/core/color-picker.tsx", type: "registry:ui" }],
2121
+ tokens: ["border", "border-strong", "surface-2", "input", "foreground", "muted-foreground"],
2122
+ supportsDarkMode: true,
2123
+ supportsLightMode: true,
2124
+ promptReady: true,
2125
+ },
2126
+ "file-tree": {
2127
+ slug: "file-tree",
2128
+ title: "File Tree",
2129
+ description: "Hierarchical file and folder tree with expand/collapse, infinite nesting, auto extension icons, and selection state.",
2130
+ category: "Data",
2131
+ tags: ["file", "tree", "folder", "explorer", "hierarchy"],
2132
+ version: "1.0.0",
2133
+ updatedAt: "2026-05-26",
2134
+ changelog: ["Initial release"],
2135
+ status: "pro",
2136
+ difficulty: "beginner",
2137
+ frameworks: ["nextjs", "react", "vite"],
2138
+ dependencies: ["lucide-react"],
2139
+ files: [{ path: "components/core/file-tree.tsx", type: "registry:ui" }],
2140
+ tokens: ["surface-2", "foreground", "muted-foreground", "border-strong"],
2141
+ supportsDarkMode: true,
2142
+ supportsLightMode: true,
2143
+ promptReady: true,
2144
+ },
2145
+
2146
+ // ─── Marketing ────────────────────────────────────────────────────────────
2147
+
2148
+ "announcement-bar": {
2149
+ slug: "announcement-bar",
2150
+ title: "Announcement Bar",
2151
+ description: "Site-wide dismissible notification banner for announcements, promotions, and alerts.",
2152
+ category: "Marketing",
2153
+ tags: ["announcement", "banner", "notification", "marketing"],
2154
+ version: "1.0.0",
2155
+ updatedAt: "2026-05-30",
2156
+ changelog: ["Initial release"],
2157
+ status: "free",
2158
+ difficulty: "beginner",
2159
+ frameworks: ["nextjs", "react", "vite"],
2160
+ dependencies: ["lucide-react"],
2161
+ files: [{ path: "components/blocks/announcement-bar.tsx", type: "block" }],
2162
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2163
+ supportsDarkMode: true,
2164
+ supportsLightMode: true,
2165
+ promptReady: true,
2166
+ },
2167
+ "cta-banner": {
2168
+ slug: "cta-banner",
2169
+ title: "CTA Banner",
2170
+ description: "Full-width call-to-action banner with headline, description, and primary/secondary action buttons.",
2171
+ category: "Marketing",
2172
+ tags: ["cta", "banner", "marketing", "landing"],
2173
+ version: "1.0.0",
2174
+ updatedAt: "2026-05-30",
2175
+ changelog: ["Initial release"],
2176
+ status: "free",
2177
+ difficulty: "beginner",
2178
+ frameworks: ["nextjs", "react", "vite"],
2179
+ dependencies: [],
2180
+ files: [{ path: "components/blocks/cta-banner.tsx", type: "block" }],
2181
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2182
+ supportsDarkMode: true,
2183
+ supportsLightMode: true,
2184
+ promptReady: true,
2185
+ },
2186
+ "faq-accordion": {
2187
+ slug: "faq-accordion",
2188
+ title: "FAQ Accordion",
2189
+ description: "Animated expand/collapse FAQ list with plus/minus icons and optional section heading.",
2190
+ category: "Marketing",
2191
+ tags: ["faq", "accordion", "marketing", "landing"],
2192
+ version: "1.0.0",
2193
+ updatedAt: "2026-05-30",
2194
+ changelog: ["Initial release"],
2195
+ status: "free",
2196
+ difficulty: "beginner",
2197
+ frameworks: ["nextjs", "react", "vite"],
2198
+ dependencies: ["lucide-react"],
2199
+ files: [{ path: "components/blocks/faq-accordion.tsx", type: "block" }],
2200
+ tokens: ["foreground", "muted-foreground", "border"],
2201
+ supportsDarkMode: true,
2202
+ supportsLightMode: true,
2203
+ promptReady: true,
2204
+ },
2205
+ "feature-comparison": {
2206
+ slug: "feature-comparison",
2207
+ title: "Feature Comparison",
2208
+ description: "Side-by-side plan comparison table with check/cross feature rows and highlighted recommended tier.",
2209
+ category: "Marketing",
2210
+ tags: ["pricing", "comparison", "table", "marketing"],
2211
+ version: "1.0.0",
2212
+ updatedAt: "2026-05-30",
2213
+ changelog: ["Initial release"],
2214
+ status: "free",
2215
+ difficulty: "beginner",
2216
+ frameworks: ["nextjs", "react", "vite"],
2217
+ dependencies: [],
2218
+ files: [{ path: "components/blocks/feature-comparison.tsx", type: "block" }],
2219
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2220
+ supportsDarkMode: true,
2221
+ supportsLightMode: true,
2222
+ promptReady: true,
2223
+ },
2224
+ "social-proof-bar": {
2225
+ slug: "social-proof-bar",
2226
+ title: "Social Proof Bar",
2227
+ description: "Logo strip with star rating, user count, and trusted-by label for landing page credibility.",
2228
+ category: "Marketing",
2229
+ tags: ["social-proof", "logos", "trust", "marketing"],
2230
+ version: "1.0.0",
2231
+ updatedAt: "2026-05-30",
2232
+ changelog: ["Initial release"],
2233
+ status: "free",
2234
+ difficulty: "beginner",
2235
+ frameworks: ["nextjs", "react", "vite"],
2236
+ dependencies: [],
2237
+ files: [{ path: "components/blocks/social-proof-bar.tsx", type: "block" }],
2238
+ tokens: ["foreground", "muted-foreground", "border"],
2239
+ supportsDarkMode: true,
2240
+ supportsLightMode: true,
2241
+ promptReady: true,
2242
+ },
2243
+ "team-grid": {
2244
+ slug: "team-grid",
2245
+ title: "Team Grid",
2246
+ description: "Responsive team member card grid with avatar, name, role, bio, and social links.",
2247
+ category: "Marketing",
2248
+ tags: ["team", "grid", "about", "marketing"],
2249
+ version: "1.0.0",
2250
+ updatedAt: "2026-05-30",
2251
+ changelog: ["Initial release"],
2252
+ status: "free",
2253
+ difficulty: "beginner",
2254
+ frameworks: ["nextjs", "react", "vite"],
2255
+ dependencies: ["lucide-react"],
2256
+ files: [{ path: "components/blocks/team-grid.tsx", type: "block" }],
2257
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2258
+ supportsDarkMode: true,
2259
+ supportsLightMode: true,
2260
+ promptReady: true,
2261
+ },
2262
+ "testimonials-wall": {
2263
+ slug: "testimonials-wall",
2264
+ title: "Testimonials Wall",
2265
+ description: "Masonry-style testimonial quote wall with avatar, name, role, and star rating.",
2266
+ category: "Marketing",
2267
+ tags: ["testimonials", "reviews", "social-proof", "marketing"],
2268
+ version: "1.0.0",
2269
+ updatedAt: "2026-05-30",
2270
+ changelog: ["Initial release"],
2271
+ status: "free",
2272
+ difficulty: "beginner",
2273
+ frameworks: ["nextjs", "react", "vite"],
2274
+ dependencies: [],
2275
+ files: [{ path: "components/blocks/testimonials-wall.tsx", type: "block" }],
2276
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2277
+ supportsDarkMode: true,
2278
+ supportsLightMode: true,
2279
+ promptReady: true,
2280
+ },
2281
+ "waitlist-section": {
2282
+ slug: "waitlist-section",
2283
+ title: "Waitlist Section",
2284
+ description: "Email capture section for product launches with social proof count and submit feedback.",
2285
+ category: "Marketing",
2286
+ tags: ["waitlist", "email", "launch", "marketing"],
2287
+ version: "1.0.0",
2288
+ updatedAt: "2026-05-30",
2289
+ changelog: ["Initial release"],
2290
+ status: "free",
2291
+ difficulty: "beginner",
2292
+ frameworks: ["nextjs", "react", "vite"],
2293
+ dependencies: [],
2294
+ files: [{ path: "components/blocks/waitlist-section.tsx", type: "block" }],
2295
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2296
+ supportsDarkMode: true,
2297
+ supportsLightMode: true,
2298
+ promptReady: true,
2299
+ },
2300
+
2301
+ // ─── Display ─────────────────────────────────────────────────────────────
2302
+
2303
+ "changelog-feed": {
2304
+ slug: "changelog-feed",
2305
+ title: "Changelog Feed",
2306
+ description: "Vertical timeline changelog with versioned entries, date, tag badges, and feature descriptions.",
2307
+ category: "Display",
2308
+ tags: ["changelog", "timeline", "updates", "content"],
2309
+ version: "1.0.0",
2310
+ updatedAt: "2026-05-30",
2311
+ changelog: ["Initial release"],
2312
+ status: "free",
2313
+ difficulty: "beginner",
2314
+ frameworks: ["nextjs", "react", "vite"],
2315
+ dependencies: [],
2316
+ files: [{ path: "components/blocks/changelog-feed.tsx", type: "block" }],
2317
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2318
+ supportsDarkMode: true,
2319
+ supportsLightMode: true,
2320
+ promptReady: true,
2321
+ },
2322
+ "gradient-text": {
2323
+ slug: "gradient-text",
2324
+ title: "Gradient Text",
2325
+ description: "Text with a configurable CSS gradient fill. Supports any heading level and direction.",
2326
+ category: "Display",
2327
+ tags: ["gradient", "text", "typography", "animation"],
2328
+ version: "1.0.0",
2329
+ updatedAt: "2026-05-30",
2330
+ changelog: ["Initial release"],
2331
+ status: "free",
2332
+ difficulty: "beginner",
2333
+ frameworks: ["nextjs", "react", "vite"],
2334
+ dependencies: [],
2335
+ files: [{ path: "components/blocks/gradient-text.tsx", type: "block" }],
2336
+ tokens: ["foreground"],
2337
+ supportsDarkMode: true,
2338
+ supportsLightMode: true,
2339
+ promptReady: true,
2340
+ },
2341
+ "metrics-grid": {
2342
+ slug: "metrics-grid",
2343
+ title: "Metrics Grid",
2344
+ description: "KPI card grid with value, label, trend direction, and percentage change indicator.",
2345
+ category: "Display",
2346
+ tags: ["metrics", "kpi", "dashboard", "stats"],
2347
+ version: "1.0.0",
2348
+ updatedAt: "2026-05-30",
2349
+ changelog: ["Initial release"],
2350
+ status: "free",
2351
+ difficulty: "beginner",
2352
+ frameworks: ["nextjs", "react", "vite"],
2353
+ dependencies: ["lucide-react"],
2354
+ files: [{ path: "components/blocks/metrics-grid.tsx", type: "block" }],
2355
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2356
+ supportsDarkMode: true,
2357
+ supportsLightMode: true,
2358
+ promptReady: true,
2359
+ },
2360
+
2361
+ // ─── App ─────────────────────────────────────────────────────────────────
2362
+
2363
+ "empty-state": {
2364
+ slug: "empty-state",
2365
+ title: "Empty State",
2366
+ description: "Centered empty-state block with icon, title, description, and optional action button.",
2367
+ category: "App",
2368
+ tags: ["empty", "state", "feedback", "placeholder"],
2369
+ version: "1.0.0",
2370
+ updatedAt: "2026-05-30",
2371
+ changelog: ["Initial release"],
2372
+ status: "free",
2373
+ difficulty: "beginner",
2374
+ frameworks: ["nextjs", "react", "vite"],
2375
+ dependencies: ["lucide-react"],
2376
+ files: [{ path: "components/blocks/empty-state.tsx", type: "block" }],
2377
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2378
+ supportsDarkMode: true,
2379
+ supportsLightMode: true,
2380
+ promptReady: true,
2381
+ },
2382
+ "error-page": {
2383
+ slug: "error-page",
2384
+ title: "Error Page",
2385
+ description: "Full-page error template for 404, 500, and other status codes with back/home navigation.",
2386
+ category: "App",
2387
+ tags: ["error", "404", "500", "page"],
2388
+ version: "1.0.0",
2389
+ updatedAt: "2026-05-30",
2390
+ changelog: ["Initial release"],
2391
+ status: "free",
2392
+ difficulty: "beginner",
2393
+ frameworks: ["nextjs", "react", "vite"],
2394
+ dependencies: [],
2395
+ files: [{ path: "components/blocks/error-page.tsx", type: "block" }],
2396
+ tokens: ["foreground", "muted-foreground", "border"],
2397
+ supportsDarkMode: true,
2398
+ supportsLightMode: true,
2399
+ promptReady: true,
2400
+ },
2401
+ "project-command-center": {
2402
+ slug: "project-command-center",
2403
+ title: "Project Command Center",
2404
+ description: "Dashboard overview widget showing project health, active tasks, team avatars, and deployment status.",
2405
+ category: "App",
2406
+ tags: ["project", "dashboard", "status", "overview"],
2407
+ version: "1.0.0",
2408
+ updatedAt: "2026-05-30",
2409
+ changelog: ["Initial release"],
2410
+ status: "pro",
2411
+ difficulty: "intermediate",
2412
+ frameworks: ["nextjs", "react"],
2413
+ dependencies: ["lucide-react"],
2414
+ files: [{ path: "components/blocks/project-command-center.tsx", type: "block" }],
2415
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2416
+ supportsDarkMode: true,
2417
+ supportsLightMode: true,
2418
+ promptReady: true,
2419
+ },
2420
+ "site-footer": {
2421
+ slug: "site-footer",
2422
+ title: "Site Footer",
2423
+ description: "Multi-column site footer with brand logo, navigation links, social icons, and copyright line.",
2424
+ category: "App",
2425
+ tags: ["footer", "layout", "navigation", "site"],
2426
+ version: "1.0.0",
2427
+ updatedAt: "2026-05-30",
2428
+ changelog: ["Initial release"],
2429
+ status: "free",
2430
+ difficulty: "beginner",
2431
+ frameworks: ["nextjs", "react", "vite"],
2432
+ dependencies: ["lucide-react"],
2433
+ files: [{ path: "components/blocks/site-footer.tsx", type: "block" }],
2434
+ tokens: ["foreground", "muted-foreground", "border"],
2435
+ supportsDarkMode: true,
2436
+ supportsLightMode: true,
2437
+ promptReady: true,
2438
+ },
2439
+
2440
+ // ─── Utility ─────────────────────────────────────────────────────────────
2441
+
2442
+ "cookie-consent": {
2443
+ slug: "cookie-consent",
2444
+ title: "Cookie Consent",
2445
+ description: "GDPR cookie consent banner with accept, decline, and customize options. Sticks to the bottom of the viewport.",
2446
+ category: "Utility",
2447
+ tags: ["cookie", "gdpr", "consent", "legal", "banner"],
2448
+ version: "1.0.0",
2449
+ updatedAt: "2026-05-30",
2450
+ changelog: ["Initial release"],
2451
+ status: "free",
2452
+ difficulty: "beginner",
2453
+ frameworks: ["nextjs", "react", "vite"],
2454
+ dependencies: [],
2455
+ files: [{ path: "components/blocks/cookie-consent.tsx", type: "block" }],
2456
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2457
+ supportsDarkMode: true,
2458
+ supportsLightMode: true,
2459
+ promptReady: true,
2460
+ },
2461
+
2462
+ // ─── Web-Only Promoted ───────────────────────────────────────────────────
2463
+
2464
+ "shortcut": {
2465
+ slug: "shortcut",
2466
+ title: "Shortcut",
2467
+ description: "Keyboard shortcut display. Renders key combos like cmd+k with platform-aware symbols.",
2468
+ category: "UI",
2469
+ tags: ["keyboard", "shortcut", "hotkey", "kbd"],
2470
+ version: "1.0.0",
2471
+ updatedAt: "2026-06-05",
2472
+ changelog: ["Initial release"],
2473
+ status: "pro",
2474
+ difficulty: "beginner",
2475
+ frameworks: ["nextjs", "react", "vite"],
2476
+ dependencies: [],
2477
+ files: [{ path: "components/core/shortcut.tsx", type: "block" }],
2478
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2479
+ supportsDarkMode: true,
2480
+ supportsLightMode: true,
2481
+ promptReady: true,
2482
+ },
2483
+ "rating": {
2484
+ slug: "rating",
2485
+ title: "Rating",
2486
+ description: "Interactive star rating with hover, controlled and uncontrolled modes, and readonly display.",
2487
+ category: "UI",
2488
+ tags: ["rating", "stars", "review", "feedback"],
2489
+ version: "1.0.0",
2490
+ updatedAt: "2026-06-05",
2491
+ changelog: ["Initial release"],
2492
+ status: "pro",
2493
+ difficulty: "beginner",
2494
+ frameworks: ["nextjs", "react", "vite"],
2495
+ dependencies: ["lucide-react"],
2496
+ files: [{ path: "components/core/rating.tsx", type: "block" }],
2497
+ tokens: ["foreground", "muted-foreground"],
2498
+ supportsDarkMode: true,
2499
+ supportsLightMode: true,
2500
+ promptReady: true,
2501
+ },
2502
+ "number-input": {
2503
+ slug: "number-input",
2504
+ title: "Number Input",
2505
+ description: "Numeric input with custom stepper buttons, min/max/step clamping, and bare mode for InputGroup.",
2506
+ category: "UI",
2507
+ tags: ["number", "input", "form", "stepper"],
2508
+ version: "1.0.0",
2509
+ updatedAt: "2026-06-05",
2510
+ changelog: ["Initial release"],
2511
+ status: "pro",
2512
+ difficulty: "beginner",
2513
+ frameworks: ["nextjs", "react", "vite"],
2514
+ dependencies: ["lucide-react"],
2515
+ files: [{ path: "components/core/number-input.tsx", type: "block" }],
2516
+ tokens: ["foreground", "muted-foreground", "border", "surface-2", "surface-3"],
2517
+ supportsDarkMode: true,
2518
+ supportsLightMode: true,
2519
+ promptReady: true,
2520
+ },
2521
+ "reading-progress": {
2522
+ slug: "reading-progress",
2523
+ title: "Reading Progress",
2524
+ description: "Fixed-top scroll progress indicator. Tracks reading or page scroll position.",
2525
+ category: "UI",
2526
+ tags: ["progress", "scroll", "reading", "indicator"],
2527
+ version: "1.0.0",
2528
+ updatedAt: "2026-06-05",
2529
+ changelog: ["Initial release"],
2530
+ status: "pro",
2531
+ difficulty: "beginner",
2532
+ frameworks: ["nextjs", "react", "vite"],
2533
+ dependencies: [],
2534
+ files: [{ path: "components/core/reading-progress.tsx", type: "block" }],
2535
+ tokens: ["foreground"],
2536
+ supportsDarkMode: true,
2537
+ supportsLightMode: true,
2538
+ promptReady: true,
2539
+ },
2540
+ "segmented-control": {
2541
+ slug: "segmented-control",
2542
+ title: "Segmented Control",
2543
+ description: "Sliding pill selector for mutually exclusive options. Smoother than tabs for compact view switching.",
2544
+ category: "UI",
2545
+ tags: ["segmented", "control", "tabs", "toggle", "selector"],
2546
+ version: "1.0.0",
2547
+ updatedAt: "2026-06-05",
2548
+ changelog: ["Initial release"],
2549
+ status: "pro",
2550
+ difficulty: "beginner",
2551
+ frameworks: ["nextjs", "react", "vite"],
2552
+ dependencies: [],
2553
+ files: [{ path: "components/core/segmented-control.tsx", type: "block" }],
2554
+ tokens: ["foreground", "muted-foreground", "border", "surface-2", "background"],
2555
+ supportsDarkMode: true,
2556
+ supportsLightMode: true,
2557
+ promptReady: true,
2558
+ },
2559
+ "color-swatch": {
2560
+ slug: "color-swatch",
2561
+ title: "Color Swatch",
2562
+ description: "Clickable color swatch with copy-to-clipboard and tooltip. Includes a ColorPalette group component.",
2563
+ category: "UI",
2564
+ tags: ["color", "swatch", "palette", "design"],
2565
+ version: "1.0.0",
2566
+ updatedAt: "2026-06-05",
2567
+ changelog: ["Initial release"],
2568
+ status: "pro",
2569
+ difficulty: "beginner",
2570
+ frameworks: ["nextjs", "react", "vite"],
2571
+ dependencies: ["lucide-react"],
2572
+ files: [{ path: "components/core/color-swatch.tsx", type: "block" }],
2573
+ tokens: ["border"],
2574
+ supportsDarkMode: true,
2575
+ supportsLightMode: true,
2576
+ promptReady: true,
2577
+ },
2578
+ "file-card": {
2579
+ slug: "file-card",
2580
+ title: "File Card",
2581
+ description: "Compact file metadata card with type icon, size, upload progress, and status states.",
2582
+ category: "UI",
2583
+ tags: ["file", "upload", "card", "attachment"],
2584
+ version: "1.0.0",
2585
+ updatedAt: "2026-06-05",
2586
+ changelog: ["Initial release"],
2587
+ status: "pro",
2588
+ difficulty: "beginner",
2589
+ frameworks: ["nextjs", "react", "vite"],
2590
+ dependencies: ["lucide-react"],
2591
+ files: [{ path: "components/core/file-card.tsx", type: "block" }],
2592
+ tokens: ["foreground", "muted-foreground", "border", "surface-2", "surface-3"],
2593
+ supportsDarkMode: true,
2594
+ supportsLightMode: true,
2595
+ promptReady: true,
2596
+ },
2597
+ "copy-input": {
2598
+ slug: "copy-input",
2599
+ title: "Copy Input",
2600
+ description: "Read-only input with integrated copy-to-clipboard. Use for API keys, tokens, and webhook URLs.",
2601
+ category: "UI",
2602
+ tags: ["copy", "input", "api-key", "token", "clipboard", "readonly"],
2603
+ version: "1.0.0",
2604
+ updatedAt: "2026-06-05",
2605
+ changelog: ["Initial release"],
2606
+ status: "pro",
2607
+ difficulty: "beginner",
2608
+ frameworks: ["nextjs", "react", "vite"],
2609
+ dependencies: ["lucide-react"],
2610
+ files: [{ path: "components/core/copy-input.tsx", type: "block" }],
2611
+ tokens: ["foreground", "muted-foreground", "border", "border-strong"],
2612
+ supportsDarkMode: true,
2613
+ supportsLightMode: true,
2614
+ promptReady: true,
2615
+ },
2616
+ "json-viewer": {
2617
+ slug: "json-viewer",
2618
+ title: "JSON Viewer",
2619
+ description: "Collapsible JSON tree with monochrome value styling. For API responses, AI output, and debug panels.",
2620
+ category: "UI",
2621
+ tags: ["json", "viewer", "tree", "data", "debug", "api"],
2622
+ version: "1.0.0",
2623
+ updatedAt: "2026-06-05",
2624
+ changelog: ["Initial release"],
2625
+ status: "pro",
2626
+ difficulty: "beginner",
2627
+ frameworks: ["nextjs", "react", "vite"],
2628
+ dependencies: ["lucide-react"],
2629
+ files: [{ path: "components/core/json-viewer.tsx", type: "block" }],
2630
+ tokens: ["foreground", "muted-foreground", "border", "surface-2"],
2631
+ supportsDarkMode: true,
2632
+ supportsLightMode: true,
2633
+ promptReady: true,
2634
+ },
2635
+ "loading-bar": {
2636
+ slug: "loading-bar",
2637
+ title: "Loading Bar",
2638
+ description: "Top-of-page linear progress indicator. Indeterminate or determinate, with smooth completion animation.",
2639
+ category: "UI",
2640
+ tags: ["loading", "progress", "bar", "indicator", "async"],
2641
+ version: "1.0.0",
2642
+ updatedAt: "2026-06-05",
2643
+ changelog: ["Initial release"],
2644
+ status: "pro",
2645
+ difficulty: "beginner",
2646
+ frameworks: ["nextjs", "react", "vite"],
2647
+ dependencies: [],
2648
+ files: [{ path: "components/core/loading-bar.tsx", type: "block" }],
2649
+ tokens: ["foreground"],
2650
+ supportsDarkMode: true,
2651
+ supportsLightMode: true,
2652
+ promptReady: true,
2653
+ },
2654
+
2655
+ // ─── Complex Components 2026-06-05 ─────────────────────────────────────────
2656
+
2657
+ "mention-input": {
2658
+ slug: "mention-input", title: "Mention Input",
2659
+ description: "Textarea with @-triggered floating suggestion list. Keyboard navigable, optionally shows avatars.",
2660
+ category: "Forms", tags: ["input","mention","autocomplete","textarea","at"],
2661
+ version: "1.0.0", updatedAt: "2026-06-05", changelog: ["Initial release"],
2662
+ status: "pro", difficulty: "intermediate",
2663
+ frameworks: ["nextjs","react","vite"], dependencies: ["lucide-react"],
2664
+ files: [{ path: "components/core/mention-input.tsx", type: "registry:ui" }],
2665
+ tokens: ["border","border-strong","bg-input","bg-card","foreground","muted-foreground","surface-2"],
2666
+ supportsDarkMode: true, supportsLightMode: true, promptReady: true,
2667
+ },
2668
+ "filter-bar": {
2669
+ slug: "filter-bar", title: "Filter Bar",
2670
+ description: "Active filter pills with an add-filter popover. Supports text, select, and boolean filter types.",
2671
+ category: "Forms", tags: ["filter","chips","search","table","toolbar"],
2672
+ version: "1.0.0", updatedAt: "2026-06-05", changelog: ["Initial release"],
2673
+ status: "pro", difficulty: "intermediate",
2674
+ frameworks: ["nextjs","react","vite"], dependencies: ["lucide-react"],
2675
+ files: [{ path: "components/core/filter-bar.tsx", type: "registry:ui" }],
2676
+ tokens: ["border","border-strong","bg-surface-2","bg-surface-3","bg-card","foreground","muted-foreground"],
2677
+ supportsDarkMode: true, supportsLightMode: true, promptReady: true,
2678
+ },
2679
+ "key-value-editor": {
2680
+ slug: "key-value-editor", title: "Key Value Editor",
2681
+ description: "Editable key/value row table for env vars and config entries. Add, remove, enable/disable rows. Keyboard navigable.",
2682
+ category: "Forms", tags: ["key-value","env","config","table","editor","form"],
2683
+ version: "1.0.0", updatedAt: "2026-06-05", changelog: ["Initial release"],
2684
+ status: "pro", difficulty: "intermediate",
2685
+ frameworks: ["nextjs","react","vite"], dependencies: ["lucide-react"],
2686
+ files: [{ path: "components/core/key-value-editor.tsx", type: "registry:ui" }],
2687
+ tokens: ["border","border-strong","bg-input","bg-surface-2","bg-surface-3","foreground","muted-foreground"],
2688
+ supportsDarkMode: true, supportsLightMode: true, promptReady: true,
2689
+ },
2690
+ "transfer-list": {
2691
+ slug: "transfer-list", title: "Transfer List",
2692
+ description: "Two-column available/selected list with move-one, move-all, and optional per-column search.",
2693
+ category: "Forms", tags: ["transfer","list","multi-select","columns","form"],
2694
+ version: "1.0.0", updatedAt: "2026-06-05", changelog: ["Initial release"],
2695
+ status: "pro", difficulty: "intermediate",
2696
+ frameworks: ["nextjs","react","vite"], dependencies: ["lucide-react"],
2697
+ files: [{ path: "components/core/transfer-list.tsx", type: "registry:ui" }],
2698
+ tokens: ["border","bg-surface-2","bg-surface-3","bg-card","foreground","muted-foreground"],
2699
+ supportsDarkMode: true, supportsLightMode: true, promptReady: true,
2700
+ },
2701
+ "rich-radio-group": {
2702
+ slug: "rich-radio-group", title: "Rich Radio Group",
2703
+ description: "Radio options rendered as full-width cards with title, description, and icon slot. Vertical or horizontal layout.",
2704
+ category: "Forms", tags: ["radio","card","form","selection","options"],
2705
+ version: "1.0.0", updatedAt: "2026-06-05", changelog: ["Initial release"],
2706
+ status: "pro", difficulty: "beginner",
2707
+ frameworks: ["nextjs","react","vite"], dependencies: [],
2708
+ files: [{ path: "components/core/rich-radio-group.tsx", type: "registry:ui" }],
2709
+ tokens: ["border","border-strong","bg-surface-2","bg-transparent","foreground","muted-foreground"],
2710
+ supportsDarkMode: true, supportsLightMode: true, promptReady: true,
2711
+ },
1963
2712
  }
1964
2713
 
1965
2714
  export const blockList = Object.values(manifests)