@anvilkit/plugin-asset-manager 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +26 -18
  2. package/dist/index.cjs +7 -0
  3. package/dist/index.d.cts +11 -3
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.ts +11 -3
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -1
  8. package/dist/plugin.cjs +67 -4
  9. package/dist/plugin.d.cts +3 -2
  10. package/dist/plugin.d.cts.map +1 -1
  11. package/dist/plugin.d.ts +3 -2
  12. package/dist/plugin.d.ts.map +1 -1
  13. package/dist/plugin.js +67 -4
  14. package/dist/sources/composite-source.cjs +137 -0
  15. package/dist/sources/composite-source.d.cts +39 -0
  16. package/dist/sources/composite-source.d.cts.map +1 -0
  17. package/dist/sources/composite-source.d.ts +39 -0
  18. package/dist/sources/composite-source.d.ts.map +1 -0
  19. package/dist/sources/composite-source.js +99 -0
  20. package/dist/sources/federated-search.cjs +163 -0
  21. package/dist/sources/federated-search.d.cts +33 -0
  22. package/dist/sources/federated-search.d.cts.map +1 -0
  23. package/dist/sources/federated-search.d.ts +33 -0
  24. package/dist/sources/federated-search.d.ts.map +1 -0
  25. package/dist/sources/federated-search.js +113 -0
  26. package/dist/sources/provider.cjs +18 -0
  27. package/dist/sources/provider.d.cts +51 -0
  28. package/dist/sources/provider.d.cts.map +1 -0
  29. package/dist/sources/provider.d.ts +51 -0
  30. package/dist/sources/provider.d.ts.map +1 -0
  31. package/dist/sources/provider.js +1 -0
  32. package/dist/sources/unsplash/client.cjs +189 -0
  33. package/dist/sources/unsplash/client.d.cts +87 -0
  34. package/dist/sources/unsplash/client.d.cts.map +1 -0
  35. package/dist/sources/unsplash/client.d.ts +87 -0
  36. package/dist/sources/unsplash/client.d.ts.map +1 -0
  37. package/dist/sources/unsplash/client.js +151 -0
  38. package/dist/sources/unsplash/index.cjs +192 -0
  39. package/dist/sources/unsplash/index.d.cts +16 -0
  40. package/dist/sources/unsplash/index.d.cts.map +1 -0
  41. package/dist/sources/unsplash/index.d.ts +16 -0
  42. package/dist/sources/unsplash/index.d.ts.map +1 -0
  43. package/dist/sources/unsplash/index.js +148 -0
  44. package/dist/sources/unsplash/themes.cjs +141 -0
  45. package/dist/sources/unsplash/themes.d.cts +18 -0
  46. package/dist/sources/unsplash/themes.d.cts.map +1 -0
  47. package/dist/sources/unsplash/themes.d.ts +18 -0
  48. package/dist/sources/unsplash/themes.d.ts.map +1 -0
  49. package/dist/sources/unsplash/themes.js +93 -0
  50. package/dist/sources/unsplash/throttle-cache.cjs +86 -0
  51. package/dist/sources/unsplash/throttle-cache.d.cts +25 -0
  52. package/dist/sources/unsplash/throttle-cache.d.cts.map +1 -0
  53. package/dist/sources/unsplash/throttle-cache.d.ts +25 -0
  54. package/dist/sources/unsplash/throttle-cache.d.ts.map +1 -0
  55. package/dist/sources/unsplash/throttle-cache.js +45 -0
  56. package/dist/types/categories.cjs +18 -0
  57. package/dist/types/categories.d.cts +48 -0
  58. package/dist/types/categories.d.cts.map +1 -0
  59. package/dist/types/categories.d.ts +48 -0
  60. package/dist/types/categories.d.ts.map +1 -0
  61. package/dist/types/categories.js +1 -0
  62. package/dist/types/data-source.cjs +18 -0
  63. package/dist/types/data-source.d.cts +59 -0
  64. package/dist/types/data-source.d.cts.map +1 -0
  65. package/dist/types/data-source.d.ts +59 -0
  66. package/dist/types/data-source.d.ts.map +1 -0
  67. package/dist/types/data-source.js +1 -0
  68. package/dist/types/filter.cjs +18 -0
  69. package/dist/types/filter.d.cts +55 -0
  70. package/dist/types/filter.d.cts.map +1 -0
  71. package/dist/types/filter.d.ts +55 -0
  72. package/dist/types/filter.d.ts.map +1 -0
  73. package/dist/types/filter.js +1 -0
  74. package/dist/types/folders.cjs +42 -0
  75. package/dist/types/folders.d.cts +46 -0
  76. package/dist/types/folders.d.cts.map +1 -0
  77. package/dist/types/folders.d.ts +46 -0
  78. package/dist/types/folders.d.ts.map +1 -0
  79. package/dist/types/folders.js +4 -0
  80. package/dist/types/options.cjs +18 -0
  81. package/dist/types/options.d.cts +68 -0
  82. package/dist/types/options.d.cts.map +1 -0
  83. package/dist/types/options.d.ts +68 -0
  84. package/dist/types/options.d.ts.map +1 -0
  85. package/dist/types/options.js +1 -0
  86. package/dist/types/types.d.cts +15 -27
  87. package/dist/types/types.d.cts.map +1 -1
  88. package/dist/types/types.d.ts +15 -27
  89. package/dist/types/types.d.ts.map +1 -1
  90. package/dist/types/unsplash.cjs +18 -0
  91. package/dist/types/unsplash.d.cts +60 -0
  92. package/dist/types/unsplash.d.cts.map +1 -0
  93. package/dist/types/unsplash.d.ts +60 -0
  94. package/dist/types/unsplash.d.ts.map +1 -0
  95. package/dist/types/unsplash.js +1 -0
  96. package/dist/ui/AssetBrowser.cjs +33 -12
  97. package/dist/ui/AssetBrowser.d.cts +12 -1
  98. package/dist/ui/AssetBrowser.d.cts.map +1 -1
  99. package/dist/ui/AssetBrowser.d.ts +12 -1
  100. package/dist/ui/AssetBrowser.d.ts.map +1 -1
  101. package/dist/ui/AssetBrowser.js +33 -12
  102. package/dist/ui/AssetManagerUI.cjs +8 -2
  103. package/dist/ui/AssetManagerUI.d.cts +19 -3
  104. package/dist/ui/AssetManagerUI.d.cts.map +1 -1
  105. package/dist/ui/AssetManagerUI.d.ts +19 -3
  106. package/dist/ui/AssetManagerUI.d.ts.map +1 -1
  107. package/dist/ui/AssetManagerUI.js +8 -2
  108. package/dist/ui/DeleteFolderDialog.cjs +78 -0
  109. package/dist/ui/DeleteFolderDialog.d.cts +11 -0
  110. package/dist/ui/DeleteFolderDialog.d.cts.map +1 -0
  111. package/dist/ui/DeleteFolderDialog.d.ts +11 -0
  112. package/dist/ui/DeleteFolderDialog.d.ts.map +1 -0
  113. package/dist/ui/DeleteFolderDialog.js +40 -0
  114. package/dist/ui/EmptyFolderState.cjs +53 -0
  115. package/dist/ui/EmptyFolderState.d.cts +6 -0
  116. package/dist/ui/EmptyFolderState.d.cts.map +1 -0
  117. package/dist/ui/EmptyFolderState.d.ts +6 -0
  118. package/dist/ui/EmptyFolderState.d.ts.map +1 -0
  119. package/dist/ui/EmptyFolderState.js +15 -0
  120. package/dist/ui/FolderBreadcrumb.cjs +73 -0
  121. package/dist/ui/FolderBreadcrumb.d.cts +9 -0
  122. package/dist/ui/FolderBreadcrumb.d.cts.map +1 -0
  123. package/dist/ui/FolderBreadcrumb.d.ts +9 -0
  124. package/dist/ui/FolderBreadcrumb.d.ts.map +1 -0
  125. package/dist/ui/FolderBreadcrumb.js +35 -0
  126. package/dist/ui/FolderNameDialog.cjs +98 -0
  127. package/dist/ui/FolderNameDialog.d.cts +14 -0
  128. package/dist/ui/FolderNameDialog.d.cts.map +1 -0
  129. package/dist/ui/FolderNameDialog.d.ts +14 -0
  130. package/dist/ui/FolderNameDialog.d.ts.map +1 -0
  131. package/dist/ui/FolderNameDialog.js +60 -0
  132. package/dist/ui/FolderTree.cjs +83 -0
  133. package/dist/ui/FolderTree.d.cts +13 -0
  134. package/dist/ui/FolderTree.d.cts.map +1 -0
  135. package/dist/ui/FolderTree.d.ts +13 -0
  136. package/dist/ui/FolderTree.d.ts.map +1 -0
  137. package/dist/ui/FolderTree.js +42 -0
  138. package/dist/ui/MetadataPanel.cjs +7 -4
  139. package/dist/ui/MetadataPanel.d.cts.map +1 -1
  140. package/dist/ui/MetadataPanel.d.ts.map +1 -1
  141. package/dist/ui/MetadataPanel.js +7 -4
  142. package/dist/ui/MoveTargetPicker.cjs +84 -0
  143. package/dist/ui/MoveTargetPicker.d.cts +16 -0
  144. package/dist/ui/MoveTargetPicker.d.cts.map +1 -0
  145. package/dist/ui/MoveTargetPicker.d.ts +16 -0
  146. package/dist/ui/MoveTargetPicker.d.ts.map +1 -0
  147. package/dist/ui/MoveTargetPicker.js +46 -0
  148. package/dist/ui/ReplaceAssetDialog.d.cts +2 -1
  149. package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
  150. package/dist/ui/ReplaceAssetDialog.d.ts +2 -1
  151. package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
  152. package/dist/ui/UnsplashPanel.cjs +134 -0
  153. package/dist/ui/UnsplashPanel.d.cts +28 -0
  154. package/dist/ui/UnsplashPanel.d.cts.map +1 -0
  155. package/dist/ui/UnsplashPanel.d.ts +28 -0
  156. package/dist/ui/UnsplashPanel.d.ts.map +1 -0
  157. package/dist/ui/UnsplashPanel.js +96 -0
  158. package/dist/ui/UploadButton.cjs +1 -5
  159. package/dist/ui/UploadButton.d.cts +9 -2
  160. package/dist/ui/UploadButton.d.cts.map +1 -1
  161. package/dist/ui/UploadButton.d.ts +9 -2
  162. package/dist/ui/UploadButton.d.ts.map +1 -1
  163. package/dist/ui/UploadButton.js +1 -5
  164. package/dist/ui/index.cjs +37 -0
  165. package/dist/ui/index.d.cts +14 -0
  166. package/dist/ui/index.d.cts.map +1 -1
  167. package/dist/ui/index.d.ts +14 -0
  168. package/dist/ui/index.d.ts.map +1 -1
  169. package/dist/ui/index.js +7 -0
  170. package/dist/utils/data-source.cjs +177 -0
  171. package/dist/utils/data-source.d.cts +63 -0
  172. package/dist/utils/data-source.d.cts.map +1 -0
  173. package/dist/utils/data-source.d.ts +63 -0
  174. package/dist/utils/data-source.d.ts.map +1 -0
  175. package/dist/utils/data-source.js +136 -0
  176. package/dist/utils/errors.cjs +18 -0
  177. package/dist/utils/errors.d.cts +27 -0
  178. package/dist/utils/errors.d.cts.map +1 -1
  179. package/dist/utils/errors.d.ts +27 -0
  180. package/dist/utils/errors.d.ts.map +1 -1
  181. package/dist/utils/errors.js +16 -1
  182. package/dist/utils/folders.cjs +261 -0
  183. package/dist/utils/folders.d.cts +49 -0
  184. package/dist/utils/folders.d.cts.map +1 -0
  185. package/dist/utils/folders.d.ts +49 -0
  186. package/dist/utils/folders.d.ts.map +1 -0
  187. package/dist/utils/folders.js +223 -0
  188. package/dist/utils/registry.cjs +27 -12
  189. package/dist/utils/registry.d.cts +21 -1
  190. package/dist/utils/registry.d.cts.map +1 -1
  191. package/dist/utils/registry.d.ts +21 -1
  192. package/dist/utils/registry.d.ts.map +1 -1
  193. package/dist/utils/registry.js +20 -11
  194. package/dist/utils/studio-asset-source.cjs +5 -2
  195. package/dist/utils/studio-asset-source.d.cts +6 -1
  196. package/dist/utils/studio-asset-source.d.cts.map +1 -1
  197. package/dist/utils/studio-asset-source.d.ts +6 -1
  198. package/dist/utils/studio-asset-source.d.ts.map +1 -1
  199. package/dist/utils/studio-asset-source.js +1 -1
  200. package/dist/utils/validate-upload-result.d.cts +2 -1
  201. package/dist/utils/validate-upload-result.d.cts.map +1 -1
  202. package/dist/utils/validate-upload-result.d.ts +2 -1
  203. package/dist/utils/validate-upload-result.d.ts.map +1 -1
  204. package/dist/version.cjs +1 -1
  205. package/dist/version.d.cts +1 -1
  206. package/dist/version.d.ts +1 -1
  207. package/dist/version.js +1 -1
  208. package/meta/config.json +1 -1
  209. package/package.json +12 -2
@@ -1 +1 @@
1
- {"version":3,"file":"UploadButton.d.ts","sourceRoot":"","sources":["../../src/ui/UploadButton.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG3E,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC7B;IACD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,YAAY,CAAC,EAC5B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,QAAQ,GACR,EAAE,iBAAiB,2CA6KnB"}
1
+ {"version":3,"file":"UploadButton.d.ts","sourceRoot":"","sources":["../../src/ui/UploadButton.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAChB,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,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,YAAY,CAAC,EAC5B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,QAAQ,GACR,EAAE,iBAAiB,2CAgLnB"}
@@ -144,13 +144,9 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
144
144
  function UploadSpinner() {
145
145
  return /*#__PURE__*/ __rspack_external_react.createElement("svg", {
146
146
  "aria-hidden": true,
147
+ className: "mr-1.5 inline-block animate-spin",
147
148
  fill: "none",
148
149
  height: 14,
149
- style: {
150
- display: "inline-block",
151
- marginRight: 6,
152
- animation: "spin 1s linear infinite"
153
- },
154
150
  viewBox: "0 0 24 24",
155
151
  width: 14
156
152
  }, /*#__PURE__*/ __rspack_external_react.createElement("circle", {
package/dist/ui/index.cjs CHANGED
@@ -28,35 +28,72 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
+ ASSET_DRAG_MIME: ()=>external_FolderTree_cjs_namespaceObject.ASSET_DRAG_MIME,
31
32
  AssetBrowser: ()=>external_AssetBrowser_cjs_namespaceObject.AssetBrowser,
32
33
  AssetCommandPalette: ()=>external_AssetCommandPalette_cjs_namespaceObject.AssetCommandPalette,
33
34
  AssetManagerUI: ()=>external_AssetManagerUI_cjs_namespaceObject.AssetManagerUI,
35
+ CreateFolderDialog: ()=>external_FolderNameDialog_cjs_namespaceObject.FolderNameDialog,
34
36
  DeleteAssetDialog: ()=>external_DeleteAssetDialog_cjs_namespaceObject.DeleteAssetDialog,
37
+ DeleteFolderDialog: ()=>external_DeleteFolderDialog_cjs_namespaceObject.DeleteFolderDialog,
38
+ EmptyFolderState: ()=>external_EmptyFolderState_cjs_namespaceObject.EmptyFolderState,
39
+ FolderBreadcrumb: ()=>external_FolderBreadcrumb_cjs_namespaceObject.FolderBreadcrumb,
40
+ FolderNameDialog: ()=>external_FolderNameDialog_cjs_namespaceObject.FolderNameDialog,
41
+ FolderTree: ()=>external_FolderTree_cjs_namespaceObject.FolderTree,
35
42
  MetadataPanel: ()=>external_MetadataPanel_cjs_namespaceObject.MetadataPanel,
43
+ MoveTargetPicker: ()=>external_MoveTargetPicker_cjs_namespaceObject.MoveTargetPicker,
44
+ RenameFolderDialog: ()=>external_FolderNameDialog_cjs_namespaceObject.FolderNameDialog,
36
45
  ReplaceAssetDialog: ()=>external_ReplaceAssetDialog_cjs_namespaceObject.ReplaceAssetDialog,
46
+ UnsplashPanel: ()=>external_UnsplashPanel_cjs_namespaceObject.UnsplashPanel,
37
47
  UploadButton: ()=>external_UploadButton_cjs_namespaceObject.UploadButton
38
48
  });
39
49
  const external_AssetBrowser_cjs_namespaceObject = require("./AssetBrowser.cjs");
40
50
  const external_AssetCommandPalette_cjs_namespaceObject = require("./AssetCommandPalette.cjs");
41
51
  const external_AssetManagerUI_cjs_namespaceObject = require("./AssetManagerUI.cjs");
42
52
  const external_DeleteAssetDialog_cjs_namespaceObject = require("./DeleteAssetDialog.cjs");
53
+ const external_DeleteFolderDialog_cjs_namespaceObject = require("./DeleteFolderDialog.cjs");
54
+ const external_EmptyFolderState_cjs_namespaceObject = require("./EmptyFolderState.cjs");
55
+ const external_FolderBreadcrumb_cjs_namespaceObject = require("./FolderBreadcrumb.cjs");
56
+ const external_FolderNameDialog_cjs_namespaceObject = require("./FolderNameDialog.cjs");
57
+ const external_FolderTree_cjs_namespaceObject = require("./FolderTree.cjs");
43
58
  const external_MetadataPanel_cjs_namespaceObject = require("./MetadataPanel.cjs");
59
+ const external_MoveTargetPicker_cjs_namespaceObject = require("./MoveTargetPicker.cjs");
44
60
  const external_ReplaceAssetDialog_cjs_namespaceObject = require("./ReplaceAssetDialog.cjs");
61
+ const external_UnsplashPanel_cjs_namespaceObject = require("./UnsplashPanel.cjs");
45
62
  const external_UploadButton_cjs_namespaceObject = require("./UploadButton.cjs");
63
+ exports.ASSET_DRAG_MIME = __webpack_exports__.ASSET_DRAG_MIME;
46
64
  exports.AssetBrowser = __webpack_exports__.AssetBrowser;
47
65
  exports.AssetCommandPalette = __webpack_exports__.AssetCommandPalette;
48
66
  exports.AssetManagerUI = __webpack_exports__.AssetManagerUI;
67
+ exports.CreateFolderDialog = __webpack_exports__.CreateFolderDialog;
49
68
  exports.DeleteAssetDialog = __webpack_exports__.DeleteAssetDialog;
69
+ exports.DeleteFolderDialog = __webpack_exports__.DeleteFolderDialog;
70
+ exports.EmptyFolderState = __webpack_exports__.EmptyFolderState;
71
+ exports.FolderBreadcrumb = __webpack_exports__.FolderBreadcrumb;
72
+ exports.FolderNameDialog = __webpack_exports__.FolderNameDialog;
73
+ exports.FolderTree = __webpack_exports__.FolderTree;
50
74
  exports.MetadataPanel = __webpack_exports__.MetadataPanel;
75
+ exports.MoveTargetPicker = __webpack_exports__.MoveTargetPicker;
76
+ exports.RenameFolderDialog = __webpack_exports__.RenameFolderDialog;
51
77
  exports.ReplaceAssetDialog = __webpack_exports__.ReplaceAssetDialog;
78
+ exports.UnsplashPanel = __webpack_exports__.UnsplashPanel;
52
79
  exports.UploadButton = __webpack_exports__.UploadButton;
53
80
  for(var __rspack_i in __webpack_exports__)if (-1 === [
81
+ "ASSET_DRAG_MIME",
54
82
  "AssetBrowser",
55
83
  "AssetCommandPalette",
56
84
  "AssetManagerUI",
85
+ "CreateFolderDialog",
57
86
  "DeleteAssetDialog",
87
+ "DeleteFolderDialog",
88
+ "EmptyFolderState",
89
+ "FolderBreadcrumb",
90
+ "FolderNameDialog",
91
+ "FolderTree",
58
92
  "MetadataPanel",
93
+ "MoveTargetPicker",
94
+ "RenameFolderDialog",
59
95
  "ReplaceAssetDialog",
96
+ "UnsplashPanel",
60
97
  "UploadButton"
61
98
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
62
99
  Object.defineProperty(exports, '__esModule', {
@@ -6,10 +6,24 @@ export type { AssetManagerUIProps } from "./AssetManagerUI.js";
6
6
  export { AssetManagerUI } from "./AssetManagerUI.js";
7
7
  export type { DeleteAssetDialogProps } from "./DeleteAssetDialog.js";
8
8
  export { DeleteAssetDialog } from "./DeleteAssetDialog.js";
9
+ export type { DeleteFolderDialogProps } from "./DeleteFolderDialog.js";
10
+ export { DeleteFolderDialog } from "./DeleteFolderDialog.js";
11
+ export type { EmptyFolderStateProps } from "./EmptyFolderState.js";
12
+ export { EmptyFolderState } from "./EmptyFolderState.js";
13
+ export type { FolderBreadcrumbProps } from "./FolderBreadcrumb.js";
14
+ export { FolderBreadcrumb } from "./FolderBreadcrumb.js";
15
+ export type { FolderNameDialogProps } from "./FolderNameDialog.js";
16
+ export { FolderNameDialog, FolderNameDialog as CreateFolderDialog, FolderNameDialog as RenameFolderDialog, } from "./FolderNameDialog.js";
17
+ export type { FolderTreeProps } from "./FolderTree.js";
18
+ export { ASSET_DRAG_MIME, FolderTree } from "./FolderTree.js";
9
19
  export type { MetadataPanelProps } from "./MetadataPanel.js";
10
20
  export { MetadataPanel } from "./MetadataPanel.js";
21
+ export type { MoveTargetPickerProps } from "./MoveTargetPicker.js";
22
+ export { MoveTargetPicker } from "./MoveTargetPicker.js";
11
23
  export type { ReplaceAssetDialogProps } from "./ReplaceAssetDialog.js";
12
24
  export { ReplaceAssetDialog } from "./ReplaceAssetDialog.js";
25
+ export type { UnsplashPanelProps, UnsplashPanelStatus, UnsplashResult, } from "./UnsplashPanel.js";
26
+ export { UnsplashPanel } from "./UnsplashPanel.js";
13
27
  export type { UploadButtonProps, UploadProgressSnapshot, } from "./UploadButton.js";
14
28
  export { UploadButton } from "./UploadButton.js";
15
29
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EACX,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EACN,gBAAgB,EAChB,gBAAgB,IAAI,kBAAkB,EACtC,gBAAgB,IAAI,kBAAkB,GACtC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,YAAY,EACX,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EACX,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -6,10 +6,24 @@ export type { AssetManagerUIProps } from "./AssetManagerUI.js";
6
6
  export { AssetManagerUI } from "./AssetManagerUI.js";
7
7
  export type { DeleteAssetDialogProps } from "./DeleteAssetDialog.js";
8
8
  export { DeleteAssetDialog } from "./DeleteAssetDialog.js";
9
+ export type { DeleteFolderDialogProps } from "./DeleteFolderDialog.js";
10
+ export { DeleteFolderDialog } from "./DeleteFolderDialog.js";
11
+ export type { EmptyFolderStateProps } from "./EmptyFolderState.js";
12
+ export { EmptyFolderState } from "./EmptyFolderState.js";
13
+ export type { FolderBreadcrumbProps } from "./FolderBreadcrumb.js";
14
+ export { FolderBreadcrumb } from "./FolderBreadcrumb.js";
15
+ export type { FolderNameDialogProps } from "./FolderNameDialog.js";
16
+ export { FolderNameDialog, FolderNameDialog as CreateFolderDialog, FolderNameDialog as RenameFolderDialog, } from "./FolderNameDialog.js";
17
+ export type { FolderTreeProps } from "./FolderTree.js";
18
+ export { ASSET_DRAG_MIME, FolderTree } from "./FolderTree.js";
9
19
  export type { MetadataPanelProps } from "./MetadataPanel.js";
10
20
  export { MetadataPanel } from "./MetadataPanel.js";
21
+ export type { MoveTargetPickerProps } from "./MoveTargetPicker.js";
22
+ export { MoveTargetPicker } from "./MoveTargetPicker.js";
11
23
  export type { ReplaceAssetDialogProps } from "./ReplaceAssetDialog.js";
12
24
  export { ReplaceAssetDialog } from "./ReplaceAssetDialog.js";
25
+ export type { UnsplashPanelProps, UnsplashPanelStatus, UnsplashResult, } from "./UnsplashPanel.js";
26
+ export { UnsplashPanel } from "./UnsplashPanel.js";
13
27
  export type { UploadButtonProps, UploadProgressSnapshot, } from "./UploadButton.js";
14
28
  export { UploadButton } from "./UploadButton.js";
15
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EACX,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EACN,gBAAgB,EAChB,gBAAgB,IAAI,kBAAkB,EACtC,gBAAgB,IAAI,kBAAkB,GACtC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,YAAY,EACX,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EACX,iBAAiB,EACjB,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/ui/index.js CHANGED
@@ -2,6 +2,13 @@ export { AssetBrowser } from "./AssetBrowser.js";
2
2
  export { AssetCommandPalette } from "./AssetCommandPalette.js";
3
3
  export { AssetManagerUI } from "./AssetManagerUI.js";
4
4
  export { DeleteAssetDialog } from "./DeleteAssetDialog.js";
5
+ export { DeleteFolderDialog } from "./DeleteFolderDialog.js";
6
+ export { EmptyFolderState } from "./EmptyFolderState.js";
7
+ export { FolderBreadcrumb } from "./FolderBreadcrumb.js";
8
+ export { FolderNameDialog as CreateFolderDialog, FolderNameDialog, FolderNameDialog as RenameFolderDialog } from "./FolderNameDialog.js";
9
+ export { ASSET_DRAG_MIME, FolderTree } from "./FolderTree.js";
5
10
  export { MetadataPanel } from "./MetadataPanel.js";
11
+ export { MoveTargetPicker } from "./MoveTargetPicker.js";
6
12
  export { ReplaceAssetDialog } from "./ReplaceAssetDialog.js";
13
+ export { UnsplashPanel } from "./UnsplashPanel.js";
7
14
  export { UploadButton } from "./UploadButton.js";
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ createInMemoryDataSource: ()=>createInMemoryDataSource,
32
+ resolveDataSource: ()=>resolveDataSource
33
+ });
34
+ const folders_cjs_namespaceObject = require("../types/folders.cjs");
35
+ const external_errors_cjs_namespaceObject = require("./errors.cjs");
36
+ const external_folders_cjs_namespaceObject = require("./folders.cjs");
37
+ const external_registry_cjs_namespaceObject = require("./registry.cjs");
38
+ function makeAbortError() {
39
+ if ("u" > typeof DOMException) return new DOMException("Operation aborted", "AbortError");
40
+ const error = new Error("Operation aborted");
41
+ error.name = "AbortError";
42
+ return error;
43
+ }
44
+ function createInMemoryDataSource(options) {
45
+ const { registry, upload, maxDepth } = options;
46
+ const folders = options.folderStore ?? (0, external_folders_cjs_namespaceObject.createFolderStore)();
47
+ const buildPage = (page, query)=>{
48
+ const base = {
49
+ items: page.items,
50
+ total: page.total,
51
+ nextCursor: page.nextCursor
52
+ };
53
+ if (void 0 === query.folderId) return base;
54
+ return {
55
+ ...base,
56
+ folders: folders.listChildren(query.folderId),
57
+ folderPath: folders.path(query.folderId)
58
+ };
59
+ };
60
+ return {
61
+ folders,
62
+ list (query) {
63
+ if (void 0 === query.folderId) return Promise.resolve(buildPage(registry.search(query), query));
64
+ const target = (0, folders_cjs_namespaceObject.resolveFolderId)(query.folderId);
65
+ const recursive = true === query.recursive;
66
+ const subtree = recursive && null !== target ? folders.subtreeIds(target) : void 0;
67
+ const matches = registry.list().filter((entry)=>{
68
+ const owner = folders.folderOf(entry.id);
69
+ const folderOk = recursive ? null === target ? true : null !== owner && subtree?.has(owner) === true : owner === target;
70
+ return folderOk && (0, external_registry_cjs_namespaceObject.assetMatchesSearch)(entry, query);
71
+ });
72
+ return Promise.resolve(buildPage((0, external_registry_cjs_namespaceObject.paginateMatches)(matches, query), query));
73
+ },
74
+ remove (id) {
75
+ registry.delete(id);
76
+ folders.removeAsset(id);
77
+ return Promise.resolve();
78
+ },
79
+ async replace (id, payload, signal) {
80
+ const result = await upload(payload, signal ? {
81
+ signal
82
+ } : void 0);
83
+ if (signal?.aborted) throw makeAbortError();
84
+ const replaced = registry.replace(id, result);
85
+ return replaced ?? result;
86
+ },
87
+ rename (id, name) {
88
+ const updated = registry.rename(id, name);
89
+ if (void 0 === updated) return Promise.reject(new external_errors_cjs_namespaceObject.AssetSourceError("ASSET_MUTATION_REJECTED", `Cannot rename unknown asset "${id}".`));
90
+ return Promise.resolve(updated);
91
+ },
92
+ move (id, folderId) {
93
+ folders.moveAsset(id, folderId);
94
+ return Promise.resolve();
95
+ },
96
+ createFolder (parentId, name) {
97
+ return Promise.resolve(folders.createFolder(parentId, name, maxDepth));
98
+ },
99
+ renameFolder (id, name) {
100
+ return Promise.resolve(folders.renameFolder(id, name));
101
+ },
102
+ removeFolder (id, opts) {
103
+ const { removedAssetIds } = folders.removeFolder(id, opts);
104
+ for (const assetId of removedAssetIds)registry.delete(assetId);
105
+ return Promise.resolve();
106
+ },
107
+ moveFolder (id, parentId) {
108
+ return Promise.resolve(folders.moveFolder(id, parentId, maxDepth));
109
+ },
110
+ subscribe (listener) {
111
+ const offRegistry = registry.subscribe(listener);
112
+ const offFolders = folders.subscribe(listener);
113
+ return ()=>{
114
+ offRegistry();
115
+ offFolders();
116
+ };
117
+ },
118
+ subscribeStatus (listener) {
119
+ listener({
120
+ phase: "idle"
121
+ });
122
+ return ()=>{};
123
+ }
124
+ };
125
+ }
126
+ const ASSET_PLANE = [
127
+ "list",
128
+ "remove",
129
+ "replace",
130
+ "rename",
131
+ "move"
132
+ ];
133
+ const FOLDER_PLANE = [
134
+ "createFolder",
135
+ "renameFolder",
136
+ "removeFolder",
137
+ "moveFolder"
138
+ ];
139
+ function resolveDataSource(input) {
140
+ const fallback = createInMemoryDataSource(input);
141
+ const host = input.hostDataSource;
142
+ if (void 0 === host) return fallback;
143
+ const ownsPlane = (plane, label)=>{
144
+ const provided = plane.filter((m)=>"function" == typeof host[m]);
145
+ if (0 === provided.length) return false;
146
+ if (provided.length === plane.length) return true;
147
+ input.warn?.(`asset-manager: dataSource provides a partial ${label} method set (${provided.join(", ")}) — falling back to the in-memory default for the whole ${label} plane. Provide all of {${plane.join(", ")}} or none.`);
148
+ return false;
149
+ };
150
+ const resolved = {
151
+ ...fallback
152
+ };
153
+ if (ownsPlane(ASSET_PLANE, "asset")) {
154
+ resolved.list = host.list.bind(host);
155
+ resolved.remove = host.remove.bind(host);
156
+ resolved.replace = host.replace.bind(host);
157
+ resolved.rename = host.rename.bind(host);
158
+ resolved.move = host.move.bind(host);
159
+ }
160
+ if (ownsPlane(FOLDER_PLANE, "folder")) {
161
+ resolved.createFolder = host.createFolder.bind(host);
162
+ resolved.renameFolder = host.renameFolder.bind(host);
163
+ resolved.removeFolder = host.removeFolder.bind(host);
164
+ resolved.moveFolder = host.moveFolder.bind(host);
165
+ }
166
+ if ("function" == typeof host.subscribeStatus) resolved.subscribeStatus = host.subscribeStatus.bind(host);
167
+ return resolved;
168
+ }
169
+ exports.createInMemoryDataSource = __webpack_exports__.createInMemoryDataSource;
170
+ exports.resolveDataSource = __webpack_exports__.resolveDataSource;
171
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
172
+ "createInMemoryDataSource",
173
+ "resolveDataSource"
174
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
175
+ Object.defineProperty(exports, '__esModule', {
176
+ value: true
177
+ });
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @file In-memory `AssetDataSource` (PRD 0002 §6). Adapts the synchronous
3
+ * `AssetRegistry` + the {@link FolderStore} into the async, folder-aware data
4
+ * plane, WITHOUT changing the registry's API. The registry stays the single
5
+ * store for assets; folder membership lives in the side-index the folder store
6
+ * owns. Lazy-importable so flat callers pay nothing for folder code.
7
+ */
8
+ import type { AssetDataSource, AssetSourceStatus, ReplacePayload } from "../types/data-source.js";
9
+ import type { AssetFilter, AssetListPage } from "../types/filter.js";
10
+ import type { AssetFolder, FolderId } from "../types/folders.js";
11
+ import type { AssetRegistry, UploadResult } from "../types/types.js";
12
+ import { type FolderStore } from "./folders.js";
13
+ /**
14
+ * Binary ingest used by `replace` — the same `uploadAsset`-bound callback the
15
+ * `StudioAssetSource` already threads, so the security pipeline is single-sourced.
16
+ */
17
+ export type UploadFn = (file: File, options?: {
18
+ readonly signal?: AbortSignal;
19
+ }) => Promise<UploadResult>;
20
+ /** Fully-resolved data plane (no optional methods) stored on the runtime state. */
21
+ export interface ResolvedAssetDataSource {
22
+ list(query: AssetFilter, signal?: AbortSignal): Promise<AssetListPage>;
23
+ remove(id: string, signal?: AbortSignal): Promise<void>;
24
+ replace(id: string, payload: ReplacePayload, signal?: AbortSignal): Promise<UploadResult>;
25
+ rename(id: string, name: string, signal?: AbortSignal): Promise<UploadResult>;
26
+ move(id: string, folderId: FolderId | null, signal?: AbortSignal): Promise<void>;
27
+ createFolder(parentId: FolderId | null, name: string, signal?: AbortSignal): Promise<AssetFolder>;
28
+ renameFolder(id: FolderId, name: string, signal?: AbortSignal): Promise<AssetFolder>;
29
+ removeFolder(id: FolderId, opts?: {
30
+ readonly cascade?: boolean;
31
+ }, signal?: AbortSignal): Promise<void>;
32
+ moveFolder(id: FolderId, parentId: FolderId | null, signal?: AbortSignal): Promise<AssetFolder>;
33
+ /** Fires on any asset OR folder mutation (the sidebar re-lists). */
34
+ subscribe(listener: () => void): () => void;
35
+ subscribeStatus(listener: (status: AssetSourceStatus) => void): () => void;
36
+ /** The shared folder store (for the composite source / UI). */
37
+ readonly folders: FolderStore;
38
+ }
39
+ export interface CreateInMemoryDataSourceOptions {
40
+ readonly registry: AssetRegistry;
41
+ readonly upload: UploadFn;
42
+ /** Shared folder store — injected by the factory so the UI sees the same one. */
43
+ readonly folderStore?: FolderStore;
44
+ /** Max nesting depth from `FolderOptions`. */
45
+ readonly maxDepth?: number;
46
+ }
47
+ export declare function createInMemoryDataSource(options: CreateInMemoryDataSourceOptions): ResolvedAssetDataSource;
48
+ export interface ResolveDataSourceInput extends CreateInMemoryDataSourceOptions {
49
+ /** Host-supplied backend. When absent, the full in-memory default is used. */
50
+ readonly hostDataSource?: AssetDataSource;
51
+ /** One-time dev warning sink (e.g. `ctx.log`). */
52
+ readonly warn?: (message: string) => void;
53
+ }
54
+ /**
55
+ * Per-PLANE resolution ladder (PRD 0002 §5). A host that supplies the FULL
56
+ * method set of a plane owns that plane; a PARTIAL set warns once and the WHOLE
57
+ * plane falls back to the in-memory default — so the read and write planes are
58
+ * never split across two stores. `subscribeStatus` is taken from the host when
59
+ * present; `subscribe`/`folders` always come from the in-memory layer (the
60
+ * composite re-lists after host mutations; external push is out of scope).
61
+ */
62
+ export declare function resolveDataSource(input: ResolveDataSourceInput): ResolvedAssetDataSource;
63
+ //# sourceMappingURL=data-source.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-source.d.cts","sourceRoot":"","sources":["../../src/utils/data-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @file In-memory `AssetDataSource` (PRD 0002 §6). Adapts the synchronous
3
+ * `AssetRegistry` + the {@link FolderStore} into the async, folder-aware data
4
+ * plane, WITHOUT changing the registry's API. The registry stays the single
5
+ * store for assets; folder membership lives in the side-index the folder store
6
+ * owns. Lazy-importable so flat callers pay nothing for folder code.
7
+ */
8
+ import type { AssetDataSource, AssetSourceStatus, ReplacePayload } from "../types/data-source.js";
9
+ import type { AssetFilter, AssetListPage } from "../types/filter.js";
10
+ import type { AssetFolder, FolderId } from "../types/folders.js";
11
+ import type { AssetRegistry, UploadResult } from "../types/types.js";
12
+ import { type FolderStore } from "./folders.js";
13
+ /**
14
+ * Binary ingest used by `replace` — the same `uploadAsset`-bound callback the
15
+ * `StudioAssetSource` already threads, so the security pipeline is single-sourced.
16
+ */
17
+ export type UploadFn = (file: File, options?: {
18
+ readonly signal?: AbortSignal;
19
+ }) => Promise<UploadResult>;
20
+ /** Fully-resolved data plane (no optional methods) stored on the runtime state. */
21
+ export interface ResolvedAssetDataSource {
22
+ list(query: AssetFilter, signal?: AbortSignal): Promise<AssetListPage>;
23
+ remove(id: string, signal?: AbortSignal): Promise<void>;
24
+ replace(id: string, payload: ReplacePayload, signal?: AbortSignal): Promise<UploadResult>;
25
+ rename(id: string, name: string, signal?: AbortSignal): Promise<UploadResult>;
26
+ move(id: string, folderId: FolderId | null, signal?: AbortSignal): Promise<void>;
27
+ createFolder(parentId: FolderId | null, name: string, signal?: AbortSignal): Promise<AssetFolder>;
28
+ renameFolder(id: FolderId, name: string, signal?: AbortSignal): Promise<AssetFolder>;
29
+ removeFolder(id: FolderId, opts?: {
30
+ readonly cascade?: boolean;
31
+ }, signal?: AbortSignal): Promise<void>;
32
+ moveFolder(id: FolderId, parentId: FolderId | null, signal?: AbortSignal): Promise<AssetFolder>;
33
+ /** Fires on any asset OR folder mutation (the sidebar re-lists). */
34
+ subscribe(listener: () => void): () => void;
35
+ subscribeStatus(listener: (status: AssetSourceStatus) => void): () => void;
36
+ /** The shared folder store (for the composite source / UI). */
37
+ readonly folders: FolderStore;
38
+ }
39
+ export interface CreateInMemoryDataSourceOptions {
40
+ readonly registry: AssetRegistry;
41
+ readonly upload: UploadFn;
42
+ /** Shared folder store — injected by the factory so the UI sees the same one. */
43
+ readonly folderStore?: FolderStore;
44
+ /** Max nesting depth from `FolderOptions`. */
45
+ readonly maxDepth?: number;
46
+ }
47
+ export declare function createInMemoryDataSource(options: CreateInMemoryDataSourceOptions): ResolvedAssetDataSource;
48
+ export interface ResolveDataSourceInput extends CreateInMemoryDataSourceOptions {
49
+ /** Host-supplied backend. When absent, the full in-memory default is used. */
50
+ readonly hostDataSource?: AssetDataSource;
51
+ /** One-time dev warning sink (e.g. `ctx.log`). */
52
+ readonly warn?: (message: string) => void;
53
+ }
54
+ /**
55
+ * Per-PLANE resolution ladder (PRD 0002 §5). A host that supplies the FULL
56
+ * method set of a plane owns that plane; a PARTIAL set warns once and the WHOLE
57
+ * plane falls back to the in-memory default — so the read and write planes are
58
+ * never split across two stores. `subscribeStatus` is taken from the host when
59
+ * present; `subscribe`/`folders` always come from the in-memory layer (the
60
+ * composite re-lists after host mutations; external push is out of scope).
61
+ */
62
+ export declare function resolveDataSource(input: ResolveDataSourceInput): ResolvedAssetDataSource;
63
+ //# sourceMappingURL=data-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-source.d.ts","sourceRoot":"","sources":["../../src/utils/data-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ import { resolveFolderId } from "../types/folders.js";
2
+ import { AssetSourceError } from "./errors.js";
3
+ import { createFolderStore } from "./folders.js";
4
+ import { assetMatchesSearch, paginateMatches } from "./registry.js";
5
+ function makeAbortError() {
6
+ if ("u" > typeof DOMException) return new DOMException("Operation aborted", "AbortError");
7
+ const error = new Error("Operation aborted");
8
+ error.name = "AbortError";
9
+ return error;
10
+ }
11
+ function createInMemoryDataSource(options) {
12
+ const { registry, upload, maxDepth } = options;
13
+ const folders = options.folderStore ?? createFolderStore();
14
+ const buildPage = (page, query)=>{
15
+ const base = {
16
+ items: page.items,
17
+ total: page.total,
18
+ nextCursor: page.nextCursor
19
+ };
20
+ if (void 0 === query.folderId) return base;
21
+ return {
22
+ ...base,
23
+ folders: folders.listChildren(query.folderId),
24
+ folderPath: folders.path(query.folderId)
25
+ };
26
+ };
27
+ return {
28
+ folders,
29
+ list (query) {
30
+ if (void 0 === query.folderId) return Promise.resolve(buildPage(registry.search(query), query));
31
+ const target = resolveFolderId(query.folderId);
32
+ const recursive = true === query.recursive;
33
+ const subtree = recursive && null !== target ? folders.subtreeIds(target) : void 0;
34
+ const matches = registry.list().filter((entry)=>{
35
+ const owner = folders.folderOf(entry.id);
36
+ const folderOk = recursive ? null === target ? true : null !== owner && subtree?.has(owner) === true : owner === target;
37
+ return folderOk && assetMatchesSearch(entry, query);
38
+ });
39
+ return Promise.resolve(buildPage(paginateMatches(matches, query), query));
40
+ },
41
+ remove (id) {
42
+ registry.delete(id);
43
+ folders.removeAsset(id);
44
+ return Promise.resolve();
45
+ },
46
+ async replace (id, payload, signal) {
47
+ const result = await upload(payload, signal ? {
48
+ signal
49
+ } : void 0);
50
+ if (signal?.aborted) throw makeAbortError();
51
+ const replaced = registry.replace(id, result);
52
+ return replaced ?? result;
53
+ },
54
+ rename (id, name) {
55
+ const updated = registry.rename(id, name);
56
+ if (void 0 === updated) return Promise.reject(new AssetSourceError("ASSET_MUTATION_REJECTED", `Cannot rename unknown asset "${id}".`));
57
+ return Promise.resolve(updated);
58
+ },
59
+ move (id, folderId) {
60
+ folders.moveAsset(id, folderId);
61
+ return Promise.resolve();
62
+ },
63
+ createFolder (parentId, name) {
64
+ return Promise.resolve(folders.createFolder(parentId, name, maxDepth));
65
+ },
66
+ renameFolder (id, name) {
67
+ return Promise.resolve(folders.renameFolder(id, name));
68
+ },
69
+ removeFolder (id, opts) {
70
+ const { removedAssetIds } = folders.removeFolder(id, opts);
71
+ for (const assetId of removedAssetIds)registry.delete(assetId);
72
+ return Promise.resolve();
73
+ },
74
+ moveFolder (id, parentId) {
75
+ return Promise.resolve(folders.moveFolder(id, parentId, maxDepth));
76
+ },
77
+ subscribe (listener) {
78
+ const offRegistry = registry.subscribe(listener);
79
+ const offFolders = folders.subscribe(listener);
80
+ return ()=>{
81
+ offRegistry();
82
+ offFolders();
83
+ };
84
+ },
85
+ subscribeStatus (listener) {
86
+ listener({
87
+ phase: "idle"
88
+ });
89
+ return ()=>{};
90
+ }
91
+ };
92
+ }
93
+ const ASSET_PLANE = [
94
+ "list",
95
+ "remove",
96
+ "replace",
97
+ "rename",
98
+ "move"
99
+ ];
100
+ const FOLDER_PLANE = [
101
+ "createFolder",
102
+ "renameFolder",
103
+ "removeFolder",
104
+ "moveFolder"
105
+ ];
106
+ function resolveDataSource(input) {
107
+ const fallback = createInMemoryDataSource(input);
108
+ const host = input.hostDataSource;
109
+ if (void 0 === host) return fallback;
110
+ const ownsPlane = (plane, label)=>{
111
+ const provided = plane.filter((m)=>"function" == typeof host[m]);
112
+ if (0 === provided.length) return false;
113
+ if (provided.length === plane.length) return true;
114
+ input.warn?.(`asset-manager: dataSource provides a partial ${label} method set (${provided.join(", ")}) — falling back to the in-memory default for the whole ${label} plane. Provide all of {${plane.join(", ")}} or none.`);
115
+ return false;
116
+ };
117
+ const resolved = {
118
+ ...fallback
119
+ };
120
+ if (ownsPlane(ASSET_PLANE, "asset")) {
121
+ resolved.list = host.list.bind(host);
122
+ resolved.remove = host.remove.bind(host);
123
+ resolved.replace = host.replace.bind(host);
124
+ resolved.rename = host.rename.bind(host);
125
+ resolved.move = host.move.bind(host);
126
+ }
127
+ if (ownsPlane(FOLDER_PLANE, "folder")) {
128
+ resolved.createFolder = host.createFolder.bind(host);
129
+ resolved.renameFolder = host.renameFolder.bind(host);
130
+ resolved.removeFolder = host.removeFolder.bind(host);
131
+ resolved.moveFolder = host.moveFolder.bind(host);
132
+ }
133
+ if ("function" == typeof host.subscribeStatus) resolved.subscribeStatus = host.subscribeStatus.bind(host);
134
+ return resolved;
135
+ }
136
+ export { createInMemoryDataSource, resolveDataSource };