// Sections: Services, About, Process, Stack, Marquee
const { useState: useS2, useEffect: useE2, useRef: useR2 } = React;
function Marquee({ items }) {
const doubled = [...items, ...items];
return (
{doubled.map((item, i) => (
))}
);
}
function SectionHeader({ num, label, title, titleEm, subtitle }) {
return (
[ {num} ]
{label}
{title} {titleEm}
{subtitle &&
{subtitle}
}
);
}
function Services({ t }) {
return (
{t.services.items.map((item, i) => (
— {item.num}
{item.title} {item.titleEm}
{item.desc}
{item.tags.map((tag, j) => (
{tag}
))}
))}
);
}
function About({ t }) {
return (
[ {t.about.num} ]
{t.about.label}
{t.about.p1[0]} {t.about.p1[1]}
{t.about.p2[0]} {t.about.p2[1]}{t.about.p2[2]}
{t.about.stats.map((s, i) => (
{s.num}{s.suffix}
{s.label}
))}
{t.about.portrait_label}
{t.about.portrait_id}
"{t.about.portrait_caption}"
);
}
function Process({ t }) {
return (
{t.process.items.map((item, i) => (
{item.num}
{item.title}
{item.desc}
Entregáveis
{item.outputs.map((o, j) => {o})}
))}
);
}
function StackIcon({ name }) {
const icons = {
'Figma': ,
'HTML / CSS': ,
'JavaScript': ,
'React': ,
'WordPress': ,
'Framer': ,
'Webflow': ,
'Notion': ,
};
return icons[name] || ;
}
function Stack({ t }) {
return (
{t.stack.items.map((item, i) => (
))}
);
}
Object.assign(window, { Services, About, Process, Stack, Marquee, SectionHeader });