@anvilkit/plugin-asset-manager 0.1.6 → 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.
Files changed (209) hide show
  1. package/README.md +26 -18
  2. package/dist/index.cjs +7 -0
  3. package/dist/index.d.cts +11 -3
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.ts +11 -3
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -1
  8. package/dist/plugin.cjs +67 -4
  9. package/dist/plugin.d.cts +3 -2
  10. package/dist/plugin.d.cts.map +1 -1
  11. package/dist/plugin.d.ts +3 -2
  12. package/dist/plugin.d.ts.map +1 -1
  13. package/dist/plugin.js +67 -4
  14. package/dist/sources/composite-source.cjs +137 -0
  15. package/dist/sources/composite-source.d.cts +39 -0
  16. package/dist/sources/composite-source.d.cts.map +1 -0
  17. package/dist/sources/composite-source.d.ts +39 -0
  18. package/dist/sources/composite-source.d.ts.map +1 -0
  19. package/dist/sources/composite-source.js +99 -0
  20. package/dist/sources/federated-search.cjs +163 -0
  21. package/dist/sources/federated-search.d.cts +33 -0
  22. package/dist/sources/federated-search.d.cts.map +1 -0
  23. package/dist/sources/federated-search.d.ts +33 -0
  24. package/dist/sources/federated-search.d.ts.map +1 -0
  25. package/dist/sources/federated-search.js +113 -0
  26. package/dist/sources/provider.cjs +18 -0
  27. package/dist/sources/provider.d.cts +51 -0
  28. package/dist/sources/provider.d.cts.map +1 -0
  29. package/dist/sources/provider.d.ts +51 -0
  30. package/dist/sources/provider.d.ts.map +1 -0
  31. package/dist/sources/provider.js +1 -0
  32. package/dist/sources/unsplash/client.cjs +189 -0
  33. package/dist/sources/unsplash/client.d.cts +87 -0
  34. package/dist/sources/unsplash/client.d.cts.map +1 -0
  35. package/dist/sources/unsplash/client.d.ts +87 -0
  36. package/dist/sources/unsplash/client.d.ts.map +1 -0
  37. package/dist/sources/unsplash/client.js +151 -0
  38. package/dist/sources/unsplash/index.cjs +192 -0
  39. package/dist/sources/unsplash/index.d.cts +16 -0
  40. package/dist/sources/unsplash/index.d.cts.map +1 -0
  41. package/dist/sources/unsplash/index.d.ts +16 -0
  42. package/dist/sources/unsplash/index.d.ts.map +1 -0
  43. package/dist/sources/unsplash/index.js +148 -0
  44. package/dist/sources/unsplash/themes.cjs +141 -0
  45. package/dist/sources/unsplash/themes.d.cts +18 -0
  46. package/dist/sources/unsplash/themes.d.cts.map +1 -0
  47. package/dist/sources/unsplash/themes.d.ts +18 -0
  48. package/dist/sources/unsplash/themes.d.ts.map +1 -0
  49. package/dist/sources/unsplash/themes.js +93 -0
  50. package/dist/sources/unsplash/throttle-cache.cjs +86 -0
  51. package/dist/sources/unsplash/throttle-cache.d.cts +25 -0
  52. package/dist/sources/unsplash/throttle-cache.d.cts.map +1 -0
  53. package/dist/sources/unsplash/throttle-cache.d.ts +25 -0
  54. package/dist/sources/unsplash/throttle-cache.d.ts.map +1 -0
  55. package/dist/sources/unsplash/throttle-cache.js +45 -0
  56. package/dist/types/categories.cjs +18 -0
  57. package/dist/types/categories.d.cts +48 -0
  58. package/dist/types/categories.d.cts.map +1 -0
  59. package/dist/types/categories.d.ts +48 -0
  60. package/dist/types/categories.d.ts.map +1 -0
  61. package/dist/types/categories.js +1 -0
  62. package/dist/types/data-source.cjs +18 -0
  63. package/dist/types/data-source.d.cts +59 -0
  64. package/dist/types/data-source.d.cts.map +1 -0
  65. package/dist/types/data-source.d.ts +59 -0
  66. package/dist/types/data-source.d.ts.map +1 -0
  67. package/dist/types/data-source.js +1 -0
  68. package/dist/types/filter.cjs +18 -0
  69. package/dist/types/filter.d.cts +55 -0
  70. package/dist/types/filter.d.cts.map +1 -0
  71. package/dist/types/filter.d.ts +55 -0
  72. package/dist/types/filter.d.ts.map +1 -0
  73. package/dist/types/filter.js +1 -0
  74. package/dist/types/folders.cjs +42 -0
  75. package/dist/types/folders.d.cts +46 -0
  76. package/dist/types/folders.d.cts.map +1 -0
  77. package/dist/types/folders.d.ts +46 -0
  78. package/dist/types/folders.d.ts.map +1 -0
  79. package/dist/types/folders.js +4 -0
  80. package/dist/types/options.cjs +18 -0
  81. package/dist/types/options.d.cts +68 -0
  82. package/dist/types/options.d.cts.map +1 -0
  83. package/dist/types/options.d.ts +68 -0
  84. package/dist/types/options.d.ts.map +1 -0
  85. package/dist/types/options.js +1 -0
  86. package/dist/types/types.d.cts +15 -27
  87. package/dist/types/types.d.cts.map +1 -1
  88. package/dist/types/types.d.ts +15 -27
  89. package/dist/types/types.d.ts.map +1 -1
  90. package/dist/types/unsplash.cjs +18 -0
  91. package/dist/types/unsplash.d.cts +60 -0
  92. package/dist/types/unsplash.d.cts.map +1 -0
  93. package/dist/types/unsplash.d.ts +60 -0
  94. package/dist/types/unsplash.d.ts.map +1 -0
  95. package/dist/types/unsplash.js +1 -0
  96. package/dist/ui/AssetBrowser.cjs +33 -12
  97. package/dist/ui/AssetBrowser.d.cts +12 -1
  98. package/dist/ui/AssetBrowser.d.cts.map +1 -1
  99. package/dist/ui/AssetBrowser.d.ts +12 -1
  100. package/dist/ui/AssetBrowser.d.ts.map +1 -1
  101. package/dist/ui/AssetBrowser.js +33 -12
  102. package/dist/ui/AssetManagerUI.cjs +8 -2
  103. package/dist/ui/AssetManagerUI.d.cts +19 -3
  104. package/dist/ui/AssetManagerUI.d.cts.map +1 -1
  105. package/dist/ui/AssetManagerUI.d.ts +19 -3
  106. package/dist/ui/AssetManagerUI.d.ts.map +1 -1
  107. package/dist/ui/AssetManagerUI.js +8 -2
  108. package/dist/ui/DeleteFolderDialog.cjs +78 -0
  109. package/dist/ui/DeleteFolderDialog.d.cts +11 -0
  110. package/dist/ui/DeleteFolderDialog.d.cts.map +1 -0
  111. package/dist/ui/DeleteFolderDialog.d.ts +11 -0
  112. package/dist/ui/DeleteFolderDialog.d.ts.map +1 -0
  113. package/dist/ui/DeleteFolderDialog.js +40 -0
  114. package/dist/ui/EmptyFolderState.cjs +53 -0
  115. package/dist/ui/EmptyFolderState.d.cts +6 -0
  116. package/dist/ui/EmptyFolderState.d.cts.map +1 -0
  117. package/dist/ui/EmptyFolderState.d.ts +6 -0
  118. package/dist/ui/EmptyFolderState.d.ts.map +1 -0
  119. package/dist/ui/EmptyFolderState.js +15 -0
  120. package/dist/ui/FolderBreadcrumb.cjs +73 -0
  121. package/dist/ui/FolderBreadcrumb.d.cts +9 -0
  122. package/dist/ui/FolderBreadcrumb.d.cts.map +1 -0
  123. package/dist/ui/FolderBreadcrumb.d.ts +9 -0
  124. package/dist/ui/FolderBreadcrumb.d.ts.map +1 -0
  125. package/dist/ui/FolderBreadcrumb.js +35 -0
  126. package/dist/ui/FolderNameDialog.cjs +98 -0
  127. package/dist/ui/FolderNameDialog.d.cts +14 -0
  128. package/dist/ui/FolderNameDialog.d.cts.map +1 -0
  129. package/dist/ui/FolderNameDialog.d.ts +14 -0
  130. package/dist/ui/FolderNameDialog.d.ts.map +1 -0
  131. package/dist/ui/FolderNameDialog.js +60 -0
  132. package/dist/ui/FolderTree.cjs +83 -0
  133. package/dist/ui/FolderTree.d.cts +13 -0
  134. package/dist/ui/FolderTree.d.cts.map +1 -0
  135. package/dist/ui/FolderTree.d.ts +13 -0
  136. package/dist/ui/FolderTree.d.ts.map +1 -0
  137. package/dist/ui/FolderTree.js +42 -0
  138. package/dist/ui/MetadataPanel.cjs +7 -4
  139. package/dist/ui/MetadataPanel.d.cts.map +1 -1
  140. package/dist/ui/MetadataPanel.d.ts.map +1 -1
  141. package/dist/ui/MetadataPanel.js +7 -4
  142. package/dist/ui/MoveTargetPicker.cjs +84 -0
  143. package/dist/ui/MoveTargetPicker.d.cts +16 -0
  144. package/dist/ui/MoveTargetPicker.d.cts.map +1 -0
  145. package/dist/ui/MoveTargetPicker.d.ts +16 -0
  146. package/dist/ui/MoveTargetPicker.d.ts.map +1 -0
  147. package/dist/ui/MoveTargetPicker.js +46 -0
  148. package/dist/ui/ReplaceAssetDialog.d.cts +2 -1
  149. package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
  150. package/dist/ui/ReplaceAssetDialog.d.ts +2 -1
  151. package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
  152. package/dist/ui/UnsplashPanel.cjs +134 -0
  153. package/dist/ui/UnsplashPanel.d.cts +28 -0
  154. package/dist/ui/UnsplashPanel.d.cts.map +1 -0
  155. package/dist/ui/UnsplashPanel.d.ts +28 -0
  156. package/dist/ui/UnsplashPanel.d.ts.map +1 -0
  157. package/dist/ui/UnsplashPanel.js +96 -0
  158. package/dist/ui/UploadButton.cjs +1 -5
  159. package/dist/ui/UploadButton.d.cts +9 -2
  160. package/dist/ui/UploadButton.d.cts.map +1 -1
  161. package/dist/ui/UploadButton.d.ts +9 -2
  162. package/dist/ui/UploadButton.d.ts.map +1 -1
  163. package/dist/ui/UploadButton.js +1 -5
  164. package/dist/ui/index.cjs +37 -0
  165. package/dist/ui/index.d.cts +14 -0
  166. package/dist/ui/index.d.cts.map +1 -1
  167. package/dist/ui/index.d.ts +14 -0
  168. package/dist/ui/index.d.ts.map +1 -1
  169. package/dist/ui/index.js +7 -0
  170. package/dist/utils/data-source.cjs +177 -0
  171. package/dist/utils/data-source.d.cts +63 -0
  172. package/dist/utils/data-source.d.cts.map +1 -0
  173. package/dist/utils/data-source.d.ts +63 -0
  174. package/dist/utils/data-source.d.ts.map +1 -0
  175. package/dist/utils/data-source.js +136 -0
  176. package/dist/utils/errors.cjs +18 -0
  177. package/dist/utils/errors.d.cts +27 -0
  178. package/dist/utils/errors.d.cts.map +1 -1
  179. package/dist/utils/errors.d.ts +27 -0
  180. package/dist/utils/errors.d.ts.map +1 -1
  181. package/dist/utils/errors.js +16 -1
  182. package/dist/utils/folders.cjs +261 -0
  183. package/dist/utils/folders.d.cts +49 -0
  184. package/dist/utils/folders.d.cts.map +1 -0
  185. package/dist/utils/folders.d.ts +49 -0
  186. package/dist/utils/folders.d.ts.map +1 -0
  187. package/dist/utils/folders.js +223 -0
  188. package/dist/utils/registry.cjs +27 -12
  189. package/dist/utils/registry.d.cts +21 -1
  190. package/dist/utils/registry.d.cts.map +1 -1
  191. package/dist/utils/registry.d.ts +21 -1
  192. package/dist/utils/registry.d.ts.map +1 -1
  193. package/dist/utils/registry.js +20 -11
  194. package/dist/utils/studio-asset-source.cjs +5 -2
  195. package/dist/utils/studio-asset-source.d.cts +6 -1
  196. package/dist/utils/studio-asset-source.d.cts.map +1 -1
  197. package/dist/utils/studio-asset-source.d.ts +6 -1
  198. package/dist/utils/studio-asset-source.d.ts.map +1 -1
  199. package/dist/utils/studio-asset-source.js +1 -1
  200. package/dist/utils/validate-upload-result.d.cts +2 -1
  201. package/dist/utils/validate-upload-result.d.cts.map +1 -1
  202. package/dist/utils/validate-upload-result.d.ts +2 -1
  203. package/dist/utils/validate-upload-result.d.ts.map +1 -1
  204. package/dist/version.cjs +1 -1
  205. package/dist/version.d.cts +1 -1
  206. package/dist/version.d.ts +1 -1
  207. package/dist/version.js +1 -1
  208. package/meta/config.json +1 -1
  209. package/package.json +12 -2
@@ -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 };
@@ -34,6 +34,7 @@ __webpack_require__.d(__webpack_exports__, {
34
34
  const button_namespaceObject = require("@anvilkit/ui/button");
35
35
  const dialog_namespaceObject = require("@anvilkit/ui/dialog");
36
36
  const input_namespaceObject = require("@anvilkit/ui/input");
37
+ const label_namespaceObject = require("@anvilkit/ui/label");
37
38
  const external_react_namespaceObject = require("react");
38
39
  function MetadataPanel({ asset, onCancel, onConfirm }) {
39
40
  const [name, setName] = external_react_namespaceObject.useState("");
@@ -96,7 +97,7 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
96
97
  onOpenChange: handleOpenChange
97
98
  }, /*#__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, "Edit asset"), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, asset?.id, mimeType ? ` (${mimeType})` : "")), /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
98
99
  "data-asset-manager-metadata": true
99
- }, /*#__PURE__*/ external_react_namespaceObject.createElement("label", {
100
+ }, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
100
101
  htmlFor: "asset-metadata-name"
101
102
  }, "Name"), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
102
103
  id: "asset-metadata-name",
@@ -108,21 +109,23 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
108
109
  disabled: busy
109
110
  }), /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
110
111
  "data-asset-manager-tag-editor": true
111
- }, /*#__PURE__*/ external_react_namespaceObject.createElement("label", {
112
+ }, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
112
113
  htmlFor: "asset-metadata-tag-input"
113
114
  }, "Tags"), /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
114
115
  "aria-label": "Current tags",
115
116
  role: "list"
116
117
  }, tags.map((tag)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
117
118
  key: tag
118
- }, /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, tag), /*#__PURE__*/ external_react_namespaceObject.createElement("button", {
119
+ }, /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, tag), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
119
120
  "aria-label": `Remove tag ${tag}`,
120
121
  "data-asset-action": "remove-tag",
121
122
  disabled: busy,
122
123
  onClick: ()=>{
123
124
  removeTag(tag);
124
125
  },
125
- type: "button"
126
+ type: "button",
127
+ variant: "ghost",
128
+ size: "icon-xs"
126
129
  }, "\xd7")))), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
127
130
  id: "asset-metadata-tag-input",
128
131
  value: tagInput,