@anvilkit/plugin-asset-manager 0.1.5 → 0.1.7
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 +27 -19
- package/dist/adapters/data-url.cjs +9 -5
- package/dist/adapters/extract-image-dimensions.cjs +12 -8
- package/dist/adapters/in-memory.cjs +9 -5
- package/dist/adapters/s3-presigned.cjs +9 -5
- package/dist/index.cjs +16 -5
- 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 +76 -9
- 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 +67 -4
- package/dist/sources/composite-source.cjs +137 -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 +99 -0
- package/dist/sources/federated-search.cjs +163 -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 +113 -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 +192 -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 +148 -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/testing/index.cjs +9 -5
- 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 +15 -27
- package/dist/types/types.d.cts.map +1 -1
- package/dist/types/types.d.ts +15 -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 +69 -104
- package/dist/ui/AssetBrowser.d.cts +17 -7
- package/dist/ui/AssetBrowser.d.cts.map +1 -1
- package/dist/ui/AssetBrowser.d.ts +17 -7
- package/dist/ui/AssetBrowser.d.ts.map +1 -1
- package/dist/ui/AssetBrowser.js +60 -99
- package/dist/ui/AssetCommandPalette.cjs +9 -5
- package/dist/ui/AssetManagerUI.cjs +17 -7
- 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 +8 -2
- package/dist/ui/DeleteAssetDialog.cjs +9 -5
- package/dist/ui/DeleteFolderDialog.cjs +78 -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 +40 -0
- package/dist/ui/EmptyFolderState.cjs +53 -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 +15 -0
- package/dist/ui/FolderBreadcrumb.cjs +73 -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 +35 -0
- package/dist/ui/FolderNameDialog.cjs +98 -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 +60 -0
- package/dist/ui/FolderTree.cjs +83 -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 +42 -0
- package/dist/ui/MetadataPanel.cjs +16 -9
- package/dist/ui/MetadataPanel.d.cts.map +1 -1
- package/dist/ui/MetadataPanel.d.ts.map +1 -1
- package/dist/ui/MetadataPanel.js +7 -4
- package/dist/ui/MoveTargetPicker.cjs +84 -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 +46 -0
- package/dist/ui/ReplaceAssetDialog.cjs +9 -5
- 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/UnsplashPanel.cjs +134 -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 +96 -0
- package/dist/ui/UploadButton.cjs +10 -10
- 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 +1 -5
- package/dist/ui/index.cjs +46 -5
- package/dist/ui/index.d.cts +14 -0
- package/dist/ui/index.d.cts.map +1 -1
- package/dist/ui/index.d.ts +14 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +7 -0
- package/dist/utils/asset-reference.cjs +12 -8
- package/dist/utils/csp.cjs +12 -8
- package/dist/utils/data-source.cjs +177 -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 +136 -0
- package/dist/utils/errors.cjs +31 -9
- 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 +261 -0
- package/dist/utils/folders.d.cts +49 -0
- package/dist/utils/folders.d.cts.map +1 -0
- package/dist/utils/folders.d.ts +49 -0
- package/dist/utils/folders.d.ts.map +1 -0
- package/dist/utils/folders.js +223 -0
- package/dist/utils/header-action.cjs +12 -8
- package/dist/utils/infer-kind.cjs +12 -8
- package/dist/utils/registry.cjs +36 -17
- package/dist/utils/registry.d.cts +21 -1
- package/dist/utils/registry.d.cts.map +1 -1
- package/dist/utils/registry.d.ts +21 -1
- package/dist/utils/registry.d.ts.map +1 -1
- package/dist/utils/registry.js +20 -11
- package/dist/utils/resolver.cjs +9 -5
- package/dist/utils/retry.cjs +13 -9
- package/dist/utils/studio-asset-source.cjs +14 -7
- 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 +1 -1
- package/dist/utils/validate-upload-result.cjs +9 -5
- 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 +12 -8
- package/dist/version.d.cts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/meta/config.json +1 -1
- package/package.json +19 -9
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
EmptyFolderState: ()=>EmptyFolderState
|
|
33
|
+
});
|
|
34
|
+
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
35
|
+
const external_react_namespaceObject = require("react");
|
|
36
|
+
function EmptyFolderState({ onUpload, message = "This folder is empty." }) {
|
|
37
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
38
|
+
"data-testid": "ak-empty-folder",
|
|
39
|
+
className: "flex flex-col items-center gap-2 p-6 text-center text-sm text-[var(--ak-studio-muted-fg)]"
|
|
40
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("p", null, message), onUpload ? /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
41
|
+
type: "button",
|
|
42
|
+
variant: "outline",
|
|
43
|
+
size: "sm",
|
|
44
|
+
onClick: onUpload
|
|
45
|
+
}, "Drop files here or upload") : null);
|
|
46
|
+
}
|
|
47
|
+
exports.EmptyFolderState = __webpack_exports__.EmptyFolderState;
|
|
48
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
49
|
+
"EmptyFolderState"
|
|
50
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
51
|
+
Object.defineProperty(exports, '__esModule', {
|
|
52
|
+
value: true
|
|
53
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface EmptyFolderStateProps {
|
|
2
|
+
readonly onUpload?: () => void;
|
|
3
|
+
readonly message?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function EmptyFolderState({ onUpload, message, }: EmptyFolderStateProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=EmptyFolderState.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyFolderState.d.cts","sourceRoot":"","sources":["../../src/ui/EmptyFolderState.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,QAAQ,EACR,OAAiC,GACjC,EAAE,qBAAqB,2CAcvB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface EmptyFolderStateProps {
|
|
2
|
+
readonly onUpload?: () => void;
|
|
3
|
+
readonly message?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function EmptyFolderState({ onUpload, message, }: EmptyFolderStateProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=EmptyFolderState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyFolderState.d.ts","sourceRoot":"","sources":["../../src/ui/EmptyFolderState.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,QAAQ,EACR,OAAiC,GACjC,EAAE,qBAAqB,2CAcvB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Button } from "@anvilkit/ui/button";
|
|
3
|
+
import * as __rspack_external_react from "react";
|
|
4
|
+
function EmptyFolderState({ onUpload, message = "This folder is empty." }) {
|
|
5
|
+
return /*#__PURE__*/ __rspack_external_react.createElement("div", {
|
|
6
|
+
"data-testid": "ak-empty-folder",
|
|
7
|
+
className: "flex flex-col items-center gap-2 p-6 text-center text-sm text-[var(--ak-studio-muted-fg)]"
|
|
8
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement("p", null, message), onUpload ? /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
9
|
+
type: "button",
|
|
10
|
+
variant: "outline",
|
|
11
|
+
size: "sm",
|
|
12
|
+
onClick: onUpload
|
|
13
|
+
}, "Drop files here or upload") : null);
|
|
14
|
+
}
|
|
15
|
+
export { EmptyFolderState };
|
|
@@ -0,0 +1,73 @@
|
|
|
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 breadcrumb_namespaceObject = require("@anvilkit/ui/breadcrumb");
|
|
35
|
+
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
36
|
+
const external_react_namespaceObject = require("react");
|
|
37
|
+
function FolderBreadcrumb({ path, onNavigate, rootLabel = "All assets" }) {
|
|
38
|
+
const atRoot = 0 === path.length;
|
|
39
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement(breadcrumb_namespaceObject.Breadcrumb, {
|
|
40
|
+
"aria-label": "Folders",
|
|
41
|
+
"data-testid": "ak-folder-breadcrumb"
|
|
42
|
+
}, /*#__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, {
|
|
43
|
+
"data-folder-crumb": "root"
|
|
44
|
+
}, rootLabel) : /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
45
|
+
type: "button",
|
|
46
|
+
variant: "link",
|
|
47
|
+
size: "sm",
|
|
48
|
+
className: "h-auto p-0",
|
|
49
|
+
"data-folder-crumb": "root",
|
|
50
|
+
onClick: ()=>onNavigate(null)
|
|
51
|
+
}, rootLabel)), path.map((folder, index)=>{
|
|
52
|
+
const isCurrent = index === path.length - 1;
|
|
53
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement(external_react_namespaceObject.Fragment, {
|
|
54
|
+
key: folder.id
|
|
55
|
+
}, /*#__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, {
|
|
56
|
+
"data-folder-crumb": folder.id
|
|
57
|
+
}, folder.name) : /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
58
|
+
type: "button",
|
|
59
|
+
variant: "link",
|
|
60
|
+
size: "sm",
|
|
61
|
+
className: "h-auto p-0",
|
|
62
|
+
"data-folder-crumb": folder.id,
|
|
63
|
+
onClick: ()=>onNavigate(folder.id)
|
|
64
|
+
}, folder.name)));
|
|
65
|
+
})));
|
|
66
|
+
}
|
|
67
|
+
exports.FolderBreadcrumb = __webpack_exports__.FolderBreadcrumb;
|
|
68
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
69
|
+
"FolderBreadcrumb"
|
|
70
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
71
|
+
Object.defineProperty(exports, '__esModule', {
|
|
72
|
+
value: true
|
|
73
|
+
});
|
|
@@ -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":"AAYA,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,SAAwB,GACxB,EAAE,qBAAqB,2CAoDvB"}
|
|
@@ -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":"AAYA,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,SAAwB,GACxB,EAAE,qBAAqB,2CAoDvB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@anvilkit/ui/breadcrumb";
|
|
3
|
+
import { Button } from "@anvilkit/ui/button";
|
|
4
|
+
import * as __rspack_external_react from "react";
|
|
5
|
+
function FolderBreadcrumb({ path, onNavigate, rootLabel = "All assets" }) {
|
|
6
|
+
const atRoot = 0 === path.length;
|
|
7
|
+
return /*#__PURE__*/ __rspack_external_react.createElement(Breadcrumb, {
|
|
8
|
+
"aria-label": "Folders",
|
|
9
|
+
"data-testid": "ak-folder-breadcrumb"
|
|
10
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbList, null, /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbItem, null, atRoot ? /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbPage, {
|
|
11
|
+
"data-folder-crumb": "root"
|
|
12
|
+
}, rootLabel) : /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
13
|
+
type: "button",
|
|
14
|
+
variant: "link",
|
|
15
|
+
size: "sm",
|
|
16
|
+
className: "h-auto p-0",
|
|
17
|
+
"data-folder-crumb": "root",
|
|
18
|
+
onClick: ()=>onNavigate(null)
|
|
19
|
+
}, rootLabel)), path.map((folder, index)=>{
|
|
20
|
+
const isCurrent = index === path.length - 1;
|
|
21
|
+
return /*#__PURE__*/ __rspack_external_react.createElement(__rspack_external_react.Fragment, {
|
|
22
|
+
key: folder.id
|
|
23
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbSeparator, null), /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbItem, null, isCurrent ? /*#__PURE__*/ __rspack_external_react.createElement(BreadcrumbPage, {
|
|
24
|
+
"data-folder-crumb": folder.id
|
|
25
|
+
}, folder.name) : /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
26
|
+
type: "button",
|
|
27
|
+
variant: "link",
|
|
28
|
+
size: "sm",
|
|
29
|
+
className: "h-auto p-0",
|
|
30
|
+
"data-folder-crumb": folder.id,
|
|
31
|
+
onClick: ()=>onNavigate(folder.id)
|
|
32
|
+
}, folder.name)));
|
|
33
|
+
})));
|
|
34
|
+
}
|
|
35
|
+
export { FolderBreadcrumb };
|
|
@@ -0,0 +1,98 @@
|
|
|
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 button_namespaceObject = require("@anvilkit/ui/button");
|
|
35
|
+
const dialog_namespaceObject = require("@anvilkit/ui/dialog");
|
|
36
|
+
const input_namespaceObject = require("@anvilkit/ui/input");
|
|
37
|
+
const external_react_namespaceObject = require("react");
|
|
38
|
+
function FolderNameDialog({ open, onOpenChange, onSubmit, title = "New folder", submitLabel = "Create", initialName = "" }) {
|
|
39
|
+
const [name, setName] = external_react_namespaceObject.useState(initialName);
|
|
40
|
+
const [busy, setBusy] = external_react_namespaceObject.useState(false);
|
|
41
|
+
const [error, setError] = external_react_namespaceObject.useState(null);
|
|
42
|
+
external_react_namespaceObject.useEffect(()=>{
|
|
43
|
+
if (open) {
|
|
44
|
+
setName(initialName);
|
|
45
|
+
setError(null);
|
|
46
|
+
}
|
|
47
|
+
}, [
|
|
48
|
+
open,
|
|
49
|
+
initialName
|
|
50
|
+
]);
|
|
51
|
+
async function handleSubmit() {
|
|
52
|
+
const trimmed = name.trim();
|
|
53
|
+
if ("" === trimmed || busy) return;
|
|
54
|
+
setBusy(true);
|
|
55
|
+
setError(null);
|
|
56
|
+
try {
|
|
57
|
+
await onSubmit(trimmed);
|
|
58
|
+
onOpenChange(false);
|
|
59
|
+
} catch (cause) {
|
|
60
|
+
setError(cause instanceof Error ? cause.message : "Could not save the folder.");
|
|
61
|
+
} finally{
|
|
62
|
+
setBusy(false);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.Dialog, {
|
|
66
|
+
open: open,
|
|
67
|
+
onOpenChange: (next)=>{
|
|
68
|
+
if (!busy) onOpenChange(next);
|
|
69
|
+
}
|
|
70
|
+
}, /*#__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, title)), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
|
|
71
|
+
value: name,
|
|
72
|
+
placeholder: "Folder name",
|
|
73
|
+
"data-testid": "ak-folder-name-input",
|
|
74
|
+
onChange: (event)=>setName(event.currentTarget.value),
|
|
75
|
+
onKeyDown: (event)=>{
|
|
76
|
+
if ("Enter" === event.key) handleSubmit();
|
|
77
|
+
}
|
|
78
|
+
}), error ? /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
|
|
79
|
+
role: "alert",
|
|
80
|
+
className: "text-sm text-[var(--ak-studio-danger-fg,#dc2626)]"
|
|
81
|
+
}, error) : null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogFooter, null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
82
|
+
type: "button",
|
|
83
|
+
variant: "outline",
|
|
84
|
+
disabled: busy,
|
|
85
|
+
onClick: ()=>onOpenChange(false)
|
|
86
|
+
}, "Cancel"), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
87
|
+
type: "button",
|
|
88
|
+
disabled: busy || "" === name.trim(),
|
|
89
|
+
onClick: ()=>void handleSubmit()
|
|
90
|
+
}, busy ? "Saving…" : submitLabel))));
|
|
91
|
+
}
|
|
92
|
+
exports.FolderNameDialog = __webpack_exports__.FolderNameDialog;
|
|
93
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
94
|
+
"FolderNameDialog"
|
|
95
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
96
|
+
Object.defineProperty(exports, '__esModule', {
|
|
97
|
+
value: true
|
|
98
|
+
});
|
|
@@ -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":"AAaA;;;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,KAAoB,EACpB,WAAsB,EACtB,WAAgB,GAChB,EAAE,qBAAqB,2CA8EvB"}
|
|
@@ -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":"AAaA;;;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,KAAoB,EACpB,WAAsB,EACtB,WAAgB,GAChB,EAAE,qBAAqB,2CA8EvB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Button } from "@anvilkit/ui/button";
|
|
3
|
+
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
|
|
4
|
+
import { Input } from "@anvilkit/ui/input";
|
|
5
|
+
import * as __rspack_external_react from "react";
|
|
6
|
+
function FolderNameDialog({ open, onOpenChange, onSubmit, title = "New folder", submitLabel = "Create", initialName = "" }) {
|
|
7
|
+
const [name, setName] = __rspack_external_react.useState(initialName);
|
|
8
|
+
const [busy, setBusy] = __rspack_external_react.useState(false);
|
|
9
|
+
const [error, setError] = __rspack_external_react.useState(null);
|
|
10
|
+
__rspack_external_react.useEffect(()=>{
|
|
11
|
+
if (open) {
|
|
12
|
+
setName(initialName);
|
|
13
|
+
setError(null);
|
|
14
|
+
}
|
|
15
|
+
}, [
|
|
16
|
+
open,
|
|
17
|
+
initialName
|
|
18
|
+
]);
|
|
19
|
+
async function handleSubmit() {
|
|
20
|
+
const trimmed = name.trim();
|
|
21
|
+
if ("" === trimmed || busy) return;
|
|
22
|
+
setBusy(true);
|
|
23
|
+
setError(null);
|
|
24
|
+
try {
|
|
25
|
+
await onSubmit(trimmed);
|
|
26
|
+
onOpenChange(false);
|
|
27
|
+
} catch (cause) {
|
|
28
|
+
setError(cause instanceof Error ? cause.message : "Could not save the folder.");
|
|
29
|
+
} finally{
|
|
30
|
+
setBusy(false);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return /*#__PURE__*/ __rspack_external_react.createElement(Dialog, {
|
|
34
|
+
open: open,
|
|
35
|
+
onOpenChange: (next)=>{
|
|
36
|
+
if (!busy) onOpenChange(next);
|
|
37
|
+
}
|
|
38
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, title)), /*#__PURE__*/ __rspack_external_react.createElement(Input, {
|
|
39
|
+
value: name,
|
|
40
|
+
placeholder: "Folder name",
|
|
41
|
+
"data-testid": "ak-folder-name-input",
|
|
42
|
+
onChange: (event)=>setName(event.currentTarget.value),
|
|
43
|
+
onKeyDown: (event)=>{
|
|
44
|
+
if ("Enter" === event.key) handleSubmit();
|
|
45
|
+
}
|
|
46
|
+
}), error ? /*#__PURE__*/ __rspack_external_react.createElement("p", {
|
|
47
|
+
role: "alert",
|
|
48
|
+
className: "text-sm text-[var(--ak-studio-danger-fg,#dc2626)]"
|
|
49
|
+
}, error) : null, /*#__PURE__*/ __rspack_external_react.createElement(DialogFooter, null, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
50
|
+
type: "button",
|
|
51
|
+
variant: "outline",
|
|
52
|
+
disabled: busy,
|
|
53
|
+
onClick: ()=>onOpenChange(false)
|
|
54
|
+
}, "Cancel"), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
55
|
+
type: "button",
|
|
56
|
+
disabled: busy || "" === name.trim(),
|
|
57
|
+
onClick: ()=>void handleSubmit()
|
|
58
|
+
}, busy ? "Saving…" : submitLabel))));
|
|
59
|
+
}
|
|
60
|
+
export { FolderNameDialog };
|
|
@@ -0,0 +1,83 @@
|
|
|
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 button_namespaceObject = require("@anvilkit/ui/button");
|
|
36
|
+
const external_react_namespaceObject = require("react");
|
|
37
|
+
const ASSET_DRAG_MIME = "application/x-anvilkit-assets";
|
|
38
|
+
function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
|
|
39
|
+
const [dropTarget, setDropTarget] = external_react_namespaceObject.useState(null);
|
|
40
|
+
const handleDrop = (folderId)=>(event)=>{
|
|
41
|
+
event.preventDefault();
|
|
42
|
+
setDropTarget(null);
|
|
43
|
+
if (void 0 === onDropAssets) return;
|
|
44
|
+
try {
|
|
45
|
+
const raw = event.dataTransfer.getData(ASSET_DRAG_MIME);
|
|
46
|
+
const assetIds = raw ? JSON.parse(raw) : [];
|
|
47
|
+
if (Array.isArray(assetIds) && assetIds.length > 0) onDropAssets(assetIds, folderId);
|
|
48
|
+
} catch {}
|
|
49
|
+
};
|
|
50
|
+
if (0 === folders.length) return null;
|
|
51
|
+
const droppable = void 0 !== onDropAssets;
|
|
52
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
|
|
53
|
+
"aria-label": "Folders",
|
|
54
|
+
"data-testid": "ak-folder-tree",
|
|
55
|
+
className: "flex flex-col gap-1"
|
|
56
|
+
}, folders.map((folder)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
|
|
57
|
+
key: folder.id
|
|
58
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
59
|
+
type: "button",
|
|
60
|
+
variant: folder.id === currentFolderId ? "secondary" : "ghost",
|
|
61
|
+
size: "sm",
|
|
62
|
+
className: "w-full justify-start",
|
|
63
|
+
"data-folder-id": folder.id,
|
|
64
|
+
"data-drop-target": dropTarget === folder.id ? "" : void 0,
|
|
65
|
+
title: droppable ? `Open ${folder.name} — or drop assets here to move them in` : void 0,
|
|
66
|
+
onClick: ()=>onNavigate(folder.id),
|
|
67
|
+
onDragOver: onDropAssets ? (event)=>{
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
setDropTarget(folder.id);
|
|
70
|
+
} : void 0,
|
|
71
|
+
onDragLeave: onDropAssets ? ()=>setDropTarget((current)=>current === folder.id ? null : current) : void 0,
|
|
72
|
+
onDrop: onDropAssets ? handleDrop(folder.id) : void 0
|
|
73
|
+
}, folder.name, " (", folder.counts.assets, ")"))));
|
|
74
|
+
}
|
|
75
|
+
exports.ASSET_DRAG_MIME = __webpack_exports__.ASSET_DRAG_MIME;
|
|
76
|
+
exports.FolderTree = __webpack_exports__.FolderTree;
|
|
77
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
78
|
+
"ASSET_DRAG_MIME",
|
|
79
|
+
"FolderTree"
|
|
80
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
81
|
+
Object.defineProperty(exports, '__esModule', {
|
|
82
|
+
value: true
|
|
83
|
+
});
|
|
@@ -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":"AAKA,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,kDAoEjB"}
|
|
@@ -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":"AAKA,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,kDAoEjB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Button } from "@anvilkit/ui/button";
|
|
3
|
+
import * as __rspack_external_react from "react";
|
|
4
|
+
const ASSET_DRAG_MIME = "application/x-anvilkit-assets";
|
|
5
|
+
function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
|
|
6
|
+
const [dropTarget, setDropTarget] = __rspack_external_react.useState(null);
|
|
7
|
+
const handleDrop = (folderId)=>(event)=>{
|
|
8
|
+
event.preventDefault();
|
|
9
|
+
setDropTarget(null);
|
|
10
|
+
if (void 0 === onDropAssets) return;
|
|
11
|
+
try {
|
|
12
|
+
const raw = event.dataTransfer.getData(ASSET_DRAG_MIME);
|
|
13
|
+
const assetIds = raw ? JSON.parse(raw) : [];
|
|
14
|
+
if (Array.isArray(assetIds) && assetIds.length > 0) onDropAssets(assetIds, folderId);
|
|
15
|
+
} catch {}
|
|
16
|
+
};
|
|
17
|
+
if (0 === folders.length) return null;
|
|
18
|
+
const droppable = void 0 !== onDropAssets;
|
|
19
|
+
return /*#__PURE__*/ __rspack_external_react.createElement("ul", {
|
|
20
|
+
"aria-label": "Folders",
|
|
21
|
+
"data-testid": "ak-folder-tree",
|
|
22
|
+
className: "flex flex-col gap-1"
|
|
23
|
+
}, folders.map((folder)=>/*#__PURE__*/ __rspack_external_react.createElement("li", {
|
|
24
|
+
key: folder.id
|
|
25
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
26
|
+
type: "button",
|
|
27
|
+
variant: folder.id === currentFolderId ? "secondary" : "ghost",
|
|
28
|
+
size: "sm",
|
|
29
|
+
className: "w-full justify-start",
|
|
30
|
+
"data-folder-id": folder.id,
|
|
31
|
+
"data-drop-target": dropTarget === folder.id ? "" : void 0,
|
|
32
|
+
title: droppable ? `Open ${folder.name} — or drop assets here to move them in` : void 0,
|
|
33
|
+
onClick: ()=>onNavigate(folder.id),
|
|
34
|
+
onDragOver: onDropAssets ? (event)=>{
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
setDropTarget(folder.id);
|
|
37
|
+
} : void 0,
|
|
38
|
+
onDragLeave: onDropAssets ? ()=>setDropTarget((current)=>current === folder.id ? null : current) : void 0,
|
|
39
|
+
onDrop: onDropAssets ? handleDrop(folder.id) : void 0
|
|
40
|
+
}, folder.name, " (", folder.counts.assets, ")"))));
|
|
41
|
+
}
|
|
42
|
+
export { ASSET_DRAG_MIME, FolderTree };
|