@sonordev/agency-site-kit 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/README.md +302 -0
  2. package/bin/setup.mjs +79 -0
  3. package/dist/{chunk-RXBK2EOE.js → chunk-4IES23GV.js} +3 -3
  4. package/dist/{chunk-RXBK2EOE.js.map → chunk-4IES23GV.js.map} +1 -1
  5. package/dist/chunk-4N7ENJ7L.cjs +108 -0
  6. package/dist/chunk-4N7ENJ7L.cjs.map +1 -0
  7. package/dist/{chunk-WNR4KNG4.cjs → chunk-5MEZU3OG.cjs} +4 -4
  8. package/dist/{chunk-WNR4KNG4.cjs.map → chunk-5MEZU3OG.cjs.map} +1 -1
  9. package/dist/chunk-7ZHRMWJU.cjs +306 -0
  10. package/dist/chunk-7ZHRMWJU.cjs.map +1 -0
  11. package/dist/chunk-CVT7I5BQ.js +71 -0
  12. package/dist/chunk-CVT7I5BQ.js.map +1 -0
  13. package/dist/chunk-HQGAX2LI.cjs +8 -0
  14. package/dist/chunk-HQGAX2LI.cjs.map +1 -0
  15. package/dist/chunk-KXLROAO5.js +291 -0
  16. package/dist/chunk-KXLROAO5.js.map +1 -0
  17. package/dist/chunk-L4EOQVRJ.js +6 -0
  18. package/dist/chunk-L4EOQVRJ.js.map +1 -0
  19. package/dist/chunk-L7E3UHQC.cjs +535 -0
  20. package/dist/chunk-L7E3UHQC.cjs.map +1 -0
  21. package/dist/chunk-NI4FVCLS.cjs +32 -0
  22. package/dist/chunk-NI4FVCLS.cjs.map +1 -0
  23. package/dist/chunk-NIZJLONK.js +106 -0
  24. package/dist/chunk-NIZJLONK.js.map +1 -0
  25. package/dist/chunk-QDXZ27R7.js +33 -0
  26. package/dist/chunk-QDXZ27R7.js.map +1 -0
  27. package/dist/{chunk-TVFXN6W6.js → chunk-QL6KVIFR.js} +8 -4
  28. package/dist/chunk-QL6KVIFR.js.map +1 -0
  29. package/dist/chunk-UNTOEWQL.js +504 -0
  30. package/dist/chunk-UNTOEWQL.js.map +1 -0
  31. package/dist/chunk-XJ434N7I.js +30 -0
  32. package/dist/chunk-XJ434N7I.js.map +1 -0
  33. package/dist/chunk-XLK77USA.js +45 -0
  34. package/dist/chunk-XLK77USA.js.map +1 -0
  35. package/dist/{chunk-EE75WRCM.cjs → chunk-XOWSXZYW.cjs} +8 -4
  36. package/dist/chunk-XOWSXZYW.cjs.map +1 -0
  37. package/dist/chunk-ZINKVJQU.js +67 -0
  38. package/dist/chunk-ZINKVJQU.js.map +1 -0
  39. package/dist/index.cjs +29 -30
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +17 -9
  42. package/dist/index.d.ts +17 -9
  43. package/dist/index.js +7 -8
  44. package/dist/index.js.map +1 -1
  45. package/dist/layout/index.cjs +3 -3
  46. package/dist/layout/index.d.cts +1 -1
  47. package/dist/layout/index.d.ts +1 -1
  48. package/dist/layout/index.js +2 -2
  49. package/dist/portfolio/client.cjs +342 -12
  50. package/dist/portfolio/client.cjs.map +1 -1
  51. package/dist/portfolio/client.d.cts +11 -88
  52. package/dist/portfolio/client.d.ts +11 -88
  53. package/dist/portfolio/client.js +150 -4
  54. package/dist/portfolio/client.js.map +1 -1
  55. package/dist/portfolio/components/PortfolioAnalytics.cjs +87 -0
  56. package/dist/portfolio/components/PortfolioAnalytics.cjs.map +1 -0
  57. package/dist/portfolio/components/PortfolioAnalytics.d.cts +5 -0
  58. package/dist/portfolio/components/PortfolioAnalytics.d.ts +5 -0
  59. package/dist/portfolio/components/PortfolioAnalytics.js +9 -0
  60. package/dist/portfolio/components/PortfolioAnalytics.js.map +1 -0
  61. package/dist/portfolio/components/PortfolioErrorFallback.cjs +65 -0
  62. package/dist/portfolio/components/PortfolioErrorFallback.cjs.map +1 -0
  63. package/dist/portfolio/components/PortfolioErrorFallback.d.cts +22 -0
  64. package/dist/portfolio/components/PortfolioErrorFallback.d.ts +22 -0
  65. package/dist/portfolio/components/PortfolioErrorFallback.js +9 -0
  66. package/dist/portfolio/components/PortfolioErrorFallback.js.map +1 -0
  67. package/dist/portfolio/components/PortfolioLeadCTA.cjs +91 -0
  68. package/dist/portfolio/components/PortfolioLeadCTA.cjs.map +1 -0
  69. package/dist/portfolio/components/PortfolioLeadCTA.d.cts +34 -0
  70. package/dist/portfolio/components/PortfolioLeadCTA.d.ts +34 -0
  71. package/dist/portfolio/components/PortfolioLeadCTA.js +9 -0
  72. package/dist/portfolio/components/PortfolioLeadCTA.js.map +1 -0
  73. package/dist/portfolio/index.cjs +19 -19
  74. package/dist/portfolio/index.d.cts +133 -7
  75. package/dist/portfolio/index.d.ts +133 -7
  76. package/dist/portfolio/index.js +6 -6
  77. package/dist/portfolio/primitives/AnimatedCounter.cjs +88 -0
  78. package/dist/portfolio/primitives/AnimatedCounter.cjs.map +1 -0
  79. package/dist/portfolio/primitives/AnimatedCounter.d.cts +22 -0
  80. package/dist/portfolio/primitives/AnimatedCounter.d.ts +22 -0
  81. package/dist/portfolio/primitives/AnimatedCounter.js +68 -0
  82. package/dist/portfolio/primitives/AnimatedCounter.js.map +1 -0
  83. package/dist/portfolio/primitives/AnnotatedImage.cjs +320 -0
  84. package/dist/portfolio/primitives/AnnotatedImage.cjs.map +1 -0
  85. package/dist/portfolio/primitives/AnnotatedImage.d.cts +18 -0
  86. package/dist/portfolio/primitives/AnnotatedImage.d.ts +18 -0
  87. package/dist/portfolio/primitives/AnnotatedImage.js +264 -0
  88. package/dist/portfolio/primitives/AnnotatedImage.js.map +1 -0
  89. package/dist/portfolio/primitives/BeforeAfterSlider.cjs +348 -0
  90. package/dist/portfolio/primitives/BeforeAfterSlider.cjs.map +1 -0
  91. package/dist/portfolio/primitives/BeforeAfterSlider.d.cts +13 -0
  92. package/dist/portfolio/primitives/BeforeAfterSlider.d.ts +13 -0
  93. package/dist/portfolio/primitives/BeforeAfterSlider.js +292 -0
  94. package/dist/portfolio/primitives/BeforeAfterSlider.js.map +1 -0
  95. package/dist/portfolio/primitives/DeviceTrifolio.cjs +298 -0
  96. package/dist/portfolio/primitives/DeviceTrifolio.cjs.map +1 -0
  97. package/dist/portfolio/primitives/DeviceTrifolio.d.cts +14 -0
  98. package/dist/portfolio/primitives/DeviceTrifolio.d.ts +14 -0
  99. package/dist/portfolio/primitives/DeviceTrifolio.js +242 -0
  100. package/dist/portfolio/primitives/DeviceTrifolio.js.map +1 -0
  101. package/dist/portfolio/primitives/FrequencyBarSkeleton.cjs +88 -0
  102. package/dist/portfolio/primitives/FrequencyBarSkeleton.cjs.map +1 -0
  103. package/dist/portfolio/primitives/FrequencyBarSkeleton.d.cts +10 -0
  104. package/dist/portfolio/primitives/FrequencyBarSkeleton.d.ts +10 -0
  105. package/dist/portfolio/primitives/FrequencyBarSkeleton.js +68 -0
  106. package/dist/portfolio/primitives/FrequencyBarSkeleton.js.map +1 -0
  107. package/dist/portfolio/primitives/GlassCard.cjs +45 -0
  108. package/dist/portfolio/primitives/GlassCard.cjs.map +1 -0
  109. package/dist/portfolio/primitives/GlassCard.d.cts +11 -0
  110. package/dist/portfolio/primitives/GlassCard.d.ts +11 -0
  111. package/dist/portfolio/primitives/GlassCard.js +43 -0
  112. package/dist/portfolio/primitives/GlassCard.js.map +1 -0
  113. package/dist/portfolio/primitives/MetricBadge.cjs +74 -0
  114. package/dist/portfolio/primitives/MetricBadge.cjs.map +1 -0
  115. package/dist/portfolio/primitives/MetricBadge.d.cts +9 -0
  116. package/dist/portfolio/primitives/MetricBadge.d.ts +9 -0
  117. package/dist/portfolio/primitives/MetricBadge.js +54 -0
  118. package/dist/portfolio/primitives/MetricBadge.js.map +1 -0
  119. package/dist/portfolio/primitives/SVGChart.cjs +316 -0
  120. package/dist/portfolio/primitives/SVGChart.cjs.map +1 -0
  121. package/dist/portfolio/primitives/SVGChart.d.cts +18 -0
  122. package/dist/portfolio/primitives/SVGChart.d.ts +18 -0
  123. package/dist/portfolio/primitives/SVGChart.js +296 -0
  124. package/dist/portfolio/primitives/SVGChart.js.map +1 -0
  125. package/dist/portfolio/primitives/ScrollReveal.cjs +97 -0
  126. package/dist/portfolio/primitives/ScrollReveal.cjs.map +1 -0
  127. package/dist/portfolio/primitives/ScrollReveal.d.cts +27 -0
  128. package/dist/portfolio/primitives/ScrollReveal.d.ts +27 -0
  129. package/dist/portfolio/primitives/ScrollReveal.js +77 -0
  130. package/dist/portfolio/primitives/ScrollReveal.js.map +1 -0
  131. package/dist/portfolio/primitives/SplitHeadline.cjs +107 -0
  132. package/dist/portfolio/primitives/SplitHeadline.cjs.map +1 -0
  133. package/dist/portfolio/primitives/SplitHeadline.d.cts +24 -0
  134. package/dist/portfolio/primitives/SplitHeadline.d.ts +24 -0
  135. package/dist/portfolio/primitives/SplitHeadline.js +87 -0
  136. package/dist/portfolio/primitives/SplitHeadline.js.map +1 -0
  137. package/dist/portfolio/sections/BeforeAfterSection.cjs +271 -0
  138. package/dist/portfolio/sections/BeforeAfterSection.cjs.map +1 -0
  139. package/dist/portfolio/sections/BeforeAfterSection.d.cts +9 -0
  140. package/dist/portfolio/sections/BeforeAfterSection.d.ts +9 -0
  141. package/dist/{BeforeAfterSection-6BHFLY4Y.js → portfolio/sections/BeforeAfterSection.js} +66 -27
  142. package/dist/portfolio/sections/BeforeAfterSection.js.map +1 -0
  143. package/dist/portfolio/sections/CTASection.cjs +123 -0
  144. package/dist/portfolio/sections/CTASection.cjs.map +1 -0
  145. package/dist/portfolio/sections/CTASection.d.cts +9 -0
  146. package/dist/portfolio/sections/CTASection.d.ts +9 -0
  147. package/dist/portfolio/sections/CTASection.js +93 -0
  148. package/dist/portfolio/sections/CTASection.js.map +1 -0
  149. package/dist/{ChallengesSection-IZ3DHECS.cjs → portfolio/sections/ChallengesSection.cjs} +12 -6
  150. package/dist/portfolio/sections/ChallengesSection.cjs.map +1 -0
  151. package/dist/portfolio/sections/ChallengesSection.d.cts +9 -0
  152. package/dist/portfolio/sections/ChallengesSection.d.ts +9 -0
  153. package/dist/{ChallengesSection-GEQGVSJN.js → portfolio/sections/ChallengesSection.js} +5 -4
  154. package/dist/portfolio/sections/ChallengesSection.js.map +1 -0
  155. package/dist/portfolio/sections/ConversionFunnelSection.cjs +263 -0
  156. package/dist/portfolio/sections/ConversionFunnelSection.cjs.map +1 -0
  157. package/dist/portfolio/sections/ConversionFunnelSection.d.cts +9 -0
  158. package/dist/portfolio/sections/ConversionFunnelSection.d.ts +9 -0
  159. package/dist/{ConversionFunnelSection-D3GE4NKE.js → portfolio/sections/ConversionFunnelSection.js} +60 -56
  160. package/dist/portfolio/sections/ConversionFunnelSection.js.map +1 -0
  161. package/dist/{DesignSystemSection-KXIQXITF.cjs → portfolio/sections/DesignSystemSection.cjs} +13 -7
  162. package/dist/portfolio/sections/DesignSystemSection.cjs.map +1 -0
  163. package/dist/portfolio/sections/DesignSystemSection.d.cts +32 -0
  164. package/dist/portfolio/sections/DesignSystemSection.d.ts +32 -0
  165. package/dist/{DesignSystemSection-2R5BRBGO.js → portfolio/sections/DesignSystemSection.js} +5 -4
  166. package/dist/portfolio/sections/DesignSystemSection.js.map +1 -0
  167. package/dist/{DetailsSection-TTUZAPZZ.cjs → portfolio/sections/DetailsSection.cjs} +12 -6
  168. package/dist/portfolio/sections/DetailsSection.cjs.map +1 -0
  169. package/dist/portfolio/sections/DetailsSection.d.cts +9 -0
  170. package/dist/portfolio/sections/DetailsSection.d.ts +9 -0
  171. package/dist/{DetailsSection-A6PZQUQL.js → portfolio/sections/DetailsSection.js} +5 -4
  172. package/dist/portfolio/sections/DetailsSection.js.map +1 -0
  173. package/dist/portfolio/sections/FeatureSpotlightSection.cjs +267 -0
  174. package/dist/portfolio/sections/FeatureSpotlightSection.cjs.map +1 -0
  175. package/dist/portfolio/sections/FeatureSpotlightSection.d.cts +9 -0
  176. package/dist/portfolio/sections/FeatureSpotlightSection.d.ts +9 -0
  177. package/dist/{FeatureSpotlightSection-B7P3JGNL.js → portfolio/sections/FeatureSpotlightSection.js} +39 -33
  178. package/dist/portfolio/sections/FeatureSpotlightSection.js.map +1 -0
  179. package/dist/portfolio/sections/GallerySection.cjs +321 -0
  180. package/dist/portfolio/sections/GallerySection.cjs.map +1 -0
  181. package/dist/portfolio/sections/GallerySection.d.cts +9 -0
  182. package/dist/portfolio/sections/GallerySection.d.ts +9 -0
  183. package/dist/{GallerySection-VMKORC47.js → portfolio/sections/GallerySection.js} +65 -18
  184. package/dist/portfolio/sections/GallerySection.js.map +1 -0
  185. package/dist/portfolio/sections/HeroSection.cjs +180 -0
  186. package/dist/portfolio/sections/HeroSection.cjs.map +1 -0
  187. package/dist/portfolio/sections/HeroSection.d.cts +15 -0
  188. package/dist/portfolio/sections/HeroSection.d.ts +15 -0
  189. package/dist/portfolio/sections/HeroSection.js +171 -0
  190. package/dist/portfolio/sections/HeroSection.js.map +1 -0
  191. package/dist/{MetricsTimelineSection-4L6DUHJ5.cjs → portfolio/sections/MetricsTimelineSection.cjs} +102 -61
  192. package/dist/portfolio/sections/MetricsTimelineSection.cjs.map +1 -0
  193. package/dist/portfolio/sections/MetricsTimelineSection.d.cts +9 -0
  194. package/dist/portfolio/sections/MetricsTimelineSection.d.ts +9 -0
  195. package/dist/{MetricsTimelineSection-6BT5GNFV.js → portfolio/sections/MetricsTimelineSection.js} +45 -29
  196. package/dist/portfolio/sections/MetricsTimelineSection.js.map +1 -0
  197. package/dist/{PerformanceSection-24TVVFZA.cjs → portfolio/sections/PerformanceSection.cjs} +136 -93
  198. package/dist/portfolio/sections/PerformanceSection.cjs.map +1 -0
  199. package/dist/portfolio/sections/PerformanceSection.d.cts +22 -0
  200. package/dist/portfolio/sections/PerformanceSection.d.ts +22 -0
  201. package/dist/{PerformanceSection-MGCEIXDX.js → portfolio/sections/PerformanceSection.js} +58 -40
  202. package/dist/portfolio/sections/PerformanceSection.js.map +1 -0
  203. package/dist/{ResultsSection-XLGMMQKY.cjs → portfolio/sections/ResultsSection.cjs} +22 -10
  204. package/dist/portfolio/sections/ResultsSection.cjs.map +1 -0
  205. package/dist/portfolio/sections/ResultsSection.d.cts +13 -0
  206. package/dist/portfolio/sections/ResultsSection.d.ts +13 -0
  207. package/dist/{ResultsSection-DFUJ5U6M.js → portfolio/sections/ResultsSection.js} +13 -7
  208. package/dist/portfolio/sections/ResultsSection.js.map +1 -0
  209. package/dist/portfolio/sections/ServicesSection.cjs +129 -0
  210. package/dist/portfolio/sections/ServicesSection.cjs.map +1 -0
  211. package/dist/portfolio/sections/ServicesSection.d.cts +9 -0
  212. package/dist/portfolio/sections/ServicesSection.d.ts +9 -0
  213. package/dist/portfolio/sections/ServicesSection.js +122 -0
  214. package/dist/portfolio/sections/ServicesSection.js.map +1 -0
  215. package/dist/{SiteArchitectureSection-J7BPBERH.cjs → portfolio/sections/SiteArchitectureSection.cjs} +116 -92
  216. package/dist/portfolio/sections/SiteArchitectureSection.cjs.map +1 -0
  217. package/dist/portfolio/sections/SiteArchitectureSection.d.cts +21 -0
  218. package/dist/portfolio/sections/SiteArchitectureSection.d.ts +21 -0
  219. package/dist/{SiteArchitectureSection-TE22OAWV.js → portfolio/sections/SiteArchitectureSection.js} +46 -47
  220. package/dist/portfolio/sections/SiteArchitectureSection.js.map +1 -0
  221. package/dist/{SpeedComparisonSection-EZKFQVGW.cjs → portfolio/sections/SpeedComparisonSection.cjs} +12 -6
  222. package/dist/portfolio/sections/SpeedComparisonSection.cjs.map +1 -0
  223. package/dist/portfolio/sections/SpeedComparisonSection.d.cts +20 -0
  224. package/dist/portfolio/sections/SpeedComparisonSection.d.ts +20 -0
  225. package/dist/{SpeedComparisonSection-Y3K7OFZQ.js → portfolio/sections/SpeedComparisonSection.js} +5 -4
  226. package/dist/portfolio/sections/SpeedComparisonSection.js.map +1 -0
  227. package/dist/portfolio/sections/StrategySection.cjs +233 -0
  228. package/dist/portfolio/sections/StrategySection.cjs.map +1 -0
  229. package/dist/portfolio/sections/StrategySection.d.cts +9 -0
  230. package/dist/portfolio/sections/StrategySection.d.ts +9 -0
  231. package/dist/{StrategySection-DI5RSCJU.js → portfolio/sections/StrategySection.js} +60 -26
  232. package/dist/portfolio/sections/StrategySection.js.map +1 -0
  233. package/dist/portfolio/sections/TeamSection.cjs +162 -0
  234. package/dist/portfolio/sections/TeamSection.cjs.map +1 -0
  235. package/dist/portfolio/sections/TeamSection.d.cts +9 -0
  236. package/dist/portfolio/sections/TeamSection.d.ts +9 -0
  237. package/dist/portfolio/sections/TeamSection.js +106 -0
  238. package/dist/portfolio/sections/TeamSection.js.map +1 -0
  239. package/dist/portfolio/sections/TechStackSection.cjs +106 -0
  240. package/dist/portfolio/sections/TechStackSection.cjs.map +1 -0
  241. package/dist/portfolio/sections/TechStackSection.d.cts +9 -0
  242. package/dist/portfolio/sections/TechStackSection.d.ts +9 -0
  243. package/dist/portfolio/sections/TechStackSection.js +99 -0
  244. package/dist/portfolio/sections/TechStackSection.js.map +1 -0
  245. package/dist/{TestimonialSection-XPTFUQIN.cjs → portfolio/sections/TestimonialSection.cjs} +47 -28
  246. package/dist/portfolio/sections/TestimonialSection.cjs.map +1 -0
  247. package/dist/portfolio/sections/TestimonialSection.d.cts +9 -0
  248. package/dist/portfolio/sections/TestimonialSection.d.ts +9 -0
  249. package/dist/{TestimonialSection-6RGSMXQB.js → portfolio/sections/TestimonialSection.js} +40 -27
  250. package/dist/portfolio/sections/TestimonialSection.js.map +1 -0
  251. package/dist/portfolio/sections/VideoSection.cjs +181 -0
  252. package/dist/portfolio/sections/VideoSection.cjs.map +1 -0
  253. package/dist/portfolio/sections/VideoSection.d.cts +9 -0
  254. package/dist/portfolio/sections/VideoSection.d.ts +9 -0
  255. package/dist/{VideoSection-4A2HC6K6.js → portfolio/sections/VideoSection.js} +21 -13
  256. package/dist/portfolio/sections/VideoSection.js.map +1 -0
  257. package/dist/portfolio/server.cjs +56 -139
  258. package/dist/portfolio/server.cjs.map +1 -1
  259. package/dist/portfolio/server.d.cts +157 -7
  260. package/dist/portfolio/server.d.ts +157 -7
  261. package/dist/portfolio/server.js +3 -137
  262. package/dist/portfolio/server.js.map +1 -1
  263. package/dist/preview.cjs +56 -0
  264. package/dist/preview.cjs.map +1 -0
  265. package/dist/preview.d.cts +31 -0
  266. package/dist/preview.d.ts +31 -0
  267. package/dist/preview.js +54 -0
  268. package/dist/preview.js.map +1 -0
  269. package/dist/{types-DL4t_Cfa.d.ts → types-0tVPy4pU.d.cts} +7 -1
  270. package/dist/{types-DL4t_Cfa.d.cts → types-0tVPy4pU.d.ts} +7 -1
  271. package/dist/types-D0nb6KAx.d.cts +299 -0
  272. package/dist/types-D0nb6KAx.d.ts +299 -0
  273. package/package.json +38 -14
  274. package/templates/api-portfolio-preview.ts +6 -0
  275. package/templates/api-revalidate.ts +5 -0
  276. package/templates/work-category-page.tsx +40 -0
  277. package/templates/work-error.tsx +3 -0
  278. package/templates/work-loading.tsx +1 -0
  279. package/templates/work-page.tsx +37 -0
  280. package/templates/work-slug-loading.tsx +1 -0
  281. package/templates/work-slug-page.tsx +41 -0
  282. package/dist/BeforeAfterSection-6BHFLY4Y.js.map +0 -1
  283. package/dist/BeforeAfterSection-JTORBR3A.cjs +0 -181
  284. package/dist/BeforeAfterSection-JTORBR3A.cjs.map +0 -1
  285. package/dist/CTASection-4JKLXEUF.cjs +0 -111
  286. package/dist/CTASection-4JKLXEUF.cjs.map +0 -1
  287. package/dist/CTASection-BJA72XIL.js +0 -106
  288. package/dist/CTASection-BJA72XIL.js.map +0 -1
  289. package/dist/ChallengesSection-GEQGVSJN.js.map +0 -1
  290. package/dist/ChallengesSection-IZ3DHECS.cjs.map +0 -1
  291. package/dist/ConversionFunnelSection-AUUSJ5HQ.cjs +0 -209
  292. package/dist/ConversionFunnelSection-AUUSJ5HQ.cjs.map +0 -1
  293. package/dist/ConversionFunnelSection-D3GE4NKE.js.map +0 -1
  294. package/dist/DesignSystemSection-2R5BRBGO.js.map +0 -1
  295. package/dist/DesignSystemSection-KXIQXITF.cjs.map +0 -1
  296. package/dist/DetailsSection-A6PZQUQL.js.map +0 -1
  297. package/dist/DetailsSection-TTUZAPZZ.cjs.map +0 -1
  298. package/dist/FeatureSpotlightSection-B7P3JGNL.js.map +0 -1
  299. package/dist/FeatureSpotlightSection-WRHXS7TU.cjs +0 -210
  300. package/dist/FeatureSpotlightSection-WRHXS7TU.cjs.map +0 -1
  301. package/dist/GallerySection-VMKORC47.js.map +0 -1
  302. package/dist/GallerySection-WJ4PQDBI.cjs +0 -219
  303. package/dist/GallerySection-WJ4PQDBI.cjs.map +0 -1
  304. package/dist/MetricsTimelineSection-4L6DUHJ5.cjs.map +0 -1
  305. package/dist/MetricsTimelineSection-6BT5GNFV.js.map +0 -1
  306. package/dist/PerformanceSection-24TVVFZA.cjs.map +0 -1
  307. package/dist/PerformanceSection-MGCEIXDX.js.map +0 -1
  308. package/dist/ResultsSection-DFUJ5U6M.js.map +0 -1
  309. package/dist/ResultsSection-XLGMMQKY.cjs.map +0 -1
  310. package/dist/ServicesSection-D5V3Q4GR.js +0 -118
  311. package/dist/ServicesSection-D5V3Q4GR.js.map +0 -1
  312. package/dist/ServicesSection-WJMGK2MF.cjs +0 -120
  313. package/dist/ServicesSection-WJMGK2MF.cjs.map +0 -1
  314. package/dist/SiteArchitectureSection-J7BPBERH.cjs.map +0 -1
  315. package/dist/SiteArchitectureSection-TE22OAWV.js.map +0 -1
  316. package/dist/SpeedComparisonSection-EZKFQVGW.cjs.map +0 -1
  317. package/dist/SpeedComparisonSection-Y3K7OFZQ.js.map +0 -1
  318. package/dist/StrategySection-CJ7Y6OFQ.cjs +0 -174
  319. package/dist/StrategySection-CJ7Y6OFQ.cjs.map +0 -1
  320. package/dist/StrategySection-DI5RSCJU.js.map +0 -1
  321. package/dist/TeamSection-DZVSNZE6.cjs +0 -112
  322. package/dist/TeamSection-DZVSNZE6.cjs.map +0 -1
  323. package/dist/TeamSection-HGKFW6PQ.js +0 -107
  324. package/dist/TeamSection-HGKFW6PQ.js.map +0 -1
  325. package/dist/TechStackSection-2AQ7RGY3.js +0 -93
  326. package/dist/TechStackSection-2AQ7RGY3.js.map +0 -1
  327. package/dist/TechStackSection-VTNNZR5V.cjs +0 -95
  328. package/dist/TechStackSection-VTNNZR5V.cjs.map +0 -1
  329. package/dist/TestimonialSection-6RGSMXQB.js.map +0 -1
  330. package/dist/TestimonialSection-XPTFUQIN.cjs.map +0 -1
  331. package/dist/VideoSection-4A2HC6K6.js.map +0 -1
  332. package/dist/VideoSection-G3DFS7UH.cjs +0 -118
  333. package/dist/VideoSection-G3DFS7UH.cjs.map +0 -1
  334. package/dist/chunk-2UNKXWQM.js +0 -630
  335. package/dist/chunk-2UNKXWQM.js.map +0 -1
  336. package/dist/chunk-2Y4O3LWM.js +0 -53
  337. package/dist/chunk-2Y4O3LWM.js.map +0 -1
  338. package/dist/chunk-7CFFAKDM.js +0 -74
  339. package/dist/chunk-7CFFAKDM.js.map +0 -1
  340. package/dist/chunk-APG2QSMB.js +0 -131
  341. package/dist/chunk-APG2QSMB.js.map +0 -1
  342. package/dist/chunk-EE75WRCM.cjs.map +0 -1
  343. package/dist/chunk-FDFVLYAM.cjs +0 -637
  344. package/dist/chunk-FDFVLYAM.cjs.map +0 -1
  345. package/dist/chunk-IKBK7HYX.cjs +0 -79
  346. package/dist/chunk-IKBK7HYX.cjs.map +0 -1
  347. package/dist/chunk-KEOHORIH.cjs +0 -79
  348. package/dist/chunk-KEOHORIH.cjs.map +0 -1
  349. package/dist/chunk-OA5ZM4OA.cjs +0 -139
  350. package/dist/chunk-OA5ZM4OA.cjs.map +0 -1
  351. package/dist/chunk-TVFXN6W6.js.map +0 -1
  352. package/dist/chunk-XCKXHK44.js +0 -15
  353. package/dist/chunk-XCKXHK44.js.map +0 -1
  354. package/dist/chunk-XONXEFJY.cjs +0 -58
  355. package/dist/chunk-XONXEFJY.cjs.map +0 -1
  356. package/dist/chunk-XQNJED46.cjs +0 -19
  357. package/dist/chunk-XQNJED46.cjs.map +0 -1
  358. package/dist/chunk-YB4B3OMC.js +0 -74
  359. package/dist/chunk-YB4B3OMC.js.map +0 -1
  360. package/dist/portfolio/sections.cjs +0 -20
  361. package/dist/portfolio/sections.cjs.map +0 -1
  362. package/dist/portfolio/sections.d.cts +0 -42
  363. package/dist/portfolio/sections.d.ts +0 -42
  364. package/dist/portfolio/sections.js +0 -4
  365. package/dist/portfolio/sections.js.map +0 -1
@@ -1,637 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkXONXEFJY_cjs = require('./chunk-XONXEFJY.cjs');
4
- var chunkKEOHORIH_cjs = require('./chunk-KEOHORIH.cjs');
5
- var chunkIKBK7HYX_cjs = require('./chunk-IKBK7HYX.cjs');
6
- var dynamic = require('next/dynamic');
7
- var react = require('react');
8
- var gsap2 = require('gsap');
9
- var ScrollTrigger = require('gsap/ScrollTrigger');
10
- var jsxRuntime = require('react/jsx-runtime');
11
-
12
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
-
14
- var dynamic__default = /*#__PURE__*/_interopDefault(dynamic);
15
- var gsap2__default = /*#__PURE__*/_interopDefault(gsap2);
16
-
17
- function SplitHeadline({
18
- children,
19
- tag: Tag = "h2",
20
- className,
21
- style,
22
- delay = 0,
23
- duration = 0.8,
24
- staggerAmount = 0.02
25
- }) {
26
- const ref = react.useRef(null);
27
- const splitContent = react.useMemo(() => {
28
- const words = children.split(" ");
29
- return words.map((word, wi) => /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: [
30
- word.split("").map((char, ci) => /* @__PURE__ */ jsxRuntime.jsx(
31
- "span",
32
- {
33
- className: "split-char",
34
- style: { display: "inline-block" },
35
- children: char
36
- },
37
- ci
38
- )),
39
- wi < words.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block" }, children: "\xA0" })
40
- ] }, wi));
41
- }, [children]);
42
- react.useEffect(() => {
43
- gsap2__default.default.registerPlugin(ScrollTrigger.ScrollTrigger);
44
- const el = ref.current;
45
- if (!el) return;
46
- const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
47
- if (prefersReducedMotion) {
48
- gsap2__default.default.set(el.querySelectorAll(".split-char"), { opacity: 1, y: 0 });
49
- return;
50
- }
51
- const chars = el.querySelectorAll(".split-char");
52
- const ctx = gsap2__default.default.context(() => {
53
- gsap2__default.default.fromTo(
54
- chars,
55
- {
56
- opacity: 0,
57
- y: 20
58
- },
59
- {
60
- opacity: 1,
61
- y: 0,
62
- duration,
63
- delay,
64
- stagger: staggerAmount,
65
- ease: "power2.out",
66
- scrollTrigger: {
67
- trigger: el,
68
- start: "top 85%",
69
- toggleActions: "play none none none"
70
- }
71
- }
72
- );
73
- }, el);
74
- return () => ctx.revert();
75
- }, [delay, duration, staggerAmount]);
76
- return /* @__PURE__ */ jsxRuntime.jsx(
77
- Tag,
78
- {
79
- ref,
80
- className,
81
- style: {
82
- overflowX: "clip",
83
- overflowY: "hidden",
84
- overflowWrap: "break-word",
85
- wordBreak: "break-word",
86
- ...style
87
- },
88
- children: splitContent
89
- }
90
- );
91
- }
92
- function useScaledIframe(viewportWidth) {
93
- const containerRef = react.useRef(null);
94
- const [scale, setScale] = react.useState(1);
95
- react.useEffect(() => {
96
- const container = containerRef.current;
97
- if (!container) return;
98
- const updateScale = () => {
99
- const containerWidth = container.offsetWidth;
100
- setScale(containerWidth / viewportWidth);
101
- };
102
- updateScale();
103
- const resizeObserver = new ResizeObserver(updateScale);
104
- resizeObserver.observe(container);
105
- return () => resizeObserver.disconnect();
106
- }, [viewportWidth]);
107
- return { containerRef, scale };
108
- }
109
- function useIframeLoadDetection() {
110
- const [loaded, setLoaded] = react.useState(false);
111
- const iframeRef = react.useRef(null);
112
- const onLoad = react.useCallback(() => {
113
- const iframe = iframeRef.current;
114
- if (!iframe) return;
115
- setTimeout(() => {
116
- try {
117
- const doc = iframe.contentDocument;
118
- if (!doc?.body) {
119
- return;
120
- }
121
- const numElements = doc.querySelectorAll("*").length;
122
- if (numElements > 20) setLoaded(true);
123
- } catch {
124
- setLoaded(true);
125
- }
126
- }, 1500);
127
- }, []);
128
- return { iframeRef, loaded, onLoad };
129
- }
130
- function MacBookFrame({ url, screenshot }) {
131
- const viewportWidth = 1440;
132
- const viewportHeight = 900;
133
- const { containerRef, scale } = useScaledIframe(viewportWidth);
134
- const { iframeRef, loaded: iframeLoaded, onLoad: onIframeLoad } = useIframeLoadDetection();
135
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full", children: [
136
- /* @__PURE__ */ jsxRuntime.jsx(
137
- "div",
138
- {
139
- className: "relative rounded-t-[10px] p-[4px] pb-0",
140
- style: {
141
- background: "linear-gradient(135deg, #e8e8ed 0%, #d1d1d6 100%)",
142
- boxShadow: "0 -4px 30px rgba(0,0,0,0.3), inset 0 1px 0 rgba(255,255,255,0.9)"
143
- },
144
- children: /* @__PURE__ */ jsxRuntime.jsxs(
145
- "div",
146
- {
147
- className: "relative rounded-t-[7px] px-[8px] pt-[8px] pb-0",
148
- style: { background: "#0a0a0a" },
149
- children: [
150
- /* @__PURE__ */ jsxRuntime.jsx(
151
- "div",
152
- {
153
- className: "absolute top-0 left-1/2 -translate-x-1/2 w-[70px] h-[18px] flex items-center justify-center z-10",
154
- style: { background: "#0a0a0a", borderRadius: "0 0 10px 10px" },
155
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-[5px] h-[5px] rounded-full", style: { background: "#2a3a2a", boxShadow: "0 0 0 1px #1a1a1a" } })
156
- }
157
- ),
158
- /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: "relative overflow-hidden rounded-t-[3px]", style: { aspectRatio: `${viewportWidth}/${viewportHeight}`, background: "#0a0a0a" }, children: [
159
- screenshot && /* @__PURE__ */ jsxRuntime.jsx("img", { src: screenshot, alt: "Desktop preview", style: { width: "100%", height: "100%", objectFit: "cover", objectPosition: "top center", display: "block", position: "absolute", inset: 0, zIndex: 2, opacity: iframeLoaded ? 0 : 1, transition: "opacity 0.8s ease", pointerEvents: "none" } }),
160
- url && /* @__PURE__ */ jsxRuntime.jsx("iframe", { src: url, title: "Desktop", loading: "eager", scrolling: "no", tabIndex: -1, sandbox: "allow-scripts allow-same-origin", ref: iframeRef, onLoad: onIframeLoad, className: "border-0 pointer-events-none", style: { position: "absolute", top: 0, left: 0, width: `${viewportWidth}px`, height: `${viewportHeight}px`, transformOrigin: "top left", transform: `scale(${scale})` } })
161
- ] })
162
- ]
163
- }
164
- )
165
- }
166
- ),
167
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[8px]", style: { background: "#0a0a0a", boxShadow: "0 1px 4px rgba(0,0,0,0.3)" } }),
168
- /* @__PURE__ */ jsxRuntime.jsx(
169
- "div",
170
- {
171
- className: "relative h-[12px] rounded-b-[10px]",
172
- style: {
173
- background: "linear-gradient(to bottom, #e0e0e5, #c8c8cd 20%, #b0b0b5 80%, #a0a0a5)",
174
- boxShadow: "0 4px 15px rgba(0,0,0,0.3)"
175
- },
176
- children: /* @__PURE__ */ jsxRuntime.jsx(
177
- "div",
178
- {
179
- className: "absolute top-0 left-1/2 -translate-x-1/2 w-[25%] h-[4px] rounded-b-[4px]",
180
- style: { background: "linear-gradient(to bottom, #909095, #a8a8ad)" }
181
- }
182
- )
183
- }
184
- )
185
- ] });
186
- }
187
- function IPadFrame({ url, screenshot }) {
188
- const viewportWidth = 768;
189
- const viewportHeight = 1024;
190
- const { containerRef, scale } = useScaledIframe(viewportWidth);
191
- const { iframeRef, loaded: iframeLoaded, onLoad: onIframeLoad } = useIframeLoadDetection();
192
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative p-[1.5%]", style: { background: "linear-gradient(135deg, #e8e8ed 0%, #d1d1d6 100%)", borderRadius: "8% / 6%", boxShadow: "0 30px 60px -15px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.9) inset, inset 0 1px 0 rgba(255,255,255,0.8)" }, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative p-[2%]", style: { background: "#0a0a0a", borderRadius: "6% / 4.5%" }, children: [
193
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-[1.2%] left-1/2 -translate-x-1/2 w-[1.8%] aspect-square rounded-full z-10", style: { background: "#1a1a1f" } }),
194
- /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: "relative overflow-hidden", style: { borderRadius: "2%", aspectRatio: `${viewportWidth}/${viewportHeight}`, background: "#0a0a0a" }, children: [
195
- screenshot && /* @__PURE__ */ jsxRuntime.jsx("img", { src: screenshot, alt: "Tablet preview", style: { width: "100%", height: "100%", objectFit: "cover", objectPosition: "top center", display: "block", position: "absolute", inset: 0, zIndex: 2, opacity: iframeLoaded ? 0 : 1, transition: "opacity 0.8s ease", pointerEvents: "none" } }),
196
- url && /* @__PURE__ */ jsxRuntime.jsx("iframe", { src: url, title: "Tablet", loading: "eager", scrolling: "no", tabIndex: -1, sandbox: "allow-scripts allow-same-origin", ref: iframeRef, onLoad: onIframeLoad, className: "border-0 pointer-events-none", style: { position: "absolute", top: 0, left: 0, width: `${viewportWidth}px`, height: `${viewportHeight}px`, transformOrigin: "top left", transform: `scale(${scale})` } })
197
- ] })
198
- ] }) });
199
- }
200
- function IPhoneFrame({ url, screenshot }) {
201
- const viewportWidth = 393;
202
- const viewportHeight = 852;
203
- const { containerRef, scale } = useScaledIframe(viewportWidth);
204
- const { iframeRef, loaded: iframeLoaded, onLoad: onIframeLoad } = useIframeLoadDetection();
205
- return /* @__PURE__ */ jsxRuntime.jsxs(
206
- "div",
207
- {
208
- className: "relative p-[2.5%]",
209
- style: {
210
- background: "linear-gradient(135deg, #e8e8ed 0%, #d1d1d6 100%)",
211
- borderRadius: "18% / 8%",
212
- boxShadow: "0 30px 60px -15px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.9) inset, inset 0 1px 0 rgba(255,255,255,0.8)"
213
- },
214
- children: [
215
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-0 top-[18%] w-[1%] h-[6%] rounded-l-sm", style: { background: "#c8c8cd" } }),
216
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-0 top-[26%] w-[1%] h-[10%] rounded-l-sm", style: { background: "#c8c8cd" } }),
217
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-0 top-[38%] w-[1%] h-[10%] rounded-l-sm", style: { background: "#c8c8cd" } }),
218
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute right-0 top-[22%] w-[1%] h-[12%] rounded-r-sm", style: { background: "#c8c8cd" } }),
219
- /* @__PURE__ */ jsxRuntime.jsxs(
220
- "div",
221
- {
222
- className: "relative p-[3%]",
223
- style: { background: "#0a0a0a", borderRadius: "14% / 6%" },
224
- children: [
225
- /* @__PURE__ */ jsxRuntime.jsx(
226
- "div",
227
- {
228
- className: "absolute top-[2.5%] left-1/2 -translate-x-1/2 w-[28%] h-[3.5%] rounded-full z-10",
229
- style: { background: "#1a1a1a" }
230
- }
231
- ),
232
- /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: "relative overflow-hidden", style: { borderRadius: "8% / 4%", aspectRatio: `${viewportWidth}/${viewportHeight}`, background: "#0a0a0a" }, children: [
233
- screenshot && /* @__PURE__ */ jsxRuntime.jsx("img", { src: screenshot, alt: "Mobile preview", style: { width: "100%", height: "100%", objectFit: "cover", objectPosition: "top center", display: "block", position: "absolute", inset: 0, zIndex: 2, opacity: iframeLoaded ? 0 : 1, transition: "opacity 0.8s ease", pointerEvents: "none" } }),
234
- url && /* @__PURE__ */ jsxRuntime.jsx("iframe", { src: url, title: "Mobile", loading: "eager", scrolling: "no", tabIndex: -1, sandbox: "allow-scripts allow-same-origin", ref: iframeRef, onLoad: onIframeLoad, className: "border-0 pointer-events-none", style: { position: "absolute", top: 0, left: 0, width: `${viewportWidth}px`, height: `${viewportHeight}px`, transformOrigin: "top left", transform: `scale(${scale})` } })
235
- ] }),
236
- /* @__PURE__ */ jsxRuntime.jsx(
237
- "div",
238
- {
239
- className: "absolute bottom-[2%] left-1/2 -translate-x-1/2 w-[34%] h-[1%] rounded-full",
240
- style: { background: "rgba(255,255,255,0.25)" }
241
- }
242
- )
243
- ]
244
- }
245
- )
246
- ]
247
- }
248
- );
249
- }
250
- function DeviceTrifolio({
251
- url,
252
- screenshots,
253
- className = "",
254
- disableAnimation = false
255
- }) {
256
- const trifolioRef = react.useRef(null);
257
- const frameUrl = url || "";
258
- react.useEffect(() => {
259
- gsap2__default.default.registerPlugin(ScrollTrigger.ScrollTrigger);
260
- const container = trifolioRef.current;
261
- if (!container || disableAnimation) return;
262
- const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
263
- if (prefersReducedMotion) return;
264
- const macbook = container.querySelector('[data-device="macbook"]');
265
- const ipad = container.querySelector('[data-device="ipad"]');
266
- const iphone = container.querySelector('[data-device="iphone"]');
267
- if (!macbook || !ipad || !iphone) return;
268
- const ctx = gsap2__default.default.context(() => {
269
- gsap2__default.default.set(container, { opacity: 0 });
270
- gsap2__default.default.set(macbook, { opacity: 0, y: 40 });
271
- gsap2__default.default.set(ipad, { opacity: 0, x: -60, y: 30 });
272
- gsap2__default.default.set(iphone, { opacity: 0, x: 60, y: 30 });
273
- const tl = gsap2__default.default.timeline({
274
- scrollTrigger: {
275
- trigger: container,
276
- start: "top bottom",
277
- toggleActions: "play none none none"
278
- }
279
- });
280
- tl.to(container, { opacity: 1, duration: 0.3 }).to(macbook, { opacity: 1, y: 0, duration: 0.7, ease: "power2.out" }, 0.1).to(ipad, { opacity: 1, x: 0, y: 0, duration: 0.6, ease: "power2.out" }, 0.25).to(iphone, { opacity: 1, x: 0, y: 0, duration: 0.6, ease: "power2.out" }, 0.4);
281
- }, container);
282
- return () => ctx.revert();
283
- }, [disableAnimation]);
284
- return /* @__PURE__ */ jsxRuntime.jsxs(
285
- "div",
286
- {
287
- ref: trifolioRef,
288
- "data-screenshot-target": "device-trifolio",
289
- className: `relative w-full min-w-0 max-w-full overflow-x-clip ${className}`,
290
- style: { aspectRatio: "11/5", minHeight: "200px" },
291
- children: [
292
- /* @__PURE__ */ jsxRuntime.jsx(
293
- "div",
294
- {
295
- "data-device": "macbook",
296
- className: "absolute left-1/2 -translate-x-1/2 bottom-0 w-[65%] z-10",
297
- children: /* @__PURE__ */ jsxRuntime.jsx(MacBookFrame, { url: frameUrl, screenshot: screenshots?.desktop })
298
- }
299
- ),
300
- /* @__PURE__ */ jsxRuntime.jsx(
301
- "div",
302
- {
303
- "data-device": "ipad",
304
- className: "absolute left-[8%] bottom-0 w-[28%] z-20",
305
- children: /* @__PURE__ */ jsxRuntime.jsx(IPadFrame, { url: frameUrl, screenshot: screenshots?.tablet })
306
- }
307
- ),
308
- /* @__PURE__ */ jsxRuntime.jsx(
309
- "div",
310
- {
311
- "data-device": "iphone",
312
- className: "absolute right-[10%] bottom-0 w-[14%] z-30",
313
- children: /* @__PURE__ */ jsxRuntime.jsx(IPhoneFrame, { url: frameUrl, screenshot: screenshots?.mobile })
314
- }
315
- )
316
- ]
317
- }
318
- );
319
- }
320
- function HeroSection({ data, screenshots, liveUrl }) {
321
- const bgRef = react.useRef(null);
322
- const deviceRef = react.useRef(null);
323
- const shots = screenshots || data.screenshots;
324
- const url = liveUrl || data.liveUrl;
325
- react.useEffect(() => {
326
- gsap2__default.default.registerPlugin(ScrollTrigger.ScrollTrigger);
327
- const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
328
- if (prefersReducedMotion) return;
329
- const ctx = gsap2__default.default.context(() => {
330
- if (bgRef.current) {
331
- gsap2__default.default.to(bgRef.current, {
332
- yPercent: 30,
333
- ease: "none",
334
- scrollTrigger: {
335
- trigger: bgRef.current.parentElement,
336
- start: "top top",
337
- end: "bottom top",
338
- scrub: true
339
- }
340
- });
341
- }
342
- });
343
- return () => ctx.revert();
344
- }, []);
345
- return /* @__PURE__ */ jsxRuntime.jsxs(
346
- "section",
347
- {
348
- className: "relative overflow-hidden w-full",
349
- style: {
350
- minHeight: "90vh",
351
- display: "flex",
352
- flexDirection: "column",
353
- justifyContent: "center",
354
- background: "var(--sk-bg, #0a0a0a)"
355
- },
356
- children: [
357
- /* @__PURE__ */ jsxRuntime.jsx(
358
- "div",
359
- {
360
- ref: bgRef,
361
- className: "absolute inset-0 pointer-events-none",
362
- style: {
363
- background: `radial-gradient(ellipse at 50% 20%, color-mix(in srgb, var(--sk-primary, #6366f1) 15%, transparent) 0%, transparent 70%)`,
364
- willChange: "transform"
365
- }
366
- }
367
- ),
368
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 max-w-7xl mx-auto w-full min-w-0 px-4 sm:px-6 py-24 lg:py-32", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 min-w-0 lg:grid-cols-2 gap-12 lg:gap-16 items-start", children: [
369
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 max-w-full flex-col gap-6", children: [
370
- /* @__PURE__ */ jsxRuntime.jsx(chunkIKBK7HYX_cjs.ScrollReveal, { y: 20, duration: 0.6, children: /* @__PURE__ */ jsxRuntime.jsx(
371
- "span",
372
- {
373
- className: "inline-flex items-center self-start px-4 py-1.5 rounded-full text-sm font-medium",
374
- style: {
375
- background: "color-mix(in srgb, var(--sk-primary, #6366f1) 15%, transparent)",
376
- color: "var(--sk-primary, #6366f1)",
377
- border: "1px solid color-mix(in srgb, var(--sk-primary, #6366f1) 25%, transparent)"
378
- },
379
- children: data.category?.replace(/[-_]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase())
380
- }
381
- ) }),
382
- /* @__PURE__ */ jsxRuntime.jsx(
383
- SplitHeadline,
384
- {
385
- tag: "h1",
386
- className: "text-4xl md:text-5xl lg:text-6xl font-bold leading-tight",
387
- style: {
388
- color: "var(--sk-text-primary, #ffffff)",
389
- fontFamily: "var(--sk-font-heading, inherit)"
390
- },
391
- children: data.headline
392
- }
393
- ),
394
- /* @__PURE__ */ jsxRuntime.jsx(chunkIKBK7HYX_cjs.ScrollReveal, { y: 20, delay: 0.2, children: /* @__PURE__ */ jsxRuntime.jsx(
395
- "p",
396
- {
397
- className: "text-xl md:text-2xl font-medium",
398
- style: { color: "var(--sk-text-secondary, #a1a1aa)" },
399
- children: data.subheadline
400
- }
401
- ) }),
402
- /* @__PURE__ */ jsxRuntime.jsx(chunkIKBK7HYX_cjs.ScrollReveal, { y: 20, delay: 0.3, children: /* @__PURE__ */ jsxRuntime.jsx(
403
- "p",
404
- {
405
- className: "text-base md:text-lg leading-relaxed",
406
- style: { color: "var(--sk-text-tertiary, #71717a)" },
407
- children: data.description
408
- }
409
- ) }),
410
- data.services.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkIKBK7HYX_cjs.ScrollReveal, { y: 20, delay: 0.4, stagger: 0.05, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: data.services.map((service) => /* @__PURE__ */ jsxRuntime.jsx(
411
- "span",
412
- {
413
- className: "px-3 py-1 rounded-full text-xs font-medium",
414
- style: {
415
- background: "var(--sk-surface, rgba(255,255,255,0.05))",
416
- color: "var(--sk-text-secondary, #a1a1aa)",
417
- border: "1px solid var(--sk-border, rgba(255,255,255,0.1))"
418
- },
419
- children: service
420
- },
421
- service
422
- )) }) }),
423
- url && /* @__PURE__ */ jsxRuntime.jsx(chunkIKBK7HYX_cjs.ScrollReveal, { y: 20, delay: 0.5, children: /* @__PURE__ */ jsxRuntime.jsxs(
424
- "a",
425
- {
426
- href: url,
427
- target: "_blank",
428
- rel: "noopener noreferrer",
429
- className: "inline-flex items-center gap-2 self-start px-6 py-3 rounded-xl text-sm font-semibold transition-opacity hover:opacity-90",
430
- style: {
431
- background: "var(--sk-primary, #6366f1)",
432
- color: "#ffffff"
433
- },
434
- children: [
435
- "View Live Site",
436
- /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 3h7v7M13 3L3 13", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })
437
- ]
438
- }
439
- ) })
440
- ] }),
441
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 max-w-full flex-col gap-10 lg:pt-8", children: [
442
- (url || shots?.desktop || shots?.tablet || shots?.mobile) && /* @__PURE__ */ jsxRuntime.jsx("div", { ref: deviceRef, className: "min-w-0 max-w-full", children: /* @__PURE__ */ jsxRuntime.jsx(
443
- DeviceTrifolio,
444
- {
445
- screenshots: {
446
- desktop: shots?.desktop,
447
- tablet: shots?.tablet,
448
- mobile: shots?.mobile
449
- },
450
- url
451
- }
452
- ) }),
453
- data.kpis.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkIKBK7HYX_cjs.ScrollReveal, { y: 30, delay: 0.6, stagger: 0.1, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-3", children: data.kpis.map((kpi, i) => /* @__PURE__ */ jsxRuntime.jsxs(chunkKEOHORIH_cjs.GlassCard, { padding: "sm", hover: false, className: "text-center", children: [
454
- /* @__PURE__ */ jsxRuntime.jsx(
455
- "div",
456
- {
457
- className: "text-2xl md:text-3xl font-bold",
458
- style: { color: "var(--sk-primary, #6366f1)" },
459
- children: /* @__PURE__ */ jsxRuntime.jsx(
460
- chunkXONXEFJY_cjs.AnimatedCounter,
461
- {
462
- value: kpi.value,
463
- suffix: kpi.suffix,
464
- prefix: kpi.prefix,
465
- duration: 2.5
466
- }
467
- )
468
- }
469
- ),
470
- /* @__PURE__ */ jsxRuntime.jsx(
471
- "div",
472
- {
473
- className: "text-xs mt-1 font-medium",
474
- style: { color: "var(--sk-text-secondary, #a1a1aa)" },
475
- children: kpi.label
476
- }
477
- )
478
- ] }, i)) }) })
479
- ] })
480
- ] }) })
481
- ]
482
- }
483
- );
484
- }
485
- var ChallengesSection = dynamic__default.default(() => import('./ChallengesSection-IZ3DHECS.cjs'), { ssr: true });
486
- var StrategySection = dynamic__default.default(() => import('./StrategySection-CJ7Y6OFQ.cjs'), { ssr: true });
487
- var ResultsSection = dynamic__default.default(() => import('./ResultsSection-XLGMMQKY.cjs'), { ssr: true });
488
- var TechStackSection = dynamic__default.default(() => import('./TechStackSection-VTNNZR5V.cjs'), { ssr: true });
489
- var ServicesSection = dynamic__default.default(() => import('./ServicesSection-WJMGK2MF.cjs'), { ssr: true });
490
- var TestimonialSection = dynamic__default.default(() => import('./TestimonialSection-XPTFUQIN.cjs'), { ssr: true });
491
- var GallerySection = dynamic__default.default(() => import('./GallerySection-WJ4PQDBI.cjs'), { ssr: true });
492
- var VideoSection = dynamic__default.default(() => import('./VideoSection-G3DFS7UH.cjs'), { ssr: true });
493
- var TeamSection = dynamic__default.default(() => import('./TeamSection-DZVSNZE6.cjs'), { ssr: true });
494
- var FeatureSpotlightSection = dynamic__default.default(() => import('./FeatureSpotlightSection-WRHXS7TU.cjs'), { ssr: true });
495
- var BeforeAfterSection = dynamic__default.default(() => import('./BeforeAfterSection-JTORBR3A.cjs'), { ssr: true });
496
- var MetricsTimelineSection = dynamic__default.default(() => import('./MetricsTimelineSection-4L6DUHJ5.cjs'), { ssr: true });
497
- var ConversionFunnelSection = dynamic__default.default(() => import('./ConversionFunnelSection-AUUSJ5HQ.cjs'), { ssr: true });
498
- var PerformanceSection = dynamic__default.default(() => import('./PerformanceSection-24TVVFZA.cjs'), { ssr: true });
499
- var SiteArchitectureSection = dynamic__default.default(() => import('./SiteArchitectureSection-J7BPBERH.cjs'), { ssr: true });
500
- var SpeedComparisonSection = dynamic__default.default(() => import('./SpeedComparisonSection-EZKFQVGW.cjs'), { ssr: true });
501
- var DesignSystemSection = dynamic__default.default(() => import('./DesignSystemSection-KXIQXITF.cjs'), { ssr: true });
502
- var DetailsSection = dynamic__default.default(() => import('./DetailsSection-TTUZAPZZ.cjs'), { ssr: true });
503
- var CTASection = dynamic__default.default(() => import('./CTASection-4JKLXEUF.cjs'), { ssr: true });
504
- function humanizeArchPageEntry(page) {
505
- const title = (page?.title || "").trim();
506
- if (title && !title.startsWith("/")) return { title };
507
- const source = title || (page?.path || "").trim();
508
- const lastSegment = source.split(/[?#]/)[0].split("/").filter(Boolean).pop() || "";
509
- const label = lastSegment.replace(/\.(html?|php|aspx?)$/i, "").replace(/[-_]+/g, " ").trim().replace(/\b\w/g, (c) => c.toUpperCase());
510
- return { title: label || "Home" };
511
- }
512
- function sanitizeSiteArchitectureData(data) {
513
- if (!data || !Array.isArray(data.groups)) return data;
514
- return {
515
- ...data,
516
- groups: data.groups.map((group) => ({
517
- ...group,
518
- pages: Array.isArray(group.pages) ? group.pages.map(humanizeArchPageEntry) : []
519
- }))
520
- };
521
- }
522
- function renderSection(section, item, index) {
523
- const key = `${section.sectionType}-${index}`;
524
- switch (section.sectionType) {
525
- case "portfolioHero":
526
- return /* @__PURE__ */ jsxRuntime.jsx(
527
- HeroSection,
528
- {
529
- data: section.data,
530
- screenshots: item.hero_screenshots ?? void 0,
531
- liveUrl: item.live_url ?? void 0
532
- },
533
- key
534
- );
535
- case "portfolioChallenges":
536
- return /* @__PURE__ */ jsxRuntime.jsx(ChallengesSection, { data: section.data }, key);
537
- case "portfolioStrategy":
538
- return /* @__PURE__ */ jsxRuntime.jsx(StrategySection, { data: section.data }, key);
539
- case "portfolioResults":
540
- return /* @__PURE__ */ jsxRuntime.jsx(ResultsSection, { data: section.data }, key);
541
- case "portfolioTechStack":
542
- return /* @__PURE__ */ jsxRuntime.jsx(TechStackSection, { data: section.data }, key);
543
- case "portfolioServices":
544
- return /* @__PURE__ */ jsxRuntime.jsx(ServicesSection, { data: section.data }, key);
545
- case "portfolioTestimonial":
546
- return /* @__PURE__ */ jsxRuntime.jsx(TestimonialSection, { data: section.data }, key);
547
- case "portfolioGallery":
548
- return /* @__PURE__ */ jsxRuntime.jsx(GallerySection, { data: section.data }, key);
549
- case "portfolioVideo":
550
- return /* @__PURE__ */ jsxRuntime.jsx(VideoSection, { data: section.data }, key);
551
- case "portfolioTeam":
552
- return /* @__PURE__ */ jsxRuntime.jsx(TeamSection, { data: section.data }, key);
553
- case "portfolioFeatureSpotlight":
554
- return /* @__PURE__ */ jsxRuntime.jsx(FeatureSpotlightSection, { data: section.data }, key);
555
- case "portfolioBeforeAfter":
556
- return /* @__PURE__ */ jsxRuntime.jsx(BeforeAfterSection, { data: section.data }, key);
557
- case "portfolioMetricsTimeline":
558
- return /* @__PURE__ */ jsxRuntime.jsx(MetricsTimelineSection, { data: section.data }, key);
559
- case "portfolioConversionFunnel":
560
- return /* @__PURE__ */ jsxRuntime.jsx(ConversionFunnelSection, { data: section.data }, key);
561
- case "portfolioPerformance":
562
- return /* @__PURE__ */ jsxRuntime.jsx(PerformanceSection, { data: section.data }, key);
563
- case "portfolioSpeedComparison":
564
- return /* @__PURE__ */ jsxRuntime.jsx(SpeedComparisonSection, { data: section.data }, key);
565
- case "portfolioSiteArchitecture":
566
- return /* @__PURE__ */ jsxRuntime.jsx(SiteArchitectureSection, { data: sanitizeSiteArchitectureData(section.data) }, key);
567
- case "portfolioDesignSystem":
568
- return /* @__PURE__ */ jsxRuntime.jsx(DesignSystemSection, { data: section.data }, key);
569
- case "portfolioDetails":
570
- return /* @__PURE__ */ jsxRuntime.jsx(DetailsSection, { data: section.data }, key);
571
- case "portfolioCTA":
572
- return /* @__PURE__ */ jsxRuntime.jsx(CTASection, { data: section.data }, key);
573
- case "portfolioSeo":
574
- return null;
575
- default:
576
- return null;
577
- }
578
- }
579
- var SECTION_ORDER = {
580
- portfolioHero: 0,
581
- portfolioChallenges: 1,
582
- portfolioStrategy: 2,
583
- portfolioResults: 3,
584
- portfolioPerformance: 4,
585
- portfolioSpeedComparison: 5,
586
- portfolioSiteArchitecture: 6,
587
- portfolioTechStack: 7,
588
- portfolioDesignSystem: 8,
589
- portfolioServices: 9,
590
- portfolioBeforeAfter: 10,
591
- portfolioTestimonial: 11,
592
- portfolioMetricsTimeline: 12,
593
- portfolioConversionFunnel: 13,
594
- portfolioDetails: 11,
595
- portfolioSeo: 12,
596
- portfolioCta: 13
597
- };
598
- function PortfolioPage({ item }) {
599
- const sortedSections = [...item.sections].sort(
600
- (a, b) => (SECTION_ORDER[a.sectionType] ?? 99) - (SECTION_ORDER[b.sectionType] ?? 99)
601
- );
602
- return /* @__PURE__ */ jsxRuntime.jsx("article", { className: "flex w-full min-w-0 max-w-full flex-col overflow-x-clip", children: sortedSections.map((section, index) => {
603
- const rendered = renderSection(section, item, index);
604
- if (!rendered) return null;
605
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full", children: rendered }, `wrapper-${section.sectionType}-${index}`);
606
- }) });
607
- }
608
-
609
- // src/types.ts
610
- var PORTFOLIO_SECTION_TYPES = [
611
- "portfolioHero",
612
- "portfolioChallenges",
613
- "portfolioStrategy",
614
- "portfolioResults",
615
- "portfolioTechStack",
616
- "portfolioServices",
617
- "portfolioTestimonial",
618
- "portfolioGallery",
619
- "portfolioVideo",
620
- "portfolioTeam",
621
- "portfolioFeatureSpotlight",
622
- "portfolioBeforeAfter",
623
- "portfolioMetricsTimeline",
624
- "portfolioConversionFunnel",
625
- "portfolioPerformance",
626
- "portfolioSpeedComparison",
627
- "portfolioSiteArchitecture",
628
- "portfolioDesignSystem",
629
- "portfolioDetails",
630
- "portfolioSeo",
631
- "portfolioCTA"
632
- ];
633
-
634
- exports.PORTFOLIO_SECTION_TYPES = PORTFOLIO_SECTION_TYPES;
635
- exports.PortfolioPage = PortfolioPage;
636
- //# sourceMappingURL=chunk-FDFVLYAM.cjs.map
637
- //# sourceMappingURL=chunk-FDFVLYAM.cjs.map