@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.
Files changed (251) hide show
  1. package/README.md +28 -20
  2. package/dist/adapters/data-url.d.cts +13 -0
  3. package/dist/adapters/data-url.d.cts.map +1 -1
  4. package/dist/adapters/data-url.d.ts +13 -0
  5. package/dist/adapters/data-url.d.ts.map +1 -1
  6. package/dist/adapters/in-memory.d.cts +8 -1
  7. package/dist/adapters/in-memory.d.cts.map +1 -1
  8. package/dist/adapters/in-memory.d.ts +8 -1
  9. package/dist/adapters/in-memory.d.ts.map +1 -1
  10. package/dist/i18n/entry.cjs +75 -0
  11. package/dist/i18n/entry.d.cts +15 -0
  12. package/dist/i18n/entry.d.cts.map +1 -0
  13. package/dist/i18n/entry.d.ts +15 -0
  14. package/dist/i18n/entry.d.ts.map +1 -0
  15. package/dist/i18n/entry.js +29 -0
  16. package/dist/i18n/provider.cjs +49 -0
  17. package/dist/i18n/provider.d.cts +20 -0
  18. package/dist/i18n/provider.d.cts.map +1 -0
  19. package/dist/i18n/provider.d.ts +20 -0
  20. package/dist/i18n/provider.d.ts.map +1 -0
  21. package/dist/i18n/provider.js +11 -0
  22. package/dist/index.cjs +7 -0
  23. package/dist/index.d.cts +11 -3
  24. package/dist/index.d.cts.map +1 -1
  25. package/dist/index.d.ts +11 -3
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +2 -1
  28. package/dist/plugin.cjs +70 -5
  29. package/dist/plugin.d.cts +3 -2
  30. package/dist/plugin.d.cts.map +1 -1
  31. package/dist/plugin.d.ts +3 -2
  32. package/dist/plugin.d.ts.map +1 -1
  33. package/dist/plugin.js +70 -5
  34. package/dist/sources/composite-source.cjs +138 -0
  35. package/dist/sources/composite-source.d.cts +39 -0
  36. package/dist/sources/composite-source.d.cts.map +1 -0
  37. package/dist/sources/composite-source.d.ts +39 -0
  38. package/dist/sources/composite-source.d.ts.map +1 -0
  39. package/dist/sources/composite-source.js +100 -0
  40. package/dist/sources/federated-search.cjs +173 -0
  41. package/dist/sources/federated-search.d.cts +33 -0
  42. package/dist/sources/federated-search.d.cts.map +1 -0
  43. package/dist/sources/federated-search.d.ts +33 -0
  44. package/dist/sources/federated-search.d.ts.map +1 -0
  45. package/dist/sources/federated-search.js +123 -0
  46. package/dist/sources/provider.cjs +18 -0
  47. package/dist/sources/provider.d.cts +51 -0
  48. package/dist/sources/provider.d.cts.map +1 -0
  49. package/dist/sources/provider.d.ts +51 -0
  50. package/dist/sources/provider.d.ts.map +1 -0
  51. package/dist/sources/provider.js +1 -0
  52. package/dist/sources/unsplash/client.cjs +189 -0
  53. package/dist/sources/unsplash/client.d.cts +87 -0
  54. package/dist/sources/unsplash/client.d.cts.map +1 -0
  55. package/dist/sources/unsplash/client.d.ts +87 -0
  56. package/dist/sources/unsplash/client.d.ts.map +1 -0
  57. package/dist/sources/unsplash/client.js +151 -0
  58. package/dist/sources/unsplash/index.cjs +194 -0
  59. package/dist/sources/unsplash/index.d.cts +16 -0
  60. package/dist/sources/unsplash/index.d.cts.map +1 -0
  61. package/dist/sources/unsplash/index.d.ts +16 -0
  62. package/dist/sources/unsplash/index.d.ts.map +1 -0
  63. package/dist/sources/unsplash/index.js +150 -0
  64. package/dist/sources/unsplash/themes.cjs +141 -0
  65. package/dist/sources/unsplash/themes.d.cts +18 -0
  66. package/dist/sources/unsplash/themes.d.cts.map +1 -0
  67. package/dist/sources/unsplash/themes.d.ts +18 -0
  68. package/dist/sources/unsplash/themes.d.ts.map +1 -0
  69. package/dist/sources/unsplash/themes.js +93 -0
  70. package/dist/sources/unsplash/throttle-cache.cjs +86 -0
  71. package/dist/sources/unsplash/throttle-cache.d.cts +25 -0
  72. package/dist/sources/unsplash/throttle-cache.d.cts.map +1 -0
  73. package/dist/sources/unsplash/throttle-cache.d.ts +25 -0
  74. package/dist/sources/unsplash/throttle-cache.d.ts.map +1 -0
  75. package/dist/sources/unsplash/throttle-cache.js +45 -0
  76. package/dist/types/categories.cjs +18 -0
  77. package/dist/types/categories.d.cts +48 -0
  78. package/dist/types/categories.d.cts.map +1 -0
  79. package/dist/types/categories.d.ts +48 -0
  80. package/dist/types/categories.d.ts.map +1 -0
  81. package/dist/types/categories.js +1 -0
  82. package/dist/types/data-source.cjs +18 -0
  83. package/dist/types/data-source.d.cts +59 -0
  84. package/dist/types/data-source.d.cts.map +1 -0
  85. package/dist/types/data-source.d.ts +59 -0
  86. package/dist/types/data-source.d.ts.map +1 -0
  87. package/dist/types/data-source.js +1 -0
  88. package/dist/types/filter.cjs +18 -0
  89. package/dist/types/filter.d.cts +55 -0
  90. package/dist/types/filter.d.cts.map +1 -0
  91. package/dist/types/filter.d.ts +55 -0
  92. package/dist/types/filter.d.ts.map +1 -0
  93. package/dist/types/filter.js +1 -0
  94. package/dist/types/folders.cjs +42 -0
  95. package/dist/types/folders.d.cts +46 -0
  96. package/dist/types/folders.d.cts.map +1 -0
  97. package/dist/types/folders.d.ts +46 -0
  98. package/dist/types/folders.d.ts.map +1 -0
  99. package/dist/types/folders.js +4 -0
  100. package/dist/types/options.cjs +18 -0
  101. package/dist/types/options.d.cts +68 -0
  102. package/dist/types/options.d.cts.map +1 -0
  103. package/dist/types/options.d.ts +68 -0
  104. package/dist/types/options.d.ts.map +1 -0
  105. package/dist/types/options.js +1 -0
  106. package/dist/types/types.d.cts +21 -27
  107. package/dist/types/types.d.cts.map +1 -1
  108. package/dist/types/types.d.ts +21 -27
  109. package/dist/types/types.d.ts.map +1 -1
  110. package/dist/types/unsplash.cjs +18 -0
  111. package/dist/types/unsplash.d.cts +60 -0
  112. package/dist/types/unsplash.d.cts.map +1 -0
  113. package/dist/types/unsplash.d.ts +60 -0
  114. package/dist/types/unsplash.d.ts.map +1 -0
  115. package/dist/types/unsplash.js +1 -0
  116. package/dist/ui/AssetBrowser.cjs +183 -121
  117. package/dist/ui/AssetBrowser.d.cts +12 -1
  118. package/dist/ui/AssetBrowser.d.cts.map +1 -1
  119. package/dist/ui/AssetBrowser.d.ts +12 -1
  120. package/dist/ui/AssetBrowser.d.ts.map +1 -1
  121. package/dist/ui/AssetBrowser.js +183 -121
  122. package/dist/ui/AssetCommandPalette.cjs +20 -18
  123. package/dist/ui/AssetCommandPalette.d.cts.map +1 -1
  124. package/dist/ui/AssetCommandPalette.d.ts.map +1 -1
  125. package/dist/ui/AssetCommandPalette.js +20 -18
  126. package/dist/ui/AssetManagerUI.cjs +31 -17
  127. package/dist/ui/AssetManagerUI.d.cts +19 -3
  128. package/dist/ui/AssetManagerUI.d.cts.map +1 -1
  129. package/dist/ui/AssetManagerUI.d.ts +19 -3
  130. package/dist/ui/AssetManagerUI.d.ts.map +1 -1
  131. package/dist/ui/AssetManagerUI.js +31 -17
  132. package/dist/ui/DeleteAssetDialog.cjs +5 -3
  133. package/dist/ui/DeleteAssetDialog.d.cts.map +1 -1
  134. package/dist/ui/DeleteAssetDialog.d.ts.map +1 -1
  135. package/dist/ui/DeleteAssetDialog.js +5 -3
  136. package/dist/ui/DeleteFolderDialog.cjs +80 -0
  137. package/dist/ui/DeleteFolderDialog.d.cts +11 -0
  138. package/dist/ui/DeleteFolderDialog.d.cts.map +1 -0
  139. package/dist/ui/DeleteFolderDialog.d.ts +11 -0
  140. package/dist/ui/DeleteFolderDialog.d.ts.map +1 -0
  141. package/dist/ui/DeleteFolderDialog.js +42 -0
  142. package/dist/ui/EmptyFolderState.cjs +56 -0
  143. package/dist/ui/EmptyFolderState.d.cts +6 -0
  144. package/dist/ui/EmptyFolderState.d.cts.map +1 -0
  145. package/dist/ui/EmptyFolderState.d.ts +6 -0
  146. package/dist/ui/EmptyFolderState.d.ts.map +1 -0
  147. package/dist/ui/EmptyFolderState.js +18 -0
  148. package/dist/ui/FolderBreadcrumb.cjs +76 -0
  149. package/dist/ui/FolderBreadcrumb.d.cts +9 -0
  150. package/dist/ui/FolderBreadcrumb.d.cts.map +1 -0
  151. package/dist/ui/FolderBreadcrumb.d.ts +9 -0
  152. package/dist/ui/FolderBreadcrumb.d.ts.map +1 -0
  153. package/dist/ui/FolderBreadcrumb.js +38 -0
  154. package/dist/ui/FolderNameDialog.cjs +105 -0
  155. package/dist/ui/FolderNameDialog.d.cts +14 -0
  156. package/dist/ui/FolderNameDialog.d.cts.map +1 -0
  157. package/dist/ui/FolderNameDialog.d.ts +14 -0
  158. package/dist/ui/FolderNameDialog.d.ts.map +1 -0
  159. package/dist/ui/FolderNameDialog.js +67 -0
  160. package/dist/ui/FolderTree.cjs +85 -0
  161. package/dist/ui/FolderTree.d.cts +13 -0
  162. package/dist/ui/FolderTree.d.cts.map +1 -0
  163. package/dist/ui/FolderTree.d.ts +13 -0
  164. package/dist/ui/FolderTree.d.ts.map +1 -0
  165. package/dist/ui/FolderTree.js +44 -0
  166. package/dist/ui/MetadataPanel.cjs +23 -17
  167. package/dist/ui/MetadataPanel.d.cts.map +1 -1
  168. package/dist/ui/MetadataPanel.d.ts.map +1 -1
  169. package/dist/ui/MetadataPanel.js +23 -17
  170. package/dist/ui/MoveTargetPicker.cjs +87 -0
  171. package/dist/ui/MoveTargetPicker.d.cts +16 -0
  172. package/dist/ui/MoveTargetPicker.d.cts.map +1 -0
  173. package/dist/ui/MoveTargetPicker.d.ts +16 -0
  174. package/dist/ui/MoveTargetPicker.d.ts.map +1 -0
  175. package/dist/ui/MoveTargetPicker.js +49 -0
  176. package/dist/ui/ReplaceAssetDialog.cjs +19 -17
  177. package/dist/ui/ReplaceAssetDialog.d.cts +2 -1
  178. package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
  179. package/dist/ui/ReplaceAssetDialog.d.ts +2 -1
  180. package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
  181. package/dist/ui/ReplaceAssetDialog.js +19 -17
  182. package/dist/ui/UnsplashPanel.cjs +137 -0
  183. package/dist/ui/UnsplashPanel.d.cts +28 -0
  184. package/dist/ui/UnsplashPanel.d.cts.map +1 -0
  185. package/dist/ui/UnsplashPanel.d.ts +28 -0
  186. package/dist/ui/UnsplashPanel.d.ts.map +1 -0
  187. package/dist/ui/UnsplashPanel.js +99 -0
  188. package/dist/ui/UploadButton.cjs +12 -13
  189. package/dist/ui/UploadButton.d.cts +9 -2
  190. package/dist/ui/UploadButton.d.cts.map +1 -1
  191. package/dist/ui/UploadButton.d.ts +9 -2
  192. package/dist/ui/UploadButton.d.ts.map +1 -1
  193. package/dist/ui/UploadButton.js +12 -13
  194. package/dist/ui/index.cjs +41 -0
  195. package/dist/ui/index.d.cts +15 -0
  196. package/dist/ui/index.d.cts.map +1 -1
  197. package/dist/ui/index.d.ts +15 -0
  198. package/dist/ui/index.d.ts.map +1 -1
  199. package/dist/ui/index.js +8 -0
  200. package/dist/utils/data-source.cjs +190 -0
  201. package/dist/utils/data-source.d.cts +63 -0
  202. package/dist/utils/data-source.d.cts.map +1 -0
  203. package/dist/utils/data-source.d.ts +63 -0
  204. package/dist/utils/data-source.d.ts.map +1 -0
  205. package/dist/utils/data-source.js +149 -0
  206. package/dist/utils/errors.cjs +18 -0
  207. package/dist/utils/errors.d.cts +27 -0
  208. package/dist/utils/errors.d.cts.map +1 -1
  209. package/dist/utils/errors.d.ts +27 -0
  210. package/dist/utils/errors.d.ts.map +1 -1
  211. package/dist/utils/errors.js +16 -1
  212. package/dist/utils/folders.cjs +335 -0
  213. package/dist/utils/folders.d.cts +54 -0
  214. package/dist/utils/folders.d.cts.map +1 -0
  215. package/dist/utils/folders.d.ts +54 -0
  216. package/dist/utils/folders.d.ts.map +1 -0
  217. package/dist/utils/folders.js +297 -0
  218. package/dist/utils/header-action.cjs +1 -1
  219. package/dist/utils/header-action.d.cts.map +1 -1
  220. package/dist/utils/header-action.d.ts.map +1 -1
  221. package/dist/utils/header-action.js +1 -1
  222. package/dist/utils/registry.cjs +38 -12
  223. package/dist/utils/registry.d.cts +29 -1
  224. package/dist/utils/registry.d.cts.map +1 -1
  225. package/dist/utils/registry.d.ts +29 -1
  226. package/dist/utils/registry.d.ts.map +1 -1
  227. package/dist/utils/registry.js +31 -11
  228. package/dist/utils/resolver.cjs +5 -4
  229. package/dist/utils/resolver.d.cts.map +1 -1
  230. package/dist/utils/resolver.d.ts.map +1 -1
  231. package/dist/utils/resolver.js +5 -4
  232. package/dist/utils/studio-asset-source.cjs +13 -4
  233. package/dist/utils/studio-asset-source.d.cts +6 -1
  234. package/dist/utils/studio-asset-source.d.cts.map +1 -1
  235. package/dist/utils/studio-asset-source.d.ts +6 -1
  236. package/dist/utils/studio-asset-source.d.ts.map +1 -1
  237. package/dist/utils/studio-asset-source.js +9 -3
  238. package/dist/utils/validate-upload-result.d.cts +2 -1
  239. package/dist/utils/validate-upload-result.d.cts.map +1 -1
  240. package/dist/utils/validate-upload-result.d.ts +2 -1
  241. package/dist/utils/validate-upload-result.d.ts.map +1 -1
  242. package/dist/version.cjs +1 -1
  243. package/dist/version.d.cts +1 -1
  244. package/dist/version.d.ts +1 -1
  245. package/dist/version.js +1 -1
  246. package/i18n/messages/en.json +99 -0
  247. package/i18n/messages/ja.json +99 -0
  248. package/i18n/messages/ko.json +99 -0
  249. package/i18n/messages/zh.json +99 -0
  250. package/meta/config.json +1 -1
  251. 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) onCancel();
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, "Edit asset"), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, asset?.id, mimeType ? ` (${mimeType})` : "")), /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
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("label", {
104
+ }, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
100
105
  htmlFor: "asset-metadata-name"
101
- }, "Name"), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
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("label", {
116
+ }, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
112
117
  htmlFor: "asset-metadata-tag-input"
113
- }, "Tags"), /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
114
- "aria-label": "Current tags",
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("button", {
119
- "aria-label": `Remove tag ${tag}`,
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: "Add a tag and press Enter",
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: onCancel,
143
+ onClick: handleCancel,
138
144
  type: "button",
139
145
  variant: "outline"
140
- }, "Cancel"), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
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 ? "Saving…" : "Save"))));
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":"AAcA,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,2CAuIpB"}
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":"AAcA,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,2CAuIpB"}
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"}