@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.
Files changed (123) hide show
  1. package/README.md +54 -11
  2. package/dist/src/integration.d.ts.map +1 -1
  3. package/dist/src/integration.js +1 -0
  4. package/dist/src/integration.js.map +1 -1
  5. package/dist/src/runtime/api/categories.d.ts +14 -8
  6. package/dist/src/runtime/api/categories.d.ts.map +1 -1
  7. package/dist/src/runtime/api/categories.js +21 -8
  8. package/dist/src/runtime/api/categories.js.map +1 -1
  9. package/dist/src/runtime/api/index.d.ts +8 -0
  10. package/dist/src/runtime/api/index.d.ts.map +1 -1
  11. package/dist/src/runtime/api/index.js +8 -0
  12. package/dist/src/runtime/api/index.js.map +1 -1
  13. package/dist/src/runtime/api/transfer.d.ts +19 -0
  14. package/dist/src/runtime/api/transfer.d.ts.map +1 -0
  15. package/dist/src/runtime/api/transfer.js +48 -0
  16. package/dist/src/runtime/api/transfer.js.map +1 -0
  17. package/dist/src/runtime/client.d.ts.map +1 -1
  18. package/dist/src/runtime/client.js +7 -1
  19. package/dist/src/runtime/client.js.map +1 -1
  20. package/dist/src/runtime/compatibility.d.ts +6 -6
  21. package/dist/src/runtime/compatibility.d.ts.map +1 -1
  22. package/dist/src/runtime/compatibility.js +59 -7
  23. package/dist/src/runtime/compatibility.js.map +1 -1
  24. package/dist/src/runtime/errors.d.ts +20 -2
  25. package/dist/src/runtime/errors.d.ts.map +1 -1
  26. package/dist/src/runtime/errors.js +53 -2
  27. package/dist/src/runtime/errors.js.map +1 -1
  28. package/dist/src/runtime/hooks/index.d.ts +2 -0
  29. package/dist/src/runtime/hooks/index.d.ts.map +1 -1
  30. package/dist/src/runtime/hooks/index.js +2 -0
  31. package/dist/src/runtime/hooks/index.js.map +1 -1
  32. package/dist/src/runtime/hooks/useMediaCategories.d.ts +30 -0
  33. package/dist/src/runtime/hooks/useMediaCategories.d.ts.map +1 -0
  34. package/dist/src/runtime/hooks/useMediaCategories.js +56 -0
  35. package/dist/src/runtime/hooks/useMediaCategories.js.map +1 -0
  36. package/dist/src/runtime/hooks/useMediaObjects.d.ts.map +1 -1
  37. package/dist/src/runtime/hooks/useMediaObjects.js +14 -2
  38. package/dist/src/runtime/hooks/useMediaObjects.js.map +1 -1
  39. package/dist/src/runtime/hooks/useMediaTransfer.d.ts +42 -0
  40. package/dist/src/runtime/hooks/useMediaTransfer.d.ts.map +1 -0
  41. package/dist/src/runtime/hooks/useMediaTransfer.js +106 -0
  42. package/dist/src/runtime/hooks/useMediaTransfer.js.map +1 -0
  43. package/dist/src/runtime/queryKeys.d.ts +2 -0
  44. package/dist/src/runtime/queryKeys.d.ts.map +1 -1
  45. package/dist/src/runtime/queryKeys.js +2 -0
  46. package/dist/src/runtime/queryKeys.js.map +1 -1
  47. package/dist/src/runtime/react/CategoryManager.d.ts +10 -0
  48. package/dist/src/runtime/react/CategoryManager.d.ts.map +1 -0
  49. package/dist/src/runtime/react/CategoryManager.js +194 -0
  50. package/dist/src/runtime/react/CategoryManager.js.map +1 -0
  51. package/dist/src/runtime/react/CategoryMultiSelect.d.ts +73 -0
  52. package/dist/src/runtime/react/CategoryMultiSelect.d.ts.map +1 -0
  53. package/dist/src/runtime/react/CategoryMultiSelect.js +179 -0
  54. package/dist/src/runtime/react/CategoryMultiSelect.js.map +1 -0
  55. package/dist/src/runtime/react/MediaCategoryTreePane.d.ts +22 -0
  56. package/dist/src/runtime/react/MediaCategoryTreePane.d.ts.map +1 -0
  57. package/dist/src/runtime/react/MediaCategoryTreePane.js +244 -0
  58. package/dist/src/runtime/react/MediaCategoryTreePane.js.map +1 -0
  59. package/dist/src/runtime/react/MediaErrorBoundary.d.ts +53 -0
  60. package/dist/src/runtime/react/MediaErrorBoundary.d.ts.map +1 -0
  61. package/dist/src/runtime/react/MediaErrorBoundary.js +58 -0
  62. package/dist/src/runtime/react/MediaErrorBoundary.js.map +1 -0
  63. package/dist/src/runtime/react/MediaLibrary.d.ts +16 -1
  64. package/dist/src/runtime/react/MediaLibrary.d.ts.map +1 -1
  65. package/dist/src/runtime/react/MediaLibrary.js +75 -110
  66. package/dist/src/runtime/react/MediaLibrary.js.map +1 -1
  67. package/dist/src/runtime/react/MediaObjectViews.d.ts +47 -0
  68. package/dist/src/runtime/react/MediaObjectViews.d.ts.map +1 -0
  69. package/dist/src/runtime/react/MediaObjectViews.js +131 -0
  70. package/dist/src/runtime/react/MediaObjectViews.js.map +1 -0
  71. package/dist/src/runtime/react/MediaTransferPanel.d.ts +17 -0
  72. package/dist/src/runtime/react/MediaTransferPanel.d.ts.map +1 -0
  73. package/dist/src/runtime/react/MediaTransferPanel.js +93 -0
  74. package/dist/src/runtime/react/MediaTransferPanel.js.map +1 -0
  75. package/dist/src/runtime/react/MediaUploadDropzone.d.ts +36 -1
  76. package/dist/src/runtime/react/MediaUploadDropzone.d.ts.map +1 -1
  77. package/dist/src/runtime/react/MediaUploadDropzone.js +63 -3
  78. package/dist/src/runtime/react/MediaUploadDropzone.js.map +1 -1
  79. package/dist/src/runtime/react/ObjectDetail.d.ts.map +1 -1
  80. package/dist/src/runtime/react/ObjectDetail.js +51 -1
  81. package/dist/src/runtime/react/ObjectDetail.js.map +1 -1
  82. package/dist/src/runtime/react/categoryBranch.d.ts +38 -0
  83. package/dist/src/runtime/react/categoryBranch.d.ts.map +1 -0
  84. package/dist/src/runtime/react/categoryBranch.js +37 -0
  85. package/dist/src/runtime/react/categoryBranch.js.map +1 -0
  86. package/dist/src/runtime/react/default-ui/index.d.ts +6 -2
  87. package/dist/src/runtime/react/default-ui/index.d.ts.map +1 -1
  88. package/dist/src/runtime/react/default-ui/index.js +14 -9
  89. package/dist/src/runtime/react/default-ui/index.js.map +1 -1
  90. package/dist/src/runtime/react/index.d.ts +5 -2
  91. package/dist/src/runtime/react/index.d.ts.map +1 -1
  92. package/dist/src/runtime/react/index.js +3 -0
  93. package/dist/src/runtime/react/index.js.map +1 -1
  94. package/dist/src/runtime/react/mediaLibraryLabels.d.ts +93 -0
  95. package/dist/src/runtime/react/mediaLibraryLabels.d.ts.map +1 -0
  96. package/dist/src/runtime/react/mediaLibraryLabels.js +100 -0
  97. package/dist/src/runtime/react/mediaLibraryLabels.js.map +1 -0
  98. package/dist/src/runtime/react/mediaLibraryStyles.d.ts +44 -0
  99. package/dist/src/runtime/react/mediaLibraryStyles.d.ts.map +1 -0
  100. package/dist/src/runtime/react/mediaLibraryStyles.js +82 -0
  101. package/dist/src/runtime/react/mediaLibraryStyles.js.map +1 -0
  102. package/dist/src/runtime/routes.d.ts +2 -0
  103. package/dist/src/runtime/routes.d.ts.map +1 -1
  104. package/dist/src/runtime/routes.js +2 -0
  105. package/dist/src/runtime/routes.js.map +1 -1
  106. package/dist/src/runtime/schemas.d.ts +265 -0
  107. package/dist/src/runtime/schemas.d.ts.map +1 -1
  108. package/dist/src/runtime/schemas.js +173 -6
  109. package/dist/src/runtime/schemas.js.map +1 -1
  110. package/dist/src/runtime/upload/uploadController.d.ts +7 -0
  111. package/dist/src/runtime/upload/uploadController.d.ts.map +1 -1
  112. package/dist/src/runtime/upload/uploadController.js +10 -5
  113. package/dist/src/runtime/upload/uploadController.js.map +1 -1
  114. package/package.json +37 -30
  115. package/registry/r/media-category-tree.json +21 -0
  116. package/registry/r/media-dashboard-overview.json +1 -1
  117. package/registry/r/media-library-tree.json +25 -0
  118. package/registry/r/media-maintenance-panel.json +3 -2
  119. package/registry/r/media-transfer-dialog.json +26 -0
  120. package/registry/r/registry.json +18 -0
  121. package/registry.json +61 -1
  122. package/src/routes/categories.astro +12 -0
  123. 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;YAuE3B,gBAAgB;YAsBhB,SAAS;CAUxB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAE/F"}
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
- throw new UploadError("api", "Failed to initiate upload", error);
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
- throw new UploadError("api", "Failed to complete upload", error);
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", `Object rejected by scan (${object.scan_status})`);
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":"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"}
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": "1.1.0",
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": "cross-env ESLINT_USE_FLAT_CONFIG=false eslint \"src/**/*.{ts,tsx}\"",
65
+ "lint": "eslint --max-warnings 0 .",
59
66
  "test:unit": "vitest run"
60
67
  },
61
68
  "dependencies": {
62
- "@mano8/astro-ui-m8": "^1.3.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": "^1.4.1",
68
- "@tanstack/react-query": "^5.101.1",
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.1",
84
- "@astrojs/starlight": "^0.41.3",
85
- "@eslint/js": "^9.39.5",
86
- "@mano8/astro-auth-m8": "^1.4.1",
87
- "@tanstack/react-query": "^5.101.1",
88
- "@types/node": "^22.0.0",
89
- "@types/react": "^19.0.0",
90
- "@typescript-eslint/eslint-plugin": "^8.65.0",
91
- "@typescript-eslint/parser": "^8.65.0",
92
- "@vitest/coverage-v8": "^4.1.9",
93
- "astro": "^7.0.9",
94
- "cross-env": "^7.0.3",
95
- "eslint": "^9.39.5",
96
- "eslint-plugin-react": "^7.37.5",
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
- "jsdom": "^29.1.1",
100
- "react": "^19.0.0",
101
- "react-dom": "^19.0.0",
102
- "typescript": "^5.8.0",
103
- "vitest": "^4.1.9",
104
- "zod": "^4.0.0"
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.1"
114
+ "esbuild": "^0.28.2"
108
115
  },
109
116
  "mediaServiceM8": {
110
- "contract": "media-service-m8@1.0",
111
- "testedServiceVersion": "1.0.0",
112
- "serviceVersionRange": ">=1.0.0 <2.0.0"
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-hooks/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 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={subscriptions?.items ?? []}\n filterColumn=\"url\"\n filterPlaceholder={t.subUrl}\n emptyMessage={t.subEmpty}\n />\n </CardContent>\n </Card>\n </div>\n );\n}\n",
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 setState({\n status: \"error\",\n message: err instanceof Error ? err.message : labels.error,\n });\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 {state.status === \"done\" ? (\n <p className=\"text-sm text-emerald-600\">{state.message}</p>\n ) : null}\n {state.status === \"error\" ? (\n <p className=\"text-sm text-destructive\" role=\"alert\">\n {state.message}\n </p>\n ) : null}\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 <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
+ "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
+ }
@@ -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
  }