@anvilkit/plugin-asset-manager 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +26 -18
  2. package/dist/index.cjs +7 -0
  3. package/dist/index.d.cts +11 -3
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.ts +11 -3
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -1
  8. package/dist/plugin.cjs +67 -4
  9. package/dist/plugin.d.cts +3 -2
  10. package/dist/plugin.d.cts.map +1 -1
  11. package/dist/plugin.d.ts +3 -2
  12. package/dist/plugin.d.ts.map +1 -1
  13. package/dist/plugin.js +67 -4
  14. package/dist/sources/composite-source.cjs +137 -0
  15. package/dist/sources/composite-source.d.cts +39 -0
  16. package/dist/sources/composite-source.d.cts.map +1 -0
  17. package/dist/sources/composite-source.d.ts +39 -0
  18. package/dist/sources/composite-source.d.ts.map +1 -0
  19. package/dist/sources/composite-source.js +99 -0
  20. package/dist/sources/federated-search.cjs +163 -0
  21. package/dist/sources/federated-search.d.cts +33 -0
  22. package/dist/sources/federated-search.d.cts.map +1 -0
  23. package/dist/sources/federated-search.d.ts +33 -0
  24. package/dist/sources/federated-search.d.ts.map +1 -0
  25. package/dist/sources/federated-search.js +113 -0
  26. package/dist/sources/provider.cjs +18 -0
  27. package/dist/sources/provider.d.cts +51 -0
  28. package/dist/sources/provider.d.cts.map +1 -0
  29. package/dist/sources/provider.d.ts +51 -0
  30. package/dist/sources/provider.d.ts.map +1 -0
  31. package/dist/sources/provider.js +1 -0
  32. package/dist/sources/unsplash/client.cjs +189 -0
  33. package/dist/sources/unsplash/client.d.cts +87 -0
  34. package/dist/sources/unsplash/client.d.cts.map +1 -0
  35. package/dist/sources/unsplash/client.d.ts +87 -0
  36. package/dist/sources/unsplash/client.d.ts.map +1 -0
  37. package/dist/sources/unsplash/client.js +151 -0
  38. package/dist/sources/unsplash/index.cjs +192 -0
  39. package/dist/sources/unsplash/index.d.cts +16 -0
  40. package/dist/sources/unsplash/index.d.cts.map +1 -0
  41. package/dist/sources/unsplash/index.d.ts +16 -0
  42. package/dist/sources/unsplash/index.d.ts.map +1 -0
  43. package/dist/sources/unsplash/index.js +148 -0
  44. package/dist/sources/unsplash/themes.cjs +141 -0
  45. package/dist/sources/unsplash/themes.d.cts +18 -0
  46. package/dist/sources/unsplash/themes.d.cts.map +1 -0
  47. package/dist/sources/unsplash/themes.d.ts +18 -0
  48. package/dist/sources/unsplash/themes.d.ts.map +1 -0
  49. package/dist/sources/unsplash/themes.js +93 -0
  50. package/dist/sources/unsplash/throttle-cache.cjs +86 -0
  51. package/dist/sources/unsplash/throttle-cache.d.cts +25 -0
  52. package/dist/sources/unsplash/throttle-cache.d.cts.map +1 -0
  53. package/dist/sources/unsplash/throttle-cache.d.ts +25 -0
  54. package/dist/sources/unsplash/throttle-cache.d.ts.map +1 -0
  55. package/dist/sources/unsplash/throttle-cache.js +45 -0
  56. package/dist/types/categories.cjs +18 -0
  57. package/dist/types/categories.d.cts +48 -0
  58. package/dist/types/categories.d.cts.map +1 -0
  59. package/dist/types/categories.d.ts +48 -0
  60. package/dist/types/categories.d.ts.map +1 -0
  61. package/dist/types/categories.js +1 -0
  62. package/dist/types/data-source.cjs +18 -0
  63. package/dist/types/data-source.d.cts +59 -0
  64. package/dist/types/data-source.d.cts.map +1 -0
  65. package/dist/types/data-source.d.ts +59 -0
  66. package/dist/types/data-source.d.ts.map +1 -0
  67. package/dist/types/data-source.js +1 -0
  68. package/dist/types/filter.cjs +18 -0
  69. package/dist/types/filter.d.cts +55 -0
  70. package/dist/types/filter.d.cts.map +1 -0
  71. package/dist/types/filter.d.ts +55 -0
  72. package/dist/types/filter.d.ts.map +1 -0
  73. package/dist/types/filter.js +1 -0
  74. package/dist/types/folders.cjs +42 -0
  75. package/dist/types/folders.d.cts +46 -0
  76. package/dist/types/folders.d.cts.map +1 -0
  77. package/dist/types/folders.d.ts +46 -0
  78. package/dist/types/folders.d.ts.map +1 -0
  79. package/dist/types/folders.js +4 -0
  80. package/dist/types/options.cjs +18 -0
  81. package/dist/types/options.d.cts +68 -0
  82. package/dist/types/options.d.cts.map +1 -0
  83. package/dist/types/options.d.ts +68 -0
  84. package/dist/types/options.d.ts.map +1 -0
  85. package/dist/types/options.js +1 -0
  86. package/dist/types/types.d.cts +15 -27
  87. package/dist/types/types.d.cts.map +1 -1
  88. package/dist/types/types.d.ts +15 -27
  89. package/dist/types/types.d.ts.map +1 -1
  90. package/dist/types/unsplash.cjs +18 -0
  91. package/dist/types/unsplash.d.cts +60 -0
  92. package/dist/types/unsplash.d.cts.map +1 -0
  93. package/dist/types/unsplash.d.ts +60 -0
  94. package/dist/types/unsplash.d.ts.map +1 -0
  95. package/dist/types/unsplash.js +1 -0
  96. package/dist/ui/AssetBrowser.cjs +33 -12
  97. package/dist/ui/AssetBrowser.d.cts +12 -1
  98. package/dist/ui/AssetBrowser.d.cts.map +1 -1
  99. package/dist/ui/AssetBrowser.d.ts +12 -1
  100. package/dist/ui/AssetBrowser.d.ts.map +1 -1
  101. package/dist/ui/AssetBrowser.js +33 -12
  102. package/dist/ui/AssetManagerUI.cjs +8 -2
  103. package/dist/ui/AssetManagerUI.d.cts +19 -3
  104. package/dist/ui/AssetManagerUI.d.cts.map +1 -1
  105. package/dist/ui/AssetManagerUI.d.ts +19 -3
  106. package/dist/ui/AssetManagerUI.d.ts.map +1 -1
  107. package/dist/ui/AssetManagerUI.js +8 -2
  108. package/dist/ui/DeleteFolderDialog.cjs +78 -0
  109. package/dist/ui/DeleteFolderDialog.d.cts +11 -0
  110. package/dist/ui/DeleteFolderDialog.d.cts.map +1 -0
  111. package/dist/ui/DeleteFolderDialog.d.ts +11 -0
  112. package/dist/ui/DeleteFolderDialog.d.ts.map +1 -0
  113. package/dist/ui/DeleteFolderDialog.js +40 -0
  114. package/dist/ui/EmptyFolderState.cjs +53 -0
  115. package/dist/ui/EmptyFolderState.d.cts +6 -0
  116. package/dist/ui/EmptyFolderState.d.cts.map +1 -0
  117. package/dist/ui/EmptyFolderState.d.ts +6 -0
  118. package/dist/ui/EmptyFolderState.d.ts.map +1 -0
  119. package/dist/ui/EmptyFolderState.js +15 -0
  120. package/dist/ui/FolderBreadcrumb.cjs +73 -0
  121. package/dist/ui/FolderBreadcrumb.d.cts +9 -0
  122. package/dist/ui/FolderBreadcrumb.d.cts.map +1 -0
  123. package/dist/ui/FolderBreadcrumb.d.ts +9 -0
  124. package/dist/ui/FolderBreadcrumb.d.ts.map +1 -0
  125. package/dist/ui/FolderBreadcrumb.js +35 -0
  126. package/dist/ui/FolderNameDialog.cjs +98 -0
  127. package/dist/ui/FolderNameDialog.d.cts +14 -0
  128. package/dist/ui/FolderNameDialog.d.cts.map +1 -0
  129. package/dist/ui/FolderNameDialog.d.ts +14 -0
  130. package/dist/ui/FolderNameDialog.d.ts.map +1 -0
  131. package/dist/ui/FolderNameDialog.js +60 -0
  132. package/dist/ui/FolderTree.cjs +83 -0
  133. package/dist/ui/FolderTree.d.cts +13 -0
  134. package/dist/ui/FolderTree.d.cts.map +1 -0
  135. package/dist/ui/FolderTree.d.ts +13 -0
  136. package/dist/ui/FolderTree.d.ts.map +1 -0
  137. package/dist/ui/FolderTree.js +42 -0
  138. package/dist/ui/MetadataPanel.cjs +7 -4
  139. package/dist/ui/MetadataPanel.d.cts.map +1 -1
  140. package/dist/ui/MetadataPanel.d.ts.map +1 -1
  141. package/dist/ui/MetadataPanel.js +7 -4
  142. package/dist/ui/MoveTargetPicker.cjs +84 -0
  143. package/dist/ui/MoveTargetPicker.d.cts +16 -0
  144. package/dist/ui/MoveTargetPicker.d.cts.map +1 -0
  145. package/dist/ui/MoveTargetPicker.d.ts +16 -0
  146. package/dist/ui/MoveTargetPicker.d.ts.map +1 -0
  147. package/dist/ui/MoveTargetPicker.js +46 -0
  148. package/dist/ui/ReplaceAssetDialog.d.cts +2 -1
  149. package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
  150. package/dist/ui/ReplaceAssetDialog.d.ts +2 -1
  151. package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
  152. package/dist/ui/UnsplashPanel.cjs +134 -0
  153. package/dist/ui/UnsplashPanel.d.cts +28 -0
  154. package/dist/ui/UnsplashPanel.d.cts.map +1 -0
  155. package/dist/ui/UnsplashPanel.d.ts +28 -0
  156. package/dist/ui/UnsplashPanel.d.ts.map +1 -0
  157. package/dist/ui/UnsplashPanel.js +96 -0
  158. package/dist/ui/UploadButton.cjs +1 -5
  159. package/dist/ui/UploadButton.d.cts +9 -2
  160. package/dist/ui/UploadButton.d.cts.map +1 -1
  161. package/dist/ui/UploadButton.d.ts +9 -2
  162. package/dist/ui/UploadButton.d.ts.map +1 -1
  163. package/dist/ui/UploadButton.js +1 -5
  164. package/dist/ui/index.cjs +37 -0
  165. package/dist/ui/index.d.cts +14 -0
  166. package/dist/ui/index.d.cts.map +1 -1
  167. package/dist/ui/index.d.ts +14 -0
  168. package/dist/ui/index.d.ts.map +1 -1
  169. package/dist/ui/index.js +7 -0
  170. package/dist/utils/data-source.cjs +177 -0
  171. package/dist/utils/data-source.d.cts +63 -0
  172. package/dist/utils/data-source.d.cts.map +1 -0
  173. package/dist/utils/data-source.d.ts +63 -0
  174. package/dist/utils/data-source.d.ts.map +1 -0
  175. package/dist/utils/data-source.js +136 -0
  176. package/dist/utils/errors.cjs +18 -0
  177. package/dist/utils/errors.d.cts +27 -0
  178. package/dist/utils/errors.d.cts.map +1 -1
  179. package/dist/utils/errors.d.ts +27 -0
  180. package/dist/utils/errors.d.ts.map +1 -1
  181. package/dist/utils/errors.js +16 -1
  182. package/dist/utils/folders.cjs +261 -0
  183. package/dist/utils/folders.d.cts +49 -0
  184. package/dist/utils/folders.d.cts.map +1 -0
  185. package/dist/utils/folders.d.ts +49 -0
  186. package/dist/utils/folders.d.ts.map +1 -0
  187. package/dist/utils/folders.js +223 -0
  188. package/dist/utils/registry.cjs +27 -12
  189. package/dist/utils/registry.d.cts +21 -1
  190. package/dist/utils/registry.d.cts.map +1 -1
  191. package/dist/utils/registry.d.ts +21 -1
  192. package/dist/utils/registry.d.ts.map +1 -1
  193. package/dist/utils/registry.js +20 -11
  194. package/dist/utils/studio-asset-source.cjs +5 -2
  195. package/dist/utils/studio-asset-source.d.cts +6 -1
  196. package/dist/utils/studio-asset-source.d.cts.map +1 -1
  197. package/dist/utils/studio-asset-source.d.ts +6 -1
  198. package/dist/utils/studio-asset-source.d.ts.map +1 -1
  199. package/dist/utils/studio-asset-source.js +1 -1
  200. package/dist/utils/validate-upload-result.d.cts +2 -1
  201. package/dist/utils/validate-upload-result.d.cts.map +1 -1
  202. package/dist/utils/validate-upload-result.d.ts +2 -1
  203. package/dist/utils/validate-upload-result.d.ts.map +1 -1
  204. package/dist/version.cjs +1 -1
  205. package/dist/version.d.cts +1 -1
  206. package/dist/version.d.ts +1 -1
  207. package/dist/version.js +1 -1
  208. package/meta/config.json +1 -1
  209. package/package.json +12 -2
@@ -0,0 +1,86 @@
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
+ function createTtlCache(ttlMs, maxEntries = 100) {
31
+ const map = new Map();
32
+ return {
33
+ get (key, now) {
34
+ const entry = map.get(key);
35
+ if (void 0 === entry) return;
36
+ if (entry.expires <= now) return void map.delete(key);
37
+ map.delete(key);
38
+ map.set(key, entry);
39
+ return entry.value;
40
+ },
41
+ set (key, value, now) {
42
+ if (!map.has(key) && map.size >= maxEntries) {
43
+ const oldest = map.keys().next().value;
44
+ if (void 0 !== oldest) map.delete(oldest);
45
+ }
46
+ map.set(key, {
47
+ value,
48
+ expires: now + ttlMs
49
+ });
50
+ },
51
+ get size () {
52
+ return map.size;
53
+ }
54
+ };
55
+ }
56
+ function createSingleFlightThrottle(options) {
57
+ const now = options.now ?? (()=>Date.now());
58
+ const wait = options.wait ?? ((ms)=>new Promise((resolve)=>setTimeout(resolve, ms)));
59
+ let last = -1 / 0;
60
+ let chain = Promise.resolve();
61
+ return {
62
+ run (task) {
63
+ const result = chain.then(async ()=>{
64
+ const elapsed = now() - last;
65
+ if (elapsed < options.minIntervalMs) await wait(options.minIntervalMs - elapsed);
66
+ last = now();
67
+ return task();
68
+ });
69
+ chain = result.then(()=>void 0, ()=>void 0);
70
+ return result;
71
+ }
72
+ };
73
+ }
74
+ __webpack_require__.d(__webpack_exports__, {
75
+ createSingleFlightThrottle: ()=>createSingleFlightThrottle,
76
+ createTtlCache: ()=>createTtlCache
77
+ });
78
+ exports.createSingleFlightThrottle = __webpack_exports__.createSingleFlightThrottle;
79
+ exports.createTtlCache = __webpack_exports__.createTtlCache;
80
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
81
+ "createSingleFlightThrottle",
82
+ "createTtlCache"
83
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
84
+ Object.defineProperty(exports, '__esModule', {
85
+ value: true
86
+ });
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @file Rate-limit discipline for Unsplash JSON calls (PRD 0002 §8.5): an
3
+ * LRU+TTL result cache and a single-flight throttle that enforces a minimum
4
+ * interval between requests. Clock + wait are injectable for deterministic tests.
5
+ */
6
+ export interface TtlCache<T> {
7
+ get(key: string, now: number): T | undefined;
8
+ set(key: string, value: T, now: number): void;
9
+ readonly size: number;
10
+ }
11
+ export declare function createTtlCache<T>(ttlMs: number, maxEntries?: number): TtlCache<T>;
12
+ export interface SingleFlightThrottle {
13
+ run<T>(task: () => Promise<T>): Promise<T>;
14
+ }
15
+ export interface CreateThrottleOptions {
16
+ readonly minIntervalMs: number;
17
+ readonly now?: () => number;
18
+ readonly wait?: (ms: number) => Promise<void>;
19
+ }
20
+ /**
21
+ * Serializes tasks and guarantees at least `minIntervalMs` between the *starts*
22
+ * of consecutive tasks — the politeness Unsplash's quota requires.
23
+ */
24
+ export declare function createSingleFlightThrottle(options: CreateThrottleOptions): SingleFlightThrottle;
25
+ //# sourceMappingURL=throttle-cache.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle-cache.d.cts","sourceRoot":"","sources":["../../../src/sources/unsplash/throttle-cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,QAAQ,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,UAAU,SAAM,GACd,QAAQ,CAAC,CAAC,CAAC,CA0Bb;AAED,MAAM,WAAW,oBAAoB;IACpC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,qBAAqB,GAC5B,oBAAoB,CA0BtB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @file Rate-limit discipline for Unsplash JSON calls (PRD 0002 §8.5): an
3
+ * LRU+TTL result cache and a single-flight throttle that enforces a minimum
4
+ * interval between requests. Clock + wait are injectable for deterministic tests.
5
+ */
6
+ export interface TtlCache<T> {
7
+ get(key: string, now: number): T | undefined;
8
+ set(key: string, value: T, now: number): void;
9
+ readonly size: number;
10
+ }
11
+ export declare function createTtlCache<T>(ttlMs: number, maxEntries?: number): TtlCache<T>;
12
+ export interface SingleFlightThrottle {
13
+ run<T>(task: () => Promise<T>): Promise<T>;
14
+ }
15
+ export interface CreateThrottleOptions {
16
+ readonly minIntervalMs: number;
17
+ readonly now?: () => number;
18
+ readonly wait?: (ms: number) => Promise<void>;
19
+ }
20
+ /**
21
+ * Serializes tasks and guarantees at least `minIntervalMs` between the *starts*
22
+ * of consecutive tasks — the politeness Unsplash's quota requires.
23
+ */
24
+ export declare function createSingleFlightThrottle(options: CreateThrottleOptions): SingleFlightThrottle;
25
+ //# sourceMappingURL=throttle-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle-cache.d.ts","sourceRoot":"","sources":["../../../src/sources/unsplash/throttle-cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,QAAQ,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,UAAU,SAAM,GACd,QAAQ,CAAC,CAAC,CAAC,CA0Bb;AAED,MAAM,WAAW,oBAAoB;IACpC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,qBAAqB,GAC5B,oBAAoB,CA0BtB"}
@@ -0,0 +1,45 @@
1
+ function createTtlCache(ttlMs, maxEntries = 100) {
2
+ const map = new Map();
3
+ return {
4
+ get (key, now) {
5
+ const entry = map.get(key);
6
+ if (void 0 === entry) return;
7
+ if (entry.expires <= now) return void map.delete(key);
8
+ map.delete(key);
9
+ map.set(key, entry);
10
+ return entry.value;
11
+ },
12
+ set (key, value, now) {
13
+ if (!map.has(key) && map.size >= maxEntries) {
14
+ const oldest = map.keys().next().value;
15
+ if (void 0 !== oldest) map.delete(oldest);
16
+ }
17
+ map.set(key, {
18
+ value,
19
+ expires: now + ttlMs
20
+ });
21
+ },
22
+ get size () {
23
+ return map.size;
24
+ }
25
+ };
26
+ }
27
+ function createSingleFlightThrottle(options) {
28
+ const now = options.now ?? (()=>Date.now());
29
+ const wait = options.wait ?? ((ms)=>new Promise((resolve)=>setTimeout(resolve, ms)));
30
+ let last = -1 / 0;
31
+ let chain = Promise.resolve();
32
+ return {
33
+ run (task) {
34
+ const result = chain.then(async ()=>{
35
+ const elapsed = now() - last;
36
+ if (elapsed < options.minIntervalMs) await wait(options.minIntervalMs - elapsed);
37
+ last = now();
38
+ return task();
39
+ });
40
+ chain = result.then(()=>void 0, ()=>void 0);
41
+ return result;
42
+ }
43
+ };
44
+ }
45
+ export { createSingleFlightThrottle, createTtlCache };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.r = (exports1)=>{
5
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
6
+ value: 'Module'
7
+ });
8
+ Object.defineProperty(exports1, '__esModule', {
9
+ value: true
10
+ });
11
+ };
12
+ })();
13
+ var __webpack_exports__ = {};
14
+ __webpack_require__.r(__webpack_exports__);
15
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
16
+ Object.defineProperty(exports, '__esModule', {
17
+ value: true
18
+ });
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @file Extensible categorization / facet registry (PRD 0002 §3.5, §9.2).
3
+ *
4
+ * `kind`, `tags`, `folder`, and `source` are built-in facets registered by the
5
+ * plugin; hosts append {@link AssetFacetDefinition}s rather than reconfigure.
6
+ * {@link AssetCategory} is a host-friendly "saved view" sugar over filters and
7
+ * providers, surfaced as chips beside the kind chips.
8
+ */
9
+ import type { AssetSourceId } from "./filter.js";
10
+ import type { AssetKind, UploadResult } from "./types.js";
11
+ export interface AssetFacetOption {
12
+ readonly value: string;
13
+ readonly label: string;
14
+ /** Populated by memoized facet counts when available. */
15
+ readonly count?: number;
16
+ }
17
+ export interface AssetFacetDefinition {
18
+ /** Stable key; used in `AssetFilter.facets[id]`. */
19
+ readonly id: string;
20
+ readonly label: string;
21
+ /** `"single"` renders as chips/radio; `"multi"` as a multiselect. */
22
+ readonly selection: "single" | "multi";
23
+ /** Which sources this facet applies to. `undefined` ⇒ all. */
24
+ readonly appliesTo?: readonly AssetSourceId[];
25
+ /** Derive the asset's value(s) for this facet (local, sync). */
26
+ readonly valueOf?: (asset: UploadResult) => readonly string[] | undefined;
27
+ /** Static options, or an async loader for remote facets (e.g. Unsplash topics). */
28
+ readonly options?: readonly AssetFacetOption[] | ((ctx: {
29
+ readonly source?: AssetSourceId;
30
+ }) => Promise<readonly AssetFacetOption[]>);
31
+ /** When true, the facet is delegated to the source instead of matched locally. */
32
+ readonly remote?: boolean;
33
+ }
34
+ export interface AssetCategory {
35
+ readonly id: string;
36
+ readonly label: string;
37
+ /** Local match composed with AND-semantic search. */
38
+ readonly match?: {
39
+ readonly tags?: readonly string[];
40
+ readonly kinds?: readonly AssetKind[];
41
+ };
42
+ /** Route the category to an external provider/theme instead of a local match. */
43
+ readonly provider?: {
44
+ readonly source: AssetSourceId;
45
+ readonly theme?: string;
46
+ };
47
+ }
48
+ //# sourceMappingURL=categories.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categories.d.cts","sourceRoot":"","sources":["../../src/types/categories.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACpC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC1E,mFAAmF;IACnF,QAAQ,CAAC,OAAO,CAAC,EACd,SAAS,gBAAgB,EAAE,GAC3B,CAAC,CAAC,GAAG,EAAE;QACP,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;KAC/B,KAAK,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAC/C,kFAAkF;IAClF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE;QAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;KACtC,CAAC;IACF,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACnB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACF"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @file Extensible categorization / facet registry (PRD 0002 §3.5, §9.2).
3
+ *
4
+ * `kind`, `tags`, `folder`, and `source` are built-in facets registered by the
5
+ * plugin; hosts append {@link AssetFacetDefinition}s rather than reconfigure.
6
+ * {@link AssetCategory} is a host-friendly "saved view" sugar over filters and
7
+ * providers, surfaced as chips beside the kind chips.
8
+ */
9
+ import type { AssetSourceId } from "./filter.js";
10
+ import type { AssetKind, UploadResult } from "./types.js";
11
+ export interface AssetFacetOption {
12
+ readonly value: string;
13
+ readonly label: string;
14
+ /** Populated by memoized facet counts when available. */
15
+ readonly count?: number;
16
+ }
17
+ export interface AssetFacetDefinition {
18
+ /** Stable key; used in `AssetFilter.facets[id]`. */
19
+ readonly id: string;
20
+ readonly label: string;
21
+ /** `"single"` renders as chips/radio; `"multi"` as a multiselect. */
22
+ readonly selection: "single" | "multi";
23
+ /** Which sources this facet applies to. `undefined` ⇒ all. */
24
+ readonly appliesTo?: readonly AssetSourceId[];
25
+ /** Derive the asset's value(s) for this facet (local, sync). */
26
+ readonly valueOf?: (asset: UploadResult) => readonly string[] | undefined;
27
+ /** Static options, or an async loader for remote facets (e.g. Unsplash topics). */
28
+ readonly options?: readonly AssetFacetOption[] | ((ctx: {
29
+ readonly source?: AssetSourceId;
30
+ }) => Promise<readonly AssetFacetOption[]>);
31
+ /** When true, the facet is delegated to the source instead of matched locally. */
32
+ readonly remote?: boolean;
33
+ }
34
+ export interface AssetCategory {
35
+ readonly id: string;
36
+ readonly label: string;
37
+ /** Local match composed with AND-semantic search. */
38
+ readonly match?: {
39
+ readonly tags?: readonly string[];
40
+ readonly kinds?: readonly AssetKind[];
41
+ };
42
+ /** Route the category to an external provider/theme instead of a local match. */
43
+ readonly provider?: {
44
+ readonly source: AssetSourceId;
45
+ readonly theme?: string;
46
+ };
47
+ }
48
+ //# sourceMappingURL=categories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../src/types/categories.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACpC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC1E,mFAAmF;IACnF,QAAQ,CAAC,OAAO,CAAC,EACd,SAAS,gBAAgB,EAAE,GAC3B,CAAC,CAAC,GAAG,EAAE;QACP,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;KAC/B,KAAK,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAC/C,kFAAkF;IAClF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE;QAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;KACtC,CAAC;IACF,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACnB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.r = (exports1)=>{
5
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
6
+ value: 'Module'
7
+ });
8
+ Object.defineProperty(exports1, '__esModule', {
9
+ value: true
10
+ });
11
+ };
12
+ })();
13
+ var __webpack_exports__ = {};
14
+ __webpack_require__.r(__webpack_exports__);
15
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
16
+ Object.defineProperty(exports, '__esModule', {
17
+ value: true
18
+ });
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @file The unified host-facing data plane (PRD 0002 §3.3, §3.6).
3
+ *
4
+ * `AssetDataSource` is the ONE optional object a host supplies to back the local
5
+ * library. Every method is optional and async-first; any method (resolved
6
+ * per-plane) the host omits is filled by the built-in in-memory default. Binary
7
+ * ingest is NOT here — it stays on the top-level `uploader` (`UploadAdapter`).
8
+ *
9
+ * The READ is unified: `list()` returns the folder's assets, its child folders,
10
+ * and its breadcrumb in one envelope — there is deliberately no `listFolders`.
11
+ * Folder *mutations* are a separate plane.
12
+ */
13
+ import type { AssetSourceError } from "../utils/errors.js";
14
+ import type { AssetFilter, AssetListPage } from "./filter.js";
15
+ import type { AssetFolder, FolderId } from "./folders.js";
16
+ import type { UploadResult } from "./types.js";
17
+ /**
18
+ * Replacement payload for {@link AssetDataSource.replace}. Kept `File`-only for
19
+ * parity with core's `StudioAssetSource.replace` boundary; programmatic
20
+ * `UploadResult` replacement stays on the registry.
21
+ */
22
+ export type ReplacePayload = File;
23
+ /** Loading/mutation status surfaced through {@link AssetDataSource.subscribeStatus}. */
24
+ export type AssetSourceStatus = {
25
+ readonly phase: "idle";
26
+ } | {
27
+ readonly phase: "loading";
28
+ } | {
29
+ readonly phase: "paginating";
30
+ readonly loaded: number;
31
+ } | {
32
+ readonly phase: "mutating";
33
+ readonly op: "rename" | "remove" | "move" | "replace" | "createFolder" | "removeFolder" | "moveFolder";
34
+ readonly id: string;
35
+ } | {
36
+ readonly phase: "error";
37
+ readonly error: AssetSourceError;
38
+ };
39
+ export interface AssetDataSource {
40
+ /**
41
+ * THE single read. Scoped by `query.folderId` (null=root, undefined=all),
42
+ * returns the folder's assets (paginated `items`), its child `folders`, and
43
+ * its `folderPath` breadcrumb in one envelope. No separate `listFolders`.
44
+ */
45
+ list?(query: AssetFilter, signal?: AbortSignal): Promise<AssetListPage>;
46
+ remove?(id: string, signal?: AbortSignal): Promise<void>;
47
+ replace?(id: string, payload: ReplacePayload, signal?: AbortSignal): Promise<UploadResult>;
48
+ rename?(id: string, name: string, signal?: AbortSignal): Promise<UploadResult>;
49
+ /** Move an asset into a folder. `null` ⇒ root. */
50
+ move?(id: string, folderId: FolderId | null, signal?: AbortSignal): Promise<void>;
51
+ createFolder?(parentId: FolderId | null, name: string, signal?: AbortSignal): Promise<AssetFolder>;
52
+ renameFolder?(id: FolderId, name: string, signal?: AbortSignal): Promise<AssetFolder>;
53
+ removeFolder?(id: FolderId, opts?: {
54
+ readonly cascade?: boolean;
55
+ }, signal?: AbortSignal): Promise<void>;
56
+ moveFolder?(id: FolderId, parentId: FolderId | null, signal?: AbortSignal): Promise<AssetFolder>;
57
+ subscribeStatus?(listener: (status: AssetSourceStatus) => void): () => void;
58
+ }
59
+ //# sourceMappingURL=data-source.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-source.d.cts","sourceRoot":"","sources":["../../src/types/data-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC;AAElC,wFAAwF;AACxF,MAAM,MAAM,iBAAiB,GAC1B;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzD;IACA,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,EAAE,EACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,SAAS,GACT,cAAc,GACd,cAAc,GACd,YAAY,CAAC;IAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEjE,MAAM,WAAW,eAAe;IAE/B;;;;OAIG;IACH,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAGxE,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,CAAC,CACP,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IACzB,MAAM,CAAC,CACN,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IACzB,kDAAkD;IAClD,IAAI,CAAC,CACJ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjB,YAAY,CAAC,CACZ,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,YAAY,CAAC,CACZ,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,YAAY,CAAC,CACZ,EAAE,EAAE,QAAQ,EACZ,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EACrC,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,UAAU,CAAC,CACV,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC;IAGxB,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5E"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @file The unified host-facing data plane (PRD 0002 §3.3, §3.6).
3
+ *
4
+ * `AssetDataSource` is the ONE optional object a host supplies to back the local
5
+ * library. Every method is optional and async-first; any method (resolved
6
+ * per-plane) the host omits is filled by the built-in in-memory default. Binary
7
+ * ingest is NOT here — it stays on the top-level `uploader` (`UploadAdapter`).
8
+ *
9
+ * The READ is unified: `list()` returns the folder's assets, its child folders,
10
+ * and its breadcrumb in one envelope — there is deliberately no `listFolders`.
11
+ * Folder *mutations* are a separate plane.
12
+ */
13
+ import type { AssetSourceError } from "../utils/errors.js";
14
+ import type { AssetFilter, AssetListPage } from "./filter.js";
15
+ import type { AssetFolder, FolderId } from "./folders.js";
16
+ import type { UploadResult } from "./types.js";
17
+ /**
18
+ * Replacement payload for {@link AssetDataSource.replace}. Kept `File`-only for
19
+ * parity with core's `StudioAssetSource.replace` boundary; programmatic
20
+ * `UploadResult` replacement stays on the registry.
21
+ */
22
+ export type ReplacePayload = File;
23
+ /** Loading/mutation status surfaced through {@link AssetDataSource.subscribeStatus}. */
24
+ export type AssetSourceStatus = {
25
+ readonly phase: "idle";
26
+ } | {
27
+ readonly phase: "loading";
28
+ } | {
29
+ readonly phase: "paginating";
30
+ readonly loaded: number;
31
+ } | {
32
+ readonly phase: "mutating";
33
+ readonly op: "rename" | "remove" | "move" | "replace" | "createFolder" | "removeFolder" | "moveFolder";
34
+ readonly id: string;
35
+ } | {
36
+ readonly phase: "error";
37
+ readonly error: AssetSourceError;
38
+ };
39
+ export interface AssetDataSource {
40
+ /**
41
+ * THE single read. Scoped by `query.folderId` (null=root, undefined=all),
42
+ * returns the folder's assets (paginated `items`), its child `folders`, and
43
+ * its `folderPath` breadcrumb in one envelope. No separate `listFolders`.
44
+ */
45
+ list?(query: AssetFilter, signal?: AbortSignal): Promise<AssetListPage>;
46
+ remove?(id: string, signal?: AbortSignal): Promise<void>;
47
+ replace?(id: string, payload: ReplacePayload, signal?: AbortSignal): Promise<UploadResult>;
48
+ rename?(id: string, name: string, signal?: AbortSignal): Promise<UploadResult>;
49
+ /** Move an asset into a folder. `null` ⇒ root. */
50
+ move?(id: string, folderId: FolderId | null, signal?: AbortSignal): Promise<void>;
51
+ createFolder?(parentId: FolderId | null, name: string, signal?: AbortSignal): Promise<AssetFolder>;
52
+ renameFolder?(id: FolderId, name: string, signal?: AbortSignal): Promise<AssetFolder>;
53
+ removeFolder?(id: FolderId, opts?: {
54
+ readonly cascade?: boolean;
55
+ }, signal?: AbortSignal): Promise<void>;
56
+ moveFolder?(id: FolderId, parentId: FolderId | null, signal?: AbortSignal): Promise<AssetFolder>;
57
+ subscribeStatus?(listener: (status: AssetSourceStatus) => void): () => void;
58
+ }
59
+ //# sourceMappingURL=data-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-source.d.ts","sourceRoot":"","sources":["../../src/types/data-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC;AAElC,wFAAwF;AACxF,MAAM,MAAM,iBAAiB,GAC1B;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzD;IACA,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,EAAE,EACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,SAAS,GACT,cAAc,GACd,cAAc,GACd,YAAY,CAAC;IAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEjE,MAAM,WAAW,eAAe;IAE/B;;;;OAIG;IACH,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAGxE,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,CAAC,CACP,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IACzB,MAAM,CAAC,CACN,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IACzB,kDAAkD;IAClD,IAAI,CAAC,CACJ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjB,YAAY,CAAC,CACZ,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,YAAY,CAAC,CACZ,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,YAAY,CAAC,CACZ,EAAE,EAAE,QAAQ,EACZ,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EACrC,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,UAAU,CAAC,CACV,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC;IAGxB,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5E"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.r = (exports1)=>{
5
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
6
+ value: 'Module'
7
+ });
8
+ Object.defineProperty(exports1, '__esModule', {
9
+ value: true
10
+ });
11
+ };
12
+ })();
13
+ var __webpack_exports__ = {};
14
+ __webpack_require__.r(__webpack_exports__);
15
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
16
+ Object.defineProperty(exports, '__esModule', {
17
+ value: true
18
+ });
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @file Unified categorization & filtering model (PRD 0002 §3.2, §9).
3
+ *
4
+ * `AssetSearchOptions` (the historic 5-field query in `./types.ts`) is retained
5
+ * verbatim; {@link AssetFilter} EXTENDS it additively, so every existing caller
6
+ * keeps compiling while new code gains folder/source/facet/sort axes. The page
7
+ * envelope {@link AssetListPage} likewise extends the existing `AssetSearchPage`
8
+ * with a unified folder view (`folders` + `folderPath`) so a single `list()`
9
+ * returns assets, child folders, and the breadcrumb — no separate `listFolders`.
10
+ */
11
+ import type { AssetFolder, FolderId } from "./folders.js";
12
+ import type { AssetSearchOptions, AssetSearchPage } from "./types.js";
13
+ /**
14
+ * Stable source identifiers. Branded so a typo is a type error while hosts can
15
+ * still introduce their own ids (e.g. `"brandfolder"`).
16
+ */
17
+ export type AssetSourceId = "local" | "unsplash" | (string & {});
18
+ export type AssetSortField = "recent" | "name" | "size" | "kind" | "relevance";
19
+ export interface AssetSort {
20
+ readonly field: AssetSortField;
21
+ /** Defaults are field-appropriate: `recent`→`desc`, `name`→`asc`. */
22
+ readonly direction?: "asc" | "desc";
23
+ }
24
+ /**
25
+ * The single, unified query passed to every filterable surface. All fields are
26
+ * optional and compose with AND semantics (an asset must satisfy every supplied
27
+ * axis), extending the existing `runSearch()` conjunction.
28
+ */
29
+ export interface AssetFilter extends AssetSearchOptions {
30
+ /** Scope to a folder. `null` ⇒ root only; `undefined` ⇒ any folder. */
31
+ readonly folderId?: FolderId | null;
32
+ /** When true, include assets in descendant folders too. Default false. */
33
+ readonly recursive?: boolean;
34
+ /** Restrict to one or more sources. `undefined` ⇒ federate across all. */
35
+ readonly sources?: readonly AssetSourceId[];
36
+ /** Host-registered facet selections, keyed by facet id. */
37
+ readonly facets?: Readonly<Record<string, readonly string[]>>;
38
+ /** Sort. Defaults to `{ field: "recent", direction: "desc" }`. */
39
+ readonly sort?: AssetSort;
40
+ }
41
+ /**
42
+ * Page envelope: `AssetSearchPage` (assets, paginated) plus the unified folder
43
+ * view. `folders`/`folderPath` ride OUTSIDE the asset cursor/`limit` (folders
44
+ * are few and returned whole per scope); only `items` paginates. A flat source
45
+ * omits the folder fields.
46
+ */
47
+ export interface AssetListPage extends AssetSearchPage {
48
+ /** Child folders of `query.folderId` (or the whole sub-tree when `recursive`). */
49
+ readonly folders?: readonly AssetFolder[];
50
+ /** Root → … → current folder, for the breadcrumb. Omitted at root. */
51
+ readonly folderPath?: readonly AssetFolder[];
52
+ /** Per-source page tokens for federated paging, keyed by source id. */
53
+ readonly sourceCursors?: Readonly<Record<string, string | undefined>>;
54
+ }
55
+ //# sourceMappingURL=filter.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.cts","sourceRoot":"","sources":["../../src/types/filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/E,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,qEAAqE;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,kBAAkB;IACtD,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9D,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAc,SAAQ,eAAe;IACrD,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,sEAAsE;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC7C,uEAAuE;IACvE,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CACtE"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @file Unified categorization & filtering model (PRD 0002 §3.2, §9).
3
+ *
4
+ * `AssetSearchOptions` (the historic 5-field query in `./types.ts`) is retained
5
+ * verbatim; {@link AssetFilter} EXTENDS it additively, so every existing caller
6
+ * keeps compiling while new code gains folder/source/facet/sort axes. The page
7
+ * envelope {@link AssetListPage} likewise extends the existing `AssetSearchPage`
8
+ * with a unified folder view (`folders` + `folderPath`) so a single `list()`
9
+ * returns assets, child folders, and the breadcrumb — no separate `listFolders`.
10
+ */
11
+ import type { AssetFolder, FolderId } from "./folders.js";
12
+ import type { AssetSearchOptions, AssetSearchPage } from "./types.js";
13
+ /**
14
+ * Stable source identifiers. Branded so a typo is a type error while hosts can
15
+ * still introduce their own ids (e.g. `"brandfolder"`).
16
+ */
17
+ export type AssetSourceId = "local" | "unsplash" | (string & {});
18
+ export type AssetSortField = "recent" | "name" | "size" | "kind" | "relevance";
19
+ export interface AssetSort {
20
+ readonly field: AssetSortField;
21
+ /** Defaults are field-appropriate: `recent`→`desc`, `name`→`asc`. */
22
+ readonly direction?: "asc" | "desc";
23
+ }
24
+ /**
25
+ * The single, unified query passed to every filterable surface. All fields are
26
+ * optional and compose with AND semantics (an asset must satisfy every supplied
27
+ * axis), extending the existing `runSearch()` conjunction.
28
+ */
29
+ export interface AssetFilter extends AssetSearchOptions {
30
+ /** Scope to a folder. `null` ⇒ root only; `undefined` ⇒ any folder. */
31
+ readonly folderId?: FolderId | null;
32
+ /** When true, include assets in descendant folders too. Default false. */
33
+ readonly recursive?: boolean;
34
+ /** Restrict to one or more sources. `undefined` ⇒ federate across all. */
35
+ readonly sources?: readonly AssetSourceId[];
36
+ /** Host-registered facet selections, keyed by facet id. */
37
+ readonly facets?: Readonly<Record<string, readonly string[]>>;
38
+ /** Sort. Defaults to `{ field: "recent", direction: "desc" }`. */
39
+ readonly sort?: AssetSort;
40
+ }
41
+ /**
42
+ * Page envelope: `AssetSearchPage` (assets, paginated) plus the unified folder
43
+ * view. `folders`/`folderPath` ride OUTSIDE the asset cursor/`limit` (folders
44
+ * are few and returned whole per scope); only `items` paginates. A flat source
45
+ * omits the folder fields.
46
+ */
47
+ export interface AssetListPage extends AssetSearchPage {
48
+ /** Child folders of `query.folderId` (or the whole sub-tree when `recursive`). */
49
+ readonly folders?: readonly AssetFolder[];
50
+ /** Root → … → current folder, for the breadcrumb. Omitted at root. */
51
+ readonly folderPath?: readonly AssetFolder[];
52
+ /** Per-source page tokens for federated paging, keyed by source id. */
53
+ readonly sourceCursors?: Readonly<Record<string, string | undefined>>;
54
+ }
55
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/types/filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/E,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,qEAAqE;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,kBAAkB;IACtD,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9D,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAc,SAAQ,eAAe;IACrD,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,sEAAsE;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC7C,uEAAuE;IACvE,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CACtE"}
@@ -0,0 +1 @@
1
+ export { };