@sonordev/agency-site-kit 0.3.1 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) 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-WNR4KNG4.cjs → chunk-5MEZU3OG.cjs} +4 -4
  6. package/dist/{chunk-WNR4KNG4.cjs.map → chunk-5MEZU3OG.cjs.map} +1 -1
  7. package/dist/chunk-7D4H36UF.js +13 -0
  8. package/dist/chunk-7D4H36UF.js.map +1 -0
  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-K2BGTDSN.js +45 -0
  16. package/dist/chunk-K2BGTDSN.js.map +1 -0
  17. package/dist/chunk-KXLROAO5.js +291 -0
  18. package/dist/chunk-KXLROAO5.js.map +1 -0
  19. package/dist/chunk-L4EOQVRJ.js +6 -0
  20. package/dist/chunk-L4EOQVRJ.js.map +1 -0
  21. package/dist/chunk-NI4FVCLS.cjs +32 -0
  22. package/dist/chunk-NI4FVCLS.cjs.map +1 -0
  23. package/dist/chunk-NLGUPJZA.js +507 -0
  24. package/dist/chunk-NLGUPJZA.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-QGSW43TM.cjs +538 -0
  28. package/dist/chunk-QGSW43TM.cjs.map +1 -0
  29. package/dist/{chunk-TVFXN6W6.js → chunk-QL6KVIFR.js} +8 -4
  30. package/dist/chunk-QL6KVIFR.js.map +1 -0
  31. package/dist/chunk-RWQ675N6.js +165 -0
  32. package/dist/chunk-RWQ675N6.js.map +1 -0
  33. package/dist/chunk-UXUU7FVT.cjs +171 -0
  34. package/dist/chunk-UXUU7FVT.cjs.map +1 -0
  35. package/dist/chunk-XJ434N7I.js +30 -0
  36. package/dist/chunk-XJ434N7I.js.map +1 -0
  37. package/dist/{chunk-EE75WRCM.cjs → chunk-XOWSXZYW.cjs} +8 -4
  38. package/dist/chunk-XOWSXZYW.cjs.map +1 -0
  39. package/dist/chunk-ZBPF7TLZ.cjs +16 -0
  40. package/dist/chunk-ZBPF7TLZ.cjs.map +1 -0
  41. package/dist/chunk-ZINKVJQU.js +67 -0
  42. package/dist/chunk-ZINKVJQU.js.map +1 -0
  43. package/dist/index.cjs +53 -30
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.cts +17 -9
  46. package/dist/index.d.ts +17 -9
  47. package/dist/index.js +8 -9
  48. package/dist/index.js.map +1 -1
  49. package/dist/layout/index.cjs +3 -3
  50. package/dist/layout/index.d.cts +1 -1
  51. package/dist/layout/index.d.ts +1 -1
  52. package/dist/layout/index.js +2 -2
  53. package/dist/portfolio/client.cjs +376 -12
  54. package/dist/portfolio/client.cjs.map +1 -1
  55. package/dist/portfolio/client.d.cts +27 -85
  56. package/dist/portfolio/client.d.ts +27 -85
  57. package/dist/portfolio/client.js +182 -4
  58. package/dist/portfolio/client.js.map +1 -1
  59. package/dist/portfolio/components/PortfolioAnalytics.cjs +87 -0
  60. package/dist/portfolio/components/PortfolioAnalytics.cjs.map +1 -0
  61. package/dist/portfolio/components/PortfolioAnalytics.d.cts +5 -0
  62. package/dist/portfolio/components/PortfolioAnalytics.d.ts +5 -0
  63. package/dist/portfolio/components/PortfolioAnalytics.js +9 -0
  64. package/dist/portfolio/components/PortfolioAnalytics.js.map +1 -0
  65. package/dist/portfolio/components/PortfolioErrorFallback.cjs +65 -0
  66. package/dist/portfolio/components/PortfolioErrorFallback.cjs.map +1 -0
  67. package/dist/portfolio/components/PortfolioErrorFallback.d.cts +22 -0
  68. package/dist/portfolio/components/PortfolioErrorFallback.d.ts +22 -0
  69. package/dist/portfolio/components/PortfolioErrorFallback.js +9 -0
  70. package/dist/portfolio/components/PortfolioErrorFallback.js.map +1 -0
  71. package/dist/portfolio/components/PortfolioLeadCTA.cjs +91 -0
  72. package/dist/portfolio/components/PortfolioLeadCTA.cjs.map +1 -0
  73. package/dist/portfolio/components/PortfolioLeadCTA.d.cts +34 -0
  74. package/dist/portfolio/components/PortfolioLeadCTA.d.ts +34 -0
  75. package/dist/portfolio/components/PortfolioLeadCTA.js +9 -0
  76. package/dist/portfolio/components/PortfolioLeadCTA.js.map +1 -0
  77. package/dist/portfolio/index.cjs +43 -19
  78. package/dist/portfolio/index.d.cts +210 -7
  79. package/dist/portfolio/index.d.ts +210 -7
  80. package/dist/portfolio/index.js +7 -7
  81. package/dist/portfolio/primitives/AnimatedCounter.cjs +88 -0
  82. package/dist/portfolio/primitives/AnimatedCounter.cjs.map +1 -0
  83. package/dist/portfolio/primitives/AnimatedCounter.d.cts +22 -0
  84. package/dist/portfolio/primitives/AnimatedCounter.d.ts +22 -0
  85. package/dist/portfolio/primitives/AnimatedCounter.js +68 -0
  86. package/dist/portfolio/primitives/AnimatedCounter.js.map +1 -0
  87. package/dist/portfolio/primitives/AnnotatedImage.cjs +320 -0
  88. package/dist/portfolio/primitives/AnnotatedImage.cjs.map +1 -0
  89. package/dist/portfolio/primitives/AnnotatedImage.d.cts +18 -0
  90. package/dist/portfolio/primitives/AnnotatedImage.d.ts +18 -0
  91. package/dist/portfolio/primitives/AnnotatedImage.js +264 -0
  92. package/dist/portfolio/primitives/AnnotatedImage.js.map +1 -0
  93. package/dist/portfolio/primitives/BeforeAfterSlider.cjs +348 -0
  94. package/dist/portfolio/primitives/BeforeAfterSlider.cjs.map +1 -0
  95. package/dist/portfolio/primitives/BeforeAfterSlider.d.cts +13 -0
  96. package/dist/portfolio/primitives/BeforeAfterSlider.d.ts +13 -0
  97. package/dist/portfolio/primitives/BeforeAfterSlider.js +292 -0
  98. package/dist/portfolio/primitives/BeforeAfterSlider.js.map +1 -0
  99. package/dist/portfolio/primitives/DeviceTrifolio.cjs +298 -0
  100. package/dist/portfolio/primitives/DeviceTrifolio.cjs.map +1 -0
  101. package/dist/portfolio/primitives/DeviceTrifolio.d.cts +14 -0
  102. package/dist/portfolio/primitives/DeviceTrifolio.d.ts +14 -0
  103. package/dist/portfolio/primitives/DeviceTrifolio.js +242 -0
  104. package/dist/portfolio/primitives/DeviceTrifolio.js.map +1 -0
  105. package/dist/portfolio/primitives/FrequencyBarSkeleton.cjs +88 -0
  106. package/dist/portfolio/primitives/FrequencyBarSkeleton.cjs.map +1 -0
  107. package/dist/portfolio/primitives/FrequencyBarSkeleton.d.cts +10 -0
  108. package/dist/portfolio/primitives/FrequencyBarSkeleton.d.ts +10 -0
  109. package/dist/portfolio/primitives/FrequencyBarSkeleton.js +68 -0
  110. package/dist/portfolio/primitives/FrequencyBarSkeleton.js.map +1 -0
  111. package/dist/portfolio/primitives/GlassCard.cjs +45 -0
  112. package/dist/portfolio/primitives/GlassCard.cjs.map +1 -0
  113. package/dist/portfolio/primitives/GlassCard.d.cts +11 -0
  114. package/dist/portfolio/primitives/GlassCard.d.ts +11 -0
  115. package/dist/portfolio/primitives/GlassCard.js +43 -0
  116. package/dist/portfolio/primitives/GlassCard.js.map +1 -0
  117. package/dist/portfolio/primitives/MetricBadge.cjs +74 -0
  118. package/dist/portfolio/primitives/MetricBadge.cjs.map +1 -0
  119. package/dist/portfolio/primitives/MetricBadge.d.cts +9 -0
  120. package/dist/portfolio/primitives/MetricBadge.d.ts +9 -0
  121. package/dist/portfolio/primitives/MetricBadge.js +54 -0
  122. package/dist/portfolio/primitives/MetricBadge.js.map +1 -0
  123. package/dist/portfolio/primitives/SVGChart.cjs +316 -0
  124. package/dist/portfolio/primitives/SVGChart.cjs.map +1 -0
  125. package/dist/portfolio/primitives/SVGChart.d.cts +18 -0
  126. package/dist/portfolio/primitives/SVGChart.d.ts +18 -0
  127. package/dist/portfolio/primitives/SVGChart.js +296 -0
  128. package/dist/portfolio/primitives/SVGChart.js.map +1 -0
  129. package/dist/portfolio/primitives/ScrollReveal.cjs +97 -0
  130. package/dist/portfolio/primitives/ScrollReveal.cjs.map +1 -0
  131. package/dist/portfolio/primitives/ScrollReveal.d.cts +27 -0
  132. package/dist/portfolio/primitives/ScrollReveal.d.ts +27 -0
  133. package/dist/portfolio/primitives/ScrollReveal.js +77 -0
  134. package/dist/portfolio/primitives/ScrollReveal.js.map +1 -0
  135. package/dist/portfolio/primitives/SplitHeadline.cjs +107 -0
  136. package/dist/portfolio/primitives/SplitHeadline.cjs.map +1 -0
  137. package/dist/portfolio/primitives/SplitHeadline.d.cts +24 -0
  138. package/dist/portfolio/primitives/SplitHeadline.d.ts +24 -0
  139. package/dist/portfolio/primitives/SplitHeadline.js +87 -0
  140. package/dist/portfolio/primitives/SplitHeadline.js.map +1 -0
  141. package/dist/portfolio/sections/BeforeAfterSection.cjs +271 -0
  142. package/dist/portfolio/sections/BeforeAfterSection.cjs.map +1 -0
  143. package/dist/portfolio/sections/BeforeAfterSection.d.cts +9 -0
  144. package/dist/portfolio/sections/BeforeAfterSection.d.ts +9 -0
  145. package/dist/{BeforeAfterSection-6BHFLY4Y.js → portfolio/sections/BeforeAfterSection.js} +66 -27
  146. package/dist/portfolio/sections/BeforeAfterSection.js.map +1 -0
  147. package/dist/portfolio/sections/CTASection.cjs +123 -0
  148. package/dist/portfolio/sections/CTASection.cjs.map +1 -0
  149. package/dist/portfolio/sections/CTASection.d.cts +9 -0
  150. package/dist/portfolio/sections/CTASection.d.ts +9 -0
  151. package/dist/portfolio/sections/CTASection.js +93 -0
  152. package/dist/portfolio/sections/CTASection.js.map +1 -0
  153. package/dist/{ChallengesSection-IZ3DHECS.cjs → portfolio/sections/ChallengesSection.cjs} +13 -7
  154. package/dist/portfolio/sections/ChallengesSection.cjs.map +1 -0
  155. package/dist/portfolio/sections/ChallengesSection.d.cts +9 -0
  156. package/dist/portfolio/sections/ChallengesSection.d.ts +9 -0
  157. package/dist/{ChallengesSection-GEQGVSJN.js → portfolio/sections/ChallengesSection.js} +6 -5
  158. package/dist/portfolio/sections/ChallengesSection.js.map +1 -0
  159. package/dist/portfolio/sections/ConversionFunnelSection.cjs +263 -0
  160. package/dist/portfolio/sections/ConversionFunnelSection.cjs.map +1 -0
  161. package/dist/portfolio/sections/ConversionFunnelSection.d.cts +9 -0
  162. package/dist/portfolio/sections/ConversionFunnelSection.d.ts +9 -0
  163. package/dist/{ConversionFunnelSection-D3GE4NKE.js → portfolio/sections/ConversionFunnelSection.js} +60 -56
  164. package/dist/portfolio/sections/ConversionFunnelSection.js.map +1 -0
  165. package/dist/{DesignSystemSection-KXIQXITF.cjs → portfolio/sections/DesignSystemSection.cjs} +13 -7
  166. package/dist/portfolio/sections/DesignSystemSection.cjs.map +1 -0
  167. package/dist/portfolio/sections/DesignSystemSection.d.cts +32 -0
  168. package/dist/portfolio/sections/DesignSystemSection.d.ts +32 -0
  169. package/dist/{DesignSystemSection-2R5BRBGO.js → portfolio/sections/DesignSystemSection.js} +5 -4
  170. package/dist/portfolio/sections/DesignSystemSection.js.map +1 -0
  171. package/dist/{DetailsSection-TTUZAPZZ.cjs → portfolio/sections/DetailsSection.cjs} +12 -6
  172. package/dist/portfolio/sections/DetailsSection.cjs.map +1 -0
  173. package/dist/portfolio/sections/DetailsSection.d.cts +9 -0
  174. package/dist/portfolio/sections/DetailsSection.d.ts +9 -0
  175. package/dist/{DetailsSection-A6PZQUQL.js → portfolio/sections/DetailsSection.js} +5 -4
  176. package/dist/portfolio/sections/DetailsSection.js.map +1 -0
  177. package/dist/portfolio/sections/FeatureSpotlightSection.cjs +267 -0
  178. package/dist/portfolio/sections/FeatureSpotlightSection.cjs.map +1 -0
  179. package/dist/portfolio/sections/FeatureSpotlightSection.d.cts +9 -0
  180. package/dist/portfolio/sections/FeatureSpotlightSection.d.ts +9 -0
  181. package/dist/{FeatureSpotlightSection-B7P3JGNL.js → portfolio/sections/FeatureSpotlightSection.js} +39 -33
  182. package/dist/portfolio/sections/FeatureSpotlightSection.js.map +1 -0
  183. package/dist/portfolio/sections/GallerySection.cjs +321 -0
  184. package/dist/portfolio/sections/GallerySection.cjs.map +1 -0
  185. package/dist/portfolio/sections/GallerySection.d.cts +9 -0
  186. package/dist/portfolio/sections/GallerySection.d.ts +9 -0
  187. package/dist/{GallerySection-VMKORC47.js → portfolio/sections/GallerySection.js} +65 -18
  188. package/dist/portfolio/sections/GallerySection.js.map +1 -0
  189. package/dist/portfolio/sections/HeroSection.cjs +180 -0
  190. package/dist/portfolio/sections/HeroSection.cjs.map +1 -0
  191. package/dist/portfolio/sections/HeroSection.d.cts +15 -0
  192. package/dist/portfolio/sections/HeroSection.d.ts +15 -0
  193. package/dist/portfolio/sections/HeroSection.js +171 -0
  194. package/dist/portfolio/sections/HeroSection.js.map +1 -0
  195. package/dist/{MetricsTimelineSection-4L6DUHJ5.cjs → portfolio/sections/MetricsTimelineSection.cjs} +102 -61
  196. package/dist/portfolio/sections/MetricsTimelineSection.cjs.map +1 -0
  197. package/dist/portfolio/sections/MetricsTimelineSection.d.cts +9 -0
  198. package/dist/portfolio/sections/MetricsTimelineSection.d.ts +9 -0
  199. package/dist/{MetricsTimelineSection-6BT5GNFV.js → portfolio/sections/MetricsTimelineSection.js} +45 -29
  200. package/dist/portfolio/sections/MetricsTimelineSection.js.map +1 -0
  201. package/dist/portfolio/sections/PerformanceSection.cjs +336 -0
  202. package/dist/portfolio/sections/PerformanceSection.cjs.map +1 -0
  203. package/dist/portfolio/sections/PerformanceSection.d.cts +22 -0
  204. package/dist/portfolio/sections/PerformanceSection.d.ts +22 -0
  205. package/dist/{PerformanceSection-MGCEIXDX.js → portfolio/sections/PerformanceSection.js} +59 -104
  206. package/dist/portfolio/sections/PerformanceSection.js.map +1 -0
  207. package/dist/{ResultsSection-XLGMMQKY.cjs → portfolio/sections/ResultsSection.cjs} +23 -10
  208. package/dist/portfolio/sections/ResultsSection.cjs.map +1 -0
  209. package/dist/portfolio/sections/ResultsSection.d.cts +13 -0
  210. package/dist/portfolio/sections/ResultsSection.d.ts +13 -0
  211. package/dist/{ResultsSection-DFUJ5U6M.js → portfolio/sections/ResultsSection.js} +14 -7
  212. package/dist/portfolio/sections/ResultsSection.js.map +1 -0
  213. package/dist/portfolio/sections/ServicesSection.cjs +129 -0
  214. package/dist/portfolio/sections/ServicesSection.cjs.map +1 -0
  215. package/dist/portfolio/sections/ServicesSection.d.cts +9 -0
  216. package/dist/portfolio/sections/ServicesSection.d.ts +9 -0
  217. package/dist/portfolio/sections/ServicesSection.js +122 -0
  218. package/dist/portfolio/sections/ServicesSection.js.map +1 -0
  219. package/dist/{SiteArchitectureSection-J7BPBERH.cjs → portfolio/sections/SiteArchitectureSection.cjs} +117 -93
  220. package/dist/portfolio/sections/SiteArchitectureSection.cjs.map +1 -0
  221. package/dist/portfolio/sections/SiteArchitectureSection.d.cts +21 -0
  222. package/dist/portfolio/sections/SiteArchitectureSection.d.ts +21 -0
  223. package/dist/{SiteArchitectureSection-TE22OAWV.js → portfolio/sections/SiteArchitectureSection.js} +47 -48
  224. package/dist/portfolio/sections/SiteArchitectureSection.js.map +1 -0
  225. package/dist/{SpeedComparisonSection-EZKFQVGW.cjs → portfolio/sections/SpeedComparisonSection.cjs} +13 -7
  226. package/dist/portfolio/sections/SpeedComparisonSection.cjs.map +1 -0
  227. package/dist/portfolio/sections/SpeedComparisonSection.d.cts +20 -0
  228. package/dist/portfolio/sections/SpeedComparisonSection.d.ts +20 -0
  229. package/dist/{SpeedComparisonSection-Y3K7OFZQ.js → portfolio/sections/SpeedComparisonSection.js} +6 -5
  230. package/dist/portfolio/sections/SpeedComparisonSection.js.map +1 -0
  231. package/dist/portfolio/sections/StrategySection.cjs +233 -0
  232. package/dist/portfolio/sections/StrategySection.cjs.map +1 -0
  233. package/dist/portfolio/sections/StrategySection.d.cts +9 -0
  234. package/dist/portfolio/sections/StrategySection.d.ts +9 -0
  235. package/dist/{StrategySection-DI5RSCJU.js → portfolio/sections/StrategySection.js} +60 -26
  236. package/dist/portfolio/sections/StrategySection.js.map +1 -0
  237. package/dist/portfolio/sections/TeamSection.cjs +162 -0
  238. package/dist/portfolio/sections/TeamSection.cjs.map +1 -0
  239. package/dist/portfolio/sections/TeamSection.d.cts +9 -0
  240. package/dist/portfolio/sections/TeamSection.d.ts +9 -0
  241. package/dist/portfolio/sections/TeamSection.js +106 -0
  242. package/dist/portfolio/sections/TeamSection.js.map +1 -0
  243. package/dist/portfolio/sections/TechStackSection.cjs +106 -0
  244. package/dist/portfolio/sections/TechStackSection.cjs.map +1 -0
  245. package/dist/portfolio/sections/TechStackSection.d.cts +9 -0
  246. package/dist/portfolio/sections/TechStackSection.d.ts +9 -0
  247. package/dist/portfolio/sections/TechStackSection.js +99 -0
  248. package/dist/portfolio/sections/TechStackSection.js.map +1 -0
  249. package/dist/{TestimonialSection-XPTFUQIN.cjs → portfolio/sections/TestimonialSection.cjs} +47 -28
  250. package/dist/portfolio/sections/TestimonialSection.cjs.map +1 -0
  251. package/dist/portfolio/sections/TestimonialSection.d.cts +9 -0
  252. package/dist/portfolio/sections/TestimonialSection.d.ts +9 -0
  253. package/dist/{TestimonialSection-6RGSMXQB.js → portfolio/sections/TestimonialSection.js} +40 -27
  254. package/dist/portfolio/sections/TestimonialSection.js.map +1 -0
  255. package/dist/portfolio/sections/VideoSection.cjs +181 -0
  256. package/dist/portfolio/sections/VideoSection.cjs.map +1 -0
  257. package/dist/portfolio/sections/VideoSection.d.cts +9 -0
  258. package/dist/portfolio/sections/VideoSection.d.ts +9 -0
  259. package/dist/{VideoSection-4A2HC6K6.js → portfolio/sections/VideoSection.js} +21 -13
  260. package/dist/portfolio/sections/VideoSection.js.map +1 -0
  261. package/dist/portfolio/server.cjs +56 -144
  262. package/dist/portfolio/server.cjs.map +1 -1
  263. package/dist/portfolio/server.d.cts +157 -7
  264. package/dist/portfolio/server.d.ts +157 -7
  265. package/dist/portfolio/server.js +3 -142
  266. package/dist/portfolio/server.js.map +1 -1
  267. package/dist/preview.cjs +56 -0
  268. package/dist/preview.cjs.map +1 -0
  269. package/dist/preview.d.cts +31 -0
  270. package/dist/preview.d.ts +31 -0
  271. package/dist/preview.js +54 -0
  272. package/dist/preview.js.map +1 -0
  273. package/dist/{types-DL4t_Cfa.d.ts → types-0tVPy4pU.d.cts} +7 -1
  274. package/dist/{types-DL4t_Cfa.d.cts → types-0tVPy4pU.d.ts} +7 -1
  275. package/dist/types-D0nb6KAx.d.cts +299 -0
  276. package/dist/types-D0nb6KAx.d.ts +299 -0
  277. package/package.json +38 -14
  278. package/templates/api-portfolio-preview.ts +6 -0
  279. package/templates/api-revalidate.ts +5 -0
  280. package/templates/work-category-page.tsx +40 -0
  281. package/templates/work-error.tsx +3 -0
  282. package/templates/work-loading.tsx +1 -0
  283. package/templates/work-page.tsx +37 -0
  284. package/templates/work-slug-loading.tsx +1 -0
  285. package/templates/work-slug-page.tsx +41 -0
  286. package/dist/BeforeAfterSection-6BHFLY4Y.js.map +0 -1
  287. package/dist/BeforeAfterSection-JTORBR3A.cjs +0 -181
  288. package/dist/BeforeAfterSection-JTORBR3A.cjs.map +0 -1
  289. package/dist/CTASection-4JKLXEUF.cjs +0 -111
  290. package/dist/CTASection-4JKLXEUF.cjs.map +0 -1
  291. package/dist/CTASection-BJA72XIL.js +0 -106
  292. package/dist/CTASection-BJA72XIL.js.map +0 -1
  293. package/dist/ChallengesSection-GEQGVSJN.js.map +0 -1
  294. package/dist/ChallengesSection-IZ3DHECS.cjs.map +0 -1
  295. package/dist/ConversionFunnelSection-AUUSJ5HQ.cjs +0 -209
  296. package/dist/ConversionFunnelSection-AUUSJ5HQ.cjs.map +0 -1
  297. package/dist/ConversionFunnelSection-D3GE4NKE.js.map +0 -1
  298. package/dist/DesignSystemSection-2R5BRBGO.js.map +0 -1
  299. package/dist/DesignSystemSection-KXIQXITF.cjs.map +0 -1
  300. package/dist/DetailsSection-A6PZQUQL.js.map +0 -1
  301. package/dist/DetailsSection-TTUZAPZZ.cjs.map +0 -1
  302. package/dist/FeatureSpotlightSection-B7P3JGNL.js.map +0 -1
  303. package/dist/FeatureSpotlightSection-WRHXS7TU.cjs +0 -210
  304. package/dist/FeatureSpotlightSection-WRHXS7TU.cjs.map +0 -1
  305. package/dist/GallerySection-VMKORC47.js.map +0 -1
  306. package/dist/GallerySection-WJ4PQDBI.cjs +0 -219
  307. package/dist/GallerySection-WJ4PQDBI.cjs.map +0 -1
  308. package/dist/MetricsTimelineSection-4L6DUHJ5.cjs.map +0 -1
  309. package/dist/MetricsTimelineSection-6BT5GNFV.js.map +0 -1
  310. package/dist/PerformanceSection-24TVVFZA.cjs +0 -356
  311. package/dist/PerformanceSection-24TVVFZA.cjs.map +0 -1
  312. package/dist/PerformanceSection-MGCEIXDX.js.map +0 -1
  313. package/dist/ResultsSection-DFUJ5U6M.js.map +0 -1
  314. package/dist/ResultsSection-XLGMMQKY.cjs.map +0 -1
  315. package/dist/ServicesSection-D5V3Q4GR.js +0 -118
  316. package/dist/ServicesSection-D5V3Q4GR.js.map +0 -1
  317. package/dist/ServicesSection-WJMGK2MF.cjs +0 -120
  318. package/dist/ServicesSection-WJMGK2MF.cjs.map +0 -1
  319. package/dist/SiteArchitectureSection-J7BPBERH.cjs.map +0 -1
  320. package/dist/SiteArchitectureSection-TE22OAWV.js.map +0 -1
  321. package/dist/SpeedComparisonSection-EZKFQVGW.cjs.map +0 -1
  322. package/dist/SpeedComparisonSection-Y3K7OFZQ.js.map +0 -1
  323. package/dist/StrategySection-CJ7Y6OFQ.cjs +0 -174
  324. package/dist/StrategySection-CJ7Y6OFQ.cjs.map +0 -1
  325. package/dist/StrategySection-DI5RSCJU.js.map +0 -1
  326. package/dist/TeamSection-DZVSNZE6.cjs +0 -112
  327. package/dist/TeamSection-DZVSNZE6.cjs.map +0 -1
  328. package/dist/TeamSection-HGKFW6PQ.js +0 -107
  329. package/dist/TeamSection-HGKFW6PQ.js.map +0 -1
  330. package/dist/TechStackSection-2AQ7RGY3.js +0 -93
  331. package/dist/TechStackSection-2AQ7RGY3.js.map +0 -1
  332. package/dist/TechStackSection-VTNNZR5V.cjs +0 -95
  333. package/dist/TechStackSection-VTNNZR5V.cjs.map +0 -1
  334. package/dist/TestimonialSection-6RGSMXQB.js.map +0 -1
  335. package/dist/TestimonialSection-XPTFUQIN.cjs.map +0 -1
  336. package/dist/VideoSection-4A2HC6K6.js.map +0 -1
  337. package/dist/VideoSection-G3DFS7UH.cjs +0 -118
  338. package/dist/VideoSection-G3DFS7UH.cjs.map +0 -1
  339. package/dist/chunk-2Y4O3LWM.js +0 -53
  340. package/dist/chunk-2Y4O3LWM.js.map +0 -1
  341. package/dist/chunk-633UMQQH.cjs +0 -31
  342. package/dist/chunk-633UMQQH.cjs.map +0 -1
  343. package/dist/chunk-7CFFAKDM.js +0 -74
  344. package/dist/chunk-7CFFAKDM.js.map +0 -1
  345. package/dist/chunk-APG2QSMB.js +0 -131
  346. package/dist/chunk-APG2QSMB.js.map +0 -1
  347. package/dist/chunk-AVCH4LMG.cjs +0 -620
  348. package/dist/chunk-AVCH4LMG.cjs.map +0 -1
  349. package/dist/chunk-AYBUHRFS.js +0 -613
  350. package/dist/chunk-AYBUHRFS.js.map +0 -1
  351. package/dist/chunk-EE75WRCM.cjs.map +0 -1
  352. package/dist/chunk-IKBK7HYX.cjs +0 -79
  353. package/dist/chunk-IKBK7HYX.cjs.map +0 -1
  354. package/dist/chunk-KEOHORIH.cjs +0 -79
  355. package/dist/chunk-KEOHORIH.cjs.map +0 -1
  356. package/dist/chunk-OA5ZM4OA.cjs +0 -139
  357. package/dist/chunk-OA5ZM4OA.cjs.map +0 -1
  358. package/dist/chunk-TVFXN6W6.js.map +0 -1
  359. package/dist/chunk-VVTK4OL6.js +0 -28
  360. package/dist/chunk-VVTK4OL6.js.map +0 -1
  361. package/dist/chunk-XCKXHK44.js +0 -15
  362. package/dist/chunk-XCKXHK44.js.map +0 -1
  363. package/dist/chunk-XONXEFJY.cjs +0 -58
  364. package/dist/chunk-XONXEFJY.cjs.map +0 -1
  365. package/dist/chunk-XQNJED46.cjs +0 -19
  366. package/dist/chunk-XQNJED46.cjs.map +0 -1
  367. package/dist/chunk-YB4B3OMC.js +0 -74
  368. package/dist/chunk-YB4B3OMC.js.map +0 -1
  369. package/dist/portfolio/sections.cjs +0 -20
  370. package/dist/portfolio/sections.cjs.map +0 -1
  371. package/dist/portfolio/sections.d.cts +0 -42
  372. package/dist/portfolio/sections.d.ts +0 -42
  373. package/dist/portfolio/sections.js +0 -4
  374. 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.1",
3
+ "version": "0.4.1",
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();