/* ============================================================
NemakiWare — page sections
============================================================ */
function SectionHead({ eyebrow, title, sub, center = false, badge = null }) {
return (
{eyebrow}
{badge}
{title}
{sub &&
{sub}
}
);
}
/* ---- 0a. Pain strip (top of page, below hero) ------------------ */
function PainStrip({ t }) {
const p = t.pains;
return (
{p.eyebrow}
{p.items.map((x, i) => (
))}
);
}
/* ---- 0. Foundation (general principle) ------------------------ */
function FoundationSection({ t }) {
const f = t.foundation;
return (
{f.points.map((p, i) => (
0{i + 1}
{p.t}
{p.d}
))}
);
}
/* ---- 1. The RAG problem (was: shift) -------------------------- */
function ShiftSection({ t }) {
const s = t.shift;
return (
{s.eyebrow}
{s.intro}
{s.title}
{s.body}
{s.before_label}
{s.before.map((x, i) => (
- ×{x}
))}
{s.after_label}
{s.after.map((x, i) => (
- {x}
))}
);
}
/* ---- 2. Pillars ----------------------------------------------- */
function PillarsSection({ t }) {
const p = t.pillars;
const icons = ["search", "layers", "plug", "cube", "cycle", "monitor"];
return (
{p.items.map((it, i) => (
{it.t}
{it.d}
))}
);
}
/* ---- 3. Permission model + flow ------------------------------- */
function PermissionSection({ t }) {
const p = t.perm;
const flowIcons = ["users", "search", "shield", "check"];
const steps = [
{ ic: "users", label: p.flow_user, sub: p.flow_q },
{ ic: "search", label: p.flow_search, sub: null },
{ ic: "shield", label: p.flow_acl, sub: p.flow_acl_d, accent: true },
{ ic: "check", label: p.flow_result, sub: null },
];
return (
{steps.map((st, i) => (
{st.label}
{st.sub &&
{st.sub}
}
{i < steps.length - 1 &&
}
))}
{p.points.map((pt, i) => (
))}
);
}
/* ---- 4. MCP & RAG --------------------------------------------- */
function McpSection({ t }) {
const m = t.mcp;
return (
{m.tools_label}
{m.tools.map((tool, i) => (
-
{tool.n}
{tool.d}
))}
JSON-RPC 2.0 · HTTP / SSE
{m.api_label}
{`POST /api/v1/cmis/repositories
/bedroom/rag/search
{ "query": "annual report",
"topK": 5, "minScore": 0.6 }`}
{m.providers_label}
{m.providers.map((pr, i) => (
))}
);
}
/* ---- 5. Team sharing → Lineage (Beta) ------------------------- */
function LineageSection({ t }) {
const l = t.lineage;
const importIcons = { "Slack": "users", "Box": "cube", "Google Drive": "database", "OneDrive": "database" };
return (
{l.betaNote}}
/>
{l.import_label}
{l.import.map((s, i) => (
{s}
))}
{l.lineage_label}
{l.lineageTargets.map((s, i) => (
{s}
))}
{l.caption}
);
}
/* ---- 6. CMIS heritage ----------------------------------------- */
function CmisSection({ t }) {
const c = t.cmis;
return (
{c.bind_label}
{c.bindings.map((b, i) => {b})}
{c.items.map((it, i) => (
{it}
))}
);
}
/* ---- 7. Architecture / stack ---------------------------------- */
function StackSection({ t }) {
const s = t.stack;
const d = s.diagram;
return (
{d.agent}{d.agentSub}
{d.ui} · {d.uiSub}
{d.core}
{d.coreSub}
{d.emb}{d.embSub}
{d.db}{d.dbSub}
{d.solr}{d.solrSub}
{s.stackTable.map((row, i) => (
| {row.k} |
{row.v} |
))}
{s.auth_label}
{s.auth.map((a, i) => (
- {a}
))}
);
}
/* ---- 8. Quickstart / open source ------------------------------ */
function QuickStartSection({ t }) {
const q = t.quick;
return (
);
}
/* ---- 9. Contact ----------------------------------------------- */
function ContactSection({ t }) {
const c = t.contact;
return (
);
}
Object.assign(window, {
PainStrip, FoundationSection, ShiftSection, PillarsSection, PermissionSection, McpSection,
LineageSection, CmisSection, StackSection, QuickStartSection, ContactSection,
});