/* globals React, ReactDOM, ReactHelmet, framerMotion */ /* ---------- Safe shims ---------- */ const Helmet = (typeof ReactHelmet !== 'undefined' && ReactHelmet.Helmet) ? ReactHelmet.Helmet : ({children}) => null; const { motion: MotionLib } = (typeof framerMotion !== 'undefined' ? framerMotion : {}); const motion = MotionLib || new Proxy({}, { get: () => (props) =>
}); /* ---------- Helpers ---------- */ function cn(...inputs) { const classes = []; inputs.forEach((i) => { if (!i) return; if (typeof i === 'string') classes.push(i); else if (Array.isArray(i)) classes.push(cn(...i)); else if (typeof i === 'object') for (const k in i) if (i[k]) classes.push(k); }); // simple de-dupe const seen = new Set(); const out = []; for (const c of classes.join(' ').split(/\s+/)) { if (!seen.has(c)) { seen.add(c); out.push(c); } } return out.join(' '); } /* ---------- Button ---------- */ const Button = React.forwardRef(({ className = '', variant = 'default', size = 'default', asChild = false, ...props }, ref) => { const base = 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50'; const variants = { default: 'bg-emerald-600 text-white hover:bg-emerald-700', destructive: 'bg-red-600 text-white hover:bg-red-700', outline: 'border border-gray-300 bg-transparent hover:bg-gray-100', secondary: 'bg-gray-200 text-gray-800 hover:bg-gray-300', ghost: 'hover:bg-gray-100', link: 'text-emerald-600 underline-offset-4 hover:underline', }; const sizes = { default: 'h-10 px-4 py-2', sm: 'h-9 px-3 rounded-md', lg: 'h-11 px-8 rounded-md', icon: 'h-10 w-10' }; const Comp = asChild ? 'span' : 'button'; return ; }); Button.displayName = 'Button'; /* ---------- Toast system ---------- */ function Toaster() { const [toasts, setToasts] = React.useState([]); React.useEffect(() => { window.__wp_toast_add__ = (t) => { const id = Date.now() + Math.random(); setToasts((p) => [...p, { id, ...t }]); setTimeout(() => setToasts((p) => p.filter(x => x.id !== id)), 4500); }; }, []); const close = (id) => setToasts((p) => p.filter(x => x.id !== id)); return (
{toasts.map(({id,title,description,variant}) => (
{title ?
{title}
: null} {description ?
{description}
: null}
))}
); } function useToast() { const toast = React.useCallback((opts) => { if (window.__wp_toast_add__) window.__wp_toast_add__(opts||{}); }, []); return { toast }; } /* ---------- Inline icons ---------- */ const MountainIcon = ({ className }) => ; const ArrowDownIcon = ({ className }) => ; const MapPinIcon = ({ className }) => ; const TrendingUpIcon = ({ className }) => ; const ClockIcon = ({ className }) => ; const BackpackIcon = ({ className }) => ; const CompassIcon = ({ className }) => ; const FootprintsIcon = ({ className }) => ; const SunIcon = ({ className }) => ; const QuoteIcon = ({ className }) => ; const FacebookIcon = ({ className }) => ; const InstagramIcon = ({ className }) => ; const TwitterIcon = ({ className }) => ; /* ---------- Components ---------- */ const Hero = () => { const { toast } = useToast(); const handleExploreClick = () => { const el = document.getElementById('trails'); if (el) el.scrollIntoView({ behavior: 'smooth' }); }; const handleJoinClick = () => { toast({ title: '🚧 Функцијата доаѓа наскоро!', description: 'Оваа функција сè уште не е имплементирана – но не грижете се! Можете да ја побарате во вашето следно барање! 🚀' }); }; return (
Величествени планински врвови при изгрејсонце
Двете Уши Освојувајте врвови, прегрнете ја природата и откријте ја возбудата на планинарењето. Вашата следна авантура започнува овде! ⛰️
); }; const FeaturedTrails = () => { const { toast } = useToast(); const trails = [ { name: 'Тито Врв', location: 'Шар Планина, Македонија', difficulty: 'Напредно', duration: '8-10 часа', elevation: '2,748 m', description: 'Највисокиот врв на Шар Планина со неверојатни панорамски глетки' }, { name: 'Голем Корaб', location: 'Планина Кораб, Македонија/Албанија', difficulty: 'Експертско', duration: '10-12 часа', elevation: '2,764 m', description: 'Највисокиот врв во Македонија, вистински предизвик за искусни планинари' }, { name: 'Пелистер', location: 'Баба Планина, Македонија', difficulty: 'Умерено', duration: '5-7 часа', elevation: '2,601 m', description: 'Патека низ борова шума до кристално чистите Пелистерски Очи' } ]; const handleViewDetails = () => { toast({ title: '🚧 Детали за патеката доаѓаат наскоро!', description: 'Оваа функција сè уште не е имплементирана – но не грижете се! Можете да ја побарате во вашето следно барање! 🚀' }); }; return (

Истакнати Патеки

Откријте рачно избрани планинарски рути кои ќе ви го одземат здивот! 🥾

{trails.map((trail, i) => (
{`${trail.name}

{trail.name}

{trail.location}

{trail.description}

Тежина:{trail.difficulty}
Времетраење:{trail.duration}
Висинска разлика:{trail.elevation}
))}
); }; const GearSection = () => { const gearItems = [ { icon: BackpackIcon, title: 'Суштински Ранец', description: 'Изберете удобен, издржлив ранец со правилна распределба на тежината', color: 'from-blue-500 to-cyan-500' }, { icon: FootprintsIcon, title: 'Планинарски Чевли', description: 'Инвестирајте во квалитетни чизми со поддршка за глуждот и водоотпорна заштита', color: 'from-orange-500 to-red-500' }, { icon: CompassIcon, title: 'Навигациски Алатки', description: 'GPS уред, мапа и компас за безбедна навигација по патеката', color: 'from-purple-500 to-pink-500' }, { icon: SunIcon, title: 'Опрема за Време', description: 'Слоевита облека, водоотпорна јакна и основни средства за заштита од сонце', color: 'from-yellow-500 to-orange-500' }, ]; return (

Водич за Основна Опрема

Подгответе се за успех со нашите експертски препораки! 🎒

{gearItems.map((item,i)=>{ const Icon=item.icon; return (

{item.title}

{item.description}

) })}
); }; const AdventureStories = () => { const stories = [ { quote: "Достигнувањето на врвот при изгрејсонце беше најмагичниот момент во мојот живот. Погледот апсолутно вредеше за секој чекор!", author: "Сара Мичел", trail: "Патека на Орловиот Врв" }, { quote: "Кружната Патека Маглеста Долина ги надмина сите очекувања. Совршена комбинација на предизвик и убавина. Едвај чекам да се вратам!", author: "Џејмс Родригез", trail: "Кружна Патека Маглеста Долина" }, { quote: "Патеката на Врвот Гребен ги тестираше моите граници, но чувството на постигнување беше неверојатно. Оваа заедница е супер!", author: "Емили Чен", trail: "Патека на Врвот Гребен" } ]; return (

Авантуристички Приказни

Вистински искуства од колеги планинари ентузијасти! 🌟

{stories.map((s,i)=>(

"{s.quote}"

{s.author}

{s.trail}

))}
); }; const CallToAdventure = () => { const { toast } = useToast(); const handleGetStarted = () => toast({ title: "🚧 Функцијата доаѓа наскоро!", description: "Оваа функција сè уште не е имплементирана – но не грижете се! Можете да ја побарате во вашето следно барање! 🚀" }); return (

Подготвени за Вашата Следна Авантура?

Придружете им се на илјадници планинари кои ги истражуваат најубавите патеки во светот. Вашата планина ве чека! 🏔️

); }; const Footer = () => { const { toast } = useToast(); const click = (p)=>toast({ title: "🚧 Социјалните мрежи доаѓаат наскоро!", description: "Оваа функција сè уште не е имплементирана – но не грижете се! Можете да ја побарате во вашето следно барање! 🚀" }); return (
Двете Уши

Вашиот врвен придружник за планински планинарски авантури и истражување на отворено.

Брзи Линкови
  • За Нас
  • Водичи за Патеки
  • Совети за Безбедност
  • Контакт
Поврзете се со Нас

© 2025 Двете Уши. Сите права задржани. Авантурирајте одговорно! 🌲

); }; /* Optional extras you can insert anywhere if desired */ const HeroImage = () => (
Hostinger Horizons
); const WelcomeMessage = () => ( Hello there! I'm Horizons, your AI coding companion. I'm here to help you build amazing web application! ); /* ---------- App + Boot ---------- */ function App() { return ( <> Двете Уши - Планинарски Авантури
); } const rootEl = document.getElementById('root'); if (rootEl) { ReactDOM.createRoot(rootEl).render(); } else { document.body.innerHTML += '
Error: #root not found
'; }