/* global React */ const { useState: useStateTh, useEffect: useEffectTh } = React; const ALL_TECHNIQUES = [ ["Vratna kičma", "Miofascijalno opuštanje vratne kičme", "Myofascial", "1 dan", "Mekotkivna tehnika za oslobađanje fascijalnih restrikcija cervikalnog regiona."], ["Vratna kičma", "Generalna mobilizacija vratne kičme", "Mobilizacija", "1 dan", "Ritmičke niskoamplitudne tehnike za povećanje opsega pokreta."], ["Vratna kičma", "O.A.A. C0-C1-C2 rotaciona manipulacija", "HVLA", "2 dana", "Precizna HVLA za gornji cervikalni region."], ["Vratna kičma", "Cradle / chin hold rotaciona manipulacija C2-C6", "HVLA", "2 dana", "Kontrolisana rotaciona manipulacija srednjeg cervikalnog regiona."], ["Torakalna", "CTJ manipulacija u proniranom položaju", "HVLA", "1 dan", "Manipulacija cervikotorakalnog prelaza."], ["Torakalna", "Generalne mobilizacije torakalne kičme", "Mobilizacija", "1 dan", "Osnovne mobilizacione tehnike torakalnog regiona."], ["Torakalna", "Classic DOG manipulacija torakalne kičme", "HVLA", "2 dana", "Klasična torakalna manipulacija i njene varijacije."], ["Torakalna", "Classic butterfly manipulacija torakalne kičme", "HVLA", "1 dan", "Butterfly varijanta torakalne manipulacije."], ["LS kičma", "Generalne mobilizacije LS kičme", "Mobilizacija", "1 dan", "Osnovne mobilizacije lumbosakralnog regiona."], ["LS kičma", "Londonska osteopatska tehnika za akutni disk", "Specijalna", "2 dana", "Specijalizovana tehnika za akutnu disk-patologiju."], ["LS kičma", "Lumbar Roll manipulacija", "HVLA", "2 dana", "Klasična lumbalna HVLA u bočnom položaju."], ["LS kičma", "Chicago Roll manipulacija", "HVLA", "2 dana", "Napredna varijanta sa prilagođenom mehanikom tela."], ["SI zglob", "Side Roll SI zglob manipulacija", "HVLA", "1 dan", "Stabilna kontrolisana tehnika za SI disfunkciju."], ["Visceralno", "Generalne visceralne osteopatske tehnike", "Visceralno", "2 dana", "Rad sa visceralnom pokretljivošću i fascijom."], ["Periferne", "Periferne mobilizacije i manipulacije", "Mobilizacija", "2 dana", "Perifeme zglobne tehnike — rame, kuk, koleno, skočni zglob."], ]; function TehnikePage() { const { isMobile, isTablet } = useBreakpoint(); const bp = (d, t, m) => isMobile ? m : isTablet ? t : d; const [filter, setFilter] = useStateTh(() => { try { return localStorage.getItem("omt-spine-region") || "Sve"; } catch { return "Sve"; } }); const [q, setQ] = useStateTh(""); const [hover, setHover] = useStateTh(null); useEffectTh(() => { try { localStorage.removeItem("omt-spine-region"); } catch {} }, []); const heroRef = useReveal(0.1); const atlasRef = useReveal(0.1); const searchRef = useReveal(0.05); const [listKey, setListKey] = useStateTh("init"); useEffectTh(() => { setListKey(filter + "||" + q); }, [filter, q]); const filters = ["Sve", "Vratna kičma", "Torakalna", "LS kičma", "SI zglob", "Visceralno", "Periferne"]; const list = ALL_TECHNIQUES.filter(t => (filter === "Sve" || t[0] === filter) && (q === "" || t[1].toLowerCase().includes(q.toLowerCase())) ); const tagColor = () => ({ bg: "rgba(4,175,143,.15)", fg: "#02604F" }); return (
Spisak tehnika · Interaktivni atlas

15 tehnika. {!isMobile && "Kliknite region kičme."}

Svaka tehnika se uvežbava kroz sve faze pokreta, u kontrolisanoj praksi, pre primene pune snage. {!isMobile && "Izaberite region da filtrirate listu."}

{/* Mobile: horizontal chip filter bar instead of atlas */} {isMobile && (
{filters.map(f => setFilter(f)}>{f})}
)}
{/* SpineAtlas: desktop only */} {!isMobile && (
{isTablet && (
{filters.map(f => setFilter(f)}>{f})}
)} {!isTablet && }
)}
{/* Search bar */}
setQ(e.target.value)} placeholder={isMobile ? "Pretraži tehniku…" : "Pretražite tehniku (npr. HVLA, Lumbar Roll, C0-C1)"} style={{ flex: 1, border: 0, outline: 0, padding: bp("12px 14px","10px 12px","8px 12px"), fontSize: bp(15,14,14), fontFamily: "inherit", background: "transparent" }} />
{/* Desktop filter chips (shown beside atlas) */} {!isMobile && !isTablet && (
{filters.map(f => setFilter(f)}>{f})}
)}
{list.map(([region, title, tag, dur, desc], i) => { const c = tagColor(tag); const delay = Math.min(i * 0.06, 0.48); return (
{tag} {dur}

{title}

{desc}

{region}
); })} {list.length === 0 && (
Nema rezultata za „{q}". Probajte drugi pojam.
)}
); } function SpineAtlas({ filter, setFilter, hover, setHover }) { const regions = [ { id: "Vratna kičma", label: "Vratna kičma (C1–C7)", y: 64, h: 80, count: 7 }, { id: "Torakalna", label: "Torakalna (T1–T12)", y: 160, h: 160, count: 12 }, { id: "LS kičma", label: "Lumbalna (L1–L5)", y: 336, h: 90, count: 5 }, { id: "SI zglob", label: "SI zglob", y: 442, h: 44, count: 0 }, ]; const isActive = (id) => filter === id || hover === id; const techCount = (id) => ALL_TECHNIQUES.filter(t => t[0] === id).length; return (
Atlas kičme
Kliknite region za filter
setFilter("Sve")} style={{cursor:"pointer"}}> {regions.map((r) => { const active = isActive(r.id); const step = r.count > 0 ? r.h / r.count : r.h; return ( setHover(r.id)} onMouseLeave={() => setHover(null)} onClick={() => setFilter(r.id)} style={{ cursor: "pointer" }}> {r.count > 0 && Array.from({length: r.count}).map((_, i) => { const yv = r.y + i*step + 1; const wv = 40 + Math.sin(i*0.5)*2; return ( ); })} {r.count === 0 && ( )} {r.label.split(" ")[0]} {r.label.split(" ")[1] || ""} {techCount(r.id)} tehnika ); })} setFilter("Sve")} style={{ cursor: "pointer" }}> Prikaži sve (15)
); } window.TehnikePage = TehnikePage;