@contentrail/editor 0.2.0 → 0.2.1

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 (62) hide show
  1. package/README.md +14 -4
  2. package/dist/admin/collection-query.d.ts +23 -0
  3. package/dist/admin/collection-query.d.ts.map +1 -0
  4. package/dist/admin/collection-query.js +71 -0
  5. package/dist/admin/collection-query.js.map +1 -0
  6. package/dist/admin/mount.d.ts +17 -0
  7. package/dist/admin/mount.d.ts.map +1 -0
  8. package/dist/admin/mount.js +43 -0
  9. package/dist/admin/mount.js.map +1 -0
  10. package/dist/admin/paginate.d.ts +8 -0
  11. package/dist/admin/paginate.d.ts.map +1 -0
  12. package/dist/admin/paginate.js +12 -0
  13. package/dist/admin/paginate.js.map +1 -0
  14. package/dist/admin/vite-plugin.d.ts +30 -0
  15. package/dist/admin/vite-plugin.d.ts.map +1 -0
  16. package/dist/admin/vite-plugin.js +159 -0
  17. package/dist/admin/vite-plugin.js.map +1 -0
  18. package/dist/api/types.d.ts +2 -0
  19. package/dist/api/types.d.ts.map +1 -1
  20. package/dist/fields/defaults.d.ts.map +1 -1
  21. package/dist/fields/defaults.js +22 -2
  22. package/dist/fields/defaults.js.map +1 -1
  23. package/dist/fields/types.d.ts +24 -5
  24. package/dist/fields/types.d.ts.map +1 -1
  25. package/dist/fields/types.js +3 -2
  26. package/dist/fields/types.js.map +1 -1
  27. package/dist/form/FieldControl.js +54 -4
  28. package/dist/form/FieldControl.js.map +1 -1
  29. package/dist/import/coerce.d.ts +11 -0
  30. package/dist/import/coerce.d.ts.map +1 -0
  31. package/dist/import/coerce.js +71 -0
  32. package/dist/import/coerce.js.map +1 -0
  33. package/dist/import/prepare.d.ts +30 -0
  34. package/dist/import/prepare.d.ts.map +1 -0
  35. package/dist/import/prepare.js +106 -0
  36. package/dist/import/prepare.js.map +1 -0
  37. package/dist/import/tabular.d.ts +6 -0
  38. package/dist/import/tabular.d.ts.map +1 -1
  39. package/dist/import/tabular.js +34 -7
  40. package/dist/import/tabular.js.map +1 -1
  41. package/dist/index.d.ts +10 -2
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +9 -2
  44. package/dist/index.js.map +1 -1
  45. package/dist/schema/create-admin-config.d.ts +21 -0
  46. package/dist/schema/create-admin-config.d.ts.map +1 -0
  47. package/dist/schema/create-admin-config.js +50 -0
  48. package/dist/schema/create-admin-config.js.map +1 -0
  49. package/dist/schema/from-zod.d.ts +19 -0
  50. package/dist/schema/from-zod.d.ts.map +1 -0
  51. package/dist/schema/from-zod.js +194 -0
  52. package/dist/schema/from-zod.js.map +1 -0
  53. package/dist/styles.css +103 -7
  54. package/dist/ui/CollectionImportWizard.d.ts +16 -0
  55. package/dist/ui/CollectionImportWizard.d.ts.map +1 -0
  56. package/dist/ui/CollectionImportWizard.js +144 -0
  57. package/dist/ui/CollectionImportWizard.js.map +1 -0
  58. package/dist/ui/EditorApp.d.ts +3 -0
  59. package/dist/ui/EditorApp.d.ts.map +1 -1
  60. package/dist/ui/EditorApp.js +232 -35
  61. package/dist/ui/EditorApp.js.map +1 -1
  62. package/package.json +18 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-admin-config.js","sourceRoot":"","sources":["../../src/schema/create-admin-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type z } from "zod";
2
+ import type { ContentCollection } from "@contentrail/core";
3
+ import type { EditorFieldSpec, EditorWidget } from "../fields/types.js";
4
+ export interface FieldHint {
5
+ readonly label?: string;
6
+ readonly helpText?: string;
7
+ readonly widget?: EditorWidget;
8
+ readonly order?: number;
9
+ readonly readOnly?: boolean;
10
+ readonly placeholder?: string;
11
+ readonly collection?: string;
12
+ }
13
+ /**
14
+ * Derives editor fields from a Zod object schema using public `.shape` and
15
+ * `.def.type` (ADR 026). Unions, effects, and unknown types become unsupported.
16
+ */
17
+ export declare function fieldsFromZodSchema(schema: z.ZodType, hints?: Readonly<Record<string, FieldHint>>): EditorFieldSpec[];
18
+ export declare function fieldsFromCollection(collection: ContentCollection, hints?: Readonly<Record<string, FieldHint>>): EditorFieldSpec[];
19
+ //# sourceMappingURL=from-zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-zod.d.ts","sourceRoot":"","sources":["../../src/schema/from-zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmBxE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AA2LD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,CAAC,CAAC,OAAO,EACjB,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAC1C,eAAe,EAAE,CAgBnB;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,iBAAiB,EAC7B,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAC1C,eAAe,EAAE,CAEnB"}
@@ -0,0 +1,194 @@
1
+ import { ZodObject } from "zod";
2
+ const MAX_DEPTH = 6;
3
+ function humanize(name) {
4
+ const spaced = name
5
+ .replaceAll(/([a-z])([A-Z])/g, "$1 $2")
6
+ .replaceAll(/[_-]+/g, " ");
7
+ return spaced.charAt(0).toUpperCase() + spaced.slice(1);
8
+ }
9
+ function unwrap(schema) {
10
+ let node = schema;
11
+ let required = true;
12
+ for (let i = 0; i < 8; i += 1) {
13
+ const type = node.def.type;
14
+ if (type === "optional" || type === "nullable") {
15
+ required = false;
16
+ if (node.def.innerType === undefined) {
17
+ break;
18
+ }
19
+ node = node.def.innerType;
20
+ continue;
21
+ }
22
+ if (type === "default") {
23
+ if (node.def.innerType === undefined) {
24
+ break;
25
+ }
26
+ node = node.def.innerType;
27
+ continue;
28
+ }
29
+ break;
30
+ }
31
+ return { node, required };
32
+ }
33
+ function stringFormat(node) {
34
+ if (typeof node.def.format === "string") {
35
+ return node.def.format;
36
+ }
37
+ for (const check of node.def.checks ?? []) {
38
+ if (typeof check.def?.format === "string") {
39
+ return check.def.format;
40
+ }
41
+ }
42
+ return undefined;
43
+ }
44
+ function mapNode(name, schema, depth, hints) {
45
+ const hint = hints?.[name];
46
+ const { node, required } = unwrap(schema);
47
+ const base = {
48
+ name,
49
+ label: hint?.label ?? humanize(name),
50
+ required,
51
+ ...(hint?.helpText !== undefined ? { helpText: hint.helpText } : {}),
52
+ ...(hint?.order !== undefined ? { order: hint.order } : {}),
53
+ ...(hint?.readOnly !== undefined ? { readOnly: hint.readOnly } : {}),
54
+ };
55
+ if (hint?.widget === "unsupported") {
56
+ return {
57
+ ...base,
58
+ widget: "unsupported",
59
+ reason: hint.helpText ?? "Marked unsupported in editor metadata.",
60
+ };
61
+ }
62
+ if (hint?.widget === "relation") {
63
+ return {
64
+ ...base,
65
+ widget: "relation",
66
+ collection: hint.collection ?? "entries",
67
+ };
68
+ }
69
+ if (hint?.widget === "media") {
70
+ return {
71
+ ...base,
72
+ widget: "media",
73
+ ...(hint.placeholder !== undefined
74
+ ? { placeholder: hint.placeholder }
75
+ : {}),
76
+ };
77
+ }
78
+ if (hint?.widget === "textarea" || hint?.widget === "text") {
79
+ return {
80
+ ...base,
81
+ widget: hint.widget,
82
+ ...(hint.placeholder !== undefined
83
+ ? { placeholder: hint.placeholder }
84
+ : {}),
85
+ };
86
+ }
87
+ if (depth > MAX_DEPTH) {
88
+ return {
89
+ ...base,
90
+ widget: "unsupported",
91
+ reason: `Nested deeper than ${MAX_DEPTH} levels.`,
92
+ };
93
+ }
94
+ const type = node.def.type;
95
+ if (type === "email") {
96
+ return { ...base, widget: "email" };
97
+ }
98
+ if (type === "url") {
99
+ return { ...base, widget: "url" };
100
+ }
101
+ if (type === "date") {
102
+ return { ...base, widget: "date" };
103
+ }
104
+ if (type === "datetime" || type === "iso_datetime") {
105
+ return { ...base, widget: "datetime" };
106
+ }
107
+ if (type === "string") {
108
+ const format = stringFormat(node);
109
+ if (format === "email") {
110
+ return { ...base, widget: "email" };
111
+ }
112
+ if (format === "url" || format === "uri") {
113
+ return { ...base, widget: "url" };
114
+ }
115
+ if (format === "date") {
116
+ return { ...base, widget: "date" };
117
+ }
118
+ if (format === "datetime") {
119
+ return { ...base, widget: "datetime" };
120
+ }
121
+ return { ...base, widget: "text" };
122
+ }
123
+ if (type === "number" || type === "int") {
124
+ return { ...base, widget: "number" };
125
+ }
126
+ if (type === "boolean") {
127
+ return { ...base, widget: "boolean" };
128
+ }
129
+ if (type === "enum") {
130
+ const entries = node.def.entries ?? {};
131
+ return {
132
+ ...base,
133
+ widget: hint?.widget === "multiselect" ? "multiselect" : "enum",
134
+ options: Object.keys(entries).map((value) => ({
135
+ value,
136
+ label: humanize(value),
137
+ })),
138
+ };
139
+ }
140
+ if (type === "array") {
141
+ const element = node.def.element;
142
+ if (element === undefined) {
143
+ return {
144
+ ...base,
145
+ widget: "unsupported",
146
+ reason: "Array element type is missing.",
147
+ };
148
+ }
149
+ const unwrapped = unwrap(element).node;
150
+ if (unwrapped.def.type === "string" && hint?.widget !== "array") {
151
+ return { ...base, widget: "tags" };
152
+ }
153
+ return {
154
+ ...base,
155
+ widget: "array",
156
+ item: mapNode("item", element, depth + 1, undefined),
157
+ };
158
+ }
159
+ if (type === "object") {
160
+ const shape = node.shape ?? node.def.shape ?? {};
161
+ return {
162
+ ...base,
163
+ widget: "object",
164
+ fields: Object.entries(shape).map(([key, child]) => mapNode(key, child, depth + 1, undefined)),
165
+ };
166
+ }
167
+ return {
168
+ ...base,
169
+ widget: "unsupported",
170
+ reason: `Zod type "${type}" has no editor widget. Add explicit field metadata or simplify the schema.`,
171
+ };
172
+ }
173
+ /**
174
+ * Derives editor fields from a Zod object schema using public `.shape` and
175
+ * `.def.type` (ADR 026). Unions, effects, and unknown types become unsupported.
176
+ */
177
+ export function fieldsFromZodSchema(schema, hints) {
178
+ if (!(schema instanceof ZodObject)) {
179
+ return [
180
+ {
181
+ name: "value",
182
+ label: "Value",
183
+ widget: "unsupported",
184
+ reason: "Root schema is not a Zod object. Supply explicit editor fields or use z.object({...}).",
185
+ },
186
+ ];
187
+ }
188
+ const shape = schema.shape;
189
+ return Object.entries(shape).map(([name, child]) => mapNode(name, child, 0, hints));
190
+ }
191
+ export function fieldsFromCollection(collection, hints) {
192
+ return fieldsFromZodSchema(collection.schema, hints);
193
+ }
194
+ //# sourceMappingURL=from-zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-zod.js","sourceRoot":"","sources":["../../src/schema/from-zod.ts"],"names":[],"mappings":"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"}
package/dist/styles.css CHANGED
@@ -19,18 +19,83 @@
19
19
 
20
20
  .cr-editor {
21
21
  color: var(--cr-ink);
22
- background:
23
- radial-gradient(
24
- circle at top left,
25
- rgba(15, 107, 92, 0.12),
26
- transparent 40%
27
- ),
28
- linear-gradient(180deg, #efe8da 0%, var(--cr-bg) 45%, #e7efe9 100%);
22
+ background: #f4f5f7;
29
23
  min-height: 100vh;
30
24
  font-family: var(--cr-sans);
31
25
  line-height: 1.5;
32
26
  }
33
27
 
28
+ .cr-shell {
29
+ display: grid;
30
+ grid-template-columns: minmax(12rem, 16rem) minmax(0, 1fr);
31
+ align-items: start;
32
+ gap: 0;
33
+ }
34
+
35
+ .cr-shell-main {
36
+ min-width: 0;
37
+ }
38
+
39
+ .cr-sidebar {
40
+ background: var(--cr-surface);
41
+ border-right: 1px solid var(--cr-line);
42
+ min-height: calc(100vh - 5rem);
43
+ padding: 1.25rem 1rem;
44
+ }
45
+
46
+ .cr-sidebar-label {
47
+ margin: 0 0 0.75rem;
48
+ font-size: 0.75rem;
49
+ letter-spacing: 0.06em;
50
+ text-transform: uppercase;
51
+ color: var(--cr-muted);
52
+ font-weight: 700;
53
+ }
54
+
55
+ .cr-sidebar-list {
56
+ list-style: none;
57
+ margin: 0;
58
+ padding: 0;
59
+ display: grid;
60
+ gap: 0.25rem;
61
+ }
62
+
63
+ .cr-sidebar-link {
64
+ width: 100%;
65
+ text-align: left;
66
+ border: 0;
67
+ background: transparent;
68
+ border-radius: 8px;
69
+ padding: 0.55rem 0.7rem;
70
+ color: var(--cr-ink);
71
+ }
72
+
73
+ .cr-sidebar-link--active,
74
+ .cr-sidebar-link:hover {
75
+ background: #eef3f1;
76
+ color: var(--cr-accent);
77
+ }
78
+
79
+ .cr-pagination {
80
+ display: flex;
81
+ flex-wrap: wrap;
82
+ gap: 0.75rem;
83
+ align-items: center;
84
+ margin-top: 1rem;
85
+ }
86
+
87
+ .cr-button--danger {
88
+ background: var(--cr-danger);
89
+ }
90
+
91
+ .cr-confirm {
92
+ margin: 1rem 0;
93
+ padding: 1rem;
94
+ border: 1px solid #e4b4b4;
95
+ border-radius: 12px;
96
+ background: #fff8f8;
97
+ }
98
+
34
99
  .cr-header,
35
100
  .cr-nav,
36
101
  .cr-main,
@@ -306,7 +371,38 @@
306
371
  border: 0;
307
372
  }
308
373
 
374
+ .cr-entry-row {
375
+ display: grid;
376
+ grid-template-columns: auto minmax(0, 1fr);
377
+ gap: 0.75rem;
378
+ align-items: center;
379
+ }
380
+
381
+ .cr-table {
382
+ width: 100%;
383
+ border-collapse: collapse;
384
+ font-size: 0.92rem;
385
+ }
386
+
387
+ .cr-table th,
388
+ .cr-table td {
389
+ text-align: left;
390
+ padding: 0.45rem 0.5rem;
391
+ border-bottom: 1px solid var(--cr-line);
392
+ vertical-align: top;
393
+ }
394
+
309
395
  @media (max-width: 720px) {
396
+ .cr-shell {
397
+ grid-template-columns: 1fr;
398
+ }
399
+
400
+ .cr-sidebar {
401
+ min-height: 0;
402
+ border-right: 0;
403
+ border-bottom: 1px solid var(--cr-line);
404
+ }
405
+
310
406
  .cr-toolbar,
311
407
  .cr-actions {
312
408
  align-items: stretch;
@@ -0,0 +1,16 @@
1
+ import type { ContentRailApiClient } from "../api/client.js";
2
+ import type { EditorCollectionConfig } from "../fields/types.js";
3
+ export interface CollectionImportWizardProps {
4
+ readonly api: ContentRailApiClient;
5
+ readonly siteId: string;
6
+ readonly collection: EditorCollectionConfig;
7
+ readonly existing: ReadonlyArray<{
8
+ id: string;
9
+ data: Record<string, unknown>;
10
+ }>;
11
+ readonly expectedVersion: string | null;
12
+ readonly onCancel: () => void;
13
+ readonly onImported: () => void;
14
+ }
15
+ export declare function CollectionImportWizard(props: CollectionImportWizardProps): import("preact").JSX.Element;
16
+ //# sourceMappingURL=CollectionImportWizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionImportWizard.d.ts","sourceRoot":"","sources":["../../src/ui/CollectionImportWizard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAUjE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,CAAC,CAAC;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,gCA2WxE"}
@@ -0,0 +1,144 @@
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "preact/jsx-runtime";
2
+ import { useMemo, useState } from "preact/hooks";
3
+ import { paginateItems } from "../admin/paginate.js";
4
+ import { mergePreparedImport, prepareImport, suggestColumnMap, } from "../import/prepare.js";
5
+ import { listSpreadsheetSheets, parseTabularFile } from "../import/tabular.js";
6
+ export function CollectionImportWizard(props) {
7
+ const [step, setStep] = useState("upload");
8
+ const [message, setMessage] = useState(null);
9
+ const [busy, setBusy] = useState(false);
10
+ const [file, setFile] = useState(null);
11
+ const [sheets, setSheets] = useState([]);
12
+ const [sheet, setSheet] = useState("");
13
+ const [headers, setHeaders] = useState([]);
14
+ const [rows, setRows] = useState([]);
15
+ const [columnMap, setColumnMap] = useState({});
16
+ const [mode, setMode] = useState("upsert");
17
+ const [included, setIncluded] = useState(new Set());
18
+ const [page, setPage] = useState(0);
19
+ const [prepared, setPrepared] = useState([]);
20
+ const importableFields = useMemo(() => props.collection.fields.filter((field) => field.widget !== "unsupported" &&
21
+ field.widget !== "object" &&
22
+ field.widget !== "array"), [props.collection.fields]);
23
+ async function onFile(next) {
24
+ setMessage(null);
25
+ setFile(next);
26
+ setRows([]);
27
+ if (next === null) {
28
+ return;
29
+ }
30
+ const listed = await listSpreadsheetSheets(next);
31
+ if (!listed.ok) {
32
+ setMessage(listed.message);
33
+ return;
34
+ }
35
+ setSheets(listed.sheets);
36
+ setSheet(listed.sheets[0] ?? "");
37
+ setStep(listed.sheets.length > 1 ? "sheet" : "map");
38
+ await loadSheet(next, listed.sheets[0]);
39
+ }
40
+ async function loadSheet(target, sheetName) {
41
+ const parsed = await parseTabularFile(target, {
42
+ maxBytes: 2_000_000,
43
+ maxRows: 10_000,
44
+ ...(sheetName !== undefined && sheetName !== "CSV"
45
+ ? { sheet: sheetName }
46
+ : {}),
47
+ });
48
+ if (!parsed.ok) {
49
+ setMessage(parsed.message);
50
+ return;
51
+ }
52
+ setHeaders(parsed.headers);
53
+ setRows(parsed.rows);
54
+ setColumnMap(suggestColumnMap(parsed.headers, importableFields, "id"));
55
+ setStep("map");
56
+ }
57
+ function runPrepare() {
58
+ const next = prepareImport({
59
+ rows,
60
+ columnMap,
61
+ fields: importableFields,
62
+ existingIds: new Set(props.existing.map((entry) => entry.id)),
63
+ mode,
64
+ });
65
+ setPrepared(next);
66
+ setIncluded(new Set(next
67
+ .filter((row) => row.action !== "skip" && row.issues.length === 0)
68
+ .map((row) => row.rowIndex)));
69
+ setPage(0);
70
+ setStep("preview");
71
+ }
72
+ const previewPage = paginateItems(prepared, page, 25);
73
+ const selectedValid = prepared.filter((row) => included.has(row.rowIndex) &&
74
+ row.issues.length === 0 &&
75
+ row.action !== "skip");
76
+ async function confirmImport() {
77
+ if (selectedValid.length === 0) {
78
+ setMessage("Select at least one valid row. Existing content was not changed.");
79
+ return;
80
+ }
81
+ setBusy(true);
82
+ try {
83
+ const merged = mergePreparedImport(props.existing, prepared, included);
84
+ const result = await props.api.publish(props.siteId, props.collection.name, {
85
+ expectedVersion: props.expectedVersion,
86
+ entries: merged,
87
+ idempotencyKey: `import:${props.siteId}:${props.collection.name}:${selectedValid
88
+ .map((row) => row.id)
89
+ .sort()
90
+ .join(",")}:${props.expectedVersion ?? "none"}`,
91
+ message: `Import ${selectedValid.length} row(s) into ${props.collection.name}`,
92
+ });
93
+ if (!result.ok) {
94
+ setMessage(result.code === "CONFLICT"
95
+ ? `${result.message} Existing content was not overwritten.`
96
+ : result.message);
97
+ return;
98
+ }
99
+ props.onImported();
100
+ }
101
+ finally {
102
+ setBusy(false);
103
+ }
104
+ }
105
+ return (_jsxs("section", { class: "cr-import", children: [_jsxs("div", { class: "cr-toolbar", children: [_jsxs("h2", { children: ["Import ", props.collection.label] }), _jsx("button", { type: "button", class: "cr-button cr-button--ghost", onClick: props.onCancel, children: "Cancel" })] }), _jsx("p", { class: "cr-help", children: "Spreadsheets stay in this browser. Only validated JSON is published. Existing entries are not replaced until you confirm." }), message ? (_jsx("p", { class: "cr-banner cr-banner--error", role: "alert", children: message })) : null, step === "upload" || step === "sheet" || step === "map" ? (_jsxs("label", { class: "cr-field", children: [_jsx("span", { class: "cr-label", children: "Excel or CSV file" }), _jsx("input", { class: "cr-input", type: "file", accept: ".csv,.xlsx,text/csv,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", onChange: (event) => {
106
+ const input = event.currentTarget;
107
+ void onFile(input.files?.[0] ?? null);
108
+ } })] })) : null, sheets.length > 1 ? (_jsxs("label", { class: "cr-field", children: [_jsx("span", { class: "cr-label", children: "Worksheet" }), _jsx("select", { class: "cr-input", value: sheet, onChange: (event) => {
109
+ const value = event.currentTarget.value;
110
+ setSheet(value);
111
+ if (file !== null) {
112
+ void loadSheet(file, value);
113
+ }
114
+ }, children: sheets.map((name) => (_jsx("option", { value: name, children: name }, name))) })] })) : null, headers.length > 0 ? (_jsxs("fieldset", { class: "cr-fieldset", children: [_jsx("legend", { children: "Column mapping" }), headers.map((header) => (_jsxs("label", { class: "cr-field", children: [_jsx("span", { class: "cr-label", children: header }), _jsxs("select", { class: "cr-input", value: columnMap[header] ?? "", onChange: (event) => {
115
+ const value = event.currentTarget
116
+ .value;
117
+ setColumnMap((current) => {
118
+ const next = { ...current };
119
+ if (value === "") {
120
+ delete next[header];
121
+ }
122
+ else {
123
+ next[header] = value;
124
+ }
125
+ return next;
126
+ });
127
+ }, children: [_jsx("option", { value: "", children: "Ignore" }), _jsx("option", { value: "id", children: "Entry id" }), importableFields.map((field) => (_jsx("option", { value: field.name, children: field.label }, field.name)))] })] }, header))), _jsxs("label", { class: "cr-field", children: [_jsx("span", { class: "cr-label", children: "When an id already exists" }), _jsxs("select", { class: "cr-input", value: mode, onChange: (event) => setMode(event.currentTarget
128
+ .value), children: [_jsx("option", { value: "upsert", children: "Create or update (confirm first)" }), _jsx("option", { value: "create", children: "Create only \u2014 skip existing" }), _jsx("option", { value: "update", children: "Update only \u2014 skip new ids" })] })] }), _jsx("button", { type: "button", class: "cr-button", onClick: runPrepare, children: "Preview mapped records" })] })) : null, step === "preview" || step === "confirm" ? (_jsxs(_Fragment, { children: [_jsxs("p", { class: "cr-help", children: [selectedValid.length, " row(s) selected to publish of", " ", prepared.length, " parsed. Invalid rows cannot be included."] }), _jsxs("table", { class: "cr-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: "Include" }), _jsx("th", { scope: "col", children: "Row" }), _jsx("th", { scope: "col", children: "Id" }), _jsx("th", { scope: "col", children: "Action" }), _jsx("th", { scope: "col", children: "Status" })] }) }), _jsx("tbody", { children: previewPage.items.map((row) => (_jsxs("tr", { children: [_jsx("td", { children: _jsx("input", { type: "checkbox", disabled: row.issues.length > 0 || row.action === "skip", checked: included.has(row.rowIndex), onChange: (event) => {
129
+ const checked = event.currentTarget.checked;
130
+ setIncluded((current) => {
131
+ const next = new Set(current);
132
+ if (checked) {
133
+ next.add(row.rowIndex);
134
+ }
135
+ else {
136
+ next.delete(row.rowIndex);
137
+ }
138
+ return next;
139
+ });
140
+ } }) }), _jsx("td", { children: row.rowIndex }), _jsx("td", { children: row.id || "—" }), _jsx("td", { children: row.action }), _jsx("td", { children: row.issues.length > 0
141
+ ? row.issues.join(" ")
142
+ : row.warnings.join(" ") || "Ready" })] }, row.rowIndex))) })] }), previewPage.pageCount > 1 ? (_jsxs("nav", { class: "cr-pagination", "aria-label": "Import preview pages", children: [_jsx("button", { type: "button", class: "cr-button cr-button--ghost", disabled: previewPage.page === 0, onClick: () => setPage((current) => Math.max(0, current - 1)), children: "Previous" }), _jsxs("p", { class: "cr-help", children: ["Page ", previewPage.page + 1, " of ", previewPage.pageCount] }), _jsx("button", { type: "button", class: "cr-button cr-button--ghost", disabled: previewPage.page >= previewPage.pageCount - 1, onClick: () => setPage((current) => Math.min(previewPage.pageCount - 1, current + 1)), children: "Next" })] })) : null, step === "preview" ? (_jsx("button", { type: "button", class: "cr-button", disabled: selectedValid.length === 0, onClick: () => setStep("confirm"), children: "Review final import" })) : (_jsxs("div", { class: "cr-confirm", role: "alertdialog", children: [_jsxs("h3", { children: ["Publish ", selectedValid.length, " row(s)?"] }), _jsx("p", { children: "This replaces the published collection snapshot using optimistic concurrency. Spreadsheet formulas and macros are not executed." }), _jsxs("div", { class: "cr-actions", children: [_jsx("button", { type: "button", class: "cr-button cr-button--ghost", onClick: () => setStep("preview"), children: "Back" }), _jsx("button", { type: "button", class: "cr-button", disabled: busy, onClick: () => void confirmImport(), children: "Confirm import" })] })] }))] })) : null] }));
143
+ }
144
+ //# sourceMappingURL=CollectionImportWizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionImportWizard.js","sourceRoot":"","sources":["../../src/ui/CollectionImportWizard.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  import type { ContentRailApiClient } from "../api/client.js";
2
2
  import type { EditorSiteConfig } from "../fields/types.js";
3
+ export declare const DEFAULT_ADMIN_PAGE_SIZE = 25;
3
4
  export interface EditorAppProps {
4
5
  readonly api: ContentRailApiClient;
5
6
  /** Developer-supplied editor metadata for sites/collections/fields. */
6
7
  readonly sites: readonly EditorSiteConfig[];
7
8
  readonly title?: string;
9
+ /** Collection list page size. Default 25; never render an unbounded table. */
10
+ readonly pageSize?: number;
8
11
  }
9
12
  export declare function EditorApp(props: EditorAppProps): import("preact").JSX.Element;
10
13
  //# sourceMappingURL=EditorApp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorApp.d.ts","sourceRoot":"","sources":["../../src/ui/EditorApp.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAM7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAQ3D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AA0BD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,gCAspB9C"}
1
+ {"version":3,"file":"EditorApp.d.ts","sourceRoot":"","sources":["../../src/ui/EditorApp.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAM7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAiB3D,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAsBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,gCAslC9C"}