@tutti-os/workspace-file-manager 0.0.196 → 0.0.198

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,9 +3,14 @@
3
3
  Reusable workspace file manager service, session state, host contracts, and
4
4
  optional React UI.
5
5
 
6
+ **Authority for ownership and boundary decisions:**
7
+ [CONTRACT.md](./CONTRACT.md). Read that file before changing the host
8
+ contract, session ownership, context-menu DI, persistence schema, or
9
+ activation/preview boundaries.
10
+
6
11
  Hosts compose the package through `createWorkspaceFileManagerService()` and
7
12
  `createSession(...)`. A session owns the shared file-manager data state, shared
8
- interaction state, preview flow, upload flow, and activation flow for one
13
+ interaction state, preview flow, and activation flow for one
9
14
  workspace-scoped instance.
10
15
 
11
16
  Hosts provide backend capabilities through `WorkspaceFileManagerHost`. The
@@ -15,8 +20,8 @@ or host absolute paths.
15
20
 
16
21
  This package is intentionally a reusable frontend workspace-domain surface, not
17
22
  only a transport-agnostic data kernel. Shared session orchestration, preview
18
- flow, upload flow, activation flow, and React-facing interaction state may live
19
- here when they are part of the reusable file-manager experience across hosts.
23
+ flow, activation flow, and React-facing interaction state may live here when
24
+ they are part of the reusable file-manager experience across hosts.
20
25
 
21
26
  The shared surface consumes host-neutral classification and loading lifecycle
22
27
  from `@tutti-os/workspace-file-preview`. This package owns file-manager-specific
@@ -39,8 +44,10 @@ Hosts now provide one app-level i18n runtime and scope it into the file-manager
39
44
  namespace, rather than hand-assembling package-local message objects.
40
45
 
41
46
  What stays outside this package is concrete host integration: desktop preload
42
- calls, tuttid transport wiring, host absolute paths, and product-specific
43
- integration details belong in the owning host adapter.
47
+ calls, tuttid transport wiring, host absolute paths, import/export/upload
48
+ flows, share/exposure flows, and other product-specific integration details
49
+ belong in the owning host adapter. See [CONTRACT.md](./CONTRACT.md) for the full
50
+ ownership table and non-goals.
44
51
 
45
52
  ## Host Reuse Pattern
46
53
 
@@ -55,7 +62,9 @@ When another host wants to reuse this package:
55
62
  - any other shared package i18n resources needed by the same surface
56
63
  4. Scope that runtime into the file-manager namespace with
57
64
  `createWorkspaceFileManagerI18nRuntime(...)`.
58
- 5. Override wording in the host runtime when the host intentionally owns the
65
+ 5. Provide `resolveContextMenu` when using the React surface so blank,
66
+ directory, and file menus stay host-owned.
67
+ 6. Override wording in the host runtime when the host intentionally owns the
59
68
  product phrasing; otherwise fall back to the package defaults.
60
69
 
61
70
  This keeps the package reusable across different hosts without pushing host
@@ -42,7 +42,6 @@ var workspaceFileManagerEn = {
42
42
  deletingLabel: "Deleting...",
43
43
  downloadFailedTitle: "Download failed",
44
44
  downloadLabel: "Download",
45
- dropToImportLabel: "Drop files here to import to the current folder",
46
45
  emptyDirectory: "No visible files in this folder",
47
46
  collapseFolderLabel: "Collapse folder",
48
47
  expandFolderLabel: "Expand folder",
@@ -86,24 +85,8 @@ var workspaceFileManagerEn = {
86
85
  searchPlaceholder: "Search files",
87
86
  searchResultsLabel: "Search results",
88
87
  sizeLabel: "Size",
89
- unsupportedImportBody: "Importing local files into the workspace is not wired up in this desktop build yet.",
90
- unsupportedImportTitle: "Import not available yet",
91
88
  unsupportedViewBody: "Opening {{name}} from the file manager is not supported in this desktop build yet.",
92
89
  unsupportedViewTitle: "Open not available yet",
93
- importConflictDescription: "{{count}} file from this import already exists in this folder tree. Replace it?",
94
- importConflictReplaceLabel: "Replace files",
95
- importConflictReviewLabel: "Existing path",
96
- importConflictSummaryFiltered: "Filtered: {{count}}",
97
- importConflictSummaryIgnored: "Ignored: {{count}}",
98
- importConflictSummaryReasonIgnored: "Ignored by rules: {{count}}",
99
- importConflictSummaryReasonSymlink: "Skipped symlinks: {{count}}",
100
- importConflictSummaryReasonSystemMetadata: "Skipped system metadata: {{count}}",
101
- importConflictSummarySelected: "Selected: {{count}}",
102
- importConflictTitle: "Replace existing file?",
103
- importFailedTitle: "Import failed",
104
- importLabel: "Import",
105
- importTypeConflictDescription: "{{count}} import path conflicts with an existing file or folder using an incompatible type. Resolve it before retrying.",
106
- importTypeConflictTitle: "Import path conflict",
107
90
  layoutIconViewLabel: "Icon view",
108
91
  layoutIconViewTooltipLabel: "Icon mode",
109
92
  layoutListViewLabel: "List view",
@@ -138,7 +121,6 @@ var workspaceFileManagerZhCN = {
138
121
  deletingLabel: "\u5220\u9664\u4E2D...",
139
122
  downloadFailedTitle: "\u4E0B\u8F7D\u5931\u8D25",
140
123
  downloadLabel: "\u4E0B\u8F7D",
141
- dropToImportLabel: "\u5C06\u6587\u4EF6\u62D6\u5230\u8FD9\u91CC\u4EE5\u5BFC\u5165\u5230\u5F53\u524D\u6587\u4EF6\u5939",
142
124
  emptyDirectory: "\u8FD9\u4E2A\u6587\u4EF6\u5939\u91CC\u6CA1\u6709\u53EF\u89C1\u6587\u4EF6",
143
125
  collapseFolderLabel: "\u6536\u8D77\u6587\u4EF6\u5939",
144
126
  expandFolderLabel: "\u5C55\u5F00\u6587\u4EF6\u5939",
@@ -182,24 +164,8 @@ var workspaceFileManagerZhCN = {
182
164
  searchPlaceholder: "\u641C\u7D22\u6587\u4EF6",
183
165
  searchResultsLabel: "\u641C\u7D22\u7ED3\u679C",
184
166
  sizeLabel: "\u5927\u5C0F",
185
- unsupportedImportBody: "\u8FD9\u4E2A\u684C\u9762\u7248\u672C\u6682\u65F6\u8FD8\u6CA1\u6709\u628A\u672C\u5730\u6587\u4EF6\u5BFC\u5165\u5230\u5DE5\u4F5C\u533A\u7684\u94FE\u8DEF\u63A5\u901A\u3002",
186
- unsupportedImportTitle: "\u6682\u4E0D\u652F\u6301\u5BFC\u5165",
187
167
  unsupportedViewBody: "\u8FD9\u4E2A\u684C\u9762\u7248\u672C\u6682\u65F6\u8FD8\u4E0D\u652F\u6301\u76F4\u63A5\u4ECE\u6587\u4EF6\u7BA1\u7406\u5668\u6253\u5F00 {{name}}\u3002",
188
168
  unsupportedViewTitle: "\u6682\u4E0D\u652F\u6301\u6253\u5F00",
189
- importConflictDescription: "\u8FD9\u6B21\u5BFC\u5165\u91CC\u6709 {{count}} \u4E2A\u6587\u4EF6\u5728\u5F53\u524D\u76EE\u5F55\u6811\u4E2D\u5DF2\u7ECF\u5B58\u5728\u3002\u8981\u66FF\u6362\u5417\uFF1F",
190
- importConflictReplaceLabel: "\u66FF\u6362\u6587\u4EF6",
191
- importConflictReviewLabel: "\u73B0\u6709\u8DEF\u5F84",
192
- importConflictSummaryFiltered: "\u5DF2\u8FC7\u6EE4\uFF1A{{count}}",
193
- importConflictSummaryIgnored: "\u5DF2\u5FFD\u7565\uFF1A{{count}}",
194
- importConflictSummaryReasonIgnored: "\u89C4\u5219\u5FFD\u7565\uFF1A{{count}}",
195
- importConflictSummaryReasonSymlink: "\u5DF2\u8DF3\u8FC7\u7B26\u53F7\u94FE\u63A5\uFF1A{{count}}",
196
- importConflictSummaryReasonSystemMetadata: "\u5DF2\u8DF3\u8FC7\u7CFB\u7EDF\u5143\u6570\u636E\uFF1A{{count}}",
197
- importConflictSummarySelected: "\u5DF2\u9009\u62E9\uFF1A{{count}}",
198
- importConflictTitle: "\u66FF\u6362\u5DF2\u6709\u6587\u4EF6\uFF1F",
199
- importFailedTitle: "\u5BFC\u5165\u5931\u8D25",
200
- importLabel: "\u5BFC\u5165",
201
- importTypeConflictDescription: "\u8FD9\u6B21\u5BFC\u5165\u91CC\u6709 {{count}} \u4E2A\u8DEF\u5F84\u4E0E\u73B0\u6709\u6587\u4EF6\u6216\u6587\u4EF6\u5939\u7684\u7C7B\u578B\u4E0D\u517C\u5BB9\u3002\u8BF7\u5148\u5904\u7406\u540E\u518D\u91CD\u8BD5\u3002",
202
- importTypeConflictTitle: "\u5BFC\u5165\u8DEF\u5F84\u51B2\u7A81",
203
169
  layoutIconViewLabel: "\u56FE\u6807",
204
170
  layoutIconViewTooltipLabel: "\u56FE\u6807\u6A21\u5F0F",
205
171
  layoutListViewLabel: "\u5217\u8868",
@@ -239,4 +205,4 @@ export {
239
205
  createWorkspaceFileManagerI18nRuntime,
240
206
  resolveRevealInFolderLabel
241
207
  };
242
- //# sourceMappingURL=chunk-KKKQGRC5.js.map
208
+ //# sourceMappingURL=chunk-EI4ICYY4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n/workspaceFileManagerI18n.ts"],"sourcesContent":["import {\n createScopedLocaleObjectsI18nModuleManifest,\n createScopedI18nRuntime,\n type I18nDictionary,\n type I18nRuntime\n} from \"@tutti-os/ui-i18n-runtime\";\n\ntype WorkspaceFileManagerI18nLocale = \"en\" | \"zh-CN\";\nexport const workspaceFileManagerI18nNamespace = \"workspaceFileManager\";\nexport const tuttiI18nModule = createScopedLocaleObjectsI18nModuleManifest({\n localeObjectByLocale: {\n en: \"workspaceFileManagerEn\",\n \"zh-CN\": \"workspaceFileManagerZhCN\"\n },\n name: \"workspace-file-manager\",\n namespace: \"workspaceFileManager\",\n sourceRoot: \"packages/workspace/file-manager/src\"\n});\n\nconst workspaceFileManagerEn = {\n backLabel: \"Back\",\n arrangeApplicationLabel: \"Application\",\n arrangeCreatedLabel: \"Created\",\n arrangeDateAddedLabel: \"Date Added\",\n arrangeKindLabel: \"Kind\",\n arrangeLastOpenedLabel: \"Last Opened\",\n arrangeMenuLabel: \"Arrange\",\n arrangeNoneLabel: \"None\",\n breadcrumbRootLabel: \"workspace\",\n cancelLabel: \"Cancel\",\n closeLabel: \"Close\",\n copyLabel: \"Copy\",\n copyPathLabel: \"Copy path\",\n copyPathSuccessTitle: \"Path copied\",\n copySuccessTitle: \"Copied to clipboard\",\n createActionLabel: \"Create\",\n createDirectoryLabel: \"New folder\",\n createDirectoryPlaceholder: \"Folder name\",\n createFileLabel: \"New file\",\n createFilePlaceholder: \"File name\",\n createNameInvalid: \"Use a valid name without path separators\",\n createNameRequired: \"Enter a name to continue\",\n clearSearchLabel: \"Clear search\",\n deleteConfirmDescription: \"Delete {{name}} from this workspace?\",\n deleteLabel: \"Delete\",\n deletingLabel: \"Deleting...\",\n downloadFailedTitle: \"Download failed\",\n downloadLabel: \"Download\",\n emptyDirectory: \"No visible files in this folder\",\n collapseFolderLabel: \"Collapse folder\",\n expandFolderLabel: \"Expand folder\",\n forwardLabel: \"Forward\",\n loading: \"Loading\",\n modifiedLabel: \"Modified\",\n nameLabel: \"Name\",\n noSearchResults: \"No files matched your search\",\n openFailedTitle: \"Open failed\",\n openLabel: \"Open\",\n openInAppBrowserLabel: \"Tutti built-in browser\",\n openInDefaultBrowserLabel: \"Default Browser\",\n openInFileViewerLabel: \"File viewer\",\n openWithLabel: \"Open With\",\n openWithLoadingLabel: \"Loading apps...\",\n openWithOtherLabel: \"Other...\",\n openWithOtherPickerPrompt: \"Choose an application to open this file:\",\n revealInFileExplorerLabel: \"Reveal in File Explorer\",\n revealInFileManagerLabel: \"Reveal in File Manager\",\n revealInFinderLabel: \"Reveal in Finder\",\n unknownErrorMessage: \"Something went wrong. Please try again.\",\n previewBinary:\n \"This file looks binary, so the preview stays read-only for now.\",\n previewDecodeFailed:\n \"We couldn't decode this file as UTF-8 text for preview.\",\n previewDirectoryLabel: \"Folder\",\n previewEmptyLabel: \"Select a file or folder to view details\",\n previewFileTooLarge:\n \"This file is larger than {{maxSize}}, so inline preview is disabled.\",\n previewLoadingLabel: \"Loading preview...\",\n previewTooLarge:\n \"This text file is larger than {{maxSize}}, so inline preview is disabled.\",\n previewUnavailableDownloadBody:\n \"Download {{name}} to open it in another environment.\",\n previewUnavailableOpenBody: \"Open {{name}} in your local app instead.\",\n previewUnavailableTitle: \"Can't preview this file\",\n previewUnsupported: \"Inline preview isn't available for this file type yet.\",\n revealFailedTitle: \"Could not reveal in file manager\",\n renameActionLabel: \"Rename\",\n renameLabel: \"Rename\",\n renamePlaceholder: \"New name\",\n refreshLabel: \"Refresh\",\n resizeLocationsSidebar: \"Resize locations sidebar\",\n resizePreviewPanel: \"Resize file details panel\",\n retryLabel: \"Retry\",\n searchPlaceholder: \"Search files\",\n searchResultsLabel: \"Search results\",\n sizeLabel: \"Size\",\n unsupportedViewBody:\n \"Opening {{name}} from the file manager is not supported in this desktop build yet.\",\n unsupportedViewTitle: \"Open not available yet\",\n layoutIconViewLabel: \"Icon view\",\n layoutIconViewTooltipLabel: \"Icon mode\",\n layoutListViewLabel: \"List view\",\n layoutListViewTooltipLabel: \"List mode\"\n} as const satisfies I18nDictionary;\n\nconst workspaceFileManagerZhCN = {\n backLabel: \"后退\",\n arrangeApplicationLabel: \"应用程序\",\n arrangeCreatedLabel: \"创建日期\",\n arrangeDateAddedLabel: \"添加日期\",\n arrangeKindLabel: \"种类\",\n arrangeLastOpenedLabel: \"上次打开日期\",\n arrangeMenuLabel: \"排列方式\",\n arrangeNoneLabel: \"无\",\n breadcrumbRootLabel: \"工作区\",\n cancelLabel: \"取消\",\n closeLabel: \"关闭\",\n copyLabel: \"复制\",\n copyPathLabel: \"复制路径\",\n copyPathSuccessTitle: \"复制成功\",\n copySuccessTitle: \"已复制到剪贴板\",\n createActionLabel: \"创建\",\n createDirectoryLabel: \"新建文件夹\",\n createDirectoryPlaceholder: \"文件夹名称\",\n createFileLabel: \"新建文件\",\n createFilePlaceholder: \"文件名称\",\n createNameInvalid: \"请输入有效名称,且不要包含路径分隔符\",\n createNameRequired: \"请输入名称后再继续\",\n clearSearchLabel: \"清空搜索\",\n deleteConfirmDescription: \"要从这个工作区删除 {{name}} 吗?\",\n deleteLabel: \"删除\",\n deletingLabel: \"删除中...\",\n downloadFailedTitle: \"下载失败\",\n downloadLabel: \"下载\",\n emptyDirectory: \"这个文件夹里没有可见文件\",\n collapseFolderLabel: \"收起文件夹\",\n expandFolderLabel: \"展开文件夹\",\n forwardLabel: \"前进\",\n loading: \"加载中\",\n modifiedLabel: \"修改时间\",\n nameLabel: \"名称\",\n noSearchResults: \"没有匹配的文件\",\n openFailedTitle: \"打开失败\",\n openLabel: \"打开\",\n openInAppBrowserLabel: \"Tutti 内置的浏览器\",\n openInDefaultBrowserLabel: \"默认浏览器\",\n openInFileViewerLabel: \"文件查看器\",\n openWithLabel: \"打开方式\",\n openWithLoadingLabel: \"正在加载应用...\",\n openWithOtherLabel: \"其他...\",\n openWithOtherPickerPrompt: \"选择用来打开此文件的应用程序:\",\n revealInFileExplorerLabel: \"在文件资源管理器中显示\",\n revealInFileManagerLabel: \"在文件管理器中显示\",\n revealInFinderLabel: \"在 Finder 中显示\",\n unknownErrorMessage: \"出了点问题,请稍后再试。\",\n previewBinary: \"这个文件更像二进制内容,当前先保持只读占位。\",\n previewDecodeFailed: \"暂时无法按 UTF-8 文本解码这个文件。\",\n previewDirectoryLabel: \"文件夹\",\n previewEmptyLabel: \"选择文件或文件夹查看详情\",\n previewFileTooLarge: \"这个文件超过了 {{maxSize}},暂时不做内联预览。\",\n previewLoadingLabel: \"正在加载预览...\",\n previewTooLarge: \"这个文本文件超过了 {{maxSize}},暂时不做内联预览。\",\n previewUnavailableDownloadBody: \"下载 {{name}} 后再在其他环境中打开。\",\n previewUnavailableOpenBody: \"改为在本地应用中打开 {{name}}。\",\n previewUnavailableTitle: \"这个文件暂时无法预览\",\n previewUnsupported: \"这种文件类型暂时还不支持内联预览。\",\n revealFailedTitle: \"无法在文件管理器中显示\",\n renameActionLabel: \"重命名\",\n renameLabel: \"重命名\",\n renamePlaceholder: \"新名称\",\n refreshLabel: \"刷新\",\n resizeLocationsSidebar: \"调整位置侧栏宽度\",\n resizePreviewPanel: \"调整文件详情面板宽度\",\n retryLabel: \"重试\",\n searchPlaceholder: \"搜索文件\",\n searchResultsLabel: \"搜索结果\",\n sizeLabel: \"大小\",\n unsupportedViewBody:\n \"这个桌面版本暂时还不支持直接从文件管理器打开 {{name}}。\",\n unsupportedViewTitle: \"暂不支持打开\",\n layoutIconViewLabel: \"图标\",\n layoutIconViewTooltipLabel: \"图标模式\",\n layoutListViewLabel: \"列表\",\n layoutListViewTooltipLabel: \"列表模式\"\n} as const satisfies I18nDictionary;\n\nexport type WorkspaceFileManagerI18nKey = keyof typeof workspaceFileManagerEn;\n\nexport type WorkspaceFileManagerI18nRuntime =\n I18nRuntime<WorkspaceFileManagerI18nKey>;\n\nconst workspaceFileManagerDefaults: Record<\n WorkspaceFileManagerI18nLocale,\n I18nDictionary\n> = {\n en: workspaceFileManagerEn,\n \"zh-CN\": workspaceFileManagerZhCN\n};\n\nexport const workspaceFileManagerI18nResources: Record<\n WorkspaceFileManagerI18nLocale,\n I18nDictionary\n> = {\n en: {\n [workspaceFileManagerI18nNamespace]: workspaceFileManagerDefaults.en\n },\n \"zh-CN\": {\n [workspaceFileManagerI18nNamespace]: workspaceFileManagerDefaults[\"zh-CN\"]\n }\n};\n\nexport function createWorkspaceFileManagerI18nRuntime(\n runtime: I18nRuntime<string>\n): WorkspaceFileManagerI18nRuntime {\n return createScopedI18nRuntime<WorkspaceFileManagerI18nKey>(\n runtime,\n workspaceFileManagerI18nNamespace\n );\n}\n\nexport function resolveRevealInFolderLabel(\n copy: WorkspaceFileManagerI18nRuntime,\n platform: NodeJS.Platform\n): string {\n if (platform === \"darwin\") {\n return copy.t(\"revealInFinderLabel\");\n }\n if (platform === \"win32\") {\n return copy.t(\"revealInFileExplorerLabel\");\n }\n return copy.t(\"revealInFileManagerLabel\");\n}\n"],"mappings":"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","names":[]}
@@ -307,7 +307,6 @@ function createWorkspaceFileManagerStore(input) {
307
307
  directoryExpansionByPath: {},
308
308
  inlineRenameEntryPath: null,
309
309
  inlineRenameValidation: null,
310
- dragDepth: 0,
311
310
  entries: [],
312
311
  error: null,
313
312
  expandedDirectoryPaths: {},
@@ -326,7 +325,6 @@ function createWorkspaceFileManagerStore(input) {
326
325
  selectedLocationId,
327
326
  selectedPath: null,
328
327
  unsupportedDialog: null,
329
- importConflictDialog: null,
330
328
  workspaceID: input.workspaceID
331
329
  });
332
330
  }
@@ -545,7 +543,6 @@ var WorkspaceFileManagerActivationController = class {
545
543
  this.store.unsupportedDialog = null;
546
544
  return;
547
545
  }
548
- this.store.importConflictDialog = null;
549
546
  this.store.unsupportedDialog = {
550
547
  actions: result.actions ?? null,
551
548
  entryPath: entry.path,
@@ -1037,119 +1034,6 @@ function resolveWorkspaceFileManagerPreviewReadonlyMessage(copy, reason, maxSize
1037
1034
  }
1038
1035
  }
1039
1036
 
1040
- // src/services/internal/workspaceFileManagerImportController.ts
1041
- var WorkspaceFileManagerImportController = class {
1042
- applyHostActionResult;
1043
- copy;
1044
- host;
1045
- refresh;
1046
- resolveErrorMessage;
1047
- store;
1048
- constructor(input) {
1049
- this.applyHostActionResult = input.applyHostActionResult;
1050
- this.copy = input.copy;
1051
- this.host = input.host;
1052
- this.refresh = input.refresh;
1053
- this.resolveErrorMessage = input.resolveErrorMessage;
1054
- this.store = input.store;
1055
- }
1056
- async confirmImportConflict() {
1057
- const importConflictDialog = this.store.importConflictDialog;
1058
- if (!importConflictDialog?.onConfirm) {
1059
- return;
1060
- }
1061
- this.store.busyAction = "import";
1062
- try {
1063
- const result = await importConflictDialog.onConfirm();
1064
- this.store.importConflictDialog = null;
1065
- this.applyHostActionResult(result, { kind: "import" });
1066
- } finally {
1067
- this.store.busyAction = null;
1068
- }
1069
- }
1070
- async importDroppedFiles(dataTransfer, targetDirectoryPath) {
1071
- if (!this.host.resolveDroppedPaths || !this.host.importPaths) {
1072
- const result = {
1073
- message: this.copy().t("unsupportedImportBody"),
1074
- supported: false,
1075
- title: this.copy().t("unsupportedImportTitle")
1076
- };
1077
- this.applyHostActionResult(result, { kind: "import" });
1078
- return result;
1079
- }
1080
- const sourcePaths = this.host.resolveDroppedPaths(dataTransfer);
1081
- if (sourcePaths.length === 0) {
1082
- return { supported: true };
1083
- }
1084
- this.store.busyAction = "import";
1085
- try {
1086
- const result = await this.wrapImportAction(
1087
- () => this.host.importPaths?.(
1088
- this.store.workspaceID,
1089
- targetDirectoryPath,
1090
- sourcePaths
1091
- ) ?? Promise.resolve({ supported: true })
1092
- );
1093
- this.applyHostActionResult(result, { kind: "import" });
1094
- return result;
1095
- } finally {
1096
- this.store.busyAction = null;
1097
- }
1098
- }
1099
- async importFiles(targetDirectoryPath) {
1100
- if (!this.host.importFiles) {
1101
- const result = {
1102
- message: this.copy().t("unsupportedImportBody"),
1103
- supported: false,
1104
- title: this.copy().t("unsupportedImportTitle")
1105
- };
1106
- this.applyHostActionResult(result, { kind: "import" });
1107
- return result;
1108
- }
1109
- this.store.busyAction = "import";
1110
- try {
1111
- const result = await this.wrapImportAction(
1112
- () => this.host.importFiles?.(
1113
- this.store.workspaceID,
1114
- targetDirectoryPath
1115
- ) ?? Promise.resolve({ supported: true })
1116
- );
1117
- this.applyHostActionResult(result, { kind: "import" });
1118
- return result;
1119
- } finally {
1120
- this.store.busyAction = null;
1121
- }
1122
- }
1123
- async wrapImportAction(action) {
1124
- try {
1125
- const result = await action();
1126
- if (result.importConflict) {
1127
- const importConflict = result.importConflict;
1128
- const importConflictConfirm = importConflict.onConfirm;
1129
- return {
1130
- ...result,
1131
- importConflict: {
1132
- ...importConflict,
1133
- onConfirm: importConflictConfirm ? async () => {
1134
- const confirmResult = await importConflictConfirm();
1135
- await this.refresh();
1136
- return confirmResult;
1137
- } : void 0
1138
- }
1139
- };
1140
- }
1141
- await this.refresh();
1142
- return result;
1143
- } catch (error) {
1144
- return {
1145
- message: this.resolveErrorMessage(error),
1146
- supported: false,
1147
- title: this.copy().t("importFailedTitle")
1148
- };
1149
- }
1150
- }
1151
- };
1152
-
1153
1037
  // src/services/internal/workspaceFileManagerTreeController.ts
1154
1038
  var WorkspaceFileManagerTreeController = class {
1155
1039
  host;
@@ -1257,7 +1141,6 @@ var DefaultWorkspaceFileManagerSession = class {
1257
1141
  lastObservedPersistedState;
1258
1142
  lastObservedSelectedPath;
1259
1143
  lastRevealRequestID = null;
1260
- onHostActionMessage;
1261
1144
  onMutationErrorMessage;
1262
1145
  searchRequestSeq = 0;
1263
1146
  activationController;
@@ -1268,12 +1151,10 @@ var DefaultWorkspaceFileManagerSession = class {
1268
1151
  treeController;
1269
1152
  persistence;
1270
1153
  unsubscribeStore = null;
1271
- importController;
1272
1154
  openWithApplicationsCache = new WorkspaceFileOpenWithApplicationsCache();
1273
1155
  constructor(input) {
1274
1156
  this.copy = input.copy;
1275
1157
  this.host = input.host;
1276
- this.onHostActionMessage = input.onHostActionMessage;
1277
1158
  this.onMutationErrorMessage = input.onMutationErrorMessage;
1278
1159
  this.persistence = input.persistence;
1279
1160
  this.store = input.store;
@@ -1308,14 +1189,6 @@ var DefaultWorkspaceFileManagerSession = class {
1308
1189
  resolveErrorMessage: (error, overrides) => this.resolveErrorMessage(error, overrides),
1309
1190
  store: this.store
1310
1191
  });
1311
- this.importController = new WorkspaceFileManagerImportController({
1312
- applyHostActionResult: (result, fallback) => this.applyHostActionResult(result, fallback),
1313
- copy: () => this.copy,
1314
- host: input.host,
1315
- refresh: () => this.refresh(),
1316
- resolveErrorMessage: (error) => this.resolveErrorMessage(error),
1317
- store: this.store
1318
- });
1319
1192
  this.lastObservedEntries = this.store.entries;
1320
1193
  this.lastObservedPersistedState = serializePersistedState(
1321
1194
  this.getPersistedState()
@@ -1333,7 +1206,7 @@ var DefaultWorkspaceFileManagerSession = class {
1333
1206
  return;
1334
1207
  }
1335
1208
  this.lastRevealRequestID = intent.requestID;
1336
- if (intent.mode === "open-directory") {
1209
+ if (intent.mode === "open") {
1337
1210
  await this.loadDirectory(intent.path);
1338
1211
  return;
1339
1212
  }
@@ -1373,7 +1246,6 @@ var DefaultWorkspaceFileManagerSession = class {
1373
1246
  this.store.inlineRenameEntryPath = null;
1374
1247
  this.store.inlineRenameValidation = null;
1375
1248
  this.store.unsupportedDialog = null;
1376
- this.store.importConflictDialog = null;
1377
1249
  }
1378
1250
  closeUnsupportedDialog() {
1379
1251
  if (this.store.busyAction === "view") {
@@ -1381,12 +1253,6 @@ var DefaultWorkspaceFileManagerSession = class {
1381
1253
  }
1382
1254
  this.store.unsupportedDialog = null;
1383
1255
  }
1384
- closeImportConflictDialog() {
1385
- if (this.store.busyAction === "import") {
1386
- return;
1387
- }
1388
- this.store.importConflictDialog = null;
1389
- }
1390
1256
  async confirmCreateDialog() {
1391
1257
  if (this.isReadOnlyLocationSelected()) {
1392
1258
  return;
@@ -1465,9 +1331,6 @@ var DefaultWorkspaceFileManagerSession = class {
1465
1331
  this.store.busyAction = null;
1466
1332
  }
1467
1333
  }
1468
- async confirmImportConflict() {
1469
- await this.importController.confirmImportConflict();
1470
- }
1471
1334
  async createDirectory(path) {
1472
1335
  if (this.isReadOnlyLocationSelected()) {
1473
1336
  return;
@@ -1486,9 +1349,6 @@ var DefaultWorkspaceFileManagerSession = class {
1486
1349
  }
1487
1350
  await this.mutationController.deleteSelected();
1488
1351
  }
1489
- decrementDragDepth() {
1490
- this.store.dragDepth = this.store.dragDepth <= 1 ? 0 : this.store.dragDepth - 1;
1491
- }
1492
1352
  dispose() {
1493
1353
  this.isDisposed = true;
1494
1354
  this.hasInitialized = false;
@@ -1514,45 +1374,6 @@ var DefaultWorkspaceFileManagerSession = class {
1514
1374
  async handleActivationFallbackAction(action) {
1515
1375
  await this.activationController.handleFallbackAction(action);
1516
1376
  }
1517
- async exportEntry(entry) {
1518
- if (!this.host.exportEntry) {
1519
- return { supported: false };
1520
- }
1521
- this.store.busyAction = "export";
1522
- this.store.error = null;
1523
- try {
1524
- const result = await this.host.exportEntry({
1525
- entry,
1526
- workspaceID: this.store.workspaceID
1527
- });
1528
- this.applyHostActionResult(result, {
1529
- actionKind: "export",
1530
- entry,
1531
- kind: "view"
1532
- });
1533
- return result;
1534
- } catch (error) {
1535
- const result = {
1536
- message: this.resolveErrorMessage(error),
1537
- supported: false,
1538
- title: this.copy.t("downloadFailedTitle")
1539
- };
1540
- this.applyHostActionResult(result, {
1541
- actionKind: "export",
1542
- entry,
1543
- kind: "view"
1544
- });
1545
- return result;
1546
- } finally {
1547
- this.store.busyAction = null;
1548
- }
1549
- }
1550
- incrementDragDepth() {
1551
- if (!this.isActive) {
1552
- return;
1553
- }
1554
- this.store.dragDepth += 1;
1555
- }
1556
1377
  async initialize() {
1557
1378
  if (this.hasInitialized) {
1558
1379
  return;
@@ -1764,9 +1585,6 @@ var DefaultWorkspaceFileManagerSession = class {
1764
1585
  await this.navigationController.revealPath(path);
1765
1586
  this.syncSelectedDirectoryLocation();
1766
1587
  }
1767
- resetDragDepth() {
1768
- this.store.dragDepth = 0;
1769
- }
1770
1588
  async search(query) {
1771
1589
  const requestID = ++this.searchRequestSeq;
1772
1590
  this.store.searchQuery = query;
@@ -1842,7 +1660,6 @@ var DefaultWorkspaceFileManagerSession = class {
1842
1660
  }
1843
1661
  this.store.contextMenu = null;
1844
1662
  this.store.contextMenuEntryPath = null;
1845
- this.store.dragDepth = 0;
1846
1663
  }
1847
1664
  setI18nRuntime(copy) {
1848
1665
  if (this.copy === copy) {
@@ -1892,44 +1709,6 @@ var DefaultWorkspaceFileManagerSession = class {
1892
1709
  clearInlineRenameValidation() {
1893
1710
  this.store.inlineRenameValidation = null;
1894
1711
  }
1895
- async importDroppedFiles(dataTransfer, targetDirectoryPath) {
1896
- if (this.isReadOnlyLocationSelected()) {
1897
- return { supported: false };
1898
- }
1899
- return this.importController.importDroppedFiles(
1900
- dataTransfer,
1901
- targetDirectoryPath
1902
- );
1903
- }
1904
- async importFiles(targetDirectoryPath) {
1905
- if (this.isReadOnlyLocationSelected()) {
1906
- return { supported: false };
1907
- }
1908
- return this.importController.importFiles(targetDirectoryPath);
1909
- }
1910
- applyHostActionResult(result, fallback) {
1911
- if (!result) {
1912
- return;
1913
- }
1914
- this.notifyHostActionMessages(result, fallback);
1915
- if (result.importConflict) {
1916
- this.store.unsupportedDialog = null;
1917
- this.store.importConflictDialog = result.importConflict;
1918
- return;
1919
- }
1920
- if (result.supported === false) {
1921
- this.store.importConflictDialog = null;
1922
- this.store.unsupportedDialog = {
1923
- entryPath: "entry" in fallback ? fallback.entry.path : null,
1924
- kind: fallback.kind,
1925
- message: result.message,
1926
- title: result.title
1927
- };
1928
- return;
1929
- }
1930
- this.store.unsupportedDialog = null;
1931
- this.store.importConflictDialog = null;
1932
- }
1933
1712
  hasLoadedDirectoryState() {
1934
1713
  return this.store.error !== null || this.store.entries.length > 0 || this.store.selectedPath !== null;
1935
1714
  }
@@ -2070,42 +1849,6 @@ var DefaultWorkspaceFileManagerSession = class {
2070
1849
  score: listing.entries.length - index
2071
1850
  }));
2072
1851
  }
2073
- notifyHostActionMessages(result, fallback) {
2074
- if (!this.onHostActionMessage) {
2075
- return;
2076
- }
2077
- const entry = "entry" in fallback ? fallback.entry : null;
2078
- const actionKind = fallback.actionKind ?? (fallback.kind === "import" ? "import" : "export");
2079
- if (result.cancelledMessage?.trim()) {
2080
- this.notifyHostActionMessage(actionKind, entry, "cancelled", result);
2081
- return;
2082
- }
2083
- if (result.supported === false || result.importConflict) {
2084
- return;
2085
- }
2086
- if (result.completedMessage?.trim()) {
2087
- this.notifyHostActionMessage(actionKind, entry, "completed", result);
2088
- return;
2089
- }
2090
- this.notifyHostActionMessage(actionKind, entry, "started", result);
2091
- }
2092
- notifyHostActionMessage(actionKind, entry, status, result) {
2093
- const messageByStatus = {
2094
- cancelled: "cancelledMessage",
2095
- completed: "completedMessage",
2096
- started: "startedMessage"
2097
- };
2098
- const message = result[messageByStatus[status]]?.trim();
2099
- if (!message) {
2100
- return;
2101
- }
2102
- this.onHostActionMessage?.({
2103
- actionKind,
2104
- entry,
2105
- message,
2106
- status
2107
- });
2108
- }
2109
1852
  observeStore() {
2110
1853
  if (this.unsubscribeStore) {
2111
1854
  return;
@@ -2196,7 +1939,6 @@ var DefaultWorkspaceFileManagerService = class {
2196
1939
  return new DefaultWorkspaceFileManagerSession({
2197
1940
  copy: input.i18n,
2198
1941
  host: input.host,
2199
- onHostActionMessage: input.onHostActionMessage,
2200
1942
  onMutationErrorMessage: input.onMutationErrorMessage,
2201
1943
  persistence: input.persistence,
2202
1944
  resolveFileDefaultOpener: input.resolveFileDefaultOpener,
@@ -2210,9 +1952,6 @@ function capabilitiesFromHost(input) {
2210
1952
  canCreateDirectory: input.host.createDirectory !== void 0,
2211
1953
  canCreateFile: input.host.createFile !== void 0,
2212
1954
  canDelete: input.host.deleteEntry !== void 0,
2213
- canExport: input.host.exportEntry !== void 0,
2214
- canImportFromDrop: input.host.resolveDroppedPaths !== void 0 && input.host.importPaths !== void 0,
2215
- canImportFromPicker: input.host.importFiles !== void 0,
2216
1955
  canMove: input.host.moveEntry !== void 0,
2217
1956
  canOpenInAppBrowser: input.host.openFileInAppBrowser !== void 0,
2218
1957
  canOpenInDefaultBrowser: input.host.openFileInDefaultBrowser !== void 0,
@@ -2229,55 +1968,12 @@ function createWorkspaceFileManagerService() {
2229
1968
  return new DefaultWorkspaceFileManagerService();
2230
1969
  }
2231
1970
 
2232
- // src/services/internal/model/openWithPolicy.ts
1971
+ // src/services/workspaceFileEntryIconPolicy.ts
2233
1972
  import {
2234
1973
  classifyWorkspaceFilePreviewKind,
2235
1974
  isTextDegradablePreviewKind,
2236
- isWorkspaceFileBrowserHtmlExtension,
2237
- isWorkspaceFileImageExtension,
2238
1975
  resolveWorkspaceFileExtension as resolveWorkspaceFileExtension2,
2239
- resolveWorkspaceFileVisualKind,
2240
- workspaceFileBrowserVideoExtensions
2241
- } from "@tutti-os/workspace-file-preview";
2242
- var workspaceFileVideoHandlerCollisionExtensions = /* @__PURE__ */ new Set(["ts"]);
2243
- function isWorkspaceFileBrowserOpenable(entry) {
2244
- if (entry.kind !== "file") {
2245
- return false;
2246
- }
2247
- const extension = resolveWorkspaceFileExtension2(
2248
- entry.path || entry.name || ""
2249
- );
2250
- if (extension === "pdf" || isWorkspaceFileBrowserHtmlExtension(extension) || isWorkspaceFileImageExtension(extension) || workspaceFileBrowserVideoExtensions.has(extension)) {
2251
- return true;
2252
- }
2253
- return isTextDegradablePreviewKind(classifyWorkspaceFilePreviewKind(entry));
2254
- }
2255
- function shouldFilterVideoPlayersForOpenWith(entry) {
2256
- if (entry.kind !== "file") {
2257
- return false;
2258
- }
2259
- const visualKind = resolveWorkspaceFileVisualKind(entry);
2260
- if (visualKind === "video") {
2261
- return false;
2262
- }
2263
- const extension = resolveWorkspaceFileExtension2(
2264
- entry.path || entry.name || ""
2265
- );
2266
- if (workspaceFileVideoHandlerCollisionExtensions.has(extension)) {
2267
- return true;
2268
- }
2269
- if (visualKind === "code" || visualKind === "markdown") {
2270
- return true;
2271
- }
2272
- return isTextDegradablePreviewKind(classifyWorkspaceFilePreviewKind(entry));
2273
- }
2274
-
2275
- // src/services/workspaceFileEntryIconPolicy.ts
2276
- import {
2277
- classifyWorkspaceFilePreviewKind as classifyWorkspaceFilePreviewKind2,
2278
- isTextDegradablePreviewKind as isTextDegradablePreviewKind2,
2279
- resolveWorkspaceFileExtension as resolveWorkspaceFileExtension3,
2280
- resolveWorkspaceFileVisualKind as resolveWorkspaceFileVisualKind2
1976
+ resolveWorkspaceFileVisualKind
2281
1977
  } from "@tutti-os/workspace-file-preview";
2282
1978
  var defaultApplicationIconExtensions = /* @__PURE__ */ new Set([
2283
1979
  "ai",
@@ -2320,13 +2016,13 @@ function shouldUseWorkspaceFileExtensionDocumentIcon(entry) {
2320
2016
  if (entry.kind !== "file") {
2321
2017
  return false;
2322
2018
  }
2323
- const visualKind = resolveWorkspaceFileVisualKind2(entry);
2324
- const extension = resolveWorkspaceFileExtension3(entry.name).toLowerCase();
2325
- return visualKind === "code" || visualKind === "markdown" || extensionDocumentIconExtensions.has(extension) || isTextDegradablePreviewKind2(classifyWorkspaceFilePreviewKind2(entry));
2019
+ const visualKind = resolveWorkspaceFileVisualKind(entry);
2020
+ const extension = resolveWorkspaceFileExtension2(entry.name).toLowerCase();
2021
+ return visualKind === "code" || visualKind === "markdown" || extensionDocumentIconExtensions.has(extension) || isTextDegradablePreviewKind(classifyWorkspaceFilePreviewKind(entry));
2326
2022
  }
2327
2023
  function shouldUseWorkspaceFileArchiveIcon(entry) {
2328
2024
  return entry.kind === "file" && archiveIconExtensions.has(
2329
- resolveWorkspaceFileExtension3(entry.name).toLowerCase()
2025
+ resolveWorkspaceFileExtension2(entry.name).toLowerCase()
2330
2026
  );
2331
2027
  }
2332
2028
  function isWorkspaceApplicationBundle(entry) {
@@ -2336,7 +2032,7 @@ function resolveWorkspaceFileDefaultApplicationIconExtension(entry) {
2336
2032
  if (entry.kind !== "file") {
2337
2033
  return null;
2338
2034
  }
2339
- const extension = resolveWorkspaceFileExtension3(entry.name).toLowerCase();
2035
+ const extension = resolveWorkspaceFileExtension2(entry.name).toLowerCase();
2340
2036
  return defaultApplicationIconExtensions.has(extension) ? extension : null;
2341
2037
  }
2342
2038
  function resolveWorkspaceFileEntryIconCacheKey(entry) {
@@ -2353,13 +2049,13 @@ function resolveWorkspaceFileEntryIconCacheKey(entry) {
2353
2049
  return `default:${entry.path}:${entry.mtimeMs ?? 0}`;
2354
2050
  }
2355
2051
  function shouldResolveWorkspaceFileImageThumbnail(entry) {
2356
- return entry.kind === "file" && resolveWorkspaceFileVisualKind2(entry) === "image";
2052
+ return entry.kind === "file" && resolveWorkspaceFileVisualKind(entry) === "image";
2357
2053
  }
2358
2054
 
2359
2055
  // src/ui/workspaceFileManagerArrangeMode.ts
2360
2056
  import {
2361
- resolveWorkspaceFileExtension as resolveWorkspaceFileExtension4,
2362
- resolveWorkspaceFileVisualKind as resolveWorkspaceFileVisualKind3
2057
+ resolveWorkspaceFileExtension as resolveWorkspaceFileExtension3,
2058
+ resolveWorkspaceFileVisualKind as resolveWorkspaceFileVisualKind2
2363
2059
  } from "@tutti-os/workspace-file-preview";
2364
2060
  var workspaceFileManagerArrangeModeStorageKey = "tutti.workspace-file-manager.arrange-mode";
2365
2061
  var workspaceFileManagerArrangeModes = /* @__PURE__ */ new Set([
@@ -2463,7 +2159,7 @@ function resolveEntryKindGroup(entry) {
2463
2159
  if (entry.kind === "directory") {
2464
2160
  return "directory";
2465
2161
  }
2466
- return resolveWorkspaceFileVisualKind3(entry);
2162
+ return resolveWorkspaceFileVisualKind2(entry);
2467
2163
  }
2468
2164
  function resolveEntryApplicationGroup(entry) {
2469
2165
  if (entry.kind === "directory") {
@@ -2472,11 +2168,10 @@ function resolveEntryApplicationGroup(entry) {
2472
2168
  if (entry.name.trim().toLowerCase().endsWith(".app")) {
2473
2169
  return "application";
2474
2170
  }
2475
- return resolveWorkspaceFileExtension4(entry.name) || resolveEntryKindGroup(entry);
2171
+ return resolveWorkspaceFileExtension3(entry.name) || resolveEntryKindGroup(entry);
2476
2172
  }
2477
2173
 
2478
2174
  export {
2479
- resolveWorkspaceFileActivationTarget,
2480
2175
  formatWorkspaceFileBytes,
2481
2176
  formatWorkspaceFileModifiedTime,
2482
2177
  splitWorkspaceFileName,
@@ -2493,9 +2188,6 @@ export {
2493
2188
  resolveWorkspaceFileOpenWithCacheKey,
2494
2189
  WorkspaceFileOpenWithApplicationsCache,
2495
2190
  createWorkspaceFileManagerService,
2496
- workspaceFileVideoHandlerCollisionExtensions,
2497
- isWorkspaceFileBrowserOpenable,
2498
- shouldFilterVideoPlayersForOpenWith,
2499
2191
  shouldResolveWorkspaceFileEntryIcon,
2500
2192
  shouldUseWorkspaceFileExtensionDocumentIcon,
2501
2193
  shouldUseWorkspaceFileArchiveIcon,
@@ -2507,4 +2199,4 @@ export {
2507
2199
  sortWorkspaceFileEntriesForArrangeMode,
2508
2200
  resolveWorkspaceFileEntryArrangeDateMs
2509
2201
  };
2510
- //# sourceMappingURL=chunk-P4SNEQWG.js.map
2202
+ //# sourceMappingURL=chunk-TNFCNCZV.js.map