@sonordev/agency-site-kit 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/{BeforeAfterSection-6QUJOBO2.js → BeforeAfterSection-6BHFLY4Y.js} +6 -6
  2. package/dist/BeforeAfterSection-6BHFLY4Y.js.map +1 -0
  3. package/dist/{BeforeAfterSection-DVAWWE4K.cjs → BeforeAfterSection-JTORBR3A.cjs} +6 -6
  4. package/dist/BeforeAfterSection-JTORBR3A.cjs.map +1 -0
  5. package/dist/DesignSystemSection-2R5BRBGO.js +172 -0
  6. package/dist/DesignSystemSection-2R5BRBGO.js.map +1 -0
  7. package/dist/DesignSystemSection-KXIQXITF.cjs +174 -0
  8. package/dist/DesignSystemSection-KXIQXITF.cjs.map +1 -0
  9. package/dist/{DetailsSection-FB763FS7.js → DetailsSection-A6PZQUQL.js} +14 -5
  10. package/dist/DetailsSection-A6PZQUQL.js.map +1 -0
  11. package/dist/{DetailsSection-OACJFGH7.cjs → DetailsSection-TTUZAPZZ.cjs} +14 -5
  12. package/dist/DetailsSection-TTUZAPZZ.cjs.map +1 -0
  13. package/dist/PerformanceSection-24TVVFZA.cjs +356 -0
  14. package/dist/PerformanceSection-24TVVFZA.cjs.map +1 -0
  15. package/dist/PerformanceSection-MGCEIXDX.js +351 -0
  16. package/dist/PerformanceSection-MGCEIXDX.js.map +1 -0
  17. package/dist/SiteArchitectureSection-EE6VQSXM.cjs +349 -0
  18. package/dist/SiteArchitectureSection-EE6VQSXM.cjs.map +1 -0
  19. package/dist/SiteArchitectureSection-PBBRTARV.js +344 -0
  20. package/dist/SiteArchitectureSection-PBBRTARV.js.map +1 -0
  21. package/dist/SpeedComparisonSection-EZKFQVGW.cjs +174 -0
  22. package/dist/SpeedComparisonSection-EZKFQVGW.cjs.map +1 -0
  23. package/dist/SpeedComparisonSection-Y3K7OFZQ.js +172 -0
  24. package/dist/SpeedComparisonSection-Y3K7OFZQ.js.map +1 -0
  25. package/dist/{StrategySection-3ED3QW4R.cjs → StrategySection-CJ7Y6OFQ.cjs} +18 -24
  26. package/dist/StrategySection-CJ7Y6OFQ.cjs.map +1 -0
  27. package/dist/{StrategySection-VUWMIYYP.js → StrategySection-DI5RSCJU.js} +18 -24
  28. package/dist/StrategySection-DI5RSCJU.js.map +1 -0
  29. package/dist/TechStackSection-2AQ7RGY3.js +93 -0
  30. package/dist/TechStackSection-2AQ7RGY3.js.map +1 -0
  31. package/dist/TechStackSection-VTNNZR5V.cjs +95 -0
  32. package/dist/TechStackSection-VTNNZR5V.cjs.map +1 -0
  33. package/dist/chunk-4GVC3D2X.js +606 -0
  34. package/dist/chunk-4GVC3D2X.js.map +1 -0
  35. package/dist/{chunk-XMC4DN6G.js → chunk-APG2QSMB.js} +8 -8
  36. package/dist/chunk-APG2QSMB.js.map +1 -0
  37. package/dist/chunk-BGM6A2RU.cjs +613 -0
  38. package/dist/chunk-BGM6A2RU.cjs.map +1 -0
  39. package/dist/{chunk-NAS4K5UR.cjs → chunk-OA5ZM4OA.cjs} +8 -8
  40. package/dist/chunk-OA5ZM4OA.cjs.map +1 -0
  41. package/dist/{chunk-QIC6JFFD.js → chunk-OMOF4VR5.js} +14 -14
  42. package/dist/chunk-OMOF4VR5.js.map +1 -0
  43. package/dist/{chunk-5FKOLIV6.cjs → chunk-XM2QD3AK.cjs} +14 -14
  44. package/dist/chunk-XM2QD3AK.cjs.map +1 -0
  45. package/dist/index.cjs +13 -13
  46. package/dist/index.d.cts +2 -2
  47. package/dist/index.d.ts +2 -2
  48. package/dist/index.js +3 -3
  49. package/dist/layout/index.cjs +2 -2
  50. package/dist/layout/index.d.cts +1 -1
  51. package/dist/layout/index.d.ts +1 -1
  52. package/dist/layout/index.js +1 -1
  53. package/dist/portfolio/client.cjs +3 -3
  54. package/dist/portfolio/client.d.cts +7 -3
  55. package/dist/portfolio/client.d.ts +7 -3
  56. package/dist/portfolio/client.js +1 -1
  57. package/dist/portfolio/index.cjs +6 -6
  58. package/dist/portfolio/index.d.cts +2 -2
  59. package/dist/portfolio/index.d.ts +2 -2
  60. package/dist/portfolio/index.js +2 -2
  61. package/dist/portfolio/sections.d.cts +1 -1
  62. package/dist/portfolio/sections.d.ts +1 -1
  63. package/dist/portfolio/server.cjs +1 -0
  64. package/dist/portfolio/server.cjs.map +1 -1
  65. package/dist/portfolio/server.d.cts +1 -1
  66. package/dist/portfolio/server.d.ts +1 -1
  67. package/dist/portfolio/server.js +1 -0
  68. package/dist/portfolio/server.js.map +1 -1
  69. package/dist/{types-BMUhBhWx.d.cts → types-DL4t_Cfa.d.cts} +3 -1
  70. package/dist/{types-BMUhBhWx.d.ts → types-DL4t_Cfa.d.ts} +3 -1
  71. package/package.json +1 -1
  72. package/dist/BeforeAfterSection-6QUJOBO2.js.map +0 -1
  73. package/dist/BeforeAfterSection-DVAWWE4K.cjs.map +0 -1
  74. package/dist/DetailsSection-FB763FS7.js.map +0 -1
  75. package/dist/DetailsSection-OACJFGH7.cjs.map +0 -1
  76. package/dist/StrategySection-3ED3QW4R.cjs.map +0 -1
  77. package/dist/StrategySection-VUWMIYYP.js.map +0 -1
  78. package/dist/TechStackSection-OCUYG4XT.js +0 -90
  79. package/dist/TechStackSection-OCUYG4XT.js.map +0 -1
  80. package/dist/TechStackSection-VKJK4KQB.cjs +0 -91
  81. package/dist/TechStackSection-VKJK4KQB.cjs.map +0 -1
  82. package/dist/chunk-2VNNFAG6.js +0 -415
  83. package/dist/chunk-2VNNFAG6.js.map +0 -1
  84. package/dist/chunk-5FKOLIV6.cjs.map +0 -1
  85. package/dist/chunk-NAS4K5UR.cjs.map +0 -1
  86. package/dist/chunk-QIC6JFFD.js.map +0 -1
  87. package/dist/chunk-TAPNXT7X.cjs +0 -422
  88. package/dist/chunk-TAPNXT7X.cjs.map +0 -1
  89. package/dist/chunk-XMC4DN6G.js.map +0 -1
@@ -1,90 +0,0 @@
1
- 'use client';
2
- import { GlassCard } from './chunk-YB4B3OMC.js';
3
- import { ScrollReveal } from './chunk-7CFFAKDM.js';
4
- import { useMemo } from 'react';
5
- import { jsx, jsxs } from 'react/jsx-runtime';
6
-
7
- function TechStackSection({ data }) {
8
- const grouped = useMemo(() => {
9
- const groups = {};
10
- for (const tech of data.technologies) {
11
- const cat = tech.category || "Other";
12
- if (!groups[cat]) groups[cat] = [];
13
- groups[cat].push(tech);
14
- }
15
- return Object.entries(groups);
16
- }, [data.technologies]);
17
- return /* @__PURE__ */ jsx(
18
- "section",
19
- {
20
- className: "w-full py-20 md:py-28",
21
- style: { background: "var(--sk-bg, #0a0a0a)" },
22
- children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto px-6", children: [
23
- /* @__PURE__ */ jsxs(ScrollReveal, { y: 30, children: [
24
- /* @__PURE__ */ jsx(
25
- "h2",
26
- {
27
- className: "text-3xl md:text-4xl font-bold mb-4",
28
- style: {
29
- color: "var(--sk-text-primary, #ffffff)",
30
- fontFamily: "var(--sk-font-heading, inherit)"
31
- },
32
- children: "Tech Stack"
33
- }
34
- ),
35
- /* @__PURE__ */ jsx(
36
- "p",
37
- {
38
- className: "text-lg mb-12 max-w-2xl",
39
- style: { color: "var(--sk-text-secondary, #a1a1aa)" },
40
- children: "The technologies and tools powering this project."
41
- }
42
- )
43
- ] }),
44
- /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-10", children: grouped.map(([category, techs], gi) => /* @__PURE__ */ jsx(ScrollReveal, { y: 30, delay: gi * 0.1, children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
45
- /* @__PURE__ */ jsx(
46
- "h3",
47
- {
48
- className: "text-sm font-semibold uppercase tracking-wider",
49
- style: { color: "var(--sk-text-tertiary, #71717a)" },
50
- children: category
51
- }
52
- ),
53
- /* @__PURE__ */ jsx(ScrollReveal, { stagger: 0.06, children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-3", children: techs.map((tech, ti) => /* @__PURE__ */ jsxs(
54
- GlassCard,
55
- {
56
- padding: "sm",
57
- hover: true,
58
- className: "inline-flex items-center gap-2",
59
- children: [
60
- tech.icon && /* @__PURE__ */ jsx(
61
- "img",
62
- {
63
- src: tech.icon,
64
- alt: tech.name,
65
- width: 20,
66
- height: 20,
67
- className: "w-5 h-5 object-contain"
68
- }
69
- ),
70
- /* @__PURE__ */ jsx(
71
- "span",
72
- {
73
- className: "text-sm font-medium whitespace-nowrap",
74
- style: { color: "var(--sk-text-primary, #ffffff)" },
75
- children: tech.name
76
- }
77
- )
78
- ]
79
- },
80
- ti
81
- )) }) })
82
- ] }) }, category)) })
83
- ] })
84
- }
85
- );
86
- }
87
-
88
- export { TechStackSection as default };
89
- //# sourceMappingURL=TechStackSection-OCUYG4XT.js.map
90
- //# sourceMappingURL=TechStackSection-OCUYG4XT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/portfolio/components/sections/TechStackSection.tsx"],"names":[],"mappings":"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","file":"TechStackSection-OCUYG4XT.js","sourcesContent":["'use client';\n\nimport React, { useMemo } from 'react';\nimport type { PortfolioTechStackData } from '../../../types';\nimport ScrollReveal from '../primitives/ScrollReveal';\nimport GlassCard from '../primitives/GlassCard';\n\ninterface TechStackSectionProps {\n data: PortfolioTechStackData;\n}\n\nexport default function TechStackSection({ data }: TechStackSectionProps) {\n // Group technologies by category\n const grouped = useMemo(() => {\n const groups: Record<string, typeof data.technologies> = {};\n for (const tech of data.technologies) {\n const cat = tech.category || 'Other';\n if (!groups[cat]) groups[cat] = [];\n groups[cat].push(tech);\n }\n return Object.entries(groups);\n }, [data.technologies]);\n\n return (\n <section\n className=\"w-full py-20 md:py-28\"\n style={{ background: 'var(--sk-bg, #0a0a0a)' }}\n >\n <div className=\"max-w-7xl mx-auto px-6\">\n <ScrollReveal y={30}>\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-4\"\n style={{\n color: 'var(--sk-text-primary, #ffffff)',\n fontFamily: 'var(--sk-font-heading, inherit)',\n }}\n >\n Tech Stack\n </h2>\n <p\n className=\"text-lg mb-12 max-w-2xl\"\n style={{ color: 'var(--sk-text-secondary, #a1a1aa)' }}\n >\n The technologies and tools powering this project.\n </p>\n </ScrollReveal>\n\n <div className=\"flex flex-col gap-10\">\n {grouped.map(([category, techs], gi) => (\n <ScrollReveal key={category} y={30} delay={gi * 0.1}>\n <div className=\"flex flex-col gap-4\">\n <h3\n className=\"text-sm font-semibold uppercase tracking-wider\"\n style={{ color: 'var(--sk-text-tertiary, #71717a)' }}\n >\n {category}\n </h3>\n <ScrollReveal stagger={0.06}>\n <div className=\"flex flex-wrap gap-3\">\n {techs.map((tech, ti) => (\n <GlassCard\n key={ti}\n padding=\"sm\"\n hover\n className=\"inline-flex items-center gap-2\"\n >\n {tech.icon && (\n <img\n src={tech.icon}\n alt={tech.name}\n width={20}\n height={20}\n className=\"w-5 h-5 object-contain\"\n />\n )}\n <span\n className=\"text-sm font-medium whitespace-nowrap\"\n style={{ color: 'var(--sk-text-primary, #ffffff)' }}\n >\n {tech.name}\n </span>\n </GlassCard>\n ))}\n </div>\n </ScrollReveal>\n </div>\n </ScrollReveal>\n ))}\n </div>\n </div>\n </section>\n );\n}\n"]}
@@ -1,91 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkKEOHORIH_cjs = require('./chunk-KEOHORIH.cjs');
4
- var chunkIKBK7HYX_cjs = require('./chunk-IKBK7HYX.cjs');
5
- var react = require('react');
6
- var jsxRuntime = require('react/jsx-runtime');
7
-
8
- function TechStackSection({ data }) {
9
- const grouped = react.useMemo(() => {
10
- const groups = {};
11
- for (const tech of data.technologies) {
12
- const cat = tech.category || "Other";
13
- if (!groups[cat]) groups[cat] = [];
14
- groups[cat].push(tech);
15
- }
16
- return Object.entries(groups);
17
- }, [data.technologies]);
18
- return /* @__PURE__ */ jsxRuntime.jsx(
19
- "section",
20
- {
21
- className: "w-full py-20 md:py-28",
22
- style: { background: "var(--sk-bg, #0a0a0a)" },
23
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-7xl mx-auto px-6", children: [
24
- /* @__PURE__ */ jsxRuntime.jsxs(chunkIKBK7HYX_cjs.ScrollReveal, { y: 30, children: [
25
- /* @__PURE__ */ jsxRuntime.jsx(
26
- "h2",
27
- {
28
- className: "text-3xl md:text-4xl font-bold mb-4",
29
- style: {
30
- color: "var(--sk-text-primary, #ffffff)",
31
- fontFamily: "var(--sk-font-heading, inherit)"
32
- },
33
- children: "Tech Stack"
34
- }
35
- ),
36
- /* @__PURE__ */ jsxRuntime.jsx(
37
- "p",
38
- {
39
- className: "text-lg mb-12 max-w-2xl",
40
- style: { color: "var(--sk-text-secondary, #a1a1aa)" },
41
- children: "The technologies and tools powering this project."
42
- }
43
- )
44
- ] }),
45
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-10", children: grouped.map(([category, techs], gi) => /* @__PURE__ */ jsxRuntime.jsx(chunkIKBK7HYX_cjs.ScrollReveal, { y: 30, delay: gi * 0.1, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
46
- /* @__PURE__ */ jsxRuntime.jsx(
47
- "h3",
48
- {
49
- className: "text-sm font-semibold uppercase tracking-wider",
50
- style: { color: "var(--sk-text-tertiary, #71717a)" },
51
- children: category
52
- }
53
- ),
54
- /* @__PURE__ */ jsxRuntime.jsx(chunkIKBK7HYX_cjs.ScrollReveal, { stagger: 0.06, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-3", children: techs.map((tech, ti) => /* @__PURE__ */ jsxRuntime.jsxs(
55
- chunkKEOHORIH_cjs.GlassCard,
56
- {
57
- padding: "sm",
58
- hover: true,
59
- className: "inline-flex items-center gap-2",
60
- children: [
61
- tech.icon && /* @__PURE__ */ jsxRuntime.jsx(
62
- "img",
63
- {
64
- src: tech.icon,
65
- alt: tech.name,
66
- width: 20,
67
- height: 20,
68
- className: "w-5 h-5 object-contain"
69
- }
70
- ),
71
- /* @__PURE__ */ jsxRuntime.jsx(
72
- "span",
73
- {
74
- className: "text-sm font-medium whitespace-nowrap",
75
- style: { color: "var(--sk-text-primary, #ffffff)" },
76
- children: tech.name
77
- }
78
- )
79
- ]
80
- },
81
- ti
82
- )) }) })
83
- ] }) }, category)) })
84
- ] })
85
- }
86
- );
87
- }
88
-
89
- module.exports = TechStackSection;
90
- //# sourceMappingURL=TechStackSection-VKJK4KQB.cjs.map
91
- //# sourceMappingURL=TechStackSection-VKJK4KQB.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/portfolio/components/sections/TechStackSection.tsx"],"names":["useMemo","jsx","jsxs","ScrollReveal","GlassCard"],"mappings":"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","file":"TechStackSection-VKJK4KQB.cjs","sourcesContent":["'use client';\n\nimport React, { useMemo } from 'react';\nimport type { PortfolioTechStackData } from '../../../types';\nimport ScrollReveal from '../primitives/ScrollReveal';\nimport GlassCard from '../primitives/GlassCard';\n\ninterface TechStackSectionProps {\n data: PortfolioTechStackData;\n}\n\nexport default function TechStackSection({ data }: TechStackSectionProps) {\n // Group technologies by category\n const grouped = useMemo(() => {\n const groups: Record<string, typeof data.technologies> = {};\n for (const tech of data.technologies) {\n const cat = tech.category || 'Other';\n if (!groups[cat]) groups[cat] = [];\n groups[cat].push(tech);\n }\n return Object.entries(groups);\n }, [data.technologies]);\n\n return (\n <section\n className=\"w-full py-20 md:py-28\"\n style={{ background: 'var(--sk-bg, #0a0a0a)' }}\n >\n <div className=\"max-w-7xl mx-auto px-6\">\n <ScrollReveal y={30}>\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-4\"\n style={{\n color: 'var(--sk-text-primary, #ffffff)',\n fontFamily: 'var(--sk-font-heading, inherit)',\n }}\n >\n Tech Stack\n </h2>\n <p\n className=\"text-lg mb-12 max-w-2xl\"\n style={{ color: 'var(--sk-text-secondary, #a1a1aa)' }}\n >\n The technologies and tools powering this project.\n </p>\n </ScrollReveal>\n\n <div className=\"flex flex-col gap-10\">\n {grouped.map(([category, techs], gi) => (\n <ScrollReveal key={category} y={30} delay={gi * 0.1}>\n <div className=\"flex flex-col gap-4\">\n <h3\n className=\"text-sm font-semibold uppercase tracking-wider\"\n style={{ color: 'var(--sk-text-tertiary, #71717a)' }}\n >\n {category}\n </h3>\n <ScrollReveal stagger={0.06}>\n <div className=\"flex flex-wrap gap-3\">\n {techs.map((tech, ti) => (\n <GlassCard\n key={ti}\n padding=\"sm\"\n hover\n className=\"inline-flex items-center gap-2\"\n >\n {tech.icon && (\n <img\n src={tech.icon}\n alt={tech.name}\n width={20}\n height={20}\n className=\"w-5 h-5 object-contain\"\n />\n )}\n <span\n className=\"text-sm font-medium whitespace-nowrap\"\n style={{ color: 'var(--sk-text-primary, #ffffff)' }}\n >\n {tech.name}\n </span>\n </GlassCard>\n ))}\n </div>\n </ScrollReveal>\n </div>\n </ScrollReveal>\n ))}\n </div>\n </div>\n </section>\n );\n}\n"]}
@@ -1,415 +0,0 @@
1
- 'use client';
2
- import { AnimatedCounter } from './chunk-2Y4O3LWM.js';
3
- import { GlassCard } from './chunk-YB4B3OMC.js';
4
- import { ScrollReveal } from './chunk-7CFFAKDM.js';
5
- import dynamic from 'next/dynamic';
6
- import { useRef, useEffect, useMemo } from 'react';
7
- import gsap from 'gsap';
8
- import { ScrollTrigger } from 'gsap/ScrollTrigger';
9
- import { jsx, jsxs } from 'react/jsx-runtime';
10
-
11
- function SplitHeadline({
12
- children,
13
- tag: Tag = "h2",
14
- className,
15
- style,
16
- delay = 0,
17
- duration = 0.8,
18
- staggerAmount = 0.02
19
- }) {
20
- const ref = useRef(null);
21
- const splitContent = useMemo(() => {
22
- const words = children.split(" ");
23
- return words.map((word, wi) => /* @__PURE__ */ jsxs("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: [
24
- word.split("").map((char, ci) => /* @__PURE__ */ jsx(
25
- "span",
26
- {
27
- className: "split-char",
28
- style: { display: "inline-block" },
29
- children: char
30
- },
31
- ci
32
- )),
33
- wi < words.length - 1 && /* @__PURE__ */ jsx("span", { style: { display: "inline-block" }, children: "\xA0" })
34
- ] }, wi));
35
- }, [children]);
36
- useEffect(() => {
37
- gsap.registerPlugin(ScrollTrigger);
38
- const el = ref.current;
39
- if (!el) return;
40
- const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
41
- if (prefersReducedMotion) {
42
- gsap.set(el.querySelectorAll(".split-char"), { opacity: 1, y: 0 });
43
- return;
44
- }
45
- const chars = el.querySelectorAll(".split-char");
46
- const ctx = gsap.context(() => {
47
- gsap.fromTo(
48
- chars,
49
- {
50
- opacity: 0,
51
- y: 20
52
- },
53
- {
54
- opacity: 1,
55
- y: 0,
56
- duration,
57
- delay,
58
- stagger: staggerAmount,
59
- ease: "power2.out",
60
- scrollTrigger: {
61
- trigger: el,
62
- start: "top 85%",
63
- toggleActions: "play none none none"
64
- }
65
- }
66
- );
67
- }, el);
68
- return () => ctx.revert();
69
- }, [delay, duration, staggerAmount]);
70
- return /* @__PURE__ */ jsx(
71
- Tag,
72
- {
73
- ref,
74
- className,
75
- style: { overflow: "hidden", ...style },
76
- children: splitContent
77
- }
78
- );
79
- }
80
- function HeroSection({ data, screenshots, liveUrl }) {
81
- const bgRef = useRef(null);
82
- const deviceRef = useRef(null);
83
- const shots = screenshots || data.screenshots;
84
- const url = liveUrl || data.liveUrl;
85
- useEffect(() => {
86
- gsap.registerPlugin(ScrollTrigger);
87
- const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
88
- if (prefersReducedMotion) return;
89
- const ctx = gsap.context(() => {
90
- if (bgRef.current) {
91
- gsap.to(bgRef.current, {
92
- yPercent: 30,
93
- ease: "none",
94
- scrollTrigger: {
95
- trigger: bgRef.current.parentElement,
96
- start: "top top",
97
- end: "bottom top",
98
- scrub: true
99
- }
100
- });
101
- }
102
- if (deviceRef.current) {
103
- const devices = deviceRef.current.children;
104
- gsap.fromTo(
105
- devices,
106
- { y: 60, opacity: 0, scale: 0.95 },
107
- {
108
- y: 0,
109
- opacity: 1,
110
- scale: 1,
111
- duration: 1,
112
- stagger: 0.15,
113
- ease: "power3.out",
114
- delay: 0.6
115
- }
116
- );
117
- }
118
- });
119
- return () => ctx.revert();
120
- }, []);
121
- return /* @__PURE__ */ jsxs(
122
- "section",
123
- {
124
- className: "relative overflow-hidden w-full",
125
- style: {
126
- minHeight: "90vh",
127
- display: "flex",
128
- flexDirection: "column",
129
- justifyContent: "center",
130
- background: "var(--sk-bg, #0a0a0a)"
131
- },
132
- children: [
133
- /* @__PURE__ */ jsx(
134
- "div",
135
- {
136
- ref: bgRef,
137
- className: "absolute inset-0 pointer-events-none",
138
- style: {
139
- background: `radial-gradient(ellipse at 50% 20%, color-mix(in srgb, var(--sk-primary, #6366f1) 15%, transparent) 0%, transparent 70%)`,
140
- willChange: "transform"
141
- }
142
- }
143
- ),
144
- /* @__PURE__ */ jsx("div", { className: "relative z-10 max-w-7xl mx-auto w-full px-6 py-24 lg:py-32", children: /* @__PURE__ */ jsxs("div", { className: "grid lg:grid-cols-2 gap-12 lg:gap-16 items-center", children: [
145
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6", children: [
146
- /* @__PURE__ */ jsx(ScrollReveal, { y: 20, duration: 0.6, children: /* @__PURE__ */ jsx(
147
- "span",
148
- {
149
- className: "inline-flex items-center self-start px-4 py-1.5 rounded-full text-sm font-medium",
150
- style: {
151
- background: "color-mix(in srgb, var(--sk-primary, #6366f1) 15%, transparent)",
152
- color: "var(--sk-primary, #6366f1)",
153
- border: "1px solid color-mix(in srgb, var(--sk-primary, #6366f1) 25%, transparent)"
154
- },
155
- children: data.category
156
- }
157
- ) }),
158
- /* @__PURE__ */ jsx(
159
- SplitHeadline,
160
- {
161
- tag: "h1",
162
- className: "text-4xl md:text-5xl lg:text-6xl font-bold leading-tight",
163
- style: {
164
- color: "var(--sk-text-primary, #ffffff)",
165
- fontFamily: "var(--sk-font-heading, inherit)"
166
- },
167
- children: data.headline
168
- }
169
- ),
170
- /* @__PURE__ */ jsx(ScrollReveal, { y: 20, delay: 0.2, children: /* @__PURE__ */ jsx(
171
- "p",
172
- {
173
- className: "text-xl md:text-2xl font-medium",
174
- style: { color: "var(--sk-text-secondary, #a1a1aa)" },
175
- children: data.subheadline
176
- }
177
- ) }),
178
- /* @__PURE__ */ jsx(ScrollReveal, { y: 20, delay: 0.3, children: /* @__PURE__ */ jsx(
179
- "p",
180
- {
181
- className: "text-base md:text-lg leading-relaxed",
182
- style: { color: "var(--sk-text-tertiary, #71717a)" },
183
- children: data.description
184
- }
185
- ) }),
186
- data.services.length > 0 && /* @__PURE__ */ jsx(ScrollReveal, { y: 20, delay: 0.4, stagger: 0.05, children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: data.services.map((service) => /* @__PURE__ */ jsx(
187
- "span",
188
- {
189
- className: "px-3 py-1 rounded-full text-xs font-medium",
190
- style: {
191
- background: "var(--sk-surface, rgba(255,255,255,0.05))",
192
- color: "var(--sk-text-secondary, #a1a1aa)",
193
- border: "1px solid var(--sk-border, rgba(255,255,255,0.1))"
194
- },
195
- children: service
196
- },
197
- service
198
- )) }) }),
199
- url && /* @__PURE__ */ jsx(ScrollReveal, { y: 20, delay: 0.5, children: /* @__PURE__ */ jsxs(
200
- "a",
201
- {
202
- href: url,
203
- target: "_blank",
204
- rel: "noopener noreferrer",
205
- className: "inline-flex items-center gap-2 self-start px-6 py-3 rounded-xl text-sm font-semibold transition-opacity hover:opacity-90",
206
- style: {
207
- background: "var(--sk-primary, #6366f1)",
208
- color: "#ffffff"
209
- },
210
- children: [
211
- "View Live Site",
212
- /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { d: "M6 3h7v7M13 3L3 13", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })
213
- ]
214
- }
215
- ) }),
216
- data.kpis.length > 0 && /* @__PURE__ */ jsx(ScrollReveal, { y: 30, delay: 0.6, stagger: 0.1, children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4 mt-4", children: data.kpis.map((kpi, i) => /* @__PURE__ */ jsxs(GlassCard, { padding: "sm", hover: false, className: "text-center", children: [
217
- /* @__PURE__ */ jsx(
218
- "div",
219
- {
220
- className: "text-2xl md:text-3xl font-bold",
221
- style: { color: "var(--sk-primary, #6366f1)" },
222
- children: /* @__PURE__ */ jsx(
223
- AnimatedCounter,
224
- {
225
- value: kpi.value,
226
- suffix: kpi.suffix,
227
- prefix: kpi.prefix,
228
- duration: 2.5
229
- }
230
- )
231
- }
232
- ),
233
- /* @__PURE__ */ jsx(
234
- "div",
235
- {
236
- className: "text-xs mt-1 font-medium",
237
- style: { color: "var(--sk-text-secondary, #a1a1aa)" },
238
- children: kpi.label
239
- }
240
- ),
241
- /* @__PURE__ */ jsx(
242
- "span",
243
- {
244
- className: "inline-block mt-1.5 px-2 py-0.5 rounded text-[10px] uppercase tracking-wider font-medium",
245
- style: {
246
- background: kpi.source === "measured" ? "color-mix(in srgb, #10b981 15%, transparent)" : "color-mix(in srgb, #f59e0b 15%, transparent)",
247
- color: kpi.source === "measured" ? "#10b981" : "#f59e0b"
248
- },
249
- children: kpi.source
250
- }
251
- )
252
- ] }, i)) }) })
253
- ] }),
254
- (shots?.desktop || shots?.tablet || shots?.mobile) && /* @__PURE__ */ jsxs("div", { ref: deviceRef, className: "relative flex items-end justify-center gap-3 lg:gap-4 min-h-[400px]", children: [
255
- shots.desktop && /* @__PURE__ */ jsx(
256
- "div",
257
- {
258
- className: "relative w-full max-w-[480px] rounded-lg overflow-hidden shadow-2xl",
259
- style: {
260
- border: "2px solid var(--sk-border, rgba(255,255,255,0.1))",
261
- aspectRatio: "16/10"
262
- },
263
- children: /* @__PURE__ */ jsx(
264
- "img",
265
- {
266
- src: shots.desktop,
267
- alt: "Desktop screenshot",
268
- className: "w-full h-full object-cover object-top",
269
- loading: "eager"
270
- }
271
- )
272
- }
273
- ),
274
- shots.tablet && /* @__PURE__ */ jsx(
275
- "div",
276
- {
277
- className: "absolute bottom-0 right-0 w-[45%] max-w-[220px] rounded-lg overflow-hidden shadow-2xl z-10",
278
- style: {
279
- border: "2px solid var(--sk-border, rgba(255,255,255,0.1))",
280
- aspectRatio: "3/4",
281
- transform: "translateX(10%) translateY(5%)"
282
- },
283
- children: /* @__PURE__ */ jsx(
284
- "img",
285
- {
286
- src: shots.tablet,
287
- alt: "Tablet screenshot",
288
- className: "w-full h-full object-cover object-top",
289
- loading: "eager"
290
- }
291
- )
292
- }
293
- ),
294
- shots.mobile && /* @__PURE__ */ jsx(
295
- "div",
296
- {
297
- className: "absolute bottom-0 right-[15%] w-[25%] max-w-[120px] rounded-xl overflow-hidden shadow-2xl z-20",
298
- style: {
299
- border: "2px solid var(--sk-border, rgba(255,255,255,0.1))",
300
- aspectRatio: "9/19",
301
- transform: "translateY(10%)"
302
- },
303
- children: /* @__PURE__ */ jsx(
304
- "img",
305
- {
306
- src: shots.mobile,
307
- alt: "Mobile screenshot",
308
- className: "w-full h-full object-cover object-top",
309
- loading: "eager"
310
- }
311
- )
312
- }
313
- )
314
- ] })
315
- ] }) })
316
- ]
317
- }
318
- );
319
- }
320
- var ChallengesSection = dynamic(() => import('./ChallengesSection-GEQGVSJN.js'), { ssr: true });
321
- var StrategySection = dynamic(() => import('./StrategySection-VUWMIYYP.js'), { ssr: true });
322
- var ResultsSection = dynamic(() => import('./ResultsSection-DFUJ5U6M.js'), { ssr: true });
323
- var TechStackSection = dynamic(() => import('./TechStackSection-OCUYG4XT.js'), { ssr: true });
324
- var ServicesSection = dynamic(() => import('./ServicesSection-D5V3Q4GR.js'), { ssr: true });
325
- var TestimonialSection = dynamic(() => import('./TestimonialSection-6RGSMXQB.js'), { ssr: true });
326
- var GallerySection = dynamic(() => import('./GallerySection-VMKORC47.js'), { ssr: true });
327
- var VideoSection = dynamic(() => import('./VideoSection-4A2HC6K6.js'), { ssr: true });
328
- var TeamSection = dynamic(() => import('./TeamSection-HGKFW6PQ.js'), { ssr: true });
329
- var FeatureSpotlightSection = dynamic(() => import('./FeatureSpotlightSection-B7P3JGNL.js'), { ssr: true });
330
- var BeforeAfterSection = dynamic(() => import('./BeforeAfterSection-6QUJOBO2.js'), { ssr: true });
331
- var MetricsTimelineSection = dynamic(() => import('./MetricsTimelineSection-6BT5GNFV.js'), { ssr: true });
332
- var ConversionFunnelSection = dynamic(() => import('./ConversionFunnelSection-D3GE4NKE.js'), { ssr: true });
333
- var DetailsSection = dynamic(() => import('./DetailsSection-FB763FS7.js'), { ssr: true });
334
- var CTASection = dynamic(() => import('./CTASection-BJA72XIL.js'), { ssr: true });
335
- function renderSection(section, item, index) {
336
- const key = `${section.sectionType}-${index}`;
337
- switch (section.sectionType) {
338
- case "portfolioHero":
339
- return /* @__PURE__ */ jsx(
340
- HeroSection,
341
- {
342
- data: section.data,
343
- screenshots: item.hero_screenshots ?? void 0,
344
- liveUrl: item.live_url ?? void 0
345
- },
346
- key
347
- );
348
- case "portfolioChallenges":
349
- return /* @__PURE__ */ jsx(ChallengesSection, { data: section.data }, key);
350
- case "portfolioStrategy":
351
- return /* @__PURE__ */ jsx(StrategySection, { data: section.data }, key);
352
- case "portfolioResults":
353
- return /* @__PURE__ */ jsx(ResultsSection, { data: section.data }, key);
354
- case "portfolioTechStack":
355
- return /* @__PURE__ */ jsx(TechStackSection, { data: section.data }, key);
356
- case "portfolioServices":
357
- return /* @__PURE__ */ jsx(ServicesSection, { data: section.data }, key);
358
- case "portfolioTestimonial":
359
- return /* @__PURE__ */ jsx(TestimonialSection, { data: section.data }, key);
360
- case "portfolioGallery":
361
- return /* @__PURE__ */ jsx(GallerySection, { data: section.data }, key);
362
- case "portfolioVideo":
363
- return /* @__PURE__ */ jsx(VideoSection, { data: section.data }, key);
364
- case "portfolioTeam":
365
- return /* @__PURE__ */ jsx(TeamSection, { data: section.data }, key);
366
- case "portfolioFeatureSpotlight":
367
- return /* @__PURE__ */ jsx(FeatureSpotlightSection, { data: section.data }, key);
368
- case "portfolioBeforeAfter":
369
- return /* @__PURE__ */ jsx(BeforeAfterSection, { data: section.data }, key);
370
- case "portfolioMetricsTimeline":
371
- return /* @__PURE__ */ jsx(MetricsTimelineSection, { data: section.data }, key);
372
- case "portfolioConversionFunnel":
373
- return /* @__PURE__ */ jsx(ConversionFunnelSection, { data: section.data }, key);
374
- case "portfolioDetails":
375
- return /* @__PURE__ */ jsx(DetailsSection, { data: section.data }, key);
376
- case "portfolioCTA":
377
- return /* @__PURE__ */ jsx(CTASection, { data: section.data }, key);
378
- case "portfolioSeo":
379
- return null;
380
- default:
381
- return null;
382
- }
383
- }
384
- function PortfolioPage({ item }) {
385
- return /* @__PURE__ */ jsx("article", { className: "w-full flex flex-col", children: item.sections.map((section, index) => {
386
- const rendered = renderSection(section, item, index);
387
- if (!rendered) return null;
388
- return /* @__PURE__ */ jsx("div", { className: "w-full", children: rendered }, `wrapper-${section.sectionType}-${index}`);
389
- }) });
390
- }
391
-
392
- // src/types.ts
393
- var PORTFOLIO_SECTION_TYPES = [
394
- "portfolioHero",
395
- "portfolioChallenges",
396
- "portfolioStrategy",
397
- "portfolioResults",
398
- "portfolioTechStack",
399
- "portfolioServices",
400
- "portfolioTestimonial",
401
- "portfolioGallery",
402
- "portfolioVideo",
403
- "portfolioTeam",
404
- "portfolioFeatureSpotlight",
405
- "portfolioBeforeAfter",
406
- "portfolioMetricsTimeline",
407
- "portfolioConversionFunnel",
408
- "portfolioDetails",
409
- "portfolioSeo",
410
- "portfolioCTA"
411
- ];
412
-
413
- export { PORTFOLIO_SECTION_TYPES, PortfolioPage };
414
- //# sourceMappingURL=chunk-2VNNFAG6.js.map
415
- //# sourceMappingURL=chunk-2VNNFAG6.js.map