@tekki-forge/runtime-admin 0.1.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.
- package/dist/admin-dashboard.d.ts +16 -0
- package/dist/admin-dashboard.js +60 -0
- package/dist/admin-dashboard.js.map +1 -0
- package/dist/admin-orgs.d.ts +14 -0
- package/dist/admin-orgs.js +75 -0
- package/dist/admin-orgs.js.map +1 -0
- package/dist/admin-shell.d.ts +55 -0
- package/dist/admin-shell.js +141 -0
- package/dist/admin-shell.js.map +1 -0
- package/dist/admin.js +39 -6
- package/dist/admin.js.map +1 -1
- package/dist/app-pages.d.ts +19 -0
- package/dist/app-pages.js +109 -0
- package/dist/app-pages.js.map +1 -0
- package/dist/auth-pages.js +7 -2
- package/dist/auth-pages.js.map +1 -1
- package/dist/charts.d.ts +98 -2
- package/dist/charts.js +264 -24
- package/dist/charts.js.map +1 -1
- package/dist/context.js +32 -1
- package/dist/context.js.map +1 -1
- package/dist/dashboard.d.ts +63 -8
- package/dist/dashboard.js +180 -36
- package/dist/dashboard.js.map +1 -1
- package/dist/entity-icons.d.ts +3 -0
- package/dist/entity-icons.js +105 -0
- package/dist/entity-icons.js.map +1 -0
- package/dist/i18n/messages/de.js +751 -0
- package/dist/i18n/messages/de.js.map +1 -1
- package/dist/i18n/messages/en.js +751 -0
- package/dist/i18n/messages/en.js.map +1 -1
- package/dist/i18n/messages/es.js +751 -0
- package/dist/i18n/messages/es.js.map +1 -1
- package/dist/i18n/messages/fr.js +751 -0
- package/dist/i18n/messages/fr.js.map +1 -1
- package/dist/i18n/messages/pt.js +751 -0
- package/dist/i18n/messages/pt.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/schema-editor.js +2 -1
- package/dist/schema-editor.js.map +1 -1
- package/dist/shell.js +37 -34
- package/dist/shell.js.map +1 -1
- package/dist/site/editor/api.d.ts +74 -0
- package/dist/site/editor/api.js +93 -0
- package/dist/site/editor/api.js.map +1 -0
- package/dist/site/editor/content-page.d.ts +4 -0
- package/dist/site/editor/content-page.js +65 -0
- package/dist/site/editor/content-page.js.map +1 -0
- package/dist/site/editor/inbox-tab.d.ts +4 -0
- package/dist/site/editor/inbox-tab.js +88 -0
- package/dist/site/editor/inbox-tab.js.map +1 -0
- package/dist/site/editor/index.d.ts +1 -0
- package/dist/site/editor/index.js +3 -0
- package/dist/site/editor/index.js.map +1 -0
- package/dist/site/editor/model.d.ts +145 -0
- package/dist/site/editor/model.js +408 -0
- package/dist/site/editor/model.js.map +1 -0
- package/dist/site/editor/page-editor.d.ts +10 -0
- package/dist/site/editor/page-editor.js +257 -0
- package/dist/site/editor/page-editor.js.map +1 -0
- package/dist/site/editor/page-settings.d.ts +9 -0
- package/dist/site/editor/page-settings.js +105 -0
- package/dist/site/editor/page-settings.js.map +1 -0
- package/dist/site/editor/pages-tab.d.ts +5 -0
- package/dist/site/editor/pages-tab.js +108 -0
- package/dist/site/editor/pages-tab.js.map +1 -0
- package/dist/site/editor/posts-tab.d.ts +6 -0
- package/dist/site/editor/posts-tab.js +139 -0
- package/dist/site/editor/posts-tab.js.map +1 -0
- package/dist/site/editor/preview.d.ts +32 -0
- package/dist/site/editor/preview.js +104 -0
- package/dist/site/editor/preview.js.map +1 -0
- package/dist/site/editor/prop-fields.d.ts +53 -0
- package/dist/site/editor/prop-fields.js +233 -0
- package/dist/site/editor/prop-fields.js.map +1 -0
- package/dist/site/editor/section-list.d.ts +14 -0
- package/dist/site/editor/section-list.js +110 -0
- package/dist/site/editor/section-list.js.map +1 -0
- package/dist/site/editor/section-picker.d.ts +12 -0
- package/dist/site/editor/section-picker.js +44 -0
- package/dist/site/editor/section-picker.js.map +1 -0
- package/dist/site/editor/widgets.d.ts +84 -0
- package/dist/site/editor/widgets.js +130 -0
- package/dist/site/editor/widgets.js.map +1 -0
- package/dist/site/format.d.ts +31 -0
- package/dist/site/format.js +106 -0
- package/dist/site/format.js.map +1 -0
- package/dist/site/forms.d.ts +43 -0
- package/dist/site/forms.js +155 -0
- package/dist/site/forms.js.map +1 -0
- package/dist/site/header.d.ts +32 -0
- package/dist/site/header.js +76 -0
- package/dist/site/header.js.map +1 -0
- package/dist/site/icons.d.ts +10 -0
- package/dist/site/icons.js +28 -0
- package/dist/site/icons.js.map +1 -0
- package/dist/site/index.d.ts +11 -0
- package/dist/site/index.js +13 -0
- package/dist/site/index.js.map +1 -0
- package/dist/site/markdown.d.ts +14 -0
- package/dist/site/markdown.js +457 -0
- package/dist/site/markdown.js.map +1 -0
- package/dist/site/page.d.ts +16 -0
- package/dist/site/page.js +65 -0
- package/dist/site/page.js.map +1 -0
- package/dist/site/proxy.d.ts +13 -0
- package/dist/site/proxy.js +43 -0
- package/dist/site/proxy.js.map +1 -0
- package/dist/site/sections.d.ts +43 -0
- package/dist/site/sections.js +560 -0
- package/dist/site/sections.js.map +1 -0
- package/dist/site/server.d.ts +73 -0
- package/dist/site/server.js +235 -0
- package/dist/site/server.js.map +1 -0
- package/dist/site/types.d.ts +137 -0
- package/dist/site/types.js +2 -0
- package/dist/site/types.js.map +1 -0
- package/dist/support.d.ts +29 -0
- package/dist/support.js +165 -0
- package/dist/support.js.map +1 -0
- package/dist/system-config.d.ts +24 -0
- package/dist/system-config.js +37 -0
- package/dist/system-config.js.map +1 -0
- package/dist/system-settings.d.ts +9 -0
- package/dist/system-settings.js +60 -0
- package/dist/system-settings.js.map +1 -0
- package/dist/theme-catalog.d.ts +72 -2
- package/dist/theme-catalog.js +47 -0
- package/dist/theme-catalog.js.map +1 -1
- package/dist/theme-switcher.d.ts +8 -0
- package/dist/theme-switcher.js +39 -4
- package/dist/theme-switcher.js.map +1 -1
- package/dist/theme.js +8 -0
- package/dist/theme.js.map +1 -1
- package/dist/transactions.d.ts +4 -0
- package/dist/transactions.js +60 -0
- package/dist/transactions.js.map +1 -0
- package/dist/ui.js +3 -22
- package/dist/ui.js.map +1 -1
- package/package.json +9 -5
- package/styles.css +1089 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { SITE_ICONS } from "@tekki-forge/compiler/site";
|
|
4
|
+
import { ArrowDown, ArrowUp, ChevronDown, ChevronRight, Copy, ImageUp, Plus, Sparkles, Trash2, X } from "lucide-react";
|
|
5
|
+
import { useId, useMemo, useRef, useState } from "react";
|
|
6
|
+
import { useForge } from "../../context.js";
|
|
7
|
+
import { ENTITY_ICON_COMPONENTS } from "../../entity-icons.js";
|
|
8
|
+
import { LANDING_ICON_COMPONENTS } from "../../landing.js";
|
|
9
|
+
import { Badge, cn, Input, Label, Select, Textarea } from "../../ui.js";
|
|
10
|
+
import { Markdown } from "../markdown.js";
|
|
11
|
+
import { useImageUpload } from "./api.js";
|
|
12
|
+
import { alignCells, dataEntities, duplicateItem, emptyItem, entityFieldOptions, errorAt, errorCount, formatSort, fromInput, moveItem, parseSort, propVisible, removeItem, rowsToFilter, setProp, toInput, } from "./model.js";
|
|
13
|
+
import { Switch } from "./widgets.js";
|
|
14
|
+
/** Label of a prop: `siteAdmin.prop.<type>.<name>` when the library names it differently in that section, else `siteAdmin.prop.<name>`. */
|
|
15
|
+
export function usePropLabel() {
|
|
16
|
+
const { t } = useForge();
|
|
17
|
+
return (type, spec) => {
|
|
18
|
+
const specific = `siteAdmin.prop.${type}.${spec.name}`;
|
|
19
|
+
const own = t(specific);
|
|
20
|
+
return own !== specific ? own : t(`siteAdmin.prop.${spec.name}`);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const fieldId = (ctx, path) => `${ctx.idPrefix}-${path.replace(/[^\w-]/g, "-")}`;
|
|
24
|
+
/** Every visible prop of an object (a section's props, or a list item). */
|
|
25
|
+
export function PropsForm({ fields, value, onChange, path, ctx }) {
|
|
26
|
+
const visible = fields.filter((f) => propVisible(f, fields, value));
|
|
27
|
+
const groups = [];
|
|
28
|
+
// An image and its description travel together.
|
|
29
|
+
for (const f of visible) {
|
|
30
|
+
const prev = groups[groups.length - 1];
|
|
31
|
+
if (prev && prev[0].kind === "image" && prev.length === 1 && (f.name === "imageAlt" || f.name === "alt"))
|
|
32
|
+
prev.push(f);
|
|
33
|
+
else
|
|
34
|
+
groups.push([f]);
|
|
35
|
+
}
|
|
36
|
+
return (_jsx("div", { className: "space-y-4", children: groups.map((group) => {
|
|
37
|
+
const body = group.map((spec) => (_jsx(PropField, { spec: spec, value: value[spec.name], path: path ? `${path}.${spec.name}` : spec.name, ctx: ctx, siblings: value, onChange: (v) => onChange(setProp(fields, value, spec.name, v)) }, spec.name)));
|
|
38
|
+
return group.length > 1 ? (_jsx("div", { className: "forge-card-flat space-y-3 p-3", children: body }, group[0].name)) : (body);
|
|
39
|
+
}) }));
|
|
40
|
+
}
|
|
41
|
+
function Field({ id, label, required, error, hint, children, aside }) {
|
|
42
|
+
const { tv } = useForge();
|
|
43
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-end justify-between gap-2", children: [_jsx(Label, { htmlFor: id, required: required, children: label }), aside && _jsx("div", { className: "mb-1.5", children: aside })] }), children, error ? (_jsx("p", { id: id ? `${id}-error` : undefined, className: "mt-1 text-xs text-danger", children: tv(error) })) : hint ? (_jsx("p", { className: "mt-1 text-xs text-ink-muted", children: hint })) : null] }));
|
|
44
|
+
}
|
|
45
|
+
export function PropField({ spec, value, onChange, path, ctx, siblings }) {
|
|
46
|
+
const { t } = useForge();
|
|
47
|
+
const propLabel = usePropLabel();
|
|
48
|
+
const label = propLabel(ctx.type, spec);
|
|
49
|
+
const id = fieldId(ctx, path);
|
|
50
|
+
const error = errorAt(ctx.errors, path);
|
|
51
|
+
const a11y = { id, "aria-invalid": error ? true : undefined, "aria-describedby": error ? `${id}-error` : undefined };
|
|
52
|
+
const input = toInput(spec, value);
|
|
53
|
+
const set = (v) => onChange(fromInput(spec, v));
|
|
54
|
+
const entityName = typeof siblings.entity === "string" ? siblings.entity : "";
|
|
55
|
+
const entity = ctx.app.entities.find((e) => e.name === entityName);
|
|
56
|
+
switch (spec.kind) {
|
|
57
|
+
case "text":
|
|
58
|
+
case "href":
|
|
59
|
+
return (_jsx(Field, { id: id, label: label, required: spec.required, error: error, hint: spec.kind === "href" ? t("siteAdmin.hint.href") : undefined, children: _jsx(Input, { ...a11y, type: spec.format === "email" ? "email" : spec.format === "phone" ? "tel" : "text", inputMode: spec.kind === "href" ? "url" : undefined, value: input, maxLength: spec.max ? spec.max + 50 : undefined, onChange: (e) => set(e.target.value) }) }));
|
|
60
|
+
case "textarea":
|
|
61
|
+
return (_jsx(Field, { id: id, label: label, required: spec.required, error: error, children: _jsx(Textarea, { ...a11y, rows: 3, value: input, onChange: (e) => set(e.target.value) }) }));
|
|
62
|
+
case "markdown":
|
|
63
|
+
return _jsx(MarkdownField, { a11y: a11y, label: label, required: spec.required, error: error, value: input, onChange: set });
|
|
64
|
+
case "image":
|
|
65
|
+
return _jsx(ImageField, { a11y: a11y, label: label, required: spec.required, error: error, value: input, onChange: set, storage: ctx.storage });
|
|
66
|
+
case "link":
|
|
67
|
+
return _jsx(LinkField, { id: id, label: label, required: spec.required, errors: { label: ctx.errors[`${path}.label`], href: ctx.errors[`${path}.href`], own: ctx.errors[path] }, value: input, onChange: set });
|
|
68
|
+
case "icon":
|
|
69
|
+
return _jsx(IconField, { a11y: a11y, label: label, error: error, value: input, onChange: set });
|
|
70
|
+
case "select":
|
|
71
|
+
return (_jsx(Field, { id: id, label: label, required: spec.required, error: error, children: _jsxs(Select, { ...a11y, value: input, onChange: (e) => set(e.target.value), children: [_jsx("option", { value: "", children: spec.name === "aggregate" ? t("siteAdmin.option.aggregate.count") : t("siteAdmin.form.default") }), (spec.options ?? []).filter((o) => !(spec.name === "aggregate" && o === "count")).map((o) => (_jsx("option", { value: o, children: t(`siteAdmin.option.${spec.name}.${o}`) }, o)))] }) }));
|
|
72
|
+
case "number":
|
|
73
|
+
return (_jsx(Field, { id: id, label: label, required: spec.required, error: error, hint: spec.min !== undefined && spec.max !== undefined ? t("siteAdmin.hint.range", { min: spec.min, max: spec.max }) : undefined, children: _jsx(Input, { ...a11y, type: "number", inputMode: "numeric", min: spec.min, max: spec.max, value: input, onChange: (e) => set(e.target.value), className: "max-w-40" }) }));
|
|
74
|
+
case "boolean":
|
|
75
|
+
return (_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx("label", { htmlFor: id, className: "text-sm font-medium text-ink", children: label }), _jsx(Switch, { id: id, checked: input, onChange: set }), error && _jsx("p", { className: "text-xs text-danger", children: error })] }));
|
|
76
|
+
case "strings":
|
|
77
|
+
return _jsx(StringsField, { id: id, label: label, required: spec.required, error: error, max: spec.max, value: input, onChange: set });
|
|
78
|
+
case "list":
|
|
79
|
+
return _jsx(ListField, { spec: spec, value: input, onChange: set, path: path, ctx: ctx, label: label, error: ctx.errors[path] });
|
|
80
|
+
case "entity":
|
|
81
|
+
return _jsx(EntityField, { a11y: a11y, label: label, required: spec.required, error: error, value: input, onChange: set, app: ctx.app });
|
|
82
|
+
case "fields":
|
|
83
|
+
return _jsx(FieldsField, { id: id, label: label, error: error, max: spec.max, entity: entity, value: input, onChange: set });
|
|
84
|
+
case "field":
|
|
85
|
+
return (_jsx(Field, { id: id, label: label, error: error, children: _jsxs(Select, { ...a11y, value: input, onChange: (e) => set(e.target.value), children: [_jsx("option", { value: "", children: t("common.select") }), entityFieldOptions(entity, "field").map((f) => (_jsx("option", { value: f.name, children: f.label }, f.name)))] }) }));
|
|
86
|
+
case "filter":
|
|
87
|
+
return _jsx(FilterField, { id: id, label: label, error: error, entity: entity, value: input, onChange: (rows) => onChange(rowsToFilter(rows)) });
|
|
88
|
+
case "sort":
|
|
89
|
+
return _jsx(SortField, { a11y: a11y, label: label, error: error, entity: entity, value: value, onChange: onChange });
|
|
90
|
+
case "cells":
|
|
91
|
+
return _jsx(CellsField, { id: id, label: label, error: error, columns: ctx.columns, value: input, onChange: set });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function MarkdownField({ a11y, label, required, error, value, onChange }) {
|
|
95
|
+
const { t } = useForge();
|
|
96
|
+
const [preview, setPreview] = useState(false);
|
|
97
|
+
return (_jsx(Field, { id: a11y.id, label: label, required: required, error: error, hint: t("siteAdmin.hint.markdown"), aside: _jsxs("div", { className: "flex gap-0.5 text-xs", role: "group", "aria-label": label, children: [_jsx("button", { type: "button", "aria-pressed": !preview, onClick: () => setPreview(false), className: cn("forge-btn rounded px-2 py-0.5", !preview ? "forge-btn-secondary" : "forge-btn-ghost"), children: t("siteAdmin.markdown.write") }), _jsx("button", { type: "button", "aria-pressed": preview, onClick: () => setPreview(true), className: cn("forge-btn rounded px-2 py-0.5", preview ? "forge-btn-secondary" : "forge-btn-ghost"), children: t("siteAdmin.markdown.preview") })] }), children: preview ? (_jsx("div", { className: "forge-input max-h-80 min-h-24 overflow-y-auto px-3 py-2 text-sm", tabIndex: 0, "aria-label": t("siteAdmin.markdown.preview"), children: value.trim() ? _jsx(Markdown, { source: value }) : _jsx("p", { className: "text-ink-subtle", children: t("siteAdmin.markdown.empty") }) })) : (_jsx(Textarea, { ...a11y, rows: 8, className: "font-mono text-xs leading-relaxed", value: value, onChange: (e) => onChange(e.target.value) })) }));
|
|
98
|
+
}
|
|
99
|
+
/** Image: URL (or upload when the storage plugin is installed) with a thumbnail. */
|
|
100
|
+
export function ImageField({ a11y, label, required, error, value, onChange, storage }) {
|
|
101
|
+
const { t } = useForge();
|
|
102
|
+
const upload = useImageUpload();
|
|
103
|
+
const fileRef = useRef(null);
|
|
104
|
+
const [progress, setProgress] = useState(null);
|
|
105
|
+
const [uploadError, setUploadError] = useState(null);
|
|
106
|
+
const [broken, setBroken] = useState(null);
|
|
107
|
+
const start = async (file) => {
|
|
108
|
+
setUploadError(null);
|
|
109
|
+
if (!file.type.startsWith("image/"))
|
|
110
|
+
return setUploadError(t("siteAdmin.image.notImage"));
|
|
111
|
+
if (file.size > 10 * 1024 * 1024)
|
|
112
|
+
return setUploadError(t("siteAdmin.image.tooLarge"));
|
|
113
|
+
setProgress(0);
|
|
114
|
+
try {
|
|
115
|
+
onChange(await upload(file, setProgress));
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
setUploadError(e.message === "network" ? t("fields.file.uploadFailedNetwork") : e.message);
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
setProgress(null);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
return (_jsxs(Field, { id: a11y.id, label: label, required: required, error: error ?? uploadError ?? undefined, hint: storage ? undefined : t("siteAdmin.image.noStorage"), children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "flex size-16 shrink-0 items-center justify-center overflow-hidden rounded-[var(--forge-radius-control)] border border-line bg-surface-muted", children: value && broken !== value ? _jsx("img", { src: value, alt: "", className: "size-full object-cover", onError: () => setBroken(value) }) : _jsx(ImageUp, { className: "size-5 text-ink-subtle", "aria-hidden": true }) }), _jsxs("div", { className: "min-w-0 flex-1 space-y-2", children: [_jsx(Input, { ...a11y, type: "text", inputMode: "url", placeholder: "https://\u2026 or /image.png", value: value, onChange: (e) => onChange(e.target.value) }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [storage && (_jsxs("button", { type: "button", className: "forge-btn forge-btn-secondary inline-flex h-7 items-center gap-1.5 px-2.5 text-xs font-medium", disabled: progress !== null, onClick: () => fileRef.current?.click(), children: [_jsx(ImageUp, { className: "size-3.5", "aria-hidden": true }), " ", progress === null ? t("siteAdmin.image.upload") : t("fields.file.uploading", { percent: progress })] })), value && (_jsxs("button", { type: "button", className: "forge-btn forge-btn-ghost inline-flex h-7 items-center gap-1 px-2 text-xs", onClick: () => onChange(""), children: [_jsx(X, { className: "size-3.5", "aria-hidden": true }), " ", t("common.remove")] }))] }), progress !== null && (_jsx("div", { className: "h-1 overflow-hidden rounded-full bg-line", role: "progressbar", "aria-label": t("siteAdmin.image.upload"), "aria-valuenow": progress, "aria-valuemin": 0, "aria-valuemax": 100, children: _jsx("div", { className: "h-full bg-primary", style: { width: `${progress}%` } }) }))] })] }), storage && (_jsx("input", { ref: fileRef, type: "file", hidden: true, accept: "image/*", onChange: (e) => {
|
|
125
|
+
const f = e.target.files?.[0];
|
|
126
|
+
if (f)
|
|
127
|
+
void start(f);
|
|
128
|
+
e.target.value = "";
|
|
129
|
+
} }))] }));
|
|
130
|
+
}
|
|
131
|
+
function LinkField({ id, label, required, errors, value, onChange }) {
|
|
132
|
+
const { t, tv } = useForge();
|
|
133
|
+
return (_jsxs("fieldset", { children: [_jsxs("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: [label, required && _jsx("span", { className: "ml-0.5 text-danger", children: "*" })] }), _jsxs("div", { className: "grid gap-2 sm:grid-cols-[minmax(0,2fr)_minmax(0,3fr)]", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: `${id}-label`, className: "sr-only", children: t("siteAdmin.link.label") }), _jsx(Input, { id: `${id}-label`, placeholder: t("siteAdmin.link.label"), "aria-invalid": errors.label ? true : undefined, value: value.label, onChange: (e) => onChange({ ...value, label: e.target.value }) })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: `${id}-href`, className: "sr-only", children: t("siteAdmin.link.href") }), _jsx(Input, { id: `${id}-href`, placeholder: "/sign-up", inputMode: "url", "aria-invalid": errors.href ? true : undefined, value: value.href, onChange: (e) => onChange({ ...value, href: e.target.value }) })] })] }), (errors.own || errors.label || errors.href) && _jsx("p", { className: "mt-1 text-xs text-danger", children: [errors.own, errors.label && `${t("siteAdmin.link.label")}: ${tv(errors.label)}`, errors.href && `${t("siteAdmin.link.href")}: ${tv(errors.href)}`].filter(Boolean).join(" · ") })] }));
|
|
134
|
+
}
|
|
135
|
+
export function IconGlyph({ name, className }) {
|
|
136
|
+
const Icon = LANDING_ICON_COMPONENTS[name] ?? ENTITY_ICON_COMPONENTS[name] ?? Sparkles;
|
|
137
|
+
return _jsx(Icon, { className: className ?? "size-4", "aria-hidden": true });
|
|
138
|
+
}
|
|
139
|
+
function IconField({ a11y, label, error, value, onChange }) {
|
|
140
|
+
const { t } = useForge();
|
|
141
|
+
return (_jsx(Field, { id: a11y.id, label: label, error: error, children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "forge-badge flex size-9 shrink-0 items-center justify-center", "aria-hidden": true, children: value ? _jsx(IconGlyph, { name: value }) : _jsx(Sparkles, { className: "size-4 opacity-40" }) }), _jsxs(Select, { ...a11y, value: value, onChange: (e) => onChange(e.target.value), children: [_jsx("option", { value: "", children: t("siteAdmin.form.none") }), SITE_ICONS.map((i) => (_jsx("option", { value: i, children: i }, i)))] })] }) }));
|
|
142
|
+
}
|
|
143
|
+
function RowButtons({ index, count, onMove, onRemove, onDuplicate, label }) {
|
|
144
|
+
const { t } = useForge();
|
|
145
|
+
return (_jsxs("div", { className: "flex shrink-0 items-center", children: [_jsx("button", { type: "button", className: "forge-btn forge-btn-ghost p-1", disabled: index === 0, onClick: () => onMove(index - 1), "aria-label": t("siteAdmin.moveUpNamed", { name: label }), title: t("siteAdmin.moveUp"), children: _jsx(ArrowUp, { className: "size-3.5", "aria-hidden": true }) }), _jsx("button", { type: "button", className: "forge-btn forge-btn-ghost p-1", disabled: index === count - 1, onClick: () => onMove(index + 1), "aria-label": t("siteAdmin.moveDownNamed", { name: label }), title: t("siteAdmin.moveDown"), children: _jsx(ArrowDown, { className: "size-3.5", "aria-hidden": true }) }), onDuplicate && (_jsx("button", { type: "button", className: "forge-btn forge-btn-ghost p-1", onClick: onDuplicate, "aria-label": t("siteAdmin.duplicateNamed", { name: label }), title: t("siteAdmin.duplicate"), children: _jsx(Copy, { className: "size-3.5", "aria-hidden": true }) })), _jsx("button", { type: "button", className: "forge-btn forge-btn-danger-ghost p-1", onClick: onRemove, "aria-label": t("siteAdmin.removeNamed", { name: label }), title: t("common.remove"), children: _jsx(Trash2, { className: "size-3.5", "aria-hidden": true }) })] }));
|
|
146
|
+
}
|
|
147
|
+
function StringsField({ id, label, required, error, max, value, onChange }) {
|
|
148
|
+
const { t, tv } = useForge();
|
|
149
|
+
const listRef = useRef(null);
|
|
150
|
+
const focusRow = (i) => requestAnimationFrame(() => listRef.current?.querySelectorAll("input")[i]?.focus());
|
|
151
|
+
return (_jsxs("fieldset", { children: [_jsxs("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: [label, required && _jsx("span", { className: "ml-0.5 text-danger", children: "*" })] }), _jsx("ul", { ref: listRef, className: "space-y-1.5", children: value.map((s, i) => (_jsxs("li", { className: "flex items-center gap-1", children: [_jsx(Input, { id: i === 0 ? id : undefined, "aria-label": t("siteAdmin.itemNumber", { name: label, number: i + 1 }), value: s, onChange: (e) => onChange(value.map((x, j) => (j === i ? e.target.value : x))), onKeyDown: (e) => {
|
|
152
|
+
if (e.key === "Enter") {
|
|
153
|
+
e.preventDefault();
|
|
154
|
+
if (!max || value.length < max) {
|
|
155
|
+
onChange([...value.slice(0, i + 1), "", ...value.slice(i + 1)]);
|
|
156
|
+
focusRow(i + 1);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
} }), _jsx(RowButtons, { index: i, count: value.length, label: s || String(i + 1), onMove: (to) => (onChange(moveItem(value, i, to)), focusRow(to)), onRemove: () => onChange(removeItem(value, i)) })] }, i))) }), _jsxs("button", { type: "button", className: "forge-btn forge-btn-ghost mt-1.5 inline-flex h-7 items-center gap-1 px-2 text-xs", disabled: !!max && value.length >= max, onClick: () => (onChange([...value, ""]), focusRow(value.length)), children: [_jsx(Plus, { className: "size-3.5", "aria-hidden": true }), " ", t("siteAdmin.addRow")] }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
|
|
160
|
+
}
|
|
161
|
+
function itemTitle(fields, item) {
|
|
162
|
+
for (const f of fields) {
|
|
163
|
+
const v = item[f.name];
|
|
164
|
+
if ((f.kind === "text" || f.kind === "textarea") && typeof v === "string" && v.trim())
|
|
165
|
+
return v.trim().slice(0, 60);
|
|
166
|
+
}
|
|
167
|
+
return "";
|
|
168
|
+
}
|
|
169
|
+
function ListField({ spec, value, onChange, path, ctx, label, error }) {
|
|
170
|
+
const { t, tv } = useForge();
|
|
171
|
+
const fields = spec.fields ?? [];
|
|
172
|
+
const [open, setOpen] = useState(value.length === 1 ? 0 : null);
|
|
173
|
+
const headerId = useId();
|
|
174
|
+
const max = spec.max;
|
|
175
|
+
const update = (next, openAt) => {
|
|
176
|
+
onChange(next);
|
|
177
|
+
if (openAt !== undefined)
|
|
178
|
+
setOpen(openAt);
|
|
179
|
+
};
|
|
180
|
+
return (_jsxs("section", { "aria-labelledby": headerId, children: [_jsx("div", { className: "mb-1.5 flex items-center justify-between gap-2", children: _jsxs("h4", { id: headerId, className: "text-sm font-medium text-ink", children: [label, spec.required && _jsx("span", { className: "ml-0.5 text-danger", children: "*" }), _jsx("span", { className: "ml-2 text-xs font-normal text-ink-subtle", children: max ? `${value.length} / ${max}` : value.length })] }) }), _jsx("ul", { className: "space-y-2", children: value.map((item, i) => {
|
|
181
|
+
const name = itemTitle(fields, item) || t("siteAdmin.itemNumber", { name: label, number: i + 1 });
|
|
182
|
+
const errs = errorCount(ctx.errors, `${path}.${i}`);
|
|
183
|
+
const expanded = open === i;
|
|
184
|
+
const panelId = `${fieldId(ctx, path)}-${i}-panel`;
|
|
185
|
+
return (_jsxs("li", { className: cn("rounded-[var(--forge-radius-control)] border bg-surface", errs ? "border-danger" : "border-line"), children: [_jsxs("div", { className: "flex items-center gap-1 py-1 pr-1 pl-2", children: [_jsxs("button", { type: "button", "aria-expanded": expanded, "aria-controls": panelId, onClick: () => setOpen(expanded ? null : i), className: "forge-focusable flex min-w-0 flex-1 items-center gap-1.5 rounded py-1 text-left text-sm text-ink", children: [expanded ? _jsx(ChevronDown, { className: "size-3.5 shrink-0 text-ink-muted", "aria-hidden": true }) : _jsx(ChevronRight, { className: "size-3.5 shrink-0 text-ink-muted", "aria-hidden": true }), typeof item.icon === "string" && item.icon && _jsx(IconGlyph, { name: item.icon, className: "size-3.5 shrink-0 text-ink-muted" }), _jsx("span", { className: "truncate", children: name }), errs > 0 && _jsx(Badge, { tone: 4, children: t("siteAdmin.issueCount", { count: errs }) })] }), _jsx(RowButtons, { index: i, count: value.length, label: name, onMove: (to) => update(moveItem(value, i, to), expanded ? Math.max(0, Math.min(value.length - 1, to)) : open), onDuplicate: !max || value.length < max ? () => update(duplicateItem(value, i), i + 1) : undefined, onRemove: () => update(removeItem(value, i), null) })] }), expanded && (_jsx("div", { id: panelId, className: "border-t border-line p-3", children: _jsx(PropsForm, { fields: fields, value: item, path: `${path}.${i}`, ctx: ctx, onChange: (next) => onChange(value.map((x, j) => (j === i ? next : x))) }) }))] }, i));
|
|
186
|
+
}) }), _jsxs("button", { type: "button", className: "forge-btn forge-btn-secondary mt-2 inline-flex h-7 items-center gap-1 px-2.5 text-xs font-medium", disabled: !!max && value.length >= max, onClick: () => update([...value, emptyItem(fields, { columns: ctx.columns.length })], value.length), children: [_jsx(Plus, { className: "size-3.5", "aria-hidden": true }), " ", t("siteAdmin.addItem")] }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
|
|
187
|
+
}
|
|
188
|
+
function EntityField({ a11y, label, required, error, value, onChange, app }) {
|
|
189
|
+
const { t } = useForge();
|
|
190
|
+
const options = useMemo(() => dataEntities(app), [app]);
|
|
191
|
+
const unavailable = options.filter((o) => o.problem);
|
|
192
|
+
return (_jsxs(Field, { id: a11y.id, label: label, required: required, error: error, children: [_jsxs(Select, { ...a11y, value: value, onChange: (e) => onChange(e.target.value), children: [_jsx("option", { value: "", children: required ? t("common.select") : t("siteAdmin.form.none") }), options.map(({ entity, problem }) => (_jsx("option", { value: entity.name, disabled: !!problem && entity.name !== value, children: problem ? t("siteAdmin.entity.unavailable", { name: entity.pluralLabel }) : entity.pluralLabel }, entity.name)))] }), unavailable.length > 0 && (_jsxs("details", { className: "mt-1 text-xs text-ink-muted", children: [_jsx("summary", { className: "cursor-pointer", children: t("siteAdmin.entity.why") }), _jsx("ul", { className: "mt-1 list-disc space-y-1 pl-4", children: unavailable.map((o) => (_jsx("li", { children: o.problem }, o.entity.name))) })] }))] }));
|
|
193
|
+
}
|
|
194
|
+
function FieldsField({ id, label, error, max, entity, value, onChange }) {
|
|
195
|
+
const { t, tv } = useForge();
|
|
196
|
+
const options = entityFieldOptions(entity, "fields");
|
|
197
|
+
return (_jsxs("fieldset", { id: id, children: [_jsx("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: label }), _jsx("p", { className: "mb-2 text-xs text-ink-muted", children: value.length ? t("siteAdmin.fields.chosen", { count: value.length, max: max ?? options.length }) : t("siteAdmin.fields.auto") }), _jsx("div", { className: "grid gap-1.5 sm:grid-cols-2", children: options.map((f) => {
|
|
198
|
+
const checked = value.includes(f.name);
|
|
199
|
+
return (_jsxs("label", { className: "flex items-center gap-2 text-sm text-ink", children: [_jsx("input", { type: "checkbox", className: "forge-check size-4", checked: checked, disabled: !checked && !!max && value.length >= max, onChange: () => onChange(checked ? value.filter((x) => x !== f.name) : [...value, f.name]) }), f.label] }, f.name));
|
|
200
|
+
}) }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
|
|
201
|
+
}
|
|
202
|
+
function FilterField({ id, label, error, entity, value, onChange }) {
|
|
203
|
+
const { t, tv } = useForge();
|
|
204
|
+
// Rows are kept locally so a row with an empty key survives while it's being typed.
|
|
205
|
+
const [rows, setRows] = useState(value);
|
|
206
|
+
// Changed from outside (entity switched, section reverted): start over from the prop.
|
|
207
|
+
if (JSON.stringify(rowsToFilter(rows) ?? {}) !== JSON.stringify(rowsToFilter(value) ?? {}))
|
|
208
|
+
setRows(value);
|
|
209
|
+
const update = (next) => {
|
|
210
|
+
setRows(next);
|
|
211
|
+
onChange(next);
|
|
212
|
+
};
|
|
213
|
+
const listId = `${id}-fields`;
|
|
214
|
+
return (_jsxs("fieldset", { id: id, children: [_jsx("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: label }), _jsx("datalist", { id: listId, children: entityFieldOptions(entity, "filter").map((f) => (_jsx("option", { value: f.name, children: f.label }, f.name))) }), _jsx("ul", { className: "space-y-1.5", children: rows.map((r, i) => (_jsxs("li", { className: "flex items-center gap-1", children: [_jsx(Input, { "aria-label": t("siteAdmin.filter.field"), placeholder: t("siteAdmin.filter.field"), list: listId, value: r.key, onChange: (e) => update(rows.map((x, j) => (j === i ? { ...x, key: e.target.value } : x))) }), _jsx("span", { className: "text-ink-subtle", "aria-hidden": true, children: "=" }), _jsx(Input, { "aria-label": t("siteAdmin.filter.value"), placeholder: t("siteAdmin.filter.value"), value: r.value, onChange: (e) => update(rows.map((x, j) => (j === i ? { ...x, value: e.target.value } : x))) }), _jsx("button", { type: "button", className: "forge-btn forge-btn-danger-ghost shrink-0 p-1", onClick: () => update(removeItem(rows, i)), "aria-label": t("siteAdmin.removeNamed", { name: r.key || String(i + 1) }), children: _jsx(Trash2, { className: "size-3.5", "aria-hidden": true }) })] }, i))) }), _jsxs("button", { type: "button", className: "forge-btn forge-btn-ghost mt-1.5 inline-flex h-7 items-center gap-1 px-2 text-xs", onClick: () => setRows([...rows, { key: "", value: "" }]), children: [_jsx(Plus, { className: "size-3.5", "aria-hidden": true }), " ", t("siteAdmin.filter.add")] }), _jsx("p", { className: "mt-1 text-xs text-ink-muted", children: t("siteAdmin.filter.hint") }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
|
|
215
|
+
}
|
|
216
|
+
function SortField({ a11y, label, error, entity, value, onChange }) {
|
|
217
|
+
const { t } = useForge();
|
|
218
|
+
const sort = parseSort(value);
|
|
219
|
+
return (_jsx(Field, { id: a11y.id, label: label, error: error, children: _jsxs("div", { className: "flex gap-2", children: [_jsxs(Select, { ...a11y, value: sort.field, onChange: (e) => onChange(formatSort(e.target.value, sort.desc)), children: [_jsx("option", { value: "", children: t("siteAdmin.form.default") }), entityFieldOptions(entity, "sort").map((f) => (_jsx("option", { value: f.name, children: f.label }, f.name)))] }), _jsxs(Select, { "aria-label": t("siteAdmin.sort.direction"), value: sort.desc ? "desc" : "asc", disabled: !sort.field, onChange: (e) => onChange(formatSort(sort.field, e.target.value === "desc")), className: "max-w-40", children: [_jsx("option", { value: "asc", children: t("siteAdmin.sort.asc") }), _jsx("option", { value: "desc", children: t("siteAdmin.sort.desc") })] })] }) }));
|
|
220
|
+
}
|
|
221
|
+
function CellsField({ id, label, error, columns, value, onChange }) {
|
|
222
|
+
const { t, tv } = useForge();
|
|
223
|
+
const cells = alignCells(value, columns.length);
|
|
224
|
+
const set = (i, v) => onChange(cells.map((c, j) => (j === i ? v : c)));
|
|
225
|
+
if (!columns.length)
|
|
226
|
+
return _jsx("p", { className: "text-xs text-ink-muted", children: t("siteAdmin.cells.noColumns") });
|
|
227
|
+
return (_jsxs("fieldset", { id: id, children: [_jsx("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: label }), _jsx("div", { className: "grid gap-2 sm:grid-cols-2", children: columns.map((col, i) => {
|
|
228
|
+
const cell = cells[i];
|
|
229
|
+
const mode = cell === true ? "yes" : cell === false ? "no" : "text";
|
|
230
|
+
return (_jsxs("div", { className: "forge-card-flat p-2", children: [_jsx("p", { className: "mb-1 truncate text-xs font-medium text-ink-muted", children: col || t("siteAdmin.cells.column", { number: i + 1 }) }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsxs(Select, { "aria-label": t("siteAdmin.cells.kind", { column: col || String(i + 1) }), value: mode, onChange: (e) => set(i, e.target.value === "yes" ? true : e.target.value === "no" ? false : ""), className: "h-8 !w-24 py-0 text-xs", children: [_jsx("option", { value: "yes", children: t("siteAdmin.cells.yes") }), _jsx("option", { value: "no", children: t("siteAdmin.cells.no") }), _jsx("option", { value: "text", children: t("siteAdmin.cells.text") })] }), mode === "text" && _jsx(Input, { "aria-label": t("siteAdmin.cells.value", { column: col || String(i + 1) }), value: cell, maxLength: 120, onChange: (e) => set(i, e.target.value), className: "h-8 py-0 text-xs" })] })] }, i));
|
|
231
|
+
}) }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=prop-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prop-fields.js","sourceRoot":"","sources":["../../../src/site/editor/prop-fields.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SiteSectionDetail } from "../types.js";
|
|
2
|
+
export interface SectionListProps {
|
|
3
|
+
sections: SiteSectionDetail[];
|
|
4
|
+
removed: SiteSectionDetail[];
|
|
5
|
+
selected: string | null;
|
|
6
|
+
busy?: boolean;
|
|
7
|
+
onSelect: (id: string) => void;
|
|
8
|
+
onReorder: (ids: string[]) => void;
|
|
9
|
+
onToggleHidden: (s: SiteSectionDetail) => void;
|
|
10
|
+
onDelete: (s: SiteSectionDetail) => void;
|
|
11
|
+
onRevert: (s: SiteSectionDetail) => void;
|
|
12
|
+
announce: (text: string) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function SectionList({ sections, removed, selected, busy, onSelect, onReorder, onToggleHidden, onDelete, onRevert, announce }: SectionListProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/*
|
|
4
|
+
* The sections of a page, in order: select, drag to reorder (pointer, or keyboard on the handle: Space picks up,
|
|
5
|
+
* arrows move, Space/Enter drops, Escape cancels — every step announced), move up/down, hide/show, delete,
|
|
6
|
+
* revert, plus the config sections that were removed (revert brings them back).
|
|
7
|
+
*/
|
|
8
|
+
import { ArrowDown, ArrowUp, Eye, EyeOff, GripVertical, RotateCcw, Trash2, TriangleAlert } from "lucide-react";
|
|
9
|
+
import { useEffect, useRef, useState } from "react";
|
|
10
|
+
import { useForge } from "../../context.js";
|
|
11
|
+
import { cn } from "../../ui.js";
|
|
12
|
+
import { dropIndex, keyboardDrag, previewOrder, sectionSummary } from "./model.js";
|
|
13
|
+
import { Pill } from "./widgets.js";
|
|
14
|
+
export function SectionList({ sections, removed, selected, busy, onSelect, onReorder, onToggleHidden, onDelete, onRevert, announce }) {
|
|
15
|
+
const { t } = useForge();
|
|
16
|
+
const [drag, setDrag] = useState(null);
|
|
17
|
+
const rows = useRef(new Map());
|
|
18
|
+
const handles = useRef(new Map());
|
|
19
|
+
const midpoints = useRef([]);
|
|
20
|
+
const focusAfter = useRef(null);
|
|
21
|
+
const ordered = previewOrder(sections, drag);
|
|
22
|
+
const label = (s) => t(`siteAdmin.section.${s.type}.label`);
|
|
23
|
+
const count = sections.length;
|
|
24
|
+
// Moving a focused element in the DOM can drop focus: put it back on the moved handle.
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const id = focusAfter.current;
|
|
27
|
+
if (!id)
|
|
28
|
+
return;
|
|
29
|
+
focusAfter.current = null;
|
|
30
|
+
handles.current.get(id)?.focus();
|
|
31
|
+
});
|
|
32
|
+
const commit = (from, to) => {
|
|
33
|
+
if (from === to)
|
|
34
|
+
return;
|
|
35
|
+
const ids = previewOrder(sections, { from, at: to }).map((s) => s.id);
|
|
36
|
+
onReorder(ids);
|
|
37
|
+
};
|
|
38
|
+
const onHandleKey = (e, index, s) => {
|
|
39
|
+
const state = drag?.mode === "keyboard" ? drag : null;
|
|
40
|
+
const result = keyboardDrag(state, e.key, index, count);
|
|
41
|
+
if (result.type === "none")
|
|
42
|
+
return;
|
|
43
|
+
e.preventDefault();
|
|
44
|
+
e.stopPropagation();
|
|
45
|
+
focusAfter.current = s.id;
|
|
46
|
+
switch (result.type) {
|
|
47
|
+
case "pick":
|
|
48
|
+
setDrag({ ...result.state, mode: "keyboard" });
|
|
49
|
+
announce(t("siteAdmin.reorder.picked", { name: label(s), position: index + 1, count }));
|
|
50
|
+
break;
|
|
51
|
+
case "move":
|
|
52
|
+
setDrag({ ...result.state, mode: "keyboard" });
|
|
53
|
+
announce(t("siteAdmin.reorder.moved", { name: label(s), position: result.state.at + 1, count }));
|
|
54
|
+
break;
|
|
55
|
+
case "drop":
|
|
56
|
+
setDrag(null);
|
|
57
|
+
commit(result.from, result.to);
|
|
58
|
+
announce(t("siteAdmin.reorder.dropped", { name: label(s), position: result.to + 1, count }));
|
|
59
|
+
break;
|
|
60
|
+
case "cancel":
|
|
61
|
+
setDrag(null);
|
|
62
|
+
announce(t("siteAdmin.reorder.cancelled", { name: label(s), position: result.from + 1 }));
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const onPointerDown = (e, index) => {
|
|
67
|
+
if (e.button !== 0 || busy)
|
|
68
|
+
return;
|
|
69
|
+
e.preventDefault();
|
|
70
|
+
e.currentTarget.setPointerCapture(e.pointerId);
|
|
71
|
+
midpoints.current = sections.map((s) => {
|
|
72
|
+
const r = rows.current.get(s.id)?.getBoundingClientRect();
|
|
73
|
+
return r ? r.top + r.height / 2 : 0;
|
|
74
|
+
});
|
|
75
|
+
setDrag({ from: index, at: index, mode: "pointer" });
|
|
76
|
+
};
|
|
77
|
+
const onPointerMove = (e) => {
|
|
78
|
+
if (drag?.mode !== "pointer")
|
|
79
|
+
return;
|
|
80
|
+
const at = dropIndex(midpoints.current, e.clientY, drag.from);
|
|
81
|
+
if (at !== drag.at)
|
|
82
|
+
setDrag({ ...drag, at });
|
|
83
|
+
};
|
|
84
|
+
const onPointerUp = (s) => {
|
|
85
|
+
if (drag?.mode !== "pointer")
|
|
86
|
+
return;
|
|
87
|
+
setDrag(null);
|
|
88
|
+
if (drag.at !== drag.from) {
|
|
89
|
+
commit(drag.from, drag.at);
|
|
90
|
+
announce(t("siteAdmin.reorder.dropped", { name: label(s), position: drag.at + 1, count }));
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
return (_jsxs("div", { children: [_jsx("p", { id: "site-reorder-help", className: "sr-only", children: t("siteAdmin.reorder.help") }), !sections.length ? (_jsx("p", { className: "px-3 py-6 text-center text-sm text-ink-muted", children: t("siteAdmin.sections.empty") })) : (_jsx("ol", { className: "space-y-1", "aria-label": t("siteAdmin.sections.title"), children: ordered.map((s, i) => {
|
|
94
|
+
const originalIndex = sections.indexOf(s);
|
|
95
|
+
const dragging = drag && sections[drag.from]?.id === s.id;
|
|
96
|
+
const summary = sectionSummary(s.props);
|
|
97
|
+
return (_jsxs("li", { ref: (el) => {
|
|
98
|
+
if (el)
|
|
99
|
+
rows.current.set(s.id, el);
|
|
100
|
+
else
|
|
101
|
+
rows.current.delete(s.id);
|
|
102
|
+
}, className: cn("group flex items-center gap-1 rounded-[var(--forge-radius-control)] border px-1 py-1 transition-colors motion-reduce:transition-none", selected === s.id ? "border-primary bg-selected" : "border-transparent hover:bg-hover", dragging && "border-dashed border-primary bg-surface shadow-sm", s.hidden && "opacity-70"), children: [_jsx("button", { ref: (el) => {
|
|
103
|
+
if (el)
|
|
104
|
+
handles.current.set(s.id, el);
|
|
105
|
+
else
|
|
106
|
+
handles.current.delete(s.id);
|
|
107
|
+
}, type: "button", disabled: busy, "aria-label": t("siteAdmin.reorder.handle", { name: label(s), position: i + 1, count }), "aria-describedby": "site-reorder-help", "aria-pressed": drag?.mode === "keyboard" && dragging ? true : undefined, className: cn("forge-btn forge-btn-ghost shrink-0 cursor-grab touch-none p-1 active:cursor-grabbing", dragging && "text-primary"), onKeyDown: (e) => onHandleKey(e, originalIndex, s), onPointerDown: (e) => onPointerDown(e, originalIndex), onPointerMove: onPointerMove, onPointerUp: () => onPointerUp(s), onPointerCancel: () => setDrag(null), children: _jsx(GripVertical, { className: "size-4", "aria-hidden": true }) }), _jsxs("button", { type: "button", onClick: () => onSelect(s.id), "aria-current": selected === s.id ? "true" : undefined, className: "forge-focusable min-w-0 flex-1 rounded px-1 py-0.5 text-left", children: [_jsx("span", { className: "flex items-center gap-1.5", children: _jsx("span", { className: "truncate text-sm font-medium text-ink", children: label(s) }) }), _jsxs("span", { className: "block truncate text-xs text-ink-muted", children: [_jsx("span", { className: "text-ink-subtle", children: t(`siteAdmin.variant.${s.type}.${s.variant}`) }), summary ? ` · ${summary}` : ""] }), (s.hidden || s.conflict) && (_jsxs("span", { className: "mt-1 flex flex-wrap gap-1", children: [s.hidden && _jsx(Pill, { tone: "muted", children: t("siteAdmin.section.hidden") }), s.conflict && (_jsxs(Pill, { tone: "warning", title: t("siteAdmin.conflict.section"), children: [_jsx(TriangleAlert, { className: "size-3", "aria-hidden": true }), " ", t("siteAdmin.conflict.badge")] }))] }))] }), _jsxs("div", { className: "flex shrink-0 items-center opacity-100 sm:opacity-60 sm:group-focus-within:opacity-100 sm:group-hover:opacity-100", children: [_jsx("button", { type: "button", disabled: busy || originalIndex === 0, className: "forge-btn forge-btn-ghost p-1", "aria-label": t("siteAdmin.moveUpNamed", { name: label(s) }), title: t("siteAdmin.moveUp"), onClick: () => (commit(originalIndex, originalIndex - 1), announce(t("siteAdmin.reorder.dropped", { name: label(s), position: originalIndex, count }))), children: _jsx(ArrowUp, { className: "size-3.5", "aria-hidden": true }) }), _jsx("button", { type: "button", disabled: busy || originalIndex === count - 1, className: "forge-btn forge-btn-ghost p-1", "aria-label": t("siteAdmin.moveDownNamed", { name: label(s) }), title: t("siteAdmin.moveDown"), onClick: () => (commit(originalIndex, originalIndex + 1), announce(t("siteAdmin.reorder.dropped", { name: label(s), position: originalIndex + 2, count }))), children: _jsx(ArrowDown, { className: "size-3.5", "aria-hidden": true }) }), _jsx("button", { type: "button", disabled: busy, className: "forge-btn forge-btn-ghost p-1", "aria-label": s.hidden ? t("siteAdmin.showNamed", { name: label(s) }) : t("siteAdmin.hideNamed", { name: label(s) }), title: s.hidden ? t("siteAdmin.show") : t("siteAdmin.hide"), onClick: () => onToggleHidden(s), children: s.hidden ? _jsx(EyeOff, { className: "size-3.5", "aria-hidden": true }) : _jsx(Eye, { className: "size-3.5", "aria-hidden": true }) }), _jsx("button", { type: "button", disabled: busy, className: "forge-btn forge-btn-danger-ghost p-1", "aria-label": t("siteAdmin.removeNamed", { name: label(s) }), title: t("common.delete"), onClick: () => onDelete(s), children: _jsx(Trash2, { className: "size-3.5", "aria-hidden": true }) })] })] }, s.id));
|
|
108
|
+
}) })), removed.length > 0 && (_jsxs("details", { className: "mt-3 border-t border-line pt-2", children: [_jsx("summary", { className: "cursor-pointer px-1 text-xs font-medium text-ink-muted", children: t("siteAdmin.sections.removed", { count: removed.length }) }), _jsx("ul", { className: "mt-1 space-y-1", children: removed.map((s) => (_jsxs("li", { className: "flex items-center justify-between gap-2 px-1 py-1 text-sm", children: [_jsx("span", { className: "min-w-0 truncate text-ink-muted line-through", children: label(s) }), _jsxs("button", { type: "button", disabled: busy, className: "forge-btn forge-btn-ghost inline-flex h-7 shrink-0 items-center gap-1 px-2 text-xs", onClick: () => onRevert(s), children: [_jsx(RotateCcw, { className: "size-3.5", "aria-hidden": true }), " ", t("siteAdmin.section.restore")] })] }, s.id))) }), _jsx("p", { className: "mt-1 px-1 text-xs text-ink-subtle", children: t("siteAdmin.sections.removedHint") })] }))] }));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=section-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-list.js","sourceRoot":"","sources":["../../../src/site/editor/section-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function SectionPicker({ open, onClose, onPick, busy }: {
|
|
2
|
+
open: boolean;
|
|
3
|
+
onClose: () => void;
|
|
4
|
+
onPick: (type: string, variant: string) => void;
|
|
5
|
+
busy?: boolean;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
/** Variant chooser of the section being edited: one thumbnail per variant (radio group). */
|
|
8
|
+
export declare function VariantChooser({ type, value, onChange }: {
|
|
9
|
+
type: string;
|
|
10
|
+
value: string;
|
|
11
|
+
onChange: (variant: string) => void;
|
|
12
|
+
}): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/*
|
|
4
|
+
* "Add a section": every section type of the library grouped by category (marketing / content / data), each
|
|
5
|
+
* variant drawn as a small thumbnail of the real section. Also the variant chooser of a selected section.
|
|
6
|
+
*/
|
|
7
|
+
import { SECTION_SPECS } from "@tekki-forge/compiler/site";
|
|
8
|
+
import { Search } from "lucide-react";
|
|
9
|
+
import { useMemo, useState } from "react";
|
|
10
|
+
import { useForge } from "../../context.js";
|
|
11
|
+
import { cn, Input } from "../../ui.js";
|
|
12
|
+
import { dataEntities } from "./model.js";
|
|
13
|
+
import { SectionThumbnail } from "./preview.js";
|
|
14
|
+
import { EditorDialog, TabPanel, Tabs } from "./widgets.js";
|
|
15
|
+
const CATEGORIES = ["marketing", "content", "data"];
|
|
16
|
+
/** Why a type can't be added to this app (no public entity for data sections), else undefined. */
|
|
17
|
+
function useUnavailable() {
|
|
18
|
+
const { app, t } = useForge();
|
|
19
|
+
return useMemo(() => {
|
|
20
|
+
const anyPublic = dataEntities(app).some((e) => !e.problem);
|
|
21
|
+
return (type) => ((type === "entityList" || type === "entityGrid") && !anyPublic ? t("siteAdmin.picker.needsPublicEntity") : undefined);
|
|
22
|
+
}, [app, t]);
|
|
23
|
+
}
|
|
24
|
+
export function SectionPicker({ open, onClose, onPick, busy }) {
|
|
25
|
+
const { t } = useForge();
|
|
26
|
+
const [category, setCategory] = useState("marketing");
|
|
27
|
+
const [query, setQuery] = useState("");
|
|
28
|
+
const unavailable = useUnavailable();
|
|
29
|
+
const q = query.trim().toLowerCase();
|
|
30
|
+
const specs = SECTION_SPECS.filter((s) => q ? [s.type, s.label, s.description, t(`siteAdmin.section.${s.type}.label`), t(`siteAdmin.section.${s.type}.description`)].some((x) => x.toLowerCase().includes(q)) : s.category === category);
|
|
31
|
+
return (_jsxs(EditorDialog, { open: open, onClose: onClose, size: "xl", title: t("siteAdmin.picker.title"), description: t("siteAdmin.picker.description"), children: [_jsxs("div", { className: "mb-4 flex flex-wrap items-center justify-between gap-3", children: [_jsx(Tabs, { idPrefix: "site-picker", label: t("siteAdmin.picker.categories"), value: category, onChange: (c) => (setCategory(c), setQuery("")), tabs: CATEGORIES.map((c) => ({ key: c, label: t(`siteAdmin.category.${c}`) })) }), _jsxs("div", { className: "relative w-full sm:w-64", children: [_jsx(Search, { className: "pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-ink-subtle", "aria-hidden": true }), _jsx(Input, { "data-autofocus": true, type: "search", "aria-label": t("siteAdmin.picker.search"), placeholder: t("siteAdmin.picker.search"), value: query, onChange: (e) => setQuery(e.target.value), className: "pl-8" })] })] }), _jsxs(TabPanel, { idPrefix: "site-picker", tab: category, children: [!specs.length && _jsx("p", { className: "py-10 text-center text-sm text-ink-muted", children: t("siteAdmin.picker.noMatch") }), _jsx("div", { className: "space-y-6", children: specs.map((spec) => {
|
|
32
|
+
const reason = unavailable(spec.type);
|
|
33
|
+
return (_jsxs("section", { "aria-labelledby": `pick-${spec.type}`, children: [_jsxs("div", { className: "mb-2", children: [_jsx("h3", { id: `pick-${spec.type}`, className: "text-sm font-semibold text-ink", children: t(`siteAdmin.section.${spec.type}.label`) }), _jsx("p", { className: "text-xs text-ink-muted", children: reason ?? t(`siteAdmin.section.${spec.type}.description`) })] }), _jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: spec.variants.map((variant) => (_jsxs("div", { className: cn("forge-card forge-card-interactive group relative overflow-hidden has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-primary", (!!reason || busy) && "opacity-50"), children: [_jsx(SectionThumbnail, { type: spec.type, variant: variant }), _jsx("button", { type: "button", disabled: !!reason || busy, onClick: () => onPick(spec.type, variant), "aria-label": t("siteAdmin.picker.add", { name: t(`siteAdmin.section.${spec.type}.label`), variant: t(`siteAdmin.variant.${spec.type}.${variant}`) }), className: "block w-full border-t border-line px-3 py-2 text-left text-xs font-medium text-ink outline-none after:absolute after:inset-0 after:content-[''] disabled:cursor-not-allowed", children: t(`siteAdmin.variant.${spec.type}.${variant}`) })] }, variant))) })] }, spec.type));
|
|
34
|
+
}) })] })] }));
|
|
35
|
+
}
|
|
36
|
+
/** Variant chooser of the section being edited: one thumbnail per variant (radio group). */
|
|
37
|
+
export function VariantChooser({ type, value, onChange }) {
|
|
38
|
+
const { t } = useForge();
|
|
39
|
+
const spec = SECTION_SPECS.find((s) => s.type === type);
|
|
40
|
+
if (!spec || spec.variants.length < 2)
|
|
41
|
+
return null;
|
|
42
|
+
return (_jsxs("fieldset", { children: [_jsx("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: t("siteAdmin.form.variant") }), _jsx("div", { className: "grid grid-cols-2 gap-2", children: spec.variants.map((v) => (_jsxs("div", { className: cn("forge-card relative overflow-hidden has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-primary", value === v && "ring-2 ring-primary"), children: [_jsx(SectionThumbnail, { type: type, variant: v }), _jsxs("label", { className: "block cursor-pointer border-t border-line px-2 py-1.5 text-xs font-medium text-ink after:absolute after:inset-0 after:content-['']", children: [_jsx("input", { type: "radio", name: `variant-${type}`, value: v, checked: value === v, onChange: () => onChange(v), className: "sr-only" }), t(`siteAdmin.variant.${type}.${v}`)] })] }, v))) })] }));
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=section-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-picker.js","sourceRoot":"","sources":["../../../src/site/editor/section-picker.tsx"],"names":[],"mappings":"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"}
|