@cardinali-studio/adminkit 1.0.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/api.d.ts +195 -0
- package/dist/api.js +118 -0
- package/dist/app/App.d.ts +3 -0
- package/dist/app/App.js +320 -0
- package/dist/app/app.css +2068 -0
- package/dist/app/index.d.ts +18 -0
- package/dist/app/index.js +33 -0
- package/dist/app/lib/bookings.d.ts +132 -0
- package/dist/app/lib/bookings.js +79 -0
- package/dist/app/lib/deliveries.d.ts +95 -0
- package/dist/app/lib/deliveries.js +104 -0
- package/dist/app/lib/delivery-drop.d.ts +1 -0
- package/dist/app/lib/delivery-drop.js +72 -0
- package/dist/app/lib/delivery-upload.d.ts +78 -0
- package/dist/app/lib/delivery-upload.js +585 -0
- package/dist/app/lib/groups.d.ts +9 -0
- package/dist/app/lib/groups.js +32 -0
- package/dist/app/lib/home.d.ts +11 -0
- package/dist/app/lib/home.js +67 -0
- package/dist/app/lib/overview.d.ts +82 -0
- package/dist/app/lib/overview.js +68 -0
- package/dist/app/lib/pages.d.ts +24 -0
- package/dist/app/lib/pages.js +156 -0
- package/dist/app/lib/publish.d.ts +18 -0
- package/dist/app/lib/publish.js +63 -0
- package/dist/app/lib/reorder.d.ts +3 -0
- package/dist/app/lib/reorder.js +31 -0
- package/dist/app/lib/requests.d.ts +10 -0
- package/dist/app/lib/requests.js +67 -0
- package/dist/app/lib/router.d.ts +1 -0
- package/dist/app/lib/router.js +14 -0
- package/dist/app/lib/settings.d.ts +29 -0
- package/dist/app/lib/settings.js +82 -0
- package/dist/app/lib/slug.d.ts +3 -0
- package/dist/app/lib/slug.js +23 -0
- package/dist/app/lib/text.d.ts +1 -0
- package/dist/app/lib/text.js +13 -0
- package/dist/app/lib/theme.d.ts +7 -0
- package/dist/app/lib/theme.js +43 -0
- package/dist/app/lib/upload-queue.d.ts +35 -0
- package/dist/app/lib/upload-queue.js +167 -0
- package/dist/app/routes/AboutEditor.d.ts +15 -0
- package/dist/app/routes/AboutEditor.js +122 -0
- package/dist/app/routes/Bookings.d.ts +21 -0
- package/dist/app/routes/Bookings.js +134 -0
- package/dist/app/routes/Deliveries.d.ts +37 -0
- package/dist/app/routes/Deliveries.js +563 -0
- package/dist/app/routes/GallerySectionsEditor.d.ts +12 -0
- package/dist/app/routes/GallerySectionsEditor.js +107 -0
- package/dist/app/routes/HomeEditor.d.ts +10 -0
- package/dist/app/routes/HomeEditor.js +188 -0
- package/dist/app/routes/Overview.d.ts +17 -0
- package/dist/app/routes/Overview.js +318 -0
- package/dist/app/routes/PageActions.d.ts +12 -0
- package/dist/app/routes/PageActions.js +93 -0
- package/dist/app/routes/PageEditor.d.ts +23 -0
- package/dist/app/routes/PageEditor.js +233 -0
- package/dist/app/routes/PageSeoEditor.d.ts +13 -0
- package/dist/app/routes/PageSeoEditor.js +102 -0
- package/dist/app/routes/PagesList.d.ts +10 -0
- package/dist/app/routes/PagesList.js +76 -0
- package/dist/app/routes/PortfolioWorksEditor.d.ts +12 -0
- package/dist/app/routes/PortfolioWorksEditor.js +139 -0
- package/dist/app/routes/Requests.d.ts +13 -0
- package/dist/app/routes/Requests.js +30 -0
- package/dist/app/routes/SiteSettingsEditor.d.ts +21 -0
- package/dist/app/routes/SiteSettingsEditor.js +66 -0
- package/dist/app/routes/UploadDock.d.ts +1 -0
- package/dist/app/routes/UploadDock.js +66 -0
- package/dist/app/routes/WorkshopEditionsEditor.d.ts +12 -0
- package/dist/app/routes/WorkshopEditionsEditor.js +101 -0
- package/dist/app/site.d.ts +37 -0
- package/dist/app/site.js +18 -0
- package/dist/app/ui/MediaSlot.d.ts +10 -0
- package/dist/app/ui/MediaSlot.js +20 -0
- package/dist/app/ui/OpenCard.d.ts +18 -0
- package/dist/app/ui/OpenCard.js +20 -0
- package/dist/app/ui/ParagraphEditor.d.ts +8 -0
- package/dist/app/ui/ParagraphEditor.js +37 -0
- package/dist/app/ui/dnd.d.ts +1 -0
- package/dist/app/ui/dnd.js +11 -0
- package/dist/app/ui/icons.d.ts +26 -0
- package/dist/app/ui/icons.js +45 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +26 -0
- package/dist/form/MediaBrowser.d.ts +13 -0
- package/dist/form/MediaBrowser.js +24 -0
- package/dist/form/MediaPicker.d.ts +10 -0
- package/dist/form/MediaPicker.js +20 -0
- package/dist/form/SchemaForm.d.ts +21 -0
- package/dist/form/SchemaForm.js +67 -0
- package/dist/form/Trash.d.ts +1 -0
- package/dist/form/Trash.js +42 -0
- package/dist/form/fields/index.d.ts +1 -0
- package/dist/form/fields/index.js +110 -0
- package/dist/form/fields/objectList.d.ts +1 -0
- package/dist/form/fields/objectList.js +99 -0
- package/dist/form/index.d.ts +8 -0
- package/dist/form/index.js +8 -0
- package/dist/form/media/Lightbox.d.ts +4 -0
- package/dist/form/media/Lightbox.js +70 -0
- package/dist/form/media/MediaFolders.d.ts +20 -0
- package/dist/form/media/MediaFolders.js +116 -0
- package/dist/form/media/MediaGrid.d.ts +8 -0
- package/dist/form/media/MediaGrid.js +139 -0
- package/dist/form/media/UploadDialog.d.ts +4 -0
- package/dist/form/media/UploadDialog.js +37 -0
- package/dist/form/media/useMediaLibrary.d.ts +55 -0
- package/dist/form/media/useMediaLibrary.js +495 -0
- package/dist/form/prose/ProseBar.d.ts +21 -0
- package/dist/form/prose/ProseBar.js +111 -0
- package/dist/form/prose/ProseField.d.ts +11 -0
- package/dist/form/prose/ProseField.js +152 -0
- package/dist/form/prose/pages.d.ts +6 -0
- package/dist/form/prose/pages.js +13 -0
- package/dist/form/registry.d.ts +20 -0
- package/dist/form/registry.js +15 -0
- package/dist/frontmatter.d.ts +20 -0
- package/dist/frontmatter.js +202 -0
- package/dist/functions/_middleware.js +101 -0
- package/dist/functions/_shared/analytics-ga4.js +248 -0
- package/dist/functions/_shared/analytics-umami.js +119 -0
- package/dist/functions/_shared/assets.js +90 -0
- package/dist/functions/_shared/b2.js +300 -0
- package/dist/functions/_shared/delivery-crypto.js +99 -0
- package/dist/functions/_shared/delivery-purge.js +222 -0
- package/dist/functions/_shared/edge-cache.js +37 -0
- package/dist/functions/_shared/exif.js +53 -0
- package/dist/functions/_shared/github.js +138 -0
- package/dist/functions/_shared/imagesize.js +101 -0
- package/dist/functions/_shared/media-content.js +200 -0
- package/dist/functions/_shared/pending-media.js +98 -0
- package/dist/functions/_shared/refs.js +155 -0
- package/dist/functions/api/analytics.js +106 -0
- package/dist/functions/api/assets/delete.js +241 -0
- package/dist/functions/api/assets/folder.js +43 -0
- package/dist/functions/api/assets/folders.js +32 -0
- package/dist/functions/api/assets/move.js +253 -0
- package/dist/functions/api/assets/preview.js +17 -0
- package/dist/functions/api/assets/trash/delete.js +13 -0
- package/dist/functions/api/assets/trash/empty.js +16 -0
- package/dist/functions/api/assets/trash/restore.js +43 -0
- package/dist/functions/api/assets/trash.js +28 -0
- package/dist/functions/api/assets/upload.js +54 -0
- package/dist/functions/api/assets/usage.js +41 -0
- package/dist/functions/api/assets.js +94 -0
- package/dist/functions/api/deliveries.js +629 -0
- package/dist/functions/api/delivery/hero.js +21 -0
- package/dist/functions/api/delivery/image.js +35 -0
- package/dist/functions/api/delivery/multipart.js +261 -0
- package/dist/functions/api/pages/get.js +26 -0
- package/dist/functions/api/pages.js +354 -0
- package/dist/functions/api/publish.js +134 -0
- package/dist/functions/api/requests.js +57 -0
- package/dist/functions/api/settings.js +236 -0
- package/dist/functions/api/singleton.js +105 -0
- package/dist/functions/api/storage.js +125 -0
- package/dist/functions/index.js +124 -0
- package/dist/functions/site.js +38 -0
- package/dist/gallery.d.ts +28 -0
- package/dist/gallery.js +18 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/model.d.ts +2 -0
- package/dist/model.js +47 -0
- package/dist/normalize.d.ts +50 -0
- package/dist/normalize.js +120 -0
- package/dist/preview.d.ts +3 -0
- package/dist/preview.js +82 -0
- package/dist/prose.d.ts +17 -0
- package/dist/prose.js +205 -0
- package/dist/registries.d.ts +43 -0
- package/dist/registries.js +29 -0
- package/dist/serialize.d.ts +26 -0
- package/dist/serialize.js +136 -0
- package/dist/testing.d.ts +26 -0
- package/dist/testing.js +66 -0
- package/dist/theme.css +636 -0
- package/dist/yaml.d.ts +8 -0
- package/dist/yaml.js +90 -0
- package/package.json +97 -0
package/dist/yaml.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/* Emissione di valori YAML su una riga.
|
|
2
|
+
*
|
|
3
|
+
* Quello che c'era prima faceva escape del solo `"`. Bastava un titolo con un backslash, un a
|
|
4
|
+
* capo o un carattere di controllo per produrre un file che Hugo non legge più — cioè una
|
|
5
|
+
* pagina rotta a causa di quello che qualcuno ha scritto in un campo di testo.
|
|
6
|
+
*
|
|
7
|
+
* Qui la regola è: o so rappresentarlo con certezza, o LANCIO. Un emettitore che si ferma
|
|
8
|
+
* produce un errore visibile e un salvataggio rifiutato; uno che tira a indovinare produce un
|
|
9
|
+
* file corrotto che si scopre giorni dopo. Fra le due, la prima è sempre preferibile — è la
|
|
10
|
+
* stessa ragione per cui il middleware di Access fallisce chiuso.
|
|
11
|
+
*/
|
|
12
|
+
export class YamlEmitError extends Error {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "YamlEmitError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** Stringa YAML fra doppi apici, sicura su una riga sola. */
|
|
19
|
+
export function yamlStr(value) {
|
|
20
|
+
const s = String(value ?? "");
|
|
21
|
+
// I caratteri di controllo si potrebbero rappresentare con \u…, ma in un titolo o in un
|
|
22
|
+
// percorso non hanno alcun motivo di esistere: quasi sempre sono un copia-incolla andato
|
|
23
|
+
// storto, e passarli oltre in silenzio è peggio che fermarsi.
|
|
24
|
+
const bad = s.match(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/);
|
|
25
|
+
if (bad) {
|
|
26
|
+
throw new YamlEmitError(`Carattere di controllo non rappresentabile (U+${bad[0].charCodeAt(0).toString(16).padStart(4, "0")}) nel valore: ${JSON.stringify(s.slice(0, 60))}`);
|
|
27
|
+
}
|
|
28
|
+
if (/[\r\n]/.test(s)) {
|
|
29
|
+
throw new YamlEmitError(`Valore su più righe non ammesso qui: ${JSON.stringify(s.slice(0, 60))}`);
|
|
30
|
+
}
|
|
31
|
+
return `"${s.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
|
|
32
|
+
}
|
|
33
|
+
/** Scalare non quotato dove è sicuro (numeri, booleani), quotato altrimenti. */
|
|
34
|
+
export function yamlScalar(value) {
|
|
35
|
+
if (typeof value === "boolean")
|
|
36
|
+
return value ? "true" : "false";
|
|
37
|
+
if (typeof value === "number") {
|
|
38
|
+
if (!Number.isFinite(value))
|
|
39
|
+
throw new YamlEmitError(`Numero non rappresentabile: ${value}`);
|
|
40
|
+
return String(value);
|
|
41
|
+
}
|
|
42
|
+
return yamlStr(value);
|
|
43
|
+
}
|
|
44
|
+
/* Valore annidato su più righe, per il singleton della home (sezioni, liste di oggetti).
|
|
45
|
+
* Volutamente limitato: stringhe, numeri, booleani, array e oggetti piani. Su tutto il resto
|
|
46
|
+
* lancia. Quaranta righe di cui conosco il comportamento battono una libreria YAML nel bundle
|
|
47
|
+
* del Worker di cui dovrei caratterizzare ordinamento e commenti. */
|
|
48
|
+
export function toYamlLines(value, indent = 0, maxDepth = 6) {
|
|
49
|
+
if (maxDepth < 0)
|
|
50
|
+
throw new YamlEmitError("Struttura troppo annidata");
|
|
51
|
+
const pad = " ".repeat(indent);
|
|
52
|
+
if (Array.isArray(value)) {
|
|
53
|
+
if (!value.length)
|
|
54
|
+
return [];
|
|
55
|
+
return value.flatMap((v) => {
|
|
56
|
+
if (v !== null && typeof v === "object" && !Array.isArray(v)) {
|
|
57
|
+
const inner = toYamlLines(v, indent + 1, maxDepth - 1);
|
|
58
|
+
if (!inner.length)
|
|
59
|
+
return [];
|
|
60
|
+
// primo campo sulla riga del trattino, il resto allineato sotto
|
|
61
|
+
return [`${pad}- ${inner[0].trimStart()}`, ...inner.slice(1)];
|
|
62
|
+
}
|
|
63
|
+
return [`${pad}- ${yamlScalar(v)}`];
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if (value !== null && typeof value === "object") {
|
|
67
|
+
// Solo oggetti PIANI. Una Date, una Map, una classe: `Object.entries` ne restituirebbe le
|
|
68
|
+
// proprietà enumerabili (spesso nessuna) e si emetterebbe `chiave: {}` — cioè si
|
|
69
|
+
// perderebbe il dato in silenzio. Meglio fermarsi.
|
|
70
|
+
const proto = Object.getPrototypeOf(value);
|
|
71
|
+
if (proto !== Object.prototype && proto !== null) {
|
|
72
|
+
throw new YamlEmitError(`Tipo non rappresentabile in YAML: ${value.constructor?.name ?? "oggetto non piano"}`);
|
|
73
|
+
}
|
|
74
|
+
return Object.entries(value).flatMap(([k, v]) => {
|
|
75
|
+
if (v === undefined)
|
|
76
|
+
return [];
|
|
77
|
+
if (Array.isArray(v)) {
|
|
78
|
+
if (!v.length)
|
|
79
|
+
return [`${pad}${k}: []`];
|
|
80
|
+
return [`${pad}${k}:`, ...toYamlLines(v, indent + 1, maxDepth - 1)];
|
|
81
|
+
}
|
|
82
|
+
if (v !== null && typeof v === "object") {
|
|
83
|
+
const inner = toYamlLines(v, indent + 1, maxDepth - 1);
|
|
84
|
+
return inner.length ? [`${pad}${k}:`, ...inner] : [`${pad}${k}: {}`];
|
|
85
|
+
}
|
|
86
|
+
return [`${pad}${k}: ${yamlScalar(v)}`];
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return [`${pad}${yamlScalar(value)}`];
|
|
90
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cardinali-studio/adminkit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Motore riusabile di un pannello di amministrazione per siti Hugo su Cloudflare Pages: codec del front matter guidato dallo schema, form React, libreria media su R2. NIENTE di specifico di un sito qui dentro.",
|
|
6
|
+
"license": "UNLICENSED",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./form": {
|
|
15
|
+
"types": "./dist/form/index.d.ts",
|
|
16
|
+
"default": "./dist/form/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./preview": {
|
|
19
|
+
"types": "./dist/preview.d.ts",
|
|
20
|
+
"default": "./dist/preview.js"
|
|
21
|
+
},
|
|
22
|
+
"./theme.css": "./dist/theme.css",
|
|
23
|
+
"./app": {
|
|
24
|
+
"types": "./dist/app/index.d.ts",
|
|
25
|
+
"default": "./dist/app/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./functions": {
|
|
28
|
+
"default": "./dist/functions/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./testing": {
|
|
31
|
+
"types": "./dist/testing.d.ts",
|
|
32
|
+
"default": "./dist/testing.js"
|
|
33
|
+
},
|
|
34
|
+
"./functions/*": "./dist/functions/*"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist"
|
|
38
|
+
],
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "rm -rf dist && tsc -p tsconfig.json && cp src/theme.css dist/theme.css && cp src/app/app.css dist/app/app.css && cp -R src/functions dist/functions",
|
|
41
|
+
"test": "node --test \"test/*.test.js\"",
|
|
42
|
+
"check": "npm run build && npm test"
|
|
43
|
+
},
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public"
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"@dnd-kit/core": "^6.3.1",
|
|
49
|
+
"@dnd-kit/modifiers": "^9.0.0",
|
|
50
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
51
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
52
|
+
"react": "^19",
|
|
53
|
+
"react-dom": "^19",
|
|
54
|
+
"react-hook-form": "^7",
|
|
55
|
+
"zod": "^4",
|
|
56
|
+
"@cloudflare/pages-plugin-cloudflare-access": "^1"
|
|
57
|
+
},
|
|
58
|
+
"peerDependenciesMeta": {
|
|
59
|
+
"react": {
|
|
60
|
+
"optional": true
|
|
61
|
+
},
|
|
62
|
+
"react-dom": {
|
|
63
|
+
"optional": true
|
|
64
|
+
},
|
|
65
|
+
"react-hook-form": {
|
|
66
|
+
"optional": true
|
|
67
|
+
},
|
|
68
|
+
"@dnd-kit/core": {
|
|
69
|
+
"optional": true
|
|
70
|
+
},
|
|
71
|
+
"@dnd-kit/modifiers": {
|
|
72
|
+
"optional": true
|
|
73
|
+
},
|
|
74
|
+
"@dnd-kit/sortable": {
|
|
75
|
+
"optional": true
|
|
76
|
+
},
|
|
77
|
+
"@dnd-kit/utilities": {
|
|
78
|
+
"optional": true
|
|
79
|
+
},
|
|
80
|
+
"@cloudflare/pages-plugin-cloudflare-access": {
|
|
81
|
+
"optional": true
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"devDependencies": {
|
|
85
|
+
"@dnd-kit/core": "^6.3.1",
|
|
86
|
+
"@dnd-kit/modifiers": "^9.0.0",
|
|
87
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
88
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
89
|
+
"@types/react": "^19.2.18",
|
|
90
|
+
"@types/react-dom": "^19.2.4",
|
|
91
|
+
"react": "^19.2.8",
|
|
92
|
+
"react-dom": "^19.2.8",
|
|
93
|
+
"react-hook-form": "^7.85.0",
|
|
94
|
+
"typescript": "^5.9.3",
|
|
95
|
+
"zod": "^4.4.3"
|
|
96
|
+
}
|
|
97
|
+
}
|