feat(media): add media management feature module

- add `ZEN_MEDIA` env flag and document it in `.env.example`
- add media schema, server routes, and API handlers (`api.server.js`, `routes.server.js`, `schema.server.js`)
- add `MediaPage`, `MediaGrid`, `MediaFilters`, and `MediaPicker` client components
- expose `@zen/core/features/media` and `@zen/core/features/media/picker` package exports
- register media navigation and permissions; wire module into `init.js`
- document media API, client picker usage, and boundary rules in `MODULES.md` and `ARCHITECTURE.md`
- add `src/features/media/README.md`
This commit is contained in:
2026-04-26 17:07:19 -04:00
parent f5d627f324
commit c9f7b23498
20 changed files with 1674 additions and 3 deletions
+25
View File
@@ -0,0 +1,25 @@
/**
* Media Feature — Admin navigation.
*
* Side effect : enregistre la section "Contenu" et l'item "Médias" dans la
* sidebar admin si le module est activé via ZEN_MEDIA=true.
*/
// Import direct depuis le registre pour éviter une dépendance circulaire :
// admin/navigation.js → media/navigation.js → admin barrel → admin/navigation.js
import { registerNavSection, registerNavItem } from '../admin/registry.js';
import { isMediaEnabled } from '@zen/core/shared/config';
import { MEDIA_PERMISSIONS } from './permissions.js';
if (isMediaEnabled()) {
registerNavSection({ id: 'content', title: 'Contenu', icon: 'File02Icon', order: 25 });
registerNavItem({
id: 'media',
label: 'Médias',
icon: 'Image01Icon',
href: '/admin/media',
sectionId: 'content',
order: 10,
permission: MEDIA_PERMISSIONS.VIEW,
});
}