@tekki-forge/runtime-admin 0.2.0 → 0.3.0

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.
Files changed (136) hide show
  1. package/dist/admin-dashboard.d.ts +16 -0
  2. package/dist/admin-dashboard.js +60 -0
  3. package/dist/admin-dashboard.js.map +1 -0
  4. package/dist/admin-orgs.d.ts +14 -0
  5. package/dist/admin-orgs.js +75 -0
  6. package/dist/admin-orgs.js.map +1 -0
  7. package/dist/admin-shell.d.ts +55 -0
  8. package/dist/admin-shell.js +141 -0
  9. package/dist/admin-shell.js.map +1 -0
  10. package/dist/admin.js +35 -4
  11. package/dist/admin.js.map +1 -1
  12. package/dist/app-pages.d.ts +19 -0
  13. package/dist/app-pages.js +109 -0
  14. package/dist/app-pages.js.map +1 -0
  15. package/dist/auth-pages.js +7 -2
  16. package/dist/auth-pages.js.map +1 -1
  17. package/dist/charts.d.ts +98 -2
  18. package/dist/charts.js +264 -24
  19. package/dist/charts.js.map +1 -1
  20. package/dist/context.js +32 -1
  21. package/dist/context.js.map +1 -1
  22. package/dist/dashboard.d.ts +63 -8
  23. package/dist/dashboard.js +180 -36
  24. package/dist/dashboard.js.map +1 -1
  25. package/dist/i18n/messages/de.js +751 -0
  26. package/dist/i18n/messages/de.js.map +1 -1
  27. package/dist/i18n/messages/en.js +751 -0
  28. package/dist/i18n/messages/en.js.map +1 -1
  29. package/dist/i18n/messages/es.js +751 -0
  30. package/dist/i18n/messages/es.js.map +1 -1
  31. package/dist/i18n/messages/fr.js +751 -0
  32. package/dist/i18n/messages/fr.js.map +1 -1
  33. package/dist/i18n/messages/pt.js +751 -0
  34. package/dist/i18n/messages/pt.js.map +1 -1
  35. package/dist/index.d.ts +9 -0
  36. package/dist/index.js +9 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/shell.js +37 -34
  39. package/dist/shell.js.map +1 -1
  40. package/dist/site/editor/api.d.ts +74 -0
  41. package/dist/site/editor/api.js +93 -0
  42. package/dist/site/editor/api.js.map +1 -0
  43. package/dist/site/editor/content-page.d.ts +4 -0
  44. package/dist/site/editor/content-page.js +65 -0
  45. package/dist/site/editor/content-page.js.map +1 -0
  46. package/dist/site/editor/inbox-tab.d.ts +4 -0
  47. package/dist/site/editor/inbox-tab.js +88 -0
  48. package/dist/site/editor/inbox-tab.js.map +1 -0
  49. package/dist/site/editor/index.d.ts +1 -0
  50. package/dist/site/editor/index.js +3 -0
  51. package/dist/site/editor/index.js.map +1 -0
  52. package/dist/site/editor/model.d.ts +145 -0
  53. package/dist/site/editor/model.js +408 -0
  54. package/dist/site/editor/model.js.map +1 -0
  55. package/dist/site/editor/page-editor.d.ts +10 -0
  56. package/dist/site/editor/page-editor.js +257 -0
  57. package/dist/site/editor/page-editor.js.map +1 -0
  58. package/dist/site/editor/page-settings.d.ts +9 -0
  59. package/dist/site/editor/page-settings.js +105 -0
  60. package/dist/site/editor/page-settings.js.map +1 -0
  61. package/dist/site/editor/pages-tab.d.ts +5 -0
  62. package/dist/site/editor/pages-tab.js +108 -0
  63. package/dist/site/editor/pages-tab.js.map +1 -0
  64. package/dist/site/editor/posts-tab.d.ts +6 -0
  65. package/dist/site/editor/posts-tab.js +139 -0
  66. package/dist/site/editor/posts-tab.js.map +1 -0
  67. package/dist/site/editor/preview.d.ts +32 -0
  68. package/dist/site/editor/preview.js +104 -0
  69. package/dist/site/editor/preview.js.map +1 -0
  70. package/dist/site/editor/prop-fields.d.ts +53 -0
  71. package/dist/site/editor/prop-fields.js +233 -0
  72. package/dist/site/editor/prop-fields.js.map +1 -0
  73. package/dist/site/editor/section-list.d.ts +14 -0
  74. package/dist/site/editor/section-list.js +110 -0
  75. package/dist/site/editor/section-list.js.map +1 -0
  76. package/dist/site/editor/section-picker.d.ts +12 -0
  77. package/dist/site/editor/section-picker.js +44 -0
  78. package/dist/site/editor/section-picker.js.map +1 -0
  79. package/dist/site/editor/widgets.d.ts +84 -0
  80. package/dist/site/editor/widgets.js +130 -0
  81. package/dist/site/editor/widgets.js.map +1 -0
  82. package/dist/site/format.d.ts +31 -0
  83. package/dist/site/format.js +106 -0
  84. package/dist/site/format.js.map +1 -0
  85. package/dist/site/forms.d.ts +43 -0
  86. package/dist/site/forms.js +155 -0
  87. package/dist/site/forms.js.map +1 -0
  88. package/dist/site/header.d.ts +32 -0
  89. package/dist/site/header.js +76 -0
  90. package/dist/site/header.js.map +1 -0
  91. package/dist/site/icons.d.ts +10 -0
  92. package/dist/site/icons.js +28 -0
  93. package/dist/site/icons.js.map +1 -0
  94. package/dist/site/index.d.ts +11 -0
  95. package/dist/site/index.js +13 -0
  96. package/dist/site/index.js.map +1 -0
  97. package/dist/site/markdown.d.ts +14 -0
  98. package/dist/site/markdown.js +457 -0
  99. package/dist/site/markdown.js.map +1 -0
  100. package/dist/site/page.d.ts +16 -0
  101. package/dist/site/page.js +65 -0
  102. package/dist/site/page.js.map +1 -0
  103. package/dist/site/proxy.d.ts +13 -0
  104. package/dist/site/proxy.js +43 -0
  105. package/dist/site/proxy.js.map +1 -0
  106. package/dist/site/sections.d.ts +43 -0
  107. package/dist/site/sections.js +560 -0
  108. package/dist/site/sections.js.map +1 -0
  109. package/dist/site/server.d.ts +73 -0
  110. package/dist/site/server.js +235 -0
  111. package/dist/site/server.js.map +1 -0
  112. package/dist/site/types.d.ts +137 -0
  113. package/dist/site/types.js +2 -0
  114. package/dist/site/types.js.map +1 -0
  115. package/dist/support.d.ts +29 -0
  116. package/dist/support.js +165 -0
  117. package/dist/support.js.map +1 -0
  118. package/dist/system-config.d.ts +24 -0
  119. package/dist/system-config.js +37 -0
  120. package/dist/system-config.js.map +1 -0
  121. package/dist/system-settings.d.ts +9 -0
  122. package/dist/system-settings.js +60 -0
  123. package/dist/system-settings.js.map +1 -0
  124. package/dist/theme-catalog.d.ts +72 -2
  125. package/dist/theme-catalog.js +47 -0
  126. package/dist/theme-catalog.js.map +1 -1
  127. package/dist/theme-switcher.d.ts +8 -0
  128. package/dist/theme-switcher.js +39 -4
  129. package/dist/theme-switcher.js.map +1 -1
  130. package/dist/theme.js +8 -0
  131. package/dist/theme.js.map +1 -1
  132. package/dist/transactions.d.ts +4 -0
  133. package/dist/transactions.js +60 -0
  134. package/dist/transactions.js.map +1 -0
  135. package/package.json +9 -5
  136. package/styles.css +1089 -0
@@ -0,0 +1,457 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { validHref, validImage } from "@tekki-forge/compiler/site";
3
+ import { Fragment } from "react";
4
+ const MAX_DEPTH = 8;
5
+ const FENCE = /^ {0,3}(`{3,}|~{3,})\s*([\w+#.-]*)\s*$/;
6
+ const HEADING = /^ {0,3}(#{1,6})(?:\s+(.*?))?\s*#*\s*$/;
7
+ const RULE = /^ {0,3}([-*_])(?:\s*\1){2,}\s*$/;
8
+ const BULLET = /^( {0,3})([-*+])\s+(.*)$/;
9
+ const ORDERED = /^( {0,3})(\d{1,9})[.)]\s+(.*)$/;
10
+ const QUOTE = /^ {0,3}>\s?(.*)$/;
11
+ const TABLE_SEP = /^\s*\|?\s*:?-{1,}:?\s*(\|\s*:?-{1,}:?\s*)*\|?\s*$/;
12
+ const isBlank = (line) => !line.trim();
13
+ const startsBlock = (line) => FENCE.test(line) || HEADING.test(line) || RULE.test(line) || BULLET.test(line) || ORDERED.test(line) || QUOTE.test(line);
14
+ function splitRow(line) {
15
+ let s = line.trim();
16
+ if (s.startsWith("|"))
17
+ s = s.slice(1);
18
+ if (s.endsWith("|") && !s.endsWith("\\|"))
19
+ s = s.slice(0, -1);
20
+ const cells = [];
21
+ let cur = "";
22
+ for (let i = 0; i < s.length; i++) {
23
+ if (s[i] === "\\" && s[i + 1] === "|") {
24
+ cur += "|";
25
+ i++;
26
+ }
27
+ else if (s[i] === "|") {
28
+ cells.push(cur.trim());
29
+ cur = "";
30
+ }
31
+ else
32
+ cur += s[i];
33
+ }
34
+ cells.push(cur.trim());
35
+ return cells;
36
+ }
37
+ function parseBlocks(lines, depth) {
38
+ const out = [];
39
+ let i = 0;
40
+ while (i < lines.length) {
41
+ const line = lines[i];
42
+ if (isBlank(line)) {
43
+ i++;
44
+ continue;
45
+ }
46
+ const fence = FENCE.exec(line);
47
+ if (fence) {
48
+ const marker = fence[1];
49
+ const body = [];
50
+ i++;
51
+ while (i < lines.length && !new RegExp(`^ {0,3}${marker[0] === "`" ? "`" : "~"}{${marker.length},}\\s*$`).test(lines[i]))
52
+ body.push(lines[i++]);
53
+ i++; // closing fence (or end of text)
54
+ out.push({ t: "code", ...(fence[2] ? { lang: fence[2] } : {}), text: body.join("\n") });
55
+ continue;
56
+ }
57
+ const heading = HEADING.exec(line);
58
+ if (heading) {
59
+ out.push({ t: "h", level: heading[1].length, c: parseInline(heading[2] ?? "", depth) });
60
+ i++;
61
+ continue;
62
+ }
63
+ if (RULE.test(line)) {
64
+ out.push({ t: "hr" });
65
+ i++;
66
+ continue;
67
+ }
68
+ if (QUOTE.test(line)) {
69
+ const inner = [];
70
+ while (i < lines.length && !isBlank(lines[i]) && (QUOTE.test(lines[i]) || !startsBlock(lines[i]))) {
71
+ const m = QUOTE.exec(lines[i]);
72
+ inner.push(m ? m[1] : lines[i]);
73
+ i++;
74
+ }
75
+ out.push(depth < MAX_DEPTH ? { t: "quote", c: parseBlocks(inner, depth + 1) } : { t: "p", c: [inner.join(" ")] });
76
+ continue;
77
+ }
78
+ const bullet = BULLET.exec(line);
79
+ const ordered = bullet ? null : ORDERED.exec(line);
80
+ if (bullet || ordered) {
81
+ const pattern = bullet ? BULLET : ORDERED;
82
+ const items = [];
83
+ while (i < lines.length) {
84
+ const cur = lines[i];
85
+ const m = pattern.exec(cur);
86
+ if (m) {
87
+ items.push([m[3]]);
88
+ i++;
89
+ continue;
90
+ }
91
+ // Continuation: indented lines (nested lists, more paragraphs), or lazy text right after an item line.
92
+ if (isBlank(cur)) {
93
+ const next = lines[i + 1];
94
+ if (next !== undefined && (/^\s{2,}\S/.test(next) || pattern.test(next))) {
95
+ items[items.length - 1].push("");
96
+ i++;
97
+ continue;
98
+ }
99
+ break;
100
+ }
101
+ if (/^\s{2,}\S/.test(cur)) {
102
+ items[items.length - 1].push(cur.replace(/^\s{2,4}/, ""));
103
+ i++;
104
+ continue;
105
+ }
106
+ if (!startsBlock(cur) && !isBlank(lines[i - 1])) {
107
+ items[items.length - 1].push(cur);
108
+ i++;
109
+ continue;
110
+ }
111
+ break;
112
+ }
113
+ const parsed = items.map((item) => (depth < MAX_DEPTH ? parseBlocks(item, depth + 1) : [{ t: "p", c: [item.join(" ")] }]));
114
+ out.push(bullet ? { t: "ul", items: parsed } : { t: "ol", start: Number(ordered[2]), items: parsed });
115
+ continue;
116
+ }
117
+ // Table: a header row followed by a separator row.
118
+ if (line.includes("|") && i + 1 < lines.length && TABLE_SEP.test(lines[i + 1]) && lines[i + 1].includes("-")) {
119
+ const head = splitRow(line);
120
+ const align = splitRow(lines[i + 1]).map((c) => (c.startsWith(":") && c.endsWith(":") ? "center" : c.endsWith(":") ? "right" : c.startsWith(":") ? "left" : null));
121
+ i += 2;
122
+ const rows = [];
123
+ while (i < lines.length && !isBlank(lines[i]) && lines[i].includes("|")) {
124
+ const cells = splitRow(lines[i]);
125
+ rows.push(head.map((_, j) => parseInline(cells[j] ?? "", depth)));
126
+ i++;
127
+ }
128
+ out.push({ t: "table", align: head.map((_, j) => align[j] ?? null), head: head.map((h) => parseInline(h, depth)), rows });
129
+ continue;
130
+ }
131
+ // Paragraph: until a blank line or another block.
132
+ const para = [];
133
+ while (i < lines.length && !isBlank(lines[i]) && (para.length === 0 || !startsBlock(lines[i])))
134
+ para.push(lines[i++]);
135
+ out.push({ t: "p", c: parseParagraph(para, depth) });
136
+ }
137
+ return out;
138
+ }
139
+ /** Lines of a paragraph: two trailing spaces or a backslash make a line break, other newlines are spaces. */
140
+ function parseParagraph(lines, depth) {
141
+ const out = [];
142
+ lines.forEach((raw, n) => {
143
+ const last = n === lines.length - 1;
144
+ const hard = !last && (/ {2,}$/.test(raw) || /\\$/.test(raw));
145
+ const text = raw.trim().replace(/\\$/, "");
146
+ out.push(...parseInline(text, depth));
147
+ if (!last)
148
+ out.push(hard ? { t: "br" } : " ");
149
+ });
150
+ return out;
151
+ }
152
+ const ESCAPABLE = "\\`*_{}[]()#+-.!|~<>";
153
+ const isSpace = (c) => c === undefined || /\s/.test(c);
154
+ const isWord = (c) => c !== undefined && /[\p{L}\p{N}]/u.test(c);
155
+ /** Index of the `]` matching the `[` at `open`, or -1. */
156
+ function closingBracket(text, open) {
157
+ let depth = 0;
158
+ for (let j = open; j < text.length; j++) {
159
+ if (text[j] === "\\")
160
+ j++;
161
+ else if (text[j] === "[")
162
+ depth++;
163
+ else if (text[j] === "]" && --depth === 0)
164
+ return j;
165
+ }
166
+ return -1;
167
+ }
168
+ /** `(url "title")` right after a `]`: the url, the title and the index after `)`. */
169
+ function linkTarget(text, at) {
170
+ if (text[at] !== "(")
171
+ return null;
172
+ let depth = 0;
173
+ for (let j = at; j < text.length; j++) {
174
+ if (text[j] === "\\")
175
+ j++;
176
+ else if (text[j] === "(")
177
+ depth++;
178
+ else if (text[j] === ")" && --depth === 0) {
179
+ const inner = text.slice(at + 1, j).trim();
180
+ const m = /^<?([^\s>]*)>?(?:\s+["'(](.*)["')])?$/.exec(inner);
181
+ if (!m)
182
+ return null;
183
+ return { url: m[1], ...(m[2] ? { title: m[2] } : {}), end: j + 1 };
184
+ }
185
+ }
186
+ return null;
187
+ }
188
+ /** Closing delimiter of an emphasis run opened at `from` (skipping code spans and longer runs). */
189
+ function closingDelimiter(text, from, delim) {
190
+ for (let j = from; j < text.length; j++) {
191
+ const c = text[j];
192
+ if (c === "\\") {
193
+ j++;
194
+ continue;
195
+ }
196
+ if (c === "`") {
197
+ const end = text.indexOf("`", j + 1);
198
+ if (end > 0)
199
+ j = end;
200
+ continue;
201
+ }
202
+ if (!text.startsWith(delim, j))
203
+ continue;
204
+ if (delim.length === 1 && text[j + 1] === delim) {
205
+ // A "**" run inside "*…*": skip it (it belongs to a nested strong) unless it ends the text ("*a **b***").
206
+ const after = closingDelimiter(text, j + 2, delim + delim);
207
+ if (after > 0) {
208
+ j = after + 1;
209
+ continue;
210
+ }
211
+ }
212
+ if (delim.length === 2 && text[j + 2] === delim[0])
213
+ continue; // "***": close on the last two
214
+ if (isSpace(text[j - 1]))
215
+ continue;
216
+ if (delim[0] === "_" && isWord(text[j + delim.length]))
217
+ continue;
218
+ if (j === from)
219
+ continue;
220
+ return j;
221
+ }
222
+ return -1;
223
+ }
224
+ function parseInline(text, depth) {
225
+ const out = [];
226
+ let buf = "";
227
+ const flush = () => {
228
+ if (buf)
229
+ out.push(buf);
230
+ buf = "";
231
+ };
232
+ for (let i = 0; i < text.length; i++) {
233
+ const c = text[i];
234
+ if (c === "\\" && i + 1 < text.length && ESCAPABLE.includes(text[i + 1])) {
235
+ buf += text[++i];
236
+ continue;
237
+ }
238
+ if (c === "`") {
239
+ let ticks = 1;
240
+ while (text[i + ticks] === "`")
241
+ ticks++;
242
+ const fence = "`".repeat(ticks);
243
+ const end = text.indexOf(fence, i + ticks);
244
+ if (end > 0) {
245
+ flush();
246
+ out.push({ t: "code", text: text.slice(i + ticks, end).replace(/^ (.+) $/, "$1") });
247
+ i = end + ticks - 1;
248
+ continue;
249
+ }
250
+ buf += fence;
251
+ i += ticks - 1;
252
+ continue;
253
+ }
254
+ if ((c === "!" && text[i + 1] === "[") || c === "[") {
255
+ const open = c === "!" ? i + 1 : i;
256
+ const close = closingBracket(text, open);
257
+ const target = close > 0 ? linkTarget(text, close + 1) : null;
258
+ if (target) {
259
+ flush();
260
+ const label = text.slice(open + 1, close);
261
+ if (c === "!") {
262
+ // Unsafe sources are dropped: only the description stays, as text.
263
+ if (validImage(target.url))
264
+ out.push({ t: "img", src: target.url, alt: label.replace(/[*_`]/g, ""), ...(target.title ? { title: target.title } : {}) });
265
+ else if (label)
266
+ out.push(label);
267
+ }
268
+ else {
269
+ const children = depth < MAX_DEPTH ? parseInline(label, depth + 1) : [label];
270
+ if (validHref(target.url))
271
+ out.push({ t: "a", href: target.url, ...(target.title ? { title: target.title } : {}), c: children });
272
+ else
273
+ out.push(...children);
274
+ }
275
+ i = target.end - 1;
276
+ continue;
277
+ }
278
+ }
279
+ if (c === "<") {
280
+ // Autolink <https://…> / <mailto:…>; any other "<" is plain text (raw HTML is never interpreted).
281
+ const end = text.indexOf(">", i);
282
+ const inner = end > 0 ? text.slice(i + 1, end) : "";
283
+ if (/^(https?:\/\/|mailto:)\S+$/i.test(inner) && validHref(inner)) {
284
+ flush();
285
+ out.push({ t: "a", href: inner, c: [inner.replace(/^mailto:/i, "")] });
286
+ i = end;
287
+ continue;
288
+ }
289
+ }
290
+ if (c === "*" || c === "_" || (c === "~" && text[i + 1] === "~")) {
291
+ const double = text[i + 1] === c;
292
+ const delim = c === "~" ? "~~" : double ? c + c : c;
293
+ const canOpen = !isSpace(text[i + delim.length]) && !(c === "_" && isWord(text[i - 1]));
294
+ if (canOpen && depth < MAX_DEPTH) {
295
+ const end = closingDelimiter(text, i + delim.length, delim);
296
+ if (end > 0) {
297
+ flush();
298
+ out.push({ t: c === "~" ? "del" : delim.length === 2 ? "strong" : "em", c: parseInline(text.slice(i + delim.length, end), depth + 1) });
299
+ i = end + delim.length - 1;
300
+ continue;
301
+ }
302
+ }
303
+ buf += delim;
304
+ i += delim.length - 1;
305
+ continue;
306
+ }
307
+ buf += c;
308
+ }
309
+ flush();
310
+ return out;
311
+ }
312
+ /** Parse markdown into the block tree. */
313
+ function parse(source) {
314
+ return parseBlocks(String(source ?? "").replace(/\r\n?/g, "\n").replace(/\t/g, " ").split("\n"), 0);
315
+ }
316
+ const external = (href) => /^https?:\/\//i.test(href);
317
+ /** A list item made of one paragraph, optionally followed by nested lists. */
318
+ const tight = (item) => item[0]?.t === "p" && item.slice(1).every((b) => b.t === "ul" || b.t === "ol");
319
+ /** Heading levels start at `minHeading` (the page has its own h1 — a "# Title" in a section becomes an h2). */
320
+ const level = (n, minHeading) => Math.min(6, Math.max(minHeading, n));
321
+ // ─── React ──────────────────────────────────────────────────────────────────
322
+ function renderInline(nodes) {
323
+ return nodes.map((n, k) => {
324
+ if (typeof n === "string")
325
+ return _jsx(Fragment, { children: n }, k);
326
+ switch (n.t) {
327
+ case "em":
328
+ return _jsx("em", { children: renderInline(n.c) }, k);
329
+ case "strong":
330
+ return _jsx("strong", { children: renderInline(n.c) }, k);
331
+ case "del":
332
+ return _jsx("del", { children: renderInline(n.c) }, k);
333
+ case "code":
334
+ return _jsx("code", { children: n.text }, k);
335
+ case "br":
336
+ return _jsx("br", {}, k);
337
+ case "img":
338
+ // eslint-disable-next-line @next/next/no-img-element -- any URL or public file, no next/image config needed
339
+ return _jsx("img", { src: n.src, alt: n.alt, title: n.title, loading: "lazy", decoding: "async" }, k);
340
+ case "a":
341
+ return (_jsx("a", { href: n.href, title: n.title, ...(external(n.href) ? { rel: "noopener" } : {}), children: renderInline(n.c) }, k));
342
+ }
343
+ });
344
+ }
345
+ function renderBlocks(blocks, minHeading) {
346
+ return blocks.map((b, k) => {
347
+ switch (b.t) {
348
+ case "h": {
349
+ const Tag = `h${level(b.level, minHeading)}`;
350
+ return _jsx(Tag, { children: renderInline(b.c) }, k);
351
+ }
352
+ case "p":
353
+ return _jsx("p", { children: renderInline(b.c) }, k);
354
+ case "code":
355
+ return (_jsx("pre", { tabIndex: 0, children: _jsx("code", { ...(b.lang ? { "data-lang": b.lang } : {}), children: b.text }) }, k));
356
+ case "hr":
357
+ return _jsx("hr", {}, k);
358
+ case "quote":
359
+ return _jsx("blockquote", { children: renderBlocks(b.c, minHeading) }, k);
360
+ case "ul":
361
+ case "ol": {
362
+ const items = b.items.map((item, j) => (_jsx("li", { children: tight(item) ? [_jsx(Fragment, { children: renderInline(item[0].c) }, "p"), ...renderBlocks(item.slice(1), minHeading)] : renderBlocks(item, minHeading) }, j)));
363
+ return b.t === "ul" ? _jsx("ul", { children: items }, k) : _jsx("ol", { ...(b.start !== 1 ? { start: b.start } : {}), children: items }, k);
364
+ }
365
+ case "table":
366
+ return (_jsx("div", { className: "forge-site-table-scroll", tabIndex: 0, children: _jsxs("table", { children: [_jsx("thead", { children: _jsx("tr", { children: b.head.map((h, j) => (_jsx("th", { scope: "col", style: b.align[j] ? { textAlign: b.align[j] } : undefined, children: renderInline(h) }, j))) }) }), _jsx("tbody", { children: b.rows.map((row, r) => (_jsx("tr", { children: row.map((cell, j) => (_jsx("td", { style: b.align[j] ? { textAlign: b.align[j] } : undefined, children: renderInline(cell) }, j))) }, r))) })] }) }, k));
367
+ }
368
+ });
369
+ }
370
+ /** Markdown as React elements inside a `.forge-site-prose` block (typography from the theme tokens). */
371
+ export function Markdown({ source, className = "", minHeading = 2 }) {
372
+ const blocks = parse(source);
373
+ if (!blocks.length)
374
+ return null;
375
+ return _jsx("div", { className: `forge-site-prose ${className}`.trim(), children: renderBlocks(blocks, minHeading) });
376
+ }
377
+ // ─── HTML string (RSS) ──────────────────────────────────────────────────────
378
+ export const escapeHtml = (s) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
379
+ function htmlInline(nodes) {
380
+ return nodes
381
+ .map((n) => {
382
+ if (typeof n === "string")
383
+ return escapeHtml(n);
384
+ switch (n.t) {
385
+ case "em":
386
+ case "strong":
387
+ case "del":
388
+ return `<${n.t}>${htmlInline(n.c)}</${n.t}>`;
389
+ case "code":
390
+ return `<code>${escapeHtml(n.text)}</code>`;
391
+ case "br":
392
+ return "<br>";
393
+ case "img":
394
+ return `<img src="${escapeHtml(n.src)}" alt="${escapeHtml(n.alt)}"${n.title ? ` title="${escapeHtml(n.title)}"` : ""}>`;
395
+ case "a":
396
+ return `<a href="${escapeHtml(n.href)}"${n.title ? ` title="${escapeHtml(n.title)}"` : ""}>${htmlInline(n.c)}</a>`;
397
+ }
398
+ })
399
+ .join("");
400
+ }
401
+ function htmlBlocks(blocks, minHeading) {
402
+ return blocks
403
+ .map((b) => {
404
+ switch (b.t) {
405
+ case "h":
406
+ return `<h${level(b.level, minHeading)}>${htmlInline(b.c)}</h${level(b.level, minHeading)}>`;
407
+ case "p":
408
+ return `<p>${htmlInline(b.c)}</p>`;
409
+ case "code":
410
+ return `<pre><code>${escapeHtml(b.text)}</code></pre>`;
411
+ case "hr":
412
+ return "<hr>";
413
+ case "quote":
414
+ return `<blockquote>${htmlBlocks(b.c, minHeading)}</blockquote>`;
415
+ case "ul":
416
+ case "ol": {
417
+ const items = b.items.map((item) => `<li>${tight(item) ? htmlInline(item[0].c) + htmlBlocks(item.slice(1), minHeading) : htmlBlocks(item, minHeading)}</li>`).join("");
418
+ return b.t === "ul" ? `<ul>${items}</ul>` : `<ol${b.start !== 1 ? ` start="${b.start}"` : ""}>${items}</ol>`;
419
+ }
420
+ case "table":
421
+ return `<table><thead><tr>${b.head.map((h) => `<th>${htmlInline(h)}</th>`).join("")}</tr></thead><tbody>${b.rows.map((r) => `<tr>${r.map((c) => `<td>${htmlInline(c)}</td>`).join("")}</tr>`).join("")}</tbody></table>`;
422
+ }
423
+ })
424
+ .join("");
425
+ }
426
+ /** Markdown as an escaped HTML string (RSS item bodies). `baseUrl` makes relative links and images absolute. */
427
+ export function markdownToHtml(source, options = {}) {
428
+ const html = htmlBlocks(parse(source), options.minHeading ?? 2);
429
+ if (!options.baseUrl)
430
+ return html;
431
+ const base = options.baseUrl.replace(/\/$/, "");
432
+ return html.replace(/(href|src)="\/(?!\/)/g, `$1="${base}/`);
433
+ }
434
+ /** Plain text of markdown (excerpts, meta descriptions, reading time). */
435
+ export function markdownToText(source) {
436
+ const text = (nodes) => nodes.map((n) => (typeof n === "string" ? n : n.t === "br" ? " " : n.t === "img" ? n.alt : n.t === "code" ? n.text : text(n.c))).join("");
437
+ const blocks = (list) => list.flatMap((b) => {
438
+ switch (b.t) {
439
+ case "h":
440
+ case "p":
441
+ return [text(b.c)];
442
+ case "code":
443
+ return [b.text];
444
+ case "quote":
445
+ return blocks(b.c);
446
+ case "ul":
447
+ case "ol":
448
+ return b.items.flatMap(blocks);
449
+ case "table":
450
+ return [...b.head.map(text), ...b.rows.flatMap((r) => r.map(text))];
451
+ default:
452
+ return [];
453
+ }
454
+ });
455
+ return blocks(parse(source)).join(" ").replace(/\s+/g, " ").trim();
456
+ }
457
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/site/markdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Messages } from "../i18n/locale.js";
2
+ import type { SiteApp, SiteRender } from "./types.js";
3
+ export interface SitePageViewProps {
4
+ app: SiteApp;
5
+ render: SiteRender;
6
+ /** UI language (resolveLocale), default: the app's default locale. */
7
+ locale?: string;
8
+ /** Schema translations by locale (apps/web/forge.locales.ts). */
9
+ messages?: Record<string, Messages>;
10
+ /** Editor preview (`?preview=1` for site editors): hidden sections show, marked. */
11
+ preview?: boolean;
12
+ }
13
+ /** A website page: its sections between the header and the footer. One h1: the opening hero's, else the page title (visually hidden). */
14
+ export declare function SitePageView({ app: baseApp, render, locale, messages, preview }: SitePageViewProps): import("react").JSX.Element | null;
15
+ /** A blog post, guide, webinar or case study: title, author, date, cover and the markdown body. */
16
+ export declare function SitePostView({ app: baseApp, render, locale, messages }: Omit<SitePageViewProps, "preview">): import("react").JSX.Element | null;
@@ -0,0 +1,65 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { validHref, validImage } from "@tekki-forge/compiler/site";
3
+ import { ArrowLeft } from "lucide-react";
4
+ import { Fragment } from "react";
5
+ import { BrandLogo } from "../brand-art.js";
6
+ import { formatDate, siteTranslator } from "./format.js";
7
+ import { SiteHeader } from "./header.js";
8
+ import { SocialIcon, SOCIAL_NAMES } from "./icons.js";
9
+ import { Markdown, markdownToText } from "./markdown.js";
10
+ import { renderSection } from "./sections.js";
11
+ const external = (href) => /^https?:\/\//i.test(href);
12
+ /** Header buttons with their labels: the built-in sign-in/sign-up are translated, page buttons keep their title. */
13
+ function headerActions(actions, t) {
14
+ return actions
15
+ .filter((a) => validHref(a.href))
16
+ .map((a) => ({ href: a.href, label: a.label ?? (a.kind === "signUp" ? t("site.signUp") : a.kind === "signIn" ? t("site.signIn") : a.href), primary: a.kind === "signUp" }));
17
+ }
18
+ function headerNav(chrome) {
19
+ return chrome.nav.flatMap((e) => {
20
+ if (e.items) {
21
+ const items = e.items.filter((l) => validHref(l.href));
22
+ return items.length ? [{ label: e.label, ...(e.description ? { description: e.description } : {}), items }] : [];
23
+ }
24
+ return e.href && validHref(e.href) ? [{ label: e.label, href: e.href }] : [];
25
+ });
26
+ }
27
+ function SiteFooter({ app, chrome, t }) {
28
+ const year = new Date().getFullYear();
29
+ const columns = chrome.footer.columns.map((c) => ({ ...c, links: c.links.filter((l) => validHref(l.href)) })).filter((c) => c.links.length);
30
+ const social = chrome.footer.social.filter((s) => SOCIAL_NAMES[s.network] && validHref(s.href) && external(s.href));
31
+ const colClass = columns.length >= 4 ? "@3xl:grid-cols-4" : columns.length === 3 ? "@3xl:grid-cols-3" : "@3xl:grid-cols-2";
32
+ return (_jsx("footer", { className: "forge-site-footer mt-auto", children: _jsxs("div", { className: "mx-auto max-w-6xl px-4 py-14 @3xl:px-8 @3xl:py-16", children: [_jsxs("div", { className: `grid gap-12 ${columns.length ? "@5xl:grid-cols-[minmax(0,1fr)_minmax(0,2fr)]" : ""}`, children: [_jsxs("div", { className: "max-w-sm", children: [_jsxs("a", { href: "/", className: "forge-focusable inline-flex items-center gap-2.5 rounded-[var(--forge-radius-control)] font-semibold text-ink", children: [_jsx(BrandLogo, { app: app }), _jsx("span", { children: app.name })] }), (chrome.footer.note || app.theme.tagline) && _jsx("p", { className: "mt-4 text-sm leading-relaxed text-pretty text-ink-muted", children: chrome.footer.note ?? app.theme.tagline }), social.length > 0 && (_jsx("ul", { className: "mt-6 flex flex-wrap gap-1.5", "aria-label": t("site.footer.social"), children: social.map((s) => (_jsx("li", { children: _jsx("a", { href: s.href, rel: "noopener me", "aria-label": SOCIAL_NAMES[s.network], className: "forge-btn forge-btn-ghost inline-flex size-9 items-center justify-center", children: _jsx(SocialIcon, { network: s.network }) }) }, s.network + s.href))) }))] }), columns.length > 0 && (_jsx("nav", { "aria-label": t("site.footer.navigation"), className: `grid grid-cols-2 gap-x-8 gap-y-10 ${colClass}`, children: columns.map((c, i) => (_jsxs("div", { children: [_jsx("h2", { className: "text-sm font-semibold text-ink", children: c.title }), _jsx("ul", { className: "mt-4 grid gap-3 text-sm", children: c.links.map((l) => (_jsx("li", { children: _jsx("a", { href: l.href, ...(external(l.href) ? { rel: "noopener" } : {}), className: "forge-focusable forge-site-footer-link rounded-sm", children: l.label }) }, l.href + l.label))) })] }, c.title + i))) }))] }), _jsx("p", { className: "mt-12 border-t border-line pt-6 text-sm text-ink-muted", children: t("site.footer.copyright", { year: String(year), app: app.name }) })] }) }));
33
+ }
34
+ /** Skip link, header, main and footer around a page's content. */
35
+ function SiteShell({ app, render, t, currentPath, children }) {
36
+ const brand = (_jsxs("a", { href: "/", className: "forge-focusable flex min-w-0 shrink-0 items-center gap-2.5 rounded-[var(--forge-radius-control)] font-semibold text-ink", children: [_jsx(BrandLogo, { app: app }), _jsx("span", { className: "truncate", children: app.name })] }));
37
+ return (_jsxs("div", { className: "forge-app-bg forge-site @container flex min-h-dvh flex-col", children: [_jsx("a", { href: "#main", className: "forge-skip-link", children: t("site.skipToContent") }), _jsx(SiteHeader, { brand: brand, nav: headerNav(render.chrome), actions: headerActions(render.chrome.actions, t), labels: { navigation: t("site.navigation"), openMenu: t("site.openMenu"), closeMenu: t("site.closeMenu"), menu: t("site.menu") }, ...(currentPath ? { currentPath } : {}) }), _jsx("main", { id: "main", tabIndex: -1, className: "flex-1 focus:outline-none", children: children }), _jsx(SiteFooter, { app: app, chrome: render.chrome, t: t })] }));
38
+ }
39
+ /** A website page: its sections between the header and the footer. One h1: the opening hero's, else the page title (visually hidden). */
40
+ export function SitePageView({ app: baseApp, render, locale, messages, preview = false }) {
41
+ const { app, lang, t } = siteTranslator(baseApp, locale, messages);
42
+ const page = render.page;
43
+ if (!page)
44
+ return null;
45
+ const visible = page.sections.filter((s) => preview || !s.hidden);
46
+ const opensWithHero = visible[0]?.type === "hero" && typeof visible[0].props.title === "string" && !!visible[0].props.title.trim();
47
+ return (_jsxs(SiteShell, { app: app, render: render, t: t, currentPath: page.path, children: [page.status === "draft" && (_jsx("p", { role: "status", className: "forge-banner px-4 py-2 text-center text-sm font-medium", children: t("site.draftNotice") })), !opensWithHero && _jsx("h1", { className: "sr-only", children: page.title }), visible.map((section, i) => (_jsx(Fragment, { children: renderSection({ app, section, data: section.data, lang, t, preview, first: i === 0, pagePath: page.path }) }, section.id)))] }));
48
+ }
49
+ /** Reading time in minutes (about 220 words a minute). */
50
+ const readingMinutes = (body) => Math.max(1, Math.round(markdownToText(body).split(/\s+/).filter(Boolean).length / 220));
51
+ /** A blog post, guide, webinar or case study: title, author, date, cover and the markdown body. */
52
+ export function SitePostView({ app: baseApp, render, locale, messages }) {
53
+ const { app, lang, t } = siteTranslator(baseApp, locale, messages);
54
+ const post = render.post;
55
+ if (!post)
56
+ return null;
57
+ const base = render.blog[post.kind];
58
+ const back = base && validHref(base) ? base : undefined;
59
+ const cover = validImage(post.coverImage) ? post.coverImage : undefined;
60
+ const date = post.publishedAt ? formatDate(post.publishedAt, lang) : "";
61
+ const minutes = readingMinutes(post.body);
62
+ const backLink = back && (_jsxs("a", { href: back, className: "forge-focusable inline-flex items-center gap-1.5 rounded-sm text-sm font-medium text-link hover:underline", children: [_jsx(ArrowLeft, { className: "size-4", "aria-hidden": true }), t(`site.post.back.${post.kind}`)] }));
63
+ return (_jsx(SiteShell, { app: app, render: render, t: t, ...(back ? { currentPath: back } : {}), children: _jsxs("article", { className: "forge-site-section px-4 pt-12 pb-20 @3xl:px-8 @3xl:pt-16 @3xl:pb-28", children: [_jsxs("header", { className: "mx-auto max-w-3xl", children: [backLink, post.tags.length > 0 && (_jsx("ul", { className: "mt-8 flex flex-wrap gap-1.5", "aria-label": t("site.post.tags"), children: post.tags.map((tag) => (_jsx("li", { className: "forge-chip px-2.5 py-0.5 text-xs font-medium", children: tag }, tag))) })), _jsx("h1", { className: `forge-heading forge-site-display text-4xl leading-[1.08] font-semibold tracking-tight text-balance text-ink @3xl:text-5xl ${post.tags.length ? "mt-4" : "mt-8"}`, children: post.title }), post.excerpt && _jsx("p", { className: "mt-5 text-xl leading-relaxed text-pretty text-ink-muted", children: post.excerpt }), _jsxs("p", { className: "mt-8 flex flex-wrap items-center gap-x-3 gap-y-1 border-b border-line pb-8 text-sm text-ink-muted", children: [post.authorName && _jsx("span", { className: "font-medium text-ink", children: post.authorName }), post.authorName && date && _jsx("span", { "aria-hidden": true, children: "\u00B7" }), date && _jsx("time", { dateTime: post.publishedAt, children: date }), _jsx("span", { "aria-hidden": true, children: "\u00B7" }), _jsx("span", { children: t("site.post.readingTime", { count: minutes }) })] })] }), cover && (_jsx("div", { className: "forge-site-frame forge-site-media mx-auto mt-10 aspect-[16/9] max-w-5xl overflow-hidden", children: _jsx("img", { src: cover, alt: "", fetchPriority: "high", decoding: "async", className: "size-full object-cover" }) })), _jsx(Markdown, { source: post.body, className: "forge-site-prose-lg mx-auto mt-12 max-w-3xl" }), backLink && _jsx("footer", { className: "mx-auto mt-16 max-w-3xl border-t border-line pt-8", children: backLink })] }) }));
64
+ }
65
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/site/page.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AppIR } from "@tekki-forge/compiler";
2
+ export type SiteRoutingApp = Pick<AppIR, "entities" | "plugins" | "site"> & Partial<Pick<AppIR, "landing">>;
3
+ /** First path segments that belong to the app (never the website): reserved routes, entity lists, plugin pages. */
4
+ export declare function appSegments(app: SiteRoutingApp): Set<string>;
5
+ /**
6
+ * Where proxy.ts rewrites `pathname` (null: leave the request alone).
7
+ * - Without `site`: `/` for signed-out visitors → `/welcome` when the legacy landing page is on; nothing else changes.
8
+ * - `/` → `/site` for signed-out visitors (signed-in people keep their dashboard).
9
+ * - `<blog base>/rss.xml` → `/site-feed/<kind>`.
10
+ * - Any other path whose first segment is not the app's (sign-in, admin, API, entity and plugin pages) → `/site<path>`.
11
+ * Static files (a dot in the last segment) are left alone.
12
+ */
13
+ export declare function siteProxyTarget(app: SiteRoutingApp, pathname: string, signedIn: boolean): string | null;