@mano8/astro-media-m8 1.1.0 → 2.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/README.md +54 -11
- package/dist/src/integration.d.ts.map +1 -1
- package/dist/src/integration.js +1 -0
- package/dist/src/integration.js.map +1 -1
- package/dist/src/runtime/api/categories.d.ts +14 -8
- package/dist/src/runtime/api/categories.d.ts.map +1 -1
- package/dist/src/runtime/api/categories.js +21 -8
- package/dist/src/runtime/api/categories.js.map +1 -1
- package/dist/src/runtime/api/index.d.ts +8 -0
- package/dist/src/runtime/api/index.d.ts.map +1 -1
- package/dist/src/runtime/api/index.js +8 -0
- package/dist/src/runtime/api/index.js.map +1 -1
- package/dist/src/runtime/api/transfer.d.ts +19 -0
- package/dist/src/runtime/api/transfer.d.ts.map +1 -0
- package/dist/src/runtime/api/transfer.js +48 -0
- package/dist/src/runtime/api/transfer.js.map +1 -0
- package/dist/src/runtime/client.d.ts.map +1 -1
- package/dist/src/runtime/client.js +7 -1
- package/dist/src/runtime/client.js.map +1 -1
- package/dist/src/runtime/compatibility.d.ts +6 -6
- package/dist/src/runtime/compatibility.d.ts.map +1 -1
- package/dist/src/runtime/compatibility.js +59 -7
- package/dist/src/runtime/compatibility.js.map +1 -1
- package/dist/src/runtime/errors.d.ts +20 -2
- package/dist/src/runtime/errors.d.ts.map +1 -1
- package/dist/src/runtime/errors.js +53 -2
- package/dist/src/runtime/errors.js.map +1 -1
- package/dist/src/runtime/hooks/index.d.ts +2 -0
- package/dist/src/runtime/hooks/index.d.ts.map +1 -1
- package/dist/src/runtime/hooks/index.js +2 -0
- package/dist/src/runtime/hooks/index.js.map +1 -1
- package/dist/src/runtime/hooks/useMediaCategories.d.ts +30 -0
- package/dist/src/runtime/hooks/useMediaCategories.d.ts.map +1 -0
- package/dist/src/runtime/hooks/useMediaCategories.js +56 -0
- package/dist/src/runtime/hooks/useMediaCategories.js.map +1 -0
- package/dist/src/runtime/hooks/useMediaObjects.d.ts.map +1 -1
- package/dist/src/runtime/hooks/useMediaObjects.js +14 -2
- package/dist/src/runtime/hooks/useMediaObjects.js.map +1 -1
- package/dist/src/runtime/hooks/useMediaTransfer.d.ts +42 -0
- package/dist/src/runtime/hooks/useMediaTransfer.d.ts.map +1 -0
- package/dist/src/runtime/hooks/useMediaTransfer.js +106 -0
- package/dist/src/runtime/hooks/useMediaTransfer.js.map +1 -0
- package/dist/src/runtime/queryKeys.d.ts +2 -0
- package/dist/src/runtime/queryKeys.d.ts.map +1 -1
- package/dist/src/runtime/queryKeys.js +2 -0
- package/dist/src/runtime/queryKeys.js.map +1 -1
- package/dist/src/runtime/react/CategoryManager.d.ts +10 -0
- package/dist/src/runtime/react/CategoryManager.d.ts.map +1 -0
- package/dist/src/runtime/react/CategoryManager.js +194 -0
- package/dist/src/runtime/react/CategoryManager.js.map +1 -0
- package/dist/src/runtime/react/CategoryMultiSelect.d.ts +73 -0
- package/dist/src/runtime/react/CategoryMultiSelect.d.ts.map +1 -0
- package/dist/src/runtime/react/CategoryMultiSelect.js +179 -0
- package/dist/src/runtime/react/CategoryMultiSelect.js.map +1 -0
- package/dist/src/runtime/react/MediaCategoryTreePane.d.ts +22 -0
- package/dist/src/runtime/react/MediaCategoryTreePane.d.ts.map +1 -0
- package/dist/src/runtime/react/MediaCategoryTreePane.js +244 -0
- package/dist/src/runtime/react/MediaCategoryTreePane.js.map +1 -0
- package/dist/src/runtime/react/MediaErrorBoundary.d.ts +53 -0
- package/dist/src/runtime/react/MediaErrorBoundary.d.ts.map +1 -0
- package/dist/src/runtime/react/MediaErrorBoundary.js +58 -0
- package/dist/src/runtime/react/MediaErrorBoundary.js.map +1 -0
- package/dist/src/runtime/react/MediaLibrary.d.ts +16 -1
- package/dist/src/runtime/react/MediaLibrary.d.ts.map +1 -1
- package/dist/src/runtime/react/MediaLibrary.js +75 -110
- package/dist/src/runtime/react/MediaLibrary.js.map +1 -1
- package/dist/src/runtime/react/MediaObjectViews.d.ts +47 -0
- package/dist/src/runtime/react/MediaObjectViews.d.ts.map +1 -0
- package/dist/src/runtime/react/MediaObjectViews.js +131 -0
- package/dist/src/runtime/react/MediaObjectViews.js.map +1 -0
- package/dist/src/runtime/react/MediaTransferPanel.d.ts +17 -0
- package/dist/src/runtime/react/MediaTransferPanel.d.ts.map +1 -0
- package/dist/src/runtime/react/MediaTransferPanel.js +93 -0
- package/dist/src/runtime/react/MediaTransferPanel.js.map +1 -0
- package/dist/src/runtime/react/MediaUploadDropzone.d.ts +36 -1
- package/dist/src/runtime/react/MediaUploadDropzone.d.ts.map +1 -1
- package/dist/src/runtime/react/MediaUploadDropzone.js +63 -3
- package/dist/src/runtime/react/MediaUploadDropzone.js.map +1 -1
- package/dist/src/runtime/react/ObjectDetail.d.ts.map +1 -1
- package/dist/src/runtime/react/ObjectDetail.js +51 -1
- package/dist/src/runtime/react/ObjectDetail.js.map +1 -1
- package/dist/src/runtime/react/categoryBranch.d.ts +38 -0
- package/dist/src/runtime/react/categoryBranch.d.ts.map +1 -0
- package/dist/src/runtime/react/categoryBranch.js +37 -0
- package/dist/src/runtime/react/categoryBranch.js.map +1 -0
- package/dist/src/runtime/react/default-ui/index.d.ts +6 -2
- package/dist/src/runtime/react/default-ui/index.d.ts.map +1 -1
- package/dist/src/runtime/react/default-ui/index.js +14 -9
- package/dist/src/runtime/react/default-ui/index.js.map +1 -1
- package/dist/src/runtime/react/index.d.ts +5 -2
- package/dist/src/runtime/react/index.d.ts.map +1 -1
- package/dist/src/runtime/react/index.js +3 -0
- package/dist/src/runtime/react/index.js.map +1 -1
- package/dist/src/runtime/react/mediaLibraryLabels.d.ts +93 -0
- package/dist/src/runtime/react/mediaLibraryLabels.d.ts.map +1 -0
- package/dist/src/runtime/react/mediaLibraryLabels.js +100 -0
- package/dist/src/runtime/react/mediaLibraryLabels.js.map +1 -0
- package/dist/src/runtime/react/mediaLibraryStyles.d.ts +44 -0
- package/dist/src/runtime/react/mediaLibraryStyles.d.ts.map +1 -0
- package/dist/src/runtime/react/mediaLibraryStyles.js +82 -0
- package/dist/src/runtime/react/mediaLibraryStyles.js.map +1 -0
- package/dist/src/runtime/routes.d.ts +2 -0
- package/dist/src/runtime/routes.d.ts.map +1 -1
- package/dist/src/runtime/routes.js +2 -0
- package/dist/src/runtime/routes.js.map +1 -1
- package/dist/src/runtime/schemas.d.ts +265 -0
- package/dist/src/runtime/schemas.d.ts.map +1 -1
- package/dist/src/runtime/schemas.js +173 -6
- package/dist/src/runtime/schemas.js.map +1 -1
- package/dist/src/runtime/upload/uploadController.d.ts +7 -0
- package/dist/src/runtime/upload/uploadController.d.ts.map +1 -1
- package/dist/src/runtime/upload/uploadController.js +10 -5
- package/dist/src/runtime/upload/uploadController.js.map +1 -1
- package/package.json +37 -30
- package/registry/r/media-category-tree.json +21 -0
- package/registry/r/media-dashboard-overview.json +1 -1
- package/registry/r/media-library-tree.json +25 -0
- package/registry/r/media-maintenance-panel.json +3 -2
- package/registry/r/media-transfer-dialog.json +26 -0
- package/registry/r/registry.json +18 -0
- package/registry.json +61 -1
- package/src/routes/categories.astro +12 -0
- package/src/scaffold/styles/media.css +395 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/runtime/schemas.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/runtime/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,13 @@ export type UploadControllerInput = {
|
|
|
21
21
|
};
|
|
22
22
|
category: MediaCategory;
|
|
23
23
|
visibility: MediaVisibility;
|
|
24
|
+
/**
|
|
25
|
+
* Optional user categories to file the completed object into (`U4`). The
|
|
26
|
+
* fixed `category` above is a separate axis and still drives policy. Omitted
|
|
27
|
+
* from the wire body when undefined, which is what the server's
|
|
28
|
+
* `default_factory=list` expects.
|
|
29
|
+
*/
|
|
30
|
+
categoryIds?: number[];
|
|
24
31
|
/** Overrides `file.name`; required when the blob has no name. */
|
|
25
32
|
filename?: string;
|
|
26
33
|
/** Overrides `file.type`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadController.d.ts","sourceRoot":"","sources":["../../../../src/runtime/upload/uploadController.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACvB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,UAAU,GACV,OAAO,GACP,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnE,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEb,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAMpE;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,IAAI,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,eAAe,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,gBAAgB,GAAG,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;AAK3D;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOlE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,sBAAsB,EACjC,IAAI,EAAE,IAAI,EACV,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAC3F,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED,qBAAa,qBAAqB;IASpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IARlC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAuB;IAC3C,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEE,KAAK,EAAE,qBAAqB;IAIzD,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAK9D,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,IAAI;IAYN,KAAK,IAAI,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"uploadController.d.ts","sourceRoot":"","sources":["../../../../src/runtime/upload/uploadController.ts"],"names":[],"mappings":"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"}
|
|
@@ -124,13 +124,17 @@ export class MediaUploadController {
|
|
|
124
124
|
visibility: input.visibility,
|
|
125
125
|
original_filename: filename,
|
|
126
126
|
mime_type: mimeType,
|
|
127
|
-
expected_size_bytes: input.file.size
|
|
127
|
+
expected_size_bytes: input.file.size,
|
|
128
|
+
// `JSON.stringify` drops an undefined value, so an omitted selection
|
|
129
|
+
// never reaches the wire as an explicit `null`.
|
|
130
|
+
category_ids: input.categoryIds
|
|
128
131
|
});
|
|
129
132
|
this.sessionId = presigned.session_id;
|
|
130
133
|
}
|
|
131
134
|
catch (error) {
|
|
132
135
|
this.emit("failed");
|
|
133
|
-
|
|
136
|
+
const message = error instanceof ApiError ? error.message : "Failed to initiate upload";
|
|
137
|
+
throw new UploadError("api", message, error);
|
|
134
138
|
}
|
|
135
139
|
try {
|
|
136
140
|
this.emit("uploading");
|
|
@@ -167,7 +171,8 @@ export class MediaUploadController {
|
|
|
167
171
|
}
|
|
168
172
|
catch (error) {
|
|
169
173
|
this.emit("failed");
|
|
170
|
-
|
|
174
|
+
const message = error instanceof ApiError ? error.message : "Failed to complete upload";
|
|
175
|
+
throw new UploadError("api", message, error);
|
|
171
176
|
}
|
|
172
177
|
if (input.waitForScan) {
|
|
173
178
|
this.emit("scanning");
|
|
@@ -187,13 +192,13 @@ export class MediaUploadController {
|
|
|
187
192
|
throw new UploadError("abort", "Upload aborted");
|
|
188
193
|
const object = await getObject(objectId);
|
|
189
194
|
if (object.status === "rejected" || object.scan_status === "infected" || object.scan_status === "quarantined") {
|
|
190
|
-
throw new UploadError("scan",
|
|
195
|
+
throw new UploadError("scan", "This file was rejected because it failed the virus scan.");
|
|
191
196
|
}
|
|
192
197
|
const stillPending = PENDING_OBJECT_STATES.has(object.status) || PENDING_SCAN_STATES.has(object.scan_status);
|
|
193
198
|
if (!stillPending)
|
|
194
199
|
return object;
|
|
195
200
|
if (Date.now() + intervalMs >= deadline) {
|
|
196
|
-
throw new UploadError("scan", "Timed out waiting for scan to finish");
|
|
201
|
+
throw new UploadError("scan", "Timed out waiting for the scan to finish.");
|
|
197
202
|
}
|
|
198
203
|
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
199
204
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadController.js","sourceRoot":"","sources":["../../../../src/runtime/upload/uploadController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAoBxC,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAkB;IACtB,KAAK,CAAW;IAEzB,YAAY,IAAqB,EAAE,OAAe,EAAE,KAAe;QACjE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"uploadController.js","sourceRoot":"","sources":["../../../../src/runtime/upload/uploadController.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mano8/astro-media-m8",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Astro integration and headless client for media-service-m8.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"./routes": "./dist/src/runtime/routes.js",
|
|
42
42
|
"./routes/upload.astro": "./src/routes/upload.astro",
|
|
43
43
|
"./routes/library.astro": "./src/routes/library.astro",
|
|
44
|
+
"./routes/categories.astro": "./src/routes/categories.astro",
|
|
44
45
|
"./routes/object/[id].astro": "./src/routes/object/[id].astro",
|
|
45
46
|
"./routes/presets.astro": "./src/routes/presets.astro",
|
|
46
47
|
"./routes/admin/media.astro": "./src/routes/admin/media.astro",
|
|
@@ -52,20 +53,26 @@
|
|
|
52
53
|
"scripts": {
|
|
53
54
|
"build": "tsc -p tsconfig.json && npm run build:registry",
|
|
54
55
|
"build:registry": "node scripts/build-registry.mjs",
|
|
56
|
+
"preview:dev": "vite --config fixtures/preview/vite.config.ts",
|
|
57
|
+
"preview:build": "tsc -p fixtures/preview/tsconfig.json --noEmit && vite build --config fixtures/preview/vite.config.ts",
|
|
58
|
+
"verify:fleet-gates": "node scripts/verify-fleet-gates.mjs",
|
|
59
|
+
"verify:registry-consumer": "node scripts/verify-registry-consumer.mjs",
|
|
60
|
+
"verify:registry-drift": "node scripts/verify-registry-drift.mjs",
|
|
55
61
|
"verify:starter-routes": "node scripts/verify-starter-routes.mjs",
|
|
62
|
+
"verify:tarball-install": "node scripts/verify-tarball-install.mjs",
|
|
56
63
|
"test": "vitest run --coverage",
|
|
57
64
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
58
|
-
"lint": "
|
|
65
|
+
"lint": "eslint --max-warnings 0 .",
|
|
59
66
|
"test:unit": "vitest run"
|
|
60
67
|
},
|
|
61
68
|
"dependencies": {
|
|
62
|
-
"@mano8/astro-ui-m8": "^1.
|
|
69
|
+
"@mano8/astro-ui-m8": "^1.5.1"
|
|
63
70
|
},
|
|
64
71
|
"peerDependencies": {
|
|
65
72
|
"@astrojs/react": "^6.0.1",
|
|
66
73
|
"@astrojs/starlight": "^0.41.3",
|
|
67
|
-
"@mano8/astro-auth-m8": "^
|
|
68
|
-
"@tanstack/react-query": "^5.
|
|
74
|
+
"@mano8/astro-auth-m8": "^2.4.1",
|
|
75
|
+
"@tanstack/react-query": "^5.102.8",
|
|
69
76
|
"astro": "^7.0.9",
|
|
70
77
|
"react": "^18.0.0 || ^19.0.0",
|
|
71
78
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
@@ -80,35 +87,35 @@
|
|
|
80
87
|
}
|
|
81
88
|
},
|
|
82
89
|
"devDependencies": {
|
|
83
|
-
"@astrojs/react": "^6.0.
|
|
84
|
-
"@astrojs/starlight": "^0.41.
|
|
85
|
-
"@eslint/
|
|
86
|
-
"@
|
|
87
|
-
"@
|
|
88
|
-
"@
|
|
89
|
-
"@
|
|
90
|
-
"@
|
|
91
|
-
"@
|
|
92
|
-
"@
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"eslint
|
|
97
|
-
"eslint-plugin-react-hooks": "^5.1.0",
|
|
90
|
+
"@astrojs/react": "^6.0.4",
|
|
91
|
+
"@astrojs/starlight": "^0.41.10",
|
|
92
|
+
"@eslint-react/eslint-plugin": "^5.18.6",
|
|
93
|
+
"@eslint/js": "^10.0.1",
|
|
94
|
+
"@mano8/astro-auth-m8": "^2.4.1",
|
|
95
|
+
"@tanstack/react-query": "^5.102.8",
|
|
96
|
+
"@tanstack/react-table": "^8.21.3",
|
|
97
|
+
"@types/node": "^26.4.0",
|
|
98
|
+
"@types/react": "^19.2.18",
|
|
99
|
+
"@typescript-eslint/eslint-plugin": "^8.68.0",
|
|
100
|
+
"@typescript-eslint/parser": "^8.68.0",
|
|
101
|
+
"@vitest/coverage-v8": "^4.1.11",
|
|
102
|
+
"astro": "^7.2.9",
|
|
103
|
+
"eslint": "^10.9.1",
|
|
98
104
|
"eslint-plugin-security": "^4.0.1",
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"react
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"
|
|
105
|
+
"globals": "^17.11.0",
|
|
106
|
+
"jsdom": "^30.0.1",
|
|
107
|
+
"react": "^19.2.8",
|
|
108
|
+
"react-dom": "^19.2.8",
|
|
109
|
+
"typescript": "^5.9.3",
|
|
110
|
+
"vitest": "^4.1.11",
|
|
111
|
+
"zod": "^4.5.4"
|
|
105
112
|
},
|
|
106
113
|
"overrides": {
|
|
107
|
-
"esbuild": "^0.28.
|
|
114
|
+
"esbuild": "^0.28.2"
|
|
108
115
|
},
|
|
109
116
|
"mediaServiceM8": {
|
|
110
|
-
"contract": "media-service-m8@1.
|
|
111
|
-
"testedServiceVersion": "1.
|
|
112
|
-
"serviceVersionRange": ">=
|
|
117
|
+
"contract": "media-service-m8@1.1",
|
|
118
|
+
"testedServiceVersion": "2.1.1",
|
|
119
|
+
"serviceVersionRange": ">=2.0.0 <3.0.0"
|
|
113
120
|
}
|
|
114
121
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "media-category-tree",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"title": "Media Category Tree",
|
|
6
|
+
"description": "shadcn skin over astro-ui-m8's generic tree-view for the nested user category tree, with All/Uncategorized pseudo-nodes, driven by the package's useCategoryTree hook. Requires @mano8/astro-media-m8 installed.",
|
|
7
|
+
"registryDependencies": [
|
|
8
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/tree-view.json",
|
|
9
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/state-empty.json",
|
|
10
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/state-error.json",
|
|
11
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/state-loading.json"
|
|
12
|
+
],
|
|
13
|
+
"files": [
|
|
14
|
+
{
|
|
15
|
+
"path": "registry/blocks/library/media-category-tree.tsx",
|
|
16
|
+
"content": "\"use client\";\n\n// Media category tree pane: shadcn skin over `astro-ui-m8`'s generic\n// `tree-view` (`U6`), driven by this package's live `useCategoryTree` hook.\n// No fetching and no tree mechanics are reimplemented here — this file is\n// only the shadcn/Tailwind composition; edit freely per app. Copied into the\n// consumer via the @fa-m8-media registry (`U8`).\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { TreeView, type TreeViewNode } from \"@/components/m8-ui/tree-view\";\nimport { StateEmpty } from \"@/components/m8-ui/state-empty\";\nimport { StateError } from \"@/components/m8-ui/state-error\";\nimport { StateLoading } from \"@/components/m8-ui/state-loading\";\n\nimport { useCategoryTree } from \"@mano8/astro-media-m8/hooks\";\nimport type { CategoryNode, ObjectListParams } from \"@mano8/astro-media-m8/schemas\";\n\n/**\n * A branch selection over the user category tree, mirroring the runtime\n * `MediaLibrary` tree view's own union (`U7`) — a category is mutually\n * exclusive with the \"all\"/\"uncategorized\" pseudo-nodes, so this stays one\n * discriminated union rather than three independent booleans.\n */\nexport type MediaCategorySelection =\n | { kind: \"all\" }\n | { kind: \"uncategorized\" }\n | { kind: \"category\"; id: number };\n\nconst ALL_NODE_ID = \"all\";\nconst UNCATEGORIZED_NODE_ID = \"uncategorized\";\nconst CATEGORY_NODE_PREFIX = \"category-\";\n\nfunction categoryNodeId(id: number): string {\n return `${CATEGORY_NODE_PREFIX}${id}`;\n}\n\nfunction nodeIdFromSelection(selection: MediaCategorySelection): string {\n switch (selection.kind) {\n case \"all\":\n return ALL_NODE_ID;\n case \"uncategorized\":\n return UNCATEGORIZED_NODE_ID;\n case \"category\":\n return categoryNodeId(selection.id);\n }\n}\n\nfunction selectionFromNodeId(nodeId: string): MediaCategorySelection {\n if (nodeId === ALL_NODE_ID) return { kind: \"all\" };\n if (nodeId === UNCATEGORIZED_NODE_ID) return { kind: \"uncategorized\" };\n return { kind: \"category\", id: Number(nodeId.slice(CATEGORY_NODE_PREFIX.length)) };\n}\n\n/**\n * Translate a branch selection into the `ObjectListParams` slice the\n * `U4` list endpoint understands, writing every key on every selection\n * (`undefined` where it does not apply) so switching branches clears the\n * previous branch's params instead of leaving a stale one behind — the same\n * discipline `MediaLibrary`'s own `branchListParams` uses.\n */\nexport function categorySelectionToListParams(\n selection: MediaCategorySelection,\n): Pick<ObjectListParams, \"category_id\" | \"include_descendants\" | \"uncategorized\"> {\n if (selection.kind === \"category\") {\n return { category_id: selection.id, include_descendants: true, uncategorized: undefined };\n }\n if (selection.kind === \"uncategorized\") {\n return { category_id: undefined, include_descendants: undefined, uncategorized: true };\n }\n return { category_id: undefined, include_descendants: undefined, uncategorized: undefined };\n}\n\n// The pseudo-nodes carry no count badge: server `CategoryNode` counts are\n// per-category, and a synthesized \"all\"/\"uncategorized\" total would be a\n// second, unverifiable source for a number the tree already owns.\nfunction categoryNodeToTreeViewNode(node: CategoryNode): TreeViewNode {\n return {\n id: categoryNodeId(node.id),\n label: node.name,\n count: node.total_object_count,\n children: node.children.length > 0 ? node.children.map(categoryNodeToTreeViewNode) : undefined,\n };\n}\n\nexport interface MediaCategoryTreeLabels {\n ariaLabel: string;\n all: string;\n uncategorized: string;\n loadingTitle: string;\n loadingDescription: string;\n errorTitle: string;\n errorRetry: string;\n emptyTitle: string;\n emptyDescription: string;\n}\n\nconst DEFAULT_LABELS: MediaCategoryTreeLabels = {\n ariaLabel: \"Media categories\",\n all: \"All media\",\n uncategorized: \"Uncategorized\",\n loadingTitle: \"Loading categories\",\n loadingDescription: \"Fetching the category tree.\",\n errorTitle: \"Could not load categories\",\n errorRetry: \"Try again\",\n emptyTitle: \"No categories yet\",\n emptyDescription: \"Create a category to start organizing media.\",\n};\n\nexport interface MediaCategoryTreeProps {\n /** Controlled selection. Omit to let the pane track its own selection. */\n selection?: MediaCategorySelection;\n onSelectionChange?: (selection: MediaCategorySelection) => void;\n labels?: Partial<MediaCategoryTreeLabels>;\n className?: string;\n}\n\n/**\n * Selection is optionally controlled: with `selection` supplied the caller owns\n * it and the pane only reports changes, without it the pane tracks its own.\n */\nfunction useCategorySelection(\n controlledSelection: MediaCategorySelection | undefined,\n onSelectionChange: ((selection: MediaCategorySelection) => void) | undefined,\n) {\n const [internalSelection, setInternalSelection] = React.useState<MediaCategorySelection>({\n kind: \"all\",\n });\n\n const handleSelect = React.useCallback(\n (node: TreeViewNode) => {\n const next = selectionFromNodeId(node.id);\n if (controlledSelection === undefined) {\n setInternalSelection(next);\n }\n onSelectionChange?.(next);\n },\n [controlledSelection, onSelectionChange],\n );\n\n return { selection: controlledSelection ?? internalSelection, handleSelect };\n}\n\nfunction describeError(error: unknown, fallback: string): string {\n return error instanceof Error && error.message ? error.message : fallback;\n}\n\nexport function MediaCategoryTree({\n selection: controlledSelection,\n onSelectionChange,\n labels,\n className,\n}: MediaCategoryTreeProps) {\n const t = { ...DEFAULT_LABELS, ...labels };\n const { tree, loading, error, reload } = useCategoryTree();\n const { selection, handleSelect } = useCategorySelection(controlledSelection, onSelectionChange);\n\n const nodes = React.useMemo<TreeViewNode[]>(\n () => [\n { id: ALL_NODE_ID, label: t.all },\n { id: UNCATEGORIZED_NODE_ID, label: t.uncategorized },\n ...tree.map(categoryNodeToTreeViewNode),\n ],\n [tree, t.all, t.uncategorized],\n );\n // The pseudo-nodes stay navigable even while the tree is loading, erroring,\n // or genuinely empty of user categories — this pane must never degenerate\n // to an empty box, matching the runtime tree view's own decision (`U7`).\n if (loading && tree.length === 0 && !error) {\n return <StateLoading title={t.loadingTitle} description={t.loadingDescription} rows={4} />;\n }\n\n return (\n <div className={cn(\"space-y-3\", className)}>\n {error ? (\n <StateError\n title={t.errorTitle}\n description={describeError(error, t.errorTitle)}\n retryLabel={t.errorRetry}\n onRetry={() => void reload()}\n />\n ) : null}\n {/* No `defaultExpandedIds`: `TreeView` seeds an empty set, so every branch\n opens shut. This tracks the runtime `MediaCategoryTreePane`, which made\n the same move — a deep tree should present its roots, not its full\n depth, and the pane should start at a width it can show. The skin and\n the runtime pane are kept deliberately non-divergent (`U7`). */}\n <TreeView\n nodes={nodes}\n selectedId={nodeIdFromSelection(selection)}\n onSelect={handleSelect}\n aria-label={t.ariaLabel}\n />\n {!loading && !error && tree.length === 0 ? (\n <StateEmpty title={t.emptyTitle} description={t.emptyDescription} />\n ) : null}\n </div>\n );\n}\n",
|
|
17
|
+
"type": "registry:component",
|
|
18
|
+
"target": "components/fa-media/media-category-tree.tsx"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": "registry/blocks/admin/media-dashboard-overview.tsx",
|
|
24
|
-
"content": "\"use client\";\n\n// Media admin landing view: a storage dashboard built from the package's\n// headless `useMediaAdmin` hook. Logic stays a live dependency\n// (@mano8/astro-media-m8/hooks); this file is only the shadcn skin and is copied\n// into the consumer via the @fa-m8-media registry — edit freely per app.\nimport * as React from \"react\";\nimport {\n Boxes,\n HardDrive,\n Trash2,\n Clock,\n Database,\n CloudOff,\n} from \"lucide-react\";\nimport { useMediaAdmin } from \"@mano8/astro-media-m8/hooks\";\nimport type { SubscriptionPublic } from \"@mano8/astro-media-m8/schemas\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\n\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n MediaStorageChart,\n humanizeBytes,\n} from \"@/components/fa-media/media-storage-chart\";\nimport { DataTable } from \"@/components/m8-ui/data-table\";\nimport { StateEmpty } from \"@/components/m8-ui/state-empty\";\nimport { StateError } from \"@/components/m8-ui/state-error\";\nimport { StateLoading } from \"@/components/m8-ui/state-loading\";\nimport { StateUnauthorized } from \"@/components/m8-ui/state-unauthorized\";\n\nexport interface MediaDashboardOverviewLabels {\n title: string;\n subtitle: string;\n totalObjects: string;\n totalBytes: string;\n deletedObjects: string;\n staleSessions: string;\n dbOrphans: string;\n storageOrphans: string;\n storageByCategory: string;\n storageEmpty: string;\n subscriptionsTitle: string;\n subUrl: string;\n subEvents: string;\n subStatus: string;\n subActive: string;\n subInactive: string;\n subActions: string;\n subDelete: string;\n subEmpty: string;\n error: string;\n errorRetry: string;\n loadingTitle: string;\n loadingDescription: string;\n unauthorizedTitle: string;\n unauthorizedDescription: string;\n}\n\nconst DEFAULT_LABELS: MediaDashboardOverviewLabels = {\n title: \"Overview\",\n subtitle: \"Storage and processing at a glance.\",\n totalObjects: \"Objects\",\n totalBytes: \"Storage used\",\n deletedObjects: \"Deleted\",\n staleSessions: \"Stale uploads\",\n dbOrphans: \"DB orphans\",\n storageOrphans: \"Storage orphans\",\n storageByCategory: \"Storage by category\",\n storageEmpty: \"No stored objects yet.\",\n subscriptionsTitle: \"Webhook subscriptions\",\n subUrl: \"Endpoint\",\n subEvents: \"Events\",\n subStatus: \"Status\",\n subActive: \"Active\",\n subInactive: \"Inactive\",\n subActions: \"Actions\",\n subDelete: \"Delete\",\n subEmpty: \"No webhook subscriptions.\",\n error: \"Could not load admin data.\",\n errorRetry: \"Try again\",\n loadingTitle: \"Loading media admin data\",\n loadingDescription: \"Fetching storage, orphan, upload, and subscription stats.\",\n unauthorizedTitle: \"Administrator access required\",\n unauthorizedDescription: \"Sign in with a superuser account to view media administration.\",\n};\n\nexport interface MediaDashboardOverviewProps {\n labels?: Partial<MediaDashboardOverviewLabels>;\n}\n\nfunction StatCard({\n label,\n value,\n icon: Icon,\n}: {\n label: string;\n value: React.ReactNode;\n icon: React.ComponentType<{ className?: string }>;\n}) {\n return (\n <Card className=\"h-full\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">\n {label}\n </CardTitle>\n <Icon className=\"size-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-semibold tabular-nums\">{value}</div>\n </CardContent>\n </Card>\n );\n}\n\nexport function MediaDashboardOverview({\n labels,\n}: MediaDashboardOverviewProps) {\n const t = { ...DEFAULT_LABELS, ...labels };\n const {\n allowed,\n stats,\n stale,\n orphans,\n subscriptions,\n error,\n loadAll,\n removeSubscription,\n } = useMediaAdmin();\n const [ready, setReady] = React.useState(false);\n\n React.useEffect(() => {\n let cancelled = false;\n void loadAll().finally(() => {\n if (!cancelled) setReady(true);\n });\n return () => {\n cancelled = true;\n };\n // The hook callbacks are stable for a given superuser identity; run once.\n // eslint-disable-next-line react
|
|
24
|
+
"content": "\"use client\";\n\n// Media admin landing view: a storage dashboard built from the package's\n// headless `useMediaAdmin` hook. Logic stays a live dependency\n// (@mano8/astro-media-m8/hooks); this file is only the shadcn skin and is copied\n// into the consumer via the @fa-m8-media registry — edit freely per app.\nimport * as React from \"react\";\nimport {\n Boxes,\n HardDrive,\n Trash2,\n Clock,\n Database,\n CloudOff,\n} from \"lucide-react\";\nimport { useMediaAdmin } from \"@mano8/astro-media-m8/hooks\";\nimport type { SubscriptionPublic } from \"@mano8/astro-media-m8/schemas\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\n\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n MediaStorageChart,\n humanizeBytes,\n} from \"@/components/fa-media/media-storage-chart\";\nimport { DataTable } from \"@/components/m8-ui/data-table\";\nimport { StateEmpty } from \"@/components/m8-ui/state-empty\";\nimport { StateError } from \"@/components/m8-ui/state-error\";\nimport { StateLoading } from \"@/components/m8-ui/state-loading\";\nimport { StateUnauthorized } from \"@/components/m8-ui/state-unauthorized\";\n\nexport interface MediaDashboardOverviewLabels {\n title: string;\n subtitle: string;\n totalObjects: string;\n totalBytes: string;\n deletedObjects: string;\n staleSessions: string;\n dbOrphans: string;\n storageOrphans: string;\n storageByCategory: string;\n storageEmpty: string;\n subscriptionsTitle: string;\n subUrl: string;\n subEvents: string;\n subStatus: string;\n subActive: string;\n subInactive: string;\n subActions: string;\n subDelete: string;\n subEmpty: string;\n error: string;\n errorRetry: string;\n loadingTitle: string;\n loadingDescription: string;\n unauthorizedTitle: string;\n unauthorizedDescription: string;\n}\n\nconst DEFAULT_LABELS: MediaDashboardOverviewLabels = {\n title: \"Overview\",\n subtitle: \"Storage and processing at a glance.\",\n totalObjects: \"Objects\",\n totalBytes: \"Storage used\",\n deletedObjects: \"Deleted\",\n staleSessions: \"Stale uploads\",\n dbOrphans: \"DB orphans\",\n storageOrphans: \"Storage orphans\",\n storageByCategory: \"Storage by category\",\n storageEmpty: \"No stored objects yet.\",\n subscriptionsTitle: \"Webhook subscriptions\",\n subUrl: \"Endpoint\",\n subEvents: \"Events\",\n subStatus: \"Status\",\n subActive: \"Active\",\n subInactive: \"Inactive\",\n subActions: \"Actions\",\n subDelete: \"Delete\",\n subEmpty: \"No webhook subscriptions.\",\n error: \"Could not load admin data.\",\n errorRetry: \"Try again\",\n loadingTitle: \"Loading media admin data\",\n loadingDescription: \"Fetching storage, orphan, upload, and subscription stats.\",\n unauthorizedTitle: \"Administrator access required\",\n unauthorizedDescription: \"Sign in with a superuser account to view media administration.\",\n};\n\nexport interface MediaDashboardOverviewProps {\n labels?: Partial<MediaDashboardOverviewLabels>;\n}\n\nfunction StatCard({\n label,\n value,\n icon: Icon,\n}: {\n label: string;\n value: React.ReactNode;\n icon: React.ComponentType<{ className?: string }>;\n}) {\n return (\n <Card className=\"h-full\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">\n {label}\n </CardTitle>\n <Icon className=\"size-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-semibold tabular-nums\">{value}</div>\n </CardContent>\n </Card>\n );\n}\n\nexport function MediaDashboardOverview({\n labels,\n}: MediaDashboardOverviewProps) {\n // Memoised on `labels`: a fresh object each render would re-run every\n // downstream `useMemo` that reads it, including the column definitions.\n const t = React.useMemo(() => ({ ...DEFAULT_LABELS, ...labels }), [labels]);\n const {\n allowed,\n stats,\n stale,\n orphans,\n subscriptions,\n error,\n loadAll,\n removeSubscription,\n } = useMediaAdmin();\n const [ready, setReady] = React.useState(false);\n\n React.useEffect(() => {\n let cancelled = false;\n void loadAll().finally(() => {\n if (!cancelled) setReady(true);\n });\n return () => {\n cancelled = true;\n };\n // The hook callbacks are stable for a given superuser identity; run once.\n // eslint-disable-next-line @eslint-react/exhaustive-deps\n }, []);\n\n const retryLoad = React.useCallback(() => {\n setReady(false);\n void loadAll().finally(() => {\n setReady(true);\n });\n }, [loadAll]);\n\n const describeError = React.useCallback(\n (fallback: string) => (error instanceof Error && error.message ? error.message : fallback),\n [error],\n );\n\n const storageData = (stats?.by_category ?? []).map((row) => ({\n category: row.category,\n bytes: row.total_bytes,\n count: row.count,\n }));\n\n // Webhook subscriptions arrive as one fully-fetched admin collection behind no\n // list endpoint, so the paging is legitimately local — but the canonical table\n // is server-driven and its page props are required, so they are supplied here\n // rather than by passing a client-side filter API the block does not have.\n const [subscriptionPage, setSubscriptionPage] = React.useState(1);\n const [subscriptionPageSize, setSubscriptionPageSize] = React.useState(10);\n const allSubscriptions = React.useMemo(\n () => subscriptions?.items ?? [],\n [subscriptions],\n );\n const pagedSubscriptions = React.useMemo(\n () =>\n allSubscriptions.slice(\n (subscriptionPage - 1) * subscriptionPageSize,\n subscriptionPage * subscriptionPageSize,\n ),\n [allSubscriptions, subscriptionPage, subscriptionPageSize],\n );\n\n const columns = React.useMemo<ColumnDef<SubscriptionPublic>[]>(\n () => [\n { accessorKey: \"url\", header: t.subUrl },\n {\n accessorKey: \"event_types\",\n header: t.subEvents,\n cell: ({ row }) => row.original.event_types.join(\", \") || \"*\",\n },\n {\n accessorKey: \"active\",\n header: t.subStatus,\n cell: ({ row }) => (row.original.active ? t.subActive : t.subInactive),\n },\n {\n id: \"actions\",\n header: t.subActions,\n cell: ({ row }) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive hover:text-destructive\"\n onClick={() => void removeSubscription(row.original.id)}\n >\n {t.subDelete}\n </Button>\n ),\n },\n ],\n [t, removeSubscription],\n );\n\n if (!allowed) {\n return (\n <StateUnauthorized\n title={t.unauthorizedTitle}\n description={t.unauthorizedDescription}\n />\n );\n }\n\n if (!ready) {\n return (\n <StateLoading\n title={t.loadingTitle}\n description={t.loadingDescription}\n rows={6}\n />\n );\n }\n\n if (error && !stats) {\n return (\n <StateError\n title={t.error}\n description={describeError(t.error)}\n retryLabel={t.errorRetry}\n onRetry={retryLoad}\n />\n );\n }\n\n return (\n <div className=\"not-content space-y-6\">\n <div className=\"space-y-1\">\n <h2 className=\"text-xl font-semibold tracking-tight\">{t.title}</h2>\n <p className=\"text-sm text-muted-foreground\">{t.subtitle}</p>\n </div>\n\n <div className=\"grid auto-rows-fr gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n <StatCard\n label={t.totalObjects}\n value={(stats?.total_objects ?? 0).toLocaleString()}\n icon={Boxes}\n />\n <StatCard\n label={t.totalBytes}\n value={humanizeBytes(stats?.total_bytes ?? 0)}\n icon={HardDrive}\n />\n <StatCard\n label={t.deletedObjects}\n value={(stats?.deleted_objects ?? 0).toLocaleString()}\n icon={Trash2}\n />\n <StatCard\n label={t.staleSessions}\n value={(stale?.count ?? 0).toLocaleString()}\n icon={Clock}\n />\n <StatCard\n label={t.dbOrphans}\n value={(orphans?.db_orphan_count ?? 0).toLocaleString()}\n icon={Database}\n />\n <StatCard\n label={t.storageOrphans}\n value={(orphans?.storage_orphan_count ?? 0).toLocaleString()}\n icon={CloudOff}\n />\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">{t.storageByCategory}</CardTitle>\n </CardHeader>\n <CardContent>\n {storageData.length ? (\n <MediaStorageChart\n data={storageData}\n bytesLabel={t.totalBytes}\n className=\"aspect-auto h-64 w-full\"\n />\n ) : (\n <StateEmpty\n title={t.storageByCategory}\n description={t.storageEmpty}\n />\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">{t.subscriptionsTitle}</CardTitle>\n </CardHeader>\n <CardContent>\n <DataTable\n columns={columns}\n data={pagedSubscriptions}\n rowCount={allSubscriptions.length}\n page={subscriptionPage}\n pageSize={subscriptionPageSize}\n onPageChange={setSubscriptionPage}\n onPageSizeChange={(next) => {\n setSubscriptionPageSize(next);\n setSubscriptionPage(1);\n }}\n labels={{ empty: t.subEmpty }}\n />\n </CardContent>\n </Card>\n </div>\n );\n}\n",
|
|
25
25
|
"type": "registry:component",
|
|
26
26
|
"target": "components/fa-media/media-dashboard-overview.tsx"
|
|
27
27
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "media-library-tree",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"title": "Media Library Tree View",
|
|
6
|
+
"description": "Two-pane documents tree view: media-category-tree (left) paired with astro-ui-m8's data-table (right), scoped to the selected branch via the package's useMediaObjects hook. Requires @mano8/astro-media-m8 installed.",
|
|
7
|
+
"dependencies": [
|
|
8
|
+
"@tanstack/react-table"
|
|
9
|
+
],
|
|
10
|
+
"registryDependencies": [
|
|
11
|
+
"badge",
|
|
12
|
+
"button",
|
|
13
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/data-table.json",
|
|
14
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/state-error.json",
|
|
15
|
+
"./node_modules/@mano8/astro-media-m8/registry/r/media-category-tree.json"
|
|
16
|
+
],
|
|
17
|
+
"files": [
|
|
18
|
+
{
|
|
19
|
+
"path": "registry/blocks/library/media-library-tree.tsx",
|
|
20
|
+
"content": "\"use client\";\n\n// Documents-view tree pane: pairs `media-category-tree` (left, the shared\n// `astro-ui-m8` `tree-view`) with the shadcn `data-table` (right), driven by\n// this package's live `useMediaObjects` hook scoped to the selected branch.\n// Reimplements no fetching and no tree mechanics — this file is only the\n// shadcn/Tailwind composition; edit freely per app. Copied into the consumer\n// via the @fa-m8-media registry (`U8`).\nimport * as React from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { DataTable } from \"@/components/m8-ui/data-table\";\nimport { StateError } from \"@/components/m8-ui/state-error\";\n\nimport { useMediaObjects } from \"@mano8/astro-media-m8/hooks\";\nimport type { MediaObjectPublic } from \"@mano8/astro-media-m8/schemas\";\n\nimport {\n MediaCategoryTree,\n categorySelectionToListParams,\n type MediaCategorySelection,\n} from \"./media-category-tree\";\n\nfunction formatBytes(bytes: number): string {\n if (bytes <= 0) return \"0 B\";\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n const exponent = Math.min(units.length - 1, Math.floor(Math.log(bytes) / Math.log(1024)));\n const value = bytes / 1024 ** exponent;\n return `${exponent === 0 ? value : value.toFixed(1)} ${units[exponent]}`;\n}\n\nfunction formatDate(value: string): string {\n const parsed = new Date(value);\n return Number.isNaN(parsed.getTime()) ? value : parsed.toLocaleDateString();\n}\n\n// `scan_status` is a field separate from `status` (per `U2`'s own\n// `MediaLibrary` badge); only the two scan-rejection states get a distinct\n// destructive badge here, everything else renders as plain text.\nconst SCAN_BADGE_VARIANT: Partial<Record<MediaObjectPublic[\"scan_status\"], \"destructive\">> = {\n infected: \"destructive\",\n quarantined: \"destructive\",\n};\n\nexport interface MediaLibraryTreeLabels {\n paneAriaLabel: string;\n columnName: string;\n columnCategory: string;\n columnStatus: string;\n columnScan: string;\n columnSize: string;\n columnCreated: string;\n loading: string;\n empty: string;\n loadMore: string;\n error: string;\n errorRetry: string;\n}\n\nconst DEFAULT_LABELS: MediaLibraryTreeLabels = {\n paneAriaLabel: \"Media categories\",\n columnName: \"Name\",\n columnCategory: \"Category\",\n columnStatus: \"Status\",\n columnScan: \"Scan\",\n columnSize: \"Size\",\n columnCreated: \"Created\",\n loading: \"Loading...\",\n empty: \"No media in this branch.\",\n loadMore: \"Load more\",\n error: \"Could not load media.\",\n errorRetry: \"Try again\",\n};\n\nexport interface MediaLibraryTreeProps {\n labels?: Partial<MediaLibraryTreeLabels>;\n /** Page size handed to `useMediaObjects`'s cursor-paginated request. */\n pageSize?: number;\n className?: string;\n}\n\n/**\n * The six results columns. Memoised on the resolved labels, so a re-render that\n * did not change the copy hands `DataTable` the same column identities.\n */\nfunction useLibraryColumns(t: MediaLibraryTreeLabels): ColumnDef<MediaObjectPublic>[] {\n return React.useMemo<ColumnDef<MediaObjectPublic>[]>(\n () => [\n {\n accessorKey: \"original_filename\",\n header: t.columnName,\n cell: ({ row }) => row.original.original_filename ?? row.original.object_key,\n },\n { accessorKey: \"category\", header: t.columnCategory },\n { accessorKey: \"status\", header: t.columnStatus },\n {\n accessorKey: \"scan_status\",\n header: t.columnScan,\n cell: ({ row }) => {\n const status = row.original.scan_status;\n const variant = SCAN_BADGE_VARIANT[status];\n return variant ? <Badge variant={variant}>{status}</Badge> : status;\n },\n },\n {\n accessorKey: \"size_bytes\",\n header: t.columnSize,\n cell: ({ row }) => formatBytes(row.original.size_bytes),\n },\n {\n accessorKey: \"created_at\",\n header: t.columnCreated,\n cell: ({ row }) => formatDate(row.original.created_at),\n },\n ],\n [t],\n );\n}\n\nexport function MediaLibraryTree({ labels, pageSize = 20, className }: MediaLibraryTreeProps) {\n // Memoised on `labels`: a fresh object each render would re-run every\n // downstream `useMemo` that reads it, including the column definitions.\n const t = React.useMemo(() => ({ ...DEFAULT_LABELS, ...labels }), [labels]);\n const [selection, setSelection] = React.useState<MediaCategorySelection>({ kind: \"all\" });\n const branchParams = React.useMemo(() => categorySelectionToListParams(selection), [selection]);\n const { items, count, loading, error, hasMore, loadMore, refresh } = useMediaObjects({\n ...branchParams,\n limit: pageSize,\n });\n\n return (\n <div className={cn(\"flex flex-col gap-6 md:flex-row\", className)}>\n <aside className=\"md:w-64 md:shrink-0\" aria-label={t.paneAriaLabel}>\n <MediaCategoryTree selection={selection} onSelectionChange={setSelection} />\n </aside>\n <div className=\"min-w-0 flex-1\">\n <LibraryResults t={t} results={{ items, count, loading, error, hasMore, loadMore, refresh }} />\n </div>\n </div>\n );\n}\n\ntype LibraryResultsState = Pick<\n ReturnType<typeof useMediaObjects>,\n \"items\" | \"count\" | \"loading\" | \"error\" | \"hasMore\" | \"loadMore\" | \"refresh\"\n>;\n\n/**\n * The results column: the table, or the error state when the first page never\n * arrived. A later page failing leaves the rows already in hand on screen.\n */\nfunction LibraryResults({ t, results }: { t: MediaLibraryTreeLabels; results: LibraryResultsState }) {\n const { items, count, loading, error, hasMore, loadMore, refresh } = results;\n const columns = useLibraryColumns(t);\n\n if (error && items.length === 0) {\n return (\n <StateError\n title={t.error}\n description={error instanceof Error && error.message ? error.message : t.error}\n retryLabel={t.errorRetry}\n onRetry={() => void refresh()}\n />\n );\n }\n\n // `useMediaObjects` is cursor-paginated (`loadMore`/`hasMore`), not the\n // page-numbered model `DataTable` was built for — rather than forking a\n // second results table, the table's page is pinned to the single page of\n // rows already loaded and \"Load more\" is handed to it as the `addButton`\n // slot, so paging further is one more cursor fetch, not a page jump.\n const loadMoreButton = hasMore ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void loadMore()} disabled={loading}>\n {t.loadMore}\n </Button>\n ) : undefined;\n\n return (\n <DataTable\n columns={columns}\n data={items}\n loading={loading && items.length === 0}\n rowCount={count}\n page={1}\n pageSize={Math.max(items.length, 1)}\n onPageChange={() => {}}\n onPageSizeChange={() => {}}\n addButton={loadMoreButton}\n labels={{ loading: t.loading, empty: t.empty }}\n getRowId={(row) => row.id}\n />\n );\n}\n",
|
|
21
|
+
"type": "registry:component",
|
|
22
|
+
"target": "components/fa-media/media-library-tree.tsx"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -12,12 +12,13 @@
|
|
|
12
12
|
"button",
|
|
13
13
|
"alert-dialog",
|
|
14
14
|
"./node_modules/@mano8/astro-ui-m8/registry/r/state-error.json",
|
|
15
|
-
"./node_modules/@mano8/astro-ui-m8/registry/r/state-unauthorized.json"
|
|
15
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/state-unauthorized.json",
|
|
16
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/toast-notification.json"
|
|
16
17
|
],
|
|
17
18
|
"files": [
|
|
18
19
|
{
|
|
19
20
|
"path": "registry/blocks/admin/media-maintenance-panel.tsx",
|
|
20
|
-
"content": "\"use client\";\n\n// Media admin \"Maintenance / Danger zone\": the destructive storage operations,\n// each behind a shadcn `alert-dialog` confirmation. Logic stays a live\n// dependency (@mano8/astro-media-m8/hooks); this file is only the shadcn skin,\n// copied into the consumer via the @fa-m8-media registry - edit freely per app.\nimport * as React from \"react\";\nimport { AlertTriangle } from \"lucide-react\";\nimport { useMediaAdmin } from \"@mano8/astro-media-m8/hooks\";\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/components/ui/alert-dialog\";\nimport { StateError } from \"@/components/m8-ui/state-error\";\nimport { StateUnauthorized } from \"@/components/m8-ui/state-unauthorized\";\n\nexport interface MediaMaintenanceLabels {\n title: string;\n subtitle: string;\n confirmTitle: string;\n cancel: string;\n confirm: string;\n running: string;\n done: string;\n error: string;\n errorRetry: string;\n unauthorizedTitle: string;\n unauthorizedDescription: string;\n purgeStaleTitle: string;\n purgeStaleDescription: string;\n repairTitle: string;\n repairDescription: string;\n purgeExpiredTitle: string;\n purgeExpiredDescription: string;\n}\n\nconst DEFAULT_LABELS: MediaMaintenanceLabels = {\n title: \"Maintenance\",\n subtitle: \"Destructive storage operations. Each action is irreversible.\",\n confirmTitle: \"Are you sure?\",\n cancel: \"Cancel\",\n confirm: \"Run\",\n running: \"Running...\",\n done: \"Done.\",\n error: \"Operation failed.\",\n errorRetry: \"Try again\",\n unauthorizedTitle: \"Administrator access required\",\n unauthorizedDescription: \"Sign in with a superuser account to run media maintenance.\",\n purgeStaleTitle: \"Purge stale uploads\",\n purgeStaleDescription:\n \"Delete upload sessions that expired before completing. Frees reserved storage keys.\",\n repairTitle: \"Repair orphans\",\n repairDescription:\n \"Reconcile DB and storage, deleting storage-orphan bytes that have no matching object record.\",\n purgeExpiredTitle: \"Purge expired (retention)\",\n purgeExpiredDescription:\n \"Hard-delete soft-deleted objects past their retention window. Cannot be undone.\",\n};\n\nexport interface MediaMaintenancePanelProps {\n labels?: Partial<MediaMaintenanceLabels>;\n}\n\ntype OpState = { status: \"idle\" | \"running\" | \"done\" | \"error\"; message?: string };\n\nfunction DangerAction({\n title,\n description,\n labels,\n run,\n}: {\n title: string;\n description: string;\n labels: MediaMaintenanceLabels;\n run: () => Promise<unknown>;\n}) {\n const [state, setState] = React.useState<OpState>({ status: \"idle\" });\n\n const onConfirm = async () => {\n setState({ status: \"running\" });\n try {\n await run();\n setState({ status: \"done\", message: labels.done });\n } catch (err) {\n
|
|
21
|
+
"content": "\"use client\";\n\n// Media admin \"Maintenance / Danger zone\": the destructive storage operations,\n// each behind a shadcn `alert-dialog` confirmation. Logic stays a live\n// dependency (@mano8/astro-media-m8/hooks); this file is only the shadcn skin,\n// copied into the consumer via the @fa-m8-media registry - edit freely per app.\nimport * as React from \"react\";\nimport { AlertTriangle } from \"lucide-react\";\nimport { useMediaAdmin } from \"@mano8/astro-media-m8/hooks\";\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/components/ui/alert-dialog\";\nimport { StateError } from \"@/components/m8-ui/state-error\";\nimport { StateUnauthorized } from \"@/components/m8-ui/state-unauthorized\";\nimport {\n ToastNotificationHost,\n toastNotification,\n} from \"@/components/m8-ui/toast-notification\";\n\n// Bottom-right toast host + helpers for media admin mutation feedback (`H7`):\n// mount the host once in the panel and call `mediaToast.success/error` from\n// each danger-zone action's own callback, matching the shared pattern already\n// used by `astro-auth-m8`'s `AccountToastHost`/`accountToast` and\n// `astro-reparto-m8`'s toast adoption.\nexport function MediaToastHost() {\n return <ToastNotificationHost position=\"bottom-right\" />;\n}\nexport const mediaToast = toastNotification;\n\nexport interface MediaMaintenanceLabels {\n title: string;\n subtitle: string;\n confirmTitle: string;\n cancel: string;\n confirm: string;\n running: string;\n done: string;\n error: string;\n errorRetry: string;\n unauthorizedTitle: string;\n unauthorizedDescription: string;\n purgeStaleTitle: string;\n purgeStaleDescription: string;\n repairTitle: string;\n repairDescription: string;\n purgeExpiredTitle: string;\n purgeExpiredDescription: string;\n}\n\nconst DEFAULT_LABELS: MediaMaintenanceLabels = {\n title: \"Maintenance\",\n subtitle: \"Destructive storage operations. Each action is irreversible.\",\n confirmTitle: \"Are you sure?\",\n cancel: \"Cancel\",\n confirm: \"Run\",\n running: \"Running...\",\n done: \"Done.\",\n error: \"Operation failed.\",\n errorRetry: \"Try again\",\n unauthorizedTitle: \"Administrator access required\",\n unauthorizedDescription: \"Sign in with a superuser account to run media maintenance.\",\n purgeStaleTitle: \"Purge stale uploads\",\n purgeStaleDescription:\n \"Delete upload sessions that expired before completing. Frees reserved storage keys.\",\n repairTitle: \"Repair orphans\",\n repairDescription:\n \"Reconcile DB and storage, deleting storage-orphan bytes that have no matching object record.\",\n purgeExpiredTitle: \"Purge expired (retention)\",\n purgeExpiredDescription:\n \"Hard-delete soft-deleted objects past their retention window. Cannot be undone.\",\n};\n\nexport interface MediaMaintenancePanelProps {\n labels?: Partial<MediaMaintenanceLabels>;\n}\n\ntype OpState = { status: \"idle\" | \"running\" | \"done\" | \"error\"; message?: string };\n\nfunction DangerAction({\n title,\n description,\n labels,\n run,\n}: {\n title: string;\n description: string;\n labels: MediaMaintenanceLabels;\n run: () => Promise<unknown>;\n}) {\n const [state, setState] = React.useState<OpState>({ status: \"idle\" });\n\n const onConfirm = async () => {\n setState({ status: \"running\" });\n try {\n await run();\n setState({ status: \"done\", message: labels.done });\n mediaToast.success({ title, description: labels.done });\n } catch (err) {\n const message = err instanceof Error ? err.message : labels.error;\n setState({ status: \"error\", message });\n mediaToast.error({ title, description: message });\n }\n };\n\n return (\n <div className=\"flex flex-col gap-3 rounded-md border p-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"min-w-0 space-y-1\">\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n </div>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"destructive\" disabled={state.status === \"running\"}>\n {state.status === \"running\" ? labels.running : labels.confirm}\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{labels.confirmTitle}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{labels.cancel}</AlertDialogCancel>\n <AlertDialogAction onClick={() => void onConfirm()}>\n {labels.confirm}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n\nexport function MediaMaintenancePanel({ labels }: MediaMaintenancePanelProps) {\n const t = { ...DEFAULT_LABELS, ...labels };\n const {\n allowed,\n error,\n purgeStale,\n repair,\n purgeExpiredObjects,\n purgeStaleMutation,\n repairMutation,\n purgeExpiredMutation,\n } = useMediaAdmin();\n\n if (!allowed) {\n return (\n <StateUnauthorized\n title={t.unauthorizedTitle}\n description={t.unauthorizedDescription}\n />\n );\n }\n\n const retryAction =\n purgeStaleMutation.status === \"error\"\n ? () => void purgeStale()\n : repairMutation.status === \"error\"\n ? () => void repair(true)\n : purgeExpiredMutation.status === \"error\"\n ? () => void purgeExpiredObjects()\n : undefined;\n\n return (\n <Card className=\"not-content border-destructive/40\">\n <MediaToastHost />\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base text-destructive\">\n <AlertTriangle className=\"size-4\" />\n {t.title}\n </CardTitle>\n <CardDescription>{t.subtitle}</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {error ? (\n <StateError\n title={t.error}\n description={error instanceof Error ? error.message : t.error}\n retryLabel={t.errorRetry}\n onRetry={retryAction}\n />\n ) : null}\n <DangerAction\n title={t.purgeStaleTitle}\n description={t.purgeStaleDescription}\n labels={t}\n run={() => purgeStale()}\n />\n <DangerAction\n title={t.repairTitle}\n description={t.repairDescription}\n labels={t}\n run={() => repair(true)}\n />\n <DangerAction\n title={t.purgeExpiredTitle}\n description={t.purgeExpiredDescription}\n labels={t}\n run={() => purgeExpiredObjects()}\n />\n </CardContent>\n </Card>\n );\n}\n",
|
|
21
22
|
"type": "registry:component",
|
|
22
23
|
"target": "components/fa-media/media-maintenance-panel.tsx"
|
|
23
24
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "media-transfer-dialog",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"title": "Media Import / Export Dialog",
|
|
6
|
+
"description": "shadcn dialog skin for the media transfer hooks. It composes astro-ui-m8's dialog-form and data-table recipes, and forwards active filters such as a selected category branch. Requires @mano8/astro-media-m8 installed.",
|
|
7
|
+
"dependencies": [
|
|
8
|
+
"@tanstack/react-table",
|
|
9
|
+
"react-hook-form",
|
|
10
|
+
"zod",
|
|
11
|
+
"@hookform/resolvers"
|
|
12
|
+
],
|
|
13
|
+
"registryDependencies": [
|
|
14
|
+
"button",
|
|
15
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/dialog-form.json",
|
|
16
|
+
"./node_modules/@mano8/astro-ui-m8/registry/r/data-table.json"
|
|
17
|
+
],
|
|
18
|
+
"files": [
|
|
19
|
+
{
|
|
20
|
+
"path": "registry/blocks/library/media-transfer-dialog.tsx",
|
|
21
|
+
"content": "\"use client\";\n\n// Import/export registry skin for consumers that use shadcn. The package's\n// runtime MediaLibrary keeps its framework-neutral panel; this copied skin\n// deliberately composes the canonical dialog-form and data-table recipes.\nimport * as React from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { z } from \"zod\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { DataTable } from \"@/components/m8-ui/data-table\";\nimport { DialogForm, useZodDialogForm } from \"@/components/m8-ui/dialog-form\";\n\nimport { useMediaTransfer } from \"@mano8/astro-media-m8/hooks\";\nimport type { ImportObjectResult, ObjectListParams } from \"@mano8/astro-media-m8/schemas\";\n\nconst transferFormSchema = z.object({\n operation: z.enum([\"export\", \"import\"]),\n exportFormat: z.enum([\"manifest\", \"archive\"]),\n importFormat: z.enum([\"manifest\", \"archive\"]),\n});\n\ntype TransferFormValues = z.infer<typeof transferFormSchema>;\n\nconst reportColumns: ColumnDef<ImportObjectResult>[] = [\n {\n accessorKey: \"filename\",\n header: \"File\",\n cell: ({ row }) => row.original.filename ?? row.original.source_id,\n },\n { accessorKey: \"status\", header: \"Status\" },\n {\n id: \"reason\",\n header: \"Reason\",\n cell: ({ row }) => row.original.message ?? row.original.reason ?? \"—\",\n },\n];\n\nexport interface MediaTransferDialogProps {\n /** The active library filters, including a selected tree branch when present. */\n filters?: ObjectListParams;\n /** Human-readable branch context shown before the export is started. */\n exportScopeLabel?: string;\n triggerLabel?: string;\n title?: string;\n}\n\ntype Transfer = ReturnType<typeof useMediaTransfer>;\n\n/** The export job's own line: a manifest download, an archive link, or progress. */\nfunction ExportStatus({ transfer }: { transfer: Transfer }) {\n const job = transfer.exportJob;\n if (!job) return null;\n if (job.status === \"completed\" && job.download_url) {\n return (\n <p role=\"status\">\n <a href={job.download_url} download>\n Download archive ({job.object_count} objects)\n </a>\n </p>\n );\n }\n return <p role=\"status\">{job.status === \"failed\" ? \"Export failed.\" : `Export ${job.status}…`}</p>;\n}\n\nfunction ExportOptions({\n form,\n transfer,\n exportScopeLabel,\n}: {\n form: ReturnType<typeof useZodDialogForm<TransferFormValues>>;\n transfer: Transfer;\n exportScopeLabel?: string;\n}) {\n return (\n <section className=\"grid gap-3\" aria-label=\"Export options\">\n {exportScopeLabel ? <p className=\"text-sm text-muted-foreground\">Scope: {exportScopeLabel}</p> : null}\n <label className=\"grid gap-1 text-sm font-medium\">\n Format\n <select className=\"rounded-md border border-input bg-background px-3 py-2\" {...form.register(\"exportFormat\")}>\n <option value=\"manifest\">Manifest (JSON)</option>\n <option value=\"archive\">Archive (ZIP)</option>\n </select>\n </label>\n {transfer.exportError ? <p role=\"alert\">Export failed.</p> : null}\n {transfer.manifest ? (\n <Button type=\"button\" variant=\"outline\" onClick={() => transfer.downloadManifest()}>\n Download manifest ({transfer.manifest.objects.length} objects)\n </Button>\n ) : null}\n <ExportStatus transfer={transfer} />\n </section>\n );\n}\n\n/** The per-object outcome table an import answers with. */\nfunction ImportReport({ transfer }: { transfer: Transfer }) {\n const report = transfer.importReport;\n if (!report) return null;\n return (\n <div className=\"grid gap-2\">\n <p role=\"status\">\n {report.created} created, {report.linked} linked, {report.skipped} skipped, {report.failed} failed.\n </p>\n <DataTable\n columns={reportColumns}\n data={report.objects}\n rowCount={report.objects.length}\n page={1}\n pageSize={Math.max(report.objects.length, 1)}\n onPageChange={() => {}}\n onPageSizeChange={() => {}}\n getRowId={(row) => row.source_id}\n labels={{ empty: \"No imported rows.\" }}\n />\n </div>\n );\n}\n\nfunction ImportOptions({\n form,\n transfer,\n onFileChange,\n}: {\n form: ReturnType<typeof useZodDialogForm<TransferFormValues>>;\n transfer: Transfer;\n onFileChange: (file: File | null) => void;\n}) {\n return (\n <section className=\"grid gap-3\" aria-label=\"Import options\">\n <label className=\"grid gap-1 text-sm font-medium\">\n Format\n <select className=\"rounded-md border border-input bg-background px-3 py-2\" {...form.register(\"importFormat\")}>\n <option value=\"manifest\">Manifest (JSON)</option>\n <option value=\"archive\">Archive (ZIP)</option>\n </select>\n </label>\n <label className=\"grid gap-1 text-sm font-medium\">\n File\n <input\n type=\"file\"\n accept={form.watch(\"importFormat\") === \"archive\" ? \".zip\" : \".json\"}\n onChange={(event) => onFileChange(event.currentTarget.files?.[0] ?? null)}\n />\n </label>\n {transfer.importError ? <p role=\"alert\">Import failed.</p> : null}\n <ImportReport transfer={transfer} />\n </section>\n );\n}\n\nexport function MediaTransferDialog({\n filters,\n exportScopeLabel,\n triggerLabel = \"Import / Export\",\n title = \"Import or export media\",\n}: MediaTransferDialogProps) {\n const [open, setOpen] = React.useState(false);\n const [importFile, setImportFile] = React.useState<File | null>(null);\n const form = useZodDialogForm<TransferFormValues>({\n schema: transferFormSchema,\n defaultValues: { operation: \"export\", exportFormat: \"manifest\", importFormat: \"manifest\" },\n });\n const operation = form.watch(\"operation\");\n const transfer = useMediaTransfer();\n\n const submit = async (values: TransferFormValues) => {\n if (values.operation === \"export\") {\n transfer.resetExport();\n await transfer.startExport(values.exportFormat, filters);\n return;\n }\n if (!importFile) return;\n await transfer.startImport(values.importFormat, importFile);\n setImportFile(null);\n };\n\n const submitting = operation === \"export\" ? transfer.exportPending : transfer.importPending;\n\n return (\n <DialogForm\n form={form}\n open={open}\n onOpenChange={setOpen}\n onSubmit={(values) => void submit(values)}\n title={title}\n description=\"Export the active media filters, or import a manifest or archive.\"\n trigger={<Button type=\"button\">{triggerLabel}</Button>}\n submitLabel={operation === \"export\" ? \"Start export\" : \"Start import\"}\n submitting={submitting}\n >\n <fieldset className=\"grid gap-2\">\n <legend className=\"text-sm font-medium\">Action</legend>\n <label className=\"flex items-center gap-2\">\n <input type=\"radio\" value=\"export\" {...form.register(\"operation\")} /> Export\n </label>\n <label className=\"flex items-center gap-2\">\n <input type=\"radio\" value=\"import\" {...form.register(\"operation\")} /> Import\n </label>\n </fieldset>\n\n {operation === \"export\" ? (\n <ExportOptions form={form} transfer={transfer} exportScopeLabel={exportScopeLabel} />\n ) : (\n <ImportOptions form={form} transfer={transfer} onFileChange={setImportFile} />\n )}\n </DialogForm>\n );\n}\n",
|
|
22
|
+
"type": "registry:component",
|
|
23
|
+
"target": "components/fa-media/media-transfer-dialog.tsx"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
package/registry/r/registry.json
CHANGED
|
@@ -26,6 +26,24 @@
|
|
|
26
26
|
"type": "registry:component",
|
|
27
27
|
"title": "Admin Media Dashboard",
|
|
28
28
|
"description": "Media admin view whose first/landing tab is the storage dashboard and whose destructive ops live in a guarded Maintenance tab; wraps the package's MediaProvider + RequireSuperuser. Requires @mano8/astro-media-m8 (and a fa-auth-m8 token adapter) installed."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "media-category-tree",
|
|
32
|
+
"type": "registry:component",
|
|
33
|
+
"title": "Media Category Tree",
|
|
34
|
+
"description": "shadcn skin over astro-ui-m8's generic tree-view for the nested user category tree, with All/Uncategorized pseudo-nodes, driven by the package's useCategoryTree hook. Requires @mano8/astro-media-m8 installed."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "media-library-tree",
|
|
38
|
+
"type": "registry:component",
|
|
39
|
+
"title": "Media Library Tree View",
|
|
40
|
+
"description": "Two-pane documents tree view: media-category-tree (left) paired with astro-ui-m8's data-table (right), scoped to the selected branch via the package's useMediaObjects hook. Requires @mano8/astro-media-m8 installed."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "media-transfer-dialog",
|
|
44
|
+
"type": "registry:component",
|
|
45
|
+
"title": "Media Import / Export Dialog",
|
|
46
|
+
"description": "shadcn dialog skin for the media transfer hooks. It composes astro-ui-m8's dialog-form and data-table recipes, and forwards active filters such as a selected category branch. Requires @mano8/astro-media-m8 installed."
|
|
29
47
|
}
|
|
30
48
|
]
|
|
31
49
|
}
|