third-audience-mdx 1.0.0 → 1.0.3

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.
@@ -0,0 +1,438 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/dashboard/ui/pages/OkfPage.tsx
22
+ var OkfPage_exports = {};
23
+ __export(OkfPage_exports, {
24
+ OkfPage: () => OkfPage
25
+ });
26
+ module.exports = __toCommonJS(OkfPage_exports);
27
+ var import_react = require("react");
28
+
29
+ // src/dashboard/ui/components/Card.tsx
30
+ var import_jsx_runtime = require("react/jsx-runtime");
31
+ function Card({ title, action, children }) {
32
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "ta-card ta-section", children: [
33
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "ta-card-header", children: [
34
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: title }),
35
+ action
36
+ ] }),
37
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "ta-card-body", children })
38
+ ] });
39
+ }
40
+
41
+ // src/dashboard/ui/components/HeroCard.tsx
42
+ var import_jsx_runtime2 = require("react/jsx-runtime");
43
+ function HeroCard({ label, value, meta, color = "blue", icon }) {
44
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: `ta-hero-card ta-hero-card--${color}`, children: [
45
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "ta-hero-icon", children: icon }),
46
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
47
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "ta-hero-label", children: label }),
48
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "ta-hero-value", children: value }),
49
+ meta && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "ta-hero-meta", children: meta })
50
+ ] })
51
+ ] });
52
+ }
53
+
54
+ // src/dashboard/ui/pages/OkfPage.tsx
55
+ var import_jsx_runtime3 = require("react/jsx-runtime");
56
+ function OkfGraph({ data }) {
57
+ const svgRef = (0, import_react.useRef)(null);
58
+ (0, import_react.useEffect)(() => {
59
+ const svg = svgRef.current;
60
+ if (!svg || !data.nodes.length) return;
61
+ const NS = "http://www.w3.org/2000/svg";
62
+ svg.innerHTML = "";
63
+ const rect = svg.getBoundingClientRect();
64
+ const W = Math.max(320, Math.round(rect.width)) || 900;
65
+ const H = Math.max(360, Math.round(rect.height)) || 560;
66
+ svg.setAttribute("viewBox", `0 0 ${W} ${H}`);
67
+ const showLabels = data.nodes.length <= 40;
68
+ const spread = Math.min(W, H) * 0.42;
69
+ const nodes = data.nodes.map((n, i) => {
70
+ const ang = i / data.nodes.length * Math.PI * 2;
71
+ return { ...n, x: W / 2 + Math.cos(ang) * spread, y: H / 2 + Math.sin(ang) * spread, vx: 0, vy: 0, deg: 0, fixed: false, moved: false };
72
+ });
73
+ const byId = {};
74
+ nodes.forEach((n) => {
75
+ byId[n.id] = n;
76
+ });
77
+ const edges = data.edges.filter((e) => byId[e.source] && byId[e.target] && e.source !== e.target);
78
+ edges.forEach((e) => {
79
+ byId[e.source].deg++;
80
+ byId[e.target].deg++;
81
+ });
82
+ const radius = (n) => 6 + Math.min(10, n.deg * 1.7);
83
+ function tick() {
84
+ for (let i = 0; i < nodes.length; i++) {
85
+ const a = nodes[i];
86
+ for (let j = i + 1; j < nodes.length; j++) {
87
+ const b = nodes[j];
88
+ const dx = a.x - b.x, dy = a.y - b.y;
89
+ const d2 = dx * dx + dy * dy || 0.01, d = Math.sqrt(d2);
90
+ const f = 9e3 / d2, fx = f * dx / d, fy = f * dy / d;
91
+ a.vx += fx;
92
+ a.vy += fy;
93
+ b.vx -= fx;
94
+ b.vy -= fy;
95
+ }
96
+ a.vx += (W / 2 - a.x) * 5e-3;
97
+ a.vy += (H / 2 - a.y) * 5e-3;
98
+ }
99
+ for (const e of edges) {
100
+ const a = byId[e.source], b = byId[e.target];
101
+ const dx = b.x - a.x, dy = b.y - a.y;
102
+ const d = Math.sqrt(dx * dx + dy * dy) || 0.01;
103
+ const f = (d - 150) * 0.012, fx = f * dx / d, fy = f * dy / d;
104
+ a.vx += fx;
105
+ a.vy += fy;
106
+ b.vx -= fx;
107
+ b.vy -= fy;
108
+ }
109
+ for (const a of nodes) {
110
+ if (a.fixed) {
111
+ a.vx = 0;
112
+ a.vy = 0;
113
+ continue;
114
+ }
115
+ a.vx *= 0.86;
116
+ a.vy *= 0.86;
117
+ a.x += Math.max(-12, Math.min(12, a.vx));
118
+ a.y += Math.max(-12, Math.min(12, a.vy));
119
+ }
120
+ }
121
+ const view = document.createElementNS(NS, "g");
122
+ svg.appendChild(view);
123
+ const gE = document.createElementNS(NS, "g");
124
+ const gN = document.createElementNS(NS, "g");
125
+ view.appendChild(gE);
126
+ view.appendChild(gN);
127
+ let tx = 0, ty = 0, sc = 1;
128
+ const applyView = () => view.setAttribute("transform", `translate(${tx},${ty}) scale(${sc})`);
129
+ const edgeEls = edges.map(() => {
130
+ const ln = document.createElementNS(NS, "line");
131
+ ln.setAttribute("stroke", "rgba(130,175,230,0.10)");
132
+ ln.setAttribute("stroke-width", "0.7");
133
+ gE.appendChild(ln);
134
+ return ln;
135
+ });
136
+ nodes.forEach((n) => {
137
+ const g = document.createElementNS(NS, "g");
138
+ g.setAttribute("cursor", n.url ? "pointer" : "grab");
139
+ const c = document.createElementNS(NS, "circle");
140
+ c.setAttribute("r", String(radius(n)));
141
+ c.setAttribute("fill", n.type === "WebPage" || n.type === "Page" ? "#8ab4e8" : "#5291d7");
142
+ c.setAttribute("stroke", "#0f1115");
143
+ c.setAttribute("stroke-width", "1.5");
144
+ const t = document.createElementNS(NS, "text");
145
+ t.textContent = n.title.length > 26 ? n.title.slice(0, 24) + "\u2026" : n.title;
146
+ t.setAttribute("fill", "#c9d4e0");
147
+ t.setAttribute("font-size", "11");
148
+ t.setAttribute("text-anchor", "middle");
149
+ t.setAttribute("pointer-events", "none");
150
+ t.setAttribute("opacity", showLabels ? "1" : "0");
151
+ const ti = document.createElementNS(NS, "title");
152
+ ti.textContent = n.title;
153
+ g.appendChild(c);
154
+ g.appendChild(t);
155
+ g.appendChild(ti);
156
+ g.addEventListener("mouseenter", () => highlight(n));
157
+ g.addEventListener("mouseleave", clearHi);
158
+ if (n.url) {
159
+ g.addEventListener("click", () => {
160
+ if (n.moved) {
161
+ n.moved = false;
162
+ return;
163
+ }
164
+ window.open(n.url, "_blank", "noopener");
165
+ });
166
+ }
167
+ gN.appendChild(g);
168
+ n.g = g;
169
+ n.c = c;
170
+ n.t = t;
171
+ });
172
+ function highlight(node) {
173
+ const on = { [node.id]: true };
174
+ edges.forEach((e, i) => {
175
+ const hit = e.source === node.id || e.target === node.id;
176
+ edgeEls[i].setAttribute("stroke", hit ? "rgba(146,190,240,0.95)" : "rgba(130,175,230,0.07)");
177
+ if (hit) {
178
+ on[e.source] = true;
179
+ on[e.target] = true;
180
+ }
181
+ });
182
+ nodes.forEach((m) => {
183
+ m.g.setAttribute("opacity", on[m.id] ? "1" : "0.22");
184
+ m.t.setAttribute("opacity", on[m.id] ? "1" : showLabels ? "1" : "0");
185
+ });
186
+ }
187
+ function clearHi() {
188
+ edgeEls.forEach((el) => el.setAttribute("stroke", "rgba(130,175,230,0.10)"));
189
+ nodes.forEach((m) => {
190
+ m.g.setAttribute("opacity", "1");
191
+ if (!showLabels) m.t.setAttribute("opacity", "0");
192
+ });
193
+ }
194
+ function paint() {
195
+ edges.forEach((e, i) => {
196
+ const a = byId[e.source], b = byId[e.target];
197
+ edgeEls[i].setAttribute("x1", String(a.x));
198
+ edgeEls[i].setAttribute("y1", String(a.y));
199
+ edgeEls[i].setAttribute("x2", String(b.x));
200
+ edgeEls[i].setAttribute("y2", String(b.y));
201
+ });
202
+ nodes.forEach((n) => {
203
+ n.c.setAttribute("cx", String(n.x));
204
+ n.c.setAttribute("cy", String(n.y));
205
+ n.t.setAttribute("x", String(n.x));
206
+ n.t.setAttribute("y", String(n.y - radius(n) - 5));
207
+ });
208
+ }
209
+ function pt(el, ev) {
210
+ const m = el.getScreenCTM();
211
+ if (!m) return { x: ev.clientX, y: ev.clientY };
212
+ const inv = m.inverse();
213
+ return { x: inv.a * ev.clientX + inv.c * ev.clientY + inv.e, y: inv.b * ev.clientX + inv.d * ev.clientY + inv.f };
214
+ }
215
+ const state = { drag: null, pan: null };
216
+ svg.addEventListener("mousedown", (ev) => {
217
+ const p = pt(view, ev);
218
+ let best = 900;
219
+ let hit = null;
220
+ nodes.forEach((n) => {
221
+ const dx = n.x - p.x, dy = n.y - p.y, dd = dx * dx + dy * dy;
222
+ if (dd < best) {
223
+ best = dd;
224
+ hit = n;
225
+ }
226
+ });
227
+ if (hit !== null) {
228
+ state.drag = hit;
229
+ state.drag.fixed = true;
230
+ state.drag.moved = false;
231
+ } else {
232
+ const r = pt(svg, ev);
233
+ state.pan = { x: r.x, y: r.y, tx, ty };
234
+ svg.style.cursor = "grabbing";
235
+ }
236
+ });
237
+ const onMouseMove = (ev) => {
238
+ if (state.drag !== null) {
239
+ const p = pt(view, ev);
240
+ state.drag.x = p.x;
241
+ state.drag.y = p.y;
242
+ state.drag.moved = true;
243
+ tick();
244
+ state.drag.x = p.x;
245
+ state.drag.y = p.y;
246
+ paint();
247
+ } else if (state.pan !== null) {
248
+ const r = pt(svg, ev);
249
+ tx = state.pan.tx + (r.x - state.pan.x);
250
+ ty = state.pan.ty + (r.y - state.pan.y);
251
+ applyView();
252
+ }
253
+ };
254
+ const onMouseUp = () => {
255
+ if (state.drag !== null) {
256
+ state.drag.fixed = false;
257
+ state.drag = null;
258
+ let f = 0;
259
+ (function r() {
260
+ tick();
261
+ paint();
262
+ if (f++ < 60) requestAnimationFrame(r);
263
+ })();
264
+ }
265
+ if (state.pan !== null) {
266
+ state.pan = null;
267
+ svg.style.cursor = "";
268
+ }
269
+ };
270
+ window.addEventListener("mousemove", onMouseMove);
271
+ window.addEventListener("mouseup", onMouseUp);
272
+ svg.addEventListener("wheel", (ev) => {
273
+ ev.preventDefault();
274
+ const r = pt(svg, ev), lx = (r.x - tx) / sc, ly = (r.y - ty) / sc;
275
+ sc = Math.max(0.15, Math.min(4, sc * (ev.deltaY < 0 ? 1.12 : 1 / 1.12)));
276
+ tx = r.x - lx * sc;
277
+ ty = r.y - ly * sc;
278
+ applyView();
279
+ }, { passive: false });
280
+ function fitView() {
281
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
282
+ nodes.forEach((n) => {
283
+ const r = radius(n) + 24;
284
+ if (n.x - r < minX) minX = n.x - r;
285
+ if (n.y - r < minY) minY = n.y - r;
286
+ if (n.x + r > maxX) maxX = n.x + r;
287
+ if (n.y + r > maxY) maxY = n.y + r;
288
+ });
289
+ const bw = Math.max(1, maxX - minX), bh = Math.max(1, maxY - minY), pad = 30;
290
+ sc = Math.max(0.15, Math.min(2, Math.min((W - pad * 2) / bw, (H - pad * 2) / bh)));
291
+ tx = (W - bw * sc) / 2 - minX * sc;
292
+ ty = (H - bh * sc) / 2 - minY * sc;
293
+ applyView();
294
+ }
295
+ for (let k = 0; k < 500; k++) tick();
296
+ paint();
297
+ fitView();
298
+ return () => {
299
+ window.removeEventListener("mousemove", onMouseMove);
300
+ window.removeEventListener("mouseup", onMouseUp);
301
+ };
302
+ }, [data]);
303
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
304
+ "svg",
305
+ {
306
+ ref: svgRef,
307
+ style: { width: "100%", height: "72vh", minHeight: 560, display: "block", background: "#0f1115", borderRadius: 8, cursor: "grab", touchAction: "none" },
308
+ role: "img",
309
+ "aria-label": "Knowledge graph of your content"
310
+ }
311
+ );
312
+ }
313
+ function OkfPage() {
314
+ const [state, setState] = (0, import_react.useState)({ data: null, loading: true, error: null });
315
+ (0, import_react.useEffect)(() => {
316
+ fetch("/api/third-audience/okf-graph").then((r) => r.ok ? r.json() : r.json().then((e) => Promise.reject(e.error ?? "Failed"))).then((data2) => setState({ data: data2, loading: false, error: null })).catch((e) => setState({ data: null, loading: false, error: String(e) }));
317
+ }, []);
318
+ if (state.loading) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { padding: 48, color: "var(--ta-gray-500)", textAlign: "center" }, children: "Loading knowledge graph\u2026" });
319
+ if (state.error) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { padding: 48, color: "var(--ta-red)", textAlign: "center" }, children: state.error });
320
+ if (!state.data) return null;
321
+ const { data } = state;
322
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
323
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h1", { className: "ta-page-title", children: "OKF Bundle" }),
324
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "ta-page-subtitle", children: "Open Knowledge Format \u2014 your content as clean Markdown for AI crawlers" }),
325
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "ta-hero-grid", children: [
326
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
327
+ HeroCard,
328
+ {
329
+ label: "Total Pages",
330
+ value: data.stats.pages,
331
+ meta: "in content directory",
332
+ color: "blue",
333
+ icon: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: [
334
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }),
335
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("polyline", { points: "14 2 14 8 20 8" })
336
+ ] })
337
+ }
338
+ ),
339
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
340
+ HeroCard,
341
+ {
342
+ label: "Graph Nodes",
343
+ value: data.stats.nodes,
344
+ meta: "top connected pages",
345
+ color: "teal",
346
+ icon: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: [
347
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "12", cy: "12", r: "3" }),
348
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "3", cy: "6", r: "2" }),
349
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "21", cy: "6", r: "2" }),
350
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "3", cy: "18", r: "2" }),
351
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "21", cy: "18", r: "2" }),
352
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "5", y1: "6", x2: "10", y2: "11" }),
353
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "19", y1: "6", x2: "14", y2: "11" }),
354
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "5", y1: "18", x2: "10", y2: "13" }),
355
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "19", y1: "18", x2: "14", y2: "13" })
356
+ ] })
357
+ }
358
+ ),
359
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
360
+ HeroCard,
361
+ {
362
+ label: "Internal Links",
363
+ value: data.stats.edges,
364
+ meta: "edges in graph",
365
+ color: "green",
366
+ icon: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: [
367
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" }),
368
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" })
369
+ ] })
370
+ }
371
+ ),
372
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
373
+ HeroCard,
374
+ {
375
+ label: "Bundle Index",
376
+ value: "View",
377
+ meta: data.indexUrl.replace(/^https?:\/\/[^/]+/, ""),
378
+ color: "orange",
379
+ icon: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: [
380
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
381
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("polyline", { points: "15 3 21 3 21 9" }),
382
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
383
+ ] })
384
+ }
385
+ )
386
+ ] }),
387
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { marginBottom: 24 }, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Card, { title: "Knowledge Graph", children: [
388
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { style: { fontSize: 13, color: "var(--ta-gray-500)", marginBottom: 16 }, children: [
389
+ "Drag nodes \xB7 scroll to zoom \xB7 drag background to pan \xB7 click a node to open the page",
390
+ data.graph.nodes.length > 40 && " \xB7 hover a node to reveal its labels"
391
+ ] }),
392
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(OkfGraph, { data: data.graph })
393
+ ] }) }),
394
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "ta-grid-2", children: [
395
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Card, { title: "Bundle URLs", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("table", { className: "ta-table", children: [
396
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("tr", { children: [
397
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("th", { children: "Resource" }),
398
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("th", { children: "URL" })
399
+ ] }) }),
400
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("tbody", { children: [
401
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("tr", { children: [
402
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("td", { children: "Index" }),
403
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("a", { href: "/okf", target: "_blank", rel: "noreferrer", style: { fontFamily: "var(--ta-font-mono)", fontSize: 12 }, children: "/okf" }) })
404
+ ] }),
405
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("tr", { children: [
406
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("td", { children: "AI Sitemap" }),
407
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("a", { href: "/sitemap-ai.xml", target: "_blank", rel: "noreferrer", style: { fontFamily: "var(--ta-font-mono)", fontSize: 12 }, children: "/sitemap-ai.xml" }) })
408
+ ] }),
409
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("tr", { children: [
410
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("td", { children: "LLMs.txt" }),
411
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("a", { href: "/llms.txt", target: "_blank", rel: "noreferrer", style: { fontFamily: "var(--ta-font-mono)", fontSize: 12 }, children: "/llms.txt" }) })
412
+ ] })
413
+ ] })
414
+ ] }) }),
415
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Card, { title: "How AI Crawlers Use OKF", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { fontSize: 13, color: "var(--ta-gray-600)", lineHeight: 1.7 }, children: [
416
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { style: { marginBottom: 10 }, children: [
417
+ "Each page on your site is available as clean Markdown at ",
418
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("code", { style: { fontFamily: "var(--ta-font-mono)", background: "var(--ta-gray-100)", padding: "1px 5px", borderRadius: 4 }, children: "/okf/slug.md" })
419
+ ] }),
420
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { style: { marginBottom: 10 }, children: [
421
+ "Internal links are rewritten to point to sibling ",
422
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("code", { style: { fontFamily: "var(--ta-font-mono)", background: "var(--ta-gray-100)", padding: "1px 5px", borderRadius: 4 }, children: ".md" }),
423
+ " files so crawlers can follow the full knowledge graph."
424
+ ] }),
425
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { children: [
426
+ "The index at ",
427
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("code", { style: { fontFamily: "var(--ta-font-mono)", background: "var(--ta-gray-100)", padding: "1px 5px", borderRadius: 4 }, children: "/okf" }),
428
+ " lists every page with title and description \u2014 a complete sitemap in natural language."
429
+ ] })
430
+ ] }) })
431
+ ] })
432
+ ] });
433
+ }
434
+ // Annotate the CommonJS export names for ESM import in node:
435
+ 0 && (module.exports = {
436
+ OkfPage
437
+ });
438
+ //# sourceMappingURL=OkfPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/dashboard/ui/pages/OkfPage.tsx","../../../../src/dashboard/ui/components/Card.tsx","../../../../src/dashboard/ui/components/HeroCard.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef, useState } from 'react'\nimport { Card } from '../components/Card.js'\nimport { HeroCard } from '../components/HeroCard.js'\n\ninterface GraphNode { id: string; title: string; type: string; url: string }\ninterface GraphEdge { source: string; target: string }\ninterface GraphData { nodes: GraphNode[]; edges: GraphEdge[] }\ninterface OkfData {\n graph: GraphData\n stats: { pages: number; nodes: number; edges: number }\n indexUrl: string\n}\n\nfunction OkfGraph({ data }: { data: GraphData }) {\n const svgRef = useRef<SVGSVGElement>(null)\n\n useEffect(() => {\n const svg = svgRef.current\n if (!svg || !data.nodes.length) return\n const NS = 'http://www.w3.org/2000/svg'\n svg.innerHTML = ''\n\n const rect = svg.getBoundingClientRect()\n const W = Math.max(320, Math.round(rect.width)) || 900\n const H = Math.max(360, Math.round(rect.height)) || 560\n svg.setAttribute('viewBox', `0 0 ${W} ${H}`)\n\n const showLabels = data.nodes.length <= 40\n const spread = Math.min(W, H) * 0.42\n\n type SimNode = GraphNode & { x: number; y: number; vx: number; vy: number; deg: number; fixed: boolean; moved: boolean; g?: SVGGElement; c?: SVGCircleElement; t?: SVGTextElement }\n const nodes: SimNode[] = data.nodes.map((n, i) => {\n const ang = (i / data.nodes.length) * Math.PI * 2\n return { ...n, x: W / 2 + Math.cos(ang) * spread, y: H / 2 + Math.sin(ang) * spread, vx: 0, vy: 0, deg: 0, fixed: false, moved: false }\n })\n\n const byId: Record<string, SimNode> = {}\n nodes.forEach(n => { byId[n.id] = n })\n\n const edges = data.edges.filter(e => byId[e.source] && byId[e.target] && e.source !== e.target)\n edges.forEach(e => { byId[e.source].deg++; byId[e.target].deg++ })\n\n const radius = (n: SimNode) => 6 + Math.min(10, n.deg * 1.7)\n\n function tick() {\n for (let i = 0; i < nodes.length; i++) {\n const a = nodes[i]\n for (let j = i + 1; j < nodes.length; j++) {\n const b = nodes[j]\n const dx = a.x - b.x, dy = a.y - b.y\n const d2 = dx * dx + dy * dy || 0.01, d = Math.sqrt(d2)\n const f = 9000 / d2, fx = f * dx / d, fy = f * dy / d\n a.vx += fx; a.vy += fy; b.vx -= fx; b.vy -= fy\n }\n a.vx += (W / 2 - a.x) * 0.005\n a.vy += (H / 2 - a.y) * 0.005\n }\n for (const e of edges) {\n const a = byId[e.source], b = byId[e.target]\n const dx = b.x - a.x, dy = b.y - a.y\n const d = Math.sqrt(dx * dx + dy * dy) || 0.01\n const f = (d - 150) * 0.012, fx = f * dx / d, fy = f * dy / d\n a.vx += fx; a.vy += fy; b.vx -= fx; b.vy -= fy\n }\n for (const a of nodes) {\n if (a.fixed) { a.vx = 0; a.vy = 0; continue }\n a.vx *= 0.86; a.vy *= 0.86\n a.x += Math.max(-12, Math.min(12, a.vx))\n a.y += Math.max(-12, Math.min(12, a.vy))\n }\n }\n\n const view = document.createElementNS(NS, 'g')\n svg.appendChild(view)\n const gE = document.createElementNS(NS, 'g')\n const gN = document.createElementNS(NS, 'g')\n view.appendChild(gE); view.appendChild(gN)\n\n let tx = 0, ty = 0, sc = 1\n const applyView = () => view.setAttribute('transform', `translate(${tx},${ty}) scale(${sc})`)\n\n const edgeEls = edges.map(() => {\n const ln = document.createElementNS(NS, 'line')\n ln.setAttribute('stroke', 'rgba(130,175,230,0.10)')\n ln.setAttribute('stroke-width', '0.7')\n gE.appendChild(ln); return ln\n })\n\n nodes.forEach(n => {\n const g = document.createElementNS(NS, 'g')\n g.setAttribute('cursor', n.url ? 'pointer' : 'grab')\n const c = document.createElementNS(NS, 'circle')\n c.setAttribute('r', String(radius(n)))\n c.setAttribute('fill', n.type === 'WebPage' || n.type === 'Page' ? '#8ab4e8' : '#5291d7')\n c.setAttribute('stroke', '#0f1115'); c.setAttribute('stroke-width', '1.5')\n const t = document.createElementNS(NS, 'text')\n t.textContent = n.title.length > 26 ? n.title.slice(0, 24) + '…' : n.title\n t.setAttribute('fill', '#c9d4e0'); t.setAttribute('font-size', '11')\n t.setAttribute('text-anchor', 'middle'); t.setAttribute('pointer-events', 'none')\n t.setAttribute('opacity', showLabels ? '1' : '0')\n const ti = document.createElementNS(NS, 'title'); ti.textContent = n.title\n g.appendChild(c); g.appendChild(t); g.appendChild(ti)\n g.addEventListener('mouseenter', () => highlight(n))\n g.addEventListener('mouseleave', clearHi)\n if (n.url) {\n g.addEventListener('click', () => { if (n.moved) { n.moved = false; return } window.open(n.url, '_blank', 'noopener') })\n }\n gN.appendChild(g); n.g = g; n.c = c; n.t = t\n })\n\n function highlight(node: SimNode) {\n const on: Record<string, boolean> = { [node.id]: true }\n edges.forEach((e, i) => {\n const hit = e.source === node.id || e.target === node.id\n edgeEls[i].setAttribute('stroke', hit ? 'rgba(146,190,240,0.95)' : 'rgba(130,175,230,0.07)')\n if (hit) { on[e.source] = true; on[e.target] = true }\n })\n nodes.forEach(m => {\n m.g!.setAttribute('opacity', on[m.id] ? '1' : '0.22')\n m.t!.setAttribute('opacity', on[m.id] ? '1' : showLabels ? '1' : '0')\n })\n }\n\n function clearHi() {\n edgeEls.forEach(el => el.setAttribute('stroke', 'rgba(130,175,230,0.10)'))\n nodes.forEach(m => {\n m.g!.setAttribute('opacity', '1')\n if (!showLabels) m.t!.setAttribute('opacity', '0')\n })\n }\n\n function paint() {\n edges.forEach((e, i) => {\n const a = byId[e.source], b = byId[e.target]\n edgeEls[i].setAttribute('x1', String(a.x)); edgeEls[i].setAttribute('y1', String(a.y))\n edgeEls[i].setAttribute('x2', String(b.x)); edgeEls[i].setAttribute('y2', String(b.y))\n })\n nodes.forEach(n => {\n n.c!.setAttribute('cx', String(n.x)); n.c!.setAttribute('cy', String(n.y))\n n.t!.setAttribute('x', String(n.x)); n.t!.setAttribute('y', String(n.y - radius(n) - 5))\n })\n }\n\n function pt(el: SVGGraphicsElement, ev: MouseEvent) {\n const m = el.getScreenCTM(); if (!m) return { x: ev.clientX, y: ev.clientY }\n const inv = m.inverse()\n return { x: inv.a * ev.clientX + inv.c * ev.clientY + inv.e, y: inv.b * ev.clientX + inv.d * ev.clientY + inv.f }\n }\n\n const state: { drag: SimNode | null; pan: { x: number; y: number; tx: number; ty: number } | null } = { drag: null, pan: null }\n\n svg.addEventListener('mousedown', ev => {\n const p = pt(view as SVGGraphicsElement, ev)\n let best = 900\n let hit: SimNode | null = null\n nodes.forEach(n => { const dx = n.x - p.x, dy = n.y - p.y, dd = dx * dx + dy * dy; if (dd < best) { best = dd; hit = n } })\n if (hit !== null) { state.drag = hit; (state.drag as SimNode).fixed = true; (state.drag as SimNode).moved = false }\n else { const r = pt(svg as SVGGraphicsElement, ev); state.pan = { x: r.x, y: r.y, tx, ty }; svg.style.cursor = 'grabbing' }\n })\n const onMouseMove = (ev: MouseEvent) => {\n if (state.drag !== null) { const p = pt(view as SVGGraphicsElement, ev); state.drag.x = p.x; state.drag.y = p.y; state.drag.moved = true; tick(); state.drag.x = p.x; state.drag.y = p.y; paint() }\n else if (state.pan !== null) { const r = pt(svg as SVGGraphicsElement, ev); tx = state.pan.tx + (r.x - state.pan.x); ty = state.pan.ty + (r.y - state.pan.y); applyView() }\n }\n const onMouseUp = () => {\n if (state.drag !== null) {\n state.drag.fixed = false; state.drag = null\n let f = 0;(function r() { tick(); paint(); if (f++ < 60) requestAnimationFrame(r) })()\n }\n if (state.pan !== null) { state.pan = null; svg.style.cursor = '' }\n }\n window.addEventListener('mousemove', onMouseMove)\n window.addEventListener('mouseup', onMouseUp)\n svg.addEventListener('wheel', ev => {\n ev.preventDefault()\n const r = pt(svg as SVGGraphicsElement, ev), lx = (r.x - tx) / sc, ly = (r.y - ty) / sc\n sc = Math.max(0.15, Math.min(4, sc * (ev.deltaY < 0 ? 1.12 : 1 / 1.12)))\n tx = r.x - lx * sc; ty = r.y - ly * sc; applyView()\n }, { passive: false })\n\n function fitView() {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity\n nodes.forEach(n => {\n const r = radius(n) + 24\n if (n.x - r < minX) minX = n.x - r; if (n.y - r < minY) minY = n.y - r\n if (n.x + r > maxX) maxX = n.x + r; if (n.y + r > maxY) maxY = n.y + r\n })\n const bw = Math.max(1, maxX - minX), bh = Math.max(1, maxY - minY), pad = 30\n sc = Math.max(0.15, Math.min(2, Math.min((W - pad * 2) / bw, (H - pad * 2) / bh)))\n tx = (W - bw * sc) / 2 - minX * sc; ty = (H - bh * sc) / 2 - minY * sc; applyView()\n }\n\n for (let k = 0; k < 500; k++) tick()\n paint(); fitView()\n\n return () => {\n window.removeEventListener('mousemove', onMouseMove)\n window.removeEventListener('mouseup', onMouseUp)\n }\n }, [data])\n\n return (\n <svg\n ref={svgRef}\n style={{ width: '100%', height: '72vh', minHeight: 560, display: 'block', background: '#0f1115', borderRadius: 8, cursor: 'grab', touchAction: 'none' }}\n role=\"img\"\n aria-label=\"Knowledge graph of your content\"\n />\n )\n}\n\nexport function OkfPage() {\n const [state, setState] = useState<{ data: OkfData | null; loading: boolean; error: string | null }>({ data: null, loading: true, error: null })\n\n useEffect(() => {\n fetch('/api/third-audience/okf-graph')\n .then(r => r.ok ? r.json() : r.json().then((e: { error?: string }) => Promise.reject(e.error ?? 'Failed')))\n .then((data: OkfData) => setState({ data, loading: false, error: null }))\n .catch((e: unknown) => setState({ data: null, loading: false, error: String(e) }))\n }, [])\n\n if (state.loading) return <div style={{ padding: 48, color: 'var(--ta-gray-500)', textAlign: 'center' }}>Loading knowledge graph…</div>\n if (state.error) return <div style={{ padding: 48, color: 'var(--ta-red)', textAlign: 'center' }}>{state.error}</div>\n if (!state.data) return null\n\n const { data } = state\n\n return (\n <div>\n <h1 className=\"ta-page-title\">OKF Bundle</h1>\n <p className=\"ta-page-subtitle\">Open Knowledge Format — your content as clean Markdown for AI crawlers</p>\n\n <div className=\"ta-hero-grid\">\n <HeroCard\n label=\"Total Pages\"\n value={data.stats.pages}\n meta=\"in content directory\"\n color=\"blue\"\n icon={<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/></svg>}\n />\n <HeroCard\n label=\"Graph Nodes\"\n value={data.stats.nodes}\n meta=\"top connected pages\"\n color=\"teal\"\n icon={<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}><circle cx=\"12\" cy=\"12\" r=\"3\"/><circle cx=\"3\" cy=\"6\" r=\"2\"/><circle cx=\"21\" cy=\"6\" r=\"2\"/><circle cx=\"3\" cy=\"18\" r=\"2\"/><circle cx=\"21\" cy=\"18\" r=\"2\"/><line x1=\"5\" y1=\"6\" x2=\"10\" y2=\"11\"/><line x1=\"19\" y1=\"6\" x2=\"14\" y2=\"11\"/><line x1=\"5\" y1=\"18\" x2=\"10\" y2=\"13\"/><line x1=\"19\" y1=\"18\" x2=\"14\" y2=\"13\"/></svg>}\n />\n <HeroCard\n label=\"Internal Links\"\n value={data.stats.edges}\n meta=\"edges in graph\"\n color=\"green\"\n icon={<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/></svg>}\n />\n <HeroCard\n label=\"Bundle Index\"\n value=\"View\"\n meta={data.indexUrl.replace(/^https?:\\/\\/[^/]+/, '')}\n color=\"orange\"\n icon={<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/><polyline points=\"15 3 21 3 21 9\"/><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"/></svg>}\n />\n </div>\n\n <div style={{ marginBottom: 24 }}>\n <Card title=\"Knowledge Graph\">\n <p style={{ fontSize: 13, color: 'var(--ta-gray-500)', marginBottom: 16 }}>\n Drag nodes · scroll to zoom · drag background to pan · click a node to open the page\n {data.graph.nodes.length > 40 && ' · hover a node to reveal its labels'}\n </p>\n <OkfGraph data={data.graph} />\n </Card>\n </div>\n\n <div className=\"ta-grid-2\">\n <Card title=\"Bundle URLs\">\n <table className=\"ta-table\">\n <thead><tr><th>Resource</th><th>URL</th></tr></thead>\n <tbody>\n <tr>\n <td>Index</td>\n <td><a href=\"/okf\" target=\"_blank\" rel=\"noreferrer\" style={{ fontFamily: 'var(--ta-font-mono)', fontSize: 12 }}>/okf</a></td>\n </tr>\n <tr>\n <td>AI Sitemap</td>\n <td><a href=\"/sitemap-ai.xml\" target=\"_blank\" rel=\"noreferrer\" style={{ fontFamily: 'var(--ta-font-mono)', fontSize: 12 }}>/sitemap-ai.xml</a></td>\n </tr>\n <tr>\n <td>LLMs.txt</td>\n <td><a href=\"/llms.txt\" target=\"_blank\" rel=\"noreferrer\" style={{ fontFamily: 'var(--ta-font-mono)', fontSize: 12 }}>/llms.txt</a></td>\n </tr>\n </tbody>\n </table>\n </Card>\n <Card title=\"How AI Crawlers Use OKF\">\n <div style={{ fontSize: 13, color: 'var(--ta-gray-600)', lineHeight: 1.7 }}>\n <p style={{ marginBottom: 10 }}>Each page on your site is available as clean Markdown at <code style={{ fontFamily: 'var(--ta-font-mono)', background: 'var(--ta-gray-100)', padding: '1px 5px', borderRadius: 4 }}>/okf/slug.md</code></p>\n <p style={{ marginBottom: 10 }}>Internal links are rewritten to point to sibling <code style={{ fontFamily: 'var(--ta-font-mono)', background: 'var(--ta-gray-100)', padding: '1px 5px', borderRadius: 4 }}>.md</code> files so crawlers can follow the full knowledge graph.</p>\n <p>The index at <code style={{ fontFamily: 'var(--ta-font-mono)', background: 'var(--ta-gray-100)', padding: '1px 5px', borderRadius: 4 }}>/okf</code> lists every page with title and description — a complete sitemap in natural language.</p>\n </div>\n </Card>\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\ninterface CardProps {\n title: string\n action?: ReactNode\n children: ReactNode\n}\n\nexport function Card({ title, action, children }: CardProps) {\n return (\n <div className=\"ta-card ta-section\">\n <div className=\"ta-card-header\">\n <h2>{title}</h2>\n {action}\n </div>\n <div className=\"ta-card-body\">{children}</div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\ninterface HeroCardProps {\n label: string\n value: string | number\n meta?: string\n color?: 'blue' | 'green' | 'orange' | 'teal'\n icon: ReactNode\n}\n\nexport function HeroCard({ label, value, meta, color = 'blue', icon }: HeroCardProps) {\n return (\n <div className={`ta-hero-card ta-hero-card--${color}`}>\n <div className=\"ta-hero-icon\">{icon}</div>\n <div>\n <div className=\"ta-hero-label\">{label}</div>\n <div className=\"ta-hero-value\">{value}</div>\n {meta && <div className=\"ta-hero-meta\">{meta}</div>}\n </div>\n </div>\n )\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","data"]}