@sonordev/agency-site-kit 0.3.0 → 0.4.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 (365) hide show
  1. package/README.md +302 -0
  2. package/bin/setup.mjs +79 -0
  3. package/dist/{chunk-RXBK2EOE.js → chunk-4IES23GV.js} +3 -3
  4. package/dist/{chunk-RXBK2EOE.js.map → chunk-4IES23GV.js.map} +1 -1
  5. package/dist/chunk-4N7ENJ7L.cjs +108 -0
  6. package/dist/chunk-4N7ENJ7L.cjs.map +1 -0
  7. package/dist/{chunk-WNR4KNG4.cjs → chunk-5MEZU3OG.cjs} +4 -4
  8. package/dist/{chunk-WNR4KNG4.cjs.map → chunk-5MEZU3OG.cjs.map} +1 -1
  9. package/dist/chunk-7ZHRMWJU.cjs +306 -0
  10. package/dist/chunk-7ZHRMWJU.cjs.map +1 -0
  11. package/dist/chunk-CVT7I5BQ.js +71 -0
  12. package/dist/chunk-CVT7I5BQ.js.map +1 -0
  13. package/dist/chunk-HQGAX2LI.cjs +8 -0
  14. package/dist/chunk-HQGAX2LI.cjs.map +1 -0
  15. package/dist/chunk-KXLROAO5.js +291 -0
  16. package/dist/chunk-KXLROAO5.js.map +1 -0
  17. package/dist/chunk-L4EOQVRJ.js +6 -0
  18. package/dist/chunk-L4EOQVRJ.js.map +1 -0
  19. package/dist/chunk-L7E3UHQC.cjs +535 -0
  20. package/dist/chunk-L7E3UHQC.cjs.map +1 -0
  21. package/dist/chunk-NI4FVCLS.cjs +32 -0
  22. package/dist/chunk-NI4FVCLS.cjs.map +1 -0
  23. package/dist/chunk-NIZJLONK.js +106 -0
  24. package/dist/chunk-NIZJLONK.js.map +1 -0
  25. package/dist/chunk-QDXZ27R7.js +33 -0
  26. package/dist/chunk-QDXZ27R7.js.map +1 -0
  27. package/dist/{chunk-TVFXN6W6.js → chunk-QL6KVIFR.js} +8 -4
  28. package/dist/chunk-QL6KVIFR.js.map +1 -0
  29. package/dist/chunk-UNTOEWQL.js +504 -0
  30. package/dist/chunk-UNTOEWQL.js.map +1 -0
  31. package/dist/chunk-XJ434N7I.js +30 -0
  32. package/dist/chunk-XJ434N7I.js.map +1 -0
  33. package/dist/chunk-XLK77USA.js +45 -0
  34. package/dist/chunk-XLK77USA.js.map +1 -0
  35. package/dist/{chunk-EE75WRCM.cjs → chunk-XOWSXZYW.cjs} +8 -4
  36. package/dist/chunk-XOWSXZYW.cjs.map +1 -0
  37. package/dist/chunk-ZINKVJQU.js +67 -0
  38. package/dist/chunk-ZINKVJQU.js.map +1 -0
  39. package/dist/index.cjs +29 -30
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +17 -9
  42. package/dist/index.d.ts +17 -9
  43. package/dist/index.js +7 -8
  44. package/dist/index.js.map +1 -1
  45. package/dist/layout/index.cjs +3 -3
  46. package/dist/layout/index.d.cts +1 -1
  47. package/dist/layout/index.d.ts +1 -1
  48. package/dist/layout/index.js +2 -2
  49. package/dist/portfolio/client.cjs +342 -12
  50. package/dist/portfolio/client.cjs.map +1 -1
  51. package/dist/portfolio/client.d.cts +11 -88
  52. package/dist/portfolio/client.d.ts +11 -88
  53. package/dist/portfolio/client.js +150 -4
  54. package/dist/portfolio/client.js.map +1 -1
  55. package/dist/portfolio/components/PortfolioAnalytics.cjs +87 -0
  56. package/dist/portfolio/components/PortfolioAnalytics.cjs.map +1 -0
  57. package/dist/portfolio/components/PortfolioAnalytics.d.cts +5 -0
  58. package/dist/portfolio/components/PortfolioAnalytics.d.ts +5 -0
  59. package/dist/portfolio/components/PortfolioAnalytics.js +9 -0
  60. package/dist/portfolio/components/PortfolioAnalytics.js.map +1 -0
  61. package/dist/portfolio/components/PortfolioErrorFallback.cjs +65 -0
  62. package/dist/portfolio/components/PortfolioErrorFallback.cjs.map +1 -0
  63. package/dist/portfolio/components/PortfolioErrorFallback.d.cts +22 -0
  64. package/dist/portfolio/components/PortfolioErrorFallback.d.ts +22 -0
  65. package/dist/portfolio/components/PortfolioErrorFallback.js +9 -0
  66. package/dist/portfolio/components/PortfolioErrorFallback.js.map +1 -0
  67. package/dist/portfolio/components/PortfolioLeadCTA.cjs +91 -0
  68. package/dist/portfolio/components/PortfolioLeadCTA.cjs.map +1 -0
  69. package/dist/portfolio/components/PortfolioLeadCTA.d.cts +34 -0
  70. package/dist/portfolio/components/PortfolioLeadCTA.d.ts +34 -0
  71. package/dist/portfolio/components/PortfolioLeadCTA.js +9 -0
  72. package/dist/portfolio/components/PortfolioLeadCTA.js.map +1 -0
  73. package/dist/portfolio/index.cjs +19 -19
  74. package/dist/portfolio/index.d.cts +133 -7
  75. package/dist/portfolio/index.d.ts +133 -7
  76. package/dist/portfolio/index.js +6 -6
  77. package/dist/portfolio/primitives/AnimatedCounter.cjs +88 -0
  78. package/dist/portfolio/primitives/AnimatedCounter.cjs.map +1 -0
  79. package/dist/portfolio/primitives/AnimatedCounter.d.cts +22 -0
  80. package/dist/portfolio/primitives/AnimatedCounter.d.ts +22 -0
  81. package/dist/portfolio/primitives/AnimatedCounter.js +68 -0
  82. package/dist/portfolio/primitives/AnimatedCounter.js.map +1 -0
  83. package/dist/portfolio/primitives/AnnotatedImage.cjs +320 -0
  84. package/dist/portfolio/primitives/AnnotatedImage.cjs.map +1 -0
  85. package/dist/portfolio/primitives/AnnotatedImage.d.cts +18 -0
  86. package/dist/portfolio/primitives/AnnotatedImage.d.ts +18 -0
  87. package/dist/portfolio/primitives/AnnotatedImage.js +264 -0
  88. package/dist/portfolio/primitives/AnnotatedImage.js.map +1 -0
  89. package/dist/portfolio/primitives/BeforeAfterSlider.cjs +348 -0
  90. package/dist/portfolio/primitives/BeforeAfterSlider.cjs.map +1 -0
  91. package/dist/portfolio/primitives/BeforeAfterSlider.d.cts +13 -0
  92. package/dist/portfolio/primitives/BeforeAfterSlider.d.ts +13 -0
  93. package/dist/portfolio/primitives/BeforeAfterSlider.js +292 -0
  94. package/dist/portfolio/primitives/BeforeAfterSlider.js.map +1 -0
  95. package/dist/portfolio/primitives/DeviceTrifolio.cjs +298 -0
  96. package/dist/portfolio/primitives/DeviceTrifolio.cjs.map +1 -0
  97. package/dist/portfolio/primitives/DeviceTrifolio.d.cts +14 -0
  98. package/dist/portfolio/primitives/DeviceTrifolio.d.ts +14 -0
  99. package/dist/portfolio/primitives/DeviceTrifolio.js +242 -0
  100. package/dist/portfolio/primitives/DeviceTrifolio.js.map +1 -0
  101. package/dist/portfolio/primitives/FrequencyBarSkeleton.cjs +88 -0
  102. package/dist/portfolio/primitives/FrequencyBarSkeleton.cjs.map +1 -0
  103. package/dist/portfolio/primitives/FrequencyBarSkeleton.d.cts +10 -0
  104. package/dist/portfolio/primitives/FrequencyBarSkeleton.d.ts +10 -0
  105. package/dist/portfolio/primitives/FrequencyBarSkeleton.js +68 -0
  106. package/dist/portfolio/primitives/FrequencyBarSkeleton.js.map +1 -0
  107. package/dist/portfolio/primitives/GlassCard.cjs +45 -0
  108. package/dist/portfolio/primitives/GlassCard.cjs.map +1 -0
  109. package/dist/portfolio/primitives/GlassCard.d.cts +11 -0
  110. package/dist/portfolio/primitives/GlassCard.d.ts +11 -0
  111. package/dist/portfolio/primitives/GlassCard.js +43 -0
  112. package/dist/portfolio/primitives/GlassCard.js.map +1 -0
  113. package/dist/portfolio/primitives/MetricBadge.cjs +74 -0
  114. package/dist/portfolio/primitives/MetricBadge.cjs.map +1 -0
  115. package/dist/portfolio/primitives/MetricBadge.d.cts +9 -0
  116. package/dist/portfolio/primitives/MetricBadge.d.ts +9 -0
  117. package/dist/portfolio/primitives/MetricBadge.js +54 -0
  118. package/dist/portfolio/primitives/MetricBadge.js.map +1 -0
  119. package/dist/portfolio/primitives/SVGChart.cjs +316 -0
  120. package/dist/portfolio/primitives/SVGChart.cjs.map +1 -0
  121. package/dist/portfolio/primitives/SVGChart.d.cts +18 -0
  122. package/dist/portfolio/primitives/SVGChart.d.ts +18 -0
  123. package/dist/portfolio/primitives/SVGChart.js +296 -0
  124. package/dist/portfolio/primitives/SVGChart.js.map +1 -0
  125. package/dist/portfolio/primitives/ScrollReveal.cjs +97 -0
  126. package/dist/portfolio/primitives/ScrollReveal.cjs.map +1 -0
  127. package/dist/portfolio/primitives/ScrollReveal.d.cts +27 -0
  128. package/dist/portfolio/primitives/ScrollReveal.d.ts +27 -0
  129. package/dist/portfolio/primitives/ScrollReveal.js +77 -0
  130. package/dist/portfolio/primitives/ScrollReveal.js.map +1 -0
  131. package/dist/portfolio/primitives/SplitHeadline.cjs +107 -0
  132. package/dist/portfolio/primitives/SplitHeadline.cjs.map +1 -0
  133. package/dist/portfolio/primitives/SplitHeadline.d.cts +24 -0
  134. package/dist/portfolio/primitives/SplitHeadline.d.ts +24 -0
  135. package/dist/portfolio/primitives/SplitHeadline.js +87 -0
  136. package/dist/portfolio/primitives/SplitHeadline.js.map +1 -0
  137. package/dist/portfolio/sections/BeforeAfterSection.cjs +271 -0
  138. package/dist/portfolio/sections/BeforeAfterSection.cjs.map +1 -0
  139. package/dist/portfolio/sections/BeforeAfterSection.d.cts +9 -0
  140. package/dist/portfolio/sections/BeforeAfterSection.d.ts +9 -0
  141. package/dist/{BeforeAfterSection-6BHFLY4Y.js → portfolio/sections/BeforeAfterSection.js} +66 -27
  142. package/dist/portfolio/sections/BeforeAfterSection.js.map +1 -0
  143. package/dist/portfolio/sections/CTASection.cjs +123 -0
  144. package/dist/portfolio/sections/CTASection.cjs.map +1 -0
  145. package/dist/portfolio/sections/CTASection.d.cts +9 -0
  146. package/dist/portfolio/sections/CTASection.d.ts +9 -0
  147. package/dist/portfolio/sections/CTASection.js +93 -0
  148. package/dist/portfolio/sections/CTASection.js.map +1 -0
  149. package/dist/{ChallengesSection-IZ3DHECS.cjs → portfolio/sections/ChallengesSection.cjs} +12 -6
  150. package/dist/portfolio/sections/ChallengesSection.cjs.map +1 -0
  151. package/dist/portfolio/sections/ChallengesSection.d.cts +9 -0
  152. package/dist/portfolio/sections/ChallengesSection.d.ts +9 -0
  153. package/dist/{ChallengesSection-GEQGVSJN.js → portfolio/sections/ChallengesSection.js} +5 -4
  154. package/dist/portfolio/sections/ChallengesSection.js.map +1 -0
  155. package/dist/portfolio/sections/ConversionFunnelSection.cjs +263 -0
  156. package/dist/portfolio/sections/ConversionFunnelSection.cjs.map +1 -0
  157. package/dist/portfolio/sections/ConversionFunnelSection.d.cts +9 -0
  158. package/dist/portfolio/sections/ConversionFunnelSection.d.ts +9 -0
  159. package/dist/{ConversionFunnelSection-D3GE4NKE.js → portfolio/sections/ConversionFunnelSection.js} +60 -56
  160. package/dist/portfolio/sections/ConversionFunnelSection.js.map +1 -0
  161. package/dist/{DesignSystemSection-KXIQXITF.cjs → portfolio/sections/DesignSystemSection.cjs} +13 -7
  162. package/dist/portfolio/sections/DesignSystemSection.cjs.map +1 -0
  163. package/dist/portfolio/sections/DesignSystemSection.d.cts +32 -0
  164. package/dist/portfolio/sections/DesignSystemSection.d.ts +32 -0
  165. package/dist/{DesignSystemSection-2R5BRBGO.js → portfolio/sections/DesignSystemSection.js} +5 -4
  166. package/dist/portfolio/sections/DesignSystemSection.js.map +1 -0
  167. package/dist/{DetailsSection-TTUZAPZZ.cjs → portfolio/sections/DetailsSection.cjs} +12 -6
  168. package/dist/portfolio/sections/DetailsSection.cjs.map +1 -0
  169. package/dist/portfolio/sections/DetailsSection.d.cts +9 -0
  170. package/dist/portfolio/sections/DetailsSection.d.ts +9 -0
  171. package/dist/{DetailsSection-A6PZQUQL.js → portfolio/sections/DetailsSection.js} +5 -4
  172. package/dist/portfolio/sections/DetailsSection.js.map +1 -0
  173. package/dist/portfolio/sections/FeatureSpotlightSection.cjs +267 -0
  174. package/dist/portfolio/sections/FeatureSpotlightSection.cjs.map +1 -0
  175. package/dist/portfolio/sections/FeatureSpotlightSection.d.cts +9 -0
  176. package/dist/portfolio/sections/FeatureSpotlightSection.d.ts +9 -0
  177. package/dist/{FeatureSpotlightSection-B7P3JGNL.js → portfolio/sections/FeatureSpotlightSection.js} +39 -33
  178. package/dist/portfolio/sections/FeatureSpotlightSection.js.map +1 -0
  179. package/dist/portfolio/sections/GallerySection.cjs +321 -0
  180. package/dist/portfolio/sections/GallerySection.cjs.map +1 -0
  181. package/dist/portfolio/sections/GallerySection.d.cts +9 -0
  182. package/dist/portfolio/sections/GallerySection.d.ts +9 -0
  183. package/dist/{GallerySection-VMKORC47.js → portfolio/sections/GallerySection.js} +65 -18
  184. package/dist/portfolio/sections/GallerySection.js.map +1 -0
  185. package/dist/portfolio/sections/HeroSection.cjs +180 -0
  186. package/dist/portfolio/sections/HeroSection.cjs.map +1 -0
  187. package/dist/portfolio/sections/HeroSection.d.cts +15 -0
  188. package/dist/portfolio/sections/HeroSection.d.ts +15 -0
  189. package/dist/portfolio/sections/HeroSection.js +171 -0
  190. package/dist/portfolio/sections/HeroSection.js.map +1 -0
  191. package/dist/{MetricsTimelineSection-4L6DUHJ5.cjs → portfolio/sections/MetricsTimelineSection.cjs} +102 -61
  192. package/dist/portfolio/sections/MetricsTimelineSection.cjs.map +1 -0
  193. package/dist/portfolio/sections/MetricsTimelineSection.d.cts +9 -0
  194. package/dist/portfolio/sections/MetricsTimelineSection.d.ts +9 -0
  195. package/dist/{MetricsTimelineSection-6BT5GNFV.js → portfolio/sections/MetricsTimelineSection.js} +45 -29
  196. package/dist/portfolio/sections/MetricsTimelineSection.js.map +1 -0
  197. package/dist/{PerformanceSection-24TVVFZA.cjs → portfolio/sections/PerformanceSection.cjs} +136 -93
  198. package/dist/portfolio/sections/PerformanceSection.cjs.map +1 -0
  199. package/dist/portfolio/sections/PerformanceSection.d.cts +22 -0
  200. package/dist/portfolio/sections/PerformanceSection.d.ts +22 -0
  201. package/dist/{PerformanceSection-MGCEIXDX.js → portfolio/sections/PerformanceSection.js} +58 -40
  202. package/dist/portfolio/sections/PerformanceSection.js.map +1 -0
  203. package/dist/{ResultsSection-XLGMMQKY.cjs → portfolio/sections/ResultsSection.cjs} +22 -10
  204. package/dist/portfolio/sections/ResultsSection.cjs.map +1 -0
  205. package/dist/portfolio/sections/ResultsSection.d.cts +13 -0
  206. package/dist/portfolio/sections/ResultsSection.d.ts +13 -0
  207. package/dist/{ResultsSection-DFUJ5U6M.js → portfolio/sections/ResultsSection.js} +13 -7
  208. package/dist/portfolio/sections/ResultsSection.js.map +1 -0
  209. package/dist/portfolio/sections/ServicesSection.cjs +129 -0
  210. package/dist/portfolio/sections/ServicesSection.cjs.map +1 -0
  211. package/dist/portfolio/sections/ServicesSection.d.cts +9 -0
  212. package/dist/portfolio/sections/ServicesSection.d.ts +9 -0
  213. package/dist/portfolio/sections/ServicesSection.js +122 -0
  214. package/dist/portfolio/sections/ServicesSection.js.map +1 -0
  215. package/dist/{SiteArchitectureSection-J7BPBERH.cjs → portfolio/sections/SiteArchitectureSection.cjs} +116 -92
  216. package/dist/portfolio/sections/SiteArchitectureSection.cjs.map +1 -0
  217. package/dist/portfolio/sections/SiteArchitectureSection.d.cts +21 -0
  218. package/dist/portfolio/sections/SiteArchitectureSection.d.ts +21 -0
  219. package/dist/{SiteArchitectureSection-TE22OAWV.js → portfolio/sections/SiteArchitectureSection.js} +46 -47
  220. package/dist/portfolio/sections/SiteArchitectureSection.js.map +1 -0
  221. package/dist/{SpeedComparisonSection-EZKFQVGW.cjs → portfolio/sections/SpeedComparisonSection.cjs} +12 -6
  222. package/dist/portfolio/sections/SpeedComparisonSection.cjs.map +1 -0
  223. package/dist/portfolio/sections/SpeedComparisonSection.d.cts +20 -0
  224. package/dist/portfolio/sections/SpeedComparisonSection.d.ts +20 -0
  225. package/dist/{SpeedComparisonSection-Y3K7OFZQ.js → portfolio/sections/SpeedComparisonSection.js} +5 -4
  226. package/dist/portfolio/sections/SpeedComparisonSection.js.map +1 -0
  227. package/dist/portfolio/sections/StrategySection.cjs +233 -0
  228. package/dist/portfolio/sections/StrategySection.cjs.map +1 -0
  229. package/dist/portfolio/sections/StrategySection.d.cts +9 -0
  230. package/dist/portfolio/sections/StrategySection.d.ts +9 -0
  231. package/dist/{StrategySection-DI5RSCJU.js → portfolio/sections/StrategySection.js} +60 -26
  232. package/dist/portfolio/sections/StrategySection.js.map +1 -0
  233. package/dist/portfolio/sections/TeamSection.cjs +162 -0
  234. package/dist/portfolio/sections/TeamSection.cjs.map +1 -0
  235. package/dist/portfolio/sections/TeamSection.d.cts +9 -0
  236. package/dist/portfolio/sections/TeamSection.d.ts +9 -0
  237. package/dist/portfolio/sections/TeamSection.js +106 -0
  238. package/dist/portfolio/sections/TeamSection.js.map +1 -0
  239. package/dist/portfolio/sections/TechStackSection.cjs +106 -0
  240. package/dist/portfolio/sections/TechStackSection.cjs.map +1 -0
  241. package/dist/portfolio/sections/TechStackSection.d.cts +9 -0
  242. package/dist/portfolio/sections/TechStackSection.d.ts +9 -0
  243. package/dist/portfolio/sections/TechStackSection.js +99 -0
  244. package/dist/portfolio/sections/TechStackSection.js.map +1 -0
  245. package/dist/{TestimonialSection-XPTFUQIN.cjs → portfolio/sections/TestimonialSection.cjs} +47 -28
  246. package/dist/portfolio/sections/TestimonialSection.cjs.map +1 -0
  247. package/dist/portfolio/sections/TestimonialSection.d.cts +9 -0
  248. package/dist/portfolio/sections/TestimonialSection.d.ts +9 -0
  249. package/dist/{TestimonialSection-6RGSMXQB.js → portfolio/sections/TestimonialSection.js} +40 -27
  250. package/dist/portfolio/sections/TestimonialSection.js.map +1 -0
  251. package/dist/portfolio/sections/VideoSection.cjs +181 -0
  252. package/dist/portfolio/sections/VideoSection.cjs.map +1 -0
  253. package/dist/portfolio/sections/VideoSection.d.cts +9 -0
  254. package/dist/portfolio/sections/VideoSection.d.ts +9 -0
  255. package/dist/{VideoSection-4A2HC6K6.js → portfolio/sections/VideoSection.js} +21 -13
  256. package/dist/portfolio/sections/VideoSection.js.map +1 -0
  257. package/dist/portfolio/server.cjs +56 -139
  258. package/dist/portfolio/server.cjs.map +1 -1
  259. package/dist/portfolio/server.d.cts +157 -7
  260. package/dist/portfolio/server.d.ts +157 -7
  261. package/dist/portfolio/server.js +3 -137
  262. package/dist/portfolio/server.js.map +1 -1
  263. package/dist/preview.cjs +56 -0
  264. package/dist/preview.cjs.map +1 -0
  265. package/dist/preview.d.cts +31 -0
  266. package/dist/preview.d.ts +31 -0
  267. package/dist/preview.js +54 -0
  268. package/dist/preview.js.map +1 -0
  269. package/dist/{types-DL4t_Cfa.d.ts → types-0tVPy4pU.d.cts} +7 -1
  270. package/dist/{types-DL4t_Cfa.d.cts → types-0tVPy4pU.d.ts} +7 -1
  271. package/dist/types-D0nb6KAx.d.cts +299 -0
  272. package/dist/types-D0nb6KAx.d.ts +299 -0
  273. package/package.json +38 -14
  274. package/templates/api-portfolio-preview.ts +6 -0
  275. package/templates/api-revalidate.ts +5 -0
  276. package/templates/work-category-page.tsx +40 -0
  277. package/templates/work-error.tsx +3 -0
  278. package/templates/work-loading.tsx +1 -0
  279. package/templates/work-page.tsx +37 -0
  280. package/templates/work-slug-loading.tsx +1 -0
  281. package/templates/work-slug-page.tsx +41 -0
  282. package/dist/BeforeAfterSection-6BHFLY4Y.js.map +0 -1
  283. package/dist/BeforeAfterSection-JTORBR3A.cjs +0 -181
  284. package/dist/BeforeAfterSection-JTORBR3A.cjs.map +0 -1
  285. package/dist/CTASection-4JKLXEUF.cjs +0 -111
  286. package/dist/CTASection-4JKLXEUF.cjs.map +0 -1
  287. package/dist/CTASection-BJA72XIL.js +0 -106
  288. package/dist/CTASection-BJA72XIL.js.map +0 -1
  289. package/dist/ChallengesSection-GEQGVSJN.js.map +0 -1
  290. package/dist/ChallengesSection-IZ3DHECS.cjs.map +0 -1
  291. package/dist/ConversionFunnelSection-AUUSJ5HQ.cjs +0 -209
  292. package/dist/ConversionFunnelSection-AUUSJ5HQ.cjs.map +0 -1
  293. package/dist/ConversionFunnelSection-D3GE4NKE.js.map +0 -1
  294. package/dist/DesignSystemSection-2R5BRBGO.js.map +0 -1
  295. package/dist/DesignSystemSection-KXIQXITF.cjs.map +0 -1
  296. package/dist/DetailsSection-A6PZQUQL.js.map +0 -1
  297. package/dist/DetailsSection-TTUZAPZZ.cjs.map +0 -1
  298. package/dist/FeatureSpotlightSection-B7P3JGNL.js.map +0 -1
  299. package/dist/FeatureSpotlightSection-WRHXS7TU.cjs +0 -210
  300. package/dist/FeatureSpotlightSection-WRHXS7TU.cjs.map +0 -1
  301. package/dist/GallerySection-VMKORC47.js.map +0 -1
  302. package/dist/GallerySection-WJ4PQDBI.cjs +0 -219
  303. package/dist/GallerySection-WJ4PQDBI.cjs.map +0 -1
  304. package/dist/MetricsTimelineSection-4L6DUHJ5.cjs.map +0 -1
  305. package/dist/MetricsTimelineSection-6BT5GNFV.js.map +0 -1
  306. package/dist/PerformanceSection-24TVVFZA.cjs.map +0 -1
  307. package/dist/PerformanceSection-MGCEIXDX.js.map +0 -1
  308. package/dist/ResultsSection-DFUJ5U6M.js.map +0 -1
  309. package/dist/ResultsSection-XLGMMQKY.cjs.map +0 -1
  310. package/dist/ServicesSection-D5V3Q4GR.js +0 -118
  311. package/dist/ServicesSection-D5V3Q4GR.js.map +0 -1
  312. package/dist/ServicesSection-WJMGK2MF.cjs +0 -120
  313. package/dist/ServicesSection-WJMGK2MF.cjs.map +0 -1
  314. package/dist/SiteArchitectureSection-J7BPBERH.cjs.map +0 -1
  315. package/dist/SiteArchitectureSection-TE22OAWV.js.map +0 -1
  316. package/dist/SpeedComparisonSection-EZKFQVGW.cjs.map +0 -1
  317. package/dist/SpeedComparisonSection-Y3K7OFZQ.js.map +0 -1
  318. package/dist/StrategySection-CJ7Y6OFQ.cjs +0 -174
  319. package/dist/StrategySection-CJ7Y6OFQ.cjs.map +0 -1
  320. package/dist/StrategySection-DI5RSCJU.js.map +0 -1
  321. package/dist/TeamSection-DZVSNZE6.cjs +0 -112
  322. package/dist/TeamSection-DZVSNZE6.cjs.map +0 -1
  323. package/dist/TeamSection-HGKFW6PQ.js +0 -107
  324. package/dist/TeamSection-HGKFW6PQ.js.map +0 -1
  325. package/dist/TechStackSection-2AQ7RGY3.js +0 -93
  326. package/dist/TechStackSection-2AQ7RGY3.js.map +0 -1
  327. package/dist/TechStackSection-VTNNZR5V.cjs +0 -95
  328. package/dist/TechStackSection-VTNNZR5V.cjs.map +0 -1
  329. package/dist/TestimonialSection-6RGSMXQB.js.map +0 -1
  330. package/dist/TestimonialSection-XPTFUQIN.cjs.map +0 -1
  331. package/dist/VideoSection-4A2HC6K6.js.map +0 -1
  332. package/dist/VideoSection-G3DFS7UH.cjs +0 -118
  333. package/dist/VideoSection-G3DFS7UH.cjs.map +0 -1
  334. package/dist/chunk-2UNKXWQM.js +0 -630
  335. package/dist/chunk-2UNKXWQM.js.map +0 -1
  336. package/dist/chunk-2Y4O3LWM.js +0 -53
  337. package/dist/chunk-2Y4O3LWM.js.map +0 -1
  338. package/dist/chunk-7CFFAKDM.js +0 -74
  339. package/dist/chunk-7CFFAKDM.js.map +0 -1
  340. package/dist/chunk-APG2QSMB.js +0 -131
  341. package/dist/chunk-APG2QSMB.js.map +0 -1
  342. package/dist/chunk-EE75WRCM.cjs.map +0 -1
  343. package/dist/chunk-FDFVLYAM.cjs +0 -637
  344. package/dist/chunk-FDFVLYAM.cjs.map +0 -1
  345. package/dist/chunk-IKBK7HYX.cjs +0 -79
  346. package/dist/chunk-IKBK7HYX.cjs.map +0 -1
  347. package/dist/chunk-KEOHORIH.cjs +0 -79
  348. package/dist/chunk-KEOHORIH.cjs.map +0 -1
  349. package/dist/chunk-OA5ZM4OA.cjs +0 -139
  350. package/dist/chunk-OA5ZM4OA.cjs.map +0 -1
  351. package/dist/chunk-TVFXN6W6.js.map +0 -1
  352. package/dist/chunk-XCKXHK44.js +0 -15
  353. package/dist/chunk-XCKXHK44.js.map +0 -1
  354. package/dist/chunk-XONXEFJY.cjs +0 -58
  355. package/dist/chunk-XONXEFJY.cjs.map +0 -1
  356. package/dist/chunk-XQNJED46.cjs +0 -19
  357. package/dist/chunk-XQNJED46.cjs.map +0 -1
  358. package/dist/chunk-YB4B3OMC.js +0 -74
  359. package/dist/chunk-YB4B3OMC.js.map +0 -1
  360. package/dist/portfolio/sections.cjs +0 -20
  361. package/dist/portfolio/sections.cjs.map +0 -1
  362. package/dist/portfolio/sections.d.cts +0 -42
  363. package/dist/portfolio/sections.d.ts +0 -42
  364. package/dist/portfolio/sections.js +0 -4
  365. package/dist/portfolio/sections.js.map +0 -1
@@ -0,0 +1,299 @@
1
+ interface SanityImageRef {
2
+ _type: 'image';
3
+ asset: {
4
+ _type: 'reference';
5
+ _ref: string;
6
+ };
7
+ hotspot?: {
8
+ x: number;
9
+ y: number;
10
+ height: number;
11
+ width: number;
12
+ };
13
+ crop?: {
14
+ top: number;
15
+ bottom: number;
16
+ left: number;
17
+ right: number;
18
+ };
19
+ alt?: string;
20
+ }
21
+ type MetricSource = 'measured' | 'estimated';
22
+ interface PortfolioKPI {
23
+ label: string;
24
+ value: number;
25
+ suffix: string;
26
+ prefix?: string;
27
+ description: string;
28
+ source: MetricSource;
29
+ }
30
+ interface MetricsDelta {
31
+ metric: string;
32
+ baseline: number;
33
+ current: number;
34
+ delta: number;
35
+ deltaPercent: number;
36
+ direction: 'up' | 'down' | 'flat';
37
+ timespan: string;
38
+ }
39
+ interface MetricsSnapshot {
40
+ seo: {
41
+ clicks_28d?: number;
42
+ impressions_28d?: number;
43
+ avg_position?: number;
44
+ ctr?: number;
45
+ };
46
+ cwv: {
47
+ lcp_ms?: number;
48
+ inp_ms?: number;
49
+ cls?: number;
50
+ performance_score?: number;
51
+ };
52
+ analytics: {
53
+ sessions_28d?: number;
54
+ page_views_28d?: number;
55
+ conversion_rate?: number;
56
+ bounce_rate?: number;
57
+ };
58
+ pages: {
59
+ total_indexed?: number;
60
+ total_crawled?: number;
61
+ total_pages?: number;
62
+ };
63
+ }
64
+ interface PortfolioHeroData {
65
+ headline: string;
66
+ subheadline: string;
67
+ description: string;
68
+ category: string;
69
+ services: string[];
70
+ liveUrl?: string;
71
+ screenshots: {
72
+ desktop?: string;
73
+ tablet?: string;
74
+ mobile?: string;
75
+ };
76
+ kpis: PortfolioKPI[];
77
+ }
78
+ interface PortfolioChallengeItem {
79
+ title: string;
80
+ description: string;
81
+ solution: string;
82
+ result?: string;
83
+ icon?: string;
84
+ }
85
+ interface PortfolioChallengesData {
86
+ items: PortfolioChallengeItem[];
87
+ }
88
+ interface PortfolioStrategyPhase {
89
+ number: number;
90
+ title: string;
91
+ description: string;
92
+ deliverables?: string[];
93
+ icon?: string;
94
+ timeline?: string;
95
+ }
96
+ interface PortfolioStrategyData {
97
+ phases: PortfolioStrategyPhase[];
98
+ }
99
+ interface PortfolioResultItem {
100
+ title: string;
101
+ description: string;
102
+ metric?: {
103
+ value: number;
104
+ suffix: string;
105
+ prefix?: string;
106
+ };
107
+ source: MetricSource;
108
+ icon?: string;
109
+ }
110
+ interface PortfolioResultsData {
111
+ items: PortfolioResultItem[];
112
+ }
113
+ interface PortfolioTechItem {
114
+ name: string;
115
+ category: string;
116
+ icon?: string;
117
+ description?: string;
118
+ }
119
+ interface PortfolioTechStackData {
120
+ technologies: PortfolioTechItem[];
121
+ }
122
+ interface PortfolioServiceItem {
123
+ title: string;
124
+ description: string;
125
+ features: string[];
126
+ icon?: string;
127
+ }
128
+ interface PortfolioServicesData {
129
+ items: PortfolioServiceItem[];
130
+ }
131
+ interface PortfolioTestimonialData {
132
+ quote: string;
133
+ author: string;
134
+ title: string;
135
+ company: string;
136
+ avatar?: SanityImageRef;
137
+ rating?: number;
138
+ }
139
+ interface PortfolioGalleryImage {
140
+ image: SanityImageRef;
141
+ caption?: string;
142
+ type?: 'screenshot' | 'before' | 'after' | 'design';
143
+ }
144
+ interface PortfolioGalleryData {
145
+ images: PortfolioGalleryImage[];
146
+ layout?: 'grid' | 'masonry';
147
+ }
148
+ interface PortfolioVideoData {
149
+ url?: string;
150
+ embedUrl?: string;
151
+ thumbnail: SanityImageRef;
152
+ title: string;
153
+ duration?: string;
154
+ platform?: 'youtube' | 'vimeo' | 'custom';
155
+ }
156
+ interface PortfolioTeamMember {
157
+ name: string;
158
+ role: string;
159
+ avatar?: SanityImageRef;
160
+ }
161
+ interface PortfolioTeamData {
162
+ members: PortfolioTeamMember[];
163
+ }
164
+ interface PortfolioAnnotation {
165
+ x: number;
166
+ y: number;
167
+ label: string;
168
+ description: string;
169
+ icon?: string;
170
+ }
171
+ interface PortfolioFeatureSpotlightData {
172
+ image: SanityImageRef;
173
+ title: string;
174
+ description: string;
175
+ layout: 'left' | 'right' | 'full';
176
+ annotations: PortfolioAnnotation[];
177
+ }
178
+ interface PortfolioBeforeAfterData {
179
+ before: SanityImageRef;
180
+ after: SanityImageRef;
181
+ title?: string;
182
+ description?: string;
183
+ defaultPosition?: number;
184
+ }
185
+ interface PortfolioMetricsDataPoint {
186
+ month: string;
187
+ label: string;
188
+ metrics: {
189
+ traffic?: number;
190
+ conversions?: number;
191
+ revenue?: number;
192
+ rankings?: number;
193
+ };
194
+ }
195
+ interface PortfolioMetricsTimelineData {
196
+ dataPoints: PortfolioMetricsDataPoint[];
197
+ baselineDate: string;
198
+ title?: string;
199
+ description?: string;
200
+ }
201
+ interface PortfolioFunnelStage {
202
+ label: string;
203
+ value: number;
204
+ icon?: string;
205
+ color?: string;
206
+ }
207
+ interface PortfolioConversionFunnelData {
208
+ stages: PortfolioFunnelStage[];
209
+ title?: string;
210
+ description?: string;
211
+ }
212
+ interface PortfolioDetailsData {
213
+ industry: string;
214
+ location?: string;
215
+ website?: string;
216
+ timeline?: string;
217
+ launchDate?: string;
218
+ budgetRange?: string;
219
+ }
220
+ interface PortfolioSeoData {
221
+ metaTitle: string;
222
+ metaDescription: string;
223
+ keywords: string[];
224
+ ogImage?: SanityImageRef;
225
+ }
226
+ interface PortfolioCTAData {
227
+ headline: string;
228
+ description: string;
229
+ buttonText: string;
230
+ buttonUrl: string;
231
+ style?: 'primary' | 'glass';
232
+ }
233
+ declare const PORTFOLIO_SECTION_TYPES: readonly ["portfolioHero", "portfolioChallenges", "portfolioStrategy", "portfolioResults", "portfolioTechStack", "portfolioServices", "portfolioTestimonial", "portfolioGallery", "portfolioVideo", "portfolioTeam", "portfolioFeatureSpotlight", "portfolioBeforeAfter", "portfolioMetricsTimeline", "portfolioConversionFunnel", "portfolioPerformance", "portfolioSpeedComparison", "portfolioSiteArchitecture", "portfolioDesignSystem", "portfolioDetails", "portfolioSeo", "portfolioCTA"];
234
+ type PortfolioSectionType = (typeof PORTFOLIO_SECTION_TYPES)[number];
235
+ type PortfolioSectionData = PortfolioHeroData | PortfolioChallengesData | PortfolioStrategyData | PortfolioResultsData | PortfolioTechStackData | PortfolioServicesData | PortfolioTestimonialData | PortfolioGalleryData | PortfolioVideoData | PortfolioTeamData | PortfolioFeatureSpotlightData | PortfolioBeforeAfterData | PortfolioMetricsTimelineData | PortfolioConversionFunnelData | PortfolioDetailsData | PortfolioSeoData | PortfolioCTAData;
236
+ interface PortfolioSectionDataMap {
237
+ portfolioHero: PortfolioHeroData;
238
+ portfolioChallenges: PortfolioChallengesData;
239
+ portfolioStrategy: PortfolioStrategyData;
240
+ portfolioResults: PortfolioResultsData;
241
+ portfolioTechStack: PortfolioTechStackData;
242
+ portfolioServices: PortfolioServicesData;
243
+ portfolioTestimonial: PortfolioTestimonialData;
244
+ portfolioGallery: PortfolioGalleryData;
245
+ portfolioVideo: PortfolioVideoData;
246
+ portfolioTeam: PortfolioTeamData;
247
+ portfolioFeatureSpotlight: PortfolioFeatureSpotlightData;
248
+ portfolioBeforeAfter: PortfolioBeforeAfterData;
249
+ portfolioMetricsTimeline: PortfolioMetricsTimelineData;
250
+ portfolioConversionFunnel: PortfolioConversionFunnelData;
251
+ portfolioDetails: PortfolioDetailsData;
252
+ portfolioSeo: PortfolioSeoData;
253
+ portfolioCTA: PortfolioCTAData;
254
+ }
255
+ interface PortfolioSection<T extends PortfolioSectionType = PortfolioSectionType> {
256
+ sectionType: T;
257
+ displayName: string;
258
+ data: T extends keyof PortfolioSectionDataMap ? PortfolioSectionDataMap[T] : PortfolioSectionData;
259
+ }
260
+ interface PortfolioItem {
261
+ id: string;
262
+ slug: string;
263
+ title: string;
264
+ subtitle: string;
265
+ category: string;
266
+ services: string[];
267
+ description: string;
268
+ hero_image: string;
269
+ hero_image_alt: string;
270
+ live_url: string | null;
271
+ kpis: PortfolioKPI[];
272
+ details: PortfolioDetailsData | null;
273
+ seo: PortfolioSeoData | null;
274
+ featured: boolean;
275
+ order?: number;
276
+ published_at: string | null;
277
+ /** Sonor project ID (present for items generated from a managed project) */
278
+ project_id: string | null;
279
+ hero_screenshots: {
280
+ desktop?: string;
281
+ tablet?: string;
282
+ mobile?: string;
283
+ } | null;
284
+ baseline_metrics: MetricsSnapshot | null;
285
+ current_metrics: MetricsSnapshot | null;
286
+ metrics_last_refreshed_at: string | null;
287
+ }
288
+ interface PortfolioItemFull extends PortfolioItem {
289
+ sections: PortfolioSection[];
290
+ metricsDelta: MetricsDelta[];
291
+ /**
292
+ * True once the agency deliberately reordered sections in the dashboard.
293
+ * PortfolioPage respects the sections array order when set (hero pinned
294
+ * first); otherwise it applies the canonical order.
295
+ */
296
+ sectionsOrdered?: boolean;
297
+ }
298
+
299
+ export type { PortfolioBeforeAfterData as P, PortfolioCTAData as a, PortfolioConversionFunnelData as b, PortfolioFeatureSpotlightData as c, PortfolioGalleryData as d, PortfolioMetricsTimelineData as e, PortfolioStrategyData as f, PortfolioTeamData as g, PortfolioVideoData as h, PortfolioItem as i, PortfolioItemFull as j, PortfolioSection as k };
@@ -0,0 +1,299 @@
1
+ interface SanityImageRef {
2
+ _type: 'image';
3
+ asset: {
4
+ _type: 'reference';
5
+ _ref: string;
6
+ };
7
+ hotspot?: {
8
+ x: number;
9
+ y: number;
10
+ height: number;
11
+ width: number;
12
+ };
13
+ crop?: {
14
+ top: number;
15
+ bottom: number;
16
+ left: number;
17
+ right: number;
18
+ };
19
+ alt?: string;
20
+ }
21
+ type MetricSource = 'measured' | 'estimated';
22
+ interface PortfolioKPI {
23
+ label: string;
24
+ value: number;
25
+ suffix: string;
26
+ prefix?: string;
27
+ description: string;
28
+ source: MetricSource;
29
+ }
30
+ interface MetricsDelta {
31
+ metric: string;
32
+ baseline: number;
33
+ current: number;
34
+ delta: number;
35
+ deltaPercent: number;
36
+ direction: 'up' | 'down' | 'flat';
37
+ timespan: string;
38
+ }
39
+ interface MetricsSnapshot {
40
+ seo: {
41
+ clicks_28d?: number;
42
+ impressions_28d?: number;
43
+ avg_position?: number;
44
+ ctr?: number;
45
+ };
46
+ cwv: {
47
+ lcp_ms?: number;
48
+ inp_ms?: number;
49
+ cls?: number;
50
+ performance_score?: number;
51
+ };
52
+ analytics: {
53
+ sessions_28d?: number;
54
+ page_views_28d?: number;
55
+ conversion_rate?: number;
56
+ bounce_rate?: number;
57
+ };
58
+ pages: {
59
+ total_indexed?: number;
60
+ total_crawled?: number;
61
+ total_pages?: number;
62
+ };
63
+ }
64
+ interface PortfolioHeroData {
65
+ headline: string;
66
+ subheadline: string;
67
+ description: string;
68
+ category: string;
69
+ services: string[];
70
+ liveUrl?: string;
71
+ screenshots: {
72
+ desktop?: string;
73
+ tablet?: string;
74
+ mobile?: string;
75
+ };
76
+ kpis: PortfolioKPI[];
77
+ }
78
+ interface PortfolioChallengeItem {
79
+ title: string;
80
+ description: string;
81
+ solution: string;
82
+ result?: string;
83
+ icon?: string;
84
+ }
85
+ interface PortfolioChallengesData {
86
+ items: PortfolioChallengeItem[];
87
+ }
88
+ interface PortfolioStrategyPhase {
89
+ number: number;
90
+ title: string;
91
+ description: string;
92
+ deliverables?: string[];
93
+ icon?: string;
94
+ timeline?: string;
95
+ }
96
+ interface PortfolioStrategyData {
97
+ phases: PortfolioStrategyPhase[];
98
+ }
99
+ interface PortfolioResultItem {
100
+ title: string;
101
+ description: string;
102
+ metric?: {
103
+ value: number;
104
+ suffix: string;
105
+ prefix?: string;
106
+ };
107
+ source: MetricSource;
108
+ icon?: string;
109
+ }
110
+ interface PortfolioResultsData {
111
+ items: PortfolioResultItem[];
112
+ }
113
+ interface PortfolioTechItem {
114
+ name: string;
115
+ category: string;
116
+ icon?: string;
117
+ description?: string;
118
+ }
119
+ interface PortfolioTechStackData {
120
+ technologies: PortfolioTechItem[];
121
+ }
122
+ interface PortfolioServiceItem {
123
+ title: string;
124
+ description: string;
125
+ features: string[];
126
+ icon?: string;
127
+ }
128
+ interface PortfolioServicesData {
129
+ items: PortfolioServiceItem[];
130
+ }
131
+ interface PortfolioTestimonialData {
132
+ quote: string;
133
+ author: string;
134
+ title: string;
135
+ company: string;
136
+ avatar?: SanityImageRef;
137
+ rating?: number;
138
+ }
139
+ interface PortfolioGalleryImage {
140
+ image: SanityImageRef;
141
+ caption?: string;
142
+ type?: 'screenshot' | 'before' | 'after' | 'design';
143
+ }
144
+ interface PortfolioGalleryData {
145
+ images: PortfolioGalleryImage[];
146
+ layout?: 'grid' | 'masonry';
147
+ }
148
+ interface PortfolioVideoData {
149
+ url?: string;
150
+ embedUrl?: string;
151
+ thumbnail: SanityImageRef;
152
+ title: string;
153
+ duration?: string;
154
+ platform?: 'youtube' | 'vimeo' | 'custom';
155
+ }
156
+ interface PortfolioTeamMember {
157
+ name: string;
158
+ role: string;
159
+ avatar?: SanityImageRef;
160
+ }
161
+ interface PortfolioTeamData {
162
+ members: PortfolioTeamMember[];
163
+ }
164
+ interface PortfolioAnnotation {
165
+ x: number;
166
+ y: number;
167
+ label: string;
168
+ description: string;
169
+ icon?: string;
170
+ }
171
+ interface PortfolioFeatureSpotlightData {
172
+ image: SanityImageRef;
173
+ title: string;
174
+ description: string;
175
+ layout: 'left' | 'right' | 'full';
176
+ annotations: PortfolioAnnotation[];
177
+ }
178
+ interface PortfolioBeforeAfterData {
179
+ before: SanityImageRef;
180
+ after: SanityImageRef;
181
+ title?: string;
182
+ description?: string;
183
+ defaultPosition?: number;
184
+ }
185
+ interface PortfolioMetricsDataPoint {
186
+ month: string;
187
+ label: string;
188
+ metrics: {
189
+ traffic?: number;
190
+ conversions?: number;
191
+ revenue?: number;
192
+ rankings?: number;
193
+ };
194
+ }
195
+ interface PortfolioMetricsTimelineData {
196
+ dataPoints: PortfolioMetricsDataPoint[];
197
+ baselineDate: string;
198
+ title?: string;
199
+ description?: string;
200
+ }
201
+ interface PortfolioFunnelStage {
202
+ label: string;
203
+ value: number;
204
+ icon?: string;
205
+ color?: string;
206
+ }
207
+ interface PortfolioConversionFunnelData {
208
+ stages: PortfolioFunnelStage[];
209
+ title?: string;
210
+ description?: string;
211
+ }
212
+ interface PortfolioDetailsData {
213
+ industry: string;
214
+ location?: string;
215
+ website?: string;
216
+ timeline?: string;
217
+ launchDate?: string;
218
+ budgetRange?: string;
219
+ }
220
+ interface PortfolioSeoData {
221
+ metaTitle: string;
222
+ metaDescription: string;
223
+ keywords: string[];
224
+ ogImage?: SanityImageRef;
225
+ }
226
+ interface PortfolioCTAData {
227
+ headline: string;
228
+ description: string;
229
+ buttonText: string;
230
+ buttonUrl: string;
231
+ style?: 'primary' | 'glass';
232
+ }
233
+ declare const PORTFOLIO_SECTION_TYPES: readonly ["portfolioHero", "portfolioChallenges", "portfolioStrategy", "portfolioResults", "portfolioTechStack", "portfolioServices", "portfolioTestimonial", "portfolioGallery", "portfolioVideo", "portfolioTeam", "portfolioFeatureSpotlight", "portfolioBeforeAfter", "portfolioMetricsTimeline", "portfolioConversionFunnel", "portfolioPerformance", "portfolioSpeedComparison", "portfolioSiteArchitecture", "portfolioDesignSystem", "portfolioDetails", "portfolioSeo", "portfolioCTA"];
234
+ type PortfolioSectionType = (typeof PORTFOLIO_SECTION_TYPES)[number];
235
+ type PortfolioSectionData = PortfolioHeroData | PortfolioChallengesData | PortfolioStrategyData | PortfolioResultsData | PortfolioTechStackData | PortfolioServicesData | PortfolioTestimonialData | PortfolioGalleryData | PortfolioVideoData | PortfolioTeamData | PortfolioFeatureSpotlightData | PortfolioBeforeAfterData | PortfolioMetricsTimelineData | PortfolioConversionFunnelData | PortfolioDetailsData | PortfolioSeoData | PortfolioCTAData;
236
+ interface PortfolioSectionDataMap {
237
+ portfolioHero: PortfolioHeroData;
238
+ portfolioChallenges: PortfolioChallengesData;
239
+ portfolioStrategy: PortfolioStrategyData;
240
+ portfolioResults: PortfolioResultsData;
241
+ portfolioTechStack: PortfolioTechStackData;
242
+ portfolioServices: PortfolioServicesData;
243
+ portfolioTestimonial: PortfolioTestimonialData;
244
+ portfolioGallery: PortfolioGalleryData;
245
+ portfolioVideo: PortfolioVideoData;
246
+ portfolioTeam: PortfolioTeamData;
247
+ portfolioFeatureSpotlight: PortfolioFeatureSpotlightData;
248
+ portfolioBeforeAfter: PortfolioBeforeAfterData;
249
+ portfolioMetricsTimeline: PortfolioMetricsTimelineData;
250
+ portfolioConversionFunnel: PortfolioConversionFunnelData;
251
+ portfolioDetails: PortfolioDetailsData;
252
+ portfolioSeo: PortfolioSeoData;
253
+ portfolioCTA: PortfolioCTAData;
254
+ }
255
+ interface PortfolioSection<T extends PortfolioSectionType = PortfolioSectionType> {
256
+ sectionType: T;
257
+ displayName: string;
258
+ data: T extends keyof PortfolioSectionDataMap ? PortfolioSectionDataMap[T] : PortfolioSectionData;
259
+ }
260
+ interface PortfolioItem {
261
+ id: string;
262
+ slug: string;
263
+ title: string;
264
+ subtitle: string;
265
+ category: string;
266
+ services: string[];
267
+ description: string;
268
+ hero_image: string;
269
+ hero_image_alt: string;
270
+ live_url: string | null;
271
+ kpis: PortfolioKPI[];
272
+ details: PortfolioDetailsData | null;
273
+ seo: PortfolioSeoData | null;
274
+ featured: boolean;
275
+ order?: number;
276
+ published_at: string | null;
277
+ /** Sonor project ID (present for items generated from a managed project) */
278
+ project_id: string | null;
279
+ hero_screenshots: {
280
+ desktop?: string;
281
+ tablet?: string;
282
+ mobile?: string;
283
+ } | null;
284
+ baseline_metrics: MetricsSnapshot | null;
285
+ current_metrics: MetricsSnapshot | null;
286
+ metrics_last_refreshed_at: string | null;
287
+ }
288
+ interface PortfolioItemFull extends PortfolioItem {
289
+ sections: PortfolioSection[];
290
+ metricsDelta: MetricsDelta[];
291
+ /**
292
+ * True once the agency deliberately reordered sections in the dashboard.
293
+ * PortfolioPage respects the sections array order when set (hero pinned
294
+ * first); otherwise it applies the canonical order.
295
+ */
296
+ sectionsOrdered?: boolean;
297
+ }
298
+
299
+ export type { PortfolioBeforeAfterData as P, PortfolioCTAData as a, PortfolioConversionFunnelData as b, PortfolioFeatureSpotlightData as c, PortfolioGalleryData as d, PortfolioMetricsTimelineData as e, PortfolioStrategyData as f, PortfolioTeamData as g, PortfolioVideoData as h, PortfolioItem as i, PortfolioItemFull as j, PortfolioSection as k };
package/package.json CHANGED
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "name": "@sonordev/agency-site-kit",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Premium portfolio showcase components for Sonor-powered agency websites",
5
5
  "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/upforge-dev/agency-site-kit.git"
9
+ },
6
10
  "type": "module",
7
11
  "main": "./dist/index.cjs",
8
12
  "module": "./dist/index.js",
@@ -23,10 +27,20 @@
23
27
  "import": "./dist/portfolio/server.js",
24
28
  "require": "./dist/portfolio/server.cjs"
25
29
  },
26
- "./portfolio/sections": {
27
- "types": "./dist/portfolio/sections.d.ts",
28
- "import": "./dist/portfolio/sections.js",
29
- "require": "./dist/portfolio/sections.cjs"
30
+ "./portfolio/sections/*": {
31
+ "types": "./dist/portfolio/sections/*.d.ts",
32
+ "import": "./dist/portfolio/sections/*.js",
33
+ "require": "./dist/portfolio/sections/*.cjs"
34
+ },
35
+ "./portfolio/primitives/*": {
36
+ "types": "./dist/portfolio/primitives/*.d.ts",
37
+ "import": "./dist/portfolio/primitives/*.js",
38
+ "require": "./dist/portfolio/primitives/*.cjs"
39
+ },
40
+ "./portfolio/components/*": {
41
+ "types": "./dist/portfolio/components/*.d.ts",
42
+ "import": "./dist/portfolio/components/*.js",
43
+ "require": "./dist/portfolio/components/*.cjs"
30
44
  },
31
45
  "./portfolio/client": {
32
46
  "types": "./dist/portfolio/client.d.ts",
@@ -42,38 +56,48 @@
42
56
  "types": "./dist/revalidate.d.ts",
43
57
  "import": "./dist/revalidate.js",
44
58
  "require": "./dist/revalidate.cjs"
59
+ },
60
+ "./preview": {
61
+ "types": "./dist/preview.d.ts",
62
+ "import": "./dist/preview.js",
63
+ "require": "./dist/preview.cjs"
45
64
  }
46
65
  },
47
66
  "publishConfig": {
48
67
  "access": "public"
49
68
  },
69
+ "bin": {
70
+ "agency-site-kit-setup": "./bin/setup.mjs"
71
+ },
50
72
  "files": [
51
73
  "dist",
74
+ "bin",
75
+ "templates",
52
76
  "README.md"
53
77
  ],
54
78
  "scripts": {
55
79
  "build": "tsup",
56
80
  "dev": "tsup --watch",
57
81
  "typecheck": "tsc --noEmit",
82
+ "test": "vitest run",
83
+ "verify": "node scripts/verify-dist.mjs",
84
+ "prepublishOnly": "pnpm run build && pnpm run typecheck && pnpm run test && pnpm run verify",
58
85
  "clean": "rm -rf dist"
59
86
  },
60
87
  "peerDependencies": {
61
- "@sonordev/site-kit": ">=3.0.2",
88
+ "@sonordev/site-kit": ">=3.0.4",
62
89
  "next": ">=14.0.0",
63
90
  "react": ">=18.0.0",
64
91
  "react-dom": ">=18.0.0"
65
92
  },
66
- "dependencies": {
67
- "gsap": "^3.12.7"
68
- },
69
93
  "devDependencies": {
70
- "@sonordev/site-kit": ">=3.0.2",
94
+ "@sonordev/site-kit": ">=3.0.4",
71
95
  "@types/node": "^25.5.0",
96
+ "@types/react": "^19.2.17",
97
+ "@types/react-dom": "^19.2.3",
72
98
  "next": "^16.0.0",
73
- "@types/react": "^18.3.0",
74
- "@types/react-dom": "^18.3.0",
75
- "glob": "^13.0.6",
76
99
  "tsup": "^8.3.0",
77
- "typescript": "^5.6.0"
100
+ "typescript": "^5.6.0",
101
+ "vitest": "^4.1.9"
78
102
  }
79
103
  }
@@ -0,0 +1,6 @@
1
+ // The Sonor dashboard's Preview button opens unpublished case studies
2
+ // through this route (short-lived token → Next draft mode). ?exit=1 leaves
3
+ // preview mode.
4
+ import { createPortfolioPreviewHandler } from '@sonordev/agency-site-kit/preview';
5
+
6
+ export const { GET } = createPortfolioPreviewHandler({ basePath: '__BASE_PATH__' });
@@ -0,0 +1,5 @@
1
+ // Sonor calls this webhook when a case study is published or updated,
2
+ // busting the portfolio cache tag so changes appear without a rebuild.
3
+ import { createRevalidateHandler } from '@sonordev/agency-site-kit/revalidate';
4
+
5
+ export const { POST } = createRevalidateHandler();