@noya-app/noya-file-explorer 0.0.14 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -5,6 +5,8 @@ import React, { ReactNode } from 'react';
5
5
  import * as tree_visit_lib_types from 'tree-visit/lib/types';
6
6
  import * as tree_visit from 'tree-visit';
7
7
 
8
+ declare function formatByteSize(size: number): string;
9
+
8
10
  declare const createMediaFolder: (folder?: Omit<FolderMediaItem, "kind" | "id">) => FolderMediaItem;
9
11
  declare const createMediaAsset: (asset: Omit<AssetMediaItem, "kind" | "id">) => AssetMediaItem;
10
12
  declare const createMediaFile: (file: Omit<FileMediaItem, "kind" | "id">) => FileMediaItem;
@@ -35172,6 +35174,6 @@ declare const MediaCollection: React.MemoExoticComponent<React.ForwardRefExoticC
35172
35174
  id: string;
35173
35175
  kind: "file";
35174
35176
  encoding: "utf-8" | "base64";
35175
- }, MenuAction>, "size" | "scrollable" | "renderEmptyState" | "sharedDragProps" | "expandable" | "sortableId" | "renamable"> & React.RefAttributes<MediaCollectionRef>>>;
35177
+ }, MenuAction>, "size" | "scrollable" | "renderEmptyState" | "sharedDragProps" | "expandable" | "sortableId" | "renamable" | "onClickItem"> & React.RefAttributes<MediaCollectionRef>>>;
35176
35178
 
35177
- export { type ExpandedMap, type FileKindFilter, type GetVisibleItemsOptions, MediaCollection, type MediaCollectionRef, type MediaItemTree, PLACEHOLDER_ITEM_NAME, basenameValidator, createMediaAsset, createMediaFile, createMediaFolder, createMediaItem, createMediaItemTree, deleteMediaItems, getDepthMap, getParentDirectories, getVisibleItems, moveMediaInsideFolder, movePathsIntoTarget, moveUpAFolder, renameMediaItemAndDescendantPaths, rootMediaItem, rootMediaItemName, rootMediaItemPath, updateExpandedMap, validateMediaItemRename };
35179
+ export { type ExpandedMap, type FileKindFilter, type GetVisibleItemsOptions, MediaCollection, type MediaCollectionRef, type MediaItemTree, PLACEHOLDER_ITEM_NAME, basenameValidator, createMediaAsset, createMediaFile, createMediaFolder, createMediaItem, createMediaItemTree, deleteMediaItems, formatByteSize, getDepthMap, getParentDirectories, getVisibleItems, moveMediaInsideFolder, movePathsIntoTarget, moveUpAFolder, renameMediaItemAndDescendantPaths, rootMediaItem, rootMediaItemName, rootMediaItemPath, updateExpandedMap, validateMediaItemRename };
package/dist/index.js CHANGED
@@ -1118,6 +1118,7 @@ __export(src_exports, {
1118
1118
  createMediaItem: () => createMediaItem,
1119
1119
  createMediaItemTree: () => createMediaItemTree,
1120
1120
  deleteMediaItems: () => deleteMediaItems,
1121
+ formatByteSize: () => formatByteSize,
1121
1122
  getDepthMap: () => getDepthMap,
1122
1123
  getParentDirectories: () => getParentDirectories,
1123
1124
  getVisibleItems: () => getVisibleItems,
@@ -1133,6 +1134,15 @@ __export(src_exports, {
1133
1134
  });
1134
1135
  module.exports = __toCommonJS(src_exports);
1135
1136
 
1137
+ // src/formatByteSize.ts
1138
+ var byteSizeUnits = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
1139
+ function formatByteSize(size) {
1140
+ const unitIndex = Math.floor(Math.log(size) / Math.log(1024));
1141
+ const unit = byteSizeUnits[unitIndex];
1142
+ const value = size / Math.pow(1024, unitIndex);
1143
+ return `${value.toFixed(1)} ${unit}`;
1144
+ }
1145
+
1136
1146
  // src/MediaCollection.tsx
1137
1147
  var import_noya_designsystem = require("@noya-app/noya-designsystem");
1138
1148
  var import_noya_icons = require("@noya-app/noya-icons");
@@ -1529,7 +1539,8 @@ var MediaCollection = (0, import_react.memo)(
1529
1539
  scrollable = false,
1530
1540
  sortable = false,
1531
1541
  renderEmptyState,
1532
- sharedDragProps
1542
+ sharedDragProps,
1543
+ onClickItem
1533
1544
  }, ref) {
1534
1545
  const setMedia = (0, import_react.useCallback)(
1535
1546
  (...args) => {
@@ -1618,7 +1629,7 @@ var MediaCollection = (0, import_react.memo)(
1618
1629
  setExpandedMap(initialExpanded);
1619
1630
  }
1620
1631
  }, [initialExpanded]);
1621
- const handleExpanded = (0, import_react.useCallback)(
1632
+ const getExpanded = (0, import_react.useCallback)(
1622
1633
  (item) => {
1623
1634
  if (!expandable) return void 0;
1624
1635
  if (item.kind !== "folder") return void 0;
@@ -1716,6 +1727,7 @@ var MediaCollection = (0, import_react.memo)(
1716
1727
  },
1717
1728
  [media, tree, setMedia]
1718
1729
  );
1730
+ const [isUploading, setIsUploading] = (0, import_react.useState)(false);
1719
1731
  const handleUpload = (0, import_react.useCallback)(
1720
1732
  async (selectedId) => {
1721
1733
  try {
@@ -1731,6 +1743,7 @@ var MediaCollection = (0, import_react.memo)(
1731
1743
  asset: createMediaAsset({ assetId: asset.id })
1732
1744
  };
1733
1745
  });
1746
+ setIsUploading(true);
1734
1747
  const newMediaMap = await Promise.all(uploadPromises);
1735
1748
  setMedia(
1736
1749
  { name: "Add media items", timestamp: Date.now() },
@@ -1743,6 +1756,8 @@ var MediaCollection = (0, import_react.memo)(
1743
1756
  );
1744
1757
  } catch (error) {
1745
1758
  console.error("Failed to upload files:", error);
1759
+ } finally {
1760
+ setIsUploading(false);
1746
1761
  }
1747
1762
  },
1748
1763
  [tree.idToPathMap, setMedia, media, assetManager]
@@ -1981,7 +1996,8 @@ var MediaCollection = (0, import_react.memo)(
1981
1996
  import_noya_designsystem.FileExplorerUploadButton,
1982
1997
  {
1983
1998
  showUploadButton,
1984
- onUpload: () => handleUpload(rootMediaItem.id)
1999
+ onUpload: () => handleUpload(rootMediaItem.id),
2000
+ isUploading
1985
2001
  },
1986
2002
  right
1987
2003
  ),
@@ -2015,7 +2031,7 @@ var MediaCollection = (0, import_react.memo)(
2015
2031
  return "Enter file name";
2016
2032
  }
2017
2033
  },
2018
- getExpanded: handleExpanded,
2034
+ getExpanded,
2019
2035
  setExpanded: handleSetExpanded,
2020
2036
  getRenamable: (item) => {
2021
2037
  if (item.id === rootMediaItem.id) return false;
@@ -2025,6 +2041,7 @@ var MediaCollection = (0, import_react.memo)(
2025
2041
  menuItems: assetContextMenuItems,
2026
2042
  onSelectMenuItem: handleMenuAction,
2027
2043
  onSelectionChange: setSelectedIds,
2044
+ onClickItem,
2028
2045
  onDoubleClickItem,
2029
2046
  onRename,
2030
2047
  renamable,
@@ -2041,7 +2058,7 @@ var MediaCollection = (0, import_react.memo)(
2041
2058
  if (file.kind !== "asset") return null;
2042
2059
  const asset = assets.find((a) => a.id === file.assetId);
2043
2060
  if (!asset) return null;
2044
- return /* @__PURE__ */ import_react2.default.createElement(import_noya_designsystem.FileExplorerDetail, { selected, size }, (asset.size / 1024).toFixed(1), "KB");
2061
+ return /* @__PURE__ */ import_react2.default.createElement(import_noya_designsystem.FileExplorerDetail, { selected, size }, formatByteSize(asset.size));
2045
2062
  },
2046
2063
  renderEmptyState: () => renderEmptyState?.() ?? /* @__PURE__ */ import_react2.default.createElement(import_noya_designsystem.FileExplorerEmptyState, null),
2047
2064
  itemRoleDescription: "clickable file item",
@@ -2137,6 +2154,7 @@ var MediaCollection = (0, import_react.memo)(
2137
2154
  createMediaItem,
2138
2155
  createMediaItemTree,
2139
2156
  deleteMediaItems,
2157
+ formatByteSize,
2140
2158
  getDepthMap,
2141
2159
  getParentDirectories,
2142
2160
  getVisibleItems,