@design.estate/dees-catalog 3.47.0 → 3.48.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +4908 -2056
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-browser.d.ts +50 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-browser.demo.d.ts +2 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-browser.demo.js +148 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-browser.js +520 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-columns.d.ts +99 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-columns.js +1731 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-keys.d.ts +64 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-keys.js +1232 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-preview.d.ts +37 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-preview.js +626 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/index.d.ts +6 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/index.js +7 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/interfaces.d.ts +48 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/interfaces.js +5 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/utilities.d.ts +39 -0
- package/dist_ts_web/elements/00group-dataview/dees-s3-browser/utilities.js +109 -0
- package/dist_ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.js +6 -1
- package/dist_ts_web/elements/00group-dataview/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-dataview/index.js +2 -1
- package/dist_watch/bundle.js +4933 -2090
- package/dist_watch/bundle.js.map +4 -4
- package/package.json +3 -3
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-browser.demo.ts +156 -0
- package/ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-browser.ts +439 -0
- package/ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-columns.ts +1652 -0
- package/ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-keys.ts +1094 -0
- package/ts_web/elements/00group-dataview/dees-s3-browser/dees-s3-preview.ts +540 -0
- package/ts_web/elements/00group-dataview/dees-s3-browser/index.ts +6 -0
- package/ts_web/elements/00group-dataview/dees-s3-browser/interfaces.ts +37 -0
- package/ts_web/elements/00group-dataview/dees-s3-browser/utilities.ts +120 -0
- package/ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.ts +5 -0
- package/ts_web/elements/00group-dataview/index.ts +1 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-catalog',
|
|
6
|
-
version: '3.
|
|
6
|
+
version: '3.48.2',
|
|
7
7
|
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { DeesElement } from '@design.estate/dees-element';
|
|
2
|
+
import type { IS3DataProvider, IS3ChangeEvent } from './interfaces.js';
|
|
3
|
+
import './dees-s3-columns.js';
|
|
4
|
+
import './dees-s3-keys.js';
|
|
5
|
+
import './dees-s3-preview.js';
|
|
6
|
+
declare global {
|
|
7
|
+
interface HTMLElementTagNameMap {
|
|
8
|
+
'dees-s3-browser': DeesS3Browser;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export declare class DeesS3Browser extends DeesElement {
|
|
12
|
+
static demo: () => import("@design.estate/dees-element").TemplateResult<1>;
|
|
13
|
+
static demoGroups: string[];
|
|
14
|
+
accessor dataProvider: IS3DataProvider | null;
|
|
15
|
+
accessor bucketName: string;
|
|
16
|
+
/**
|
|
17
|
+
* Optional change stream subscription.
|
|
18
|
+
* Pass a function that takes a callback and returns an unsubscribe function.
|
|
19
|
+
*/
|
|
20
|
+
accessor onChangeEvent: ((callback: (event: IS3ChangeEvent) => void) => (() => void)) | null;
|
|
21
|
+
private accessor viewType;
|
|
22
|
+
private accessor currentPrefix;
|
|
23
|
+
private accessor selectedKey;
|
|
24
|
+
private accessor refreshKey;
|
|
25
|
+
private accessor previewWidth;
|
|
26
|
+
private accessor isResizingPreview;
|
|
27
|
+
private accessor recentChangeCount;
|
|
28
|
+
private accessor isStreamConnected;
|
|
29
|
+
private changeUnsubscribe;
|
|
30
|
+
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
31
|
+
connectedCallback(): Promise<void>;
|
|
32
|
+
disconnectedCallback(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Public method to trigger a refresh of child components
|
|
35
|
+
*/
|
|
36
|
+
refresh(): void;
|
|
37
|
+
private setViewType;
|
|
38
|
+
private navigateToPrefix;
|
|
39
|
+
private handleKeySelected;
|
|
40
|
+
private handleNavigate;
|
|
41
|
+
private handleObjectDeleted;
|
|
42
|
+
updated(changedProperties: Map<string, unknown>): void;
|
|
43
|
+
private subscribeToChanges;
|
|
44
|
+
private unsubscribeFromChanges;
|
|
45
|
+
private handleChange;
|
|
46
|
+
private startPreviewResize;
|
|
47
|
+
private handlePreviewResize;
|
|
48
|
+
private endPreviewResize;
|
|
49
|
+
render(): import("@design.estate/dees-element").TemplateResult<1>;
|
|
50
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { html } from '@design.estate/dees-element';
|
|
2
|
+
import './dees-s3-browser.js';
|
|
3
|
+
// Mock in-memory S3 data provider for demo purposes
|
|
4
|
+
class MockS3DataProvider {
|
|
5
|
+
objects = new Map();
|
|
6
|
+
constructor() {
|
|
7
|
+
const now = new Date().toISOString();
|
|
8
|
+
// Seed with sample data
|
|
9
|
+
this.objects.set('documents/readme.md', {
|
|
10
|
+
content: btoa('# Welcome\n\nThis is a demo S3 browser.\n'),
|
|
11
|
+
contentType: 'text/markdown',
|
|
12
|
+
size: 42,
|
|
13
|
+
lastModified: now,
|
|
14
|
+
});
|
|
15
|
+
this.objects.set('documents/config.json', {
|
|
16
|
+
content: btoa('{\n "name": "demo",\n "version": "1.0.0"\n}'),
|
|
17
|
+
contentType: 'application/json',
|
|
18
|
+
size: 48,
|
|
19
|
+
lastModified: now,
|
|
20
|
+
});
|
|
21
|
+
this.objects.set('documents/notes/todo.txt', {
|
|
22
|
+
content: btoa('Buy milk\nFix bug #42\nDeploy to production'),
|
|
23
|
+
contentType: 'text/plain',
|
|
24
|
+
size: 45,
|
|
25
|
+
lastModified: now,
|
|
26
|
+
});
|
|
27
|
+
this.objects.set('images/logo.png', {
|
|
28
|
+
content: btoa('fake-png-data'),
|
|
29
|
+
contentType: 'image/png',
|
|
30
|
+
size: 24500,
|
|
31
|
+
lastModified: now,
|
|
32
|
+
});
|
|
33
|
+
this.objects.set('images/banner.jpg', {
|
|
34
|
+
content: btoa('fake-jpg-data'),
|
|
35
|
+
contentType: 'image/jpeg',
|
|
36
|
+
size: 156000,
|
|
37
|
+
lastModified: now,
|
|
38
|
+
});
|
|
39
|
+
this.objects.set('scripts/deploy.sh', {
|
|
40
|
+
content: btoa('#!/bin/bash\necho "Deploying..."\n'),
|
|
41
|
+
contentType: 'text/plain',
|
|
42
|
+
size: 34,
|
|
43
|
+
lastModified: now,
|
|
44
|
+
});
|
|
45
|
+
this.objects.set('index.html', {
|
|
46
|
+
content: btoa('<!DOCTYPE html>\n<html>\n<body>\n <h1>Hello World</h1>\n</body>\n</html>'),
|
|
47
|
+
contentType: 'text/html',
|
|
48
|
+
size: 72,
|
|
49
|
+
lastModified: now,
|
|
50
|
+
});
|
|
51
|
+
this.objects.set('styles.css', {
|
|
52
|
+
content: btoa('body { margin: 0; font-family: sans-serif; }'),
|
|
53
|
+
contentType: 'text/css',
|
|
54
|
+
size: 44,
|
|
55
|
+
lastModified: now,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
async listObjects(bucket, prefix, delimiter) {
|
|
59
|
+
const pfx = prefix || '';
|
|
60
|
+
const objects = [];
|
|
61
|
+
const prefixes = new Set();
|
|
62
|
+
for (const [key, data] of this.objects) {
|
|
63
|
+
if (!key.startsWith(pfx))
|
|
64
|
+
continue;
|
|
65
|
+
const rest = key.slice(pfx.length);
|
|
66
|
+
if (delimiter) {
|
|
67
|
+
const slashIndex = rest.indexOf(delimiter);
|
|
68
|
+
if (slashIndex >= 0) {
|
|
69
|
+
prefixes.add(pfx + rest.slice(0, slashIndex + 1));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
objects.push({ key, size: data.size, lastModified: data.lastModified });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
objects.push({ key, size: data.size, lastModified: data.lastModified });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return { objects, prefixes: Array.from(prefixes).sort() };
|
|
80
|
+
}
|
|
81
|
+
async getObject(bucket, key) {
|
|
82
|
+
const obj = this.objects.get(key);
|
|
83
|
+
if (!obj)
|
|
84
|
+
throw new Error('Not found');
|
|
85
|
+
return { ...obj };
|
|
86
|
+
}
|
|
87
|
+
async putObject(bucket, key, base64Content, contentType) {
|
|
88
|
+
this.objects.set(key, {
|
|
89
|
+
content: base64Content,
|
|
90
|
+
contentType,
|
|
91
|
+
size: atob(base64Content).length,
|
|
92
|
+
lastModified: new Date().toISOString(),
|
|
93
|
+
});
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
async deleteObject(bucket, key) {
|
|
97
|
+
return this.objects.delete(key);
|
|
98
|
+
}
|
|
99
|
+
async deletePrefix(bucket, prefix) {
|
|
100
|
+
for (const key of this.objects.keys()) {
|
|
101
|
+
if (key.startsWith(prefix)) {
|
|
102
|
+
this.objects.delete(key);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
async getObjectUrl(bucket, key) {
|
|
108
|
+
const obj = this.objects.get(key);
|
|
109
|
+
if (!obj)
|
|
110
|
+
return '';
|
|
111
|
+
const blob = new Blob([Uint8Array.from(atob(obj.content), c => c.charCodeAt(0))], { type: obj.contentType });
|
|
112
|
+
return URL.createObjectURL(blob);
|
|
113
|
+
}
|
|
114
|
+
async moveObject(bucket, sourceKey, destKey) {
|
|
115
|
+
const obj = this.objects.get(sourceKey);
|
|
116
|
+
if (!obj)
|
|
117
|
+
return { success: false, error: 'Source not found' };
|
|
118
|
+
this.objects.set(destKey, { ...obj, lastModified: new Date().toISOString() });
|
|
119
|
+
this.objects.delete(sourceKey);
|
|
120
|
+
return { success: true };
|
|
121
|
+
}
|
|
122
|
+
async movePrefix(bucket, sourcePrefix, destPrefix) {
|
|
123
|
+
let count = 0;
|
|
124
|
+
const toMove = Array.from(this.objects.entries()).filter(([k]) => k.startsWith(sourcePrefix));
|
|
125
|
+
for (const [key, data] of toMove) {
|
|
126
|
+
const newKey = destPrefix + key.slice(sourcePrefix.length);
|
|
127
|
+
this.objects.set(newKey, { ...data, lastModified: new Date().toISOString() });
|
|
128
|
+
this.objects.delete(key);
|
|
129
|
+
count++;
|
|
130
|
+
}
|
|
131
|
+
return { success: true, movedCount: count };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export const demoFunc = () => html `
|
|
135
|
+
<style>
|
|
136
|
+
.demo-container {
|
|
137
|
+
height: 600px;
|
|
138
|
+
padding: 16px;
|
|
139
|
+
}
|
|
140
|
+
</style>
|
|
141
|
+
<div class="demo-container">
|
|
142
|
+
<dees-s3-browser
|
|
143
|
+
.dataProvider=${new MockS3DataProvider()}
|
|
144
|
+
.bucketName=${'demo-bucket'}
|
|
145
|
+
></dees-s3-browser>
|
|
146
|
+
</div>
|
|
147
|
+
`;
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zMy1icm93c2VyLmRlbW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLXMzLWJyb3dzZXIvZGVlcy1zMy1icm93c2VyLmRlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRW5ELE9BQU8sc0JBQXNCLENBQUM7QUFFOUIsb0RBQW9EO0FBQ3BELE1BQU0sa0JBQWtCO0lBQ2QsT0FBTyxHQUE4RixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXZIO1FBQ0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQyx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUU7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQywyQ0FBMkMsQ0FBQztZQUMxRCxXQUFXLEVBQUUsZUFBZTtZQUM1QixJQUFJLEVBQUUsRUFBRTtZQUNSLFlBQVksRUFBRSxHQUFHO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFO1lBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsK0NBQStDLENBQUM7WUFDOUQsV0FBVyxFQUFFLGtCQUFrQjtZQUMvQixJQUFJLEVBQUUsRUFBRTtZQUNSLFlBQVksRUFBRSxHQUFHO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFO1lBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUMsNkNBQTZDLENBQUM7WUFDNUQsV0FBVyxFQUFFLFlBQVk7WUFDekIsSUFBSSxFQUFFLEVBQUU7WUFDUixZQUFZLEVBQUUsR0FBRztTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FB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
|