@anvilkit/plugin-asset-manager 0.1.2 → 0.1.3

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 (96) hide show
  1. package/README.md +366 -108
  2. package/dist/adapters/data-url.cjs +6 -2
  3. package/dist/adapters/data-url.d.cts.map +1 -1
  4. package/dist/adapters/data-url.d.ts.map +1 -1
  5. package/dist/adapters/data-url.js +6 -2
  6. package/dist/adapters/extract-image-dimensions.cjs +9 -0
  7. package/dist/adapters/extract-image-dimensions.d.cts +6 -0
  8. package/dist/adapters/extract-image-dimensions.d.cts.map +1 -1
  9. package/dist/adapters/extract-image-dimensions.d.ts +6 -0
  10. package/dist/adapters/extract-image-dimensions.d.ts.map +1 -1
  11. package/dist/adapters/extract-image-dimensions.js +9 -0
  12. package/dist/adapters/in-memory.cjs +6 -4
  13. package/dist/adapters/in-memory.d.cts +6 -0
  14. package/dist/adapters/in-memory.d.cts.map +1 -1
  15. package/dist/adapters/in-memory.d.ts +6 -0
  16. package/dist/adapters/in-memory.d.ts.map +1 -1
  17. package/dist/adapters/in-memory.js +6 -4
  18. package/dist/adapters/s3-presigned.cjs +78 -28
  19. package/dist/adapters/s3-presigned.d.cts +1 -0
  20. package/dist/adapters/s3-presigned.d.cts.map +1 -1
  21. package/dist/adapters/s3-presigned.d.ts +1 -0
  22. package/dist/adapters/s3-presigned.d.ts.map +1 -1
  23. package/dist/adapters/s3-presigned.js +78 -28
  24. package/dist/csp.d.cts.map +1 -1
  25. package/dist/csp.d.ts.map +1 -1
  26. package/dist/errors.d.cts.map +1 -1
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/index.d.cts +3 -3
  29. package/dist/index.d.cts.map +1 -1
  30. package/dist/index.d.ts +3 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/plugin.cjs +32 -5
  33. package/dist/plugin.d.cts +4 -3
  34. package/dist/plugin.d.cts.map +1 -1
  35. package/dist/plugin.d.ts +4 -3
  36. package/dist/plugin.d.ts.map +1 -1
  37. package/dist/plugin.js +22 -5
  38. package/dist/registry.d.cts.map +1 -1
  39. package/dist/registry.d.ts.map +1 -1
  40. package/dist/resolver.cjs +6 -1
  41. package/dist/resolver.d.cts.map +1 -1
  42. package/dist/resolver.d.ts.map +1 -1
  43. package/dist/resolver.js +6 -1
  44. package/dist/retry.cjs +10 -8
  45. package/dist/retry.d.cts.map +1 -1
  46. package/dist/retry.d.ts.map +1 -1
  47. package/dist/retry.js +10 -8
  48. package/dist/studio-asset-source.cjs +26 -5
  49. package/dist/studio-asset-source.d.cts +2 -2
  50. package/dist/studio-asset-source.d.cts.map +1 -1
  51. package/dist/studio-asset-source.d.ts +2 -2
  52. package/dist/studio-asset-source.d.ts.map +1 -1
  53. package/dist/studio-asset-source.js +26 -5
  54. package/dist/testing/index.d.cts.map +1 -1
  55. package/dist/testing/index.d.ts.map +1 -1
  56. package/dist/types.d.cts +9 -1
  57. package/dist/types.d.cts.map +1 -1
  58. package/dist/types.d.ts +9 -1
  59. package/dist/types.d.ts.map +1 -1
  60. package/dist/ui/AssetBrowser.cjs +54 -19
  61. package/dist/ui/AssetBrowser.d.cts +10 -1
  62. package/dist/ui/AssetBrowser.d.cts.map +1 -1
  63. package/dist/ui/AssetBrowser.d.ts +10 -1
  64. package/dist/ui/AssetBrowser.d.ts.map +1 -1
  65. package/dist/ui/AssetBrowser.js +54 -19
  66. package/dist/ui/AssetCommandPalette.cjs +18 -9
  67. package/dist/ui/AssetCommandPalette.d.cts.map +1 -1
  68. package/dist/ui/AssetCommandPalette.d.ts.map +1 -1
  69. package/dist/ui/AssetCommandPalette.js +18 -9
  70. package/dist/ui/AssetManagerUI.cjs +1 -0
  71. package/dist/ui/AssetManagerUI.d.cts.map +1 -1
  72. package/dist/ui/AssetManagerUI.d.ts.map +1 -1
  73. package/dist/ui/AssetManagerUI.js +1 -0
  74. package/dist/ui/DeleteAssetDialog.cjs +1 -0
  75. package/dist/ui/DeleteAssetDialog.d.cts.map +1 -1
  76. package/dist/ui/DeleteAssetDialog.d.ts.map +1 -1
  77. package/dist/ui/DeleteAssetDialog.js +1 -0
  78. package/dist/ui/MetadataPanel.cjs +1 -0
  79. package/dist/ui/MetadataPanel.d.cts.map +1 -1
  80. package/dist/ui/MetadataPanel.d.ts.map +1 -1
  81. package/dist/ui/MetadataPanel.js +1 -0
  82. package/dist/ui/ReplaceAssetDialog.cjs +1 -0
  83. package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
  84. package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
  85. package/dist/ui/ReplaceAssetDialog.js +1 -0
  86. package/dist/ui/UploadButton.cjs +22 -7
  87. package/dist/ui/UploadButton.d.cts.map +1 -1
  88. package/dist/ui/UploadButton.d.ts.map +1 -1
  89. package/dist/ui/UploadButton.js +22 -7
  90. package/dist/ui/index.d.cts.map +1 -1
  91. package/dist/ui/index.d.ts.map +1 -1
  92. package/dist/validate-upload-result.cjs +49 -10
  93. package/dist/validate-upload-result.d.cts.map +1 -1
  94. package/dist/validate-upload-result.d.ts.map +1 -1
  95. package/dist/validate-upload-result.js +49 -10
  96. package/package.json +5 -5
@@ -36,7 +36,16 @@ export interface AssetBrowserProps {
36
36
  * scroll math entirely.
37
37
  */
38
38
  readonly virtualizeThreshold?: number;
39
- /** Pixel height of a single row when virtualizing. */
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":"AAWA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3D,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,sDAAsD;IACtD,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,2CAmVnB"}
1
+ {"version":3,"file":"AssetBrowser.d.cts","sourceRoot":"","sources":["../../src/ui/AssetBrowser.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3D,MAAM,WAAW,iBAAiB;IAChC,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;CAC7B;AAQD,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAqB,EACrB,QAA4B,EAC5B,mBAAkD,EAClD,UAAgC,EAChC,SAA8B,GAC/B,EAAE,iBAAiB,2CAkZnB"}
@@ -36,7 +36,16 @@ export interface AssetBrowserProps {
36
36
  * scroll math entirely.
37
37
  */
38
38
  readonly virtualizeThreshold?: number;
39
- /** Pixel height of a single row when virtualizing. */
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":"AAWA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3D,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,sDAAsD;IACtD,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,2CAmVnB"}
1
+ {"version":3,"file":"AssetBrowser.d.ts","sourceRoot":"","sources":["../../src/ui/AssetBrowser.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3D,MAAM,WAAW,iBAAiB;IAChC,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;CAC7B;AAQD,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAqB,EACrB,QAA4B,EAC5B,mBAAkD,EAClD,UAAgC,EAChC,SAA8B,GAC/B,EAAE,iBAAiB,2CAkZnB"}
@@ -1,5 +1,7 @@
1
+ "use client";
1
2
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@anvilkit/ui/card";
2
3
  import { Input } from "@anvilkit/ui/input";
4
+ import { flushSync } from "react-dom";
3
5
  import { inferAssetKind } from "../infer-kind.js";
4
6
  import * as __rspack_external_react from "react";
5
7
  const KIND_FILTERS = [
@@ -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
- return assets.filter((asset)=>{
29
- if (activeKinds.length > 0) {
30
- if (!activeKinds.includes(inferAssetKind(asset))) return false;
31
- }
32
- if ("" === lower) return true;
33
- if (asset.id.toLowerCase().includes(lower)) return true;
34
- if (asset.name?.toLowerCase().includes(lower)) return true;
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
- const viewBottom = viewTop + maxHeight;
68
- if (targetTop < viewTop) scrollContainerRef.current.scrollTop = targetTop;
69
- else if (targetBottom > viewBottom) scrollContainerRef.current.scrollTop = targetBottom - maxHeight;
70
- queueMicrotask(()=>{
71
- buttonRefs.current[clampedIndex]?.focus();
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
- setScrollTop(event.currentTarget.scrollTop);
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)=>{
@@ -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
- refresh(query);
54
- const unsubscribe = registry.subscribe(()=>{
55
- refresh(query);
56
+ setQuery("");
57
+ queueMicrotask(()=>{
58
+ inputRef.current?.focus();
56
59
  });
57
- return unsubscribe;
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
- setQuery("");
67
- queueMicrotask(()=>{
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) {
@@ -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,aAAa,CAAC;AAE/D,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,2CAmH1B"}
1
+ {"version":3,"file":"AssetCommandPalette.d.cts","sourceRoot":"","sources":["../../src/ui/AssetCommandPalette.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,WAAW,wBAAwB;IACvC,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;CAC9B;AAID,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,UAAgC,GACjC,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,aAAa,CAAC;AAE/D,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,2CAmH1B"}
1
+ {"version":3,"file":"AssetCommandPalette.d.ts","sourceRoot":"","sources":["../../src/ui/AssetCommandPalette.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,WAAW,wBAAwB;IACvC,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;CAC9B;AAID,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,UAAgC,GACjC,EAAE,wBAAwB,2CAiI1B"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
2
3
  import { Input } from "@anvilkit/ui/input";
3
4
  import { inferAssetKind } from "../infer-kind.js";
@@ -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
- refresh(query);
26
- const unsubscribe = registry.subscribe(()=>{
27
- refresh(query);
28
+ setQuery("");
29
+ queueMicrotask(()=>{
30
+ inputRef.current?.focus();
28
31
  });
29
- return unsubscribe;
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
- setQuery("");
39
- queueMicrotask(()=>{
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)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"AssetManagerUI.d.cts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,MAAM,aAAa,CAAC;AASrB,MAAM,WAAW,mBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC7B;IACD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC9B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACR,EAAE,mBAAmB,2CAiKrB"}
1
+ {"version":3,"file":"AssetManagerUI.d.cts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AASrB,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC9B;IACC,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;CAClC;AAED,wBAAgB,cAAc,CAAC,EAC7B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACT,EAAE,mBAAmB,2CAiKrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"AssetManagerUI.d.ts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,MAAM,aAAa,CAAC;AASrB,MAAM,WAAW,mBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC7B;IACD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC9B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACR,EAAE,mBAAmB,2CAiKrB"}
1
+ {"version":3,"file":"AssetManagerUI.d.ts","sourceRoot":"","sources":["../../src/ui/AssetManagerUI.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AASrB,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC9B;IACC,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;CAClC;AAED,wBAAgB,cAAc,CAAC,EAC7B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAoB,EACpB,QAAQ,GACT,EAAE,mBAAmB,2CAiKrB"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@anvilkit/ui/card";
2
3
  import { Progress } from "@anvilkit/ui/progress";
3
4
  import { validateUploadResult } from "../validate-upload-result.js";
@@ -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)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACd,EAAE,sBAAsB,2CA8DxB"}
1
+ {"version":3,"file":"DeleteAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC;;;;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;CAClC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACf,EAAE,sBAAsB,2CA8DxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACd,EAAE,sBAAsB,2CA8DxB"}
1
+ {"version":3,"file":"DeleteAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/DeleteAssetDialog.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC;;;;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;CAClC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,GACf,EAAE,sBAAsB,2CA8DxB"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { Button } from "@anvilkit/ui/button";
2
3
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
3
4
  import * as __rspack_external_react from "react";
@@ -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)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CACnB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC7D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,GACT,EAAE,kBAAkB,2CAuIpB"}
1
+ {"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CAClB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC9D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,kBAAkB,2CAuIpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CACnB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC7D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,GACT,EAAE,kBAAkB,2CAuIpB"}
1
+ {"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CAClB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC9D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,kBAAkB,2CAuIpB"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { Button } from "@anvilkit/ui/button";
2
3
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
3
4
  import { Input } from "@anvilkit/ui/input";
@@ -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)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"ReplaceAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAErE,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
+ {"version":3,"file":"ReplaceAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,mBAAmB,EACnB,mBAAmB,GAAG,aAAa,CACpC;IACC,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;CAC/B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE,uBAAuB,2CAuHzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReplaceAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAErE,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
+ {"version":3,"file":"ReplaceAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,mBAAmB,EACnB,mBAAmB,GAAG,aAAa,CACpC;IACC,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;CAC/B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE,uBAAuB,2CAuHzB"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { Button } from "@anvilkit/ui/button";
2
3
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
3
4
  import { validateSelectedFile } from "../plugin.js";
@@ -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)=>{
@@ -36,11 +37,17 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
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,13 +58,17 @@ 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);
68
+ const uploaded = await uploader(file, {
69
+ signal
70
+ });
71
+ if (signal.aborted) return;
61
72
  const validated = (0, external_validate_upload_result_cjs_namespaceObject.validateUploadResult)({
62
73
  ...uploaded,
63
74
  meta: {
@@ -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
- const next = {
80
- completed: index + 1,
81
- total
82
- };
83
- setBatch(next);
84
- onProgress?.(next);
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":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,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,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,2CAwJnB"}
1
+ {"version":3,"file":"UploadButton.d.cts","sourceRoot":"","sources":["../../src/ui/UploadButton.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGrE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC9B;IACC,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;CACzE;AAED,wBAAgB,YAAY,CAAC,EAC3B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,QAAQ,GACT,EAAE,iBAAiB,2CA6KnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"UploadButton.d.ts","sourceRoot":"","sources":["../../src/ui/UploadButton.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,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,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,2CAwJnB"}
1
+ {"version":3,"file":"UploadButton.d.ts","sourceRoot":"","sources":["../../src/ui/UploadButton.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGrE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC9B;IACC,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;CACzE;AAED,wBAAgB,YAAY,CAAC,EAC3B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,QAAQ,GACT,EAAE,iBAAiB,2CA6KnB"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { Button } from "@anvilkit/ui/button";
2
3
  import { validateSelectedFile } from "../plugin.js";
3
4
  import { validateUploadResult } from "../validate-upload-result.js";
@@ -8,11 +9,17 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
8
9
  const [batch, setBatch] = __rspack_external_react.useState(null);
9
10
  const [isDragOver, setIsDragOver] = __rspack_external_react.useState(false);
10
11
  const isUploading = null !== batch;
12
+ const uploadAbortRef = __rspack_external_react.useRef(null);
13
+ __rspack_external_react.useEffect(()=>()=>uploadAbortRef.current?.abort(), []);
11
14
  const acceptAttr = __rspack_external_react.useMemo(()=>acceptedMimeTypes?.join(","), [
12
15
  acceptedMimeTypes
13
16
  ]);
14
17
  async function processFiles(files) {
15
18
  if (0 === files.length) return;
19
+ uploadAbortRef.current?.abort();
20
+ const controller = new AbortController();
21
+ uploadAbortRef.current = controller;
22
+ const { signal } = controller;
16
23
  const total = files.length;
17
24
  setErrorMessage(null);
18
25
  const initial = {
@@ -23,13 +30,17 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
23
30
  onProgress?.(initial);
24
31
  let lastError = null;
25
32
  for(let index = 0; index < files.length; index += 1){
33
+ if (signal.aborted) return;
26
34
  const file = files[index];
27
35
  if (file) try {
28
36
  validateSelectedFile(file, {
29
37
  acceptedMimeTypes,
30
38
  maxFileSize
31
39
  });
32
- const uploaded = await uploader(file);
40
+ const uploaded = await uploader(file, {
41
+ signal
42
+ });
43
+ if (signal.aborted) return;
33
44
  const validated = validateUploadResult({
34
45
  ...uploaded,
35
46
  meta: {
@@ -45,17 +56,21 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
45
56
  });
46
57
  onUploaded?.(validated);
47
58
  } catch (error) {
59
+ if (signal.aborted) return;
48
60
  lastError = error instanceof Error ? error.message : String(error);
49
61
  onError?.(error);
50
62
  } finally{
51
- const next = {
52
- completed: index + 1,
53
- total
54
- };
55
- setBatch(next);
56
- onProgress?.(next);
63
+ if (!signal.aborted) {
64
+ const next = {
65
+ completed: index + 1,
66
+ total
67
+ };
68
+ setBatch(next);
69
+ onProgress?.(next);
70
+ }
57
71
  }
58
72
  }
73
+ if (signal.aborted) return;
59
74
  if (null !== lastError) setErrorMessage(lastError);
60
75
  setBatch(null);
61
76
  onProgress?.(null);
@@ -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;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,EACV,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -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;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,EACV,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -96,18 +96,57 @@ function assertNoMixedScriptHostname(url, options) {
96
96
  ].filter((s)=>scripts.has(s));
97
97
  if (hasLatin && confusable.length > 0) throw new external_errors_cjs_namespaceObject.AssetValidationError("MIXED_SCRIPT_HOSTNAME", `Upload adapter returned a URL whose hostname mixes Latin with a visually confusable script (${confusable.join(", ")}). Set allowMixedScriptHostnames: true to permit this.`);
98
98
  }
99
+ const SKIP_SCRIPT_RE = /[\p{Script=Common}\p{Script=Inherited}]/u;
100
+ const SCRIPT_MATCHERS = [
101
+ [
102
+ "Latin",
103
+ /\p{Script=Latin}/u
104
+ ],
105
+ [
106
+ "Cyrillic",
107
+ /\p{Script=Cyrillic}/u
108
+ ],
109
+ [
110
+ "Greek",
111
+ /\p{Script=Greek}/u
112
+ ],
113
+ [
114
+ "Han",
115
+ /\p{Script=Han}/u
116
+ ],
117
+ [
118
+ "Hiragana",
119
+ /\p{Script=Hiragana}/u
120
+ ],
121
+ [
122
+ "Katakana",
123
+ /\p{Script=Katakana}/u
124
+ ],
125
+ [
126
+ "Hangul",
127
+ /\p{Script=Hangul}/u
128
+ ],
129
+ [
130
+ "Arabic",
131
+ /\p{Script=Arabic}/u
132
+ ],
133
+ [
134
+ "Hebrew",
135
+ /\p{Script=Hebrew}/u
136
+ ]
137
+ ];
99
138
  function detectHostnameScripts(host) {
100
139
  const scripts = new Set();
101
- for (const ch of host)if (!/[\p{Script=Common}\p{Script=Inherited}]/u.test(ch)) if (/\p{Script=Latin}/u.test(ch)) scripts.add("Latin");
102
- else if (/\p{Script=Cyrillic}/u.test(ch)) scripts.add("Cyrillic");
103
- else if (/\p{Script=Greek}/u.test(ch)) scripts.add("Greek");
104
- else if (/\p{Script=Han}/u.test(ch)) scripts.add("Han");
105
- else if (/\p{Script=Hiragana}/u.test(ch)) scripts.add("Hiragana");
106
- else if (/\p{Script=Katakana}/u.test(ch)) scripts.add("Katakana");
107
- else if (/\p{Script=Hangul}/u.test(ch)) scripts.add("Hangul");
108
- else if (/\p{Script=Arabic}/u.test(ch)) scripts.add("Arabic");
109
- else if (/\p{Script=Hebrew}/u.test(ch)) scripts.add("Hebrew");
110
- else scripts.add("Other");
140
+ for (const ch of host){
141
+ if (SKIP_SCRIPT_RE.test(ch)) continue;
142
+ let matched = false;
143
+ for (const [name, re] of SCRIPT_MATCHERS)if (re.test(ch)) {
144
+ scripts.add(name);
145
+ matched = true;
146
+ break;
147
+ }
148
+ if (!matched) scripts.add("Other");
149
+ }
111
150
  return scripts;
112
151
  }
113
152
  function normalizeCandidate(input) {