@strapi/upload 5.50.1 → 5.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/ai/components/AIAssetCard.js +7 -1
- package/dist/admin/ai/components/AIAssetCard.js.map +1 -1
- package/dist/admin/ai/components/AIAssetCard.mjs +7 -1
- package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.js +6 -0
- package/dist/admin/components/AssetCard/AssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.mjs +6 -0
- package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.js +3 -2
- package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs +3 -2
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +2 -2
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +2 -2
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +8 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +8 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -1
- package/dist/admin/components/TableList/PreviewCell.js +5 -1
- package/dist/admin/components/TableList/PreviewCell.js.map +1 -1
- package/dist/admin/components/TableList/PreviewCell.mjs +5 -1
- package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.js +6 -11
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +6 -11
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js +6 -3
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs +6 -3
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js +8 -12
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +10 -14
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.js +15 -27
- package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +16 -28
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/EmptyState.js +63 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.mjs +61 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -0
- package/dist/admin/future/services/uploadFileViaXHR.js +23 -2
- package/dist/admin/future/services/uploadFileViaXHR.js.map +1 -1
- package/dist/admin/future/services/uploadFileViaXHR.mjs +23 -2
- package/dist/admin/future/services/uploadFileViaXHR.mjs.map +1 -1
- package/dist/admin/hooks/useUpload.js +15 -9
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs +17 -11
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/src/components/AssetCard/ImageAssetCard.d.ts +2 -1
- package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +1 -1
- package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +1 -1
- package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +11 -0
- package/dist/admin/src/future/services/uploadFileViaXHR.d.ts +1 -17
- package/dist/admin/src/hooks/useAiAvailability.d.ts +1 -1
- package/dist/admin/src/hooks/useEditAsset.d.ts +4 -4
- package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
- package/dist/admin/src/hooks/useUpload.d.ts +1 -1
- package/dist/admin/translations/en.json.js +3 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +3 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/ko.json.js +183 -1
- package/dist/admin/translations/ko.json.js.map +1 -1
- package/dist/admin/translations/ko.json.mjs +183 -1
- package/dist/admin/translations/ko.json.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/index.d.ts +11 -11
- package/dist/server/src/routes/index.d.ts +1 -1
- package/dist/server/src/services/image-manipulation.d.ts +3 -3
- package/dist/server/src/services/index.d.ts +9 -9
- package/package.json +17 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUpload.mjs","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"useUpload.mjs","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { adminApi } from '@strapi/admin/strapi-admin';\nimport { useMutation, useQueryClient } from 'react-query';\nimport { useDispatch, useStore } from 'react-redux';\n\nimport { File, RawFile, CreateFile } from '../../../shared/contracts/files';\nimport { uploadFileViaXHR } from '../future/services/uploadFileViaXHR';\nimport { pluginId } from '../pluginId';\n\nconst endpoint = `/${pluginId}`;\n\ninterface Asset extends Omit<File, 'id' | 'hash'> {\n rawFile?: RawFile;\n id?: File['id'];\n hash?: File['hash'];\n}\n\ninterface StoreState {\n admin_app: {\n token?: string | null;\n };\n}\n\nconst uploadAssets = (\n assets: Asset | Asset[],\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n token: string | null | undefined\n): Promise<CreateFile.Response['data']> => {\n const assetsArray = Array.isArray(assets) ? assets : [assets];\n const formData = new FormData();\n\n // Add all files to the form data\n assetsArray.forEach((asset) => {\n if (asset.rawFile) {\n formData.append('files', asset.rawFile);\n }\n });\n\n // Add each fileInfo as a separate stringified field\n assetsArray.forEach((asset) => {\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name: asset.name,\n caption: asset.caption,\n alternativeText: asset.alternativeText,\n folder: folderId,\n })\n );\n });\n\n /**\n * Native fetch cannot report upload progress, so upload via the shared XHR\n * service and surface its byte-level progress as a 0-100 percentage.\n */\n return uploadFileViaXHR<CreateFile.Response['data']>(\n `${window.strapi.backendURL}${endpoint}`,\n token,\n formData,\n signal,\n (loaded, total) => {\n if (total > 0) {\n onProgress(Math.round((loaded / total) * 100));\n }\n }\n );\n};\n\nexport const useUpload = () => {\n const dispatch = useDispatch();\n const [progress, setProgress] = React.useState(0);\n const queryClient = useQueryClient();\n const abortController = new AbortController();\n const signal = abortController.signal;\n const store = useStore<StoreState>();\n\n const mutation = useMutation<\n CreateFile.Response['data'],\n CreateFile.Response['error'],\n { assets: Asset | Asset[]; folderId: number | null }\n >(\n ({ assets, folderId }) => {\n return uploadAssets(assets, folderId, signal, setProgress, store.getState().admin_app?.token);\n },\n {\n mutationKey: [pluginId, 'upload'],\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n dispatch(adminApi.util.invalidateTags(['HomepageKeyStatistics', 'AiUsage']));\n },\n }\n );\n\n const upload = (assets: Asset | Asset[], folderId: number | null) =>\n mutation.mutateAsync({ assets, folderId });\n\n const cancel = () => abortController.abort();\n\n return {\n upload,\n isLoading: mutation.isLoading,\n cancel,\n error: mutation.error,\n progress,\n status: mutation.status,\n };\n};\n"],"names":["endpoint","pluginId","uploadAssets","assets","folderId","signal","onProgress","token","assetsArray","Array","isArray","formData","FormData","forEach","asset","rawFile","append","JSON","stringify","name","caption","alternativeText","folder","uploadFileViaXHR","window","strapi","backendURL","loaded","total","Math","round","useUpload","dispatch","useDispatch","progress","setProgress","React","useState","queryClient","useQueryClient","abortController","AbortController","store","useStore","mutation","useMutation","getState","admin_app","mutationKey","onSuccess","refetchQueries","active","adminApi","util","invalidateTags","upload","mutateAsync","cancel","abort","isLoading","error","status"],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ interface ImageAssetCardProps extends Omit<AssetCardBaseProps, 'variant' | 'chil
|
|
|
7
7
|
alt: string;
|
|
8
8
|
updatedAt?: string;
|
|
9
9
|
isUrlSigned: boolean;
|
|
10
|
+
crossOrigin?: 'anonymous' | 'use-credentials';
|
|
10
11
|
}
|
|
11
|
-
export declare const ImageAssetCard: ({ height, width, thumbnail, size, alt, isUrlSigned, selected, ...props }: ImageAssetCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare const ImageAssetCard: ({ height, width, thumbnail, size, alt, isUrlSigned, crossOrigin, selected, ...props }: ImageAssetCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
export {};
|
|
@@ -5,5 +5,5 @@ interface AssetsGridProps {
|
|
|
5
5
|
folders?: Folder[];
|
|
6
6
|
onAssetItemClick: (assetId: number) => void;
|
|
7
7
|
}
|
|
8
|
-
export declare const AssetsGrid: ({ assets, folders, onAssetItemClick }: AssetsGridProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare const AssetsGrid: ({ assets, folders, onAssetItemClick }: AssetsGridProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
9
9
|
export {};
|
|
@@ -5,5 +5,5 @@ interface AssetsTableProps {
|
|
|
5
5
|
folders?: Folder[];
|
|
6
6
|
onAssetItemClick: (assetId: number) => void;
|
|
7
7
|
}
|
|
8
|
-
export declare const AssetsTable: ({ assets, folders, onAssetItemClick }: AssetsTableProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare const AssetsTable: ({ assets, folders, onAssetItemClick }: AssetsTableProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
9
9
|
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface EmptyStateProps {
|
|
2
|
+
onAddAssets: () => void;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Empty state for the assets list (both views) when the current folder holds
|
|
6
|
+
* no assets and no folders. The "Add assets" button opens the same file picker
|
|
7
|
+
* as New > File upload; drag-and-drop upload keeps working since the page-wide
|
|
8
|
+
* drop zone wraps this component.
|
|
9
|
+
*/
|
|
10
|
+
export declare const EmptyState: ({ onAddAssets }: EmptyStateProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -15,20 +15,4 @@ export declare class UploadFileError extends Error {
|
|
|
15
15
|
constructor(message: string, status?: number);
|
|
16
16
|
}
|
|
17
17
|
export type UploadProgressCallback = (bytes: number, total: number) => void;
|
|
18
|
-
|
|
19
|
-
* Uploads a single file via `XMLHttpRequest`, exposing real byte-level upload
|
|
20
|
-
* progress through {@link XMLHttpRequest.upload}'s `progress` event.
|
|
21
|
-
*
|
|
22
|
-
* This is the only place raw XHR lives. `fetch()` is intentionally avoided here
|
|
23
|
-
* because it does not surface upload progress.
|
|
24
|
-
*
|
|
25
|
-
* @param url - The full endpoint URL to POST to.
|
|
26
|
-
* @param token - Admin auth token; the `Authorization` header is only set when present.
|
|
27
|
-
* @param formData - Prebuilt multipart body containing the single file and its `fileInfo`.
|
|
28
|
-
* @param signal - Aborts the in-flight request when triggered.
|
|
29
|
-
* @param onProgress - Called with `(loaded, total)` bytes as the upload progresses.
|
|
30
|
-
* @returns The parsed, signed `File` on a 2xx response.
|
|
31
|
-
* @throws {UploadAbortedError} When the signal aborts.
|
|
32
|
-
* @throws {UploadFileError} On a non-2xx response or network error.
|
|
33
|
-
*/
|
|
34
|
-
export declare const uploadFileViaXHR: (url: string, token: string | null | undefined, formData: FormData, signal: AbortSignal, onProgress?: UploadProgressCallback) => Promise<File>;
|
|
18
|
+
export declare const uploadFileViaXHR: <T = File>(url: string, token: string | null | undefined, formData: FormData, signal: AbortSignal, onProgress?: UploadProgressCallback) => Promise<T>;
|
|
@@ -12,7 +12,7 @@ export declare const useEditAsset: () => {
|
|
|
12
12
|
cancel: () => void;
|
|
13
13
|
editAsset: (asset: FileAsset, file: File) => Promise<FileAsset>;
|
|
14
14
|
progress: number;
|
|
15
|
-
status: "
|
|
15
|
+
status: "loading" | "success" | "error" | "idle";
|
|
16
16
|
data: undefined;
|
|
17
17
|
error: null;
|
|
18
18
|
isError: false;
|
|
@@ -39,7 +39,7 @@ export declare const useEditAsset: () => {
|
|
|
39
39
|
cancel: () => void;
|
|
40
40
|
editAsset: (asset: FileAsset, file: File) => Promise<FileAsset>;
|
|
41
41
|
progress: number;
|
|
42
|
-
status: "
|
|
42
|
+
status: "loading" | "success" | "error" | "idle";
|
|
43
43
|
data: undefined;
|
|
44
44
|
error: null;
|
|
45
45
|
isError: false;
|
|
@@ -66,7 +66,7 @@ export declare const useEditAsset: () => {
|
|
|
66
66
|
cancel: () => void;
|
|
67
67
|
editAsset: (asset: FileAsset, file: File) => Promise<FileAsset>;
|
|
68
68
|
progress: number;
|
|
69
|
-
status: "
|
|
69
|
+
status: "loading" | "success" | "error" | "idle";
|
|
70
70
|
data: undefined;
|
|
71
71
|
error: ErrorMutation;
|
|
72
72
|
isError: true;
|
|
@@ -93,7 +93,7 @@ export declare const useEditAsset: () => {
|
|
|
93
93
|
cancel: () => void;
|
|
94
94
|
editAsset: (asset: FileAsset, file: File) => Promise<FileAsset>;
|
|
95
95
|
progress: number;
|
|
96
|
-
status: "
|
|
96
|
+
status: "loading" | "success" | "error" | "idle";
|
|
97
97
|
data: FileAsset;
|
|
98
98
|
error: null;
|
|
99
99
|
isError: false;
|
|
@@ -6,7 +6,7 @@ interface EditFolderRequestParams {
|
|
|
6
6
|
}
|
|
7
7
|
export declare const useEditFolder: () => {
|
|
8
8
|
editFolder: (attrs: EditFolderRequestParams["attrs"], id?: EditFolderRequestParams["id"]) => Promise<import("../../../shared/contracts/folders").Folder>;
|
|
9
|
-
status: "
|
|
9
|
+
status: "loading" | "success" | "error" | "idle";
|
|
10
10
|
data: undefined;
|
|
11
11
|
error: null;
|
|
12
12
|
isError: false;
|
|
@@ -22,7 +22,7 @@ export declare const useEditFolder: () => {
|
|
|
22
22
|
mutateAsync: import("react-query").UseMutateAsyncFunction<import("../../../shared/contracts/folders").Folder, import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").NotFoundError<string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | undefined, EditFolderRequestParams, unknown>;
|
|
23
23
|
} | {
|
|
24
24
|
editFolder: (attrs: EditFolderRequestParams["attrs"], id?: EditFolderRequestParams["id"]) => Promise<import("../../../shared/contracts/folders").Folder>;
|
|
25
|
-
status: "
|
|
25
|
+
status: "loading" | "success" | "error" | "idle";
|
|
26
26
|
data: undefined;
|
|
27
27
|
error: null;
|
|
28
28
|
isError: false;
|
|
@@ -38,7 +38,7 @@ export declare const useEditFolder: () => {
|
|
|
38
38
|
mutateAsync: import("react-query").UseMutateAsyncFunction<import("../../../shared/contracts/folders").Folder, import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").NotFoundError<string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | undefined, EditFolderRequestParams, unknown>;
|
|
39
39
|
} | {
|
|
40
40
|
editFolder: (attrs: EditFolderRequestParams["attrs"], id?: EditFolderRequestParams["id"]) => Promise<import("../../../shared/contracts/folders").Folder>;
|
|
41
|
-
status: "
|
|
41
|
+
status: "loading" | "success" | "error" | "idle";
|
|
42
42
|
data: undefined;
|
|
43
43
|
error: import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").NotFoundError<string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | undefined;
|
|
44
44
|
isError: true;
|
|
@@ -54,7 +54,7 @@ export declare const useEditFolder: () => {
|
|
|
54
54
|
mutateAsync: import("react-query").UseMutateAsyncFunction<import("../../../shared/contracts/folders").Folder, import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").NotFoundError<string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | undefined, EditFolderRequestParams, unknown>;
|
|
55
55
|
} | {
|
|
56
56
|
editFolder: (attrs: EditFolderRequestParams["attrs"], id?: EditFolderRequestParams["id"]) => Promise<import("../../../shared/contracts/folders").Folder>;
|
|
57
|
-
status: "
|
|
57
|
+
status: "loading" | "success" | "error" | "idle";
|
|
58
58
|
data: import("../../../shared/contracts/folders").Folder;
|
|
59
59
|
error: null;
|
|
60
60
|
isError: false;
|
|
@@ -10,6 +10,6 @@ export declare const useUpload: () => {
|
|
|
10
10
|
cancel: () => void;
|
|
11
11
|
error: import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | null | undefined;
|
|
12
12
|
progress: number;
|
|
13
|
-
status: "
|
|
13
|
+
status: "loading" | "success" | "error" | "idle";
|
|
14
14
|
};
|
|
15
15
|
export {};
|
|
@@ -159,6 +159,9 @@ var en = {
|
|
|
159
159
|
"list.assets.empty-upload": "Upload your first assets...",
|
|
160
160
|
"list.assets.empty.no-permissions": "No permissions to view",
|
|
161
161
|
"list.assets.error": "An error occurred while fetching assets.",
|
|
162
|
+
"list.empty.title": "No assets yet",
|
|
163
|
+
"list.empty.description": "Get started by uploading assets or creating a folder.",
|
|
164
|
+
"list.empty.add-assets": "Add assets",
|
|
162
165
|
"list.assets.loading-more": "Loading more assets...",
|
|
163
166
|
"list.assets.loading-asset": "Loading the preview for the media: {path}",
|
|
164
167
|
"list.assets.not-supported-content": "No preview available",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -157,6 +157,9 @@ var en = {
|
|
|
157
157
|
"list.assets.empty-upload": "Upload your first assets...",
|
|
158
158
|
"list.assets.empty.no-permissions": "No permissions to view",
|
|
159
159
|
"list.assets.error": "An error occurred while fetching assets.",
|
|
160
|
+
"list.empty.title": "No assets yet",
|
|
161
|
+
"list.empty.description": "Get started by uploading assets or creating a folder.",
|
|
162
|
+
"list.empty.add-assets": "Add assets",
|
|
160
163
|
"list.assets.loading-more": "Loading more assets...",
|
|
161
164
|
"list.assets.loading-asset": "Loading the preview for the media: {path}",
|
|
162
165
|
"list.assets.not-supported-content": "No preview available",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -100,7 +100,189 @@ var ko = {
|
|
|
100
100
|
"sort.updated_at_desc": "최근 업데이트순",
|
|
101
101
|
"tabs.title": "자산을 업로드할 방법을 선택해주세요.",
|
|
102
102
|
"window.confirm.close-modal.file": "확실한가요? 변경 내용이 사라집니다.",
|
|
103
|
-
"window.confirm.close-modal.files": "확실하나요? 아직 업로드되지 않은 파일이 있습니다."
|
|
103
|
+
"window.confirm.close-modal.files": "확실하나요? 아직 업로드되지 않은 파일이 있습니다.",
|
|
104
|
+
"apiError.FileTooBig": "업로드한 파일이 허용된 최대 에셋 크기를 초과했습니다.",
|
|
105
|
+
"assets.uploaded": "{number, plural, one {1 개} other {# 개}}의 에셋이 업로드되었습니다",
|
|
106
|
+
"asset-details.title": "파일 상세 정보",
|
|
107
|
+
"asset-details.description": "파일 정보와 메타데이터를 표시합니다.",
|
|
108
|
+
"asset-details.fileInfo": "파일 정보",
|
|
109
|
+
"asset-details.error": "파일 상세 정보를 불러오지 못했습니다.",
|
|
110
|
+
"asset-details.videoNotSupported": "브라우저가 비디오 태그를 지원하지 않습니다.",
|
|
111
|
+
"asset-details.size": "용량",
|
|
112
|
+
"asset-details.dimensions": "크기",
|
|
113
|
+
"asset-details.creationDate": "생성일",
|
|
114
|
+
"asset-details.lastUpdated": "마지막 수정일",
|
|
115
|
+
"asset-details.createdBy": "작성자",
|
|
116
|
+
"asset-details.extension": "확장자",
|
|
117
|
+
"asset-details.assetId": "에셋 ID",
|
|
118
|
+
"asset-details.fileName": "파일명",
|
|
119
|
+
"asset-details.caption": "캡션",
|
|
120
|
+
"asset-details.alternativeText": "대체 텍스트",
|
|
121
|
+
"asset-details.location": "위치",
|
|
122
|
+
"asset-details.save": "변경 사항 저장",
|
|
123
|
+
"asset-details.update.success": "파일이 수정되었습니다",
|
|
124
|
+
"asset-details.update.error": "파일을 수정하지 못했습니다.",
|
|
125
|
+
"asset-details.field.empty": "{label} 항목이 비어 있습니다.",
|
|
126
|
+
"asset-details.location.root": "미디어 라이브러리",
|
|
127
|
+
"asset-details.saveChanges": "변경 사항 저장",
|
|
128
|
+
"asset-details.delete.trigger": "이 파일 삭제",
|
|
129
|
+
"asset-details.delete.title": "이 미디어 파일을 삭제하시겠습니까?",
|
|
130
|
+
"asset-details.delete.description": "삭제하면 이 파일을 복구할 수 없습니다. 현재 사용 중인 경우 연결된 콘텐츠가 깨지고 이미지 컨테이너가 비게 됩니다.",
|
|
131
|
+
"asset-details.delete.success": "{folderName}에서 1개 항목이 삭제되었습니다",
|
|
132
|
+
"asset-details.delete.error": "파일을 삭제하지 못했습니다.",
|
|
133
|
+
"asset-details.delete.loading": "파일을 삭제하는 중…",
|
|
134
|
+
"asset-details.replace.trigger": "이 파일 교체",
|
|
135
|
+
"asset-details.replace.title": "이 미디어 파일을 교체하시겠습니까?",
|
|
136
|
+
"asset-details.replace.description": "현재 콘텐츠가 영구적으로 교체됩니다.",
|
|
137
|
+
"asset-details.replace.description.ai": "업로드 후 AI가 새 메타데이터를 생성합니다.",
|
|
138
|
+
"asset-details.replace.continue": "계속",
|
|
139
|
+
"asset-details.replace.success": "파일이 교체되었습니다.",
|
|
140
|
+
"asset-details.replace.error": "파일을 교체하지 못했습니다.",
|
|
141
|
+
"asset-details.replace.loading": "파일을 교체하는 중…",
|
|
142
|
+
"asset-details.copy-link.trigger": "링크 복사",
|
|
143
|
+
"asset-details.copy-link.success": "링크가 복사되었습니다.",
|
|
144
|
+
"asset-details.copy-link.error": "링크를 복사하지 못했습니다.",
|
|
145
|
+
"asset-details.download.trigger": "다운로드",
|
|
146
|
+
"asset-details.download.error": "파일을 다운로드하지 못했습니다.",
|
|
147
|
+
"asset-details.crop.trigger": "자르기",
|
|
148
|
+
"asset-details.crop.title": "자르기 및 초점 영역",
|
|
149
|
+
"asset-details.crop.hint": "사각형으로 자르기 영역을 설정하세요. 원으로 항상 표시할 영역을 고정하세요.",
|
|
150
|
+
"asset-details.crop.width": "너비 (px)",
|
|
151
|
+
"asset-details.crop.height": "높이 (px)",
|
|
152
|
+
"asset-details.crop.aspect-lock": "가로세로 비율 고정",
|
|
153
|
+
"asset-details.crop.focal-point": "초점",
|
|
154
|
+
"asset-details.crop.focal-x": "초점 X (px)",
|
|
155
|
+
"asset-details.crop.focal-y": "초점 Y (px)",
|
|
156
|
+
"asset-details.crop.focal-x-axis": "X",
|
|
157
|
+
"asset-details.crop.focal-y-axis": "Y",
|
|
158
|
+
"asset-details.crop.resize.top-left": "왼쪽 위 크기 조절",
|
|
159
|
+
"asset-details.crop.resize.top-right": "오른쪽 위 크기 조절",
|
|
160
|
+
"asset-details.crop.resize.bottom-left": "왼쪽 아래 크기 조절",
|
|
161
|
+
"asset-details.crop.resize.bottom-right": "오른쪽 아래 크기 조절",
|
|
162
|
+
"asset-details.crop.export-error": "자른 이미지를 처리하지 못했습니다.",
|
|
163
|
+
"asset-details.crop.cancel": "취소",
|
|
164
|
+
"asset-details.crop.save-as-copy": "사본으로 저장",
|
|
165
|
+
"asset-details.crop.apply": "적용",
|
|
166
|
+
"asset-details.crop.success": "파일이 잘렸습니다.",
|
|
167
|
+
"asset-details.crop.copy-success": "사본이 생성되었습니다.",
|
|
168
|
+
"asset-details.crop.error": "파일을 자르지 못했습니다.",
|
|
169
|
+
"asset-details.crop.loading": "자른 사본을 저장하는 중…",
|
|
170
|
+
"asset-details.noPreview": "미리보기를 사용할 수 없습니다",
|
|
171
|
+
"upload.generic-error": "파일을 업로드하는 중 오류가 발생했습니다.",
|
|
172
|
+
"upload.progress": "업로드 진행 상황",
|
|
173
|
+
"upload.progress.description": "업로드 진행 상황과 상태를 표시합니다.",
|
|
174
|
+
"upload.progress.failed": "업로드 실패",
|
|
175
|
+
"upload.progress.failed.subtitle": "파일을 다시 업로드해 주세요",
|
|
176
|
+
"upload.progress.success": "업로드 성공!",
|
|
177
|
+
"upload.progress.success.subtitle": "{count, plural, one {파일 1개가 업로드되었습니다} other {파일 #개가 업로드되었습니다}}",
|
|
178
|
+
"upload.progress.success.subtitle.withErrors": "{successCount}개 업로드됨, {errorCount}개 실패",
|
|
179
|
+
"upload.progress.uploading.withCount": "{total}개 항목 업로드 중 ({percentage}%)",
|
|
180
|
+
"upload.progress.uploading-files": "파일 {count, plural, one {1개} other {#개}} 업로드 중",
|
|
181
|
+
"upload.progress.indicator.in-progress": "업로드 진행 중 표시기",
|
|
182
|
+
"upload.progress.indicator.complete": "업로드 완료 표시기",
|
|
183
|
+
"upload.progress.label": "업로드",
|
|
184
|
+
"upload.progress.errors.title": "업로드 실패:",
|
|
185
|
+
"upload.progress.cancel": "취소",
|
|
186
|
+
"upload.progress.canceled": "업로드가 취소되었습니다",
|
|
187
|
+
"upload.progress.canceled.subtitle": "일부 파일이 업로드되지 않았습니다",
|
|
188
|
+
"upload.progress.canceled.subtitle.all": "모든 업로드가 취소되었습니다",
|
|
189
|
+
"upload.progress.retry": "다시 시도",
|
|
190
|
+
"upload.progress.file.uploading": "업로드 중...",
|
|
191
|
+
"upload.progress.file.canceled": "취소됨",
|
|
192
|
+
"upload.progress.file.uploaded": "업로드됨",
|
|
193
|
+
"upload.progress.maximize": "최대화",
|
|
194
|
+
"upload.progress.minimize": "최소화",
|
|
195
|
+
"upload.progress.close": "닫기",
|
|
196
|
+
"new": "신규",
|
|
197
|
+
"control-card.set-focal-point": "초점 설정",
|
|
198
|
+
"control-card.stop-focal-point": "초점 선택 취소",
|
|
199
|
+
"control-card.reset-focal-point": "가운데로 재설정",
|
|
200
|
+
"control-card.save-focal-point": "초점 저장",
|
|
201
|
+
"control-card.remove-selection": "선택 항목에서 제거",
|
|
202
|
+
"dropzone.upload.message": "여기에 놓아 업로드",
|
|
203
|
+
"form.input.placeholder.file-caption": "캡션 입력",
|
|
204
|
+
"header.actions.add-folder": "새 폴더 추가",
|
|
205
|
+
"folder.create.title": "새 폴더",
|
|
206
|
+
"folder.form.name.label": "폴더 이름",
|
|
207
|
+
"folder.create.submit": "폴더 생성",
|
|
208
|
+
"folder.create.form.error.name-required": "이름은 필수입니다",
|
|
209
|
+
"folder.create.form.error.unknown": "폴더를 생성하는 중 오류가 발생했습니다",
|
|
210
|
+
"folder.create.success": "폴더가 생성되었습니다",
|
|
211
|
+
"header.actions.add-assets.folder": "폴더",
|
|
212
|
+
"header.content.assets-empty": "에셋 없음",
|
|
213
|
+
"header.content.item-count": "{count, plural, =1 {1개 항목} other {#개 항목}}",
|
|
214
|
+
"import-files": "파일 업로드",
|
|
215
|
+
"import-from-url": "URL로 파일 업로드",
|
|
216
|
+
"input.url.placeholder": "비어 있음",
|
|
217
|
+
"input.notification.not-supported": "이 파일 형식은 업로드할 수 없습니다. 다음 형식만 허용됩니다 – {fileTypes}",
|
|
218
|
+
"list.assets.title": "에셋 ({count})",
|
|
219
|
+
"list.assets.empty-upload": "첫 에셋을 업로드해보세요...",
|
|
220
|
+
"list.assets.error": "에셋을 가져오는 중 오류가 발생했습니다.",
|
|
221
|
+
"list.assets.loading-more": "에셋을 더 불러오는 중...",
|
|
222
|
+
"list-assets-select": "{name} 에셋 선택",
|
|
223
|
+
"list.assets.to-upload": "{number, plural, =0 {에셋 없음} one {에셋 1개} other {에셋 #개}} 업로드 준비 완료",
|
|
224
|
+
"list.folder.edit": "폴더 수정",
|
|
225
|
+
"list.folder.select": "{name} 폴더 선택",
|
|
226
|
+
"list.folder.subtitle": "{folderCount, plural, one {폴더 1개} other {폴더 #개}}, {filesCount, plural, one {에셋 1개} other {에셋 #개}}",
|
|
227
|
+
"list.folders.title": "폴더 ({count})",
|
|
228
|
+
"list.folders.link-label": "폴더 열기",
|
|
229
|
+
"modal.file-details.id": "에셋 ID",
|
|
230
|
+
"modal.file-details.focal-point": "초점",
|
|
231
|
+
"modal.folder.elements.count": "폴더 {folderCount}개, 에셋 {assetCount}개",
|
|
232
|
+
"modal.header.go-back": "뒤로 가기",
|
|
233
|
+
"modal.folder.move.title": "다음 위치로 이동",
|
|
234
|
+
"modal.move.success-label": "항목이 이동되었습니다",
|
|
235
|
+
"modal.move.error-label": "항목을 이동하는 중 오류가 발생했습니다.",
|
|
236
|
+
"dnd.announce.drag-start": "{name}을(를) 집었습니다. 이동하려면 폴더에 놓으세요.",
|
|
237
|
+
"dnd.announce.invalid-drop": "이 폴더로 항목을 이동할 수 없습니다.",
|
|
238
|
+
"dnd.announce.move-failure": "이동에 실패했습니다. {message}",
|
|
239
|
+
"dnd.announce.cancel": "드래그가 취소되었습니다.",
|
|
240
|
+
"plugin.home": "홈",
|
|
241
|
+
"settings.form.aiMetadata.label": "업로드 시 AI가 자동으로 캡션과 대체 텍스트를 생성합니다!",
|
|
242
|
+
"settings.form.aiMetadata.description": "이 기능을 사용하면 AI가 캡션과 대체 텍스트를 대신 생성해주어 시간을 절약하고 SEO를 최적화하며 접근성을 높일 수 있습니다.",
|
|
243
|
+
"settings.form.aiMetadata.allAssetsHaveMetadata": "모든 에셋에 캡션과 대체 텍스트가 있습니다",
|
|
244
|
+
"settings.form.aiMetadata.imagesWithoutMetadata": "{count, plural, one {이미지 1개에 캡션 또는 대체 텍스트가 없습니다} other {이미지 #개에 캡션 또는 대체 텍스트가 없습니다}}",
|
|
245
|
+
"settings.form.aiMetadata.generatingMetadata": "AI가 메타데이터를 생성하고 있습니다",
|
|
246
|
+
"settings.form.aiMetadata.metadataGenerated": "메타데이터가 생성되었습니다",
|
|
247
|
+
"settings.form.aiMetadata.generateButton": "메타데이터 생성",
|
|
248
|
+
"settings.form.aiMetadata.confirmDialog.title": "AI 메타데이터 생성",
|
|
249
|
+
"settings.form.aiMetadata.confirmDialog.message": "백그라운드에서 {count, plural, one {이미지 1개} other {이미지 #개}}에 대한 캡션과 대체 텍스트를 생성하는 작업이 시작됩니다. AI는 실수를 할 수 있으니 생성된 콘텐츠를 반드시 검토하세요.",
|
|
250
|
+
"settings.section.audio.label": "오디오",
|
|
251
|
+
"list.table.header.actions": "작업",
|
|
252
|
+
"list.table.header.preview": "미리보기",
|
|
253
|
+
"list.table.header.name": "이름",
|
|
254
|
+
"list.table.header.ext": "확장자",
|
|
255
|
+
"list.table.header.size": "용량",
|
|
256
|
+
"list.table.header.createdAt": "생성일",
|
|
257
|
+
"list.table.header.updatedAt": "마지막 수정",
|
|
258
|
+
"list.table.header.creationDate": "생성일",
|
|
259
|
+
"list.table.header.lastModified": "마지막 수정일",
|
|
260
|
+
"list.table.header.sort": "{label} 기준 정렬",
|
|
261
|
+
"list.table.content.empty-label": "이 필드는 비어 있습니다",
|
|
262
|
+
"config.back": "뒤로",
|
|
263
|
+
"config.subtitle": "미디어 라이브러리의 보기 설정을 정의합니다.",
|
|
264
|
+
"config.entries.title": "페이지당 항목 수",
|
|
265
|
+
"config.sort.title": "기본 정렬 순서",
|
|
266
|
+
"config.entries.note": "미디어 라이브러리에 기본으로 표시되는 에셋 수",
|
|
267
|
+
"config.note": "참고: 이 값은 미디어 라이브러리에서 재정의할 수 있습니다.",
|
|
268
|
+
"config.popUpWarning.warning.updateAllSettings": "모든 설정이 변경됩니다",
|
|
269
|
+
"view-switch.list": "리스트 보기",
|
|
270
|
+
"view-switch.grid": "그리드 보기",
|
|
271
|
+
"view.switch.label": "보기 옵션",
|
|
272
|
+
"view.table": "테이블 보기",
|
|
273
|
+
"view.grid": "그리드 보기",
|
|
274
|
+
"ai.modal.uploading.title": "AI로 업로드 및 처리하는 중...",
|
|
275
|
+
"ai.modal.title": "{count, plural, one {에셋 1개 업로드됨} other {에셋 #개 업로드됨}}, AI가 생성한 메타데이터를 검토하세요",
|
|
276
|
+
"ai.modal.error": "업로드된 파일에 대한 AI 메타데이터를 생성하지 못했습니다.",
|
|
277
|
+
"sidebar.title": "미디어 라이브러리",
|
|
278
|
+
"sidebar.home": "홈",
|
|
279
|
+
"sidebar.folders": "폴더",
|
|
280
|
+
"sidebar.tree.aria-label": "미디어 라이브러리 폴더",
|
|
281
|
+
"sidebar.tree.expand": "{name} 펼치기",
|
|
282
|
+
"sidebar.tree.collapse": "{name} 접기",
|
|
283
|
+
"sidebar.tree.empty": "아직 폴더가 없습니다",
|
|
284
|
+
"sidebar.tree.loading": "폴더를 불러오는 중...",
|
|
285
|
+
"sidebar.tree.error": "폴더를 불러오지 못했습니다."
|
|
104
286
|
};
|
|
105
287
|
|
|
106
288
|
module.exports = ko;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ko.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ko.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|