@anvilkit/plugin-asset-manager 0.1.2 → 0.1.4
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.
- package/README.md +366 -108
- package/dist/adapters/data-url.cjs +10 -6
- package/dist/adapters/data-url.d.cts +1 -1
- package/dist/adapters/data-url.d.cts.map +1 -1
- package/dist/adapters/data-url.d.ts +1 -1
- package/dist/adapters/data-url.d.ts.map +1 -1
- package/dist/adapters/data-url.js +7 -3
- package/dist/adapters/extract-image-dimensions.cjs +9 -0
- package/dist/adapters/extract-image-dimensions.d.cts +6 -0
- package/dist/adapters/extract-image-dimensions.d.cts.map +1 -1
- package/dist/adapters/extract-image-dimensions.d.ts +6 -0
- package/dist/adapters/extract-image-dimensions.d.ts.map +1 -1
- package/dist/adapters/extract-image-dimensions.js +9 -0
- package/dist/adapters/in-memory.cjs +6 -4
- package/dist/adapters/in-memory.d.cts +7 -1
- package/dist/adapters/in-memory.d.cts.map +1 -1
- package/dist/adapters/in-memory.d.ts +7 -1
- package/dist/adapters/in-memory.d.ts.map +1 -1
- package/dist/adapters/in-memory.js +6 -4
- package/dist/adapters/s3-presigned.cjs +90 -40
- package/dist/adapters/s3-presigned.d.cts +5 -4
- package/dist/adapters/s3-presigned.d.cts.map +1 -1
- package/dist/adapters/s3-presigned.d.ts +5 -4
- package/dist/adapters/s3-presigned.d.ts.map +1 -1
- package/dist/adapters/s3-presigned.js +80 -30
- package/dist/index.cjs +20 -20
- package/dist/index.d.cts +13 -13
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +13 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/plugin.cjs +56 -31
- package/dist/plugin.d.cts +6 -5
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.ts +6 -5
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +34 -17
- package/dist/testing/index.cjs +2 -2
- package/dist/testing/index.d.cts +1 -1
- package/dist/testing/index.d.cts.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/{types.d.cts → types/types.d.cts} +9 -1
- package/dist/types/types.d.cts.map +1 -0
- package/dist/{types.d.ts → types/types.d.ts} +9 -1
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +1 -0
- package/dist/ui/AssetBrowser.cjs +55 -20
- package/dist/ui/AssetBrowser.d.cts +11 -2
- package/dist/ui/AssetBrowser.d.cts.map +1 -1
- package/dist/ui/AssetBrowser.d.ts +11 -2
- package/dist/ui/AssetBrowser.d.ts.map +1 -1
- package/dist/ui/AssetBrowser.js +55 -20
- package/dist/ui/AssetCommandPalette.cjs +20 -11
- package/dist/ui/AssetCommandPalette.d.cts +1 -1
- package/dist/ui/AssetCommandPalette.d.cts.map +1 -1
- package/dist/ui/AssetCommandPalette.d.ts +1 -1
- package/dist/ui/AssetCommandPalette.d.ts.map +1 -1
- package/dist/ui/AssetCommandPalette.js +19 -10
- package/dist/ui/AssetManagerUI.cjs +3 -2
- package/dist/ui/AssetManagerUI.d.cts +1 -1
- package/dist/ui/AssetManagerUI.d.cts.map +1 -1
- package/dist/ui/AssetManagerUI.d.ts +1 -1
- package/dist/ui/AssetManagerUI.d.ts.map +1 -1
- package/dist/ui/AssetManagerUI.js +2 -1
- package/dist/ui/DeleteAssetDialog.cjs +1 -0
- package/dist/ui/DeleteAssetDialog.d.cts +1 -1
- package/dist/ui/DeleteAssetDialog.d.cts.map +1 -1
- package/dist/ui/DeleteAssetDialog.d.ts +1 -1
- package/dist/ui/DeleteAssetDialog.d.ts.map +1 -1
- package/dist/ui/DeleteAssetDialog.js +1 -0
- package/dist/ui/MetadataPanel.cjs +1 -0
- package/dist/ui/MetadataPanel.d.cts +1 -1
- package/dist/ui/MetadataPanel.d.cts.map +1 -1
- package/dist/ui/MetadataPanel.d.ts +1 -1
- package/dist/ui/MetadataPanel.d.ts.map +1 -1
- package/dist/ui/MetadataPanel.js +1 -0
- package/dist/ui/ReplaceAssetDialog.cjs +1 -0
- package/dist/ui/ReplaceAssetDialog.d.cts +1 -1
- package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.d.ts +1 -1
- package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.js +1 -0
- package/dist/ui/UploadButton.cjs +24 -9
- package/dist/ui/UploadButton.d.cts +1 -1
- package/dist/ui/UploadButton.d.cts.map +1 -1
- package/dist/ui/UploadButton.d.ts +1 -1
- package/dist/ui/UploadButton.d.ts.map +1 -1
- package/dist/ui/UploadButton.js +23 -8
- package/dist/ui/index.cjs +5 -5
- package/dist/utils/asset-reference.d.cts.map +1 -0
- package/dist/utils/asset-reference.d.ts.map +1 -0
- package/dist/utils/csp.d.cts.map +1 -0
- package/dist/utils/csp.d.ts.map +1 -0
- package/dist/utils/errors.d.cts.map +1 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/header-action.d.cts.map +1 -0
- package/dist/utils/header-action.d.ts.map +1 -0
- package/dist/{infer-kind.d.cts → utils/infer-kind.d.cts} +1 -1
- package/dist/utils/infer-kind.d.cts.map +1 -0
- package/dist/{infer-kind.d.ts → utils/infer-kind.d.ts} +1 -1
- package/dist/utils/infer-kind.d.ts.map +1 -0
- package/dist/utils/registry.d.cts +3 -0
- package/dist/utils/registry.d.cts.map +1 -0
- package/dist/utils/registry.d.ts +3 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/{resolver.cjs → utils/resolver.cjs} +8 -3
- package/dist/{resolver.d.cts → utils/resolver.d.cts} +1 -1
- package/dist/utils/resolver.d.cts.map +1 -0
- package/dist/{resolver.d.ts → utils/resolver.d.ts} +1 -1
- package/dist/utils/resolver.d.ts.map +1 -0
- package/dist/{resolver.js → utils/resolver.js} +6 -1
- package/dist/{retry.cjs → utils/retry.cjs} +10 -8
- package/dist/utils/retry.d.cts.map +1 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{retry.js → utils/retry.js} +10 -8
- package/dist/{studio-asset-source.cjs → utils/studio-asset-source.cjs} +28 -7
- package/dist/{studio-asset-source.d.cts → utils/studio-asset-source.d.cts} +2 -2
- package/dist/utils/studio-asset-source.d.cts.map +1 -0
- package/dist/{studio-asset-source.d.ts → utils/studio-asset-source.d.ts} +2 -2
- package/dist/utils/studio-asset-source.d.ts.map +1 -0
- package/dist/{studio-asset-source.js → utils/studio-asset-source.js} +26 -5
- package/dist/{validate-upload-result.cjs → utils/validate-upload-result.cjs} +49 -10
- package/dist/{validate-upload-result.d.cts → utils/validate-upload-result.d.cts} +1 -1
- package/dist/utils/validate-upload-result.d.cts.map +1 -0
- package/dist/{validate-upload-result.d.ts → utils/validate-upload-result.d.ts} +1 -1
- package/dist/utils/validate-upload-result.d.ts.map +1 -0
- package/dist/{validate-upload-result.js → utils/validate-upload-result.js} +49 -10
- package/dist/version.cjs +36 -0
- package/dist/version.d.cts +20 -0
- package/dist/version.d.cts.map +1 -0
- package/dist/version.d.ts +20 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/meta/config.json +8 -0
- package/package.json +23 -22
- package/dist/asset-reference.d.cts.map +0 -1
- package/dist/asset-reference.d.ts.map +0 -1
- package/dist/csp.d.cts.map +0 -1
- package/dist/csp.d.ts.map +0 -1
- package/dist/errors.d.cts.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/header-action.d.cts.map +0 -1
- package/dist/header-action.d.ts.map +0 -1
- package/dist/infer-kind.d.cts.map +0 -1
- package/dist/infer-kind.d.ts.map +0 -1
- package/dist/registry.d.cts +0 -3
- package/dist/registry.d.cts.map +0 -1
- package/dist/registry.d.ts +0 -3
- package/dist/registry.d.ts.map +0 -1
- package/dist/resolver.d.cts.map +0 -1
- package/dist/resolver.d.ts.map +0 -1
- package/dist/retry.d.cts.map +0 -1
- package/dist/retry.d.ts.map +0 -1
- package/dist/studio-asset-source.d.cts.map +0 -1
- package/dist/studio-asset-source.d.ts.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -0
- package/dist/validate-upload-result.d.cts.map +0 -1
- package/dist/validate-upload-result.d.ts.map +0 -1
- /package/dist/{types.cjs → types/types.cjs} +0 -0
- /package/dist/{asset-reference.cjs → utils/asset-reference.cjs} +0 -0
- /package/dist/{asset-reference.d.cts → utils/asset-reference.d.cts} +0 -0
- /package/dist/{asset-reference.d.ts → utils/asset-reference.d.ts} +0 -0
- /package/dist/{asset-reference.js → utils/asset-reference.js} +0 -0
- /package/dist/{csp.cjs → utils/csp.cjs} +0 -0
- /package/dist/{csp.d.cts → utils/csp.d.cts} +0 -0
- /package/dist/{csp.d.ts → utils/csp.d.ts} +0 -0
- /package/dist/{csp.js → utils/csp.js} +0 -0
- /package/dist/{errors.cjs → utils/errors.cjs} +0 -0
- /package/dist/{errors.d.cts → utils/errors.d.cts} +0 -0
- /package/dist/{errors.d.ts → utils/errors.d.ts} +0 -0
- /package/dist/{errors.js → utils/errors.js} +0 -0
- /package/dist/{header-action.cjs → utils/header-action.cjs} +0 -0
- /package/dist/{header-action.d.cts → utils/header-action.d.cts} +0 -0
- /package/dist/{header-action.d.ts → utils/header-action.d.ts} +0 -0
- /package/dist/{header-action.js → utils/header-action.js} +0 -0
- /package/dist/{infer-kind.cjs → utils/infer-kind.cjs} +0 -0
- /package/dist/{infer-kind.js → utils/infer-kind.js} +0 -0
- /package/dist/{registry.cjs → utils/registry.cjs} +0 -0
- /package/dist/{registry.js → utils/registry.js} +0 -0
- /package/dist/{retry.d.cts → utils/retry.d.cts} +0 -0
- /package/dist/{retry.d.ts → utils/retry.d.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { UploadResult } from "../types.js";
|
|
1
|
+
import type { UploadResult } from "../types/types.js";
|
|
2
2
|
export interface AssetBrowserProps {
|
|
3
3
|
readonly assets: readonly UploadResult[];
|
|
4
4
|
readonly onInsert: (asset: UploadResult) => void;
|
|
@@ -36,7 +36,16 @@ export interface AssetBrowserProps {
|
|
|
36
36
|
* scroll math entirely.
|
|
37
37
|
*/
|
|
38
38
|
readonly virtualizeThreshold?: number;
|
|
39
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Pixel height of a single row when virtualizing.
|
|
41
|
+
*
|
|
42
|
+
* **Fixed-height contract:** the windowing math (visible range, scroll
|
|
43
|
+
* offset, and keyboard-focus scroll) assumes every row is exactly
|
|
44
|
+
* `itemHeight` tall. Rows that wrap or vary in height (long names,
|
|
45
|
+
* thumbnails) will desync the scroll position and focus calculation.
|
|
46
|
+
* Keep rows uniform, or raise `virtualizeThreshold` so the list renders
|
|
47
|
+
* inline instead.
|
|
48
|
+
*/
|
|
40
49
|
readonly itemHeight?: number;
|
|
41
50
|
/** Pixel height of the scroll container when virtualizing. */
|
|
42
51
|
readonly maxHeight?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetBrowser.d.cts","sourceRoot":"","sources":["../../src/ui/AssetBrowser.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AssetBrowser.d.cts","sourceRoot":"","sources":["../../src/ui/AssetBrowser.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWjE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAQD,wBAAgB,YAAY,CAAC,EAC5B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAqB,EACrB,QAA4B,EAC5B,mBAAkD,EAClD,UAAgC,EAChC,SAA8B,GAC9B,EAAE,iBAAiB,2CAkZnB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { UploadResult } from "../types.js";
|
|
1
|
+
import type { UploadResult } from "../types/types.js";
|
|
2
2
|
export interface AssetBrowserProps {
|
|
3
3
|
readonly assets: readonly UploadResult[];
|
|
4
4
|
readonly onInsert: (asset: UploadResult) => void;
|
|
@@ -36,7 +36,16 @@ export interface AssetBrowserProps {
|
|
|
36
36
|
* scroll math entirely.
|
|
37
37
|
*/
|
|
38
38
|
readonly virtualizeThreshold?: number;
|
|
39
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Pixel height of a single row when virtualizing.
|
|
41
|
+
*
|
|
42
|
+
* **Fixed-height contract:** the windowing math (visible range, scroll
|
|
43
|
+
* offset, and keyboard-focus scroll) assumes every row is exactly
|
|
44
|
+
* `itemHeight` tall. Rows that wrap or vary in height (long names,
|
|
45
|
+
* thumbnails) will desync the scroll position and focus calculation.
|
|
46
|
+
* Keep rows uniform, or raise `virtualizeThreshold` so the list renders
|
|
47
|
+
* inline instead.
|
|
48
|
+
*/
|
|
40
49
|
readonly itemHeight?: number;
|
|
41
50
|
/** Pixel height of the scroll container when virtualizing. */
|
|
42
51
|
readonly maxHeight?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetBrowser.d.ts","sourceRoot":"","sources":["../../src/ui/AssetBrowser.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AssetBrowser.d.ts","sourceRoot":"","sources":["../../src/ui/AssetBrowser.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWjE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAQD,wBAAgB,YAAY,CAAC,EAC5B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAqB,EACrB,QAA4B,EAC5B,mBAAkD,EAClD,UAAgC,EAChC,SAA8B,GAC9B,EAAE,iBAAiB,2CAkZnB"}
|
package/dist/ui/AssetBrowser.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@anvilkit/ui/card";
|
|
2
3
|
import { Input } from "@anvilkit/ui/input";
|
|
3
|
-
import {
|
|
4
|
+
import { flushSync } from "react-dom";
|
|
5
|
+
import { inferAssetKind } from "../utils/infer-kind.js";
|
|
4
6
|
import * as __rspack_external_react from "react";
|
|
5
7
|
const KIND_FILTERS = [
|
|
6
8
|
"image",
|
|
@@ -22,22 +24,40 @@ function AssetBrowser({ assets, onInsert, onDelete, onReplace, onEdit, searchEna
|
|
|
22
24
|
const [pageLimit, setPageLimit] = __rspack_external_react.useState(pageSize);
|
|
23
25
|
const buttonRefs = __rspack_external_react.useRef([]);
|
|
24
26
|
const scrollContainerRef = __rspack_external_react.useRef(null);
|
|
27
|
+
const scrollFrameRef = __rspack_external_react.useRef(null);
|
|
28
|
+
const pendingScrollTopRef = __rspack_external_react.useRef(0);
|
|
29
|
+
__rspack_external_react.useEffect(()=>()=>{
|
|
30
|
+
if (null !== scrollFrameRef.current && "function" == typeof cancelAnimationFrame) cancelAnimationFrame(scrollFrameRef.current);
|
|
31
|
+
}, []);
|
|
32
|
+
const searchIndex = __rspack_external_react.useMemo(()=>{
|
|
33
|
+
if (!searchEnabled) return null;
|
|
34
|
+
return assets.map((asset)=>({
|
|
35
|
+
asset,
|
|
36
|
+
kind: inferAssetKind(asset),
|
|
37
|
+
haystack: [
|
|
38
|
+
asset.id,
|
|
39
|
+
asset.name ?? "",
|
|
40
|
+
asset.meta?.mimeType ?? "",
|
|
41
|
+
...asset.tags ?? []
|
|
42
|
+
].join("\u0000").toLowerCase()
|
|
43
|
+
}));
|
|
44
|
+
}, [
|
|
45
|
+
assets,
|
|
46
|
+
searchEnabled
|
|
47
|
+
]);
|
|
25
48
|
const filteredAssets = __rspack_external_react.useMemo(()=>{
|
|
26
|
-
if (!searchEnabled) return assets;
|
|
49
|
+
if (!searchEnabled || null === searchIndex) return assets;
|
|
27
50
|
const lower = query.trim().toLowerCase();
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if ("" === lower)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (asset.meta?.mimeType?.toLowerCase().includes(lower)) return true;
|
|
36
|
-
if (asset.tags?.some((tag)=>tag.toLowerCase().includes(lower))) return true;
|
|
37
|
-
return false;
|
|
38
|
-
});
|
|
51
|
+
const hasKindFilter = activeKinds.length > 0;
|
|
52
|
+
if ("" === lower && !hasKindFilter) return assets;
|
|
53
|
+
const result = [];
|
|
54
|
+
for (const entry of searchIndex)if (!hasKindFilter || activeKinds.includes(entry.kind)) {
|
|
55
|
+
if ("" === lower || entry.haystack.includes(lower)) result.push(entry.asset);
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
39
58
|
}, [
|
|
40
59
|
assets,
|
|
60
|
+
searchIndex,
|
|
41
61
|
activeKinds,
|
|
42
62
|
query,
|
|
43
63
|
searchEnabled
|
|
@@ -59,19 +79,27 @@ function AssetBrowser({ assets, onInsert, onDelete, onReplace, onEdit, searchEna
|
|
|
59
79
|
function moveFocus(nextIndex) {
|
|
60
80
|
if (0 === total) return;
|
|
61
81
|
const clampedIndex = Math.max(0, Math.min(nextIndex, total - 1));
|
|
62
|
-
setActiveIndex(clampedIndex);
|
|
63
82
|
if (isVirtualized && scrollContainerRef.current) {
|
|
64
83
|
const targetTop = clampedIndex * itemHeight;
|
|
65
84
|
const targetBottom = targetTop + itemHeight;
|
|
66
85
|
const viewTop = scrollContainerRef.current.scrollTop;
|
|
67
|
-
|
|
68
|
-
if (targetTop < viewTop)
|
|
69
|
-
else if (targetBottom >
|
|
70
|
-
|
|
71
|
-
|
|
86
|
+
let nextScrollTop = viewTop;
|
|
87
|
+
if (targetTop < viewTop) nextScrollTop = targetTop;
|
|
88
|
+
else if (targetBottom > viewTop + maxHeight) nextScrollTop = targetBottom - maxHeight;
|
|
89
|
+
if (null !== scrollFrameRef.current && "function" == typeof cancelAnimationFrame) {
|
|
90
|
+
cancelAnimationFrame(scrollFrameRef.current);
|
|
91
|
+
scrollFrameRef.current = null;
|
|
92
|
+
}
|
|
93
|
+
pendingScrollTopRef.current = nextScrollTop;
|
|
94
|
+
flushSync(()=>{
|
|
95
|
+
setActiveIndex(clampedIndex);
|
|
96
|
+
setScrollTop(nextScrollTop);
|
|
72
97
|
});
|
|
98
|
+
scrollContainerRef.current.scrollTop = nextScrollTop;
|
|
99
|
+
buttonRefs.current[clampedIndex]?.focus();
|
|
73
100
|
return;
|
|
74
101
|
}
|
|
102
|
+
setActiveIndex(clampedIndex);
|
|
75
103
|
buttonRefs.current[clampedIndex]?.focus();
|
|
76
104
|
}
|
|
77
105
|
function toggleKind(kind) {
|
|
@@ -202,7 +230,14 @@ function AssetBrowser({ assets, onInsert, onDelete, onReplace, onEdit, searchEna
|
|
|
202
230
|
return /*#__PURE__*/ __rspack_external_react.createElement(Card, null, /*#__PURE__*/ __rspack_external_react.createElement(CardHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(CardTitle, null, "Asset browser"), /*#__PURE__*/ __rspack_external_react.createElement(CardDescription, null, "Validated assets currently registered in memory.")), /*#__PURE__*/ __rspack_external_react.createElement(CardContent, null, filterRow, /*#__PURE__*/ __rspack_external_react.createElement("div", {
|
|
203
231
|
"data-asset-manager-virtual": true,
|
|
204
232
|
onScroll: (event)=>{
|
|
205
|
-
|
|
233
|
+
const next = event.currentTarget.scrollTop;
|
|
234
|
+
if ("function" != typeof requestAnimationFrame) return void setScrollTop(next);
|
|
235
|
+
pendingScrollTopRef.current = next;
|
|
236
|
+
if (null !== scrollFrameRef.current) return;
|
|
237
|
+
scrollFrameRef.current = requestAnimationFrame(()=>{
|
|
238
|
+
scrollFrameRef.current = null;
|
|
239
|
+
setScrollTop(pendingScrollTopRef.current);
|
|
240
|
+
});
|
|
206
241
|
},
|
|
207
242
|
ref: scrollContainerRef,
|
|
208
243
|
style: {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
"use client";
|
|
2
3
|
var __webpack_require__ = {};
|
|
3
4
|
(()=>{
|
|
4
5
|
__webpack_require__.d = (exports1, definition)=>{
|
|
@@ -29,7 +30,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
30
|
const dialog_namespaceObject = require("@anvilkit/ui/dialog");
|
|
30
31
|
const input_namespaceObject = require("@anvilkit/ui/input");
|
|
31
32
|
const external_react_namespaceObject = require("react");
|
|
32
|
-
const
|
|
33
|
+
const infer_kind_cjs_namespaceObject = require("../utils/infer-kind.cjs");
|
|
33
34
|
const DEFAULT_MAX_RESULTS = 20;
|
|
34
35
|
function AssetCommandPalette({ registry, open, onOpenChange, onSelect, maxResults = DEFAULT_MAX_RESULTS }) {
|
|
35
36
|
const [query, setQuery] = external_react_namespaceObject.useState("");
|
|
@@ -48,27 +49,35 @@ function AssetCommandPalette({ registry, open, onOpenChange, onSelect, maxResult
|
|
|
48
49
|
registry,
|
|
49
50
|
maxResults
|
|
50
51
|
]);
|
|
52
|
+
const queryRef = external_react_namespaceObject.useRef(query);
|
|
53
|
+
queryRef.current = query;
|
|
51
54
|
external_react_namespaceObject.useEffect(()=>{
|
|
52
55
|
if (!open) return;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
setQuery("");
|
|
57
|
+
queueMicrotask(()=>{
|
|
58
|
+
inputRef.current?.focus();
|
|
56
59
|
});
|
|
57
|
-
|
|
60
|
+
}, [
|
|
61
|
+
open
|
|
62
|
+
]);
|
|
63
|
+
external_react_namespaceObject.useEffect(()=>{
|
|
64
|
+
if (!open) return;
|
|
65
|
+
refresh(query);
|
|
58
66
|
}, [
|
|
59
67
|
open,
|
|
60
68
|
query,
|
|
61
|
-
registry,
|
|
62
69
|
refresh
|
|
63
70
|
]);
|
|
64
71
|
external_react_namespaceObject.useEffect(()=>{
|
|
65
72
|
if (!open) return;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
inputRef.current?.focus();
|
|
73
|
+
const unsubscribe = registry.subscribe(()=>{
|
|
74
|
+
refresh(queryRef.current);
|
|
69
75
|
});
|
|
76
|
+
return unsubscribe;
|
|
70
77
|
}, [
|
|
71
|
-
open
|
|
78
|
+
open,
|
|
79
|
+
registry,
|
|
80
|
+
refresh
|
|
72
81
|
]);
|
|
73
82
|
function handleKeyDown(event) {
|
|
74
83
|
if ("ArrowDown" === event.key) {
|
|
@@ -124,7 +133,7 @@ function AssetCommandPalette({ registry, open, onOpenChange, onSelect, maxResult
|
|
|
124
133
|
setActiveIndex(index);
|
|
125
134
|
},
|
|
126
135
|
type: "button"
|
|
127
|
-
}, /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, asset.name ?? asset.id), /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, asset.meta?.mimeType ?? (0,
|
|
136
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, asset.name ?? asset.id), /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, asset.meta?.mimeType ?? (0, infer_kind_cjs_namespaceObject.inferAssetKind)(asset))))))));
|
|
128
137
|
}
|
|
129
138
|
exports.AssetCommandPalette = __webpack_exports__.AssetCommandPalette;
|
|
130
139
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetCommandPalette.d.cts","sourceRoot":"","sources":["../../src/ui/AssetCommandPalette.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"AssetCommandPalette.d.cts","sourceRoot":"","sources":["../../src/ui/AssetCommandPalette.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,WAAW,wBAAwB;IACxC,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID,wBAAgB,mBAAmB,CAAC,EACnC,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,UAAgC,GAChC,EAAE,wBAAwB,2CAiI1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetCommandPalette.d.ts","sourceRoot":"","sources":["../../src/ui/AssetCommandPalette.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"AssetCommandPalette.d.ts","sourceRoot":"","sources":["../../src/ui/AssetCommandPalette.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,WAAW,wBAAwB;IACxC,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID,wBAAgB,mBAAmB,CAAC,EACnC,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,UAAgC,GAChC,EAAE,wBAAwB,2CAiI1B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
|
|
2
3
|
import { Input } from "@anvilkit/ui/input";
|
|
3
|
-
import { inferAssetKind } from "../infer-kind.js";
|
|
4
|
+
import { inferAssetKind } from "../utils/infer-kind.js";
|
|
4
5
|
import * as __rspack_external_react from "react";
|
|
5
6
|
const DEFAULT_MAX_RESULTS = 20;
|
|
6
7
|
function AssetCommandPalette({ registry, open, onOpenChange, onSelect, maxResults = DEFAULT_MAX_RESULTS }) {
|
|
@@ -20,27 +21,35 @@ function AssetCommandPalette({ registry, open, onOpenChange, onSelect, maxResult
|
|
|
20
21
|
registry,
|
|
21
22
|
maxResults
|
|
22
23
|
]);
|
|
24
|
+
const queryRef = __rspack_external_react.useRef(query);
|
|
25
|
+
queryRef.current = query;
|
|
23
26
|
__rspack_external_react.useEffect(()=>{
|
|
24
27
|
if (!open) return;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
setQuery("");
|
|
29
|
+
queueMicrotask(()=>{
|
|
30
|
+
inputRef.current?.focus();
|
|
28
31
|
});
|
|
29
|
-
|
|
32
|
+
}, [
|
|
33
|
+
open
|
|
34
|
+
]);
|
|
35
|
+
__rspack_external_react.useEffect(()=>{
|
|
36
|
+
if (!open) return;
|
|
37
|
+
refresh(query);
|
|
30
38
|
}, [
|
|
31
39
|
open,
|
|
32
40
|
query,
|
|
33
|
-
registry,
|
|
34
41
|
refresh
|
|
35
42
|
]);
|
|
36
43
|
__rspack_external_react.useEffect(()=>{
|
|
37
44
|
if (!open) return;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
inputRef.current?.focus();
|
|
45
|
+
const unsubscribe = registry.subscribe(()=>{
|
|
46
|
+
refresh(queryRef.current);
|
|
41
47
|
});
|
|
48
|
+
return unsubscribe;
|
|
42
49
|
}, [
|
|
43
|
-
open
|
|
50
|
+
open,
|
|
51
|
+
registry,
|
|
52
|
+
refresh
|
|
44
53
|
]);
|
|
45
54
|
function handleKeyDown(event) {
|
|
46
55
|
if ("ArrowDown" === event.key) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
"use client";
|
|
2
3
|
var __webpack_require__ = {};
|
|
3
4
|
(()=>{
|
|
4
5
|
__webpack_require__.d = (exports1, definition)=>{
|
|
@@ -29,7 +30,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
30
|
const card_namespaceObject = require("@anvilkit/ui/card");
|
|
30
31
|
const progress_namespaceObject = require("@anvilkit/ui/progress");
|
|
31
32
|
const external_react_namespaceObject = require("react");
|
|
32
|
-
const
|
|
33
|
+
const validate_upload_result_cjs_namespaceObject = require("../utils/validate-upload-result.cjs");
|
|
33
34
|
const external_AssetBrowser_cjs_namespaceObject = require("./AssetBrowser.cjs");
|
|
34
35
|
const external_AssetCommandPalette_cjs_namespaceObject = require("./AssetCommandPalette.cjs");
|
|
35
36
|
const external_DeleteAssetDialog_cjs_namespaceObject = require("./DeleteAssetDialog.cjs");
|
|
@@ -77,7 +78,7 @@ function AssetManagerUI({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlA
|
|
|
77
78
|
}
|
|
78
79
|
async function handleConfirmReplace(asset, file) {
|
|
79
80
|
const uploaded = await uploader(file);
|
|
80
|
-
const validated = (0,
|
|
81
|
+
const validated = (0, validate_upload_result_cjs_namespaceObject.validateUploadResult)({
|
|
81
82
|
...uploaded,
|
|
82
83
|
meta: {
|
|
83
84
|
size: file.size,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AssetManagerOptions, AssetRegistry, UploadResult } from "../types.js";
|
|
1
|
+
import type { AssetManagerOptions, AssetRegistry, UploadResult } from "../types/types.js";
|
|
2
2
|
export interface AssetManagerUIProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize" | "uploader" | "dataUrlAllowlistOptIn" | "allowMixedScriptHostnames"> {
|
|
3
3
|
readonly registry: AssetRegistry;
|
|
4
4
|
readonly onAssetInserted?: (asset: UploadResult) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetManagerUI.d.cts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AssetManagerUI.d.cts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAS3B,MAAM,WAAW,mBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC7B;IACD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC9B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACR,EAAE,mBAAmB,2CAiKrB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AssetManagerOptions, AssetRegistry, UploadResult } from "../types.js";
|
|
1
|
+
import type { AssetManagerOptions, AssetRegistry, UploadResult } from "../types/types.js";
|
|
2
2
|
export interface AssetManagerUIProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize" | "uploader" | "dataUrlAllowlistOptIn" | "allowMixedScriptHostnames"> {
|
|
3
3
|
readonly registry: AssetRegistry;
|
|
4
4
|
readonly onAssetInserted?: (asset: UploadResult) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetManagerUI.d.ts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AssetManagerUI.d.ts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAS3B,MAAM,WAAW,mBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC7B;IACD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC9B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACR,EAAE,mBAAmB,2CAiKrB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@anvilkit/ui/card";
|
|
2
3
|
import { Progress } from "@anvilkit/ui/progress";
|
|
3
|
-
import { validateUploadResult } from "../validate-upload-result.js";
|
|
4
|
+
import { validateUploadResult } from "../utils/validate-upload-result.js";
|
|
4
5
|
import { AssetBrowser } from "./AssetBrowser.js";
|
|
5
6
|
import { AssetCommandPalette } from "./AssetCommandPalette.js";
|
|
6
7
|
import { DeleteAssetDialog } from "./DeleteAssetDialog.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DeleteAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACd,EAAE,sBAAsB,2CA8DxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DeleteAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACd,EAAE,sBAAsB,2CA8DxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CACnB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC7D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,GACT,EAAE,kBAAkB,2CAuIpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CACnB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC7D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,GACT,EAAE,kBAAkB,2CAuIpB"}
|
package/dist/ui/MetadataPanel.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AssetManagerOptions, UploadResult } from "../types.js";
|
|
1
|
+
import type { AssetManagerOptions, UploadResult } from "../types/types.js";
|
|
2
2
|
export interface ReplaceAssetDialogProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize"> {
|
|
3
3
|
/** Asset to replace. `null` closes the dialog. */
|
|
4
4
|
readonly asset: UploadResult | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReplaceAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReplaceAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,WAAW,uBAChB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,CAAC;IACtE,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,EAClC,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GACT,EAAE,uBAAuB,2CAuHzB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AssetManagerOptions, UploadResult } from "../types.js";
|
|
1
|
+
import type { AssetManagerOptions, UploadResult } from "../types/types.js";
|
|
2
2
|
export interface ReplaceAssetDialogProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize"> {
|
|
3
3
|
/** Asset to replace. `null` closes the dialog. */
|
|
4
4
|
readonly asset: UploadResult | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReplaceAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReplaceAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,WAAW,uBAChB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,CAAC;IACtE,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,EAClC,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GACT,EAAE,uBAAuB,2CAuHzB"}
|
package/dist/ui/UploadButton.cjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
"use client";
|
|
2
3
|
var __webpack_require__ = {};
|
|
3
4
|
(()=>{
|
|
4
5
|
__webpack_require__.d = (exports1, definition)=>{
|
|
@@ -29,18 +30,24 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
30
|
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
30
31
|
const external_react_namespaceObject = require("react");
|
|
31
32
|
const external_plugin_cjs_namespaceObject = require("../plugin.cjs");
|
|
32
|
-
const
|
|
33
|
+
const validate_upload_result_cjs_namespaceObject = require("../utils/validate-upload-result.cjs");
|
|
33
34
|
function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAllowlistOptIn, maxFileSize, onError, onProgress, onUploaded, uploader }) {
|
|
34
35
|
const inputRef = external_react_namespaceObject.useRef(null);
|
|
35
36
|
const [errorMessage, setErrorMessage] = external_react_namespaceObject.useState(null);
|
|
36
37
|
const [batch, setBatch] = external_react_namespaceObject.useState(null);
|
|
37
38
|
const [isDragOver, setIsDragOver] = external_react_namespaceObject.useState(false);
|
|
38
39
|
const isUploading = null !== batch;
|
|
40
|
+
const uploadAbortRef = external_react_namespaceObject.useRef(null);
|
|
41
|
+
external_react_namespaceObject.useEffect(()=>()=>uploadAbortRef.current?.abort(), []);
|
|
39
42
|
const acceptAttr = external_react_namespaceObject.useMemo(()=>acceptedMimeTypes?.join(","), [
|
|
40
43
|
acceptedMimeTypes
|
|
41
44
|
]);
|
|
42
45
|
async function processFiles(files) {
|
|
43
46
|
if (0 === files.length) return;
|
|
47
|
+
uploadAbortRef.current?.abort();
|
|
48
|
+
const controller = new AbortController();
|
|
49
|
+
uploadAbortRef.current = controller;
|
|
50
|
+
const { signal } = controller;
|
|
44
51
|
const total = files.length;
|
|
45
52
|
setErrorMessage(null);
|
|
46
53
|
const initial = {
|
|
@@ -51,14 +58,18 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
|
|
|
51
58
|
onProgress?.(initial);
|
|
52
59
|
let lastError = null;
|
|
53
60
|
for(let index = 0; index < files.length; index += 1){
|
|
61
|
+
if (signal.aborted) return;
|
|
54
62
|
const file = files[index];
|
|
55
63
|
if (file) try {
|
|
56
64
|
(0, external_plugin_cjs_namespaceObject.validateSelectedFile)(file, {
|
|
57
65
|
acceptedMimeTypes,
|
|
58
66
|
maxFileSize
|
|
59
67
|
});
|
|
60
|
-
const uploaded = await uploader(file
|
|
61
|
-
|
|
68
|
+
const uploaded = await uploader(file, {
|
|
69
|
+
signal
|
|
70
|
+
});
|
|
71
|
+
if (signal.aborted) return;
|
|
72
|
+
const validated = (0, validate_upload_result_cjs_namespaceObject.validateUploadResult)({
|
|
62
73
|
...uploaded,
|
|
63
74
|
meta: {
|
|
64
75
|
size: file.size,
|
|
@@ -73,17 +84,21 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
|
|
|
73
84
|
});
|
|
74
85
|
onUploaded?.(validated);
|
|
75
86
|
} catch (error) {
|
|
87
|
+
if (signal.aborted) return;
|
|
76
88
|
lastError = error instanceof Error ? error.message : String(error);
|
|
77
89
|
onError?.(error);
|
|
78
90
|
} finally{
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
91
|
+
if (!signal.aborted) {
|
|
92
|
+
const next = {
|
|
93
|
+
completed: index + 1,
|
|
94
|
+
total
|
|
95
|
+
};
|
|
96
|
+
setBatch(next);
|
|
97
|
+
onProgress?.(next);
|
|
98
|
+
}
|
|
85
99
|
}
|
|
86
100
|
}
|
|
101
|
+
if (signal.aborted) return;
|
|
87
102
|
if (null !== lastError) setErrorMessage(lastError);
|
|
88
103
|
setBatch(null);
|
|
89
104
|
onProgress?.(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadButton.d.cts","sourceRoot":"","sources":["../../src/ui/UploadButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UploadButton.d.cts","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"}
|