@anvilkit/plugin-asset-manager 0.1.6 → 0.1.8
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 +28 -20
- package/dist/adapters/data-url.d.cts +13 -0
- package/dist/adapters/data-url.d.cts.map +1 -1
- package/dist/adapters/data-url.d.ts +13 -0
- package/dist/adapters/data-url.d.ts.map +1 -1
- package/dist/adapters/in-memory.d.cts +8 -1
- package/dist/adapters/in-memory.d.cts.map +1 -1
- package/dist/adapters/in-memory.d.ts +8 -1
- package/dist/adapters/in-memory.d.ts.map +1 -1
- package/dist/i18n/entry.cjs +75 -0
- package/dist/i18n/entry.d.cts +15 -0
- package/dist/i18n/entry.d.cts.map +1 -0
- package/dist/i18n/entry.d.ts +15 -0
- package/dist/i18n/entry.d.ts.map +1 -0
- package/dist/i18n/entry.js +29 -0
- package/dist/i18n/provider.cjs +49 -0
- package/dist/i18n/provider.d.cts +20 -0
- package/dist/i18n/provider.d.cts.map +1 -0
- package/dist/i18n/provider.d.ts +20 -0
- package/dist/i18n/provider.d.ts.map +1 -0
- package/dist/i18n/provider.js +11 -0
- package/dist/index.cjs +7 -0
- package/dist/index.d.cts +11 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/plugin.cjs +70 -5
- package/dist/plugin.d.cts +3 -2
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.ts +3 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +70 -5
- package/dist/sources/composite-source.cjs +138 -0
- package/dist/sources/composite-source.d.cts +39 -0
- package/dist/sources/composite-source.d.cts.map +1 -0
- package/dist/sources/composite-source.d.ts +39 -0
- package/dist/sources/composite-source.d.ts.map +1 -0
- package/dist/sources/composite-source.js +100 -0
- package/dist/sources/federated-search.cjs +173 -0
- package/dist/sources/federated-search.d.cts +33 -0
- package/dist/sources/federated-search.d.cts.map +1 -0
- package/dist/sources/federated-search.d.ts +33 -0
- package/dist/sources/federated-search.d.ts.map +1 -0
- package/dist/sources/federated-search.js +123 -0
- package/dist/sources/provider.cjs +18 -0
- package/dist/sources/provider.d.cts +51 -0
- package/dist/sources/provider.d.cts.map +1 -0
- package/dist/sources/provider.d.ts +51 -0
- package/dist/sources/provider.d.ts.map +1 -0
- package/dist/sources/provider.js +1 -0
- package/dist/sources/unsplash/client.cjs +189 -0
- package/dist/sources/unsplash/client.d.cts +87 -0
- package/dist/sources/unsplash/client.d.cts.map +1 -0
- package/dist/sources/unsplash/client.d.ts +87 -0
- package/dist/sources/unsplash/client.d.ts.map +1 -0
- package/dist/sources/unsplash/client.js +151 -0
- package/dist/sources/unsplash/index.cjs +194 -0
- package/dist/sources/unsplash/index.d.cts +16 -0
- package/dist/sources/unsplash/index.d.cts.map +1 -0
- package/dist/sources/unsplash/index.d.ts +16 -0
- package/dist/sources/unsplash/index.d.ts.map +1 -0
- package/dist/sources/unsplash/index.js +150 -0
- package/dist/sources/unsplash/themes.cjs +141 -0
- package/dist/sources/unsplash/themes.d.cts +18 -0
- package/dist/sources/unsplash/themes.d.cts.map +1 -0
- package/dist/sources/unsplash/themes.d.ts +18 -0
- package/dist/sources/unsplash/themes.d.ts.map +1 -0
- package/dist/sources/unsplash/themes.js +93 -0
- package/dist/sources/unsplash/throttle-cache.cjs +86 -0
- package/dist/sources/unsplash/throttle-cache.d.cts +25 -0
- package/dist/sources/unsplash/throttle-cache.d.cts.map +1 -0
- package/dist/sources/unsplash/throttle-cache.d.ts +25 -0
- package/dist/sources/unsplash/throttle-cache.d.ts.map +1 -0
- package/dist/sources/unsplash/throttle-cache.js +45 -0
- package/dist/types/categories.cjs +18 -0
- package/dist/types/categories.d.cts +48 -0
- package/dist/types/categories.d.cts.map +1 -0
- package/dist/types/categories.d.ts +48 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +1 -0
- package/dist/types/data-source.cjs +18 -0
- package/dist/types/data-source.d.cts +59 -0
- package/dist/types/data-source.d.cts.map +1 -0
- package/dist/types/data-source.d.ts +59 -0
- package/dist/types/data-source.d.ts.map +1 -0
- package/dist/types/data-source.js +1 -0
- package/dist/types/filter.cjs +18 -0
- package/dist/types/filter.d.cts +55 -0
- package/dist/types/filter.d.cts.map +1 -0
- package/dist/types/filter.d.ts +55 -0
- package/dist/types/filter.d.ts.map +1 -0
- package/dist/types/filter.js +1 -0
- package/dist/types/folders.cjs +42 -0
- package/dist/types/folders.d.cts +46 -0
- package/dist/types/folders.d.cts.map +1 -0
- package/dist/types/folders.d.ts +46 -0
- package/dist/types/folders.d.ts.map +1 -0
- package/dist/types/folders.js +4 -0
- package/dist/types/options.cjs +18 -0
- package/dist/types/options.d.cts +68 -0
- package/dist/types/options.d.cts.map +1 -0
- package/dist/types/options.d.ts +68 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +1 -0
- package/dist/types/types.d.cts +21 -27
- package/dist/types/types.d.cts.map +1 -1
- package/dist/types/types.d.ts +21 -27
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/unsplash.cjs +18 -0
- package/dist/types/unsplash.d.cts +60 -0
- package/dist/types/unsplash.d.cts.map +1 -0
- package/dist/types/unsplash.d.ts +60 -0
- package/dist/types/unsplash.d.ts.map +1 -0
- package/dist/types/unsplash.js +1 -0
- package/dist/ui/AssetBrowser.cjs +183 -121
- package/dist/ui/AssetBrowser.d.cts +12 -1
- package/dist/ui/AssetBrowser.d.cts.map +1 -1
- package/dist/ui/AssetBrowser.d.ts +12 -1
- package/dist/ui/AssetBrowser.d.ts.map +1 -1
- package/dist/ui/AssetBrowser.js +183 -121
- package/dist/ui/AssetCommandPalette.cjs +20 -18
- package/dist/ui/AssetCommandPalette.d.cts.map +1 -1
- package/dist/ui/AssetCommandPalette.d.ts.map +1 -1
- package/dist/ui/AssetCommandPalette.js +20 -18
- package/dist/ui/AssetManagerUI.cjs +31 -17
- package/dist/ui/AssetManagerUI.d.cts +19 -3
- package/dist/ui/AssetManagerUI.d.cts.map +1 -1
- package/dist/ui/AssetManagerUI.d.ts +19 -3
- package/dist/ui/AssetManagerUI.d.ts.map +1 -1
- package/dist/ui/AssetManagerUI.js +31 -17
- package/dist/ui/DeleteAssetDialog.cjs +5 -3
- package/dist/ui/DeleteAssetDialog.d.cts.map +1 -1
- package/dist/ui/DeleteAssetDialog.d.ts.map +1 -1
- package/dist/ui/DeleteAssetDialog.js +5 -3
- package/dist/ui/DeleteFolderDialog.cjs +80 -0
- package/dist/ui/DeleteFolderDialog.d.cts +11 -0
- package/dist/ui/DeleteFolderDialog.d.cts.map +1 -0
- package/dist/ui/DeleteFolderDialog.d.ts +11 -0
- package/dist/ui/DeleteFolderDialog.d.ts.map +1 -0
- package/dist/ui/DeleteFolderDialog.js +42 -0
- package/dist/ui/EmptyFolderState.cjs +56 -0
- package/dist/ui/EmptyFolderState.d.cts +6 -0
- package/dist/ui/EmptyFolderState.d.cts.map +1 -0
- package/dist/ui/EmptyFolderState.d.ts +6 -0
- package/dist/ui/EmptyFolderState.d.ts.map +1 -0
- package/dist/ui/EmptyFolderState.js +18 -0
- package/dist/ui/FolderBreadcrumb.cjs +76 -0
- package/dist/ui/FolderBreadcrumb.d.cts +9 -0
- package/dist/ui/FolderBreadcrumb.d.cts.map +1 -0
- package/dist/ui/FolderBreadcrumb.d.ts +9 -0
- package/dist/ui/FolderBreadcrumb.d.ts.map +1 -0
- package/dist/ui/FolderBreadcrumb.js +38 -0
- package/dist/ui/FolderNameDialog.cjs +105 -0
- package/dist/ui/FolderNameDialog.d.cts +14 -0
- package/dist/ui/FolderNameDialog.d.cts.map +1 -0
- package/dist/ui/FolderNameDialog.d.ts +14 -0
- package/dist/ui/FolderNameDialog.d.ts.map +1 -0
- package/dist/ui/FolderNameDialog.js +67 -0
- package/dist/ui/FolderTree.cjs +85 -0
- package/dist/ui/FolderTree.d.cts +13 -0
- package/dist/ui/FolderTree.d.cts.map +1 -0
- package/dist/ui/FolderTree.d.ts +13 -0
- package/dist/ui/FolderTree.d.ts.map +1 -0
- package/dist/ui/FolderTree.js +44 -0
- package/dist/ui/MetadataPanel.cjs +23 -17
- package/dist/ui/MetadataPanel.d.cts.map +1 -1
- package/dist/ui/MetadataPanel.d.ts.map +1 -1
- package/dist/ui/MetadataPanel.js +23 -17
- package/dist/ui/MoveTargetPicker.cjs +87 -0
- package/dist/ui/MoveTargetPicker.d.cts +16 -0
- package/dist/ui/MoveTargetPicker.d.cts.map +1 -0
- package/dist/ui/MoveTargetPicker.d.ts +16 -0
- package/dist/ui/MoveTargetPicker.d.ts.map +1 -0
- package/dist/ui/MoveTargetPicker.js +49 -0
- package/dist/ui/ReplaceAssetDialog.cjs +19 -17
- package/dist/ui/ReplaceAssetDialog.d.cts +2 -1
- package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.d.ts +2 -1
- package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.js +19 -17
- package/dist/ui/UnsplashPanel.cjs +137 -0
- package/dist/ui/UnsplashPanel.d.cts +28 -0
- package/dist/ui/UnsplashPanel.d.cts.map +1 -0
- package/dist/ui/UnsplashPanel.d.ts +28 -0
- package/dist/ui/UnsplashPanel.d.ts.map +1 -0
- package/dist/ui/UnsplashPanel.js +99 -0
- package/dist/ui/UploadButton.cjs +12 -13
- package/dist/ui/UploadButton.d.cts +9 -2
- package/dist/ui/UploadButton.d.cts.map +1 -1
- package/dist/ui/UploadButton.d.ts +9 -2
- package/dist/ui/UploadButton.d.ts.map +1 -1
- package/dist/ui/UploadButton.js +12 -13
- package/dist/ui/index.cjs +41 -0
- package/dist/ui/index.d.cts +15 -0
- package/dist/ui/index.d.cts.map +1 -1
- package/dist/ui/index.d.ts +15 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +8 -0
- package/dist/utils/data-source.cjs +190 -0
- package/dist/utils/data-source.d.cts +63 -0
- package/dist/utils/data-source.d.cts.map +1 -0
- package/dist/utils/data-source.d.ts +63 -0
- package/dist/utils/data-source.d.ts.map +1 -0
- package/dist/utils/data-source.js +149 -0
- package/dist/utils/errors.cjs +18 -0
- package/dist/utils/errors.d.cts +27 -0
- package/dist/utils/errors.d.cts.map +1 -1
- package/dist/utils/errors.d.ts +27 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +16 -1
- package/dist/utils/folders.cjs +335 -0
- package/dist/utils/folders.d.cts +54 -0
- package/dist/utils/folders.d.cts.map +1 -0
- package/dist/utils/folders.d.ts +54 -0
- package/dist/utils/folders.d.ts.map +1 -0
- package/dist/utils/folders.js +297 -0
- package/dist/utils/header-action.cjs +1 -1
- package/dist/utils/header-action.d.cts.map +1 -1
- package/dist/utils/header-action.d.ts.map +1 -1
- package/dist/utils/header-action.js +1 -1
- package/dist/utils/registry.cjs +38 -12
- package/dist/utils/registry.d.cts +29 -1
- package/dist/utils/registry.d.cts.map +1 -1
- package/dist/utils/registry.d.ts +29 -1
- package/dist/utils/registry.d.ts.map +1 -1
- package/dist/utils/registry.js +31 -11
- package/dist/utils/resolver.cjs +5 -4
- package/dist/utils/resolver.d.cts.map +1 -1
- package/dist/utils/resolver.d.ts.map +1 -1
- package/dist/utils/resolver.js +5 -4
- package/dist/utils/studio-asset-source.cjs +13 -4
- package/dist/utils/studio-asset-source.d.cts +6 -1
- package/dist/utils/studio-asset-source.d.cts.map +1 -1
- package/dist/utils/studio-asset-source.d.ts +6 -1
- package/dist/utils/studio-asset-source.d.ts.map +1 -1
- package/dist/utils/studio-asset-source.js +9 -3
- package/dist/utils/validate-upload-result.d.cts +2 -1
- package/dist/utils/validate-upload-result.d.cts.map +1 -1
- package/dist/utils/validate-upload-result.d.ts +2 -1
- package/dist/utils/validate-upload-result.d.ts.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.d.cts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/i18n/messages/en.json +99 -0
- package/i18n/messages/ja.json +99 -0
- package/i18n/messages/ko.json +99 -0
- package/i18n/messages/zh.json +99 -0
- package/meta/config.json +1 -1
- package/package.json +19 -8
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __webpack_require__ = {};
|
|
4
|
+
(()=>{
|
|
5
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
6
|
+
var define = (defs, kind)=>{
|
|
7
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
[kind]: defs[key]
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
define(getters, "get");
|
|
13
|
+
define(values, "value");
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
(()=>{
|
|
17
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
18
|
+
})();
|
|
19
|
+
(()=>{
|
|
20
|
+
__webpack_require__.r = (exports1)=>{
|
|
21
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
22
|
+
value: 'Module'
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
25
|
+
value: true
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
})();
|
|
29
|
+
var __webpack_exports__ = {};
|
|
30
|
+
__webpack_require__.r(__webpack_exports__);
|
|
31
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
32
|
+
FolderBreadcrumb: ()=>FolderBreadcrumb
|
|
33
|
+
});
|
|
34
|
+
const i18n_namespaceObject = require("@anvilkit/core/i18n");
|
|
35
|
+
const breadcrumb_namespaceObject = require("@anvilkit/ui/breadcrumb");
|
|
36
|
+
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
37
|
+
const external_react_namespaceObject = require("react");
|
|
38
|
+
function FolderBreadcrumb({ path, onNavigate, rootLabel }) {
|
|
39
|
+
const msg = (0, i18n_namespaceObject.useMsg)();
|
|
40
|
+
const resolvedRootLabel = rootLabel ?? msg("assetManager.folder.root");
|
|
41
|
+
const atRoot = 0 === path.length;
|
|
42
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement(breadcrumb_namespaceObject.Breadcrumb, {
|
|
43
|
+
"aria-label": msg("assetManager.breadcrumb.label"),
|
|
44
|
+
"data-testid": "ak-folder-breadcrumb"
|
|
45
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(breadcrumb_namespaceObject.BreadcrumbList, null, /*#__PURE__*/ external_react_namespaceObject.createElement(breadcrumb_namespaceObject.BreadcrumbItem, null, atRoot ? /*#__PURE__*/ external_react_namespaceObject.createElement(breadcrumb_namespaceObject.BreadcrumbPage, {
|
|
46
|
+
"data-folder-crumb": "root"
|
|
47
|
+
}, resolvedRootLabel) : /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
48
|
+
type: "button",
|
|
49
|
+
variant: "link",
|
|
50
|
+
size: "sm",
|
|
51
|
+
className: "h-auto p-0",
|
|
52
|
+
"data-folder-crumb": "root",
|
|
53
|
+
onClick: ()=>onNavigate(null)
|
|
54
|
+
}, resolvedRootLabel)), path.map((folder, index)=>{
|
|
55
|
+
const isCurrent = index === path.length - 1;
|
|
56
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement(external_react_namespaceObject.Fragment, {
|
|
57
|
+
key: folder.id
|
|
58
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(breadcrumb_namespaceObject.BreadcrumbSeparator, null), /*#__PURE__*/ external_react_namespaceObject.createElement(breadcrumb_namespaceObject.BreadcrumbItem, null, isCurrent ? /*#__PURE__*/ external_react_namespaceObject.createElement(breadcrumb_namespaceObject.BreadcrumbPage, {
|
|
59
|
+
"data-folder-crumb": folder.id
|
|
60
|
+
}, folder.name) : /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
61
|
+
type: "button",
|
|
62
|
+
variant: "link",
|
|
63
|
+
size: "sm",
|
|
64
|
+
className: "h-auto p-0",
|
|
65
|
+
"data-folder-crumb": folder.id,
|
|
66
|
+
onClick: ()=>onNavigate(folder.id)
|
|
67
|
+
}, folder.name)));
|
|
68
|
+
})));
|
|
69
|
+
}
|
|
70
|
+
exports.FolderBreadcrumb = __webpack_exports__.FolderBreadcrumb;
|
|
71
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
72
|
+
"FolderBreadcrumb"
|
|
73
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
74
|
+
Object.defineProperty(exports, '__esModule', {
|
|
75
|
+
value: true
|
|
76
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AssetFolder } from "../types/folders.js";
|
|
2
|
+
export interface FolderBreadcrumbProps {
|
|
3
|
+
/** Root → … → current folder. Empty ⇒ at root. */
|
|
4
|
+
readonly path: readonly AssetFolder[];
|
|
5
|
+
readonly onNavigate: (folderId: string | null) => void;
|
|
6
|
+
readonly rootLabel?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function FolderBreadcrumb({ path, onNavigate, rootLabel, }: FolderBreadcrumbProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=FolderBreadcrumb.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderBreadcrumb.d.cts","sourceRoot":"","sources":["../../src/ui/FolderBreadcrumb.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACrC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,UAAU,EACV,SAAS,GACT,EAAE,qBAAqB,2CAyDvB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AssetFolder } from "../types/folders.js";
|
|
2
|
+
export interface FolderBreadcrumbProps {
|
|
3
|
+
/** Root → … → current folder. Empty ⇒ at root. */
|
|
4
|
+
readonly path: readonly AssetFolder[];
|
|
5
|
+
readonly onNavigate: (folderId: string | null) => void;
|
|
6
|
+
readonly rootLabel?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function FolderBreadcrumb({ path, onNavigate, rootLabel, }: FolderBreadcrumbProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=FolderBreadcrumb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderBreadcrumb.d.ts","sourceRoot":"","sources":["../../src/ui/FolderBreadcrumb.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACrC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,UAAU,EACV,SAAS,GACT,EAAE,qBAAqB,2CAyDvB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMsg } from "@anvilkit/core/i18n";
|
|
3
|
+
import { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@anvilkit/ui/breadcrumb";
|
|
4
|
+
import { Button } from "@anvilkit/ui/button";
|
|
5
|
+
import * as __rspack_external_react from "react";
|
|
6
|
+
function FolderBreadcrumb({ path, onNavigate, rootLabel }) {
|
|
7
|
+
const msg = useMsg();
|
|
8
|
+
const resolvedRootLabel = rootLabel ?? msg("assetManager.folder.root");
|
|
9
|
+
const atRoot = 0 === path.length;
|
|
10
|
+
return /*#__PURE__*/ __rspack_external_react.createElement(Breadcrumb, {
|
|
11
|
+
"aria-label": msg("assetManager.breadcrumb.label"),
|
|
12
|
+
"data-testid": "ak-folder-breadcrumb"
|
|
13
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbList, null, /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbItem, null, atRoot ? /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbPage, {
|
|
14
|
+
"data-folder-crumb": "root"
|
|
15
|
+
}, resolvedRootLabel) : /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
16
|
+
type: "button",
|
|
17
|
+
variant: "link",
|
|
18
|
+
size: "sm",
|
|
19
|
+
className: "h-auto p-0",
|
|
20
|
+
"data-folder-crumb": "root",
|
|
21
|
+
onClick: ()=>onNavigate(null)
|
|
22
|
+
}, resolvedRootLabel)), path.map((folder, index)=>{
|
|
23
|
+
const isCurrent = index === path.length - 1;
|
|
24
|
+
return /*#__PURE__*/ __rspack_external_react.createElement(__rspack_external_react.Fragment, {
|
|
25
|
+
key: folder.id
|
|
26
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbSeparator, null), /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbItem, null, isCurrent ? /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbPage, {
|
|
27
|
+
"data-folder-crumb": folder.id
|
|
28
|
+
}, folder.name) : /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
29
|
+
type: "button",
|
|
30
|
+
variant: "link",
|
|
31
|
+
size: "sm",
|
|
32
|
+
className: "h-auto p-0",
|
|
33
|
+
"data-folder-crumb": folder.id,
|
|
34
|
+
onClick: ()=>onNavigate(folder.id)
|
|
35
|
+
}, folder.name)));
|
|
36
|
+
})));
|
|
37
|
+
}
|
|
38
|
+
export { FolderBreadcrumb };
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __webpack_require__ = {};
|
|
4
|
+
(()=>{
|
|
5
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
6
|
+
var define = (defs, kind)=>{
|
|
7
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
[kind]: defs[key]
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
define(getters, "get");
|
|
13
|
+
define(values, "value");
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
(()=>{
|
|
17
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
18
|
+
})();
|
|
19
|
+
(()=>{
|
|
20
|
+
__webpack_require__.r = (exports1)=>{
|
|
21
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
22
|
+
value: 'Module'
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
25
|
+
value: true
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
})();
|
|
29
|
+
var __webpack_exports__ = {};
|
|
30
|
+
__webpack_require__.r(__webpack_exports__);
|
|
31
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
32
|
+
FolderNameDialog: ()=>FolderNameDialog
|
|
33
|
+
});
|
|
34
|
+
const i18n_namespaceObject = require("@anvilkit/core/i18n");
|
|
35
|
+
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
36
|
+
const dialog_namespaceObject = require("@anvilkit/ui/dialog");
|
|
37
|
+
const input_namespaceObject = require("@anvilkit/ui/input");
|
|
38
|
+
const external_react_namespaceObject = require("react");
|
|
39
|
+
function FolderNameDialog({ open, onOpenChange, onSubmit, title, submitLabel, initialName = "" }) {
|
|
40
|
+
const msg = (0, i18n_namespaceObject.useMsg)();
|
|
41
|
+
const resolvedTitle = title ?? msg("assetManager.dialog.newFolderTitle");
|
|
42
|
+
const resolvedSubmit = submitLabel ?? msg("assetManager.button.create");
|
|
43
|
+
const [name, setName] = external_react_namespaceObject.useState(initialName);
|
|
44
|
+
const [busy, setBusy] = external_react_namespaceObject.useState(false);
|
|
45
|
+
const [error, setError] = external_react_namespaceObject.useState(null);
|
|
46
|
+
external_react_namespaceObject.useEffect(()=>{
|
|
47
|
+
if (open) setName(initialName);
|
|
48
|
+
}, [
|
|
49
|
+
open,
|
|
50
|
+
initialName
|
|
51
|
+
]);
|
|
52
|
+
function requestClose() {
|
|
53
|
+
setError(null);
|
|
54
|
+
onOpenChange(false);
|
|
55
|
+
}
|
|
56
|
+
async function handleSubmit() {
|
|
57
|
+
const trimmed = name.trim();
|
|
58
|
+
if ("" === trimmed || busy) return;
|
|
59
|
+
setBusy(true);
|
|
60
|
+
setError(null);
|
|
61
|
+
try {
|
|
62
|
+
await onSubmit(trimmed);
|
|
63
|
+
onOpenChange(false);
|
|
64
|
+
} catch (cause) {
|
|
65
|
+
setError(cause instanceof Error ? cause.message : msg("assetManager.dialog.folderSaveError"));
|
|
66
|
+
} finally{
|
|
67
|
+
setBusy(false);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.Dialog, {
|
|
71
|
+
open: open,
|
|
72
|
+
onOpenChange: (next)=>{
|
|
73
|
+
if (busy) return;
|
|
74
|
+
if (next) onOpenChange(true);
|
|
75
|
+
else requestClose();
|
|
76
|
+
}
|
|
77
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, resolvedTitle)), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
|
|
78
|
+
value: name,
|
|
79
|
+
placeholder: msg("assetManager.dialog.folderNamePlaceholder"),
|
|
80
|
+
"data-testid": "ak-folder-name-input",
|
|
81
|
+
onChange: (event)=>setName(event.currentTarget.value),
|
|
82
|
+
onKeyDown: (event)=>{
|
|
83
|
+
if ("Enter" === event.key) handleSubmit();
|
|
84
|
+
}
|
|
85
|
+
}), error ? /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
|
|
86
|
+
role: "alert",
|
|
87
|
+
className: "text-sm text-[var(--ak-studio-danger-fg,#dc2626)]"
|
|
88
|
+
}, error) : null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogFooter, null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
89
|
+
type: "button",
|
|
90
|
+
variant: "outline",
|
|
91
|
+
disabled: busy,
|
|
92
|
+
onClick: requestClose
|
|
93
|
+
}, msg("assetManager.button.cancel")), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
94
|
+
type: "button",
|
|
95
|
+
disabled: busy || "" === name.trim(),
|
|
96
|
+
onClick: ()=>void handleSubmit()
|
|
97
|
+
}, busy ? msg("assetManager.dialog.saveProgress") : resolvedSubmit))));
|
|
98
|
+
}
|
|
99
|
+
exports.FolderNameDialog = __webpack_exports__.FolderNameDialog;
|
|
100
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
101
|
+
"FolderNameDialog"
|
|
102
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
103
|
+
Object.defineProperty(exports, '__esModule', {
|
|
104
|
+
value: true
|
|
105
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One dialog for both create and rename — pass `initialName` + labels. Exported
|
|
3
|
+
* as `CreateFolderDialog` / `RenameFolderDialog` thin aliases from the barrel.
|
|
4
|
+
*/
|
|
5
|
+
export interface FolderNameDialogProps {
|
|
6
|
+
readonly open: boolean;
|
|
7
|
+
readonly onOpenChange: (open: boolean) => void;
|
|
8
|
+
readonly onSubmit: (name: string) => void | Promise<void>;
|
|
9
|
+
readonly title?: string;
|
|
10
|
+
readonly submitLabel?: string;
|
|
11
|
+
readonly initialName?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function FolderNameDialog({ open, onOpenChange, onSubmit, title, submitLabel, initialName, }: FolderNameDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=FolderNameDialog.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderNameDialog.d.cts","sourceRoot":"","sources":["../../src/ui/FolderNameDialog.tsx"],"names":[],"mappings":"AAcA;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,WAAgB,GAChB,EAAE,qBAAqB,2CAiGvB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One dialog for both create and rename — pass `initialName` + labels. Exported
|
|
3
|
+
* as `CreateFolderDialog` / `RenameFolderDialog` thin aliases from the barrel.
|
|
4
|
+
*/
|
|
5
|
+
export interface FolderNameDialogProps {
|
|
6
|
+
readonly open: boolean;
|
|
7
|
+
readonly onOpenChange: (open: boolean) => void;
|
|
8
|
+
readonly onSubmit: (name: string) => void | Promise<void>;
|
|
9
|
+
readonly title?: string;
|
|
10
|
+
readonly submitLabel?: string;
|
|
11
|
+
readonly initialName?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function FolderNameDialog({ open, onOpenChange, onSubmit, title, submitLabel, initialName, }: FolderNameDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=FolderNameDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderNameDialog.d.ts","sourceRoot":"","sources":["../../src/ui/FolderNameDialog.tsx"],"names":[],"mappings":"AAcA;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,WAAgB,GAChB,EAAE,qBAAqB,2CAiGvB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMsg } from "@anvilkit/core/i18n";
|
|
3
|
+
import { Button } from "@anvilkit/ui/button";
|
|
4
|
+
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
|
|
5
|
+
import { Input } from "@anvilkit/ui/input";
|
|
6
|
+
import * as __rspack_external_react from "react";
|
|
7
|
+
function FolderNameDialog({ open, onOpenChange, onSubmit, title, submitLabel, initialName = "" }) {
|
|
8
|
+
const msg = useMsg();
|
|
9
|
+
const resolvedTitle = title ?? msg("assetManager.dialog.newFolderTitle");
|
|
10
|
+
const resolvedSubmit = submitLabel ?? msg("assetManager.button.create");
|
|
11
|
+
const [name, setName] = __rspack_external_react.useState(initialName);
|
|
12
|
+
const [busy, setBusy] = __rspack_external_react.useState(false);
|
|
13
|
+
const [error, setError] = __rspack_external_react.useState(null);
|
|
14
|
+
__rspack_external_react.useEffect(()=>{
|
|
15
|
+
if (open) setName(initialName);
|
|
16
|
+
}, [
|
|
17
|
+
open,
|
|
18
|
+
initialName
|
|
19
|
+
]);
|
|
20
|
+
function requestClose() {
|
|
21
|
+
setError(null);
|
|
22
|
+
onOpenChange(false);
|
|
23
|
+
}
|
|
24
|
+
async function handleSubmit() {
|
|
25
|
+
const trimmed = name.trim();
|
|
26
|
+
if ("" === trimmed || busy) return;
|
|
27
|
+
setBusy(true);
|
|
28
|
+
setError(null);
|
|
29
|
+
try {
|
|
30
|
+
await onSubmit(trimmed);
|
|
31
|
+
onOpenChange(false);
|
|
32
|
+
} catch (cause) {
|
|
33
|
+
setError(cause instanceof Error ? cause.message : msg("assetManager.dialog.folderSaveError"));
|
|
34
|
+
} finally{
|
|
35
|
+
setBusy(false);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return /*#__PURE__*/ __rspack_external_react.createElement(Dialog, {
|
|
39
|
+
open: open,
|
|
40
|
+
onOpenChange: (next)=>{
|
|
41
|
+
if (busy) return;
|
|
42
|
+
if (next) onOpenChange(true);
|
|
43
|
+
else requestClose();
|
|
44
|
+
}
|
|
45
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, resolvedTitle)), /*#__PURE__*/ __rspack_external_react.createElement(Input, {
|
|
46
|
+
value: name,
|
|
47
|
+
placeholder: msg("assetManager.dialog.folderNamePlaceholder"),
|
|
48
|
+
"data-testid": "ak-folder-name-input",
|
|
49
|
+
onChange: (event)=>setName(event.currentTarget.value),
|
|
50
|
+
onKeyDown: (event)=>{
|
|
51
|
+
if ("Enter" === event.key) handleSubmit();
|
|
52
|
+
}
|
|
53
|
+
}), error ? /*#__PURE__*/ __rspack_external_react.createElement("p", {
|
|
54
|
+
role: "alert",
|
|
55
|
+
className: "text-sm text-[var(--ak-studio-danger-fg,#dc2626)]"
|
|
56
|
+
}, error) : null, /*#__PURE__*/ __rspack_external_react.createElement(DialogFooter, null, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
57
|
+
type: "button",
|
|
58
|
+
variant: "outline",
|
|
59
|
+
disabled: busy,
|
|
60
|
+
onClick: requestClose
|
|
61
|
+
}, msg("assetManager.button.cancel")), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
62
|
+
type: "button",
|
|
63
|
+
disabled: busy || "" === name.trim(),
|
|
64
|
+
onClick: ()=>void handleSubmit()
|
|
65
|
+
}, busy ? msg("assetManager.dialog.saveProgress") : resolvedSubmit))));
|
|
66
|
+
}
|
|
67
|
+
export { FolderNameDialog };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __webpack_require__ = {};
|
|
4
|
+
(()=>{
|
|
5
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
6
|
+
var define = (defs, kind)=>{
|
|
7
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
[kind]: defs[key]
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
define(getters, "get");
|
|
13
|
+
define(values, "value");
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
(()=>{
|
|
17
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
18
|
+
})();
|
|
19
|
+
(()=>{
|
|
20
|
+
__webpack_require__.r = (exports1)=>{
|
|
21
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
22
|
+
value: 'Module'
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
25
|
+
value: true
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
})();
|
|
29
|
+
var __webpack_exports__ = {};
|
|
30
|
+
__webpack_require__.r(__webpack_exports__);
|
|
31
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
32
|
+
ASSET_DRAG_MIME: ()=>ASSET_DRAG_MIME,
|
|
33
|
+
FolderTree: ()=>FolderTree
|
|
34
|
+
});
|
|
35
|
+
const i18n_namespaceObject = require("@anvilkit/core/i18n");
|
|
36
|
+
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
37
|
+
const external_react_namespaceObject = require("react");
|
|
38
|
+
const ASSET_DRAG_MIME = "application/x-anvilkit-assets";
|
|
39
|
+
function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
|
|
40
|
+
const msg = (0, i18n_namespaceObject.useMsg)();
|
|
41
|
+
const [dropTarget, setDropTarget] = external_react_namespaceObject.useState(null);
|
|
42
|
+
const handleDrop = (folderId)=>(event)=>{
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
setDropTarget(null);
|
|
45
|
+
if (void 0 === onDropAssets) return;
|
|
46
|
+
try {
|
|
47
|
+
const raw = event.dataTransfer.getData(ASSET_DRAG_MIME);
|
|
48
|
+
const assetIds = raw ? JSON.parse(raw) : [];
|
|
49
|
+
if (Array.isArray(assetIds) && assetIds.length > 0) onDropAssets(assetIds, folderId);
|
|
50
|
+
} catch {}
|
|
51
|
+
};
|
|
52
|
+
if (0 === folders.length) return null;
|
|
53
|
+
const droppable = void 0 !== onDropAssets;
|
|
54
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
|
|
55
|
+
"aria-label": msg("assetManager.tree.label"),
|
|
56
|
+
"data-testid": "ak-folder-tree",
|
|
57
|
+
className: "flex flex-col gap-1"
|
|
58
|
+
}, folders.map((folder)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
|
|
59
|
+
key: folder.id
|
|
60
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
61
|
+
type: "button",
|
|
62
|
+
variant: folder.id === currentFolderId ? "secondary" : "ghost",
|
|
63
|
+
size: "sm",
|
|
64
|
+
className: "w-full justify-start",
|
|
65
|
+
"data-folder-id": folder.id,
|
|
66
|
+
"data-drop-target": dropTarget === folder.id ? "" : void 0,
|
|
67
|
+
title: droppable ? msg("assetManager.tree.dropHint").replace("{name}", folder.name) : void 0,
|
|
68
|
+
onClick: ()=>onNavigate(folder.id),
|
|
69
|
+
onDragOver: onDropAssets ? (event)=>{
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
setDropTarget(folder.id);
|
|
72
|
+
} : void 0,
|
|
73
|
+
onDragLeave: onDropAssets ? ()=>setDropTarget((current)=>current === folder.id ? null : current) : void 0,
|
|
74
|
+
onDrop: onDropAssets ? handleDrop(folder.id) : void 0
|
|
75
|
+
}, folder.name, " (", folder.counts.assets, ")"))));
|
|
76
|
+
}
|
|
77
|
+
exports.ASSET_DRAG_MIME = __webpack_exports__.ASSET_DRAG_MIME;
|
|
78
|
+
exports.FolderTree = __webpack_exports__.FolderTree;
|
|
79
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
80
|
+
"ASSET_DRAG_MIME",
|
|
81
|
+
"FolderTree"
|
|
82
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
83
|
+
Object.defineProperty(exports, '__esModule', {
|
|
84
|
+
value: true
|
|
85
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AssetFolder } from "../types/folders.js";
|
|
2
|
+
/** dataTransfer MIME for an asset-id drag payload (native HTML5 DnD, no @dnd-kit). */
|
|
3
|
+
export declare const ASSET_DRAG_MIME = "application/x-anvilkit-assets";
|
|
4
|
+
export interface FolderTreeProps {
|
|
5
|
+
/** Child folders of the current folder. */
|
|
6
|
+
readonly folders: readonly AssetFolder[];
|
|
7
|
+
readonly currentFolderId: string | null;
|
|
8
|
+
readonly onNavigate: (folderId: string | null) => void;
|
|
9
|
+
/** Drop handler for an asset-id payload dragged onto a folder row. */
|
|
10
|
+
readonly onDropAssets?: (assetIds: readonly string[], folderId: string | null) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets, }: FolderTreeProps): import("react/jsx-runtime").JSX.Element | null;
|
|
13
|
+
//# sourceMappingURL=FolderTree.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderTree.d.cts","sourceRoot":"","sources":["../../src/ui/FolderTree.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,sFAAsF;AACtF,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,CACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,KACnB,IAAI,CAAC;CACV;AAED,wBAAgB,UAAU,CAAC,EAC1B,OAAO,EACP,eAAe,EACf,UAAU,EACV,YAAY,GACZ,EAAE,eAAe,kDAwEjB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AssetFolder } from "../types/folders.js";
|
|
2
|
+
/** dataTransfer MIME for an asset-id drag payload (native HTML5 DnD, no @dnd-kit). */
|
|
3
|
+
export declare const ASSET_DRAG_MIME = "application/x-anvilkit-assets";
|
|
4
|
+
export interface FolderTreeProps {
|
|
5
|
+
/** Child folders of the current folder. */
|
|
6
|
+
readonly folders: readonly AssetFolder[];
|
|
7
|
+
readonly currentFolderId: string | null;
|
|
8
|
+
readonly onNavigate: (folderId: string | null) => void;
|
|
9
|
+
/** Drop handler for an asset-id payload dragged onto a folder row. */
|
|
10
|
+
readonly onDropAssets?: (assetIds: readonly string[], folderId: string | null) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets, }: FolderTreeProps): import("react/jsx-runtime").JSX.Element | null;
|
|
13
|
+
//# sourceMappingURL=FolderTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderTree.d.ts","sourceRoot":"","sources":["../../src/ui/FolderTree.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,sFAAsF;AACtF,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,CACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,KACnB,IAAI,CAAC;CACV;AAED,wBAAgB,UAAU,CAAC,EAC1B,OAAO,EACP,eAAe,EACf,UAAU,EACV,YAAY,GACZ,EAAE,eAAe,kDAwEjB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMsg } from "@anvilkit/core/i18n";
|
|
3
|
+
import { Button } from "@anvilkit/ui/button";
|
|
4
|
+
import * as __rspack_external_react from "react";
|
|
5
|
+
const ASSET_DRAG_MIME = "application/x-anvilkit-assets";
|
|
6
|
+
function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
|
|
7
|
+
const msg = useMsg();
|
|
8
|
+
const [dropTarget, setDropTarget] = __rspack_external_react.useState(null);
|
|
9
|
+
const handleDrop = (folderId)=>(event)=>{
|
|
10
|
+
event.preventDefault();
|
|
11
|
+
setDropTarget(null);
|
|
12
|
+
if (void 0 === onDropAssets) return;
|
|
13
|
+
try {
|
|
14
|
+
const raw = event.dataTransfer.getData(ASSET_DRAG_MIME);
|
|
15
|
+
const assetIds = raw ? JSON.parse(raw) : [];
|
|
16
|
+
if (Array.isArray(assetIds) && assetIds.length > 0) onDropAssets(assetIds, folderId);
|
|
17
|
+
} catch {}
|
|
18
|
+
};
|
|
19
|
+
if (0 === folders.length) return null;
|
|
20
|
+
const droppable = void 0 !== onDropAssets;
|
|
21
|
+
return /*#__PURE__*/ __rspack_external_react.createElement("ul", {
|
|
22
|
+
"aria-label": msg("assetManager.tree.label"),
|
|
23
|
+
"data-testid": "ak-folder-tree",
|
|
24
|
+
className: "flex flex-col gap-1"
|
|
25
|
+
}, folders.map((folder)=>/*#__PURE__*/ __rspack_external_react.createElement("li", {
|
|
26
|
+
key: folder.id
|
|
27
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
28
|
+
type: "button",
|
|
29
|
+
variant: folder.id === currentFolderId ? "secondary" : "ghost",
|
|
30
|
+
size: "sm",
|
|
31
|
+
className: "w-full justify-start",
|
|
32
|
+
"data-folder-id": folder.id,
|
|
33
|
+
"data-drop-target": dropTarget === folder.id ? "" : void 0,
|
|
34
|
+
title: droppable ? msg("assetManager.tree.dropHint").replace("{name}", folder.name) : void 0,
|
|
35
|
+
onClick: ()=>onNavigate(folder.id),
|
|
36
|
+
onDragOver: onDropAssets ? (event)=>{
|
|
37
|
+
event.preventDefault();
|
|
38
|
+
setDropTarget(folder.id);
|
|
39
|
+
} : void 0,
|
|
40
|
+
onDragLeave: onDropAssets ? ()=>setDropTarget((current)=>current === folder.id ? null : current) : void 0,
|
|
41
|
+
onDrop: onDropAssets ? handleDrop(folder.id) : void 0
|
|
42
|
+
}, folder.name, " (", folder.counts.assets, ")"))));
|
|
43
|
+
}
|
|
44
|
+
export { ASSET_DRAG_MIME, FolderTree };
|
|
@@ -31,11 +31,14 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
31
31
|
__webpack_require__.d(__webpack_exports__, {
|
|
32
32
|
MetadataPanel: ()=>MetadataPanel
|
|
33
33
|
});
|
|
34
|
+
const i18n_namespaceObject = require("@anvilkit/core/i18n");
|
|
34
35
|
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
35
36
|
const dialog_namespaceObject = require("@anvilkit/ui/dialog");
|
|
36
37
|
const input_namespaceObject = require("@anvilkit/ui/input");
|
|
38
|
+
const label_namespaceObject = require("@anvilkit/ui/label");
|
|
37
39
|
const external_react_namespaceObject = require("react");
|
|
38
40
|
function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
41
|
+
const msg = (0, i18n_namespaceObject.useMsg)();
|
|
39
42
|
const [name, setName] = external_react_namespaceObject.useState("");
|
|
40
43
|
const [tagInput, setTagInput] = external_react_namespaceObject.useState("");
|
|
41
44
|
const [tags, setTags] = external_react_namespaceObject.useState([]);
|
|
@@ -44,8 +47,6 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
|
44
47
|
if (null === asset) return;
|
|
45
48
|
setName(asset.name ?? "");
|
|
46
49
|
setTags(asset.tags ?? []);
|
|
47
|
-
setTagInput("");
|
|
48
|
-
setBusy(false);
|
|
49
50
|
}, [
|
|
50
51
|
asset
|
|
51
52
|
]);
|
|
@@ -86,19 +87,23 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
|
86
87
|
setBusy(false);
|
|
87
88
|
}
|
|
88
89
|
}
|
|
90
|
+
function handleCancel() {
|
|
91
|
+
setTagInput("");
|
|
92
|
+
onCancel();
|
|
93
|
+
}
|
|
89
94
|
function handleOpenChange(nextOpen) {
|
|
90
|
-
if (!nextOpen && !busy)
|
|
95
|
+
if (!nextOpen && !busy) handleCancel();
|
|
91
96
|
}
|
|
92
97
|
const open = null !== asset;
|
|
93
98
|
const mimeType = asset?.meta?.mimeType;
|
|
94
99
|
return /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.Dialog, {
|
|
95
100
|
open: open,
|
|
96
101
|
onOpenChange: handleOpenChange
|
|
97
|
-
}, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, "
|
|
102
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, msg("assetManager.dialog.editTitle")), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, asset?.id, mimeType ? ` (${mimeType})` : "")), /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
98
103
|
"data-asset-manager-metadata": true
|
|
99
|
-
}, /*#__PURE__*/ external_react_namespaceObject.createElement(
|
|
104
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
|
|
100
105
|
htmlFor: "asset-metadata-name"
|
|
101
|
-
}, "
|
|
106
|
+
}, msg("assetManager.form.nameLabel")), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
|
|
102
107
|
id: "asset-metadata-name",
|
|
103
108
|
value: name,
|
|
104
109
|
onChange: (event)=>{
|
|
@@ -108,21 +113,22 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
|
108
113
|
disabled: busy
|
|
109
114
|
}), /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
110
115
|
"data-asset-manager-tag-editor": true
|
|
111
|
-
}, /*#__PURE__*/ external_react_namespaceObject.createElement(
|
|
116
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
|
|
112
117
|
htmlFor: "asset-metadata-tag-input"
|
|
113
|
-
}, "
|
|
114
|
-
"aria-label": "
|
|
115
|
-
role: "list"
|
|
118
|
+
}, msg("assetManager.form.tagsLabel")), /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
|
|
119
|
+
"aria-label": msg("assetManager.form.tagsListLabel")
|
|
116
120
|
}, tags.map((tag)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
|
|
117
121
|
key: tag
|
|
118
|
-
}, /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, tag), /*#__PURE__*/ external_react_namespaceObject.createElement(
|
|
119
|
-
"aria-label":
|
|
122
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, tag), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
123
|
+
"aria-label": msg("assetManager.form.removeTag").replace("{tag}", tag),
|
|
120
124
|
"data-asset-action": "remove-tag",
|
|
121
125
|
disabled: busy,
|
|
122
126
|
onClick: ()=>{
|
|
123
127
|
removeTag(tag);
|
|
124
128
|
},
|
|
125
|
-
type: "button"
|
|
129
|
+
type: "button",
|
|
130
|
+
variant: "ghost",
|
|
131
|
+
size: "icon-xs"
|
|
126
132
|
}, "\xd7")))), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
|
|
127
133
|
id: "asset-metadata-tag-input",
|
|
128
134
|
value: tagInput,
|
|
@@ -130,18 +136,18 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
|
130
136
|
setTagInput(event.target.value);
|
|
131
137
|
},
|
|
132
138
|
onKeyDown: handleTagKeyDown,
|
|
133
|
-
placeholder: "
|
|
139
|
+
placeholder: msg("assetManager.form.addTagPlaceholder"),
|
|
134
140
|
disabled: busy
|
|
135
141
|
}))), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogFooter, null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
136
142
|
disabled: busy,
|
|
137
|
-
onClick:
|
|
143
|
+
onClick: handleCancel,
|
|
138
144
|
type: "button",
|
|
139
145
|
variant: "outline"
|
|
140
|
-
}, "
|
|
146
|
+
}, msg("assetManager.button.cancel")), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
141
147
|
disabled: busy || null === asset,
|
|
142
148
|
onClick: handleConfirm,
|
|
143
149
|
type: "button"
|
|
144
|
-
}, busy ? "
|
|
150
|
+
}, busy ? msg("assetManager.dialog.saveProgress") : msg("assetManager.button.save")))));
|
|
145
151
|
}
|
|
146
152
|
exports.MetadataPanel = __webpack_exports__.MetadataPanel;
|
|
147
153
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CACnB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC7D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,GACT,EAAE,kBAAkB,2CA2JpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CACnB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC7D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,GACT,EAAE,kBAAkB,2CA2JpB"}
|