@design.estate/dees-catalog 3.47.1 → 3.48.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist_bundle/bundle.js +4903 -2056
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-browser.d.ts +50 -0
  4. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-browser.demo.d.ts +2 -0
  5. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-browser.demo.js +148 -0
  6. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-browser.js +520 -0
  7. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-columns.d.ts +99 -0
  8. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-columns.js +1731 -0
  9. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-keys.d.ts +64 -0
  10. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-keys.js +1232 -0
  11. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-preview.d.ts +37 -0
  12. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-preview.js +626 -0
  13. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/index.d.ts +6 -0
  14. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/index.js +7 -0
  15. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/interfaces.d.ts +48 -0
  16. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/interfaces.js +5 -0
  17. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/utilities.d.ts +39 -0
  18. package/dist_ts_web/elements/00group-dataview/dees-storage-browser/utilities.js +109 -0
  19. package/dist_ts_web/elements/00group-dataview/index.d.ts +1 -0
  20. package/dist_ts_web/elements/00group-dataview/index.js +2 -1
  21. package/dist_watch/bundle.js +4928 -2090
  22. package/dist_watch/bundle.js.map +4 -4
  23. package/package.json +3 -3
  24. package/ts_web/00_commitinfo_data.ts +1 -1
  25. package/ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-browser.demo.ts +156 -0
  26. package/ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-browser.ts +439 -0
  27. package/ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-columns.ts +1652 -0
  28. package/ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-keys.ts +1094 -0
  29. package/ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-preview.ts +540 -0
  30. package/ts_web/elements/00group-dataview/dees-storage-browser/index.ts +6 -0
  31. package/ts_web/elements/00group-dataview/dees-storage-browser/interfaces.ts +37 -0
  32. package/ts_web/elements/00group-dataview/dees-storage-browser/utilities.ts +120 -0
  33. package/ts_web/elements/00group-dataview/index.ts +1 -0
@@ -0,0 +1,1232 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { customElement, html, css, cssManager, property, state, DeesElement } from '@design.estate/dees-element';
36
+ import { DeesContextmenu } from '../../00group-overlay/dees-contextmenu/dees-contextmenu.js';
37
+ import { themeDefaultStyles } from '../../00theme.js';
38
+ import { formatSize, getFileName, validateMove, getParentPrefix, getContentType, getDefaultContent, getPathSegments } from './utilities.js';
39
+ let DeesStorageKeys = (() => {
40
+ let _classDecorators = [customElement('dees-storage-keys')];
41
+ let _classDescriptor;
42
+ let _classExtraInitializers = [];
43
+ let _classThis;
44
+ let _classSuper = DeesElement;
45
+ let _dataProvider_decorators;
46
+ let _dataProvider_initializers = [];
47
+ let _dataProvider_extraInitializers = [];
48
+ let _bucketName_decorators;
49
+ let _bucketName_initializers = [];
50
+ let _bucketName_extraInitializers = [];
51
+ let _currentPrefix_decorators;
52
+ let _currentPrefix_initializers = [];
53
+ let _currentPrefix_extraInitializers = [];
54
+ let _refreshKey_decorators;
55
+ let _refreshKey_initializers = [];
56
+ let _refreshKey_extraInitializers = [];
57
+ let _allKeys_decorators;
58
+ let _allKeys_initializers = [];
59
+ let _allKeys_extraInitializers = [];
60
+ let _prefixes_decorators;
61
+ let _prefixes_initializers = [];
62
+ let _prefixes_extraInitializers = [];
63
+ let _loading_decorators;
64
+ let _loading_initializers = [];
65
+ let _loading_extraInitializers = [];
66
+ let _selectedKey_decorators;
67
+ let _selectedKey_initializers = [];
68
+ let _selectedKey_extraInitializers = [];
69
+ let _filterText_decorators;
70
+ let _filterText_initializers = [];
71
+ let _filterText_extraInitializers = [];
72
+ let _showCreateDialog_decorators;
73
+ let _showCreateDialog_initializers = [];
74
+ let _showCreateDialog_extraInitializers = [];
75
+ let _createDialogType_decorators;
76
+ let _createDialogType_initializers = [];
77
+ let _createDialogType_extraInitializers = [];
78
+ let _createDialogPrefix_decorators;
79
+ let _createDialogPrefix_initializers = [];
80
+ let _createDialogPrefix_extraInitializers = [];
81
+ let _createDialogName_decorators;
82
+ let _createDialogName_initializers = [];
83
+ let _createDialogName_extraInitializers = [];
84
+ let _showMoveDialog_decorators;
85
+ let _showMoveDialog_initializers = [];
86
+ let _showMoveDialog_extraInitializers = [];
87
+ let _moveSource_decorators;
88
+ let _moveSource_initializers = [];
89
+ let _moveSource_extraInitializers = [];
90
+ let _moveDestination_decorators;
91
+ let _moveDestination_initializers = [];
92
+ let _moveDestination_extraInitializers = [];
93
+ let _moveInProgress_decorators;
94
+ let _moveInProgress_initializers = [];
95
+ let _moveInProgress_extraInitializers = [];
96
+ let _moveError_decorators;
97
+ let _moveError_initializers = [];
98
+ let _moveError_extraInitializers = [];
99
+ let _showMovePickerDialog_decorators;
100
+ let _showMovePickerDialog_initializers = [];
101
+ let _showMovePickerDialog_extraInitializers = [];
102
+ let _movePickerSource_decorators;
103
+ let _movePickerSource_initializers = [];
104
+ let _movePickerSource_extraInitializers = [];
105
+ let _movePickerCurrentPrefix_decorators;
106
+ let _movePickerCurrentPrefix_initializers = [];
107
+ let _movePickerCurrentPrefix_extraInitializers = [];
108
+ let _movePickerPrefixes_decorators;
109
+ let _movePickerPrefixes_initializers = [];
110
+ let _movePickerPrefixes_extraInitializers = [];
111
+ let _movePickerLoading_decorators;
112
+ let _movePickerLoading_initializers = [];
113
+ let _movePickerLoading_extraInitializers = [];
114
+ let _showRenameDialog_decorators;
115
+ let _showRenameDialog_initializers = [];
116
+ let _showRenameDialog_extraInitializers = [];
117
+ let _renameSource_decorators;
118
+ let _renameSource_initializers = [];
119
+ let _renameSource_extraInitializers = [];
120
+ let _renameName_decorators;
121
+ let _renameName_initializers = [];
122
+ let _renameName_extraInitializers = [];
123
+ let _renameInProgress_decorators;
124
+ let _renameInProgress_initializers = [];
125
+ let _renameInProgress_extraInitializers = [];
126
+ let _renameError_decorators;
127
+ let _renameError_initializers = [];
128
+ let _renameError_extraInitializers = [];
129
+ var DeesStorageKeys = class extends _classSuper {
130
+ static { _classThis = this; }
131
+ static {
132
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
133
+ _dataProvider_decorators = [property({ type: Object })];
134
+ _bucketName_decorators = [property({ type: String })];
135
+ _currentPrefix_decorators = [property({ type: String })];
136
+ _refreshKey_decorators = [property({ type: Number })];
137
+ _allKeys_decorators = [state()];
138
+ _prefixes_decorators = [state()];
139
+ _loading_decorators = [state()];
140
+ _selectedKey_decorators = [state()];
141
+ _filterText_decorators = [state()];
142
+ _showCreateDialog_decorators = [state()];
143
+ _createDialogType_decorators = [state()];
144
+ _createDialogPrefix_decorators = [state()];
145
+ _createDialogName_decorators = [state()];
146
+ _showMoveDialog_decorators = [state()];
147
+ _moveSource_decorators = [state()];
148
+ _moveDestination_decorators = [state()];
149
+ _moveInProgress_decorators = [state()];
150
+ _moveError_decorators = [state()];
151
+ _showMovePickerDialog_decorators = [state()];
152
+ _movePickerSource_decorators = [state()];
153
+ _movePickerCurrentPrefix_decorators = [state()];
154
+ _movePickerPrefixes_decorators = [state()];
155
+ _movePickerLoading_decorators = [state()];
156
+ _showRenameDialog_decorators = [state()];
157
+ _renameSource_decorators = [state()];
158
+ _renameName_decorators = [state()];
159
+ _renameInProgress_decorators = [state()];
160
+ _renameError_decorators = [state()];
161
+ __esDecorate(this, null, _dataProvider_decorators, { kind: "accessor", name: "dataProvider", static: false, private: false, access: { has: obj => "dataProvider" in obj, get: obj => obj.dataProvider, set: (obj, value) => { obj.dataProvider = value; } }, metadata: _metadata }, _dataProvider_initializers, _dataProvider_extraInitializers);
162
+ __esDecorate(this, null, _bucketName_decorators, { kind: "accessor", name: "bucketName", static: false, private: false, access: { has: obj => "bucketName" in obj, get: obj => obj.bucketName, set: (obj, value) => { obj.bucketName = value; } }, metadata: _metadata }, _bucketName_initializers, _bucketName_extraInitializers);
163
+ __esDecorate(this, null, _currentPrefix_decorators, { kind: "accessor", name: "currentPrefix", static: false, private: false, access: { has: obj => "currentPrefix" in obj, get: obj => obj.currentPrefix, set: (obj, value) => { obj.currentPrefix = value; } }, metadata: _metadata }, _currentPrefix_initializers, _currentPrefix_extraInitializers);
164
+ __esDecorate(this, null, _refreshKey_decorators, { kind: "accessor", name: "refreshKey", static: false, private: false, access: { has: obj => "refreshKey" in obj, get: obj => obj.refreshKey, set: (obj, value) => { obj.refreshKey = value; } }, metadata: _metadata }, _refreshKey_initializers, _refreshKey_extraInitializers);
165
+ __esDecorate(this, null, _allKeys_decorators, { kind: "accessor", name: "allKeys", static: false, private: false, access: { has: obj => "allKeys" in obj, get: obj => obj.allKeys, set: (obj, value) => { obj.allKeys = value; } }, metadata: _metadata }, _allKeys_initializers, _allKeys_extraInitializers);
166
+ __esDecorate(this, null, _prefixes_decorators, { kind: "accessor", name: "prefixes", static: false, private: false, access: { has: obj => "prefixes" in obj, get: obj => obj.prefixes, set: (obj, value) => { obj.prefixes = value; } }, metadata: _metadata }, _prefixes_initializers, _prefixes_extraInitializers);
167
+ __esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
168
+ __esDecorate(this, null, _selectedKey_decorators, { kind: "accessor", name: "selectedKey", static: false, private: false, access: { has: obj => "selectedKey" in obj, get: obj => obj.selectedKey, set: (obj, value) => { obj.selectedKey = value; } }, metadata: _metadata }, _selectedKey_initializers, _selectedKey_extraInitializers);
169
+ __esDecorate(this, null, _filterText_decorators, { kind: "accessor", name: "filterText", static: false, private: false, access: { has: obj => "filterText" in obj, get: obj => obj.filterText, set: (obj, value) => { obj.filterText = value; } }, metadata: _metadata }, _filterText_initializers, _filterText_extraInitializers);
170
+ __esDecorate(this, null, _showCreateDialog_decorators, { kind: "accessor", name: "showCreateDialog", static: false, private: false, access: { has: obj => "showCreateDialog" in obj, get: obj => obj.showCreateDialog, set: (obj, value) => { obj.showCreateDialog = value; } }, metadata: _metadata }, _showCreateDialog_initializers, _showCreateDialog_extraInitializers);
171
+ __esDecorate(this, null, _createDialogType_decorators, { kind: "accessor", name: "createDialogType", static: false, private: false, access: { has: obj => "createDialogType" in obj, get: obj => obj.createDialogType, set: (obj, value) => { obj.createDialogType = value; } }, metadata: _metadata }, _createDialogType_initializers, _createDialogType_extraInitializers);
172
+ __esDecorate(this, null, _createDialogPrefix_decorators, { kind: "accessor", name: "createDialogPrefix", static: false, private: false, access: { has: obj => "createDialogPrefix" in obj, get: obj => obj.createDialogPrefix, set: (obj, value) => { obj.createDialogPrefix = value; } }, metadata: _metadata }, _createDialogPrefix_initializers, _createDialogPrefix_extraInitializers);
173
+ __esDecorate(this, null, _createDialogName_decorators, { kind: "accessor", name: "createDialogName", static: false, private: false, access: { has: obj => "createDialogName" in obj, get: obj => obj.createDialogName, set: (obj, value) => { obj.createDialogName = value; } }, metadata: _metadata }, _createDialogName_initializers, _createDialogName_extraInitializers);
174
+ __esDecorate(this, null, _showMoveDialog_decorators, { kind: "accessor", name: "showMoveDialog", static: false, private: false, access: { has: obj => "showMoveDialog" in obj, get: obj => obj.showMoveDialog, set: (obj, value) => { obj.showMoveDialog = value; } }, metadata: _metadata }, _showMoveDialog_initializers, _showMoveDialog_extraInitializers);
175
+ __esDecorate(this, null, _moveSource_decorators, { kind: "accessor", name: "moveSource", static: false, private: false, access: { has: obj => "moveSource" in obj, get: obj => obj.moveSource, set: (obj, value) => { obj.moveSource = value; } }, metadata: _metadata }, _moveSource_initializers, _moveSource_extraInitializers);
176
+ __esDecorate(this, null, _moveDestination_decorators, { kind: "accessor", name: "moveDestination", static: false, private: false, access: { has: obj => "moveDestination" in obj, get: obj => obj.moveDestination, set: (obj, value) => { obj.moveDestination = value; } }, metadata: _metadata }, _moveDestination_initializers, _moveDestination_extraInitializers);
177
+ __esDecorate(this, null, _moveInProgress_decorators, { kind: "accessor", name: "moveInProgress", static: false, private: false, access: { has: obj => "moveInProgress" in obj, get: obj => obj.moveInProgress, set: (obj, value) => { obj.moveInProgress = value; } }, metadata: _metadata }, _moveInProgress_initializers, _moveInProgress_extraInitializers);
178
+ __esDecorate(this, null, _moveError_decorators, { kind: "accessor", name: "moveError", static: false, private: false, access: { has: obj => "moveError" in obj, get: obj => obj.moveError, set: (obj, value) => { obj.moveError = value; } }, metadata: _metadata }, _moveError_initializers, _moveError_extraInitializers);
179
+ __esDecorate(this, null, _showMovePickerDialog_decorators, { kind: "accessor", name: "showMovePickerDialog", static: false, private: false, access: { has: obj => "showMovePickerDialog" in obj, get: obj => obj.showMovePickerDialog, set: (obj, value) => { obj.showMovePickerDialog = value; } }, metadata: _metadata }, _showMovePickerDialog_initializers, _showMovePickerDialog_extraInitializers);
180
+ __esDecorate(this, null, _movePickerSource_decorators, { kind: "accessor", name: "movePickerSource", static: false, private: false, access: { has: obj => "movePickerSource" in obj, get: obj => obj.movePickerSource, set: (obj, value) => { obj.movePickerSource = value; } }, metadata: _metadata }, _movePickerSource_initializers, _movePickerSource_extraInitializers);
181
+ __esDecorate(this, null, _movePickerCurrentPrefix_decorators, { kind: "accessor", name: "movePickerCurrentPrefix", static: false, private: false, access: { has: obj => "movePickerCurrentPrefix" in obj, get: obj => obj.movePickerCurrentPrefix, set: (obj, value) => { obj.movePickerCurrentPrefix = value; } }, metadata: _metadata }, _movePickerCurrentPrefix_initializers, _movePickerCurrentPrefix_extraInitializers);
182
+ __esDecorate(this, null, _movePickerPrefixes_decorators, { kind: "accessor", name: "movePickerPrefixes", static: false, private: false, access: { has: obj => "movePickerPrefixes" in obj, get: obj => obj.movePickerPrefixes, set: (obj, value) => { obj.movePickerPrefixes = value; } }, metadata: _metadata }, _movePickerPrefixes_initializers, _movePickerPrefixes_extraInitializers);
183
+ __esDecorate(this, null, _movePickerLoading_decorators, { kind: "accessor", name: "movePickerLoading", static: false, private: false, access: { has: obj => "movePickerLoading" in obj, get: obj => obj.movePickerLoading, set: (obj, value) => { obj.movePickerLoading = value; } }, metadata: _metadata }, _movePickerLoading_initializers, _movePickerLoading_extraInitializers);
184
+ __esDecorate(this, null, _showRenameDialog_decorators, { kind: "accessor", name: "showRenameDialog", static: false, private: false, access: { has: obj => "showRenameDialog" in obj, get: obj => obj.showRenameDialog, set: (obj, value) => { obj.showRenameDialog = value; } }, metadata: _metadata }, _showRenameDialog_initializers, _showRenameDialog_extraInitializers);
185
+ __esDecorate(this, null, _renameSource_decorators, { kind: "accessor", name: "renameSource", static: false, private: false, access: { has: obj => "renameSource" in obj, get: obj => obj.renameSource, set: (obj, value) => { obj.renameSource = value; } }, metadata: _metadata }, _renameSource_initializers, _renameSource_extraInitializers);
186
+ __esDecorate(this, null, _renameName_decorators, { kind: "accessor", name: "renameName", static: false, private: false, access: { has: obj => "renameName" in obj, get: obj => obj.renameName, set: (obj, value) => { obj.renameName = value; } }, metadata: _metadata }, _renameName_initializers, _renameName_extraInitializers);
187
+ __esDecorate(this, null, _renameInProgress_decorators, { kind: "accessor", name: "renameInProgress", static: false, private: false, access: { has: obj => "renameInProgress" in obj, get: obj => obj.renameInProgress, set: (obj, value) => { obj.renameInProgress = value; } }, metadata: _metadata }, _renameInProgress_initializers, _renameInProgress_extraInitializers);
188
+ __esDecorate(this, null, _renameError_decorators, { kind: "accessor", name: "renameError", static: false, private: false, access: { has: obj => "renameError" in obj, get: obj => obj.renameError, set: (obj, value) => { obj.renameError = value; } }, metadata: _metadata }, _renameError_initializers, _renameError_extraInitializers);
189
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
190
+ DeesStorageKeys = _classThis = _classDescriptor.value;
191
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
192
+ }
193
+ #dataProvider_accessor_storage = __runInitializers(this, _dataProvider_initializers, null);
194
+ get dataProvider() { return this.#dataProvider_accessor_storage; }
195
+ set dataProvider(value) { this.#dataProvider_accessor_storage = value; }
196
+ #bucketName_accessor_storage = (__runInitializers(this, _dataProvider_extraInitializers), __runInitializers(this, _bucketName_initializers, ''));
197
+ get bucketName() { return this.#bucketName_accessor_storage; }
198
+ set bucketName(value) { this.#bucketName_accessor_storage = value; }
199
+ #currentPrefix_accessor_storage = (__runInitializers(this, _bucketName_extraInitializers), __runInitializers(this, _currentPrefix_initializers, ''));
200
+ get currentPrefix() { return this.#currentPrefix_accessor_storage; }
201
+ set currentPrefix(value) { this.#currentPrefix_accessor_storage = value; }
202
+ #refreshKey_accessor_storage = (__runInitializers(this, _currentPrefix_extraInitializers), __runInitializers(this, _refreshKey_initializers, 0));
203
+ get refreshKey() { return this.#refreshKey_accessor_storage; }
204
+ set refreshKey(value) { this.#refreshKey_accessor_storage = value; }
205
+ #allKeys_accessor_storage = (__runInitializers(this, _refreshKey_extraInitializers), __runInitializers(this, _allKeys_initializers, []));
206
+ get allKeys() { return this.#allKeys_accessor_storage; }
207
+ set allKeys(value) { this.#allKeys_accessor_storage = value; }
208
+ #prefixes_accessor_storage = (__runInitializers(this, _allKeys_extraInitializers), __runInitializers(this, _prefixes_initializers, []));
209
+ get prefixes() { return this.#prefixes_accessor_storage; }
210
+ set prefixes(value) { this.#prefixes_accessor_storage = value; }
211
+ #loading_accessor_storage = (__runInitializers(this, _prefixes_extraInitializers), __runInitializers(this, _loading_initializers, false));
212
+ get loading() { return this.#loading_accessor_storage; }
213
+ set loading(value) { this.#loading_accessor_storage = value; }
214
+ #selectedKey_accessor_storage = (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _selectedKey_initializers, ''));
215
+ get selectedKey() { return this.#selectedKey_accessor_storage; }
216
+ set selectedKey(value) { this.#selectedKey_accessor_storage = value; }
217
+ #filterText_accessor_storage = (__runInitializers(this, _selectedKey_extraInitializers), __runInitializers(this, _filterText_initializers, ''));
218
+ get filterText() { return this.#filterText_accessor_storage; }
219
+ set filterText(value) { this.#filterText_accessor_storage = value; }
220
+ #showCreateDialog_accessor_storage = (__runInitializers(this, _filterText_extraInitializers), __runInitializers(this, _showCreateDialog_initializers, false));
221
+ get showCreateDialog() { return this.#showCreateDialog_accessor_storage; }
222
+ set showCreateDialog(value) { this.#showCreateDialog_accessor_storage = value; }
223
+ #createDialogType_accessor_storage = (__runInitializers(this, _showCreateDialog_extraInitializers), __runInitializers(this, _createDialogType_initializers, 'folder'));
224
+ get createDialogType() { return this.#createDialogType_accessor_storage; }
225
+ set createDialogType(value) { this.#createDialogType_accessor_storage = value; }
226
+ #createDialogPrefix_accessor_storage = (__runInitializers(this, _createDialogType_extraInitializers), __runInitializers(this, _createDialogPrefix_initializers, ''));
227
+ get createDialogPrefix() { return this.#createDialogPrefix_accessor_storage; }
228
+ set createDialogPrefix(value) { this.#createDialogPrefix_accessor_storage = value; }
229
+ #createDialogName_accessor_storage = (__runInitializers(this, _createDialogPrefix_extraInitializers), __runInitializers(this, _createDialogName_initializers, ''));
230
+ get createDialogName() { return this.#createDialogName_accessor_storage; }
231
+ set createDialogName(value) { this.#createDialogName_accessor_storage = value; }
232
+ #showMoveDialog_accessor_storage = (__runInitializers(this, _createDialogName_extraInitializers), __runInitializers(this, _showMoveDialog_initializers, false));
233
+ // Move dialog state
234
+ get showMoveDialog() { return this.#showMoveDialog_accessor_storage; }
235
+ set showMoveDialog(value) { this.#showMoveDialog_accessor_storage = value; }
236
+ #moveSource_accessor_storage = (__runInitializers(this, _showMoveDialog_extraInitializers), __runInitializers(this, _moveSource_initializers, null));
237
+ get moveSource() { return this.#moveSource_accessor_storage; }
238
+ set moveSource(value) { this.#moveSource_accessor_storage = value; }
239
+ #moveDestination_accessor_storage = (__runInitializers(this, _moveSource_extraInitializers), __runInitializers(this, _moveDestination_initializers, ''));
240
+ get moveDestination() { return this.#moveDestination_accessor_storage; }
241
+ set moveDestination(value) { this.#moveDestination_accessor_storage = value; }
242
+ #moveInProgress_accessor_storage = (__runInitializers(this, _moveDestination_extraInitializers), __runInitializers(this, _moveInProgress_initializers, false));
243
+ get moveInProgress() { return this.#moveInProgress_accessor_storage; }
244
+ set moveInProgress(value) { this.#moveInProgress_accessor_storage = value; }
245
+ #moveError_accessor_storage = (__runInitializers(this, _moveInProgress_extraInitializers), __runInitializers(this, _moveError_initializers, null));
246
+ get moveError() { return this.#moveError_accessor_storage; }
247
+ set moveError(value) { this.#moveError_accessor_storage = value; }
248
+ #showMovePickerDialog_accessor_storage = (__runInitializers(this, _moveError_extraInitializers), __runInitializers(this, _showMovePickerDialog_initializers, false));
249
+ // Move picker dialog state
250
+ get showMovePickerDialog() { return this.#showMovePickerDialog_accessor_storage; }
251
+ set showMovePickerDialog(value) { this.#showMovePickerDialog_accessor_storage = value; }
252
+ #movePickerSource_accessor_storage = (__runInitializers(this, _showMovePickerDialog_extraInitializers), __runInitializers(this, _movePickerSource_initializers, null));
253
+ get movePickerSource() { return this.#movePickerSource_accessor_storage; }
254
+ set movePickerSource(value) { this.#movePickerSource_accessor_storage = value; }
255
+ #movePickerCurrentPrefix_accessor_storage = (__runInitializers(this, _movePickerSource_extraInitializers), __runInitializers(this, _movePickerCurrentPrefix_initializers, ''));
256
+ get movePickerCurrentPrefix() { return this.#movePickerCurrentPrefix_accessor_storage; }
257
+ set movePickerCurrentPrefix(value) { this.#movePickerCurrentPrefix_accessor_storage = value; }
258
+ #movePickerPrefixes_accessor_storage = (__runInitializers(this, _movePickerCurrentPrefix_extraInitializers), __runInitializers(this, _movePickerPrefixes_initializers, []));
259
+ get movePickerPrefixes() { return this.#movePickerPrefixes_accessor_storage; }
260
+ set movePickerPrefixes(value) { this.#movePickerPrefixes_accessor_storage = value; }
261
+ #movePickerLoading_accessor_storage = (__runInitializers(this, _movePickerPrefixes_extraInitializers), __runInitializers(this, _movePickerLoading_initializers, false));
262
+ get movePickerLoading() { return this.#movePickerLoading_accessor_storage; }
263
+ set movePickerLoading(value) { this.#movePickerLoading_accessor_storage = value; }
264
+ #showRenameDialog_accessor_storage = (__runInitializers(this, _movePickerLoading_extraInitializers), __runInitializers(this, _showRenameDialog_initializers, false));
265
+ // Rename dialog state
266
+ get showRenameDialog() { return this.#showRenameDialog_accessor_storage; }
267
+ set showRenameDialog(value) { this.#showRenameDialog_accessor_storage = value; }
268
+ #renameSource_accessor_storage = (__runInitializers(this, _showRenameDialog_extraInitializers), __runInitializers(this, _renameSource_initializers, null));
269
+ get renameSource() { return this.#renameSource_accessor_storage; }
270
+ set renameSource(value) { this.#renameSource_accessor_storage = value; }
271
+ #renameName_accessor_storage = (__runInitializers(this, _renameSource_extraInitializers), __runInitializers(this, _renameName_initializers, ''));
272
+ get renameName() { return this.#renameName_accessor_storage; }
273
+ set renameName(value) { this.#renameName_accessor_storage = value; }
274
+ #renameInProgress_accessor_storage = (__runInitializers(this, _renameName_extraInitializers), __runInitializers(this, _renameInProgress_initializers, false));
275
+ get renameInProgress() { return this.#renameInProgress_accessor_storage; }
276
+ set renameInProgress(value) { this.#renameInProgress_accessor_storage = value; }
277
+ #renameError_accessor_storage = (__runInitializers(this, _renameInProgress_extraInitializers), __runInitializers(this, _renameError_initializers, null));
278
+ get renameError() { return this.#renameError_accessor_storage; }
279
+ set renameError(value) { this.#renameError_accessor_storage = value; }
280
+ static styles = [
281
+ cssManager.defaultStyles,
282
+ themeDefaultStyles,
283
+ css `
284
+ :host {
285
+ display: block;
286
+ height: 100%;
287
+ overflow: hidden;
288
+ }
289
+
290
+ .keys-container {
291
+ display: flex;
292
+ flex-direction: column;
293
+ height: 100%;
294
+ }
295
+
296
+ .filter-bar {
297
+ padding: 12px;
298
+ border-bottom: 1px solid ${cssManager.bdTheme('#e5e7eb', '#333')};
299
+ }
300
+
301
+ .filter-input {
302
+ width: 100%;
303
+ padding: 8px 12px;
304
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.03)', 'rgba(0, 0, 0, 0.3)')};
305
+ border: 1px solid ${cssManager.bdTheme('#d4d4d8', '#444')};
306
+ border-radius: 6px;
307
+ color: ${cssManager.bdTheme('#18181b', '#fff')};
308
+ font-size: 14px;
309
+ }
310
+
311
+ .filter-input:focus {
312
+ outline: none;
313
+ border-color: ${cssManager.bdTheme('#a1a1aa', '#404040')};
314
+ }
315
+
316
+ .filter-input::placeholder {
317
+ color: ${cssManager.bdTheme('#a1a1aa', '#666')};
318
+ }
319
+
320
+ .keys-list {
321
+ flex: 1;
322
+ overflow-y: auto;
323
+ }
324
+
325
+ table {
326
+ width: 100%;
327
+ border-collapse: collapse;
328
+ }
329
+
330
+ thead {
331
+ position: sticky;
332
+ top: 0;
333
+ background: ${cssManager.bdTheme('#fafafa', '#1a1a1a')};
334
+ z-index: 1;
335
+ }
336
+
337
+ th {
338
+ text-align: left;
339
+ padding: 10px 12px;
340
+ font-size: 12px;
341
+ font-weight: 500;
342
+ color: ${cssManager.bdTheme('#71717a', '#666')};
343
+ text-transform: uppercase;
344
+ border-bottom: 1px solid ${cssManager.bdTheme('#e5e7eb', '#333')};
345
+ }
346
+
347
+ td {
348
+ padding: 8px 12px;
349
+ font-size: 13px;
350
+ border-bottom: 1px solid ${cssManager.bdTheme('#f4f4f5', '#2a2a3e')};
351
+ }
352
+
353
+ tr:hover td {
354
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.02)', 'rgba(255, 255, 255, 0.03)')};
355
+ }
356
+
357
+ tr.selected td {
358
+ background: ${cssManager.bdTheme('rgba(59, 130, 246, 0.08)', 'rgba(255, 255, 255, 0.08)')};
359
+ }
360
+
361
+ .key-cell {
362
+ display: flex;
363
+ align-items: center;
364
+ gap: 8px;
365
+ cursor: pointer;
366
+ }
367
+
368
+ .key-icon {
369
+ width: 16px;
370
+ height: 16px;
371
+ flex-shrink: 0;
372
+ }
373
+
374
+ .folder-icon {
375
+ color: #fbbf24;
376
+ }
377
+
378
+ .key-name {
379
+ white-space: nowrap;
380
+ overflow: hidden;
381
+ text-overflow: ellipsis;
382
+ }
383
+
384
+ .size-cell {
385
+ color: ${cssManager.bdTheme('#71717a', '#888')};
386
+ font-variant-numeric: tabular-nums;
387
+ }
388
+
389
+ .empty-state {
390
+ padding: 32px;
391
+ text-align: center;
392
+ color: ${cssManager.bdTheme('#a1a1aa', '#666')};
393
+ }
394
+
395
+ .dialog-overlay {
396
+ position: fixed;
397
+ top: 0;
398
+ left: 0;
399
+ right: 0;
400
+ bottom: 0;
401
+ background: rgba(0, 0, 0, 0.7);
402
+ display: flex;
403
+ align-items: center;
404
+ justify-content: center;
405
+ z-index: 1000;
406
+ }
407
+
408
+ .dialog {
409
+ background: ${cssManager.bdTheme('#ffffff', '#1e1e1e')};
410
+ border-radius: 12px;
411
+ padding: 24px;
412
+ min-width: 400px;
413
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.5);
414
+ }
415
+
416
+ .dialog-title {
417
+ font-size: 18px;
418
+ font-weight: 600;
419
+ margin-bottom: 16px;
420
+ color: ${cssManager.bdTheme('#18181b', '#fff')};
421
+ }
422
+
423
+ .dialog-location {
424
+ font-size: 12px;
425
+ color: ${cssManager.bdTheme('#71717a', '#888')};
426
+ margin-bottom: 12px;
427
+ font-family: monospace;
428
+ }
429
+
430
+ .dialog-input {
431
+ width: 100%;
432
+ padding: 10px 12px;
433
+ background: ${cssManager.bdTheme('#f4f4f5', '#141414')};
434
+ border: 1px solid ${cssManager.bdTheme('#d4d4d8', '#333')};
435
+ border-radius: 6px;
436
+ color: ${cssManager.bdTheme('#18181b', '#fff')};
437
+ font-size: 14px;
438
+ margin-bottom: 8px;
439
+ box-sizing: border-box;
440
+ }
441
+
442
+ .dialog-input:focus {
443
+ outline: none;
444
+ border-color: ${cssManager.bdTheme('#a1a1aa', '#e0e0e0')};
445
+ }
446
+
447
+ .dialog-hint {
448
+ font-size: 11px;
449
+ color: ${cssManager.bdTheme('#a1a1aa', '#666')};
450
+ margin-bottom: 16px;
451
+ }
452
+
453
+ .dialog-actions {
454
+ display: flex;
455
+ gap: 12px;
456
+ justify-content: flex-end;
457
+ }
458
+
459
+ .dialog-btn {
460
+ padding: 8px 16px;
461
+ border-radius: 6px;
462
+ font-size: 14px;
463
+ cursor: pointer;
464
+ transition: all 0.2s;
465
+ }
466
+
467
+ .dialog-btn-cancel {
468
+ background: transparent;
469
+ border: 1px solid ${cssManager.bdTheme('#d4d4d8', '#444')};
470
+ color: ${cssManager.bdTheme('#71717a', '#aaa')};
471
+ }
472
+
473
+ .dialog-btn-cancel:hover {
474
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.03)', 'rgba(255, 255, 255, 0.05)')};
475
+ color: ${cssManager.bdTheme('#18181b', '#fff')};
476
+ }
477
+
478
+ .dialog-btn-create {
479
+ background: ${cssManager.bdTheme('#e5e7eb', '#404040')};
480
+ border: none;
481
+ color: ${cssManager.bdTheme('#18181b', '#fff')};
482
+ }
483
+
484
+ .dialog-btn-create:hover {
485
+ background: ${cssManager.bdTheme('#d4d4d8', '#505050')};
486
+ }
487
+
488
+ .dialog-btn-create:disabled {
489
+ opacity: 0.5;
490
+ cursor: not-allowed;
491
+ }
492
+
493
+ /* Move dialog styles */
494
+ .move-summary {
495
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.03)', 'rgba(0, 0, 0, 0.2)')};
496
+ border-radius: 8px;
497
+ padding: 16px;
498
+ margin-bottom: 16px;
499
+ }
500
+
501
+ .move-item {
502
+ display: flex;
503
+ gap: 8px;
504
+ margin-bottom: 8px;
505
+ }
506
+
507
+ .move-item:last-child {
508
+ margin-bottom: 0;
509
+ }
510
+
511
+ .move-label {
512
+ color: ${cssManager.bdTheme('#71717a', '#888')};
513
+ min-width: 40px;
514
+ }
515
+
516
+ .move-path {
517
+ color: ${cssManager.bdTheme('#3f3f46', '#e0e0e0')};
518
+ font-family: monospace;
519
+ font-size: 12px;
520
+ word-break: break-all;
521
+ }
522
+
523
+ .move-error {
524
+ background: rgba(239, 68, 68, 0.15);
525
+ border: 1px solid rgba(239, 68, 68, 0.3);
526
+ color: #f87171;
527
+ padding: 12px 16px;
528
+ border-radius: 8px;
529
+ margin-bottom: 16px;
530
+ font-size: 13px;
531
+ }
532
+
533
+ /* Move picker dialog styles */
534
+ .move-picker-dialog {
535
+ min-width: 450px;
536
+ max-height: 500px;
537
+ }
538
+
539
+ .picker-breadcrumb {
540
+ display: flex;
541
+ align-items: center;
542
+ gap: 4px;
543
+ padding: 8px 12px;
544
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.03)', 'rgba(0, 0, 0, 0.2)')};
545
+ border-radius: 6px;
546
+ margin-bottom: 12px;
547
+ font-size: 12px;
548
+ overflow-x: auto;
549
+ }
550
+
551
+ .picker-crumb {
552
+ color: ${cssManager.bdTheme('#71717a', '#888')};
553
+ cursor: pointer;
554
+ white-space: nowrap;
555
+ }
556
+
557
+ .picker-crumb:hover {
558
+ color: ${cssManager.bdTheme('#18181b', '#fff')};
559
+ }
560
+
561
+ .picker-separator {
562
+ color: ${cssManager.bdTheme('#d4d4d8', '#555')};
563
+ }
564
+
565
+ .picker-list {
566
+ max-height: 280px;
567
+ overflow-y: auto;
568
+ border: 1px solid ${cssManager.bdTheme('#e5e7eb', '#333')};
569
+ border-radius: 6px;
570
+ margin-bottom: 16px;
571
+ min-height: 100px;
572
+ }
573
+
574
+ .picker-item {
575
+ display: flex;
576
+ align-items: center;
577
+ gap: 8px;
578
+ padding: 8px 12px;
579
+ cursor: pointer;
580
+ color: #fbbf24;
581
+ }
582
+
583
+ .picker-item:hover {
584
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.03)', 'rgba(255, 255, 255, 0.05)')};
585
+ }
586
+
587
+ .picker-item .icon {
588
+ width: 16px;
589
+ height: 16px;
590
+ flex-shrink: 0;
591
+ }
592
+
593
+ .picker-item .name {
594
+ flex: 1;
595
+ overflow: hidden;
596
+ text-overflow: ellipsis;
597
+ white-space: nowrap;
598
+ }
599
+
600
+ .picker-empty {
601
+ padding: 24px;
602
+ text-align: center;
603
+ color: ${cssManager.bdTheme('#a1a1aa', '#666')};
604
+ font-size: 13px;
605
+ }
606
+ `,
607
+ ];
608
+ async connectedCallback() {
609
+ super.connectedCallback();
610
+ await this.loadObjects();
611
+ }
612
+ updated(changedProperties) {
613
+ if (changedProperties.has('bucketName') || changedProperties.has('currentPrefix') || changedProperties.has('refreshKey')) {
614
+ this.loadObjects();
615
+ }
616
+ }
617
+ async loadObjects() {
618
+ if (!this.dataProvider)
619
+ return;
620
+ this.loading = true;
621
+ try {
622
+ const result = await this.dataProvider.listObjects(this.bucketName, this.currentPrefix, '/');
623
+ this.allKeys = result.objects;
624
+ this.prefixes = result.prefixes;
625
+ }
626
+ catch (err) {
627
+ console.error('Error loading objects:', err);
628
+ this.allKeys = [];
629
+ this.prefixes = [];
630
+ }
631
+ this.loading = false;
632
+ }
633
+ handleFilterInput(e) {
634
+ this.filterText = e.target.value;
635
+ }
636
+ selectKey(key, isFolder) {
637
+ this.selectedKey = key;
638
+ if (isFolder) {
639
+ this.dispatchEvent(new CustomEvent('navigate', {
640
+ detail: { prefix: key },
641
+ bubbles: true,
642
+ composed: true,
643
+ }));
644
+ }
645
+ else {
646
+ this.dispatchEvent(new CustomEvent('key-selected', {
647
+ detail: { key },
648
+ bubbles: true,
649
+ composed: true,
650
+ }));
651
+ }
652
+ }
653
+ get filteredItems() {
654
+ const filter = this.filterText.toLowerCase();
655
+ const folders = this.prefixes
656
+ .filter((p) => !filter || getFileName(p).toLowerCase().includes(filter))
657
+ .map((p) => ({ key: p, isFolder: true, size: undefined }));
658
+ const files = this.allKeys
659
+ .filter((o) => !filter || getFileName(o.key).toLowerCase().includes(filter))
660
+ .map((o) => ({ key: o.key, isFolder: false, size: o.size }));
661
+ return [...folders, ...files];
662
+ }
663
+ handleItemContextMenu(event, key, isFolder) {
664
+ if (!this.dataProvider)
665
+ return;
666
+ event.preventDefault();
667
+ if (isFolder) {
668
+ DeesContextmenu.openContextMenuWithOptions(event, [
669
+ {
670
+ name: 'Open',
671
+ iconName: 'lucide:folderOpen',
672
+ action: async () => {
673
+ this.selectKey(key, true);
674
+ },
675
+ },
676
+ {
677
+ name: 'Copy Path',
678
+ iconName: 'lucide:copy',
679
+ action: async () => {
680
+ await navigator.clipboard.writeText(key);
681
+ },
682
+ },
683
+ {
684
+ name: 'Rename',
685
+ iconName: 'lucide:pencil',
686
+ action: async () => this.openRenameDialog(key, true),
687
+ },
688
+ { divider: true },
689
+ {
690
+ name: 'Move to...',
691
+ iconName: 'lucide:folderInput',
692
+ action: async () => this.openMovePickerDialog(key, true),
693
+ },
694
+ { divider: true },
695
+ {
696
+ name: 'New Folder Inside',
697
+ iconName: 'lucide:folderPlus',
698
+ action: async () => this.openCreateDialog('folder', key),
699
+ },
700
+ {
701
+ name: 'New File Inside',
702
+ iconName: 'lucide:filePlus',
703
+ action: async () => this.openCreateDialog('file', key),
704
+ },
705
+ { divider: true },
706
+ {
707
+ name: 'Delete Folder',
708
+ iconName: 'lucide:trash2',
709
+ action: async () => {
710
+ if (confirm(`Delete folder "${getFileName(key)}" and all its contents?`)) {
711
+ const success = await this.dataProvider.deletePrefix(this.bucketName, key);
712
+ if (success) {
713
+ await this.loadObjects();
714
+ }
715
+ }
716
+ },
717
+ },
718
+ ]);
719
+ }
720
+ else {
721
+ DeesContextmenu.openContextMenuWithOptions(event, [
722
+ {
723
+ name: 'Preview',
724
+ iconName: 'lucide:eye',
725
+ action: async () => {
726
+ this.selectKey(key, false);
727
+ },
728
+ },
729
+ {
730
+ name: 'Download',
731
+ iconName: 'lucide:download',
732
+ action: async () => {
733
+ const url = await this.dataProvider.getObjectUrl(this.bucketName, key);
734
+ const link = document.createElement('a');
735
+ link.href = url;
736
+ link.download = getFileName(key);
737
+ link.click();
738
+ },
739
+ },
740
+ {
741
+ name: 'Copy Path',
742
+ iconName: 'lucide:copy',
743
+ action: async () => {
744
+ await navigator.clipboard.writeText(key);
745
+ },
746
+ },
747
+ {
748
+ name: 'Rename',
749
+ iconName: 'lucide:pencil',
750
+ action: async () => this.openRenameDialog(key, false),
751
+ },
752
+ { divider: true },
753
+ {
754
+ name: 'Move to...',
755
+ iconName: 'lucide:folderInput',
756
+ action: async () => this.openMovePickerDialog(key, false),
757
+ },
758
+ { divider: true },
759
+ {
760
+ name: 'Delete',
761
+ iconName: 'lucide:trash2',
762
+ action: async () => {
763
+ if (confirm(`Delete file "${getFileName(key)}"?`)) {
764
+ const success = await this.dataProvider.deleteObject(this.bucketName, key);
765
+ if (success) {
766
+ await this.loadObjects();
767
+ }
768
+ }
769
+ },
770
+ },
771
+ ]);
772
+ }
773
+ }
774
+ handleEmptySpaceContextMenu(event) {
775
+ if (event.target.closest('tr'))
776
+ return;
777
+ event.preventDefault();
778
+ DeesContextmenu.openContextMenuWithOptions(event, [
779
+ {
780
+ name: 'New Folder',
781
+ iconName: 'lucide:folderPlus',
782
+ action: async () => this.openCreateDialog('folder', this.currentPrefix),
783
+ },
784
+ {
785
+ name: 'New File',
786
+ iconName: 'lucide:filePlus',
787
+ action: async () => this.openCreateDialog('file', this.currentPrefix),
788
+ },
789
+ ]);
790
+ }
791
+ openCreateDialog(type, prefix) {
792
+ this.createDialogType = type;
793
+ this.createDialogPrefix = prefix;
794
+ this.createDialogName = '';
795
+ this.showCreateDialog = true;
796
+ }
797
+ async handleCreate() {
798
+ if (!this.createDialogName.trim() || !this.dataProvider)
799
+ return;
800
+ const name = this.createDialogName.trim();
801
+ let path;
802
+ if (this.createDialogType === 'folder') {
803
+ path = this.createDialogPrefix + name + '/.keep';
804
+ }
805
+ else {
806
+ path = this.createDialogPrefix + name;
807
+ }
808
+ const ext = name.split('.').pop()?.toLowerCase() || '';
809
+ const contentType = this.createDialogType === 'file' ? getContentType(ext) : 'application/octet-stream';
810
+ const content = this.createDialogType === 'file' ? getDefaultContent(ext) : '';
811
+ const success = await this.dataProvider.putObject(this.bucketName, path, btoa(content), contentType);
812
+ if (success) {
813
+ this.showCreateDialog = false;
814
+ await this.loadObjects();
815
+ }
816
+ }
817
+ renderCreateDialog() {
818
+ if (!this.showCreateDialog)
819
+ return '';
820
+ const isFolder = this.createDialogType === 'folder';
821
+ const title = isFolder ? 'Create New Folder' : 'Create New File';
822
+ const placeholder = isFolder ? 'folder-name or path/to/folder' : 'filename.txt or path/to/file.txt';
823
+ return html `
824
+ <div class="dialog-overlay" @click=${() => this.showCreateDialog = false}>
825
+ <div class="dialog" @click=${(e) => e.stopPropagation()}>
826
+ <div class="dialog-title">${title}</div>
827
+ <div class="dialog-location">
828
+ Location: ${this.bucketName}/${this.createDialogPrefix}
829
+ </div>
830
+ <input
831
+ type="text"
832
+ class="dialog-input"
833
+ placeholder=${placeholder}
834
+ .value=${this.createDialogName}
835
+ @input=${(e) => this.createDialogName = e.target.value}
836
+ @keydown=${(e) => e.key === 'Enter' && this.handleCreate()}
837
+ />
838
+ <div class="dialog-hint">
839
+ Use "/" to create nested ${isFolder ? 'folders' : 'path'} (e.g., ${isFolder ? 'parent/child' : 'folder/file.txt'})
840
+ </div>
841
+ <div class="dialog-actions">
842
+ <button class="dialog-btn dialog-btn-cancel" @click=${() => this.showCreateDialog = false}>
843
+ Cancel
844
+ </button>
845
+ <button
846
+ class="dialog-btn dialog-btn-create"
847
+ ?disabled=${!this.createDialogName.trim()}
848
+ @click=${() => this.handleCreate()}
849
+ >
850
+ Create
851
+ </button>
852
+ </div>
853
+ </div>
854
+ </div>
855
+ `;
856
+ }
857
+ // --- Move picker dialog ---
858
+ async openMovePickerDialog(key, isFolder) {
859
+ this.movePickerSource = { key, isFolder };
860
+ this.movePickerCurrentPrefix = '';
861
+ this.showMovePickerDialog = true;
862
+ await this.loadMovePickerPrefixes('');
863
+ }
864
+ async navigateMovePicker(prefix) {
865
+ this.movePickerCurrentPrefix = prefix;
866
+ await this.loadMovePickerPrefixes(prefix);
867
+ }
868
+ async loadMovePickerPrefixes(prefix) {
869
+ if (!this.dataProvider)
870
+ return;
871
+ this.movePickerLoading = true;
872
+ try {
873
+ const result = await this.dataProvider.listObjects(this.bucketName, prefix, '/');
874
+ this.movePickerPrefixes = result.prefixes;
875
+ }
876
+ catch {
877
+ this.movePickerPrefixes = [];
878
+ }
879
+ this.movePickerLoading = false;
880
+ }
881
+ selectMoveDestination(destPrefix) {
882
+ if (!this.movePickerSource)
883
+ return;
884
+ this.closeMovePickerDialog();
885
+ this.initiateMove(this.movePickerSource.key, this.movePickerSource.isFolder, destPrefix);
886
+ }
887
+ closeMovePickerDialog() {
888
+ this.showMovePickerDialog = false;
889
+ this.movePickerSource = null;
890
+ this.movePickerCurrentPrefix = '';
891
+ this.movePickerPrefixes = [];
892
+ }
893
+ // --- Move confirmation dialog ---
894
+ initiateMove(sourceKey, isFolder, destPrefix) {
895
+ const validation = validateMove(sourceKey, destPrefix);
896
+ if (!validation.valid) {
897
+ this.moveSource = { key: sourceKey, isFolder };
898
+ this.moveDestination = destPrefix;
899
+ this.moveError = validation.error;
900
+ this.showMoveDialog = true;
901
+ return;
902
+ }
903
+ this.moveSource = { key: sourceKey, isFolder };
904
+ this.moveDestination = destPrefix;
905
+ this.moveError = null;
906
+ this.showMoveDialog = true;
907
+ }
908
+ async executeMove() {
909
+ if (!this.moveSource || !this.dataProvider)
910
+ return;
911
+ this.moveInProgress = true;
912
+ try {
913
+ const sourceName = getFileName(this.moveSource.key);
914
+ const destKey = this.moveDestination + sourceName;
915
+ let result;
916
+ if (this.moveSource.isFolder) {
917
+ result = await this.dataProvider.movePrefix(this.bucketName, this.moveSource.key, destKey);
918
+ }
919
+ else {
920
+ result = await this.dataProvider.moveObject(this.bucketName, this.moveSource.key, destKey);
921
+ }
922
+ if (result.success) {
923
+ this.closeMoveDialog();
924
+ await this.loadObjects();
925
+ }
926
+ else {
927
+ this.moveError = result.error || 'Move operation failed';
928
+ }
929
+ }
930
+ catch (err) {
931
+ this.moveError = `Error: ${err}`;
932
+ }
933
+ this.moveInProgress = false;
934
+ }
935
+ closeMoveDialog() {
936
+ this.showMoveDialog = false;
937
+ this.moveSource = null;
938
+ this.moveDestination = '';
939
+ this.moveError = null;
940
+ this.moveInProgress = false;
941
+ }
942
+ // --- Rename dialog methods ---
943
+ openRenameDialog(key, isFolder) {
944
+ this.renameSource = { key, isFolder };
945
+ this.renameName = getFileName(key);
946
+ this.renameError = null;
947
+ this.showRenameDialog = true;
948
+ this.updateComplete.then(() => {
949
+ const input = this.shadowRoot?.querySelector('.rename-dialog-input');
950
+ if (input) {
951
+ input.focus();
952
+ if (!isFolder) {
953
+ const lastDot = this.renameName.lastIndexOf('.');
954
+ if (lastDot > 0) {
955
+ input.setSelectionRange(0, lastDot);
956
+ }
957
+ else {
958
+ input.select();
959
+ }
960
+ }
961
+ else {
962
+ input.select();
963
+ }
964
+ }
965
+ });
966
+ }
967
+ async executeRename() {
968
+ if (!this.renameSource || !this.renameName.trim() || !this.dataProvider)
969
+ return;
970
+ const newName = this.renameName.trim();
971
+ const currentName = getFileName(this.renameSource.key);
972
+ if (newName === currentName) {
973
+ this.renameError = 'Name is the same as current';
974
+ return;
975
+ }
976
+ if (!newName) {
977
+ this.renameError = 'Name cannot be empty';
978
+ return;
979
+ }
980
+ if (newName.includes('/')) {
981
+ this.renameError = 'Name cannot contain "/"';
982
+ return;
983
+ }
984
+ this.renameInProgress = true;
985
+ this.renameError = null;
986
+ try {
987
+ const parentPrefix = getParentPrefix(this.renameSource.key);
988
+ const newKey = parentPrefix + newName + (this.renameSource.isFolder ? '/' : '');
989
+ let result;
990
+ if (this.renameSource.isFolder) {
991
+ result = await this.dataProvider.movePrefix(this.bucketName, this.renameSource.key, newKey);
992
+ }
993
+ else {
994
+ result = await this.dataProvider.moveObject(this.bucketName, this.renameSource.key, newKey);
995
+ }
996
+ if (result.success) {
997
+ this.closeRenameDialog();
998
+ await this.loadObjects();
999
+ }
1000
+ else {
1001
+ this.renameError = result.error || 'Rename failed';
1002
+ }
1003
+ }
1004
+ catch (err) {
1005
+ this.renameError = `Error: ${err}`;
1006
+ }
1007
+ this.renameInProgress = false;
1008
+ }
1009
+ closeRenameDialog() {
1010
+ this.showRenameDialog = false;
1011
+ this.renameSource = null;
1012
+ this.renameName = '';
1013
+ this.renameError = null;
1014
+ this.renameInProgress = false;
1015
+ }
1016
+ renderRenameDialog() {
1017
+ if (!this.showRenameDialog || !this.renameSource)
1018
+ return '';
1019
+ const isFolder = this.renameSource.isFolder;
1020
+ const title = isFolder ? 'Rename Folder' : 'Rename File';
1021
+ return html `
1022
+ <div class="dialog-overlay" @click=${() => this.closeRenameDialog()}>
1023
+ <div class="dialog" @click=${(e) => e.stopPropagation()}>
1024
+ <div class="dialog-title">${title}</div>
1025
+ <div class="dialog-location">
1026
+ Location: ${this.bucketName}/${getParentPrefix(this.renameSource.key)}
1027
+ </div>
1028
+ ${this.renameError ? html `<div class="move-error">${this.renameError}</div>` : ''}
1029
+ <input
1030
+ type="text"
1031
+ class="dialog-input rename-dialog-input"
1032
+ placeholder=${isFolder ? 'folder-name' : 'filename.ext'}
1033
+ .value=${this.renameName}
1034
+ @input=${(e) => {
1035
+ this.renameName = e.target.value;
1036
+ this.renameError = null;
1037
+ }}
1038
+ @keydown=${(e) => {
1039
+ if (e.key === 'Enter')
1040
+ this.executeRename();
1041
+ if (e.key === 'Escape')
1042
+ this.closeRenameDialog();
1043
+ }}
1044
+ />
1045
+ <div class="dialog-actions">
1046
+ <button class="dialog-btn dialog-btn-cancel"
1047
+ @click=${() => this.closeRenameDialog()}
1048
+ ?disabled=${this.renameInProgress}>Cancel</button>
1049
+ <button class="dialog-btn dialog-btn-create"
1050
+ @click=${() => this.executeRename()}
1051
+ ?disabled=${this.renameInProgress || !this.renameName.trim()}>
1052
+ ${this.renameInProgress ? 'Renaming...' : 'Rename'}
1053
+ </button>
1054
+ </div>
1055
+ </div>
1056
+ </div>
1057
+ `;
1058
+ }
1059
+ renderMoveDialog() {
1060
+ if (!this.showMoveDialog || !this.moveSource)
1061
+ return '';
1062
+ const sourceName = getFileName(this.moveSource.key);
1063
+ return html `
1064
+ <div class="dialog-overlay" @click=${() => this.closeMoveDialog()}>
1065
+ <div class="dialog" @click=${(e) => e.stopPropagation()}>
1066
+ <div class="dialog-title">Move ${this.moveSource.isFolder ? 'Folder' : 'File'}</div>
1067
+
1068
+ ${this.moveError ? html `
1069
+ <div class="move-error">${this.moveError}</div>
1070
+ ` : html `
1071
+ <div class="move-summary">
1072
+ <div class="move-item">
1073
+ <span class="move-label">From:</span>
1074
+ <span class="move-path">${this.moveSource.key}</span>
1075
+ </div>
1076
+ <div class="move-item">
1077
+ <span class="move-label">To:</span>
1078
+ <span class="move-path">${this.moveDestination}${sourceName}</span>
1079
+ </div>
1080
+ </div>
1081
+ `}
1082
+
1083
+ <div class="dialog-actions">
1084
+ <button class="dialog-btn dialog-btn-cancel"
1085
+ @click=${() => this.closeMoveDialog()}
1086
+ ?disabled=${this.moveInProgress}>
1087
+ Cancel
1088
+ </button>
1089
+ ${!this.moveError ? html `
1090
+ <button class="dialog-btn dialog-btn-create"
1091
+ @click=${() => this.executeMove()}
1092
+ ?disabled=${this.moveInProgress}>
1093
+ ${this.moveInProgress ? 'Moving...' : 'Move'}
1094
+ </button>
1095
+ ` : ''}
1096
+ </div>
1097
+ </div>
1098
+ </div>
1099
+ `;
1100
+ }
1101
+ renderMovePickerDialog() {
1102
+ if (!this.showMovePickerDialog || !this.movePickerSource)
1103
+ return '';
1104
+ const sourceName = getFileName(this.movePickerSource.key);
1105
+ const sourceParent = getParentPrefix(this.movePickerSource.key);
1106
+ return html `
1107
+ <div class="dialog-overlay" @click=${() => this.closeMovePickerDialog()}>
1108
+ <div class="dialog move-picker-dialog" @click=${(e) => e.stopPropagation()}>
1109
+ <div class="dialog-title">Move "${sourceName}" to...</div>
1110
+
1111
+ <div class="picker-breadcrumb">
1112
+ <span class="picker-crumb" @click=${() => this.navigateMovePicker('')}>
1113
+ ${this.bucketName}
1114
+ </span>
1115
+ ${getPathSegments(this.movePickerCurrentPrefix).map(seg => html `
1116
+ <span class="picker-separator">/</span>
1117
+ <span class="picker-crumb" @click=${() => this.navigateMovePicker(seg)}>
1118
+ ${getFileName(seg)}
1119
+ </span>
1120
+ `)}
1121
+ </div>
1122
+
1123
+ <div class="picker-list">
1124
+ ${this.movePickerLoading ? html `<div class="picker-empty">Loading...</div>` : ''}
1125
+ ${!this.movePickerLoading && this.movePickerPrefixes.filter(p => p !== this.movePickerSource.key).length === 0 ? html `
1126
+ <div class="picker-empty">No subfolders</div>
1127
+ ` : ''}
1128
+ ${this.movePickerPrefixes
1129
+ .filter(p => p !== this.movePickerSource.key)
1130
+ .map(prefix => html `
1131
+ <div class="picker-item"
1132
+ @click=${() => this.navigateMovePicker(prefix)}
1133
+ @dblclick=${() => this.selectMoveDestination(prefix)}>
1134
+ <svg class="icon" viewBox="0 0 24 24" fill="currentColor">
1135
+ <path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/>
1136
+ </svg>
1137
+ <span class="name">${getFileName(prefix)}</span>
1138
+ </div>
1139
+ `)}
1140
+ </div>
1141
+
1142
+ <div class="dialog-actions">
1143
+ <button class="dialog-btn dialog-btn-cancel" @click=${() => this.closeMovePickerDialog()}>
1144
+ Cancel
1145
+ </button>
1146
+ <button class="dialog-btn dialog-btn-create"
1147
+ @click=${() => this.selectMoveDestination(this.movePickerCurrentPrefix)}
1148
+ ?disabled=${this.movePickerCurrentPrefix === sourceParent}>
1149
+ Move Here
1150
+ </button>
1151
+ </div>
1152
+ </div>
1153
+ </div>
1154
+ `;
1155
+ }
1156
+ render() {
1157
+ return html `
1158
+ <div class="keys-container">
1159
+ <div class="filter-bar">
1160
+ <input
1161
+ type="text"
1162
+ class="filter-input"
1163
+ placeholder="Filter files..."
1164
+ .value=${this.filterText}
1165
+ @input=${this.handleFilterInput}
1166
+ />
1167
+ </div>
1168
+
1169
+ <div class="keys-list" @contextmenu=${(e) => this.handleEmptySpaceContextMenu(e)}>
1170
+ ${this.loading
1171
+ ? html `<div class="empty-state">Loading...</div>`
1172
+ : this.filteredItems.length === 0
1173
+ ? html `<div class="empty-state">No objects found</div>`
1174
+ : html `
1175
+ <table>
1176
+ <thead>
1177
+ <tr>
1178
+ <th>Name</th>
1179
+ <th style="width: 100px;">Size</th>
1180
+ </tr>
1181
+ </thead>
1182
+ <tbody>
1183
+ ${this.filteredItems.map((item) => html `
1184
+ <tr
1185
+ class="${this.selectedKey === item.key ? 'selected' : ''}"
1186
+ @click=${() => this.selectKey(item.key, item.isFolder)}
1187
+ @contextmenu=${(e) => this.handleItemContextMenu(e, item.key, item.isFolder)}
1188
+ >
1189
+ <td>
1190
+ <div class="key-cell">
1191
+ ${item.isFolder
1192
+ ? html `
1193
+ <svg class="key-icon folder-icon" viewBox="0 0 24 24" fill="currentColor">
1194
+ <path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z" />
1195
+ </svg>
1196
+ `
1197
+ : html `
1198
+ <svg class="key-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1199
+ <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" />
1200
+ </svg>
1201
+ `}
1202
+ <span class="key-name">${getFileName(item.key)}</span>
1203
+ </div>
1204
+ </td>
1205
+ <td class="size-cell">
1206
+ ${item.isFolder ? '-' : formatSize(item.size)}
1207
+ </td>
1208
+ </tr>
1209
+ `)}
1210
+ </tbody>
1211
+ </table>
1212
+ `}
1213
+ </div>
1214
+ </div>
1215
+ ${this.renderCreateDialog()}
1216
+ ${this.renderMoveDialog()}
1217
+ ${this.renderMovePickerDialog()}
1218
+ ${this.renderRenameDialog()}
1219
+ `;
1220
+ }
1221
+ constructor() {
1222
+ super(...arguments);
1223
+ __runInitializers(this, _renameError_extraInitializers);
1224
+ }
1225
+ static {
1226
+ __runInitializers(_classThis, _classExtraInitializers);
1227
+ }
1228
+ };
1229
+ return DeesStorageKeys = _classThis;
1230
+ })();
1231
+ export { DeesStorageKeys };
1232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zdG9yYWdlLWtleXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLXN0b3JhZ2UtYnJvd3Nlci9kZWVzLXN0b3JhZ2Uta2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUM3RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztJQVMvSCxlQUFlOzRCQUQzQixhQUFhLENBQUMsbUJBQW1CLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrQkFBbkIsU0FBUSxXQUFXOzs7O3dDQUM3QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7c0NBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt5Q0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO3NDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7bUNBRzFCLEtBQUssRUFBRTtvQ0FHUCxLQUFLLEVBQUU7bUNBR1AsS0FB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