@sonordev/agency-site-kit 0.3.1 → 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 (369) 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 -31
  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 -9
  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 -20
  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 -7
  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 -144
  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 -142
  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-2Y4O3LWM.js +0 -53
  335. package/dist/chunk-2Y4O3LWM.js.map +0 -1
  336. package/dist/chunk-633UMQQH.cjs +0 -31
  337. package/dist/chunk-633UMQQH.cjs.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-AVCH4LMG.cjs +0 -620
  343. package/dist/chunk-AVCH4LMG.cjs.map +0 -1
  344. package/dist/chunk-AYBUHRFS.js +0 -613
  345. package/dist/chunk-AYBUHRFS.js.map +0 -1
  346. package/dist/chunk-EE75WRCM.cjs.map +0 -1
  347. package/dist/chunk-IKBK7HYX.cjs +0 -79
  348. package/dist/chunk-IKBK7HYX.cjs.map +0 -1
  349. package/dist/chunk-KEOHORIH.cjs +0 -79
  350. package/dist/chunk-KEOHORIH.cjs.map +0 -1
  351. package/dist/chunk-OA5ZM4OA.cjs +0 -139
  352. package/dist/chunk-OA5ZM4OA.cjs.map +0 -1
  353. package/dist/chunk-TVFXN6W6.js.map +0 -1
  354. package/dist/chunk-VVTK4OL6.js +0 -28
  355. package/dist/chunk-VVTK4OL6.js.map +0 -1
  356. package/dist/chunk-XCKXHK44.js +0 -15
  357. package/dist/chunk-XCKXHK44.js.map +0 -1
  358. package/dist/chunk-XONXEFJY.cjs +0 -58
  359. package/dist/chunk-XONXEFJY.cjs.map +0 -1
  360. package/dist/chunk-XQNJED46.cjs +0 -19
  361. package/dist/chunk-XQNJED46.cjs.map +0 -1
  362. package/dist/chunk-YB4B3OMC.js +0 -74
  363. package/dist/chunk-YB4B3OMC.js.map +0 -1
  364. package/dist/portfolio/sections.cjs +0 -20
  365. package/dist/portfolio/sections.cjs.map +0 -1
  366. package/dist/portfolio/sections.d.cts +0 -42
  367. package/dist/portfolio/sections.d.ts +0 -42
  368. package/dist/portfolio/sections.js +0 -4
  369. 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.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();