@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
@@ -31,6 +31,7 @@ __webpack_require__.r(__webpack_exports__);
31
31
  __webpack_require__.d(__webpack_exports__, {
32
32
  AssetManagerUI: ()=>AssetManagerUI
33
33
  });
34
+ const i18n_namespaceObject = require("@anvilkit/core/i18n");
34
35
  const card_namespaceObject = require("@anvilkit/ui/card");
35
36
  const progress_namespaceObject = require("@anvilkit/ui/progress");
36
37
  const external_react_namespaceObject = require("react");
@@ -41,7 +42,8 @@ const external_DeleteAssetDialog_cjs_namespaceObject = require("./DeleteAssetDia
41
42
  const external_MetadataPanel_cjs_namespaceObject = require("./MetadataPanel.cjs");
42
43
  const external_ReplaceAssetDialog_cjs_namespaceObject = require("./ReplaceAssetDialog.cjs");
43
44
  const external_UploadButton_cjs_namespaceObject = require("./UploadButton.cjs");
44
- function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAllowlistOptIn, maxFileSize, onAssetInserted, registry, searchEnabled = true, uploader }) {
45
+ function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, aboveFilters, dataUrlAllowlistOptIn, draggableRows, maxFileSize, onAssetInserted, registry, searchEnabled = true, uploader }) {
46
+ const msg = (0, i18n_namespaceObject.useMsg)();
45
47
  const [assets, setAssets] = external_react_namespaceObject.useState(()=>registry.list());
46
48
  const [progress, setProgress] = external_react_namespaceObject.useState(null);
47
49
  const [pendingDelete, setPendingDelete] = external_react_namespaceObject.useState(null);
@@ -103,9 +105,23 @@ function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlA
103
105
  registry.setTags(asset.id, next.tags);
104
106
  setPendingEdit(null);
105
107
  }
108
+ const handleBrowserDelete = external_react_namespaceObject.useCallback((asset)=>{
109
+ setPendingDelete(asset);
110
+ }, []);
111
+ const handleBrowserEdit = external_react_namespaceObject.useCallback((asset)=>{
112
+ setPendingEdit(asset);
113
+ }, []);
114
+ const handleBrowserInsert = external_react_namespaceObject.useCallback((asset)=>{
115
+ onAssetInserted?.(asset);
116
+ }, [
117
+ onAssetInserted
118
+ ]);
119
+ const handleBrowserReplace = external_react_namespaceObject.useCallback((asset)=>{
120
+ setPendingReplace(asset);
121
+ }, []);
106
122
  const showProgress = null !== progress && progress.total > 0;
107
123
  const percent = showProgress ? Math.round(progress.completed / progress.total * 100) : 0;
108
- return /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.Card, null, /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardTitle, null, "Asset manager"), /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardDescription, null, "Upload via the configured adapter, then insert a validated asset reference.")), /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(external_UploadButton_cjs_namespaceObject.UploadButton, {
124
+ return /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.Card, null, /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardTitle, null, msg("assetManager.ui.title")), /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardDescription, null, msg("assetManager.ui.subtitle"))), /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(external_UploadButton_cjs_namespaceObject.UploadButton, {
109
125
  acceptedMimeTypes: acceptedMimeTypes,
110
126
  allowMixedScriptHostnames: allowMixedScriptHostnames,
111
127
  dataUrlAllowlistOptIn: dataUrlAllowlistOptIn,
@@ -116,26 +132,24 @@ function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlA
116
132
  }), showProgress ? /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
117
133
  "data-asset-manager-progress": true
118
134
  }, /*#__PURE__*/ external_react_namespaceObject.createElement(progress_namespaceObject.Progress, {
119
- "aria-label": "Batch upload progress",
135
+ "aria-label": msg("assetManager.upload.progressLabel"),
120
136
  value: percent
121
137
  }), /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
122
138
  "aria-live": "polite",
123
139
  role: "status"
124
- }, "Uploading ", progress.completed, " of ", progress.total)) : null, /*#__PURE__*/ external_react_namespaceObject.createElement(external_AssetBrowser_cjs_namespaceObject.AssetBrowser, {
140
+ }, msg("assetManager.upload.status").replace("{completed}", String(progress.completed)).replace("{total}", String(progress.total)))) : null, /*#__PURE__*/ external_react_namespaceObject.createElement(external_AssetBrowser_cjs_namespaceObject.AssetBrowser, {
125
141
  assets: assets,
126
- onDelete: (asset)=>{
127
- setPendingDelete(asset);
128
- },
129
- onEdit: (asset)=>{
130
- setPendingEdit(asset);
131
- },
132
- onInsert: (asset)=>{
133
- onAssetInserted?.(asset);
134
- },
135
- onReplace: (asset)=>{
136
- setPendingReplace(asset);
137
- },
138
- searchEnabled: searchEnabled
142
+ onDelete: handleBrowserDelete,
143
+ onEdit: handleBrowserEdit,
144
+ onInsert: handleBrowserInsert,
145
+ onReplace: handleBrowserReplace,
146
+ searchEnabled: searchEnabled,
147
+ ...void 0 !== aboveFilters ? {
148
+ aboveFilters
149
+ } : {},
150
+ ...void 0 !== draggableRows ? {
151
+ draggableRows
152
+ } : {}
139
153
  }), /*#__PURE__*/ external_react_namespaceObject.createElement(external_DeleteAssetDialog_cjs_namespaceObject.DeleteAssetDialog, {
140
154
  asset: pendingDelete,
141
155
  onCancel: ()=>{
@@ -1,5 +1,13 @@
1
- import type { AssetManagerOptions, AssetRegistry, UploadResult } from "../types/types.js";
2
- export interface AssetManagerUIProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize" | "uploader" | "dataUrlAllowlistOptIn" | "allowMixedScriptHostnames"> {
1
+ import * as React from "react";
2
+ import type { AssetManagerOptions } from "../types/options.js";
3
+ import type { AssetRegistry, UploadAdapter, UploadResult } from "../types/types.js";
4
+ export interface AssetManagerUIProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize" | "dataUrlAllowlistOptIn" | "allowMixedScriptHostnames"> {
5
+ /**
6
+ * Binary uploader. Required at the UI boundary even though
7
+ * `AssetManagerOptions.uploader` is optional — the plugin passes the
8
+ * resolved (defaulted) uploader.
9
+ */
10
+ readonly uploader: UploadAdapter;
3
11
  readonly registry: AssetRegistry;
4
12
  readonly onAssetInserted?: (asset: UploadResult) => void;
5
13
  /**
@@ -10,6 +18,14 @@ export interface AssetManagerUIProps extends Pick<AssetManagerOptions, "accepted
10
18
  * chrome can opt out.
11
19
  */
12
20
  readonly searchEnabled?: boolean;
21
+ /**
22
+ * Optional content rendered above the browser's filter row — e.g. a
23
+ * `FolderBreadcrumb` + `FolderTree` for folder navigation (PRD 0002 §7.4).
24
+ * The host wires these to the resolved data source / composite source.
25
+ */
26
+ readonly aboveFilters?: React.ReactNode;
27
+ /** Make asset rows draggable so they can be dropped onto a `FolderTree`. */
28
+ readonly draggableRows?: boolean;
13
29
  }
14
- export declare function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAllowlistOptIn, maxFileSize, onAssetInserted, registry, searchEnabled, uploader, }: AssetManagerUIProps): import("react/jsx-runtime").JSX.Element;
30
+ export declare function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, aboveFilters, dataUrlAllowlistOptIn, draggableRows, maxFileSize, onAssetInserted, registry, searchEnabled, uploader, }: AssetManagerUIProps): import("react/jsx-runtime").JSX.Element;
15
31
  //# sourceMappingURL=AssetManagerUI.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetManagerUI.d.cts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAS3B,MAAM,WAAW,mBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC7B;IACD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC9B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACR,EAAE,mBAAmB,2CAiKrB"}
1
+ {"version":3,"file":"AssetManagerUI.d.cts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAS3B,MAAM,WAAW,mBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,uBAAuB,GACvB,2BAA2B,CAC7B;IACD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxC,4EAA4E;IAC5E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC9B,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACR,EAAE,mBAAmB,2CAiLrB"}
@@ -1,5 +1,13 @@
1
- import type { AssetManagerOptions, AssetRegistry, UploadResult } from "../types/types.js";
2
- export interface AssetManagerUIProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize" | "uploader" | "dataUrlAllowlistOptIn" | "allowMixedScriptHostnames"> {
1
+ import * as React from "react";
2
+ import type { AssetManagerOptions } from "../types/options.js";
3
+ import type { AssetRegistry, UploadAdapter, UploadResult } from "../types/types.js";
4
+ export interface AssetManagerUIProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize" | "dataUrlAllowlistOptIn" | "allowMixedScriptHostnames"> {
5
+ /**
6
+ * Binary uploader. Required at the UI boundary even though
7
+ * `AssetManagerOptions.uploader` is optional — the plugin passes the
8
+ * resolved (defaulted) uploader.
9
+ */
10
+ readonly uploader: UploadAdapter;
3
11
  readonly registry: AssetRegistry;
4
12
  readonly onAssetInserted?: (asset: UploadResult) => void;
5
13
  /**
@@ -10,6 +18,14 @@ export interface AssetManagerUIProps extends Pick<AssetManagerOptions, "accepted
10
18
  * chrome can opt out.
11
19
  */
12
20
  readonly searchEnabled?: boolean;
21
+ /**
22
+ * Optional content rendered above the browser's filter row — e.g. a
23
+ * `FolderBreadcrumb` + `FolderTree` for folder navigation (PRD 0002 §7.4).
24
+ * The host wires these to the resolved data source / composite source.
25
+ */
26
+ readonly aboveFilters?: React.ReactNode;
27
+ /** Make asset rows draggable so they can be dropped onto a `FolderTree`. */
28
+ readonly draggableRows?: boolean;
13
29
  }
14
- export declare function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAllowlistOptIn, maxFileSize, onAssetInserted, registry, searchEnabled, uploader, }: AssetManagerUIProps): import("react/jsx-runtime").JSX.Element;
30
+ export declare function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, aboveFilters, dataUrlAllowlistOptIn, draggableRows, maxFileSize, onAssetInserted, registry, searchEnabled, uploader, }: AssetManagerUIProps): import("react/jsx-runtime").JSX.Element;
15
31
  //# sourceMappingURL=AssetManagerUI.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetManagerUI.d.ts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAS3B,MAAM,WAAW,mBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC7B;IACD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC9B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACR,EAAE,mBAAmB,2CAiKrB"}
1
+ {"version":3,"file":"AssetManagerUI.d.ts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAS3B,MAAM,WAAW,mBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,uBAAuB,GACvB,2BAA2B,CAC7B;IACD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxC,4EAA4E;IAC5E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC9B,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACR,EAAE,mBAAmB,2CAiLrB"}
@@ -1,4 +1,5 @@
1
1
  "use client";
2
+ import { useMsg } from "@anvilkit/core/i18n";
2
3
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@anvilkit/ui/card";
3
4
  import { Progress } from "@anvilkit/ui/progress";
4
5
  import { validateUploadResult } from "../utils/validate-upload-result.js";
@@ -9,7 +10,8 @@ import { MetadataPanel } from "./MetadataPanel.js";
9
10
  import { ReplaceAssetDialog } from "./ReplaceAssetDialog.js";
10
11
  import { UploadButton } from "./UploadButton.js";
11
12
  import * as __rspack_external_react from "react";
12
- function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAllowlistOptIn, maxFileSize, onAssetInserted, registry, searchEnabled = true, uploader }) {
13
+ function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, aboveFilters, dataUrlAllowlistOptIn, draggableRows, maxFileSize, onAssetInserted, registry, searchEnabled = true, uploader }) {
14
+ const msg = useMsg();
13
15
  const [assets, setAssets] = __rspack_external_react.useState(()=>registry.list());
14
16
  const [progress, setProgress] = __rspack_external_react.useState(null);
15
17
  const [pendingDelete, setPendingDelete] = __rspack_external_react.useState(null);
@@ -71,9 +73,23 @@ function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlA
71
73
  registry.setTags(asset.id, next.tags);
72
74
  setPendingEdit(null);
73
75
  }
76
+ const handleBrowserDelete = __rspack_external_react.useCallback((asset)=>{
77
+ setPendingDelete(asset);
78
+ }, []);
79
+ const handleBrowserEdit = __rspack_external_react.useCallback((asset)=>{
80
+ setPendingEdit(asset);
81
+ }, []);
82
+ const handleBrowserInsert = __rspack_external_react.useCallback((asset)=>{
83
+ onAssetInserted?.(asset);
84
+ }, [
85
+ onAssetInserted
86
+ ]);
87
+ const handleBrowserReplace = __rspack_external_react.useCallback((asset)=>{
88
+ setPendingReplace(asset);
89
+ }, []);
74
90
  const showProgress = null !== progress && progress.total > 0;
75
91
  const percent = showProgress ? Math.round(progress.completed / progress.total * 100) : 0;
76
- return /*#__PURE__*/ __rspack_external_react.createElement(Card, null, /*#__PURE__*/ __rspack_external_react.createElement(CardHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(CardTitle, null, "Asset manager"), /*#__PURE__*/ __rspack_external_react.createElement(CardDescription, null, "Upload via the configured adapter, then insert a validated asset reference.")), /*#__PURE__*/ __rspack_external_react.createElement(CardContent, null, /*#__PURE__*/ __rspack_external_react.createElement(UploadButton, {
92
+ return /*#__PURE__*/ __rspack_external_react.createElement(Card, null, /*#__PURE__*/ __rspack_external_react.createElement(CardHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(CardTitle, null, msg("assetManager.ui.title")), /*#__PURE__*/ __rspack_external_react.createElement(CardDescription, null, msg("assetManager.ui.subtitle"))), /*#__PURE__*/ __rspack_external_react.createElement(CardContent, null, /*#__PURE__*/ __rspack_external_react.createElement(UploadButton, {
77
93
  acceptedMimeTypes: acceptedMimeTypes,
78
94
  allowMixedScriptHostnames: allowMixedScriptHostnames,
79
95
  dataUrlAllowlistOptIn: dataUrlAllowlistOptIn,
@@ -84,26 +100,24 @@ function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlA
84
100
  }), showProgress ? /*#__PURE__*/ __rspack_external_react.createElement("div", {
85
101
  "data-asset-manager-progress": true
86
102
  }, /*#__PURE__*/ __rspack_external_react.createElement(Progress, {
87
- "aria-label": "Batch upload progress",
103
+ "aria-label": msg("assetManager.upload.progressLabel"),
88
104
  value: percent
89
105
  }), /*#__PURE__*/ __rspack_external_react.createElement("p", {
90
106
  "aria-live": "polite",
91
107
  role: "status"
92
- }, "Uploading ", progress.completed, " of ", progress.total)) : null, /*#__PURE__*/ __rspack_external_react.createElement(AssetBrowser, {
108
+ }, msg("assetManager.upload.status").replace("{completed}", String(progress.completed)).replace("{total}", String(progress.total)))) : null, /*#__PURE__*/ __rspack_external_react.createElement(AssetBrowser, {
93
109
  assets: assets,
94
- onDelete: (asset)=>{
95
- setPendingDelete(asset);
96
- },
97
- onEdit: (asset)=>{
98
- setPendingEdit(asset);
99
- },
100
- onInsert: (asset)=>{
101
- onAssetInserted?.(asset);
102
- },
103
- onReplace: (asset)=>{
104
- setPendingReplace(asset);
105
- },
106
- searchEnabled: searchEnabled
110
+ onDelete: handleBrowserDelete,
111
+ onEdit: handleBrowserEdit,
112
+ onInsert: handleBrowserInsert,
113
+ onReplace: handleBrowserReplace,
114
+ searchEnabled: searchEnabled,
115
+ ...void 0 !== aboveFilters ? {
116
+ aboveFilters
117
+ } : {},
118
+ ...void 0 !== draggableRows ? {
119
+ draggableRows
120
+ } : {}
107
121
  }), /*#__PURE__*/ __rspack_external_react.createElement(DeleteAssetDialog, {
108
122
  asset: pendingDelete,
109
123
  onCancel: ()=>{
@@ -31,10 +31,12 @@ __webpack_require__.r(__webpack_exports__);
31
31
  __webpack_require__.d(__webpack_exports__, {
32
32
  DeleteAssetDialog: ()=>DeleteAssetDialog
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 external_react_namespaceObject = require("react");
37
38
  function DeleteAssetDialog({ asset, onCancel, onConfirm, referenceCount }) {
39
+ const msg = (0, i18n_namespaceObject.useMsg)();
38
40
  const [busy, setBusy] = external_react_namespaceObject.useState(false);
39
41
  async function handleConfirm() {
40
42
  if (null === asset || busy) return;
@@ -54,17 +56,17 @@ function DeleteAssetDialog({ asset, onCancel, onConfirm, referenceCount }) {
54
56
  return /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.Dialog, {
55
57
  open: open,
56
58
  onOpenChange: handleOpenChange
57
- }, /*#__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, "Delete asset?"), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, label, mimeType ? ` (${mimeType})` : "", " will be removed from the registry. References to it in the page will fail to resolve.", "number" == typeof referenceCount && referenceCount > 0 ? ` This asset is referenced in ${referenceCount} ${1 === referenceCount ? "node" : "nodes"}.` : "")), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogFooter, null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
59
+ }, /*#__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.deleteTitle")), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, label, mimeType ? ` (${mimeType})` : "", " ", msg("assetManager.dialog.deleteDescription"), "number" == typeof referenceCount && referenceCount > 0 ? ` ${msg("assetManager.dialog.deleteReferenced").replace("{count}", String(referenceCount)).replace("{nodes}", 1 === referenceCount ? "node" : "nodes")}` : "")), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogFooter, null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
58
60
  type: "button",
59
61
  variant: "outline",
60
62
  onClick: onCancel,
61
63
  disabled: busy
62
- }, "Cancel"), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
64
+ }, msg("assetManager.button.cancel")), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
63
65
  type: "button",
64
66
  variant: "destructive",
65
67
  onClick: handleConfirm,
66
68
  disabled: busy || null === asset
67
- }, busy ? "Deleting…" : "Delete"))));
69
+ }, busy ? msg("assetManager.dialog.deleteProgress") : msg("assetManager.button.delete")))));
68
70
  }
69
71
  exports.DeleteAssetDialog = __webpack_exports__.DeleteAssetDialog;
70
72
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACd,EAAE,sBAAsB,2CA8DxB"}
1
+ {"version":3,"file":"DeleteAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACd,EAAE,sBAAsB,2CAiExB"}
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACd,EAAE,sBAAsB,2CA8DxB"}
1
+ {"version":3,"file":"DeleteAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACd,EAAE,sBAAsB,2CAiExB"}
@@ -1,8 +1,10 @@
1
1
  "use client";
2
+ import { useMsg } from "@anvilkit/core/i18n";
2
3
  import { Button } from "@anvilkit/ui/button";
3
4
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
4
5
  import * as __rspack_external_react from "react";
5
6
  function DeleteAssetDialog({ asset, onCancel, onConfirm, referenceCount }) {
7
+ const msg = useMsg();
6
8
  const [busy, setBusy] = __rspack_external_react.useState(false);
7
9
  async function handleConfirm() {
8
10
  if (null === asset || busy) return;
@@ -22,16 +24,16 @@ function DeleteAssetDialog({ asset, onCancel, onConfirm, referenceCount }) {
22
24
  return /*#__PURE__*/ __rspack_external_react.createElement(Dialog, {
23
25
  open: open,
24
26
  onOpenChange: handleOpenChange
25
- }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, "Delete asset?"), /*#__PURE__*/ __rspack_external_react.createElement(DialogDescription, null, label, mimeType ? ` (${mimeType})` : "", " will be removed from the registry. References to it in the page will fail to resolve.", "number" == typeof referenceCount && referenceCount > 0 ? ` This asset is referenced in ${referenceCount} ${1 === referenceCount ? "node" : "nodes"}.` : "")), /*#__PURE__*/ __rspack_external_react.createElement(DialogFooter, null, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
27
+ }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, msg("assetManager.dialog.deleteTitle")), /*#__PURE__*/ __rspack_external_react.createElement(DialogDescription, null, label, mimeType ? ` (${mimeType})` : "", " ", msg("assetManager.dialog.deleteDescription"), "number" == typeof referenceCount && referenceCount > 0 ? ` ${msg("assetManager.dialog.deleteReferenced").replace("{count}", String(referenceCount)).replace("{nodes}", 1 === referenceCount ? "node" : "nodes")}` : "")), /*#__PURE__*/ __rspack_external_react.createElement(DialogFooter, null, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
26
28
  type: "button",
27
29
  variant: "outline",
28
30
  onClick: onCancel,
29
31
  disabled: busy
30
- }, "Cancel"), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
32
+ }, msg("assetManager.button.cancel")), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
31
33
  type: "button",
32
34
  variant: "destructive",
33
35
  onClick: handleConfirm,
34
36
  disabled: busy || null === asset
35
- }, busy ? "Deleting…" : "Delete"))));
37
+ }, busy ? msg("assetManager.dialog.deleteProgress") : msg("assetManager.button.delete")))));
36
38
  }
37
39
  export { DeleteAssetDialog };
@@ -0,0 +1,80 @@
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
+ DeleteFolderDialog: ()=>DeleteFolderDialog
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 external_react_namespaceObject = require("react");
38
+ function DeleteFolderDialog({ folder, onConfirm, onCancel }) {
39
+ const msg = (0, i18n_namespaceObject.useMsg)();
40
+ const [busy, setBusy] = external_react_namespaceObject.useState(false);
41
+ async function confirm(cascade) {
42
+ if (null === folder || busy) return;
43
+ setBusy(true);
44
+ try {
45
+ await onConfirm(folder, cascade);
46
+ } finally{
47
+ setBusy(false);
48
+ }
49
+ }
50
+ const open = null !== folder;
51
+ const assetCount = folder?.counts.assets ?? 0;
52
+ return /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.Dialog, {
53
+ open: open,
54
+ onOpenChange: (next)=>{
55
+ if (!next && !busy) onCancel();
56
+ }
57
+ }, /*#__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.deleteFolderTitle")), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, msg("assetManager.dialog.deleteFolderDescription").replace("{name}", folder?.name ?? "").replace("{count}", String(assetCount)).replace("{assets}", 1 === assetCount ? "asset" : "assets"))), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogFooter, null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
58
+ type: "button",
59
+ variant: "outline",
60
+ disabled: busy,
61
+ onClick: onCancel
62
+ }, msg("assetManager.button.cancel")), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
63
+ type: "button",
64
+ variant: "outline",
65
+ disabled: busy || null === folder,
66
+ onClick: ()=>void confirm(false)
67
+ }, busy ? msg("assetManager.dialog.removeProgress") : msg("assetManager.dialog.removeFolder")), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
68
+ type: "button",
69
+ variant: "destructive",
70
+ disabled: busy || null === folder,
71
+ onClick: ()=>void confirm(true)
72
+ }, msg("assetManager.button.deleteContents")))));
73
+ }
74
+ exports.DeleteFolderDialog = __webpack_exports__.DeleteFolderDialog;
75
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
76
+ "DeleteFolderDialog"
77
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
78
+ Object.defineProperty(exports, '__esModule', {
79
+ value: true
80
+ });
@@ -0,0 +1,11 @@
1
+ import type { AssetFolder } from "../types/folders.js";
2
+ export interface DeleteFolderDialogProps {
3
+ /** Folder to delete. `null` ⇒ closed. */
4
+ readonly folder: AssetFolder | null;
5
+ /** Confirm. `cascade=false` reparents children to the parent (default, safe);
6
+ * `cascade=true` also deletes the descendant assets. */
7
+ readonly onConfirm: (folder: AssetFolder, cascade: boolean) => void | Promise<void>;
8
+ readonly onCancel: () => void;
9
+ }
10
+ export declare function DeleteFolderDialog({ folder, onConfirm, onCancel, }: DeleteFolderDialogProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=DeleteFolderDialog.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeleteFolderDialog.d.cts","sourceRoot":"","sources":["../../src/ui/DeleteFolderDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,uBAAuB;IACvC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC;6DACyD;IACzD,QAAQ,CAAC,SAAS,EAAE,CACnB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,KACZ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,EAClC,MAAM,EACN,SAAS,EACT,QAAQ,GACR,EAAE,uBAAuB,2CAmEzB"}
@@ -0,0 +1,11 @@
1
+ import type { AssetFolder } from "../types/folders.js";
2
+ export interface DeleteFolderDialogProps {
3
+ /** Folder to delete. `null` ⇒ closed. */
4
+ readonly folder: AssetFolder | null;
5
+ /** Confirm. `cascade=false` reparents children to the parent (default, safe);
6
+ * `cascade=true` also deletes the descendant assets. */
7
+ readonly onConfirm: (folder: AssetFolder, cascade: boolean) => void | Promise<void>;
8
+ readonly onCancel: () => void;
9
+ }
10
+ export declare function DeleteFolderDialog({ folder, onConfirm, onCancel, }: DeleteFolderDialogProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=DeleteFolderDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeleteFolderDialog.d.ts","sourceRoot":"","sources":["../../src/ui/DeleteFolderDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,uBAAuB;IACvC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC;6DACyD;IACzD,QAAQ,CAAC,SAAS,EAAE,CACnB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,KACZ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,EAClC,MAAM,EACN,SAAS,EACT,QAAQ,GACR,EAAE,uBAAuB,2CAmEzB"}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { useMsg } from "@anvilkit/core/i18n";
3
+ import { Button } from "@anvilkit/ui/button";
4
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
5
+ import * as __rspack_external_react from "react";
6
+ function DeleteFolderDialog({ folder, onConfirm, onCancel }) {
7
+ const msg = useMsg();
8
+ const [busy, setBusy] = __rspack_external_react.useState(false);
9
+ async function confirm(cascade) {
10
+ if (null === folder || busy) return;
11
+ setBusy(true);
12
+ try {
13
+ await onConfirm(folder, cascade);
14
+ } finally{
15
+ setBusy(false);
16
+ }
17
+ }
18
+ const open = null !== folder;
19
+ const assetCount = folder?.counts.assets ?? 0;
20
+ return /*#__PURE__*/ __rspack_external_react.createElement(Dialog, {
21
+ open: open,
22
+ onOpenChange: (next)=>{
23
+ if (!next && !busy) onCancel();
24
+ }
25
+ }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, msg("assetManager.dialog.deleteFolderTitle")), /*#__PURE__*/ __rspack_external_react.createElement(DialogDescription, null, msg("assetManager.dialog.deleteFolderDescription").replace("{name}", folder?.name ?? "").replace("{count}", String(assetCount)).replace("{assets}", 1 === assetCount ? "asset" : "assets"))), /*#__PURE__*/ __rspack_external_react.createElement(DialogFooter, null, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
26
+ type: "button",
27
+ variant: "outline",
28
+ disabled: busy,
29
+ onClick: onCancel
30
+ }, msg("assetManager.button.cancel")), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
31
+ type: "button",
32
+ variant: "outline",
33
+ disabled: busy || null === folder,
34
+ onClick: ()=>void confirm(false)
35
+ }, busy ? msg("assetManager.dialog.removeProgress") : msg("assetManager.dialog.removeFolder")), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
36
+ type: "button",
37
+ variant: "destructive",
38
+ disabled: busy || null === folder,
39
+ onClick: ()=>void confirm(true)
40
+ }, msg("assetManager.button.deleteContents")))));
41
+ }
42
+ export { DeleteFolderDialog };
@@ -0,0 +1,56 @@
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 i18n_namespaceObject = require("@anvilkit/core/i18n");
35
+ const button_namespaceObject = require("@anvilkit/ui/button");
36
+ const external_react_namespaceObject = require("react");
37
+ function EmptyFolderState({ onUpload, message }) {
38
+ const msg = (0, i18n_namespaceObject.useMsg)();
39
+ const resolvedMessage = message ?? msg("assetManager.folder.empty");
40
+ return /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
41
+ "data-testid": "ak-empty-folder",
42
+ className: "flex flex-col items-center gap-2 p-6 text-center text-sm text-[var(--ak-studio-muted-fg)]"
43
+ }, /*#__PURE__*/ external_react_namespaceObject.createElement("p", null, resolvedMessage), onUpload ? /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
44
+ type: "button",
45
+ variant: "outline",
46
+ size: "sm",
47
+ onClick: onUpload
48
+ }, msg("assetManager.upload.toFolder")) : null);
49
+ }
50
+ exports.EmptyFolderState = __webpack_exports__.EmptyFolderState;
51
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
52
+ "EmptyFolderState"
53
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
54
+ Object.defineProperty(exports, '__esModule', {
55
+ value: true
56
+ });
@@ -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":"AAMA,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,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,qBAAqB,2CAgB5E"}
@@ -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":"AAMA,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,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,qBAAqB,2CAgB5E"}
@@ -0,0 +1,18 @@
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
+ function EmptyFolderState({ onUpload, message }) {
6
+ const msg = useMsg();
7
+ const resolvedMessage = message ?? msg("assetManager.folder.empty");
8
+ return /*#__PURE__*/ __rspack_external_react.createElement("div", {
9
+ "data-testid": "ak-empty-folder",
10
+ className: "flex flex-col items-center gap-2 p-6 text-center text-sm text-[var(--ak-studio-muted-fg)]"
11
+ }, /*#__PURE__*/ __rspack_external_react.createElement("p", null, resolvedMessage), onUpload ? /*#__PURE__*/ __rspack_external_react.createElement(Button, {
12
+ type: "button",
13
+ variant: "outline",
14
+ size: "sm",
15
+ onClick: onUpload
16
+ }, msg("assetManager.upload.toFolder")) : null);
17
+ }
18
+ export { EmptyFolderState };