@anvilkit/plugin-asset-manager 0.1.7 → 0.1.9

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 (141) hide show
  1. package/README.md +4 -4
  2. package/dist/adapters/data-url.d.cts +13 -0
  3. package/dist/adapters/data-url.d.cts.map +1 -1
  4. package/dist/adapters/data-url.d.ts +13 -0
  5. package/dist/adapters/data-url.d.ts.map +1 -1
  6. package/dist/adapters/in-memory.d.cts +8 -1
  7. package/dist/adapters/in-memory.d.cts.map +1 -1
  8. package/dist/adapters/in-memory.d.ts +8 -1
  9. package/dist/adapters/in-memory.d.ts.map +1 -1
  10. package/dist/i18n/entry.cjs +75 -0
  11. package/dist/i18n/entry.d.cts +15 -0
  12. package/dist/i18n/entry.d.cts.map +1 -0
  13. package/dist/i18n/entry.d.ts +15 -0
  14. package/dist/i18n/entry.d.ts.map +1 -0
  15. package/dist/i18n/entry.js +29 -0
  16. package/dist/i18n/provider.cjs +49 -0
  17. package/dist/i18n/provider.d.cts +20 -0
  18. package/dist/i18n/provider.d.cts.map +1 -0
  19. package/dist/i18n/provider.d.ts +20 -0
  20. package/dist/i18n/provider.d.ts.map +1 -0
  21. package/dist/i18n/provider.js +11 -0
  22. package/dist/plugin.cjs +3 -1
  23. package/dist/plugin.d.cts.map +1 -1
  24. package/dist/plugin.d.ts.map +1 -1
  25. package/dist/plugin.js +3 -1
  26. package/dist/sources/composite-source.cjs +4 -3
  27. package/dist/sources/composite-source.d.cts.map +1 -1
  28. package/dist/sources/composite-source.d.ts.map +1 -1
  29. package/dist/sources/composite-source.js +4 -3
  30. package/dist/sources/federated-search.cjs +16 -6
  31. package/dist/sources/federated-search.d.cts.map +1 -1
  32. package/dist/sources/federated-search.d.ts.map +1 -1
  33. package/dist/sources/federated-search.js +16 -6
  34. package/dist/sources/unsplash/index.cjs +6 -4
  35. package/dist/sources/unsplash/index.d.cts.map +1 -1
  36. package/dist/sources/unsplash/index.d.ts.map +1 -1
  37. package/dist/sources/unsplash/index.js +6 -4
  38. package/dist/types/types.d.cts +7 -1
  39. package/dist/types/types.d.cts.map +1 -1
  40. package/dist/types/types.d.ts +7 -1
  41. package/dist/types/types.d.ts.map +1 -1
  42. package/dist/ui/AssetBrowser.cjs +175 -134
  43. package/dist/ui/AssetBrowser.d.cts.map +1 -1
  44. package/dist/ui/AssetBrowser.d.ts.map +1 -1
  45. package/dist/ui/AssetBrowser.js +175 -134
  46. package/dist/ui/AssetCommandPalette.cjs +20 -18
  47. package/dist/ui/AssetCommandPalette.d.cts.map +1 -1
  48. package/dist/ui/AssetCommandPalette.d.ts.map +1 -1
  49. package/dist/ui/AssetCommandPalette.js +20 -18
  50. package/dist/ui/AssetManagerUI.cjs +23 -15
  51. package/dist/ui/AssetManagerUI.d.cts.map +1 -1
  52. package/dist/ui/AssetManagerUI.d.ts.map +1 -1
  53. package/dist/ui/AssetManagerUI.js +23 -15
  54. package/dist/ui/DeleteAssetDialog.cjs +5 -3
  55. package/dist/ui/DeleteAssetDialog.d.cts.map +1 -1
  56. package/dist/ui/DeleteAssetDialog.d.ts.map +1 -1
  57. package/dist/ui/DeleteAssetDialog.js +5 -3
  58. package/dist/ui/DeleteFolderDialog.cjs +6 -4
  59. package/dist/ui/DeleteFolderDialog.d.cts.map +1 -1
  60. package/dist/ui/DeleteFolderDialog.d.ts.map +1 -1
  61. package/dist/ui/DeleteFolderDialog.js +6 -4
  62. package/dist/ui/EmptyFolderState.cjs +6 -3
  63. package/dist/ui/EmptyFolderState.d.cts +1 -1
  64. package/dist/ui/EmptyFolderState.d.cts.map +1 -1
  65. package/dist/ui/EmptyFolderState.d.ts +1 -1
  66. package/dist/ui/EmptyFolderState.d.ts.map +1 -1
  67. package/dist/ui/EmptyFolderState.js +6 -3
  68. package/dist/ui/FolderBreadcrumb.cjs +7 -4
  69. package/dist/ui/FolderBreadcrumb.d.cts.map +1 -1
  70. package/dist/ui/FolderBreadcrumb.d.ts.map +1 -1
  71. package/dist/ui/FolderBreadcrumb.js +7 -4
  72. package/dist/ui/FolderNameDialog.cjs +19 -12
  73. package/dist/ui/FolderNameDialog.d.cts.map +1 -1
  74. package/dist/ui/FolderNameDialog.d.ts.map +1 -1
  75. package/dist/ui/FolderNameDialog.js +19 -12
  76. package/dist/ui/FolderTree.cjs +4 -2
  77. package/dist/ui/FolderTree.d.cts.map +1 -1
  78. package/dist/ui/FolderTree.d.ts.map +1 -1
  79. package/dist/ui/FolderTree.js +4 -2
  80. package/dist/ui/MetadataPanel.cjs +16 -13
  81. package/dist/ui/MetadataPanel.d.cts.map +1 -1
  82. package/dist/ui/MetadataPanel.d.ts.map +1 -1
  83. package/dist/ui/MetadataPanel.js +16 -13
  84. package/dist/ui/MoveTargetPicker.cjs +7 -4
  85. package/dist/ui/MoveTargetPicker.d.cts.map +1 -1
  86. package/dist/ui/MoveTargetPicker.d.ts.map +1 -1
  87. package/dist/ui/MoveTargetPicker.js +7 -4
  88. package/dist/ui/ReplaceAssetDialog.cjs +19 -17
  89. package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
  90. package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
  91. package/dist/ui/ReplaceAssetDialog.js +19 -17
  92. package/dist/ui/UnsplashPanel.cjs +15 -12
  93. package/dist/ui/UnsplashPanel.d.cts.map +1 -1
  94. package/dist/ui/UnsplashPanel.d.ts.map +1 -1
  95. package/dist/ui/UnsplashPanel.js +15 -12
  96. package/dist/ui/UploadButton.cjs +11 -8
  97. package/dist/ui/UploadButton.d.cts.map +1 -1
  98. package/dist/ui/UploadButton.d.ts.map +1 -1
  99. package/dist/ui/UploadButton.js +11 -8
  100. package/dist/ui/index.cjs +4 -0
  101. package/dist/ui/index.d.cts +1 -0
  102. package/dist/ui/index.d.cts.map +1 -1
  103. package/dist/ui/index.d.ts +1 -0
  104. package/dist/ui/index.d.ts.map +1 -1
  105. package/dist/ui/index.js +1 -0
  106. package/dist/utils/data-source.cjs +18 -5
  107. package/dist/utils/data-source.d.cts.map +1 -1
  108. package/dist/utils/data-source.d.ts.map +1 -1
  109. package/dist/utils/data-source.js +19 -6
  110. package/dist/utils/folders.cjs +107 -33
  111. package/dist/utils/folders.d.cts +7 -2
  112. package/dist/utils/folders.d.cts.map +1 -1
  113. package/dist/utils/folders.d.ts +7 -2
  114. package/dist/utils/folders.d.ts.map +1 -1
  115. package/dist/utils/folders.js +107 -33
  116. package/dist/utils/header-action.cjs +1 -1
  117. package/dist/utils/header-action.d.cts.map +1 -1
  118. package/dist/utils/header-action.d.ts.map +1 -1
  119. package/dist/utils/header-action.js +1 -1
  120. package/dist/utils/registry.cjs +23 -12
  121. package/dist/utils/registry.d.cts +16 -8
  122. package/dist/utils/registry.d.cts.map +1 -1
  123. package/dist/utils/registry.d.ts +16 -8
  124. package/dist/utils/registry.d.ts.map +1 -1
  125. package/dist/utils/registry.js +19 -8
  126. package/dist/utils/resolver.cjs +5 -4
  127. package/dist/utils/resolver.d.cts.map +1 -1
  128. package/dist/utils/resolver.d.ts.map +1 -1
  129. package/dist/utils/resolver.js +5 -4
  130. package/dist/utils/studio-asset-source.cjs +8 -2
  131. package/dist/utils/studio-asset-source.js +8 -2
  132. package/dist/version.cjs +1 -1
  133. package/dist/version.d.cts +1 -1
  134. package/dist/version.d.ts +1 -1
  135. package/dist/version.js +1 -1
  136. package/i18n/messages/en.json +99 -0
  137. package/i18n/messages/ja.json +99 -0
  138. package/i18n/messages/ko.json +99 -0
  139. package/i18n/messages/zh.json +99 -0
  140. package/meta/config.json +1 -1
  141. package/package.json +11 -10
@@ -1,21 +1,26 @@
1
1
  "use client";
2
+ import { useMsg } from "@anvilkit/core/i18n";
2
3
  import { Button } from "@anvilkit/ui/button";
3
4
  import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
4
5
  import { Input } from "@anvilkit/ui/input";
5
6
  import * as __rspack_external_react from "react";
6
- function FolderNameDialog({ open, onOpenChange, onSubmit, title = "New folder", submitLabel = "Create", initialName = "" }) {
7
+ function FolderNameDialog({ open, onOpenChange, onSubmit, title, submitLabel, initialName = "" }) {
8
+ const msg = useMsg();
9
+ const resolvedTitle = title ?? msg("assetManager.dialog.newFolderTitle");
10
+ const resolvedSubmit = submitLabel ?? msg("assetManager.button.create");
7
11
  const [name, setName] = __rspack_external_react.useState(initialName);
8
12
  const [busy, setBusy] = __rspack_external_react.useState(false);
9
13
  const [error, setError] = __rspack_external_react.useState(null);
10
14
  __rspack_external_react.useEffect(()=>{
11
- if (open) {
12
- setName(initialName);
13
- setError(null);
14
- }
15
+ if (open) setName(initialName);
15
16
  }, [
16
17
  open,
17
18
  initialName
18
19
  ]);
20
+ function requestClose() {
21
+ setError(null);
22
+ onOpenChange(false);
23
+ }
19
24
  async function handleSubmit() {
20
25
  const trimmed = name.trim();
21
26
  if ("" === trimmed || busy) return;
@@ -25,7 +30,7 @@ function FolderNameDialog({ open, onOpenChange, onSubmit, title = "New folder",
25
30
  await onSubmit(trimmed);
26
31
  onOpenChange(false);
27
32
  } catch (cause) {
28
- setError(cause instanceof Error ? cause.message : "Could not save the folder.");
33
+ setError(cause instanceof Error ? cause.message : msg("assetManager.dialog.folderSaveError"));
29
34
  } finally{
30
35
  setBusy(false);
31
36
  }
@@ -33,11 +38,13 @@ function FolderNameDialog({ open, onOpenChange, onSubmit, title = "New folder",
33
38
  return /*#__PURE__*/ __rspack_external_react.createElement(Dialog, {
34
39
  open: open,
35
40
  onOpenChange: (next)=>{
36
- if (!busy) onOpenChange(next);
41
+ if (busy) return;
42
+ if (next) onOpenChange(true);
43
+ else requestClose();
37
44
  }
38
- }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, title)), /*#__PURE__*/ __rspack_external_react.createElement(Input, {
45
+ }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, resolvedTitle)), /*#__PURE__*/ __rspack_external_react.createElement(Input, {
39
46
  value: name,
40
- placeholder: "Folder name",
47
+ placeholder: msg("assetManager.dialog.folderNamePlaceholder"),
41
48
  "data-testid": "ak-folder-name-input",
42
49
  onChange: (event)=>setName(event.currentTarget.value),
43
50
  onKeyDown: (event)=>{
@@ -50,11 +57,11 @@ function FolderNameDialog({ open, onOpenChange, onSubmit, title = "New folder",
50
57
  type: "button",
51
58
  variant: "outline",
52
59
  disabled: busy,
53
- onClick: ()=>onOpenChange(false)
54
- }, "Cancel"), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
60
+ onClick: requestClose
61
+ }, msg("assetManager.button.cancel")), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
55
62
  type: "button",
56
63
  disabled: busy || "" === name.trim(),
57
64
  onClick: ()=>void handleSubmit()
58
- }, busy ? "Saving…" : submitLabel))));
65
+ }, busy ? msg("assetManager.dialog.saveProgress") : resolvedSubmit))));
59
66
  }
60
67
  export { FolderNameDialog };
@@ -32,10 +32,12 @@ __webpack_require__.d(__webpack_exports__, {
32
32
  ASSET_DRAG_MIME: ()=>ASSET_DRAG_MIME,
33
33
  FolderTree: ()=>FolderTree
34
34
  });
35
+ const i18n_namespaceObject = require("@anvilkit/core/i18n");
35
36
  const button_namespaceObject = require("@anvilkit/ui/button");
36
37
  const external_react_namespaceObject = require("react");
37
38
  const ASSET_DRAG_MIME = "application/x-anvilkit-assets";
38
39
  function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
40
+ const msg = (0, i18n_namespaceObject.useMsg)();
39
41
  const [dropTarget, setDropTarget] = external_react_namespaceObject.useState(null);
40
42
  const handleDrop = (folderId)=>(event)=>{
41
43
  event.preventDefault();
@@ -50,7 +52,7 @@ function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
50
52
  if (0 === folders.length) return null;
51
53
  const droppable = void 0 !== onDropAssets;
52
54
  return /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
53
- "aria-label": "Folders",
55
+ "aria-label": msg("assetManager.tree.label"),
54
56
  "data-testid": "ak-folder-tree",
55
57
  className: "flex flex-col gap-1"
56
58
  }, folders.map((folder)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
@@ -62,7 +64,7 @@ function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
62
64
  className: "w-full justify-start",
63
65
  "data-folder-id": folder.id,
64
66
  "data-drop-target": dropTarget === folder.id ? "" : void 0,
65
- title: droppable ? `Open ${folder.name} — or drop assets here to move them in` : void 0,
67
+ title: droppable ? msg("assetManager.tree.dropHint").replace("{name}", folder.name) : void 0,
66
68
  onClick: ()=>onNavigate(folder.id),
67
69
  onDragOver: onDropAssets ? (event)=>{
68
70
  event.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"FolderTree.d.cts","sourceRoot":"","sources":["../../src/ui/FolderTree.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,sFAAsF;AACtF,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,CACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,KACnB,IAAI,CAAC;CACV;AAED,wBAAgB,UAAU,CAAC,EAC1B,OAAO,EACP,eAAe,EACf,UAAU,EACV,YAAY,GACZ,EAAE,eAAe,kDAoEjB"}
1
+ {"version":3,"file":"FolderTree.d.cts","sourceRoot":"","sources":["../../src/ui/FolderTree.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,sFAAsF;AACtF,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,CACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,KACnB,IAAI,CAAC;CACV;AAED,wBAAgB,UAAU,CAAC,EAC1B,OAAO,EACP,eAAe,EACf,UAAU,EACV,YAAY,GACZ,EAAE,eAAe,kDAwEjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"FolderTree.d.ts","sourceRoot":"","sources":["../../src/ui/FolderTree.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,sFAAsF;AACtF,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,CACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,KACnB,IAAI,CAAC;CACV;AAED,wBAAgB,UAAU,CAAC,EAC1B,OAAO,EACP,eAAe,EACf,UAAU,EACV,YAAY,GACZ,EAAE,eAAe,kDAoEjB"}
1
+ {"version":3,"file":"FolderTree.d.ts","sourceRoot":"","sources":["../../src/ui/FolderTree.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,sFAAsF;AACtF,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,CACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,KACnB,IAAI,CAAC;CACV;AAED,wBAAgB,UAAU,CAAC,EAC1B,OAAO,EACP,eAAe,EACf,UAAU,EACV,YAAY,GACZ,EAAE,eAAe,kDAwEjB"}
@@ -1,8 +1,10 @@
1
1
  "use client";
2
+ import { useMsg } from "@anvilkit/core/i18n";
2
3
  import { Button } from "@anvilkit/ui/button";
3
4
  import * as __rspack_external_react from "react";
4
5
  const ASSET_DRAG_MIME = "application/x-anvilkit-assets";
5
6
  function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
7
+ const msg = useMsg();
6
8
  const [dropTarget, setDropTarget] = __rspack_external_react.useState(null);
7
9
  const handleDrop = (folderId)=>(event)=>{
8
10
  event.preventDefault();
@@ -17,7 +19,7 @@ function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
17
19
  if (0 === folders.length) return null;
18
20
  const droppable = void 0 !== onDropAssets;
19
21
  return /*#__PURE__*/ __rspack_external_react.createElement("ul", {
20
- "aria-label": "Folders",
22
+ "aria-label": msg("assetManager.tree.label"),
21
23
  "data-testid": "ak-folder-tree",
22
24
  className: "flex flex-col gap-1"
23
25
  }, folders.map((folder)=>/*#__PURE__*/ __rspack_external_react.createElement("li", {
@@ -29,7 +31,7 @@ function FolderTree({ folders, currentFolderId, onNavigate, onDropAssets }) {
29
31
  className: "w-full justify-start",
30
32
  "data-folder-id": folder.id,
31
33
  "data-drop-target": dropTarget === folder.id ? "" : void 0,
32
- title: droppable ? `Open ${folder.name} — or drop assets here to move them in` : void 0,
34
+ title: droppable ? msg("assetManager.tree.dropHint").replace("{name}", folder.name) : void 0,
33
35
  onClick: ()=>onNavigate(folder.id),
34
36
  onDragOver: onDropAssets ? (event)=>{
35
37
  event.preventDefault();
@@ -31,12 +31,14 @@ __webpack_require__.r(__webpack_exports__);
31
31
  __webpack_require__.d(__webpack_exports__, {
32
32
  MetadataPanel: ()=>MetadataPanel
33
33
  });
34
+ const i18n_namespaceObject = require("@anvilkit/core/i18n");
34
35
  const button_namespaceObject = require("@anvilkit/ui/button");
35
36
  const dialog_namespaceObject = require("@anvilkit/ui/dialog");
36
37
  const input_namespaceObject = require("@anvilkit/ui/input");
37
38
  const label_namespaceObject = require("@anvilkit/ui/label");
38
39
  const external_react_namespaceObject = require("react");
39
40
  function MetadataPanel({ asset, onCancel, onConfirm }) {
41
+ const msg = (0, i18n_namespaceObject.useMsg)();
40
42
  const [name, setName] = external_react_namespaceObject.useState("");
41
43
  const [tagInput, setTagInput] = external_react_namespaceObject.useState("");
42
44
  const [tags, setTags] = external_react_namespaceObject.useState([]);
@@ -45,8 +47,6 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
45
47
  if (null === asset) return;
46
48
  setName(asset.name ?? "");
47
49
  setTags(asset.tags ?? []);
48
- setTagInput("");
49
- setBusy(false);
50
50
  }, [
51
51
  asset
52
52
  ]);
@@ -87,19 +87,23 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
87
87
  setBusy(false);
88
88
  }
89
89
  }
90
+ function handleCancel() {
91
+ setTagInput("");
92
+ onCancel();
93
+ }
90
94
  function handleOpenChange(nextOpen) {
91
- if (!nextOpen && !busy) onCancel();
95
+ if (!nextOpen && !busy) handleCancel();
92
96
  }
93
97
  const open = null !== asset;
94
98
  const mimeType = asset?.meta?.mimeType;
95
99
  return /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.Dialog, {
96
100
  open: open,
97
101
  onOpenChange: handleOpenChange
98
- }, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, "Edit asset"), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, asset?.id, mimeType ? ` (${mimeType})` : "")), /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
102
+ }, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, msg("assetManager.dialog.editTitle")), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, asset?.id, mimeType ? ` (${mimeType})` : "")), /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
99
103
  "data-asset-manager-metadata": true
100
104
  }, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
101
105
  htmlFor: "asset-metadata-name"
102
- }, "Name"), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
106
+ }, msg("assetManager.form.nameLabel")), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
103
107
  id: "asset-metadata-name",
104
108
  value: name,
105
109
  onChange: (event)=>{
@@ -111,13 +115,12 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
111
115
  "data-asset-manager-tag-editor": true
112
116
  }, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
113
117
  htmlFor: "asset-metadata-tag-input"
114
- }, "Tags"), /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
115
- "aria-label": "Current tags",
116
- role: "list"
118
+ }, msg("assetManager.form.tagsLabel")), /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
119
+ "aria-label": msg("assetManager.form.tagsListLabel")
117
120
  }, tags.map((tag)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
118
121
  key: tag
119
122
  }, /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, tag), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
120
- "aria-label": `Remove tag ${tag}`,
123
+ "aria-label": msg("assetManager.form.removeTag").replace("{tag}", tag),
121
124
  "data-asset-action": "remove-tag",
122
125
  disabled: busy,
123
126
  onClick: ()=>{
@@ -133,18 +136,18 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
133
136
  setTagInput(event.target.value);
134
137
  },
135
138
  onKeyDown: handleTagKeyDown,
136
- placeholder: "Add a tag and press Enter",
139
+ placeholder: msg("assetManager.form.addTagPlaceholder"),
137
140
  disabled: busy
138
141
  }))), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogFooter, null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
139
142
  disabled: busy,
140
- onClick: onCancel,
143
+ onClick: handleCancel,
141
144
  type: "button",
142
145
  variant: "outline"
143
- }, "Cancel"), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
146
+ }, msg("assetManager.button.cancel")), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
144
147
  disabled: busy || null === asset,
145
148
  onClick: handleConfirm,
146
149
  type: "button"
147
- }, busy ? "Saving…" : "Save"))));
150
+ }, busy ? msg("assetManager.dialog.saveProgress") : msg("assetManager.button.save")))));
148
151
  }
149
152
  exports.MetadataPanel = __webpack_exports__.MetadataPanel;
150
153
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAeA,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,2CAyIpB"}
1
+ {"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAgBA,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,2CA2JpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAeA,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,2CAyIpB"}
1
+ {"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAgBA,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,2CA2JpB"}
@@ -1,10 +1,12 @@
1
1
  "use client";
2
+ import { useMsg } from "@anvilkit/core/i18n";
2
3
  import { Button } from "@anvilkit/ui/button";
3
4
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
4
5
  import { Input } from "@anvilkit/ui/input";
5
6
  import { Label } from "@anvilkit/ui/label";
6
7
  import * as __rspack_external_react from "react";
7
8
  function MetadataPanel({ asset, onCancel, onConfirm }) {
9
+ const msg = useMsg();
8
10
  const [name, setName] = __rspack_external_react.useState("");
9
11
  const [tagInput, setTagInput] = __rspack_external_react.useState("");
10
12
  const [tags, setTags] = __rspack_external_react.useState([]);
@@ -13,8 +15,6 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
13
15
  if (null === asset) return;
14
16
  setName(asset.name ?? "");
15
17
  setTags(asset.tags ?? []);
16
- setTagInput("");
17
- setBusy(false);
18
18
  }, [
19
19
  asset
20
20
  ]);
@@ -55,19 +55,23 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
55
55
  setBusy(false);
56
56
  }
57
57
  }
58
+ function handleCancel() {
59
+ setTagInput("");
60
+ onCancel();
61
+ }
58
62
  function handleOpenChange(nextOpen) {
59
- if (!nextOpen && !busy) onCancel();
63
+ if (!nextOpen && !busy) handleCancel();
60
64
  }
61
65
  const open = null !== asset;
62
66
  const mimeType = asset?.meta?.mimeType;
63
67
  return /*#__PURE__*/ __rspack_external_react.createElement(Dialog, {
64
68
  open: open,
65
69
  onOpenChange: handleOpenChange
66
- }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, "Edit asset"), /*#__PURE__*/ __rspack_external_react.createElement(DialogDescription, null, asset?.id, mimeType ? ` (${mimeType})` : "")), /*#__PURE__*/ __rspack_external_react.createElement("div", {
70
+ }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, msg("assetManager.dialog.editTitle")), /*#__PURE__*/ __rspack_external_react.createElement(DialogDescription, null, asset?.id, mimeType ? ` (${mimeType})` : "")), /*#__PURE__*/ __rspack_external_react.createElement("div", {
67
71
  "data-asset-manager-metadata": true
68
72
  }, /*#__PURE__*/ __rspack_external_react.createElement(Label, {
69
73
  htmlFor: "asset-metadata-name"
70
- }, "Name"), /*#__PURE__*/ __rspack_external_react.createElement(Input, {
74
+ }, msg("assetManager.form.nameLabel")), /*#__PURE__*/ __rspack_external_react.createElement(Input, {
71
75
  id: "asset-metadata-name",
72
76
  value: name,
73
77
  onChange: (event)=>{
@@ -79,13 +83,12 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
79
83
  "data-asset-manager-tag-editor": true
80
84
  }, /*#__PURE__*/ __rspack_external_react.createElement(Label, {
81
85
  htmlFor: "asset-metadata-tag-input"
82
- }, "Tags"), /*#__PURE__*/ __rspack_external_react.createElement("ul", {
83
- "aria-label": "Current tags",
84
- role: "list"
86
+ }, msg("assetManager.form.tagsLabel")), /*#__PURE__*/ __rspack_external_react.createElement("ul", {
87
+ "aria-label": msg("assetManager.form.tagsListLabel")
85
88
  }, tags.map((tag)=>/*#__PURE__*/ __rspack_external_react.createElement("li", {
86
89
  key: tag
87
90
  }, /*#__PURE__*/ __rspack_external_react.createElement("span", null, tag), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
88
- "aria-label": `Remove tag ${tag}`,
91
+ "aria-label": msg("assetManager.form.removeTag").replace("{tag}", tag),
89
92
  "data-asset-action": "remove-tag",
90
93
  disabled: busy,
91
94
  onClick: ()=>{
@@ -101,17 +104,17 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
101
104
  setTagInput(event.target.value);
102
105
  },
103
106
  onKeyDown: handleTagKeyDown,
104
- placeholder: "Add a tag and press Enter",
107
+ placeholder: msg("assetManager.form.addTagPlaceholder"),
105
108
  disabled: busy
106
109
  }))), /*#__PURE__*/ __rspack_external_react.createElement(DialogFooter, null, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
107
110
  disabled: busy,
108
- onClick: onCancel,
111
+ onClick: handleCancel,
109
112
  type: "button",
110
113
  variant: "outline"
111
- }, "Cancel"), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
114
+ }, msg("assetManager.button.cancel")), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
112
115
  disabled: busy || null === asset,
113
116
  onClick: handleConfirm,
114
117
  type: "button"
115
- }, busy ? "Saving…" : "Save"))));
118
+ }, busy ? msg("assetManager.dialog.saveProgress") : msg("assetManager.button.save")))));
116
119
  }
117
120
  export { MetadataPanel };
@@ -31,10 +31,13 @@ __webpack_require__.r(__webpack_exports__);
31
31
  __webpack_require__.d(__webpack_exports__, {
32
32
  MoveTargetPicker: ()=>MoveTargetPicker
33
33
  });
34
+ const i18n_namespaceObject = require("@anvilkit/core/i18n");
34
35
  const button_namespaceObject = require("@anvilkit/ui/button");
35
36
  const dialog_namespaceObject = require("@anvilkit/ui/dialog");
36
37
  const external_react_namespaceObject = require("react");
37
- function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel = "All assets" }) {
38
+ function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel }) {
39
+ const msg = (0, i18n_namespaceObject.useMsg)();
40
+ const resolvedRootLabel = rootLabel ?? msg("assetManager.folder.root");
38
41
  const [busy, setBusy] = external_react_namespaceObject.useState(false);
39
42
  async function pick(folderId) {
40
43
  if (busy) return;
@@ -51,8 +54,8 @@ function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel = "Al
51
54
  onOpenChange: (next)=>{
52
55
  if (!busy) onOpenChange(next);
53
56
  }
54
- }, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, "Move to folder")), /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
55
- "aria-label": "Move to folder",
57
+ }, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, msg("assetManager.dialog.moveTitle"))), /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
58
+ "aria-label": msg("assetManager.dialog.moveTitle"),
56
59
  "data-testid": "ak-move-target-picker",
57
60
  className: "flex max-h-72 flex-col gap-1 overflow-auto"
58
61
  }, /*#__PURE__*/ external_react_namespaceObject.createElement("li", null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
@@ -63,7 +66,7 @@ function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel = "Al
63
66
  "data-move-target": "root",
64
67
  disabled: busy,
65
68
  onClick: ()=>void pick(null)
66
- }, rootLabel)), folders.map((folder)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
69
+ }, resolvedRootLabel)), folders.map((folder)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
67
70
  key: folder.id
68
71
  }, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
69
72
  type: "button",
@@ -1 +1 @@
1
- {"version":3,"file":"MoveTargetPicker.d.cts","sourceRoot":"","sources":["../../src/ui/MoveTargetPicker.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAwB,GACxB,EAAE,qBAAqB,2CA8DvB"}
1
+ {"version":3,"file":"MoveTargetPicker.d.cts","sourceRoot":"","sources":["../../src/ui/MoveTargetPicker.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAS,GACT,EAAE,qBAAqB,2CAgEvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"MoveTargetPicker.d.ts","sourceRoot":"","sources":["../../src/ui/MoveTargetPicker.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAwB,GACxB,EAAE,qBAAqB,2CA8DvB"}
1
+ {"version":3,"file":"MoveTargetPicker.d.ts","sourceRoot":"","sources":["../../src/ui/MoveTargetPicker.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAS,GACT,EAAE,qBAAqB,2CAgEvB"}
@@ -1,8 +1,11 @@
1
1
  "use client";
2
+ import { useMsg } from "@anvilkit/core/i18n";
2
3
  import { Button } from "@anvilkit/ui/button";
3
4
  import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
4
5
  import * as __rspack_external_react from "react";
5
- function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel = "All assets" }) {
6
+ function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel }) {
7
+ const msg = useMsg();
8
+ const resolvedRootLabel = rootLabel ?? msg("assetManager.folder.root");
6
9
  const [busy, setBusy] = __rspack_external_react.useState(false);
7
10
  async function pick(folderId) {
8
11
  if (busy) return;
@@ -19,8 +22,8 @@ function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel = "Al
19
22
  onOpenChange: (next)=>{
20
23
  if (!busy) onOpenChange(next);
21
24
  }
22
- }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, "Move to folder")), /*#__PURE__*/ __rspack_external_react.createElement("ul", {
23
- "aria-label": "Move to folder",
25
+ }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, msg("assetManager.dialog.moveTitle"))), /*#__PURE__*/ __rspack_external_react.createElement("ul", {
26
+ "aria-label": msg("assetManager.dialog.moveTitle"),
24
27
  "data-testid": "ak-move-target-picker",
25
28
  className: "flex max-h-72 flex-col gap-1 overflow-auto"
26
29
  }, /*#__PURE__*/ __rspack_external_react.createElement("li", null, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
@@ -31,7 +34,7 @@ function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel = "Al
31
34
  "data-move-target": "root",
32
35
  disabled: busy,
33
36
  onClick: ()=>void pick(null)
34
- }, rootLabel)), folders.map((folder)=>/*#__PURE__*/ __rspack_external_react.createElement("li", {
37
+ }, resolvedRootLabel)), folders.map((folder)=>/*#__PURE__*/ __rspack_external_react.createElement("li", {
35
38
  key: folder.id
36
39
  }, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
37
40
  type: "button",
@@ -31,11 +31,13 @@ __webpack_require__.r(__webpack_exports__);
31
31
  __webpack_require__.d(__webpack_exports__, {
32
32
  ReplaceAssetDialog: ()=>ReplaceAssetDialog
33
33
  });
34
+ const i18n_namespaceObject = require("@anvilkit/core/i18n");
34
35
  const button_namespaceObject = require("@anvilkit/ui/button");
35
36
  const dialog_namespaceObject = require("@anvilkit/ui/dialog");
36
37
  const external_react_namespaceObject = require("react");
37
38
  const external_plugin_cjs_namespaceObject = require("../plugin.cjs");
38
39
  function ReplaceAssetDialog({ acceptedMimeTypes, asset, maxFileSize, onCancel, onConfirm }) {
40
+ const msg = (0, i18n_namespaceObject.useMsg)();
39
41
  const inputRef = external_react_namespaceObject.useRef(null);
40
42
  const [selectedFile, setSelectedFile] = external_react_namespaceObject.useState(null);
41
43
  const [error, setError] = external_react_namespaceObject.useState(null);
@@ -43,15 +45,10 @@ function ReplaceAssetDialog({ acceptedMimeTypes, asset, maxFileSize, onCancel, o
43
45
  const acceptAttr = external_react_namespaceObject.useMemo(()=>acceptedMimeTypes?.join(","), [
44
46
  acceptedMimeTypes
45
47
  ]);
46
- external_react_namespaceObject.useEffect(()=>{
47
- if (null === asset) {
48
- setSelectedFile(null);
49
- setError(null);
50
- setBusy(false);
51
- }
52
- }, [
53
- asset
54
- ]);
48
+ function resetPicker() {
49
+ setSelectedFile(null);
50
+ setError(null);
51
+ }
55
52
  function handleFileChange(event) {
56
53
  const file = event.target.files?.[0];
57
54
  event.target.value = "";
@@ -73,22 +70,27 @@ function ReplaceAssetDialog({ acceptedMimeTypes, asset, maxFileSize, onCancel, o
73
70
  setBusy(true);
74
71
  try {
75
72
  await onConfirm(asset, selectedFile);
73
+ resetPicker();
76
74
  } catch (err) {
77
75
  setError(err instanceof Error ? err.message : String(err));
78
76
  } finally{
79
77
  setBusy(false);
80
78
  }
81
79
  }
80
+ function handleCancel() {
81
+ resetPicker();
82
+ onCancel();
83
+ }
82
84
  function handleOpenChange(nextOpen) {
83
- if (!nextOpen && !busy) onCancel();
85
+ if (!nextOpen && !busy) handleCancel();
84
86
  }
85
87
  const open = null !== asset;
86
88
  const label = asset?.name ?? asset?.id ?? "";
87
89
  return /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.Dialog, {
88
90
  open: open,
89
91
  onOpenChange: handleOpenChange
90
- }, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, "Replace asset?"), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, label ? `Pick a file to replace ${label} with. Existing asset:// references will resolve to the new bytes.` : "Pick a file to replace this asset with.")), /*#__PURE__*/ external_react_namespaceObject.createElement("input", {
91
- "aria-label": "Replacement file",
92
+ }, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, msg("assetManager.dialog.replaceTitle")), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, label ? msg("assetManager.dialog.replaceDescription").replace("{label}", label) : msg("assetManager.dialog.replaceDescriptionGeneric"))), /*#__PURE__*/ external_react_namespaceObject.createElement("input", {
93
+ "aria-label": msg("assetManager.dialog.replaceFileLabel"),
92
94
  "data-testid": "replace-asset-file-input",
93
95
  hidden: true,
94
96
  onChange: handleFileChange,
@@ -104,22 +106,22 @@ function ReplaceAssetDialog({ acceptedMimeTypes, asset, maxFileSize, onCancel, o
104
106
  variant: "outline",
105
107
  onClick: ()=>inputRef.current?.click(),
106
108
  disabled: busy
107
- }, selectedFile ? "Choose a different file" : "Choose file"), /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
109
+ }, selectedFile ? msg("assetManager.dialog.chooseFileDifferent") : msg("assetManager.dialog.chooseFile")), /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
108
110
  "aria-live": "polite",
109
111
  role: "status"
110
- }, selectedFile ? `Selected: ${selectedFile.name}` : "No file selected."), error ? /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
112
+ }, selectedFile ? msg("assetManager.dialog.fileSelected").replace("{name}", selectedFile.name) : msg("assetManager.dialog.noFileSelected")), error ? /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
111
113
  "data-asset-manager-replace-error": true,
112
114
  role: "alert"
113
115
  }, error) : null), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogFooter, null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
114
116
  type: "button",
115
117
  variant: "outline",
116
- onClick: onCancel,
118
+ onClick: handleCancel,
117
119
  disabled: busy
118
- }, "Cancel"), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
120
+ }, msg("assetManager.button.cancel")), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
119
121
  type: "button",
120
122
  onClick: handleConfirm,
121
123
  disabled: busy || null === asset || null === selectedFile
122
- }, busy ? "Replacing…" : "Replace"))));
124
+ }, busy ? msg("assetManager.dialog.replaceProgress") : msg("assetManager.button.replace")))));
123
125
  }
124
126
  exports.ReplaceAssetDialog = __webpack_exports__.ReplaceAssetDialog;
125
127
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -1 +1 @@
1
- {"version":3,"file":"ReplaceAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,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":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,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,2CAuIzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReplaceAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,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":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,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,2CAuIzB"}
@@ -1,9 +1,11 @@
1
1
  "use client";
2
+ import { useMsg } from "@anvilkit/core/i18n";
2
3
  import { Button } from "@anvilkit/ui/button";
3
4
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
4
5
  import { validateSelectedFile } from "../plugin.js";
5
6
  import * as __rspack_external_react from "react";
6
7
  function ReplaceAssetDialog({ acceptedMimeTypes, asset, maxFileSize, onCancel, onConfirm }) {
8
+ const msg = useMsg();
7
9
  const inputRef = __rspack_external_react.useRef(null);
8
10
  const [selectedFile, setSelectedFile] = __rspack_external_react.useState(null);
9
11
  const [error, setError] = __rspack_external_react.useState(null);
@@ -11,15 +13,10 @@ function ReplaceAssetDialog({ acceptedMimeTypes, asset, maxFileSize, onCancel, o
11
13
  const acceptAttr = __rspack_external_react.useMemo(()=>acceptedMimeTypes?.join(","), [
12
14
  acceptedMimeTypes
13
15
  ]);
14
- __rspack_external_react.useEffect(()=>{
15
- if (null === asset) {
16
- setSelectedFile(null);
17
- setError(null);
18
- setBusy(false);
19
- }
20
- }, [
21
- asset
22
- ]);
16
+ function resetPicker() {
17
+ setSelectedFile(null);
18
+ setError(null);
19
+ }
23
20
  function handleFileChange(event) {
24
21
  const file = event.target.files?.[0];
25
22
  event.target.value = "";
@@ -41,22 +38,27 @@ function ReplaceAssetDialog({ acceptedMimeTypes, asset, maxFileSize, onCancel, o
41
38
  setBusy(true);
42
39
  try {
43
40
  await onConfirm(asset, selectedFile);
41
+ resetPicker();
44
42
  } catch (err) {
45
43
  setError(err instanceof Error ? err.message : String(err));
46
44
  } finally{
47
45
  setBusy(false);
48
46
  }
49
47
  }
48
+ function handleCancel() {
49
+ resetPicker();
50
+ onCancel();
51
+ }
50
52
  function handleOpenChange(nextOpen) {
51
- if (!nextOpen && !busy) onCancel();
53
+ if (!nextOpen && !busy) handleCancel();
52
54
  }
53
55
  const open = null !== asset;
54
56
  const label = asset?.name ?? asset?.id ?? "";
55
57
  return /*#__PURE__*/ __rspack_external_react.createElement(Dialog, {
56
58
  open: open,
57
59
  onOpenChange: handleOpenChange
58
- }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, "Replace asset?"), /*#__PURE__*/ __rspack_external_react.createElement(DialogDescription, null, label ? `Pick a file to replace ${label} with. Existing asset:// references will resolve to the new bytes.` : "Pick a file to replace this asset with.")), /*#__PURE__*/ __rspack_external_react.createElement("input", {
59
- "aria-label": "Replacement file",
60
+ }, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, msg("assetManager.dialog.replaceTitle")), /*#__PURE__*/ __rspack_external_react.createElement(DialogDescription, null, label ? msg("assetManager.dialog.replaceDescription").replace("{label}", label) : msg("assetManager.dialog.replaceDescriptionGeneric"))), /*#__PURE__*/ __rspack_external_react.createElement("input", {
61
+ "aria-label": msg("assetManager.dialog.replaceFileLabel"),
60
62
  "data-testid": "replace-asset-file-input",
61
63
  hidden: true,
62
64
  onChange: handleFileChange,
@@ -72,21 +74,21 @@ function ReplaceAssetDialog({ acceptedMimeTypes, asset, maxFileSize, onCancel, o
72
74
  variant: "outline",
73
75
  onClick: ()=>inputRef.current?.click(),
74
76
  disabled: busy
75
- }, selectedFile ? "Choose a different file" : "Choose file"), /*#__PURE__*/ __rspack_external_react.createElement("p", {
77
+ }, selectedFile ? msg("assetManager.dialog.chooseFileDifferent") : msg("assetManager.dialog.chooseFile")), /*#__PURE__*/ __rspack_external_react.createElement("p", {
76
78
  "aria-live": "polite",
77
79
  role: "status"
78
- }, selectedFile ? `Selected: ${selectedFile.name}` : "No file selected."), error ? /*#__PURE__*/ __rspack_external_react.createElement("p", {
80
+ }, selectedFile ? msg("assetManager.dialog.fileSelected").replace("{name}", selectedFile.name) : msg("assetManager.dialog.noFileSelected")), error ? /*#__PURE__*/ __rspack_external_react.createElement("p", {
79
81
  "data-asset-manager-replace-error": true,
80
82
  role: "alert"
81
83
  }, error) : null), /*#__PURE__*/ __rspack_external_react.createElement(DialogFooter, null, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
82
84
  type: "button",
83
85
  variant: "outline",
84
- onClick: onCancel,
86
+ onClick: handleCancel,
85
87
  disabled: busy
86
- }, "Cancel"), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
88
+ }, msg("assetManager.button.cancel")), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
87
89
  type: "button",
88
90
  onClick: handleConfirm,
89
91
  disabled: busy || null === asset || null === selectedFile
90
- }, busy ? "Replacing…" : "Replace"))));
92
+ }, busy ? msg("assetManager.dialog.replaceProgress") : msg("assetManager.button.replace")))));
91
93
  }
92
94
  export { ReplaceAssetDialog };