@tekki-forge/runtime-admin 0.2.0 → 0.3.2

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,408 @@
1
+ import { POST_KINDS, publicDataProblem, publicField, sectionSpec, SITE_RESERVED_SEGMENTS, sitePathProblem } from "@tekki-forge/compiler/site";
2
+ const isObject = (v) => !!v && typeof v === "object" && !Array.isArray(v);
3
+ // ─── Prop value <-> form input ──────────────────────────────────────────────────────────────────
4
+ /** Text-like kinds edited in one text input / textarea / select. */
5
+ const TEXT_KINDS = new Set(["text", "textarea", "markdown", "image", "href", "icon", "select", "entity", "field", "sort"]);
6
+ /** The value a form control shows for a prop value (strings for text inputs, rows for filters…). */
7
+ export function toInput(spec, value) {
8
+ switch (spec.kind) {
9
+ case "number":
10
+ return typeof value === "number" && Number.isFinite(value) ? String(value) : "";
11
+ case "boolean":
12
+ return value === true;
13
+ case "strings":
14
+ case "fields":
15
+ return Array.isArray(value) ? value.map((v) => (typeof v === "string" ? v : String(v ?? ""))) : [];
16
+ case "cells":
17
+ return Array.isArray(value) ? value.map((v) => (typeof v === "boolean" ? v : String(v ?? ""))) : [];
18
+ case "link":
19
+ return isObject(value) ? { label: typeof value.label === "string" ? value.label : "", href: typeof value.href === "string" ? value.href : "" } : { label: "", href: "" };
20
+ case "filter":
21
+ return filterToRows(value);
22
+ case "list":
23
+ return Array.isArray(value) ? value.map((item) => (isObject(item) ? item : {})) : [];
24
+ default:
25
+ return typeof value === "string" ? value : value === undefined || value === null ? "" : String(value);
26
+ }
27
+ }
28
+ /** The prop value for a form input (undefined = remove the prop). Keeps in-progress rows (empty strings) — see cleanProps. */
29
+ export function fromInput(spec, input) {
30
+ if (TEXT_KINDS.has(spec.kind))
31
+ return typeof input === "string" && input !== "" ? input : undefined;
32
+ switch (spec.kind) {
33
+ case "number": {
34
+ if (typeof input === "number")
35
+ return Number.isFinite(input) ? input : undefined;
36
+ if (typeof input !== "string" || input.trim() === "")
37
+ return undefined;
38
+ const n = Number(input);
39
+ return Number.isFinite(n) ? n : undefined;
40
+ }
41
+ case "boolean":
42
+ return input === true;
43
+ case "strings":
44
+ case "fields":
45
+ case "cells":
46
+ case "list":
47
+ return Array.isArray(input) ? [...input] : undefined;
48
+ case "link": {
49
+ const l = isObject(input) ? input : {};
50
+ const label = typeof l.label === "string" ? l.label : "";
51
+ const href = typeof l.href === "string" ? l.href : "";
52
+ return label || href ? { label, href } : undefined;
53
+ }
54
+ case "filter":
55
+ return Array.isArray(input) ? rowsToFilter(input) : undefined;
56
+ default:
57
+ return input;
58
+ }
59
+ }
60
+ /** { status: "open", "price.gte": 10, "tag.in": ["a","b"] } → editable rows. */
61
+ export function filterToRows(value) {
62
+ if (!isObject(value))
63
+ return [];
64
+ return Object.entries(value).map(([key, v]) => ({ key, value: Array.isArray(v) ? v.join(", ") : String(v) }));
65
+ }
66
+ /** "true"/"false" → boolean, numbers → number, lists for `.in`/`.notIn` keys, otherwise text. */
67
+ export function parseFilterValue(key, raw) {
68
+ const s = raw.trim();
69
+ if (/\.(in|notIn)$/.test(key))
70
+ return s.split(",").map((x) => x.trim()).filter(Boolean).map((x) => (/^-?\d+(\.\d+)?$/.test(x) ? Number(x) : x));
71
+ if (s === "true")
72
+ return true;
73
+ if (s === "false")
74
+ return false;
75
+ if (/^-?\d+(\.\d+)?$/.test(s))
76
+ return Number(s);
77
+ return raw;
78
+ }
79
+ export function rowsToFilter(rows) {
80
+ const out = {};
81
+ for (const r of rows)
82
+ if (r.key.trim())
83
+ out[r.key.trim()] = parseFilterValue(r.key.trim(), r.value);
84
+ return Object.keys(out).length ? out : undefined;
85
+ }
86
+ /** Comparison cells aligned to the number of columns (missing cells start as "yes"). */
87
+ export function alignCells(cells, columns) {
88
+ const out = cells.slice(0, columns);
89
+ while (out.length < columns)
90
+ out.push(true);
91
+ return out;
92
+ }
93
+ /** Set one prop of an object (undefined removes it), and reset props that depend on it. */
94
+ export function setProp(fields, obj, name, value) {
95
+ const next = { ...obj };
96
+ if (value === undefined)
97
+ delete next[name];
98
+ else
99
+ next[name] = value;
100
+ const spec = fields.find((f) => f.name === name);
101
+ if (spec?.kind === "entity" && obj[name] !== value) {
102
+ // Fields, filters and sorts name fields of the previous entity.
103
+ for (const f of fields)
104
+ if (["fields", "field", "filter", "sort"].includes(f.kind) || f.name === "aggregate")
105
+ delete next[f.name];
106
+ }
107
+ if (name === "aggregate" && (value === undefined || value === "count")) {
108
+ const field = fields.find((f) => f.kind === "field");
109
+ if (field)
110
+ delete next[field.name];
111
+ }
112
+ return next;
113
+ }
114
+ /** Whether a prop's control is shown, given its siblings (live-data props need an entity, and so on). */
115
+ export function propVisible(spec, fields, obj) {
116
+ const entity = fields.find((f) => f.kind === "entity");
117
+ const hasEntity = !!entity && typeof obj[entity.name] === "string" && obj[entity.name] !== "";
118
+ if (["fields", "filter", "sort"].includes(spec.kind) || spec.name === "aggregate")
119
+ return hasEntity;
120
+ if (spec.kind === "field")
121
+ return hasEntity && typeof obj.aggregate === "string" && obj.aggregate !== "count";
122
+ // A live stat counts its value; a typed-in value only applies without an entity.
123
+ if (spec.name === "value" && hasEntity)
124
+ return false;
125
+ if (spec.name === "plans")
126
+ return obj.source !== "payments";
127
+ return true;
128
+ }
129
+ /**
130
+ * Props ready to save: empty texts, rows and links dropped, list items cleaned recursively, cells aligned to the
131
+ * comparison columns. The editor keeps raw values (an empty new row) while typing; this is what the API receives.
132
+ */
133
+ export function cleanProps(fields, props, context = {}) {
134
+ const out = {};
135
+ const columns = context.columns ?? (Array.isArray(props.columns) ? props.columns.filter((c) => typeof c === "string" && c.trim()).length : undefined);
136
+ for (const spec of fields) {
137
+ const v = props[spec.name];
138
+ if (v === undefined || v === null)
139
+ continue;
140
+ let cleaned = v;
141
+ switch (spec.kind) {
142
+ case "strings":
143
+ case "fields":
144
+ cleaned = Array.isArray(v) ? v.filter((s) => typeof s === "string" && s.trim() !== "") : v;
145
+ if (Array.isArray(cleaned) && cleaned.length === 0)
146
+ cleaned = undefined;
147
+ break;
148
+ case "cells":
149
+ cleaned = Array.isArray(v) ? (columns !== undefined ? alignCells(v, columns) : v) : v;
150
+ break;
151
+ case "link":
152
+ if (isObject(v) && !v.label && !v.href)
153
+ cleaned = undefined;
154
+ break;
155
+ case "filter":
156
+ if (isObject(v) && Object.keys(v).length === 0)
157
+ cleaned = undefined;
158
+ break;
159
+ case "list":
160
+ cleaned = Array.isArray(v) ? v.map((item) => (isObject(item) ? cleanProps(spec.fields ?? [], item, { ...(columns !== undefined ? { columns } : {}) }) : item)) : v;
161
+ if (Array.isArray(cleaned) && cleaned.length === 0)
162
+ cleaned = undefined;
163
+ break;
164
+ case "number":
165
+ if (typeof v !== "number" || !Number.isFinite(v))
166
+ cleaned = undefined;
167
+ break;
168
+ case "boolean":
169
+ break;
170
+ default:
171
+ if (typeof v === "string" && v === "")
172
+ cleaned = undefined;
173
+ }
174
+ if (cleaned !== undefined)
175
+ out[spec.name] = cleaned;
176
+ }
177
+ // Keep props this editor doesn't know (the API reports them) rather than silently dropping data.
178
+ for (const [k, v] of Object.entries(props))
179
+ if (!fields.some((f) => f.name === k) && v !== undefined)
180
+ out[k] = v;
181
+ return out;
182
+ }
183
+ /** Clean the props of a section of `type` (unknown types are returned as they are). */
184
+ export function cleanSectionProps(type, props) {
185
+ const spec = sectionSpec(type);
186
+ return spec ? cleanProps(spec.props, props) : props;
187
+ }
188
+ /** A new, empty item of a list prop (required booleans start false, cells match the columns). */
189
+ export function emptyItem(fields, context = {}) {
190
+ const item = {};
191
+ for (const f of fields)
192
+ if (f.kind === "cells" && context.columns)
193
+ item[f.name] = alignCells([], context.columns);
194
+ return item;
195
+ }
196
+ // ─── Reordering ─────────────────────────────────────────────────────────────────────────────────
197
+ /** Move the element at `from` to index `to` (clamped). Returns a new array. */
198
+ export function moveItem(list, from, to) {
199
+ const out = [...list];
200
+ if (from < 0 || from >= out.length)
201
+ return out;
202
+ const target = Math.max(0, Math.min(out.length - 1, to));
203
+ const [item] = out.splice(from, 1);
204
+ out.splice(target, 0, item);
205
+ return out;
206
+ }
207
+ /** Copy of a list with one element duplicated right after itself. */
208
+ export function duplicateItem(list, index) {
209
+ if (index < 0 || index >= list.length)
210
+ return [...list];
211
+ const copy = JSON.parse(JSON.stringify(list[index]));
212
+ return [...list.slice(0, index + 1), copy, ...list.slice(index + 1)];
213
+ }
214
+ export function removeItem(list, index) {
215
+ return list.filter((_, i) => i !== index);
216
+ }
217
+ export function keyboardDrag(state, key, index, count) {
218
+ if (!state) {
219
+ if (key === " " || key === "Enter")
220
+ return { type: "pick", state: { from: index, at: index } };
221
+ return { type: "none" };
222
+ }
223
+ switch (key) {
224
+ case "ArrowUp":
225
+ case "ArrowLeft":
226
+ return { type: "move", state: { ...state, at: Math.max(0, state.at - 1) } };
227
+ case "ArrowDown":
228
+ case "ArrowRight":
229
+ return { type: "move", state: { ...state, at: Math.min(count - 1, state.at + 1) } };
230
+ case "Home":
231
+ return { type: "move", state: { ...state, at: 0 } };
232
+ case "End":
233
+ return { type: "move", state: { ...state, at: count - 1 } };
234
+ case " ":
235
+ case "Enter":
236
+ return { type: "drop", from: state.from, to: state.at };
237
+ case "Escape":
238
+ return { type: "cancel", from: state.from };
239
+ default:
240
+ return { type: "none" };
241
+ }
242
+ }
243
+ /** Order to show while an item is being dragged (pointer or keyboard). */
244
+ export function previewOrder(list, drag) {
245
+ return drag ? moveItem(list, drag.from, drag.at) : [...list];
246
+ }
247
+ /**
248
+ * Index the dragged row (at `from`) lands at when the pointer is at `y`: the number of OTHER rows whose vertical
249
+ * midpoint is above the pointer (`midpoints` are those of every row, in order).
250
+ */
251
+ export function dropIndex(midpoints, y, from) {
252
+ return midpoints.filter((m, i) => i !== from && m < y).length;
253
+ }
254
+ // ─── Slugs and paths ────────────────────────────────────────────────────────────────────────────
255
+ /** "Hello, World! Ça va?" → "hello-world-ca-va" (the API's slug rule: /^[a-z0-9]+(-[a-z0-9]+)*$/, ≤ 100). */
256
+ export function slugify(text, max = 100) {
257
+ const slug = text
258
+ .normalize("NFKD")
259
+ .replace(/[̀-ͯ]/g, "")
260
+ .toLowerCase()
261
+ .replace(/['’]/g, "")
262
+ .replace(/[^a-z0-9]+/g, "-")
263
+ .replace(/^-+|-+$/g, "");
264
+ return slug.slice(0, max).replace(/-+$/, "");
265
+ }
266
+ export const SLUG_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;
267
+ /** "/About Us/" → "/about-us" (what a person likely meant; the check below says what's still wrong). */
268
+ export function normalizePath(input) {
269
+ const parts = input.trim().split("/").map((p) => slugify(p)).filter(Boolean);
270
+ return `/${parts.join("/")}`;
271
+ }
272
+ /** Paths the app already uses (entity list pages, plugin pages). */
273
+ export function takenPaths(app) {
274
+ return {
275
+ entityPaths: app.entities.map((e) => e.path),
276
+ pluginPaths: [...new Set(app.plugins.flatMap((p) => [...p.reservedPaths, ...p.nav.map((n) => n.path.split("/")[0])]))],
277
+ };
278
+ }
279
+ /** Why `path` can't be used for a new page (a translation key), or null. `existing` = paths of other pages. */
280
+ export function pagePathIssue(path, app, existing = []) {
281
+ const taken = takenPaths(app);
282
+ const problem = sitePathProblem(path, taken);
283
+ if (problem) {
284
+ const segment = path.split("/")[1] ?? "";
285
+ if (SITE_RESERVED_SEGMENTS.includes(segment))
286
+ return { key: "siteAdmin.path.reserved", segment };
287
+ if (taken.entityPaths.includes(segment))
288
+ return { key: "siteAdmin.path.entity", segment };
289
+ if (taken.pluginPaths.includes(segment))
290
+ return { key: "siteAdmin.path.plugin", segment };
291
+ return { key: "siteAdmin.path.format" };
292
+ }
293
+ if (existing.includes(path))
294
+ return { key: "siteAdmin.path.taken" };
295
+ return null;
296
+ }
297
+ // ─── API issues → form fields ───────────────────────────────────────────────────────────────────
298
+ /** "section.items[2].title" / "props.items[2].title" → "items.2.title"; "section" → "". */
299
+ export function issueField(path) {
300
+ const parts = path.replace(/\[(\d+)\]/g, ".$1").split(".").filter(Boolean);
301
+ while (parts.length && ["section", "props", "body", "sections"].includes(parts[0])) {
302
+ parts.shift();
303
+ // "sections.3.items…" (preview payloads): drop the section index too.
304
+ if (/^\d+$/.test(parts[0] ?? "") && path.startsWith("sections"))
305
+ parts.shift();
306
+ }
307
+ return parts.join(".");
308
+ }
309
+ /** Issues keyed by form field ("items.2.title"); several messages for one field are joined. */
310
+ export function issuesByField(issues) {
311
+ const out = {};
312
+ for (const i of issues ?? []) {
313
+ const k = issueField(i.path);
314
+ out[k] = out[k] ? `${out[k]} · ${i.message}` : i.message;
315
+ }
316
+ return out;
317
+ }
318
+ /** The message for a control at `path`: its own, or one about a part of it (a link's label, a filter key). */
319
+ export function errorAt(errors, path) {
320
+ if (errors[path])
321
+ return errors[path];
322
+ const sub = Object.keys(errors).find((k) => k.startsWith(`${path}.`) && !/^\d+$/.test(k.slice(path.length + 1).split(".")[0]));
323
+ return sub ? errors[sub] : undefined;
324
+ }
325
+ /** How many issues are inside `path` (a list item card shows the count). */
326
+ export function errorCount(errors, path) {
327
+ return Object.keys(errors).filter((k) => k === path || k.startsWith(`${path}.`)).length;
328
+ }
329
+ // ─── Entities and fields for data props ─────────────────────────────────────────────────────────
330
+ /** Every entity, with the reason it can't feed the website (undefined when it can). */
331
+ export function dataEntities(app) {
332
+ return app.entities.map((entity) => {
333
+ const problem = publicDataProblem(entity);
334
+ return problem ? { entity, problem } : { entity };
335
+ });
336
+ }
337
+ const NUMERIC = new Set(["integer", "decimal", "money", "percentage"]);
338
+ /** Fields of `entity` a prop of `kind` can name: public ones (numeric for aggregates, sortable for sorts). */
339
+ export function entityFieldOptions(entity, kind) {
340
+ if (!entity)
341
+ return [];
342
+ const fields = entity.fields.filter((f) => publicField(f) && f.relation?.type !== "many-to-many");
343
+ const pick = kind === "field" ? fields.filter((f) => NUMERIC.has(f.kind)) : kind === "sort" ? fields.filter((f) => f.sortable) : fields;
344
+ const out = pick.map((f) => ({ name: f.name, label: f.label }));
345
+ if (kind === "fields" || kind === "sort" || kind === "filter") {
346
+ for (const ts of ["createdAt", "updatedAt"])
347
+ if (entity.features.timestamps && !out.some((o) => o.name === ts))
348
+ out.push({ name: ts, label: ts });
349
+ }
350
+ return out;
351
+ }
352
+ /** "-createdAt" ↔ { field: "createdAt", desc: true } (one sort key; the editor offers one). */
353
+ export function parseSort(value) {
354
+ const first = typeof value === "string" ? (value.split(",")[0] ?? "").trim() : "";
355
+ return { field: first.replace(/^[-+]/, ""), desc: first.startsWith("-") };
356
+ }
357
+ export const formatSort = (field, desc) => (field ? `${desc ? "-" : ""}${field}` : undefined);
358
+ // ─── Misc ───────────────────────────────────────────────────────────────────────────────────────
359
+ /** Short text that identifies a section in the list (its title, else a first item, else ""). */
360
+ export function sectionSummary(props) {
361
+ for (const k of ["title", "eyebrow", "subtitle", "body", "url"]) {
362
+ const v = props[k];
363
+ if (typeof v === "string" && v.trim())
364
+ return v.replace(/[#*_`>\[\]()]/g, "").replace(/\s+/g, " ").trim().slice(0, 80);
365
+ }
366
+ return "";
367
+ }
368
+ /** Data sections need the API to resolve their preview (live numbers, records, posts, plans). */
369
+ export function needsPreviewData(type, props) {
370
+ if (type === "entityList" || type === "entityGrid" || type === "blogList")
371
+ return true;
372
+ if (type === "pricing")
373
+ return props.source === "payments";
374
+ if (type === "stats")
375
+ return Array.isArray(props.items) && props.items.some((i) => isObject(i) && typeof i.entity === "string" && i.entity !== "");
376
+ return false;
377
+ }
378
+ /** Post kinds the Posts tab offers: "post" plus the kinds the site has a listing for. */
379
+ export function postKinds(blogKinds) {
380
+ const kinds = new Set(["post", ...Object.keys(blogKinds ?? {})]);
381
+ return POST_KINDS.filter((k) => kinds.has(k));
382
+ }
383
+ /** Tags typed as "a, b, c" → ["a","b","c"] (unique, ≤ 10 × 40 chars). */
384
+ export function parseTags(text) {
385
+ const out = [];
386
+ for (const raw of text.split(",")) {
387
+ const tag = raw.trim().slice(0, 40);
388
+ if (tag && !out.includes(tag))
389
+ out.push(tag);
390
+ }
391
+ return out.slice(0, 10);
392
+ }
393
+ /** Debounce delay of section autosave (ms). */
394
+ export const AUTOSAVE_MS = 800;
395
+ /** The `nav` value of a page from the settings form (null = automatic). */
396
+ export function navValue(form) {
397
+ if (form.hidden)
398
+ return false;
399
+ const nav = { ...(form.group.trim() ? { group: form.group.trim() } : {}), ...(form.label.trim() ? { label: form.label.trim() } : {}), ...(form.footerOnly ? { footerOnly: true } : {}) };
400
+ return Object.keys(nav).length ? nav : null;
401
+ }
402
+ export function navForm(nav) {
403
+ if (nav === false)
404
+ return { hidden: true, group: "", label: "", footerOnly: false };
405
+ const n = isObject(nav) ? nav : {};
406
+ return { hidden: false, group: typeof n.group === "string" ? n.group : "", label: typeof n.label === "string" ? n.label : "", footerOnly: n.footerOnly === true };
407
+ }
408
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/site/editor/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type SiteOverview } from "./api.js";
2
+ export declare function pageViewHref(page: {
3
+ path: string;
4
+ status: string;
5
+ }): string;
6
+ export declare function PageEditor({ pageId, overview, onBack }: {
7
+ pageId: string;
8
+ overview: SiteOverview | undefined;
9
+ onBack: () => void;
10
+ }): import("react").JSX.Element;