@rakun-kit/manager-react 1.5.9 → 1.6.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 +366 -297
- package/dist/cjs/app/runtime-app.js +4 -1
- package/dist/cjs/app/runtime-app.js.map +1 -1
- package/dist/cjs/components/app-sidebar.js +13 -2
- package/dist/cjs/components/app-sidebar.js.map +1 -1
- package/dist/cjs/components/media/MediaLibrary.js +10 -1
- package/dist/cjs/components/media/MediaLibrary.js.map +1 -1
- package/dist/cjs/components/media/contexts/MediaLibraryContext.js +1 -1
- package/dist/cjs/components/media/contexts/MediaLibraryContext.js.map +1 -1
- package/dist/cjs/components/media/previews/MediaContextMenuContent.js +68 -15
- package/dist/cjs/components/media/previews/MediaContextMenuContent.js.map +1 -1
- package/dist/cjs/components/media/previews/Previews.js +89 -35
- package/dist/cjs/components/media/previews/Previews.js.map +1 -1
- package/dist/cjs/components/media/previews/context/MediaPreviewContext.js.map +1 -1
- package/dist/cjs/components/media/previews/dialogs/ExpandedPreviewDialog.js +7 -10
- package/dist/cjs/components/media/previews/dialogs/ExpandedPreviewDialog.js.map +1 -1
- package/dist/cjs/components/media/previews/hooks/useMediaPreviewRenderer.js +3 -1
- package/dist/cjs/components/media/previews/hooks/useMediaPreviewRenderer.js.map +1 -1
- package/dist/cjs/components/media/previews/toolbar/PreviewsToolbar.js +16 -9
- package/dist/cjs/components/media/previews/toolbar/PreviewsToolbar.js.map +1 -1
- package/dist/cjs/components/media/previews/utils/mediaDownload.js +54 -0
- package/dist/cjs/components/media/previews/utils/mediaDownload.js.map +1 -0
- package/dist/cjs/components/media/previews/views/PreviewsListView.js +1 -1
- package/dist/cjs/components/media/previews/views/PreviewsListView.js.map +1 -1
- package/dist/cjs/components/rakun-logo.js +4 -9
- package/dist/cjs/components/rakun-logo.js.map +1 -1
- package/dist/cjs/components/ui/context-menu.js +1 -1
- package/dist/cjs/components/ui/context-menu.js.map +1 -1
- package/dist/cjs/i18n/catalog.js +366 -6
- package/dist/cjs/i18n/catalog.js.map +1 -1
- package/dist/cjs/layouts.js +2 -2
- package/dist/cjs/layouts.js.map +1 -1
- package/dist/cjs/lib/media.js +1 -0
- package/dist/cjs/lib/media.js.map +1 -1
- package/dist/cjs/media.js +45 -0
- package/dist/cjs/media.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js +15 -4
- package/dist/cjs/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js +11 -6
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js +2 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js +3 -2
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js +290 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js.map +1 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js +88 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js.map +1 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js +9 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js +15 -2
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js +222 -232
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js +20 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js +27 -21
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js +25 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js.map +1 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js +10 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js +38 -11
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js +135 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js.map +1 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js +10 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js.map +1 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js +113 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js.map +1 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js +15 -2
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js +22 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js.map +1 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/shared/index.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js +2 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js +198 -0
- package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/edit.js +10 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/edit.js.map +1 -1
- package/dist/cjs/router/dashboard/[contentType]/[edit]/screen.js +2 -2
- package/dist/cjs/router/dashboard/[contentType]/[edit]/screen.js.map +1 -1
- package/dist/cjs/router/dashboard/debugging/api-routes/ApiTest.js +2 -2
- package/dist/cjs/router/dashboard/debugging/api-routes/ApiTest.js.map +1 -1
- package/dist/cjs/router/dashboard/debugging/api-routes/JsonViewer.js +17 -0
- package/dist/cjs/router/dashboard/debugging/api-routes/JsonViewer.js.map +1 -0
- package/dist/cjs/router/dashboard/debugging/api-routes/SchemaViewer.js +40 -26
- package/dist/cjs/router/dashboard/debugging/api-routes/SchemaViewer.js.map +1 -1
- package/dist/cjs/router/dashboard/debugging/api-routes/test.js +6 -5
- package/dist/cjs/router/dashboard/debugging/api-routes/test.js.map +1 -1
- package/dist/cjs/router/dashboard/seo/index.js +6 -0
- package/dist/cjs/router/dashboard/seo/index.js.map +1 -0
- package/dist/cjs/router/dashboard/seo/screen.js +219 -0
- package/dist/cjs/router/dashboard/seo/screen.js.map +1 -0
- package/dist/cjs/router/dashboard/seo/site-analysis.js +153 -0
- package/dist/cjs/router/dashboard/seo/site-analysis.js.map +1 -0
- package/dist/cjs/router/dashboard/settings/llms/index.js +6 -0
- package/dist/cjs/router/dashboard/settings/llms/index.js.map +1 -0
- package/dist/cjs/router/dashboard/settings/llms/screen.js +122 -0
- package/dist/cjs/router/dashboard/settings/llms/screen.js.map +1 -0
- package/dist/cjs/router/dashboard/settings/screen.js +7 -0
- package/dist/cjs/router/dashboard/settings/screen.js.map +1 -1
- package/dist/cjs/router/shared/route-definitions.js +3 -2
- package/dist/cjs/router/shared/route-definitions.js.map +1 -1
- package/dist/cjs/router/shared/route-list.js +19 -3
- package/dist/cjs/router/shared/route-list.js.map +1 -1
- package/dist/cjs/router/shared/route-renderer.js +2 -1
- package/dist/cjs/router/shared/route-renderer.js.map +1 -1
- package/dist/docs/index.md +294 -192
- package/dist/esm/app/runtime-app.d.ts.map +1 -1
- package/dist/esm/app/runtime-app.js +4 -1
- package/dist/esm/app/runtime-app.js.map +1 -1
- package/dist/esm/components/app-sidebar.d.ts +2 -1
- package/dist/esm/components/app-sidebar.d.ts.map +1 -1
- package/dist/esm/components/app-sidebar.js +15 -4
- package/dist/esm/components/app-sidebar.js.map +1 -1
- package/dist/esm/components/media/MediaLibrary.d.ts.map +1 -1
- package/dist/esm/components/media/MediaLibrary.js +11 -2
- package/dist/esm/components/media/MediaLibrary.js.map +1 -1
- package/dist/esm/components/media/contexts/MediaLibraryContext.d.ts +2 -0
- package/dist/esm/components/media/contexts/MediaLibraryContext.d.ts.map +1 -1
- package/dist/esm/components/media/contexts/MediaLibraryContext.js +1 -1
- package/dist/esm/components/media/contexts/MediaLibraryContext.js.map +1 -1
- package/dist/esm/components/media/previews/MediaContextMenuContent.d.ts.map +1 -1
- package/dist/esm/components/media/previews/MediaContextMenuContent.js +70 -17
- package/dist/esm/components/media/previews/MediaContextMenuContent.js.map +1 -1
- package/dist/esm/components/media/previews/Previews.d.ts.map +1 -1
- package/dist/esm/components/media/previews/Previews.js +90 -36
- package/dist/esm/components/media/previews/Previews.js.map +1 -1
- package/dist/esm/components/media/previews/context/MediaPreviewContext.d.ts +2 -0
- package/dist/esm/components/media/previews/context/MediaPreviewContext.d.ts.map +1 -1
- package/dist/esm/components/media/previews/context/MediaPreviewContext.js.map +1 -1
- package/dist/esm/components/media/previews/dialogs/ExpandedPreviewDialog.d.ts.map +1 -1
- package/dist/esm/components/media/previews/dialogs/ExpandedPreviewDialog.js +7 -10
- package/dist/esm/components/media/previews/dialogs/ExpandedPreviewDialog.js.map +1 -1
- package/dist/esm/components/media/previews/hooks/useMediaPreviewRenderer.d.ts.map +1 -1
- package/dist/esm/components/media/previews/hooks/useMediaPreviewRenderer.js +3 -1
- package/dist/esm/components/media/previews/hooks/useMediaPreviewRenderer.js.map +1 -1
- package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.d.ts +4 -1
- package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.d.ts.map +1 -1
- package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.js +17 -10
- package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.js.map +1 -1
- package/dist/esm/components/media/previews/utils/mediaDownload.d.ts +13 -0
- package/dist/esm/components/media/previews/utils/mediaDownload.d.ts.map +1 -0
- package/dist/esm/components/media/previews/utils/mediaDownload.js +49 -0
- package/dist/esm/components/media/previews/utils/mediaDownload.js.map +1 -0
- package/dist/esm/components/media/previews/views/PreviewsListView.js +1 -1
- package/dist/esm/components/media/previews/views/PreviewsListView.js.map +1 -1
- package/dist/esm/components/rakun-logo.d.ts +1 -5
- package/dist/esm/components/rakun-logo.d.ts.map +1 -1
- package/dist/esm/components/rakun-logo.js +1 -6
- package/dist/esm/components/rakun-logo.js.map +1 -1
- package/dist/esm/components/ui/context-menu.js +1 -1
- package/dist/esm/components/ui/context-menu.js.map +1 -1
- package/dist/esm/i18n/catalog.d.ts +645 -6
- package/dist/esm/i18n/catalog.d.ts.map +1 -1
- package/dist/esm/i18n/catalog.js +366 -6
- package/dist/esm/i18n/catalog.js.map +1 -1
- package/dist/esm/layouts.d.ts +3 -1
- package/dist/esm/layouts.d.ts.map +1 -1
- package/dist/esm/layouts.js +2 -2
- package/dist/esm/layouts.js.map +1 -1
- package/dist/esm/lib/media.d.ts +8 -0
- package/dist/esm/lib/media.d.ts.map +1 -1
- package/dist/esm/lib/media.js +1 -0
- package/dist/esm/lib/media.js.map +1 -1
- package/dist/esm/media.d.ts +19 -1
- package/dist/esm/media.d.ts.map +1 -1
- package/dist/esm/media.js +44 -0
- package/dist/esm/media.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/ContentTypeEdit.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js +18 -7
- package/dist/esm/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js +11 -6
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js +2 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditToolbar.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js +4 -3
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.d.ts +2 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.d.ts.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js +283 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.d.ts +10 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.d.ts.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js +83 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_context/EditPageContext.d.ts +2 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_context/EditPageContext.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js +9 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js +15 -2
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.d.ts +6 -2
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js +221 -234
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/FileField/index.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js +20 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js +27 -21
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.d.ts +4 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.d.ts +4 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.d.ts.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js +21 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js +11 -2
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js +38 -11
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.d.ts +4 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.d.ts.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js +130 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.d.ts +14 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.d.ts.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js +5 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.d.ts +23 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.d.ts.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js +103 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js +15 -2
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.d.ts +6 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.d.ts.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js +18 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js.map +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/index.d.ts +2 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/index.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/index.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js +2 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.d.ts +43 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js +198 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useRouteLayoutData.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/edit.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/edit.js +10 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/edit.js.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/edit.types.d.ts +1 -0
- package/dist/esm/router/dashboard/[contentType]/[edit]/edit.types.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/screen.d.ts +2 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/screen.d.ts.map +1 -1
- package/dist/esm/router/dashboard/[contentType]/[edit]/screen.js +2 -2
- package/dist/esm/router/dashboard/[contentType]/[edit]/screen.js.map +1 -1
- package/dist/esm/router/dashboard/debugging/api-routes/ApiTest.d.ts.map +1 -1
- package/dist/esm/router/dashboard/debugging/api-routes/ApiTest.js +2 -2
- package/dist/esm/router/dashboard/debugging/api-routes/ApiTest.js.map +1 -1
- package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.d.ts +5 -0
- package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.d.ts.map +1 -0
- package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.js +14 -0
- package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.js.map +1 -0
- package/dist/esm/router/dashboard/debugging/api-routes/SchemaViewer.d.ts.map +1 -1
- package/dist/esm/router/dashboard/debugging/api-routes/SchemaViewer.js +42 -28
- package/dist/esm/router/dashboard/debugging/api-routes/SchemaViewer.js.map +1 -1
- package/dist/esm/router/dashboard/debugging/api-routes/test.d.ts.map +1 -1
- package/dist/esm/router/dashboard/debugging/api-routes/test.js +6 -5
- package/dist/esm/router/dashboard/debugging/api-routes/test.js.map +1 -1
- package/dist/esm/router/dashboard/seo/index.d.ts +2 -0
- package/dist/esm/router/dashboard/seo/index.d.ts.map +1 -0
- package/dist/esm/router/dashboard/seo/index.js +2 -0
- package/dist/esm/router/dashboard/seo/index.js.map +1 -0
- package/dist/esm/router/dashboard/seo/screen.d.ts +6 -0
- package/dist/esm/router/dashboard/seo/screen.d.ts.map +1 -0
- package/dist/esm/router/dashboard/seo/screen.js +212 -0
- package/dist/esm/router/dashboard/seo/screen.js.map +1 -0
- package/dist/esm/router/dashboard/seo/site-analysis.d.ts +40 -0
- package/dist/esm/router/dashboard/seo/site-analysis.d.ts.map +1 -0
- package/dist/esm/router/dashboard/seo/site-analysis.js +148 -0
- package/dist/esm/router/dashboard/seo/site-analysis.js.map +1 -0
- package/dist/esm/router/dashboard/settings/llms/index.d.ts +2 -0
- package/dist/esm/router/dashboard/settings/llms/index.d.ts.map +1 -0
- package/dist/esm/router/dashboard/settings/llms/index.js +2 -0
- package/dist/esm/router/dashboard/settings/llms/index.js.map +1 -0
- package/dist/esm/router/dashboard/settings/llms/screen.d.ts +2 -0
- package/dist/esm/router/dashboard/settings/llms/screen.d.ts.map +1 -0
- package/dist/esm/router/dashboard/settings/llms/screen.js +115 -0
- package/dist/esm/router/dashboard/settings/llms/screen.js.map +1 -0
- package/dist/esm/router/dashboard/settings/screen.d.ts.map +1 -1
- package/dist/esm/router/dashboard/settings/screen.js +8 -1
- package/dist/esm/router/dashboard/settings/screen.js.map +1 -1
- package/dist/esm/router/shared/route-definitions.d.ts +6 -2
- package/dist/esm/router/shared/route-definitions.d.ts.map +1 -1
- package/dist/esm/router/shared/route-definitions.js +3 -2
- package/dist/esm/router/shared/route-definitions.js.map +1 -1
- package/dist/esm/router/shared/route-list.d.ts +1 -1
- package/dist/esm/router/shared/route-list.d.ts.map +1 -1
- package/dist/esm/router/shared/route-list.js +17 -1
- package/dist/esm/router/shared/route-list.js.map +1 -1
- package/dist/esm/router/shared/route-renderer.d.ts.map +1 -1
- package/dist/esm/router/shared/route-renderer.js +2 -1
- package/dist/esm/router/shared/route-renderer.js.map +1 -1
- package/dist/esm/router/shared/types.d.ts +5 -0
- package/dist/esm/router/shared/types.d.ts.map +1 -1
- package/dist/styles.css +237 -6
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Bug, HelpCircle, Images, Settings, User } from 'lucide-react';
|
|
2
|
+
import { Bug, ExternalLink, HelpCircle, Images, SearchCheck, Settings, User, } from 'lucide-react';
|
|
3
3
|
import { useTranslations } from '../i18n/index.js';
|
|
4
4
|
import { ManagerLink } from '../link.js';
|
|
5
5
|
import { getManagerPathHref, getManagerRelativePathname, getManagerRouteHref, } from '../state/navigation.js';
|
|
@@ -12,7 +12,7 @@ import { useManagerPlugins } from '../plugins.js';
|
|
|
12
12
|
import { getEncodedContentPermissions } from '../state/permissions.js';
|
|
13
13
|
import { useSession } from '../state/session.js';
|
|
14
14
|
import { RakunLogoMark } from './rakun-logo.js';
|
|
15
|
-
import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from './ui/sidebar.js';
|
|
15
|
+
import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuAction, SidebarMenuButton, SidebarMenuItem, } from './ui/sidebar.js';
|
|
16
16
|
const cleanPathname = (path) => {
|
|
17
17
|
const [pathname = ''] = path.split(/[?#]/);
|
|
18
18
|
return pathname.replace(/\/+$/, '') || '/';
|
|
@@ -28,6 +28,16 @@ const isActiveHref = (href, pathname, basePath) => {
|
|
|
28
28
|
return currentPath === itemPath || currentPath.startsWith(`${itemPath}/`);
|
|
29
29
|
};
|
|
30
30
|
const getDefaultSecondaryNavItems = (basePath, t) => [
|
|
31
|
+
{
|
|
32
|
+
title: t('sidebar.seo'),
|
|
33
|
+
url: getManagerPathHref('/seo', { basePath }),
|
|
34
|
+
icon: SearchCheck,
|
|
35
|
+
permissions: [
|
|
36
|
+
'content.SeoSettings.readAny',
|
|
37
|
+
'content.SeoSettings.own',
|
|
38
|
+
],
|
|
39
|
+
permissionMode: 'any',
|
|
40
|
+
},
|
|
31
41
|
{
|
|
32
42
|
title: t('sidebar.mediaLibrary'),
|
|
33
43
|
url: getManagerPathHref('/media', { basePath }),
|
|
@@ -70,6 +80,7 @@ const getDefaultSecondaryNavItems = (basePath, t) => [
|
|
|
70
80
|
'content.Redirect.readAny',
|
|
71
81
|
'content.RobotsRule.readAny',
|
|
72
82
|
'content.SeoSettings.readAny',
|
|
83
|
+
'content.LlmsSettings.readAny',
|
|
73
84
|
],
|
|
74
85
|
permissionMode: 'any',
|
|
75
86
|
},
|
|
@@ -125,7 +136,7 @@ const filterSidebarItems = (items, hasPermissions, hasAnyPermission) => items.fl
|
|
|
125
136
|
const visibleItems = filterSidebarItems(item.items, hasPermissions, hasAnyPermission);
|
|
126
137
|
return visibleItems.length > 0 ? [{ ...item, items: visibleItems }] : [];
|
|
127
138
|
});
|
|
128
|
-
export function AppSidebar({ contentTypes, pathname, basePath = '', secondaryItems, ...props }) {
|
|
139
|
+
export function AppSidebar({ contentTypes, pathname, basePath = '', siteUrl, secondaryItems, ...props }) {
|
|
129
140
|
const t = useTranslations();
|
|
130
141
|
const { hasCurrentTour, startCurrentTour } = useManagerHelp();
|
|
131
142
|
const pluginRegistry = useManagerPlugins();
|
|
@@ -180,7 +191,7 @@ export function AppSidebar({ contentTypes, pathname, basePath = '', secondaryIte
|
|
|
180
191
|
return groups;
|
|
181
192
|
}, new Map());
|
|
182
193
|
const secondaryPluginItems = pluginItems.filter((item) => (item.position ?? 'secondary') === 'secondary');
|
|
183
|
-
return (_jsxs(Sidebar, { variant: "inset", "data-tour": "manager-sidebar", ...props, children: [_jsx(SidebarHeader, { children: _jsx(SidebarMenu, { children:
|
|
194
|
+
return (_jsxs(Sidebar, { variant: "inset", "data-tour": "manager-sidebar", ...props, children: [_jsx(SidebarHeader, { children: _jsx(SidebarMenu, { children: _jsxs(SidebarMenuItem, { children: [_jsx(SidebarMenuButton, { size: "lg", asChild: true, children: _jsxs(ManagerLink, { href: basePath, children: [_jsx("div", { className: "flex aspect-square size-8 items-center justify-center rounded-lg", children: _jsx(RakunLogoMark, { className: "size-8 text-sidebar-foreground" }) }), _jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [_jsx("span", { className: "truncate font-medium", children: t('brand.name') }), _jsx("span", { className: "truncate text-xs", children: t('brand.tagline') })] })] }) }), _jsx(SidebarMenuAction, { asChild: true, children: _jsxs("a", { "aria-label": t('sidebar.visitSite'), href: siteUrl || '/', rel: "noreferrer", target: "_blank", title: t('sidebar.visitSite'), children: [_jsx(ExternalLink, {}), _jsx("span", { className: "sr-only", children: t('sidebar.visitSite') })] }) })] }) }) }), _jsxs(SidebarContent, { children: [contentTypeItems.length > 0 ? _jsx(NavMain, { items: contentTypeItems }) : null, Array.from(primaryPluginGroups, ([label, items]) => (_jsx(NavMain, { label: label, items: items }, label))), _jsx(NavSecondary, { items: filterSidebarItems([...resolvedSecondaryItems, ...secondaryPluginItems, helpItem], hasPermissions, hasAnyPermission).map((item) => ({
|
|
184
195
|
...item,
|
|
185
196
|
isActive: 'onClick' in item && item.onClick
|
|
186
197
|
? false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar.js","sourceRoot":"","sources":["../../../src/components/app-sidebar.tsx"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"app-sidebar.js","sourceRoot":"","sources":["../../../src/components/app-sidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibrary.d.ts","sourceRoot":"","sources":["../../../../src/components/media/MediaLibrary.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAmC,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAQlG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,qBAAqB,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAA;IAC9D,eAAe,CAAC,EAAE,mBAAmB,CAAA;CACtC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,SAAS,EACT,UAAkB,EAClB,QAAQ,EACR,OAAe,EACf,cAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"MediaLibrary.d.ts","sourceRoot":"","sources":["../../../../src/components/media/MediaLibrary.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAmC,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAQlG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,qBAAqB,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAA;IAC9D,eAAe,CAAC,EAAE,mBAAmB,CAAA;CACtC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,SAAS,EACT,UAAkB,EAClB,QAAQ,EACR,OAAe,EACf,cAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,EAAE,iBAAiB,2CA0NnB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { startTransition, useCallback, useState } from 'react';
|
|
3
|
+
import { startTransition, useCallback, useEffect, useState } from 'react';
|
|
4
4
|
import { useManagerClient } from '../../client/react.js';
|
|
5
5
|
import { useQuery } from '@tanstack/react-query';
|
|
6
6
|
import { toast } from 'sonner';
|
|
@@ -25,7 +25,14 @@ export default function MediaLibrary({ className, selectable = false, onSelect,
|
|
|
25
25
|
responsiveSizes: [...DEFAULT_RESPONSIVE_IMAGE_WIDTHS],
|
|
26
26
|
minBytesToOptimize: 350 * 1024,
|
|
27
27
|
previewMaxWidth: 32,
|
|
28
|
+
video: { quality: 80 },
|
|
28
29
|
});
|
|
30
|
+
const [optimizationMediaType, setOptimizationMediaType] = useState(forcedMediaTypeFilter === 'video' ? 'video' : 'image');
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (forcedMediaTypeFilter === 'image' || forcedMediaTypeFilter === 'video') {
|
|
33
|
+
setOptimizationMediaType(forcedMediaTypeFilter);
|
|
34
|
+
}
|
|
35
|
+
}, [forcedMediaTypeFilter]);
|
|
29
36
|
const [externalEditFolderRequest, setExternalEditFolderRequest] = useState(null);
|
|
30
37
|
const [externalDeleteFolderRequest, setExternalDeleteFolderRequest] = useState(null);
|
|
31
38
|
const [, setFolderRequestSeq] = useState(0);
|
|
@@ -151,9 +158,11 @@ export default function MediaLibrary({ className, selectable = false, onSelect,
|
|
|
151
158
|
setOptimizeOptions: (patch) => {
|
|
152
159
|
setLibraryOptimizeOptions((prev) => ({ ...prev, ...patch }));
|
|
153
160
|
},
|
|
161
|
+
optimizationMediaType,
|
|
162
|
+
setOptimizationMediaType,
|
|
154
163
|
};
|
|
155
164
|
return (_jsx(MediaLibraryProvider, { value: mediaLibraryContext, children: _jsxs("div", { className: cn('relative grid grid-cols-1 overflow-hidden rounded-xl border lg:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]', isModal
|
|
156
165
|
? 'h-full min-h-0 grid-rows-[auto_minmax(0,1fr)]'
|
|
157
|
-
: 'grid-rows-[auto_auto] lg:h-full lg:min-h-0 lg:grid-rows-[minmax(0,1fr)]', className), children: [_jsx(FoldersTree, { isModal: isModal }),
|
|
166
|
+
: 'grid-rows-[auto_auto] lg:h-full lg:min-h-0 lg:grid-rows-[minmax(0,1fr)]', className), children: [_jsx(FoldersTree, { isModal: isModal }), _jsx("div", { className: cn('flex min-h-0 min-w-0 flex-col overflow-hidden p-4', isModal ? 'h-full' : 'lg:h-full'), children: _jsx("div", { className: "min-h-0 flex-1", children: _jsx(Previews, {}) }) })] }) }));
|
|
158
167
|
}
|
|
159
168
|
//# sourceMappingURL=MediaLibrary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibrary.js","sourceRoot":"","sources":["../../../../src/components/media/MediaLibrary.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"MediaLibrary.js","sourceRoot":"","sources":["../../../../src/components/media/MediaLibrary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,8 @@ type MediaLibraryContextValue = {
|
|
|
41
41
|
optimizeOptions: FileOptimizeOptions;
|
|
42
42
|
setOptimizeEnabled: (value: boolean) => void;
|
|
43
43
|
setOptimizeOptions: (patch: Partial<FileOptimizeOptions>) => void;
|
|
44
|
+
optimizationMediaType: 'image' | 'video';
|
|
45
|
+
setOptimizationMediaType: (value: 'image' | 'video') => void;
|
|
44
46
|
};
|
|
45
47
|
export declare function MediaLibraryProvider({ value, children, }: {
|
|
46
48
|
value: MediaLibraryContextValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryContext.d.ts","sourceRoot":"","sources":["../../../../../src/components/media/contexts/MediaLibraryContext.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAA;AAEpE,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,KAAK,mBAAmB,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACrD,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB,gBAAgB,EAAE,OAAO,CAAA;IACzB,kBAAkB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1C,iBAAiB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAC/C,mBAAmB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IACjD,yBAAyB,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACrD,2BAA2B,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACvD,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,OAAO,CAAA;IACvB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,qBAAqB,CAAC,EAAE,eAAe,CAAA;IACvC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACvC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAA;IAClD,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;IACvB,eAAe,EAAE,mBAAmB,CAAA;IACpC,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5C,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"MediaLibraryContext.d.ts","sourceRoot":"","sources":["../../../../../src/components/media/contexts/MediaLibraryContext.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAA;AAEpE,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,KAAK,mBAAmB,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACrD,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB,gBAAgB,EAAE,OAAO,CAAA;IACzB,kBAAkB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1C,iBAAiB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAC/C,mBAAmB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IACjD,yBAAyB,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACrD,2BAA2B,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACvD,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,OAAO,CAAA;IACvB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,qBAAqB,CAAC,EAAE,eAAe,CAAA;IACvC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACvC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAA;IAClD,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;IACvB,eAAe,EAAE,mBAAmB,CAAA;IACpC,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5C,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAA;IACjE,qBAAqB,EAAE,OAAO,GAAG,OAAO,CAAA;IACxC,wBAAwB,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,KAAK,IAAI,CAAA;CAC7D,CAAA;AAID,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,wBAAwB,CAAA;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,2CAEA;AAED,wBAAgB,eAAe,6BAM9B"}
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { createContext, useContext } from 'react';
|
|
4
4
|
const MediaLibraryContext = createContext(null);
|
|
5
5
|
export function MediaLibraryProvider({ value, children, }) {
|
|
6
|
-
return
|
|
6
|
+
return _jsx(MediaLibraryContext.Provider, { value: value, children: children });
|
|
7
7
|
}
|
|
8
8
|
export function useMediaLibrary() {
|
|
9
9
|
const context = useContext(MediaLibraryContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryContext.js","sourceRoot":"","sources":["../../../../../src/components/media/contexts/MediaLibraryContext.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"MediaLibraryContext.js","sourceRoot":"","sources":["../../../../../src/components/media/contexts/MediaLibraryContext.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAsDjD,MAAM,mBAAmB,GAAG,aAAa,CAAkC,IAAI,CAAC,CAAA;AAEhF,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,GAIT;IACC,OAAO,KAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAgC,CAAA;AAC9F,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;IAC/E,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContextMenuContent.d.ts","sourceRoot":"","sources":["../../../../../src/components/media/previews/MediaContextMenuContent.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MediaContextMenuContent.d.ts","sourceRoot":"","sources":["../../../../../src/components/media/previews/MediaContextMenuContent.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAA;AAEjF,KAAK,4BAA4B,GAAG;IAClC,IAAI,EAAE,WAAW,GAAG,UAAU,CAAA;CAC/B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,IAAI,GACL,EAAE,4BAA4B,2CA8L9B"}
|
|
@@ -1,31 +1,84 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { Check, Crop, FolderInput, LoaderCircle, Pencil, RefreshCw, Trash2, } from 'lucide-react';
|
|
4
|
-
import {
|
|
3
|
+
import { Check, Crop, Download, FolderInput, ImageUp, LoaderCircle, Pencil, RefreshCw, Trash2, } from 'lucide-react';
|
|
4
|
+
import { toast } from 'sonner';
|
|
5
|
+
import { ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, } from '../../ui/context-menu.js';
|
|
5
6
|
import { useMediaPreview } from './context/MediaPreviewContext.js';
|
|
7
|
+
import { getMediaDownloadAssets, getMediaDownloadFileName, } from './utils/mediaDownload.js';
|
|
8
|
+
import { useManagerClient } from '../../../client/react.js';
|
|
6
9
|
import { useTranslations } from '../../../i18n/index.js';
|
|
7
10
|
export default function MediaContextMenuContent({ item, }) {
|
|
8
11
|
const t = useTranslations();
|
|
9
|
-
const
|
|
12
|
+
const managerClient = useManagerClient();
|
|
13
|
+
const { canBulkSelect, bulkSelectedIds, bulkSelectedCount, onRequestSelect, onRequestEdit, onRequestImageEdit, isReplacing, onRequestReplace, canReimportWithOptimization, isReimporting, onRequestReimport, onRequestBulkReimport, onRequestMove, onRequestDelete, formatFileSize, } = useMediaPreview();
|
|
10
14
|
const isMediaItem = '_type' in item && item._type === 'Media';
|
|
11
15
|
const isImageItem = isMediaItem && item.mime.startsWith('image/');
|
|
12
|
-
const
|
|
16
|
+
const isOptimizableItem = isMediaItem &&
|
|
17
|
+
(item.mime.startsWith('image/') || item.mime.startsWith('video/'));
|
|
18
|
+
const selectedOptimizableCount = isMediaItem && bulkSelectedIds.has(item._id)
|
|
13
19
|
? Math.max(bulkSelectedCount, 1)
|
|
14
20
|
: 1;
|
|
15
|
-
const reimportSelected =
|
|
21
|
+
const reimportSelected = isOptimizableItem &&
|
|
22
|
+
selectedOptimizableCount > 1 &&
|
|
23
|
+
bulkSelectedIds.has(item._id);
|
|
24
|
+
const downloadAssets = isMediaItem ? getMediaDownloadAssets(item) : [];
|
|
25
|
+
const startDownload = (url, fileName, openInNewTab = false) => {
|
|
26
|
+
const anchor = document.createElement('a');
|
|
27
|
+
anchor.href = url;
|
|
28
|
+
anchor.download = fileName;
|
|
29
|
+
anchor.rel = 'noopener';
|
|
30
|
+
if (openInNewTab)
|
|
31
|
+
anchor.target = '_blank';
|
|
32
|
+
anchor.style.display = 'none';
|
|
33
|
+
document.body.append(anchor);
|
|
34
|
+
anchor.click();
|
|
35
|
+
anchor.remove();
|
|
36
|
+
};
|
|
37
|
+
const downloadAsset = async (asset) => {
|
|
38
|
+
if (!isMediaItem)
|
|
39
|
+
return;
|
|
40
|
+
try {
|
|
41
|
+
const resolvedUrl = item.access === 'public' && asset.url
|
|
42
|
+
? asset.url
|
|
43
|
+
: (await managerClient.request('manager.media.getUrl', {
|
|
44
|
+
key: asset.key,
|
|
45
|
+
access: item.access,
|
|
46
|
+
})).url;
|
|
47
|
+
const fileName = getMediaDownloadFileName(item, asset);
|
|
48
|
+
let response;
|
|
49
|
+
try {
|
|
50
|
+
response = await fetch(resolvedUrl);
|
|
51
|
+
}
|
|
52
|
+
catch (_) {
|
|
53
|
+
startDownload(resolvedUrl, fileName, true);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (!response.ok)
|
|
57
|
+
throw new Error(`Download failed with status ${response.status}`);
|
|
58
|
+
const objectUrl = URL.createObjectURL(await response.blob());
|
|
59
|
+
startDownload(objectUrl, fileName);
|
|
60
|
+
window.setTimeout(() => URL.revokeObjectURL(objectUrl), 1000);
|
|
61
|
+
}
|
|
62
|
+
catch (_) {
|
|
63
|
+
toast.error(t('media.downloadError'));
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const formatDownloadAsset = (asset) => {
|
|
67
|
+
const format = asset.mime.split('/').pop()?.toUpperCase() || asset.mime;
|
|
68
|
+
const dimensions = asset.width && asset.height ? `${asset.width}×${asset.height}` : undefined;
|
|
69
|
+
return [format, dimensions, formatFileSize(asset.size)].filter(Boolean).join(' · ');
|
|
70
|
+
};
|
|
16
71
|
return (_jsxs(ContextMenuContent, { children: [isMediaItem && canBulkSelect ? (_jsxs(_Fragment, { children: [_jsxs(ContextMenuItem, { onSelect: () => onRequestSelect(item), children: [_jsx(Check, { className: 'size-4' }), bulkSelectedIds.has(item._id)
|
|
17
72
|
? t('common.deselect')
|
|
18
|
-
: t('common.select')] }), _jsx(ContextMenuSeparator, {})] })) : null, _jsxs(ContextMenuItem, { onSelect: () => onRequestEdit?.(item), children: [_jsx(Pencil, { className: 'size-4' }), t('common.edit')] }), isImageItem ? (_jsxs(_Fragment, { children: [_jsxs(ContextMenuItem, { onSelect: () => onRequestImageEdit(item), children: [_jsx(Crop, { className: 'size-4' }), t('media.cropAndRotate')] }), _jsxs(ContextMenuItem, { disabled: !canReimportWithOptimization ||
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}, children: [
|
|
28
|
-
? t('media.enableOptimizationToReimport')
|
|
29
|
-
: t('media.reimportConfirm')] })] })) : null, isMediaItem ? (_jsxs(_Fragment, { children: [_jsxs(ContextMenuItem, { onSelect: () => onRequestMove(item), children: [_jsx(FolderInput, { className: 'size-4' }), t('media.moveToFolder')] }), _jsx(ContextMenuSeparator, {})] })) : null, _jsxs(ContextMenuItem, { variant: 'destructive', onSelect: () => onRequestDelete?.(item), children: [_jsx(Trash2, { className: 'size-4' }), t('common.delete')] })] }));
|
|
73
|
+
: t('common.select')] }), _jsx(ContextMenuSeparator, {})] })) : null, _jsxs(ContextMenuItem, { onSelect: () => onRequestEdit?.(item), children: [_jsx(Pencil, { className: 'size-4' }), t('common.edit')] }), isImageItem ? (_jsxs(_Fragment, { children: [_jsxs(ContextMenuItem, { onSelect: () => onRequestImageEdit(item), children: [_jsx(Crop, { className: 'size-4' }), t('media.cropAndRotate')] }), _jsxs(ContextMenuItem, { disabled: isReplacing(item._id), onSelect: () => onRequestReplace(item), children: [isReplacing(item._id) ? (_jsx(LoaderCircle, { className: 'size-4 animate-spin' })) : (_jsx(ImageUp, { className: 'size-4' })), t('media.replaceImage')] })] })) : null, downloadAssets.length > 1 ? (_jsxs(ContextMenuSub, { children: [_jsxs(ContextMenuSubTrigger, { children: [_jsx(Download, { className: 'size-4' }), t('common.download')] }), _jsx(ContextMenuSubContent, { children: downloadAssets.map((asset) => (_jsxs(ContextMenuItem, { onSelect: () => void downloadAsset(asset), children: [_jsx(Download, { className: 'size-4' }), formatDownloadAsset(asset)] }, asset.key || asset.url))) })] })) : downloadAssets[0] ? (_jsxs(ContextMenuItem, { onSelect: () => void downloadAsset(downloadAssets[0]), children: [_jsx(Download, { className: 'size-4' }), t('common.download')] })) : null, isOptimizableItem ? (_jsxs(ContextMenuItem, { disabled: !canReimportWithOptimization ||
|
|
74
|
+
(reimportSelected ? false : isReimporting(item._id)), onSelect: () => {
|
|
75
|
+
if (reimportSelected) {
|
|
76
|
+
onRequestBulkReimport();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
onRequestReimport(item);
|
|
80
|
+
}, children: [isReimporting(item._id) ? (_jsx(LoaderCircle, { className: 'size-4 animate-spin' })) : (_jsx(RefreshCw, { className: 'size-4' })), !canReimportWithOptimization
|
|
81
|
+
? t('media.enableOptimizationToReimport')
|
|
82
|
+
: t('media.reimportConfirm')] })) : null, isMediaItem ? (_jsxs(_Fragment, { children: [_jsxs(ContextMenuItem, { onSelect: () => onRequestMove(item), children: [_jsx(FolderInput, { className: 'size-4' }), t('media.moveToFolder')] }), _jsx(ContextMenuSeparator, {})] })) : null, _jsxs(ContextMenuItem, { variant: 'destructive', onSelect: () => onRequestDelete?.(item), children: [_jsx(Trash2, { className: 'size-4' }), t('common.delete')] })] }));
|
|
30
83
|
}
|
|
31
84
|
//# sourceMappingURL=MediaContextMenuContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaContextMenuContent.js","sourceRoot":"","sources":["../../../../../src/components/media/previews/MediaContextMenuContent.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACL,KAAK,EACL,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,MAAM,EACN,SAAS,EACT,MAAM,GACP,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"MediaContextMenuContent.js","sourceRoot":"","sources":["../../../../../src/components/media/previews/MediaContextMenuContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Previews.d.ts","sourceRoot":"","sources":["../../../../../src/components/media/previews/Previews.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Previews.d.ts","sourceRoot":"","sources":["../../../../../src/components/media/previews/Previews.tsx"],"names":[],"mappings":"AAoFA,MAAM,CAAC,OAAO,UAAU,QAAQ,4CAwlC/B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Folder, FolderPlus, Upload, X } from 'lucide-react';
|
|
4
|
-
import { startTransition, useCallback, useDeferredValue, useEffect, useMemo, useState, } from 'react';
|
|
4
|
+
import { startTransition, useCallback, useDeferredValue, useEffect, useMemo, useRef, useState, } from 'react';
|
|
5
5
|
import { keepPreviousData, useQueryClient } from '@tanstack/react-query';
|
|
6
6
|
import { createManagerQueryKey, useManagerClient, useManagerMutation, useManagerQuery, } from '../../../client/react.js';
|
|
7
7
|
import { toast } from 'sonner';
|
|
@@ -39,7 +39,7 @@ export default function Previews() {
|
|
|
39
39
|
const t = useTranslations();
|
|
40
40
|
const managerClient = useManagerClient();
|
|
41
41
|
const queryClient = useQueryClient();
|
|
42
|
-
const { uploadMedia } = useMedia();
|
|
42
|
+
const { uploadMedia, replaceMedia } = useMedia();
|
|
43
43
|
const { currentFolderId, currentFolderPath, setCurrentFolderId, folders, onCreateFolder, refetchFoldersTree, forcedMediaTypeFilter, externalEditFolderRequest, externalDeleteFolderRequest, selectable, selectedMediaIds, onSelect, onUpload, optimizeEnabled, optimizeOptions, isModal, } = useMediaLibrary();
|
|
44
44
|
const [viewMode, setViewMode] = useState('grid-sm');
|
|
45
45
|
const [mediaTypeFilter, setMediaTypeFilter] = useState('all');
|
|
@@ -64,6 +64,9 @@ export default function Previews() {
|
|
|
64
64
|
const [isBulkDeleting, setIsBulkDeleting] = useState(false);
|
|
65
65
|
const [isMoving, setIsMoving] = useState(false);
|
|
66
66
|
const [reimportingIds, setReimportingIds] = useState(() => new Set());
|
|
67
|
+
const [replacingId, setReplacingId] = useState(null);
|
|
68
|
+
const replaceInputRef = useRef(null);
|
|
69
|
+
const replaceTargetRef = useRef(null);
|
|
67
70
|
const getMediaQueryFilter = (folderId, mediaType, search) => {
|
|
68
71
|
const folderFilter = folderId ? { 'folder._id': folderId } : { folder: { $exists: false } };
|
|
69
72
|
let typeAndFolderFilter;
|
|
@@ -449,6 +452,54 @@ export default function Previews() {
|
|
|
449
452
|
toast.error(error instanceof Error ? error.message : t('media.openImageEditorError'));
|
|
450
453
|
}
|
|
451
454
|
};
|
|
455
|
+
const onRequestReplace = (item) => {
|
|
456
|
+
if (!item.mime.startsWith('image/') || replacingId)
|
|
457
|
+
return;
|
|
458
|
+
replaceTargetRef.current = item;
|
|
459
|
+
replaceInputRef.current?.click();
|
|
460
|
+
};
|
|
461
|
+
const handleReplacementFileChange = (event) => {
|
|
462
|
+
const file = event.target.files?.[0];
|
|
463
|
+
const target = replaceTargetRef.current;
|
|
464
|
+
event.target.value = '';
|
|
465
|
+
if (!file || !target)
|
|
466
|
+
return;
|
|
467
|
+
if (!file.type.startsWith('image/')) {
|
|
468
|
+
toast.error(t('media.replaceImageInvalidFile'));
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
void confirm({
|
|
472
|
+
title: t('media.replaceImageTitle'),
|
|
473
|
+
description: t('media.replaceImageDescription', {
|
|
474
|
+
name: target.name,
|
|
475
|
+
fileName: file.name,
|
|
476
|
+
}),
|
|
477
|
+
confirmLabel: t('media.replaceImageConfirm'),
|
|
478
|
+
onConfirm: async () => {
|
|
479
|
+
try {
|
|
480
|
+
setReplacingId(target._id);
|
|
481
|
+
await replaceMedia({
|
|
482
|
+
id: target._id,
|
|
483
|
+
file,
|
|
484
|
+
access: target.access,
|
|
485
|
+
optimizeOptions: optimizeEnabled ? optimizeOptions : undefined,
|
|
486
|
+
});
|
|
487
|
+
await refetch();
|
|
488
|
+
toast.success(t('media.imageReplaced'));
|
|
489
|
+
}
|
|
490
|
+
catch (error) {
|
|
491
|
+
toast.error(t('media.replaceImageError', {
|
|
492
|
+
reason: getActionErrorMessage(error),
|
|
493
|
+
}));
|
|
494
|
+
throw error;
|
|
495
|
+
}
|
|
496
|
+
finally {
|
|
497
|
+
setReplacingId(null);
|
|
498
|
+
replaceTargetRef.current = null;
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
});
|
|
502
|
+
};
|
|
452
503
|
const handleSaveImageEdit = async (file) => {
|
|
453
504
|
if (!imageEditTarget)
|
|
454
505
|
return;
|
|
@@ -496,9 +547,7 @@ export default function Previews() {
|
|
|
496
547
|
toast.success(t('media.imageDetailsSaved'));
|
|
497
548
|
}
|
|
498
549
|
catch (error) {
|
|
499
|
-
toast.error(error instanceof Error
|
|
500
|
-
? error.message
|
|
501
|
-
: t('media.saveImageDetailsError'));
|
|
550
|
+
toast.error(error instanceof Error ? error.message : t('media.saveImageDetailsError'));
|
|
502
551
|
}
|
|
503
552
|
};
|
|
504
553
|
const onRequestMove = (item) => {
|
|
@@ -510,14 +559,15 @@ export default function Previews() {
|
|
|
510
559
|
setDestinationFolderId(item.folder?._id ?? ROOT_FOLDER_VALUE);
|
|
511
560
|
};
|
|
512
561
|
const onRequestReimport = (item) => {
|
|
513
|
-
if (!optimizeEnabled || !item.mime.startsWith('image/'))
|
|
562
|
+
if (!optimizeEnabled || (!item.mime.startsWith('image/') && !item.mime.startsWith('video/')))
|
|
514
563
|
return;
|
|
515
|
-
const
|
|
516
|
-
|
|
517
|
-
|
|
564
|
+
const selectedMedia = media.filter((mediaItem) => bulkSelectedIds.has(mediaItem._id) &&
|
|
565
|
+
(mediaItem.mime.startsWith('image/') || mediaItem.mime.startsWith('video/')));
|
|
566
|
+
if (selectedMedia.length > 1 && bulkSelectedIds.has(item._id)) {
|
|
567
|
+
void reimportMedia(selectedMedia);
|
|
518
568
|
return;
|
|
519
569
|
}
|
|
520
|
-
void
|
|
570
|
+
void reimportMedia([item]);
|
|
521
571
|
};
|
|
522
572
|
const onRequestSelect = (item) => {
|
|
523
573
|
if (!canBulkSelect)
|
|
@@ -538,24 +588,23 @@ export default function Previews() {
|
|
|
538
588
|
const onRequestBulkReimport = () => {
|
|
539
589
|
if (!optimizeEnabled)
|
|
540
590
|
return;
|
|
541
|
-
const
|
|
542
|
-
|
|
543
|
-
|
|
591
|
+
const selectedMedia = media.filter((item) => bulkSelectedIds.has(item._id) &&
|
|
592
|
+
(item.mime.startsWith('image/') || item.mime.startsWith('video/')));
|
|
593
|
+
if (selectedMedia.length === 0) {
|
|
594
|
+
toast.error(t('media.bulkReimportNoMedia'));
|
|
544
595
|
return;
|
|
545
596
|
}
|
|
546
|
-
void
|
|
597
|
+
void reimportMedia(selectedMedia);
|
|
547
598
|
};
|
|
548
|
-
const
|
|
599
|
+
const reimportMedia = (items) => {
|
|
549
600
|
void confirm({
|
|
550
|
-
title:
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
? t('media.reimportDescription', { name: images[0]?.name ?? '' })
|
|
555
|
-
: t('media.bulkReimportDescription', { count: images.length }),
|
|
601
|
+
title: items.length === 1 ? t('media.reimportTitle') : t('media.bulkReimportTitle'),
|
|
602
|
+
description: items.length === 1
|
|
603
|
+
? t('media.reimportDescription', { name: items[0]?.name ?? '' })
|
|
604
|
+
: t('media.bulkReimportDescription', { count: items.length }),
|
|
556
605
|
confirmLabel: t('media.reimportConfirm'),
|
|
557
606
|
onConfirm: async () => {
|
|
558
|
-
const ids =
|
|
607
|
+
const ids = items.map((item) => item._id);
|
|
559
608
|
setReimportingIds((current) => {
|
|
560
609
|
const next = new Set(current);
|
|
561
610
|
for (const id of ids)
|
|
@@ -566,11 +615,14 @@ export default function Previews() {
|
|
|
566
615
|
let failedCount = 0;
|
|
567
616
|
let lastError;
|
|
568
617
|
try {
|
|
569
|
-
for (const item of
|
|
618
|
+
for (const item of items) {
|
|
570
619
|
try {
|
|
571
620
|
await managerClient.request('manager.media.reimport', {
|
|
572
621
|
id: item._id,
|
|
573
|
-
optimizeOptions
|
|
622
|
+
optimizeOptions: {
|
|
623
|
+
...optimizeOptions,
|
|
624
|
+
video: optimizeOptions.video ?? { quality: 80 },
|
|
625
|
+
},
|
|
574
626
|
});
|
|
575
627
|
successCount += 1;
|
|
576
628
|
}
|
|
@@ -582,7 +634,7 @@ export default function Previews() {
|
|
|
582
634
|
if (successCount > 0) {
|
|
583
635
|
await refetch();
|
|
584
636
|
clearBulkSelection();
|
|
585
|
-
toast.success(
|
|
637
|
+
toast.success(items.length === 1
|
|
586
638
|
? t('media.reimported')
|
|
587
639
|
: t('media.bulkReimported', { count: successCount }));
|
|
588
640
|
}
|
|
@@ -698,6 +750,8 @@ export default function Previews() {
|
|
|
698
750
|
onClearSelection: clearBulkSelection,
|
|
699
751
|
onRequestEdit,
|
|
700
752
|
onRequestImageEdit,
|
|
753
|
+
isReplacing: (id) => replacingId === id,
|
|
754
|
+
onRequestReplace,
|
|
701
755
|
canReimportWithOptimization: optimizeEnabled,
|
|
702
756
|
isReimporting: (id) => reimportingIds.has(id),
|
|
703
757
|
onRequestReimport,
|
|
@@ -730,6 +784,8 @@ export default function Previews() {
|
|
|
730
784
|
clearBulkSelection,
|
|
731
785
|
onRequestEdit,
|
|
732
786
|
onRequestImageEdit,
|
|
787
|
+
replacingId,
|
|
788
|
+
onRequestReplace,
|
|
733
789
|
optimizeEnabled,
|
|
734
790
|
reimportingIds,
|
|
735
791
|
onRequestReimport,
|
|
@@ -737,21 +793,19 @@ export default function Previews() {
|
|
|
737
793
|
onRequestDelete,
|
|
738
794
|
renderPreview,
|
|
739
795
|
]);
|
|
740
|
-
return (_jsx("div", { className: cn('flex min-h-0 w-full flex-col', isModal ? 'h-full overflow-hidden' : 'h-auto max-lg:h-auto lg:h-full'), children: _jsxs(MediaPreviewProvider, { value: mediaPreviewContextValue, children: [
|
|
741
|
-
setIsCreateFolderDialogOpen(true);
|
|
742
|
-
}, children: [_jsx(FolderPlus, { className: "size-4" }), _jsx("span", { className: "truncate", children: t('media.createFolder') })] }), showChildFoldersSkeleton
|
|
743
|
-
? Array.from({ length: 4 }).map((_, index) => (_jsxs("div", { className: "flex items-center gap-2 rounded-lg border bg-card p-2", children: [_jsx(Skeleton, { className: "h-7 w-7 rounded-md" }), _jsx(Skeleton, { className: "h-4 flex-1" })] }, `child-folder-skeleton-${index}`)))
|
|
744
|
-
: childFoldersData?.items?.length
|
|
745
|
-
? childFoldersData.items.map((folder) => (_jsxs(ContextMenu, { children: [_jsx(ContextMenuTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", size: "lg", className: "justify-start data-[state=open]:bg-accent/60 data-[state=open]:ring-1 data-[state=open]:ring-primary/30", onClick: () => setCurrentFolderId(folder._id), children: [_jsx(Folder, { className: "size-4" }), _jsx("span", { className: "truncate", children: folder.name })] }) }), _jsx(MediaContextMenuContent, { item: folder })] }, folder._id)))
|
|
746
|
-
: null] }), _jsxs(FileUpload, { value: files, onValueChange: setFiles, onUpload: handleUpload, onFileReject: onFileReject, maxFiles: 20, className: cn('relative flex min-h-0 w-full flex-1 flex-col p-1', isModal
|
|
796
|
+
return (_jsx("div", { className: cn('flex min-h-0 w-full flex-col', isModal ? 'h-full overflow-hidden' : 'h-auto max-lg:h-auto lg:h-full'), children: _jsxs(MediaPreviewProvider, { value: mediaPreviewContextValue, children: [_jsx("input", { ref: replaceInputRef, type: "file", accept: "image/*", className: "hidden", tabIndex: -1, onChange: handleReplacementFileChange }), _jsxs(FileUpload, { value: files, onValueChange: setFiles, onUpload: handleUpload, onFileReject: onFileReject, maxFiles: 20, className: cn('relative flex min-h-0 w-full flex-1 flex-col p-1', isModal
|
|
747
797
|
? 'overflow-hidden'
|
|
748
|
-
: 'max-lg:h-auto max-lg:overflow-visible lg:overflow-hidden'), multiple: true, disabled: isUploading, children: [_jsxs("div", { className: "shrink-0 space-y-3", children: [_jsx(PreviewsToolbar, {
|
|
798
|
+
: 'max-lg:h-auto max-lg:overflow-visible lg:overflow-hidden'), multiple: true, disabled: isUploading, children: [_jsxs("div", { className: "shrink-0 space-y-3", children: [_jsx(PreviewsToolbar, { children: _jsxs("div", { className: "flex w-full flex-wrap gap-2 p-1", "data-tour": "media-folders", children: [_jsxs(Button, { variant: "outline", disabled: isCreatingFolder, size: "lg", className: "justify-start", onClick: () => {
|
|
799
|
+
setIsCreateFolderDialogOpen(true);
|
|
800
|
+
}, children: [_jsx(FolderPlus, { className: "size-4" }), _jsx("span", { className: "truncate", children: t('media.createFolder') })] }), showChildFoldersSkeleton
|
|
801
|
+
? Array.from({ length: 4 }).map((_, index) => (_jsxs("div", { className: "flex items-center gap-2 rounded-lg border bg-card p-2", children: [_jsx(Skeleton, { className: "h-7 w-7 rounded-md" }), _jsx(Skeleton, { className: "h-4 flex-1" })] }, `child-folder-skeleton-${index}`)))
|
|
802
|
+
: childFoldersData?.items?.length
|
|
803
|
+
? childFoldersData.items.map((folder) => (_jsxs(ContextMenu, { children: [_jsx(ContextMenuTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", size: "lg", className: "justify-start data-[state=open]:bg-accent/60 data-[state=open]:ring-1 data-[state=open]:ring-primary/30", onClick: () => setCurrentFolderId(folder._id), children: [_jsx(Folder, { className: "size-4" }), _jsx("span", { className: "truncate", children: folder.name })] }) }), _jsx(MediaContextMenuContent, { item: folder })] }, folder._id)))
|
|
804
|
+
: null] }) }), _jsx(FileUploadList, { children: files.map((file) => (_jsxs(FileUploadItem, { value: file, children: [_jsx(FileUploadItemPreview, {}), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(FileUploadItemMetadata, {}), _jsx(FileUploadItemProgress, { className: "mt-2" })] }), _jsx(FileUploadItemDelete, { className: "rounded-md p-1 hover:bg-accent/40", children: _jsx(X, { className: "size-4" }) })] }, file.name + file.lastModified))) })] }), _jsx(FileUploadDropzone, { asChild: true, tabIndex: -1, onClick: (event) => event.preventDefault(), className: cn('group/dropzone relative min-h-0 w-full flex-1 items-stretch justify-start gap-0 rounded-xl border border-transparent p-0 hover:bg-transparent! focus-visible:bg-transparent! data-dragging:border-primary/40 data-dragging:bg-transparent!', isModal
|
|
749
805
|
? 'overflow-hidden'
|
|
750
806
|
: 'max-lg:flex-none max-lg:overflow-visible lg:overflow-hidden'), children: _jsxs("div", { className: cn('relative min-h-0 w-full items-stretch justify-start overflow-x-hidden p-1', isModal
|
|
751
807
|
? 'overflow-y-auto overscroll-contain scrollbar-thin'
|
|
752
|
-
: 'max-lg:overflow-y-visible lg:overflow-y-auto lg:overscroll-contain lg:scrollbar-thin'), "data-tour": "media-grid", children: [_jsx("div", { className: "pointer-events-none absolute inset-0 z-20 flex items-center justify-center rounded-xl bg-background/50 opacity-0 backdrop-blur transition-opacity duration-200 ease-out group-data-dragging/dropzone:opacity-100", children: _jsxs("div", { className: "flex flex-col items-center gap-1 text-center", children: [_jsx("div", { className: "flex items-center justify-center rounded-full border p-2.5", children: _jsx(Upload, { className: "size-6 text-muted-foreground" }) }), _jsx("p", { className: "font-medium text-sm", children: t('media.dragDropFiles') }), _jsx("p", { className: "text-muted-foreground text-xs", children: t('media.uploadLimits') })] }) }), showMediaSkeleton ? _jsx(PreviewsViewLoader, { viewMode: viewMode }) : null, !showMediaSkeleton && media.length === 0 ? (_jsx(Card, { className: "w-full p-8 text-center text-muted-foreground text-sm", children: trimmedSearch
|
|
753
|
-
? t('media.noSearchResults')
|
|
754
|
-
: t('media.emptyFolder') })) : null, !showMediaSkeleton && media.length > 0 ? _jsx(ViewComponent, { media: media }) : null, _jsx(PreviewsSelectionToolbar, {})] }) })] }), _jsx(MediaDeleteDialog, { target: deleteTarget, isLoading: deleteMutation.isPending || deleteFolderMutation.isPending, onClose: () => setDeleteTarget(null), onConfirm: handleConfirmDelete }), _jsx(MediaEditDialog, { target: editTarget, value: editName, isLoading: updateMutation.isPending, onValueChange: setEditName, onClose: () => setEditTarget(null), onConfirm: handleConfirmEdit }), _jsx(MediaMoveDialog, { target: moveTarget, folders: folderOptions, value: destinationFolderId, isLoading: isMoving || updateMutation.isPending, onValueChange: setDestinationFolderId, onClose: () => {
|
|
808
|
+
: 'max-lg:overflow-y-visible lg:overflow-y-auto lg:overscroll-contain lg:scrollbar-thin'), "data-tour": "media-grid", children: [_jsx("div", { className: "pointer-events-none absolute inset-0 z-20 flex items-center justify-center rounded-xl bg-background/50 opacity-0 backdrop-blur transition-opacity duration-200 ease-out group-data-dragging/dropzone:opacity-100", children: _jsxs("div", { className: "flex flex-col items-center gap-1 text-center", children: [_jsx("div", { className: "flex items-center justify-center rounded-full border p-2.5", children: _jsx(Upload, { className: "size-6 text-muted-foreground" }) }), _jsx("p", { className: "font-medium text-sm", children: t('media.dragDropFiles') }), _jsx("p", { className: "text-muted-foreground text-xs", children: t('media.uploadLimits') })] }) }), showMediaSkeleton ? _jsx(PreviewsViewLoader, { viewMode: viewMode }) : null, !showMediaSkeleton && media.length === 0 ? (_jsx(Card, { className: "w-full p-8 text-center text-muted-foreground text-sm", children: trimmedSearch ? t('media.noSearchResults') : t('media.emptyFolder') })) : null, !showMediaSkeleton && media.length > 0 ? _jsx(ViewComponent, { media: media }) : null, _jsx(PreviewsSelectionToolbar, {})] }) })] }), _jsx(MediaDeleteDialog, { target: deleteTarget, isLoading: deleteMutation.isPending || deleteFolderMutation.isPending, onClose: () => setDeleteTarget(null), onConfirm: handleConfirmDelete }), _jsx(MediaEditDialog, { target: editTarget, value: editName, isLoading: updateMutation.isPending, onValueChange: setEditName, onClose: () => setEditTarget(null), onConfirm: handleConfirmEdit }), _jsx(MediaMoveDialog, { target: moveTarget, folders: folderOptions, value: destinationFolderId, isLoading: isMoving || updateMutation.isPending, onValueChange: setDestinationFolderId, onClose: () => {
|
|
755
809
|
setMoveTarget(null);
|
|
756
810
|
setDestinationFolderId('');
|
|
757
811
|
}, onConfirm: () => void handleConfirmMove() }), _jsx(MediaImageEditorDialog, { target: imageEditTarget, imageUrl: imageEditUrl, isSaving: isSavingImageEdit, onClose: () => {
|