8 Commits

Author SHA1 Message Date
fca927cd34 v3.40.0
Some checks failed
Default (tags) / security (push) Failing after 1s
Default (tags) / test (push) Failing after 1s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-01-13 08:08:58 +00:00
23e5d93183 feat(eco-view-containers): add eco-view-containers demo and export; update remove button to destructive; bump devDependencies 2026-01-13 08:08:58 +00:00
2ecd05eef2 v3.39.1
Some checks failed
Default (tags) / security (push) Failing after 1s
Default (tags) / test (push) Failing after 1s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-01-12 23:48:47 +00:00
88381e1fc7 fix(deps): bump @design.estate/dees-catalog to ^3.36.0 2026-01-12 23:48:47 +00:00
f74c8e5410 v3.39.0
Some checks failed
Default (tags) / security (push) Failing after 1s
Default (tags) / test (push) Failing after 1s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-01-12 23:44:05 +00:00
abeb8ecda3 feat(eco-view-system): add memory usage history, process metrics, and top processes display with loading fallback 2026-01-12 23:44:05 +00:00
b5dc6204ce v3.38.0
Some checks failed
Default (tags) / security (push) Failing after 1s
Default (tags) / test (push) Failing after 1s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-01-12 18:10:20 +00:00
b800740d5d feat(eco-view-system): add extended system metrics and display formatted total network usage in eco system view 2026-01-12 18:10:20 +00:00
9 changed files with 1525 additions and 398 deletions

View File

@@ -1,5 +1,35 @@
# Changelog # Changelog
## 2026-01-13 - 3.40.0 - feat(eco-view-containers)
add eco-view-containers demo and export; update remove button to destructive; bump devDependencies
- Add ts_web/views/eco-view-containers/eco-view-containers.demo.ts with sample container and log data and a demo template
- Export eco-view-containers from ts_web/views/eco-view-containers/index.ts and add export to ts_web/views/index.ts
- Change remove button in eco-view-containers to use .type='destructive' (removed .status='error')
- Bump devDependencies: @git.zone/tsbuild ^4.1.0 -> ^4.1.2 and @types/node ^25.0.6 -> ^25.0.7
## 2026-01-12 - 3.39.1 - fix(deps)
bump @design.estate/dees-catalog to ^3.36.0
- Updated dependency @design.estate/dees-catalog from ^3.35.0 to ^3.36.0 in package.json
## 2026-01-12 - 3.39.0 - feat(eco-view-system)
add memory usage history, process metrics, and top processes display with loading fallback
- Add memoryUsageHistory state and update it in setMetrics to track memory usage trend
- Introduce process state: processTotal, processRunning, processSleeping, processBlocked, and topProcesses
- Extend setProcesses signature to accept blocked and a typed process list and store values in state
- Use reactive state values in UI tiles (memory trend, process tiles) instead of hardcoded placeholders
- Replace 'Threads' tile with 'Blocked' tile and update its icon and color
- Render top processes from state and show a 'Loading...' fallback when the list is empty
## 2026-01-12 - 3.38.0 - feat(eco-view-system)
add extended system metrics and display formatted total network usage in eco system view
- Added numerous new observable properties for richer system telemetry: cpuPhysicalCores, cpuSpeedMax, memoryAvailable, memoryCached, memoryBuffers, swapTotal, swapUsed, diskTotal, diskUsed, diskFree, networkRxSec, networkTxSec, networkRxTotal, networkTxTotal, distro, and coreLoads.
- Reworked network/usage UI: removed several temporary network/latency cards and replaced them with Total Downloaded/Uploaded cards that use formatBytes(...) and show totals since boot.
- Bumped dependency @design.estate/dees-catalog from ^3.34.1 to ^3.35.0.
## 2026-01-12 - 3.37.0 - feat(elements) ## 2026-01-12 - 3.37.0 - feat(elements)
add eco-provider-frame and dataprovider interfaces; improve virtual keyboard interactions; add demos, exports and bump dev dependencies add eco-provider-frame and dataprovider interfaces; improve virtual keyboard interactions; add demos, exports and bump dev dependencies

View File

@@ -1,6 +1,6 @@
{ {
"name": "@ecobridge.xyz/catalog", "name": "@ecobridge.xyz/catalog",
"version": "3.37.0", "version": "3.40.0",
"private": false, "private": false,
"description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.", "description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
"main": "dist_ts_web/index.js", "main": "dist_ts_web/index.js",
@@ -15,7 +15,7 @@
"author": "Lossless GmbH", "author": "Lossless GmbH",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@design.estate/dees-catalog": "^3.34.1", "@design.estate/dees-catalog": "^3.36.0",
"@design.estate/dees-domtools": "^2.3.7", "@design.estate/dees-domtools": "^2.3.7",
"@design.estate/dees-element": "^2.1.5", "@design.estate/dees-element": "^2.1.5",
"@push.rocks/smartpromise": "^4.2.3", "@push.rocks/smartpromise": "^4.2.3",
@@ -23,12 +23,12 @@
}, },
"devDependencies": { "devDependencies": {
"@design.estate/dees-wcctools": "^3.7.1", "@design.estate/dees-wcctools": "^3.7.1",
"@git.zone/tsbuild": "^4.1.0", "@git.zone/tsbuild": "^4.1.2",
"@git.zone/tsbundle": "^2.8.1", "@git.zone/tsbundle": "^2.8.1",
"@git.zone/tstest": "^3.1.4", "@git.zone/tstest": "^3.1.4",
"@git.zone/tswatch": "^2.3.13", "@git.zone/tswatch": "^2.3.13",
"@push.rocks/projectinfo": "^5.0.2", "@push.rocks/projectinfo": "^5.0.2",
"@types/node": "^25.0.6" "@types/node": "^25.0.7"
}, },
"files": [ "files": [
"ts/**/*", "ts/**/*",

366
pnpm-lock.yaml generated
View File

@@ -9,8 +9,8 @@ importers:
.: .:
dependencies: dependencies:
'@design.estate/dees-catalog': '@design.estate/dees-catalog':
specifier: ^3.34.1 specifier: ^3.36.0
version: 3.34.1(@tiptap/pm@2.27.2) version: 3.36.0(@tiptap/pm@2.27.2)
'@design.estate/dees-domtools': '@design.estate/dees-domtools':
specifier: ^2.3.7 specifier: ^2.3.7
version: 2.3.7 version: 2.3.7
@@ -28,8 +28,8 @@ importers:
specifier: ^3.7.1 specifier: ^3.7.1
version: 3.7.1 version: 3.7.1
'@git.zone/tsbuild': '@git.zone/tsbuild':
specifier: ^4.1.0 specifier: ^4.1.2
version: 4.1.0 version: 4.1.2
'@git.zone/tsbundle': '@git.zone/tsbundle':
specifier: ^2.8.1 specifier: ^2.8.1
version: 2.8.1 version: 2.8.1
@@ -43,8 +43,8 @@ importers:
specifier: ^5.0.2 specifier: ^5.0.2
version: 5.0.2 version: 5.0.2
'@types/node': '@types/node':
specifier: ^25.0.6 specifier: ^25.0.7
version: 25.0.6 version: 25.0.7
packages: packages:
@@ -103,24 +103,24 @@ packages:
resolution: {integrity: sha512-Y3ww3yd1wzmS2r3qgH3jg4MxCTdeNrae2J1BmdV+IW/2R2gFWJva5U5GbS6KUSUxanJBRG7gd8uOIi1b0EMOng==} resolution: {integrity: sha512-Y3ww3yd1wzmS2r3qgH3jg4MxCTdeNrae2J1BmdV+IW/2R2gFWJva5U5GbS6KUSUxanJBRG7gd8uOIi1b0EMOng==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/client-s3@3.966.0': '@aws-sdk/client-s3@3.967.0':
resolution: {integrity: sha512-IckVv+A6irQyXTiJrNpfi63ZtPuk6/Iu70TnMq2DTRFK/4bD2bOvqL1IHZ2WGmZMoeWd5LI8Fn6pIwdK6g4QJQ==} resolution: {integrity: sha512-7vDlsBqd9y0dJDjCy84WMN+1r60El97IKMGlegU+l9K2+t8+Wf8bYj/J2xfm+6Ayemje6P4nkKS9tubxBLqg+A==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/client-sso@3.946.0': '@aws-sdk/client-sso@3.946.0':
resolution: {integrity: sha512-kGAs5iIVyUz4p6TX3pzG5q3cNxXnVpC4pwRC6DCSaSv9ozyPjc2d74FsK4fZ+J+ejtvCdJk72uiuQtWJc86Wuw==} resolution: {integrity: sha512-kGAs5iIVyUz4p6TX3pzG5q3cNxXnVpC4pwRC6DCSaSv9ozyPjc2d74FsK4fZ+J+ejtvCdJk72uiuQtWJc86Wuw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/client-sso@3.966.0': '@aws-sdk/client-sso@3.967.0':
resolution: {integrity: sha512-hQZDQgqRJclALDo9wK+bb5O+VpO8JcjImp52w9KPSz9XveNRgE9AYfklRJd8qT2Bwhxe6IbnqYEino2wqUMA1w==} resolution: {integrity: sha512-7RgUwHcRMJtWme6kCHGUVT+Rn9GmNH+FHm34N9UgMXzUqQlzFMweE7T5E9O8nv3wIp7xFNB20ADaCw9Xdnox1Q==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/core@3.946.0': '@aws-sdk/core@3.946.0':
resolution: {integrity: sha512-u2BkbLLVbMFrEiXrko2+S6ih5sUZPlbVyRPtXOqMHlCyzr70sE8kIiD6ba223rQeIFPcYfW/wHc6k4ihW2xxVg==} resolution: {integrity: sha512-u2BkbLLVbMFrEiXrko2+S6ih5sUZPlbVyRPtXOqMHlCyzr70sE8kIiD6ba223rQeIFPcYfW/wHc6k4ihW2xxVg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/core@3.966.0': '@aws-sdk/core@3.967.0':
resolution: {integrity: sha512-QaRVBHD1prdrFXIeFAY/1w4b4S0EFyo/ytzU+rCklEjMRT7DKGXGoHXTWLGz+HD7ovlS5u+9cf8a/LeSOEMzww==} resolution: {integrity: sha512-sJmuP7GrVmlbO6DpXkuf9Mbn6jGNNvy6PLawvaxVF150c8bpNk3w39rerRls6q1dot1dBFV2D29hBXMY1agNMg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/crc64-nvme@3.965.0': '@aws-sdk/crc64-nvme@3.965.0':
@@ -131,64 +131,64 @@ packages:
resolution: {integrity: sha512-P4l+K6wX1tf8LmWUvZofdQ+BgCNyk6Tb9u1H10npvqpuCD+dCM4pXIBq3PQcv/juUBOvLGGREo+Govuh3lfD0Q==} resolution: {integrity: sha512-P4l+K6wX1tf8LmWUvZofdQ+BgCNyk6Tb9u1H10npvqpuCD+dCM4pXIBq3PQcv/juUBOvLGGREo+Govuh3lfD0Q==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-env@3.966.0': '@aws-sdk/credential-provider-env@3.967.0':
resolution: {integrity: sha512-sxVKc9PY0SH7jgN/8WxhbKQ7MWDIgaJv1AoAKJkhJ+GM5r09G5Vb2Vl8ALYpsy+r8b+iYpq5dGJj8k2VqxoQMg==} resolution: {integrity: sha512-+XWw0+f/txeMbEVRtTFZhgSw1ymH1ffaVKkdMBSnw48rfSohJElKmitCqdihagRTZpzh7m8qI6tIQ5t3OUqugw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-http@3.946.0': '@aws-sdk/credential-provider-http@3.946.0':
resolution: {integrity: sha512-/zeOJ6E7dGZQ/l2k7KytEoPJX0APIhwt0A79hPf/bUpMF4dDs2P6JmchDrotk0a0Y/MIdNF8sBQ/MEOPnBiYoQ==} resolution: {integrity: sha512-/zeOJ6E7dGZQ/l2k7KytEoPJX0APIhwt0A79hPf/bUpMF4dDs2P6JmchDrotk0a0Y/MIdNF8sBQ/MEOPnBiYoQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-http@3.966.0': '@aws-sdk/credential-provider-http@3.967.0':
resolution: {integrity: sha512-VTJDP1jOibVtc5pn5TNE12rhqOO/n10IjkoJi8fFp9BMfmh3iqo70Ppvphz/Pe/R9LcK5Z3h0Z4EB9IXDR6kag==} resolution: {integrity: sha512-0/GIAEv5pY5htg6IBMuYccBgzz3oS2DqHjHi396ziTrwlhbrCNX96AbNhQhzAx3LBZUk13sPfeapjyQ7G57Ekg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-ini@3.946.0': '@aws-sdk/credential-provider-ini@3.946.0':
resolution: {integrity: sha512-Pdgcra3RivWj/TuZmfFaHbqsvvgnSKO0CxlRUMMr0PgBiCnUhyl+zBktdNOeGsOPH2fUzQpYhcUjYUgVSdcSDQ==} resolution: {integrity: sha512-Pdgcra3RivWj/TuZmfFaHbqsvvgnSKO0CxlRUMMr0PgBiCnUhyl+zBktdNOeGsOPH2fUzQpYhcUjYUgVSdcSDQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-ini@3.966.0': '@aws-sdk/credential-provider-ini@3.967.0':
resolution: {integrity: sha512-4oQKkYMCUx0mffKuH8LQag1M4Fo5daKVmsLAnjrIqKh91xmCrcWlAFNMgeEYvI1Yy125XeNSaFMfir6oNc2ODA==} resolution: {integrity: sha512-U8dMpaM6Qf6+2Qvp1uG6OcWv1RlrZW7tQkpmzEVWH8HZTGrVHIXXju64NMtIOr7yOnNwd0CKcytuD1QG+phCwQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-login@3.946.0': '@aws-sdk/credential-provider-login@3.946.0':
resolution: {integrity: sha512-5iqLNc15u2Zx+7jOdQkIbP62N7n2031tw5hkmIG0DLnozhnk64osOh2CliiOE9x3c4P9Pf4frAwgyy9GzNTk2g==} resolution: {integrity: sha512-5iqLNc15u2Zx+7jOdQkIbP62N7n2031tw5hkmIG0DLnozhnk64osOh2CliiOE9x3c4P9Pf4frAwgyy9GzNTk2g==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-login@3.966.0': '@aws-sdk/credential-provider-login@3.967.0':
resolution: {integrity: sha512-wD1KlqLyh23Xfns/ZAPxebwXixoJJCuDbeJHFrLDpP4D4h3vA2S8nSFgBSFR15q9FhgRfHleClycf6g5K4Ww6w==} resolution: {integrity: sha512-kbvZsZL6CBlfnb71zuJdJmBUFZN5utNrcziZr/DZ2olEOkA9vlmizE8i9BUIbmS7ptjgvRnmcY1A966yfhiblw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-node@3.946.0': '@aws-sdk/credential-provider-node@3.946.0':
resolution: {integrity: sha512-I7URUqnBPng1a5y81OImxrwERysZqMBREG6svhhGeZgxmqcpAZ8z5ywILeQXdEOCuuES8phUp/ojzxFjPXp/eA==} resolution: {integrity: sha512-I7URUqnBPng1a5y81OImxrwERysZqMBREG6svhhGeZgxmqcpAZ8z5ywILeQXdEOCuuES8phUp/ojzxFjPXp/eA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-node@3.966.0': '@aws-sdk/credential-provider-node@3.967.0':
resolution: {integrity: sha512-7QCOERGddMw7QbjE+LSAFgwOBpPv4px2ty0GCK7ZiPJGsni2EYmM4TtYnQb9u1WNHmHqIPWMbZR0pKDbyRyHlQ==} resolution: {integrity: sha512-WuNbHs9rfKKSVok4+OBrZf0AHfzDgFYYMxN2G/q6ZfUmY4QmiPyxV5HkNFh1rqDxS9VV6kAZPo0EBmry10idSg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-process@3.946.0': '@aws-sdk/credential-provider-process@3.946.0':
resolution: {integrity: sha512-GtGHX7OGqIeVQ3DlVm5RRF43Qmf3S1+PLJv9svrdvAhAdy2bUb044FdXXqrtSsIfpzTKlHgQUiRo5MWLd35Ntw==} resolution: {integrity: sha512-GtGHX7OGqIeVQ3DlVm5RRF43Qmf3S1+PLJv9svrdvAhAdy2bUb044FdXXqrtSsIfpzTKlHgQUiRo5MWLd35Ntw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-process@3.966.0': '@aws-sdk/credential-provider-process@3.967.0':
resolution: {integrity: sha512-q5kCo+xHXisNbbPAh/DiCd+LZX4wdby77t7GLk0b2U0/mrel4lgy6o79CApe+0emakpOS1nPZS7voXA7vGPz4w==} resolution: {integrity: sha512-sNCY5JDV0whsfsZ6c2+6eUwH33H7UhKbqvCPbEYlIIa8wkGjCtCyFI3zZIJHVcMKJJ3117vSUFHEkNA7g+8rtw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-sso@3.946.0': '@aws-sdk/credential-provider-sso@3.946.0':
resolution: {integrity: sha512-LeGSSt2V5iwYey1ENGY75RmoDP3bA2iE/py8QBKW8EDA8hn74XBLkprhrK5iccOvU3UGWY8WrEKFAFGNjJOL9g==} resolution: {integrity: sha512-LeGSSt2V5iwYey1ENGY75RmoDP3bA2iE/py8QBKW8EDA8hn74XBLkprhrK5iccOvU3UGWY8WrEKFAFGNjJOL9g==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-sso@3.966.0': '@aws-sdk/credential-provider-sso@3.967.0':
resolution: {integrity: sha512-Rv5aEfbpqsQZzxpX2x+FbSyVFOE3Dngome+exNA8jGzc00rrMZEUnm3J3yAsLp/I2l7wnTfI0r2zMe+T9/nZAQ==} resolution: {integrity: sha512-0K6kITKNytFjk1UYabYUsTThgU6TQkyW6Wmt8S5zd1A/up7NSQGpp58Rpg9GIf4amQDQwb+p9FGG7emmV8FEeA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-web-identity@3.946.0': '@aws-sdk/credential-provider-web-identity@3.946.0':
resolution: {integrity: sha512-ocBCvjWfkbjxElBI1QUxOnHldsNhoU0uOICFvuRDAZAoxvypJHN3m5BJkqb7gqorBbcv3LRgmBdEnWXOAvq+7Q==} resolution: {integrity: sha512-ocBCvjWfkbjxElBI1QUxOnHldsNhoU0uOICFvuRDAZAoxvypJHN3m5BJkqb7gqorBbcv3LRgmBdEnWXOAvq+7Q==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-web-identity@3.966.0': '@aws-sdk/credential-provider-web-identity@3.967.0':
resolution: {integrity: sha512-Yv1lc9iic9xg3ywMmIAeXN1YwuvfcClLVdiF2y71LqUgIOupW8B8my84XJr6pmOQuKzZa++c2znNhC9lGsbKyw==} resolution: {integrity: sha512-Vkr7S2ec7q/v8i/MzkHcBEdqqfWz3lyb8FDjb+NjslEwdxC3f6XwADRZzWwV1pChfx6SbsvJXKfkcF/pKAelhA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-bucket-endpoint@3.936.0': '@aws-sdk/middleware-bucket-endpoint@3.936.0':
@@ -211,8 +211,8 @@ packages:
resolution: {integrity: sha512-HJA7RIWsnxcChyZ1hNF/3JICkYCqDonxoeG8FkrmLRBknZ8WVdJiPD420/UwrWaa5F2MuTDA92jxk77rI09h1w==} resolution: {integrity: sha512-HJA7RIWsnxcChyZ1hNF/3JICkYCqDonxoeG8FkrmLRBknZ8WVdJiPD420/UwrWaa5F2MuTDA92jxk77rI09h1w==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-flexible-checksums@3.966.0': '@aws-sdk/middleware-flexible-checksums@3.967.0':
resolution: {integrity: sha512-0/ofXeceTH/flKhg4EGGYr4cDtaLVkR/2RI05J/hxrHIls+iM6j8++GO0TocxmZYK+8B+7XKSaV9LU26nboTUQ==} resolution: {integrity: sha512-RuOan0fknnAep2pTSjmJ+Heomowxg3M3s+pcs0JEW/SYnvdwYhFOTcFg2VBvGv3V1kwXxXHMlC57zoGn6pNcqg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-host-header@3.936.0': '@aws-sdk/middleware-host-header@3.936.0':
@@ -251,8 +251,8 @@ packages:
resolution: {integrity: sha512-0UTFmFd8PX2k/jLu/DBmR+mmLQWAtUGHYps9Rjx3dcXNwaMLaa/39NoV3qn7Dwzfpqc6JZlZzBk+NDOCJIHW9g==} resolution: {integrity: sha512-0UTFmFd8PX2k/jLu/DBmR+mmLQWAtUGHYps9Rjx3dcXNwaMLaa/39NoV3qn7Dwzfpqc6JZlZzBk+NDOCJIHW9g==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-sdk-s3@3.966.0': '@aws-sdk/middleware-sdk-s3@3.967.0':
resolution: {integrity: sha512-9N9zncsY5ydDCRatKdrPZcdCwNWt7TdHmqgwQM52PuA5gs1HXWwLLNDy/51H+9RTHi7v6oly+x9utJ/qypCh2g==} resolution: {integrity: sha512-Kkd6xGwTqbg7Spq1SI3ZX6PPYKdGLxdRGlXGNE3lnEPzNueQZQJKLZFpOY2aVdcAT+ytAY96N5szeeeAsFdUaA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-ssec@3.936.0': '@aws-sdk/middleware-ssec@3.936.0':
@@ -267,16 +267,16 @@ packages:
resolution: {integrity: sha512-7QcljCraeaWQNuqmOoAyZs8KpZcuhPiqdeeKoRd397jVGNRehLFsZbIMOvwaluUDFY11oMyXOkQEERe1Zo2fCw==} resolution: {integrity: sha512-7QcljCraeaWQNuqmOoAyZs8KpZcuhPiqdeeKoRd397jVGNRehLFsZbIMOvwaluUDFY11oMyXOkQEERe1Zo2fCw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-user-agent@3.966.0': '@aws-sdk/middleware-user-agent@3.967.0':
resolution: {integrity: sha512-MvGoy0vhMluVpSB5GaGJbYLqwbZfZjwEZhneDHdPhgCgQqmCtugnYIIjpUw7kKqWGsmaMQmNEgSFf1zYYmwOyg==} resolution: {integrity: sha512-2qzJzZj5u+cZiG7kz3XJPaTH4ssUY/aet1kwJsUTFKrWeHUf7mZZkDFfkXP5cOffgiOyR5ZkrmJoLKAde9hshg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/nested-clients@3.946.0': '@aws-sdk/nested-clients@3.946.0':
resolution: {integrity: sha512-rjAtEguukeW8mlyEQMQI56vxFoyWlaNwowmz1p1rav948SUjtrzjHAp4TOQWhibb7AR7BUTHBCgIcyCRjBEf4g==} resolution: {integrity: sha512-rjAtEguukeW8mlyEQMQI56vxFoyWlaNwowmz1p1rav948SUjtrzjHAp4TOQWhibb7AR7BUTHBCgIcyCRjBEf4g==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/nested-clients@3.966.0': '@aws-sdk/nested-clients@3.967.0':
resolution: {integrity: sha512-FRzAWwLNoKiaEWbYhnpnfartIdOgiaBLnPcd3uG1Io+vvxQUeRPhQIy4EfKnT3AuA+g7gzSCjMG2JKoJOplDtQ==} resolution: {integrity: sha512-PYa7V8w0gaNux6Sz/Z7zrHmPloEE+EKpRxQIOG/D0askTr5Yd4oO2KGgcInf65uHK3f0Z9U4CTUGHZvQvABypA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/region-config-resolver@3.936.0': '@aws-sdk/region-config-resolver@3.936.0':
@@ -291,16 +291,16 @@ packages:
resolution: {integrity: sha512-61FZ685lKiJuQ06g6U7K3PL9EwKCxNm51wNlxyKV57nnl1GrLD0NC8O3/hDNkCQLNBArT9y3IXl2H7TtIxP8Jg==} resolution: {integrity: sha512-61FZ685lKiJuQ06g6U7K3PL9EwKCxNm51wNlxyKV57nnl1GrLD0NC8O3/hDNkCQLNBArT9y3IXl2H7TtIxP8Jg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/signature-v4-multi-region@3.966.0': '@aws-sdk/signature-v4-multi-region@3.967.0':
resolution: {integrity: sha512-VNSpyfKtDiBg/nPwSXDvnjISaDE9mI8zhOK3C4/obqh8lK1V6j04xDlwyIWbbIM0f6VgV1FVixlghtJB79eBqA==} resolution: {integrity: sha512-LfpCEqe/BliiwBtNImz/Txx6MQZkDqjP2bbk+Q4Km6mYhFU9pyPlKo3AYEHfGWn92Smt1nS3S8SzIK0nL6J2Fg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/token-providers@3.946.0': '@aws-sdk/token-providers@3.946.0':
resolution: {integrity: sha512-a5c+rM6CUPX2ExmUZ3DlbLlS5rQr4tbdoGcgBsjnAHiYx8MuMNAI+8M7wfjF13i2yvUQj5WEIddvLpayfEZj9g==} resolution: {integrity: sha512-a5c+rM6CUPX2ExmUZ3DlbLlS5rQr4tbdoGcgBsjnAHiYx8MuMNAI+8M7wfjF13i2yvUQj5WEIddvLpayfEZj9g==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/token-providers@3.966.0': '@aws-sdk/token-providers@3.967.0':
resolution: {integrity: sha512-8k5cBTicTGYJHhKaweO4gL4fud1KDnLS5fByT6/Xbiu59AxYM4E/h3ds+3jxDMnniCE3gIWpEnyfM9khtmw2lA==} resolution: {integrity: sha512-Qnd/nJ0CgeUa7zQczgmdQm0vYUF7pD1G0C+dR1T7huHQHRIsgCWIsCV9wNKzOFluqtcr6YAeuTwvY0+l8XWxnA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/types@3.936.0': '@aws-sdk/types@3.936.0':
@@ -346,8 +346,8 @@ packages:
aws-crt: aws-crt:
optional: true optional: true
'@aws-sdk/util-user-agent-node@3.966.0': '@aws-sdk/util-user-agent-node@3.967.0':
resolution: {integrity: sha512-vPPe8V0GLj+jVS5EqFz2NUBgWH35favqxliUOvhp8xBdNRkEjiZm5TqitVtFlxS4RrLY3HOndrWbrP5ejbwl1Q==} resolution: {integrity: sha512-yUz6pCGxyG4+QaDg0dkdIBphjQp8A9rrbZa/+U3RJgRrW47hy64clFQUROzj5Poy1Ur8ICVXEUpBsSqRuYEU2g==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
peerDependencies: peerDependencies:
aws-crt: '>=1.0.0' aws-crt: '>=1.0.0'
@@ -398,8 +398,8 @@ packages:
'@configvault.io/interfaces@1.0.17': '@configvault.io/interfaces@1.0.17':
resolution: {integrity: sha512-bEcCUR2VBDJsTin8HQh8Uw/mlYl2v8A3jMIaQ+MTB9Hrqd6CZL2dL7iJdWyFl/3EIX+LDxWFR+Oq7liIq7w+1Q==} resolution: {integrity: sha512-bEcCUR2VBDJsTin8HQh8Uw/mlYl2v8A3jMIaQ+MTB9Hrqd6CZL2dL7iJdWyFl/3EIX+LDxWFR+Oq7liIq7w+1Q==}
'@design.estate/dees-catalog@3.34.1': '@design.estate/dees-catalog@3.36.0':
resolution: {integrity: sha512-jm/ZPoLgBHicIlrGPTiCynztFEemJGHweiz+GQK9FppFfjCCC47AOHI4ZjIhrNibfyPXGfqfFWr7DI0zCOl1gw==} resolution: {integrity: sha512-0buDgj1dL48zN0T669+RjpIvCe5vCH0PTBmIqomeWDSuOO5HpaOmtFlZSkmj0QZ5xYxJ6KkRv8XUi/NN9ogl1Q==}
'@design.estate/dees-comms@1.0.30': '@design.estate/dees-comms@1.0.30':
resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==} resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==}
@@ -598,8 +598,8 @@ packages:
resolution: {integrity: sha512-Udu3K7SzAo9N013qt7qmm22/wo2hADdheXtBfxFTecp+ogsc0caQNRKEb7pkvvagUGOpG9wJC1ViH6WXs8oXIA==} resolution: {integrity: sha512-Udu3K7SzAo9N013qt7qmm22/wo2hADdheXtBfxFTecp+ogsc0caQNRKEb7pkvvagUGOpG9wJC1ViH6WXs8oXIA==}
engines: {node: '>=6'} engines: {node: '>=6'}
'@git.zone/tsbuild@4.1.0': '@git.zone/tsbuild@4.1.2':
resolution: {integrity: sha512-IGNUlbQuUvblPFNQLoldS8d81mzHgUelZ8DGP31XxVkPledwEFNOmJXugcwYTqqriSq9U0nchBtKbX8ogQlkoA==} resolution: {integrity: sha512-S518ulKveO76pS6jrAELrnFaCw5nDAIZD9j6QzVmLYDiZuJmlRwPK3/2E8ugQ+b7ffpkwJ9MT685ooEGDcWQ4Q==}
hasBin: true hasBin: true
'@git.zone/tsbundle@2.8.1': '@git.zone/tsbundle@2.8.1':
@@ -1368,8 +1368,8 @@ packages:
resolution: {integrity: sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==} resolution: {integrity: sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/core@3.20.2': '@smithy/core@3.20.3':
resolution: {integrity: sha512-nc99TseyTwL1bg+T21cyEA5oItNy1XN4aUeyOlXJnvyRW5VSK1oRKRoSM/Iq0KFPuqZMxjBemSZHZCOZbSyBMw==} resolution: {integrity: sha512-iwF1e0+H9vX+4reUA0WjKnc5ueg0Leinl5kI7wsie5bVXoYdzkpINz6NPYhpr/5InOv332a7wNV5AxJyFoVUsQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/credential-provider-imds@4.2.5': '@smithy/credential-provider-imds@4.2.5':
@@ -1488,16 +1488,16 @@ packages:
resolution: {integrity: sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==} resolution: {integrity: sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/middleware-endpoint@4.4.3': '@smithy/middleware-endpoint@4.4.4':
resolution: {integrity: sha512-Zb8R35hjBhp1oFhiaAZ9QhClpPHdEDmNDC2UrrB2fqV0oNDUUPH12ovZHB5xi/Rd+pg/BJHOR1q+SfsieSKPQg==} resolution: {integrity: sha512-TFxS6C5bGSc4djD1SLVmstCpfYDjmMnBR4KRDge5HEEtgSINGPKuxLvaAGfSPx5FFoMaTJkj4jJLNFggeWpRoQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/middleware-retry@4.4.14': '@smithy/middleware-retry@4.4.14':
resolution: {integrity: sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==} resolution: {integrity: sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/middleware-retry@4.4.19': '@smithy/middleware-retry@4.4.20':
resolution: {integrity: sha512-QtisFIjIw2tjMm/ESatjWFVIQb5Xd093z8xhxq/SijLg7Mgo2C2wod47Ib/AHpBLFhwYXPzd7Hp2+JVXfeZyMQ==} resolution: {integrity: sha512-+UvEn/8HGzh/6zpe9xFGZe7go4/fzflggfeRG/TvdGLoUY7Gw+4RgzKJEPU2NvPo0k/j/o7vvx25ZWyOXeGoxw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/middleware-serde@4.2.6': '@smithy/middleware-serde@4.2.6':
@@ -1588,8 +1588,8 @@ packages:
resolution: {integrity: sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==} resolution: {integrity: sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/smithy-client@4.10.4': '@smithy/smithy-client@4.10.5':
resolution: {integrity: sha512-rHig+BWjhjlHlah67ryaW9DECYixiJo5pQCTEwsJyarRBAwHMMC3iYz5MXXAHXe64ZAMn1NhTUSTFIu1T6n6jg==} resolution: {integrity: sha512-uotYm3WDne01R0DxBqF9J8WZc8gSgdj+uC7Lv/R+GinH4rxcgRLxLDayYkyGAboZlYszly6maQA+NGQ5N4gLhQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/smithy-client@4.9.10': '@smithy/smithy-client@4.9.10':
@@ -1640,16 +1640,16 @@ packages:
resolution: {integrity: sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==} resolution: {integrity: sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/util-defaults-mode-browser@4.3.18': '@smithy/util-defaults-mode-browser@4.3.19':
resolution: {integrity: sha512-Ao1oLH37YmLyHnKdteMp6l4KMCGBeZEAN68YYe00KAaKFijFELDbRQRm3CNplz7bez1HifuBV0l5uR6eVJLhIg==} resolution: {integrity: sha512-5fkC/yE5aepnzcF9dywKefGlJUMM7JEYUOv97TRDLTtGiiAqf7YG80HJWIBR0qWQPQW3dlQ5eFlUsySvt0rGEA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/util-defaults-mode-node@4.2.16': '@smithy/util-defaults-mode-node@4.2.16':
resolution: {integrity: sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==} resolution: {integrity: sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/util-defaults-mode-node@4.2.21': '@smithy/util-defaults-mode-node@4.2.22':
resolution: {integrity: sha512-e21ASJDirE96kKXZLcYcnn4Zt0WGOvMYc1P8EK0gQeQ3I8PbJWqBKx9AUr/YeFpDkpYwEu1RsPe4UXk2+QL7IA==} resolution: {integrity: sha512-f0KNaSK192+kv6GFkUDA0Tvr5B8eU2bFh1EO+cUdlzZ2jap5Zv7KZXa0B/7r/M1+xiYPSIuroxlxQVP1ua9kxg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@smithy/util-endpoints@3.2.5': '@smithy/util-endpoints@3.2.5':
@@ -2008,8 +2008,8 @@ packages:
'@types/node@22.19.5': '@types/node@22.19.5':
resolution: {integrity: sha512-HfF8+mYcHPcPypui3w3mvzuIErlNOh2OAG+BCeBZCEwyiD5ls2SiCwEyT47OELtf7M3nHxBdu0FsmzdKxkN52Q==} resolution: {integrity: sha512-HfF8+mYcHPcPypui3w3mvzuIErlNOh2OAG+BCeBZCEwyiD5ls2SiCwEyT47OELtf7M3nHxBdu0FsmzdKxkN52Q==}
'@types/node@25.0.6': '@types/node@25.0.7':
resolution: {integrity: sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==} resolution: {integrity: sha512-C/er7DlIZgRJO7WtTdYovjIFzGsz0I95UlMyR9anTb4aCpBSRWe5Jc1/RvLKUfzmOxHPGjSE5+63HgLtndxU4w==}
'@types/ping@0.4.4': '@types/ping@0.4.4':
resolution: {integrity: sha512-ifvo6w2f5eJYlXm+HiVx67iJe8WZp87sfa683nlqED5Vnt9Z93onkokNoWqOG21EaE8fMxyKPobE+mkPEyxsdw==} resolution: {integrity: sha512-ifvo6w2f5eJYlXm+HiVx67iJe8WZp87sfa683nlqED5Vnt9Z93onkokNoWqOG21EaE8fMxyKPobE+mkPEyxsdw==}
@@ -4309,7 +4309,7 @@ snapshots:
'@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedrequest-interfaces': 3.0.19
'@api.global/typedsocket': 4.1.0(@push.rocks/smartserve@1.4.0) '@api.global/typedsocket': 4.1.0(@push.rocks/smartserve@1.4.0)
'@cloudflare/workers-types': 4.20251211.0 '@cloudflare/workers-types': 4.20251211.0
'@design.estate/dees-catalog': 3.34.1(@tiptap/pm@2.27.2) '@design.estate/dees-catalog': 3.36.0(@tiptap/pm@2.27.2)
'@design.estate/dees-comms': 1.0.30 '@design.estate/dees-comms': 1.0.30
'@push.rocks/lik': 6.2.2 '@push.rocks/lik': 6.2.2
'@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartdelay': 3.0.5
@@ -4489,31 +4489,31 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/client-s3@3.966.0': '@aws-sdk/client-s3@3.967.0':
dependencies: dependencies:
'@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha1-browser': 5.2.0
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/credential-provider-node': 3.966.0 '@aws-sdk/credential-provider-node': 3.967.0
'@aws-sdk/middleware-bucket-endpoint': 3.966.0 '@aws-sdk/middleware-bucket-endpoint': 3.966.0
'@aws-sdk/middleware-expect-continue': 3.965.0 '@aws-sdk/middleware-expect-continue': 3.965.0
'@aws-sdk/middleware-flexible-checksums': 3.966.0 '@aws-sdk/middleware-flexible-checksums': 3.967.0
'@aws-sdk/middleware-host-header': 3.965.0 '@aws-sdk/middleware-host-header': 3.965.0
'@aws-sdk/middleware-location-constraint': 3.965.0 '@aws-sdk/middleware-location-constraint': 3.965.0
'@aws-sdk/middleware-logger': 3.965.0 '@aws-sdk/middleware-logger': 3.965.0
'@aws-sdk/middleware-recursion-detection': 3.965.0 '@aws-sdk/middleware-recursion-detection': 3.965.0
'@aws-sdk/middleware-sdk-s3': 3.966.0 '@aws-sdk/middleware-sdk-s3': 3.967.0
'@aws-sdk/middleware-ssec': 3.965.0 '@aws-sdk/middleware-ssec': 3.965.0
'@aws-sdk/middleware-user-agent': 3.966.0 '@aws-sdk/middleware-user-agent': 3.967.0
'@aws-sdk/region-config-resolver': 3.965.0 '@aws-sdk/region-config-resolver': 3.965.0
'@aws-sdk/signature-v4-multi-region': 3.966.0 '@aws-sdk/signature-v4-multi-region': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@aws-sdk/util-endpoints': 3.965.0 '@aws-sdk/util-endpoints': 3.965.0
'@aws-sdk/util-user-agent-browser': 3.965.0 '@aws-sdk/util-user-agent-browser': 3.965.0
'@aws-sdk/util-user-agent-node': 3.966.0 '@aws-sdk/util-user-agent-node': 3.967.0
'@smithy/config-resolver': 4.4.5 '@smithy/config-resolver': 4.4.5
'@smithy/core': 3.20.2 '@smithy/core': 3.20.3
'@smithy/eventstream-serde-browser': 4.2.7 '@smithy/eventstream-serde-browser': 4.2.7
'@smithy/eventstream-serde-config-resolver': 4.3.7 '@smithy/eventstream-serde-config-resolver': 4.3.7
'@smithy/eventstream-serde-node': 4.2.7 '@smithy/eventstream-serde-node': 4.2.7
@@ -4524,21 +4524,21 @@ snapshots:
'@smithy/invalid-dependency': 4.2.7 '@smithy/invalid-dependency': 4.2.7
'@smithy/md5-js': 4.2.7 '@smithy/md5-js': 4.2.7
'@smithy/middleware-content-length': 4.2.7 '@smithy/middleware-content-length': 4.2.7
'@smithy/middleware-endpoint': 4.4.3 '@smithy/middleware-endpoint': 4.4.4
'@smithy/middleware-retry': 4.4.19 '@smithy/middleware-retry': 4.4.20
'@smithy/middleware-serde': 4.2.8 '@smithy/middleware-serde': 4.2.8
'@smithy/middleware-stack': 4.2.7 '@smithy/middleware-stack': 4.2.7
'@smithy/node-config-provider': 4.3.7 '@smithy/node-config-provider': 4.3.7
'@smithy/node-http-handler': 4.4.7 '@smithy/node-http-handler': 4.4.7
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/smithy-client': 4.10.4 '@smithy/smithy-client': 4.10.5
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
'@smithy/url-parser': 4.2.7 '@smithy/url-parser': 4.2.7
'@smithy/util-base64': 4.3.0 '@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1 '@smithy/util-body-length-node': 4.2.1
'@smithy/util-defaults-mode-browser': 4.3.18 '@smithy/util-defaults-mode-browser': 4.3.19
'@smithy/util-defaults-mode-node': 4.2.21 '@smithy/util-defaults-mode-node': 4.2.22
'@smithy/util-endpoints': 3.2.7 '@smithy/util-endpoints': 3.2.7
'@smithy/util-middleware': 4.2.7 '@smithy/util-middleware': 4.2.7
'@smithy/util-retry': 4.2.7 '@smithy/util-retry': 4.2.7
@@ -4592,41 +4592,41 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/client-sso@3.966.0': '@aws-sdk/client-sso@3.967.0':
dependencies: dependencies:
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/middleware-host-header': 3.965.0 '@aws-sdk/middleware-host-header': 3.965.0
'@aws-sdk/middleware-logger': 3.965.0 '@aws-sdk/middleware-logger': 3.965.0
'@aws-sdk/middleware-recursion-detection': 3.965.0 '@aws-sdk/middleware-recursion-detection': 3.965.0
'@aws-sdk/middleware-user-agent': 3.966.0 '@aws-sdk/middleware-user-agent': 3.967.0
'@aws-sdk/region-config-resolver': 3.965.0 '@aws-sdk/region-config-resolver': 3.965.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@aws-sdk/util-endpoints': 3.965.0 '@aws-sdk/util-endpoints': 3.965.0
'@aws-sdk/util-user-agent-browser': 3.965.0 '@aws-sdk/util-user-agent-browser': 3.965.0
'@aws-sdk/util-user-agent-node': 3.966.0 '@aws-sdk/util-user-agent-node': 3.967.0
'@smithy/config-resolver': 4.4.5 '@smithy/config-resolver': 4.4.5
'@smithy/core': 3.20.2 '@smithy/core': 3.20.3
'@smithy/fetch-http-handler': 5.3.8 '@smithy/fetch-http-handler': 5.3.8
'@smithy/hash-node': 4.2.7 '@smithy/hash-node': 4.2.7
'@smithy/invalid-dependency': 4.2.7 '@smithy/invalid-dependency': 4.2.7
'@smithy/middleware-content-length': 4.2.7 '@smithy/middleware-content-length': 4.2.7
'@smithy/middleware-endpoint': 4.4.3 '@smithy/middleware-endpoint': 4.4.4
'@smithy/middleware-retry': 4.4.19 '@smithy/middleware-retry': 4.4.20
'@smithy/middleware-serde': 4.2.8 '@smithy/middleware-serde': 4.2.8
'@smithy/middleware-stack': 4.2.7 '@smithy/middleware-stack': 4.2.7
'@smithy/node-config-provider': 4.3.7 '@smithy/node-config-provider': 4.3.7
'@smithy/node-http-handler': 4.4.7 '@smithy/node-http-handler': 4.4.7
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/smithy-client': 4.10.4 '@smithy/smithy-client': 4.10.5
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
'@smithy/url-parser': 4.2.7 '@smithy/url-parser': 4.2.7
'@smithy/util-base64': 4.3.0 '@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1 '@smithy/util-body-length-node': 4.2.1
'@smithy/util-defaults-mode-browser': 4.3.18 '@smithy/util-defaults-mode-browser': 4.3.19
'@smithy/util-defaults-mode-node': 4.2.21 '@smithy/util-defaults-mode-node': 4.2.22
'@smithy/util-endpoints': 3.2.7 '@smithy/util-endpoints': 3.2.7
'@smithy/util-middleware': 4.2.7 '@smithy/util-middleware': 4.2.7
'@smithy/util-retry': 4.2.7 '@smithy/util-retry': 4.2.7
@@ -4651,16 +4651,16 @@ snapshots:
'@smithy/util-utf8': 4.2.0 '@smithy/util-utf8': 4.2.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/core@3.966.0': '@aws-sdk/core@3.967.0':
dependencies: dependencies:
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@aws-sdk/xml-builder': 3.965.0 '@aws-sdk/xml-builder': 3.965.0
'@smithy/core': 3.20.2 '@smithy/core': 3.20.3
'@smithy/node-config-provider': 4.3.7 '@smithy/node-config-provider': 4.3.7
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/signature-v4': 5.3.7 '@smithy/signature-v4': 5.3.7
'@smithy/smithy-client': 4.10.4 '@smithy/smithy-client': 4.10.5
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
'@smithy/util-base64': 4.3.0 '@smithy/util-base64': 4.3.0
'@smithy/util-middleware': 4.2.7 '@smithy/util-middleware': 4.2.7
@@ -4680,9 +4680,9 @@ snapshots:
'@smithy/types': 4.9.0 '@smithy/types': 4.9.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-env@3.966.0': '@aws-sdk/credential-provider-env@3.967.0':
dependencies: dependencies:
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
@@ -4701,15 +4701,15 @@ snapshots:
'@smithy/util-stream': 4.5.6 '@smithy/util-stream': 4.5.6
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-http@3.966.0': '@aws-sdk/credential-provider-http@3.967.0':
dependencies: dependencies:
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/fetch-http-handler': 5.3.8 '@smithy/fetch-http-handler': 5.3.8
'@smithy/node-http-handler': 4.4.7 '@smithy/node-http-handler': 4.4.7
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/smithy-client': 4.10.4 '@smithy/smithy-client': 4.10.5
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
'@smithy/util-stream': 4.5.8 '@smithy/util-stream': 4.5.8
tslib: 2.8.1 tslib: 2.8.1
@@ -4733,16 +4733,16 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-ini@3.966.0': '@aws-sdk/credential-provider-ini@3.967.0':
dependencies: dependencies:
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/credential-provider-env': 3.966.0 '@aws-sdk/credential-provider-env': 3.967.0
'@aws-sdk/credential-provider-http': 3.966.0 '@aws-sdk/credential-provider-http': 3.967.0
'@aws-sdk/credential-provider-login': 3.966.0 '@aws-sdk/credential-provider-login': 3.967.0
'@aws-sdk/credential-provider-process': 3.966.0 '@aws-sdk/credential-provider-process': 3.967.0
'@aws-sdk/credential-provider-sso': 3.966.0 '@aws-sdk/credential-provider-sso': 3.967.0
'@aws-sdk/credential-provider-web-identity': 3.966.0 '@aws-sdk/credential-provider-web-identity': 3.967.0
'@aws-sdk/nested-clients': 3.966.0 '@aws-sdk/nested-clients': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/credential-provider-imds': 4.2.7 '@smithy/credential-provider-imds': 4.2.7
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
@@ -4765,10 +4765,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-login@3.966.0': '@aws-sdk/credential-provider-login@3.967.0':
dependencies: dependencies:
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/nested-clients': 3.966.0 '@aws-sdk/nested-clients': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
@@ -4795,14 +4795,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-node@3.966.0': '@aws-sdk/credential-provider-node@3.967.0':
dependencies: dependencies:
'@aws-sdk/credential-provider-env': 3.966.0 '@aws-sdk/credential-provider-env': 3.967.0
'@aws-sdk/credential-provider-http': 3.966.0 '@aws-sdk/credential-provider-http': 3.967.0
'@aws-sdk/credential-provider-ini': 3.966.0 '@aws-sdk/credential-provider-ini': 3.967.0
'@aws-sdk/credential-provider-process': 3.966.0 '@aws-sdk/credential-provider-process': 3.967.0
'@aws-sdk/credential-provider-sso': 3.966.0 '@aws-sdk/credential-provider-sso': 3.967.0
'@aws-sdk/credential-provider-web-identity': 3.966.0 '@aws-sdk/credential-provider-web-identity': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/credential-provider-imds': 4.2.7 '@smithy/credential-provider-imds': 4.2.7
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
@@ -4821,9 +4821,9 @@ snapshots:
'@smithy/types': 4.9.0 '@smithy/types': 4.9.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-process@3.966.0': '@aws-sdk/credential-provider-process@3.967.0':
dependencies: dependencies:
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/shared-ini-file-loader': 4.4.2 '@smithy/shared-ini-file-loader': 4.4.2
@@ -4843,11 +4843,11 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-sso@3.966.0': '@aws-sdk/credential-provider-sso@3.967.0':
dependencies: dependencies:
'@aws-sdk/client-sso': 3.966.0 '@aws-sdk/client-sso': 3.967.0
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/token-providers': 3.966.0 '@aws-sdk/token-providers': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/shared-ini-file-loader': 4.4.2 '@smithy/shared-ini-file-loader': 4.4.2
@@ -4868,10 +4868,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-web-identity@3.966.0': '@aws-sdk/credential-provider-web-identity@3.967.0':
dependencies: dependencies:
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/nested-clients': 3.966.0 '@aws-sdk/nested-clients': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/shared-ini-file-loader': 4.4.2 '@smithy/shared-ini-file-loader': 4.4.2
@@ -4930,12 +4930,12 @@ snapshots:
'@smithy/util-utf8': 4.2.0 '@smithy/util-utf8': 4.2.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-flexible-checksums@3.966.0': '@aws-sdk/middleware-flexible-checksums@3.967.0':
dependencies: dependencies:
'@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32': 5.2.0
'@aws-crypto/crc32c': 5.2.0 '@aws-crypto/crc32c': 5.2.0
'@aws-crypto/util': 5.2.0 '@aws-crypto/util': 5.2.0
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/crc64-nvme': 3.965.0 '@aws-sdk/crc64-nvme': 3.965.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/is-array-buffer': 4.2.0 '@smithy/is-array-buffer': 4.2.0
@@ -5018,16 +5018,16 @@ snapshots:
'@smithy/util-utf8': 4.2.0 '@smithy/util-utf8': 4.2.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-sdk-s3@3.966.0': '@aws-sdk/middleware-sdk-s3@3.967.0':
dependencies: dependencies:
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@aws-sdk/util-arn-parser': 3.966.0 '@aws-sdk/util-arn-parser': 3.966.0
'@smithy/core': 3.20.2 '@smithy/core': 3.20.3
'@smithy/node-config-provider': 4.3.7 '@smithy/node-config-provider': 4.3.7
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/signature-v4': 5.3.7 '@smithy/signature-v4': 5.3.7
'@smithy/smithy-client': 4.10.4 '@smithy/smithy-client': 4.10.5
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
'@smithy/util-config-provider': 4.2.0 '@smithy/util-config-provider': 4.2.0
'@smithy/util-middleware': 4.2.7 '@smithy/util-middleware': 4.2.7
@@ -5057,12 +5057,12 @@ snapshots:
'@smithy/types': 4.9.0 '@smithy/types': 4.9.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-user-agent@3.966.0': '@aws-sdk/middleware-user-agent@3.967.0':
dependencies: dependencies:
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@aws-sdk/util-endpoints': 3.965.0 '@aws-sdk/util-endpoints': 3.965.0
'@smithy/core': 3.20.2 '@smithy/core': 3.20.3
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
tslib: 2.8.1 tslib: 2.8.1
@@ -5110,41 +5110,41 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/nested-clients@3.966.0': '@aws-sdk/nested-clients@3.967.0':
dependencies: dependencies:
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/middleware-host-header': 3.965.0 '@aws-sdk/middleware-host-header': 3.965.0
'@aws-sdk/middleware-logger': 3.965.0 '@aws-sdk/middleware-logger': 3.965.0
'@aws-sdk/middleware-recursion-detection': 3.965.0 '@aws-sdk/middleware-recursion-detection': 3.965.0
'@aws-sdk/middleware-user-agent': 3.966.0 '@aws-sdk/middleware-user-agent': 3.967.0
'@aws-sdk/region-config-resolver': 3.965.0 '@aws-sdk/region-config-resolver': 3.965.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@aws-sdk/util-endpoints': 3.965.0 '@aws-sdk/util-endpoints': 3.965.0
'@aws-sdk/util-user-agent-browser': 3.965.0 '@aws-sdk/util-user-agent-browser': 3.965.0
'@aws-sdk/util-user-agent-node': 3.966.0 '@aws-sdk/util-user-agent-node': 3.967.0
'@smithy/config-resolver': 4.4.5 '@smithy/config-resolver': 4.4.5
'@smithy/core': 3.20.2 '@smithy/core': 3.20.3
'@smithy/fetch-http-handler': 5.3.8 '@smithy/fetch-http-handler': 5.3.8
'@smithy/hash-node': 4.2.7 '@smithy/hash-node': 4.2.7
'@smithy/invalid-dependency': 4.2.7 '@smithy/invalid-dependency': 4.2.7
'@smithy/middleware-content-length': 4.2.7 '@smithy/middleware-content-length': 4.2.7
'@smithy/middleware-endpoint': 4.4.3 '@smithy/middleware-endpoint': 4.4.4
'@smithy/middleware-retry': 4.4.19 '@smithy/middleware-retry': 4.4.20
'@smithy/middleware-serde': 4.2.8 '@smithy/middleware-serde': 4.2.8
'@smithy/middleware-stack': 4.2.7 '@smithy/middleware-stack': 4.2.7
'@smithy/node-config-provider': 4.3.7 '@smithy/node-config-provider': 4.3.7
'@smithy/node-http-handler': 4.4.7 '@smithy/node-http-handler': 4.4.7
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/smithy-client': 4.10.4 '@smithy/smithy-client': 4.10.5
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
'@smithy/url-parser': 4.2.7 '@smithy/url-parser': 4.2.7
'@smithy/util-base64': 4.3.0 '@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1 '@smithy/util-body-length-node': 4.2.1
'@smithy/util-defaults-mode-browser': 4.3.18 '@smithy/util-defaults-mode-browser': 4.3.19
'@smithy/util-defaults-mode-node': 4.2.21 '@smithy/util-defaults-mode-node': 4.2.22
'@smithy/util-endpoints': 3.2.7 '@smithy/util-endpoints': 3.2.7
'@smithy/util-middleware': 4.2.7 '@smithy/util-middleware': 4.2.7
'@smithy/util-retry': 4.2.7 '@smithy/util-retry': 4.2.7
@@ -5178,9 +5178,9 @@ snapshots:
'@smithy/types': 4.9.0 '@smithy/types': 4.9.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/signature-v4-multi-region@3.966.0': '@aws-sdk/signature-v4-multi-region@3.967.0':
dependencies: dependencies:
'@aws-sdk/middleware-sdk-s3': 3.966.0 '@aws-sdk/middleware-sdk-s3': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/signature-v4': 5.3.7 '@smithy/signature-v4': 5.3.7
@@ -5199,10 +5199,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/token-providers@3.966.0': '@aws-sdk/token-providers@3.967.0':
dependencies: dependencies:
'@aws-sdk/core': 3.966.0 '@aws-sdk/core': 3.967.0
'@aws-sdk/nested-clients': 3.966.0 '@aws-sdk/nested-clients': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/shared-ini-file-loader': 4.4.2 '@smithy/shared-ini-file-loader': 4.4.2
@@ -5271,9 +5271,9 @@ snapshots:
'@smithy/types': 4.9.0 '@smithy/types': 4.9.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/util-user-agent-node@3.966.0': '@aws-sdk/util-user-agent-node@3.967.0':
dependencies: dependencies:
'@aws-sdk/middleware-user-agent': 3.966.0 '@aws-sdk/middleware-user-agent': 3.967.0
'@aws-sdk/types': 3.965.0 '@aws-sdk/types': 3.965.0
'@smithy/node-config-provider': 4.3.7 '@smithy/node-config-provider': 4.3.7
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
@@ -5317,7 +5317,7 @@ snapshots:
dependencies: dependencies:
'@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedrequest-interfaces': 3.0.19
'@design.estate/dees-catalog@3.34.1(@tiptap/pm@2.27.2)': '@design.estate/dees-catalog@3.36.0(@tiptap/pm@2.27.2)':
dependencies: dependencies:
'@design.estate/dees-domtools': 2.3.7 '@design.estate/dees-domtools': 2.3.7
'@design.estate/dees-element': 2.1.5 '@design.estate/dees-element': 2.1.5
@@ -5521,7 +5521,7 @@ snapshots:
dependencies: dependencies:
'@fortawesome/fontawesome-common-types': 7.1.0 '@fortawesome/fontawesome-common-types': 7.1.0
'@git.zone/tsbuild@4.1.0': '@git.zone/tsbuild@4.1.2':
dependencies: dependencies:
'@git.zone/tspublish': 1.11.0 '@git.zone/tspublish': 1.11.0
'@push.rocks/early': 4.0.4 '@push.rocks/early': 4.0.4
@@ -6152,7 +6152,7 @@ snapshots:
'@push.rocks/smartbucket@3.3.10': '@push.rocks/smartbucket@3.3.10':
dependencies: dependencies:
'@aws-sdk/client-s3': 3.966.0 '@aws-sdk/client-s3': 3.967.0
'@push.rocks/smartmime': 2.0.4 '@push.rocks/smartmime': 2.0.4
'@push.rocks/smartpath': 6.0.0 '@push.rocks/smartpath': 6.0.0
'@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartpromise': 4.2.3
@@ -7050,7 +7050,7 @@ snapshots:
'@smithy/uuid': 1.1.0 '@smithy/uuid': 1.1.0
tslib: 2.8.1 tslib: 2.8.1
'@smithy/core@3.20.2': '@smithy/core@3.20.3':
dependencies: dependencies:
'@smithy/middleware-serde': 4.2.8 '@smithy/middleware-serde': 4.2.8
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
@@ -7248,9 +7248,9 @@ snapshots:
'@smithy/util-middleware': 4.2.5 '@smithy/util-middleware': 4.2.5
tslib: 2.8.1 tslib: 2.8.1
'@smithy/middleware-endpoint@4.4.3': '@smithy/middleware-endpoint@4.4.4':
dependencies: dependencies:
'@smithy/core': 3.20.2 '@smithy/core': 3.20.3
'@smithy/middleware-serde': 4.2.8 '@smithy/middleware-serde': 4.2.8
'@smithy/node-config-provider': 4.3.7 '@smithy/node-config-provider': 4.3.7
'@smithy/shared-ini-file-loader': 4.4.2 '@smithy/shared-ini-file-loader': 4.4.2
@@ -7271,12 +7271,12 @@ snapshots:
'@smithy/uuid': 1.1.0 '@smithy/uuid': 1.1.0
tslib: 2.8.1 tslib: 2.8.1
'@smithy/middleware-retry@4.4.19': '@smithy/middleware-retry@4.4.20':
dependencies: dependencies:
'@smithy/node-config-provider': 4.3.7 '@smithy/node-config-provider': 4.3.7
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/service-error-classification': 4.2.7 '@smithy/service-error-classification': 4.2.7
'@smithy/smithy-client': 4.10.4 '@smithy/smithy-client': 4.10.5
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
'@smithy/util-middleware': 4.2.7 '@smithy/util-middleware': 4.2.7
'@smithy/util-retry': 4.2.7 '@smithy/util-retry': 4.2.7
@@ -7417,10 +7417,10 @@ snapshots:
'@smithy/util-utf8': 4.2.0 '@smithy/util-utf8': 4.2.0
tslib: 2.8.1 tslib: 2.8.1
'@smithy/smithy-client@4.10.4': '@smithy/smithy-client@4.10.5':
dependencies: dependencies:
'@smithy/core': 3.20.2 '@smithy/core': 3.20.3
'@smithy/middleware-endpoint': 4.4.3 '@smithy/middleware-endpoint': 4.4.4
'@smithy/middleware-stack': 4.2.7 '@smithy/middleware-stack': 4.2.7
'@smithy/protocol-http': 5.3.7 '@smithy/protocol-http': 5.3.7
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
@@ -7492,10 +7492,10 @@ snapshots:
'@smithy/types': 4.9.0 '@smithy/types': 4.9.0
tslib: 2.8.1 tslib: 2.8.1
'@smithy/util-defaults-mode-browser@4.3.18': '@smithy/util-defaults-mode-browser@4.3.19':
dependencies: dependencies:
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/smithy-client': 4.10.4 '@smithy/smithy-client': 4.10.5
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
tslib: 2.8.1 tslib: 2.8.1
@@ -7509,13 +7509,13 @@ snapshots:
'@smithy/types': 4.9.0 '@smithy/types': 4.9.0
tslib: 2.8.1 tslib: 2.8.1
'@smithy/util-defaults-mode-node@4.2.21': '@smithy/util-defaults-mode-node@4.2.22':
dependencies: dependencies:
'@smithy/config-resolver': 4.4.5 '@smithy/config-resolver': 4.4.5
'@smithy/credential-provider-imds': 4.2.7 '@smithy/credential-provider-imds': 4.2.7
'@smithy/node-config-provider': 4.3.7 '@smithy/node-config-provider': 4.3.7
'@smithy/property-provider': 4.2.7 '@smithy/property-provider': 4.2.7
'@smithy/smithy-client': 4.10.4 '@smithy/smithy-client': 4.10.5
'@smithy/types': 4.11.0 '@smithy/types': 4.11.0
tslib: 2.8.1 tslib: 2.8.1
@@ -7814,27 +7814,27 @@ snapshots:
'@types/bn.js@5.2.0': '@types/bn.js@5.2.0':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/body-parser@1.19.6': '@types/body-parser@1.19.6':
dependencies: dependencies:
'@types/connect': 3.4.38 '@types/connect': 3.4.38
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/buffer-json@2.0.3': {} '@types/buffer-json@2.0.3': {}
'@types/clean-css@4.2.11': '@types/clean-css@4.2.11':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
source-map: 0.6.1 source-map: 0.6.1
'@types/connect@3.4.38': '@types/connect@3.4.38':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/cors@2.8.19': '@types/cors@2.8.19':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/debug@4.1.12': '@types/debug@4.1.12':
dependencies: dependencies:
@@ -7842,7 +7842,7 @@ snapshots:
'@types/dns-packet@5.6.5': '@types/dns-packet@5.6.5':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/elliptic@6.4.18': '@types/elliptic@6.4.18':
dependencies: dependencies:
@@ -7850,7 +7850,7 @@ snapshots:
'@types/express-serve-static-core@5.1.0': '@types/express-serve-static-core@5.1.0':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/qs': 6.14.0 '@types/qs': 6.14.0
'@types/range-parser': 1.2.7 '@types/range-parser': 1.2.7
'@types/send': 1.2.1 '@types/send': 1.2.1
@@ -7863,17 +7863,17 @@ snapshots:
'@types/from2@2.3.6': '@types/from2@2.3.6':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/fs-extra@11.0.4': '@types/fs-extra@11.0.4':
dependencies: dependencies:
'@types/jsonfile': 6.1.4 '@types/jsonfile': 6.1.4
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/glob@8.1.0': '@types/glob@8.1.0':
dependencies: dependencies:
'@types/minimatch': 5.1.2 '@types/minimatch': 5.1.2
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/hast@3.0.4': '@types/hast@3.0.4':
dependencies: dependencies:
@@ -7895,7 +7895,7 @@ snapshots:
'@types/jsonfile@6.1.4': '@types/jsonfile@6.1.4':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/linkify-it@5.0.0': {} '@types/linkify-it@5.0.0': {}
@@ -7918,17 +7918,17 @@ snapshots:
'@types/mute-stream@0.0.4': '@types/mute-stream@0.0.4':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/node-forge@1.3.14': '@types/node-forge@1.3.14':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/node@22.19.5': '@types/node@22.19.5':
dependencies: dependencies:
undici-types: 6.21.0 undici-types: 6.21.0
'@types/node@25.0.6': '@types/node@25.0.7':
dependencies: dependencies:
undici-types: 7.16.0 undici-types: 7.16.0
@@ -7946,22 +7946,22 @@ snapshots:
'@types/send@1.2.1': '@types/send@1.2.1':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/serve-static@2.2.0': '@types/serve-static@2.2.0':
dependencies: dependencies:
'@types/http-errors': 2.0.5 '@types/http-errors': 2.0.5
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/symbol-tree@3.2.5': {} '@types/symbol-tree@3.2.5': {}
'@types/tar-stream@3.1.4': '@types/tar-stream@3.1.4':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/through2@2.0.41': '@types/through2@2.0.41':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/trusted-types@2.0.7': {} '@types/trusted-types@2.0.7': {}
@@ -7987,11 +7987,11 @@ snapshots:
'@types/ws@8.18.1': '@types/ws@8.18.1':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
dependencies: dependencies:
'@types/node': 25.0.6 '@types/node': 25.0.7
optional: true optional: true
'@ungap/structured-clone@1.3.0': {} '@ungap/structured-clone@1.3.0': {}
@@ -8423,7 +8423,7 @@ snapshots:
engine.io@6.6.4: engine.io@6.6.4:
dependencies: dependencies:
'@types/cors': 2.8.19 '@types/cors': 2.8.19
'@types/node': 25.0.6 '@types/node': 25.0.7
accepts: 1.3.8 accepts: 1.3.8
base64id: 2.0.0 base64id: 2.0.0
cookie: 0.7.2 cookie: 0.7.2

View File

@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@ecobridge.xyz/catalog', name: '@ecobridge.xyz/catalog',
version: '3.37.0', version: '3.40.0',
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.' description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
} }

View File

@@ -0,0 +1,149 @@
import { html } from '@design.estate/dees-element';
import type { IContainer } from './eco-view-containers.js';
import type { ILogEntry } from '@design.estate/dees-catalog';
const sampleContainers: IContainer[] = [
{
id: 'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6',
name: 'nginx-proxy',
image: 'nginx:alpine',
status: 'running',
state: 'Up 3 days',
created: '2025-01-09T14:30:00Z',
ports: [
{ hostPort: 80, containerPort: 80, protocol: 'tcp' },
{ hostPort: 443, containerPort: 443, protocol: 'tcp' },
],
networks: ['bridge', 'web-network'],
mounts: [
{ source: '/etc/nginx/conf.d', destination: '/etc/nginx/conf.d', mode: 'ro' },
{ source: '/var/log/nginx', destination: '/var/log/nginx', mode: 'rw' },
],
cpuPercent: 2.5,
memoryUsage: 52428800, // 50 MB
memoryLimit: 536870912, // 512 MB
networkRx: 1073741824, // 1 GB
networkTx: 536870912, // 512 MB
},
{
id: 'b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a1',
name: 'postgres-db',
image: 'postgres:15',
status: 'running',
state: 'Up 5 days',
created: '2025-01-07T10:00:00Z',
ports: [
{ hostPort: 5432, containerPort: 5432, protocol: 'tcp' },
],
networks: ['db-network'],
mounts: [
{ source: '/var/lib/postgresql/data', destination: '/var/lib/postgresql/data', mode: 'rw' },
],
cpuPercent: 8.3,
memoryUsage: 268435456, // 256 MB
memoryLimit: 1073741824, // 1 GB
networkRx: 2147483648, // 2 GB
networkTx: 1073741824, // 1 GB
},
{
id: 'c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a1b2',
name: 'redis-cache',
image: 'redis:7-alpine',
status: 'running',
state: 'Up 2 hours',
created: '2025-01-12T08:00:00Z',
ports: [
{ hostPort: 6379, containerPort: 6379, protocol: 'tcp' },
],
networks: ['cache-network', 'web-network'],
mounts: [],
cpuPercent: 0.5,
memoryUsage: 16777216, // 16 MB
memoryLimit: 134217728, // 128 MB
networkRx: 52428800, // 50 MB
networkTx: 26214400, // 25 MB
},
{
id: 'd4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a1b2c3',
name: 'node-api',
image: 'node:20-alpine',
status: 'running',
state: 'Up 1 day',
created: '2025-01-11T12:00:00Z',
ports: [
{ hostPort: 3000, containerPort: 3000, protocol: 'tcp' },
],
networks: ['web-network', 'db-network'],
mounts: [
{ source: '/app', destination: '/app', mode: 'rw' },
{ source: '/app/node_modules', destination: '/app/node_modules', mode: 'rw' },
],
cpuPercent: 45.2,
memoryUsage: 524288000, // 500 MB
memoryLimit: 1073741824, // 1 GB
networkRx: 104857600, // 100 MB
networkTx: 52428800, // 50 MB
},
{
id: 'e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a1b2c3d4',
name: 'mongodb-old',
image: 'mongo:4.4',
status: 'stopped',
state: 'Exited (0) 2 days ago',
created: '2024-12-20T10:00:00Z',
ports: [],
networks: ['db-network'],
mounts: [
{ source: '/var/lib/mongodb', destination: '/data/db', mode: 'rw' },
],
cpuPercent: 0,
memoryUsage: 0,
memoryLimit: 2147483648, // 2 GB
networkRx: 0,
networkTx: 0,
},
];
const sampleLogs: ILogEntry[] = [
{ timestamp: '2025-01-12T10:00:00Z', level: 'info', message: 'Container started successfully', source: 'docker' },
{ timestamp: '2025-01-12T10:00:01Z', level: 'info', message: 'Listening on port 80', source: 'nginx' },
{ timestamp: '2025-01-12T10:00:01Z', level: 'info', message: 'Listening on port 443', source: 'nginx' },
{ timestamp: '2025-01-12T10:00:05Z', level: 'debug', message: 'Worker process started (PID: 1234)', source: 'nginx' },
{ timestamp: '2025-01-12T10:00:10Z', level: 'info', message: 'Configuration loaded from /etc/nginx/nginx.conf', source: 'nginx' },
{ timestamp: '2025-01-12T10:01:00Z', level: 'info', message: 'GET /api/health 200 5ms', source: 'nginx' },
{ timestamp: '2025-01-12T10:01:15Z', level: 'info', message: 'GET /api/users 200 45ms', source: 'nginx' },
{ timestamp: '2025-01-12T10:01:30Z', level: 'warn', message: 'Upstream server temporarily unavailable', source: 'nginx' },
{ timestamp: '2025-01-12T10:01:31Z', level: 'info', message: 'Retrying upstream connection...', source: 'nginx' },
{ timestamp: '2025-01-12T10:01:32Z', level: 'success', message: 'Upstream connection restored', source: 'nginx' },
{ timestamp: '2025-01-12T10:02:00Z', level: 'info', message: 'POST /api/login 200 120ms', source: 'nginx' },
{ timestamp: '2025-01-12T10:02:30Z', level: 'info', message: 'GET /api/products 200 80ms', source: 'nginx' },
{ timestamp: '2025-01-12T10:03:00Z', level: 'error', message: 'Connection refused from 192.168.1.100', source: 'nginx' },
{ timestamp: '2025-01-12T10:03:05Z', level: 'warn', message: 'Rate limit exceeded for IP 192.168.1.100', source: 'nginx' },
{ timestamp: '2025-01-12T10:03:30Z', level: 'info', message: 'GET /api/health 200 3ms', source: 'nginx' },
{ timestamp: '2025-01-12T10:04:00Z', level: 'debug', message: 'Cache hit for /static/main.js', source: 'nginx' },
{ timestamp: '2025-01-12T10:04:30Z', level: 'info', message: 'SSL certificate valid for 89 days', source: 'nginx' },
{ timestamp: '2025-01-12T10:05:00Z', level: 'info', message: 'GET /api/orders 200 150ms', source: 'nginx' },
];
export const demo = () => html`
<style>
.demo-container {
width: 100%;
height: 100%;
min-height: 600px;
background: hsl(240 10% 4%);
border-radius: 12px;
overflow: hidden;
}
</style>
<div class="demo-container">
<eco-view-containers
.containers=${sampleContainers}
.logEntries=${sampleLogs}
@container-action=${(e: CustomEvent) => {
console.log('Container action:', e.detail);
alert(`Action: ${e.detail.action} on container ${e.detail.containerId.substring(0, 12)}`);
}}
></eco-view-containers>
</div>
`;

View File

@@ -0,0 +1,933 @@
import {
customElement,
DeesElement,
type TemplateResult,
html,
property,
css,
cssManager,
state,
} from '@design.estate/dees-element';
import {
DeesAppuiSecondarymenu,
DeesIcon,
DeesStatsGrid,
DeesChartLog,
DeesButton,
type ILogEntry,
} from '@design.estate/dees-catalog';
import type { ISecondaryMenuGroup, ISecondaryMenuItem } from '../../elements/interfaces/secondarymenu.js';
import { demo } from './eco-view-containers.demo.js';
// Ensure components are registered
DeesAppuiSecondarymenu;
DeesIcon;
DeesStatsGrid;
DeesChartLog;
DeesButton;
declare global {
interface HTMLElementTagNameMap {
'eco-view-containers': EcoViewContainers;
}
}
export interface IContainer {
id: string;
name: string;
image: string;
status: 'running' | 'stopped' | 'paused' | 'restarting' | 'exited';
state: string;
created: string;
ports: Array<{ hostPort: number; containerPort: number; protocol: string }>;
networks: string[];
mounts: Array<{ source: string; destination: string; mode: string }>;
cpuPercent: number;
memoryUsage: number;
memoryLimit: number;
networkRx: number;
networkTx: number;
}
export type TContainerPanel = 'overview' | 'logs' | 'stats' | 'inspect' | 'terminal';
@customElement('eco-view-containers')
export class EcoViewContainers extends DeesElement {
public static demo = demo;
public static demoGroup = 'Views';
public static styles = [
cssManager.defaultStyles,
css`
:host {
display: block;
width: 100%;
height: 100%;
background: ${cssManager.bdTheme('#f5f5f7', 'hsl(240 6% 10%)')};
color: ${cssManager.bdTheme('hsl(0 0% 10%)', 'hsl(0 0% 98%)')};
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}
.containers-container {
display: flex;
height: 100%;
}
dees-appui-secondarymenu {
flex-shrink: 0;
background: ${cssManager.bdTheme('#ffffff', 'hsl(240 6% 8%)')};
border-right: 1px solid ${cssManager.bdTheme('hsl(0 0% 90%)', 'hsl(240 5% 15%)')};
}
.content {
flex: 1;
overflow-y: auto;
padding: 32px 48px;
display: flex;
flex-direction: column;
}
.panel-header {
margin-bottom: 32px;
}
.panel-title {
font-size: 28px;
font-weight: 600;
color: ${cssManager.bdTheme('hsl(0 0% 10%)', 'hsl(0 0% 98%)')};
margin-bottom: 8px;
display: flex;
align-items: center;
gap: 12px;
}
.panel-description {
font-size: 14px;
color: ${cssManager.bdTheme('hsl(0 0% 50%)', 'hsl(0 0% 60%)')};
}
.status-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 12px;
border-radius: 12px;
font-size: 12px;
font-weight: 500;
text-transform: uppercase;
}
.status-badge.running {
background: hsla(142, 71%, 45%, 0.15);
color: hsl(142, 71%, 45%);
}
.status-badge.stopped,
.status-badge.exited {
background: hsla(0, 0%, 50%, 0.15);
color: hsl(0, 0%, 50%);
}
.status-badge.paused {
background: hsla(45, 93%, 47%, 0.15);
color: hsl(45, 93%, 47%);
}
.status-badge.restarting {
background: hsla(217, 91%, 60%, 0.15);
color: hsl(217, 91%, 60%);
}
.status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: currentColor;
}
.stats-section {
margin-bottom: 32px;
}
.section-title {
font-size: 13px;
font-weight: 600;
color: ${cssManager.bdTheme('hsl(0 0% 50%)', 'hsl(0 0% 50%)')};
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 16px;
}
.actions-bar {
display: flex;
gap: 12px;
margin-bottom: 24px;
}
.info-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 16px;
margin-bottom: 32px;
}
.info-card {
background: ${cssManager.bdTheme('#ffffff', 'hsl(240 6% 12%)')};
border: 1px solid ${cssManager.bdTheme('hsl(0 0% 90%)', 'hsl(240 5% 18%)')};
border-radius: 12px;
padding: 20px;
}
.info-card-title {
font-size: 13px;
font-weight: 600;
color: ${cssManager.bdTheme('hsl(0 0% 50%)', 'hsl(0 0% 50%)')};
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 12px;
}
.info-row {
display: flex;
justify-content: space-between;
padding: 8px 0;
border-bottom: 1px solid ${cssManager.bdTheme('hsl(0 0% 94%)', 'hsl(240 5% 15%)')};
}
.info-row:last-child {
border-bottom: none;
}
.info-label {
font-size: 14px;
color: ${cssManager.bdTheme('hsl(0 0% 50%)', 'hsl(0 0% 55%)')};
}
.info-value {
font-size: 14px;
font-weight: 500;
color: ${cssManager.bdTheme('hsl(0 0% 20%)', 'hsl(0 0% 85%)')};
font-family: ui-monospace, monospace;
}
.ports-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.port-badge {
background: ${cssManager.bdTheme('hsl(217 91% 95%)', 'hsl(217 91% 20%)')};
color: ${cssManager.bdTheme('hsl(217 91% 40%)', 'hsl(217 91% 70%)')};
padding: 4px 8px;
border-radius: 6px;
font-size: 12px;
font-family: ui-monospace, monospace;
}
.networks-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.network-badge {
background: ${cssManager.bdTheme('hsl(262 83% 95%)', 'hsl(262 83% 20%)')};
color: ${cssManager.bdTheme('hsl(262 83% 45%)', 'hsl(262 83% 70%)')};
padding: 4px 8px;
border-radius: 6px;
font-size: 12px;
}
.logs-container {
flex: 1;
min-height: 400px;
display: flex;
flex-direction: column;
}
dees-chart-log {
flex: 1;
min-height: 0;
}
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
color: ${cssManager.bdTheme('hsl(0 0% 50%)', 'hsl(0 0% 50%)')};
text-align: center;
padding: 48px;
}
.empty-state dees-icon {
margin-bottom: 16px;
opacity: 0.5;
}
.empty-state-title {
font-size: 18px;
font-weight: 600;
margin-bottom: 8px;
}
.empty-state-description {
font-size: 14px;
max-width: 400px;
}
.mounts-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.mount-item {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
background: ${cssManager.bdTheme('hsl(0 0% 97%)', 'hsl(240 5% 14%)')};
border-radius: 8px;
font-size: 13px;
font-family: ui-monospace, monospace;
}
.mount-source {
color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 65%)')};
}
.mount-arrow {
color: ${cssManager.bdTheme('hsl(0 0% 60%)', 'hsl(0 0% 45%)')};
}
.mount-dest {
color: ${cssManager.bdTheme('hsl(0 0% 20%)', 'hsl(0 0% 85%)')};
}
.mount-mode {
margin-left: auto;
padding: 2px 6px;
background: ${cssManager.bdTheme('hsl(0 0% 90%)', 'hsl(240 5% 20%)')};
border-radius: 4px;
font-size: 11px;
color: ${cssManager.bdTheme('hsl(0 0% 50%)', 'hsl(0 0% 60%)')};
}
.tabs-container {
display: flex;
gap: 4px;
margin-bottom: 24px;
border-bottom: 1px solid ${cssManager.bdTheme('hsl(0 0% 90%)', 'hsl(240 5% 18%)')};
padding-bottom: -1px;
}
.tab-button {
padding: 10px 16px;
font-size: 14px;
font-weight: 500;
color: ${cssManager.bdTheme('hsl(0 0% 50%)', 'hsl(0 0% 55%)')};
background: transparent;
border: none;
border-bottom: 2px solid transparent;
cursor: pointer;
transition: all 0.15s ease;
margin-bottom: -1px;
}
.tab-button:hover {
color: ${cssManager.bdTheme('hsl(0 0% 30%)', 'hsl(0 0% 75%)')};
}
.tab-button.active {
color: ${cssManager.bdTheme('hsl(217 91% 50%)', 'hsl(217 91% 60%)')};
border-bottom-color: hsl(217 91% 60%);
}
`,
];
@property({ type: Array })
accessor containers: IContainer[] = [];
@state()
accessor selectedContainerId: string | null = null;
@state()
accessor activePanel: TContainerPanel = 'overview';
@state()
accessor logEntries: ILogEntry[] = [];
private get selectedContainer(): IContainer | null {
return this.containers.find(c => c.id === this.selectedContainerId) || null;
}
// Helper to format bytes
private formatBytes(bytes: number): string {
if (bytes === 0) return '0 B';
const k = 1024;
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
}
// Helper to format container ID (short form)
private formatContainerId(id: string): string {
return id.substring(0, 12);
}
private getStatusBadgeVariant(status: IContainer['status']): 'default' | 'success' | 'warning' | 'error' {
switch (status) {
case 'running':
return 'success';
case 'paused':
return 'warning';
case 'stopped':
case 'exited':
return 'error';
case 'restarting':
return 'default';
default:
return 'default';
}
}
private getMenuGroups(): ISecondaryMenuGroup[] {
const runningContainers = this.containers.filter(c => c.status === 'running');
const stoppedContainers = this.containers.filter(c => c.status !== 'running');
const groups: ISecondaryMenuGroup[] = [];
if (runningContainers.length > 0) {
groups.push({
name: 'Running',
iconName: 'lucide:play',
items: runningContainers.map(container => ({
key: container.id,
iconName: 'lucide:container',
action: () => {
this.selectedContainerId = container.id;
this.activePanel = 'overview';
},
badge: container.cpuPercent > 0 ? `${container.cpuPercent.toFixed(0)}%` : undefined,
badgeVariant: container.cpuPercent > 80 ? 'warning' as const : 'default' as const,
})),
});
}
if (stoppedContainers.length > 0) {
groups.push({
name: 'Stopped',
iconName: 'lucide:square',
items: stoppedContainers.map(container => ({
key: container.id,
iconName: 'lucide:container',
action: () => {
this.selectedContainerId = container.id;
this.activePanel = 'overview';
},
})),
});
}
if (this.containers.length === 0) {
groups.push({
name: 'Containers',
iconName: 'lucide:container',
items: [
{
type: 'header' as const,
label: 'No containers found',
},
],
});
}
return groups;
}
private getSelectedItem(): ISecondaryMenuItem | null {
if (!this.selectedContainerId) return null;
for (const group of this.getMenuGroups()) {
for (const item of group.items) {
if ('key' in item && item.key === this.selectedContainerId) {
return item;
}
}
}
return null;
}
// Public method to add containers
public setContainers(containers: IContainer[]): void {
this.containers = containers;
// Auto-select first container if none selected
if (!this.selectedContainerId && containers.length > 0) {
this.selectedContainerId = containers[0].id;
}
}
// Public method to update log entries for the selected container
public setLogs(logs: ILogEntry[]): void {
this.logEntries = logs;
}
// Public method to add a single log entry
public addLog(log: ILogEntry): void {
this.logEntries = [...this.logEntries, log];
}
// Events for container actions
private emitContainerAction(action: 'start' | 'stop' | 'restart' | 'remove', containerId: string): void {
this.dispatchEvent(new CustomEvent('container-action', {
detail: { action, containerId },
bubbles: true,
composed: true,
}));
}
public render(): TemplateResult {
return html`
<div class="containers-container">
<dees-appui-secondarymenu
.heading=${'Containers'}
.groups=${this.getMenuGroups()}
.selectedItem=${this.getSelectedItem()}
></dees-appui-secondarymenu>
<div class="content">
${this.selectedContainer ? this.renderContainerDetails() : this.renderEmptyState()}
</div>
</div>
`;
}
private renderEmptyState(): TemplateResult {
return html`
<div class="empty-state">
<dees-icon .icon=${'lucide:container'} .iconSize=${64}></dees-icon>
<div class="empty-state-title">No Container Selected</div>
<div class="empty-state-description">
Select a container from the list to view its details, logs, and statistics.
</div>
</div>
`;
}
private renderContainerDetails(): TemplateResult {
const container = this.selectedContainer!;
return html`
<div class="panel-header">
<div class="panel-title">
${container.name}
<span class="status-badge ${container.status}">
<span class="status-dot"></span>
${container.status}
</span>
</div>
<div class="panel-description">${container.image}</div>
</div>
<div class="actions-bar">
${container.status === 'running' ? html`
<dees-button
.type=${'secondary'}
@click=${() => this.emitContainerAction('stop', container.id)}
>
<dees-icon .icon=${'lucide:square'} .iconSize=${14}></dees-icon>
Stop
</dees-button>
<dees-button
.type=${'secondary'}
@click=${() => this.emitContainerAction('restart', container.id)}
>
<dees-icon .icon=${'lucide:refreshCw'} .iconSize=${14}></dees-icon>
Restart
</dees-button>
` : html`
<dees-button
.type=${'secondary'}
@click=${() => this.emitContainerAction('start', container.id)}
>
<dees-icon .icon=${'lucide:play'} .iconSize=${14}></dees-icon>
Start
</dees-button>
`}
<dees-button
.type=${'destructive'}
@click=${() => this.emitContainerAction('remove', container.id)}
>
<dees-icon .icon=${'lucide:trash2'} .iconSize=${14}></dees-icon>
Remove
</dees-button>
</div>
<div class="tabs-container">
<button
class="tab-button ${this.activePanel === 'overview' ? 'active' : ''}"
@click=${() => this.activePanel = 'overview'}
>Overview</button>
<button
class="tab-button ${this.activePanel === 'logs' ? 'active' : ''}"
@click=${() => this.activePanel = 'logs'}
>Logs</button>
<button
class="tab-button ${this.activePanel === 'stats' ? 'active' : ''}"
@click=${() => this.activePanel = 'stats'}
>Stats</button>
<button
class="tab-button ${this.activePanel === 'inspect' ? 'active' : ''}"
@click=${() => this.activePanel = 'inspect'}
>Inspect</button>
</div>
${this.renderActivePanel()}
`;
}
private renderActivePanel(): TemplateResult {
switch (this.activePanel) {
case 'overview':
return this.renderOverviewPanel();
case 'logs':
return this.renderLogsPanel();
case 'stats':
return this.renderStatsPanel();
case 'inspect':
return this.renderInspectPanel();
default:
return this.renderOverviewPanel();
}
}
private renderOverviewPanel(): TemplateResult {
const container = this.selectedContainer!;
const memPercent = container.memoryLimit > 0
? Math.round((container.memoryUsage / container.memoryLimit) * 100)
: 0;
const overviewTiles = [
{
id: 'cpu',
title: 'CPU Usage',
value: container.cpuPercent,
type: 'gauge' as const,
icon: 'lucide:cpu',
gaugeOptions: {
min: 0,
max: 100,
thresholds: [
{ value: 0, color: 'hsl(142 71% 45%)' },
{ value: 60, color: 'hsl(45 93% 47%)' },
{ value: 80, color: 'hsl(0 84% 60%)' },
],
},
},
{
id: 'memory',
title: 'Memory Usage',
value: memPercent,
type: 'gauge' as const,
icon: 'lucide:memoryStick',
description: `${this.formatBytes(container.memoryUsage)} / ${this.formatBytes(container.memoryLimit)}`,
gaugeOptions: {
min: 0,
max: 100,
thresholds: [
{ value: 0, color: 'hsl(142 71% 45%)' },
{ value: 70, color: 'hsl(45 93% 47%)' },
{ value: 85, color: 'hsl(0 84% 60%)' },
],
},
},
{
id: 'network-rx',
title: 'Network In',
value: this.formatBytes(container.networkRx),
type: 'text' as const,
icon: 'lucide:download',
color: 'hsl(142 71% 45%)',
},
{
id: 'network-tx',
title: 'Network Out',
value: this.formatBytes(container.networkTx),
type: 'text' as const,
icon: 'lucide:upload',
color: 'hsl(217 91% 60%)',
},
];
return html`
<div class="stats-section">
<dees-statsgrid
.tiles=${overviewTiles}
.minTileWidth=${200}
.gap=${16}
></dees-statsgrid>
</div>
<div class="info-grid">
<div class="info-card">
<div class="info-card-title">Container Info</div>
<div class="info-row">
<span class="info-label">Container ID</span>
<span class="info-value">${this.formatContainerId(container.id)}</span>
</div>
<div class="info-row">
<span class="info-label">Image</span>
<span class="info-value">${container.image}</span>
</div>
<div class="info-row">
<span class="info-label">Created</span>
<span class="info-value">${container.created}</span>
</div>
<div class="info-row">
<span class="info-label">State</span>
<span class="info-value">${container.state}</span>
</div>
</div>
<div class="info-card">
<div class="info-card-title">Ports</div>
${container.ports.length > 0 ? html`
<div class="ports-list">
${container.ports.map(port => html`
<span class="port-badge">
${port.hostPort}:${port.containerPort}/${port.protocol}
</span>
`)}
</div>
` : html`
<div class="info-row">
<span class="info-label">No ports exposed</span>
</div>
`}
</div>
<div class="info-card">
<div class="info-card-title">Networks</div>
${container.networks.length > 0 ? html`
<div class="networks-list">
${container.networks.map(network => html`
<span class="network-badge">${network}</span>
`)}
</div>
` : html`
<div class="info-row">
<span class="info-label">No networks attached</span>
</div>
`}
</div>
${container.mounts.length > 0 ? html`
<div class="info-card">
<div class="info-card-title">Volumes & Mounts</div>
<div class="mounts-list">
${container.mounts.map(mount => html`
<div class="mount-item">
<span class="mount-source">${mount.source}</span>
<span class="mount-arrow">→</span>
<span class="mount-dest">${mount.destination}</span>
<span class="mount-mode">${mount.mode}</span>
</div>
`)}
</div>
</div>
` : ''}
</div>
`;
}
private renderLogsPanel(): TemplateResult {
return html`
<div class="logs-container">
<dees-chart-log
.label=${'Container Logs'}
.mode=${'structured'}
.logEntries=${this.logEntries}
.autoScroll=${true}
.showMetrics=${true}
.maxEntries=${1000}
></dees-chart-log>
</div>
`;
}
private renderStatsPanel(): TemplateResult {
const container = this.selectedContainer!;
const memPercent = container.memoryLimit > 0
? Math.round((container.memoryUsage / container.memoryLimit) * 100)
: 0;
const statsTiles = [
{
id: 'cpu-detail',
title: 'CPU Usage',
value: container.cpuPercent,
type: 'gauge' as const,
icon: 'lucide:cpu',
description: 'Current CPU utilization',
gaugeOptions: {
min: 0,
max: 100,
thresholds: [
{ value: 0, color: 'hsl(142 71% 45%)' },
{ value: 60, color: 'hsl(45 93% 47%)' },
{ value: 80, color: 'hsl(0 84% 60%)' },
],
},
},
{
id: 'memory-detail',
title: 'Memory Usage',
value: memPercent,
type: 'gauge' as const,
icon: 'lucide:memoryStick',
gaugeOptions: {
min: 0,
max: 100,
thresholds: [
{ value: 0, color: 'hsl(142 71% 45%)' },
{ value: 70, color: 'hsl(45 93% 47%)' },
{ value: 85, color: 'hsl(0 84% 60%)' },
],
},
},
{
id: 'mem-used',
title: 'Memory Used',
value: this.formatBytes(container.memoryUsage),
type: 'text' as const,
icon: 'lucide:hardDrive',
color: 'hsl(217 91% 60%)',
},
{
id: 'mem-limit',
title: 'Memory Limit',
value: this.formatBytes(container.memoryLimit),
type: 'text' as const,
icon: 'lucide:gauge',
color: 'hsl(262 83% 58%)',
},
{
id: 'net-rx',
title: 'Total Network RX',
value: this.formatBytes(container.networkRx),
type: 'text' as const,
icon: 'lucide:download',
color: 'hsl(142 71% 45%)',
},
{
id: 'net-tx',
title: 'Total Network TX',
value: this.formatBytes(container.networkTx),
type: 'text' as const,
icon: 'lucide:upload',
color: 'hsl(217 91% 60%)',
},
];
return html`
<div class="stats-section">
<dees-statsgrid
.tiles=${statsTiles}
.minTileWidth=${200}
.gap=${16}
></dees-statsgrid>
</div>
`;
}
private renderInspectPanel(): TemplateResult {
const container = this.selectedContainer!;
return html`
<div class="info-grid">
<div class="info-card">
<div class="info-card-title">Container Details</div>
<div class="info-row">
<span class="info-label">ID</span>
<span class="info-value">${container.id}</span>
</div>
<div class="info-row">
<span class="info-label">Name</span>
<span class="info-value">${container.name}</span>
</div>
<div class="info-row">
<span class="info-label">Image</span>
<span class="info-value">${container.image}</span>
</div>
<div class="info-row">
<span class="info-label">Created</span>
<span class="info-value">${container.created}</span>
</div>
<div class="info-row">
<span class="info-label">Status</span>
<span class="info-value">${container.status}</span>
</div>
<div class="info-row">
<span class="info-label">State</span>
<span class="info-value">${container.state}</span>
</div>
</div>
<div class="info-card">
<div class="info-card-title">Network Configuration</div>
${container.ports.map(port => html`
<div class="info-row">
<span class="info-label">Port Mapping</span>
<span class="info-value">${port.hostPort}:${port.containerPort}/${port.protocol}</span>
</div>
`)}
${container.networks.map(network => html`
<div class="info-row">
<span class="info-label">Network</span>
<span class="info-value">${network}</span>
</div>
`)}
${container.ports.length === 0 && container.networks.length === 0 ? html`
<div class="info-row">
<span class="info-label">No network configuration</span>
</div>
` : ''}
</div>
<div class="info-card">
<div class="info-card-title">Storage</div>
${container.mounts.length > 0 ? container.mounts.map(mount => html`
<div class="info-row">
<span class="info-label">${mount.destination}</span>
<span class="info-value">${mount.source} (${mount.mode})</span>
</div>
`) : html`
<div class="info-row">
<span class="info-label">No volumes mounted</span>
</div>
`}
</div>
<div class="info-card">
<div class="info-card-title">Resource Usage</div>
<div class="info-row">
<span class="info-label">CPU</span>
<span class="info-value">${container.cpuPercent.toFixed(2)}%</span>
</div>
<div class="info-row">
<span class="info-label">Memory</span>
<span class="info-value">${this.formatBytes(container.memoryUsage)} / ${this.formatBytes(container.memoryLimit)}</span>
</div>
<div class="info-row">
<span class="info-label">Network RX</span>
<span class="info-value">${this.formatBytes(container.networkRx)}</span>
</div>
<div class="info-row">
<span class="info-label">Network TX</span>
<span class="info-value">${this.formatBytes(container.networkTx)}</span>
</div>
</div>
</div>
`;
}
}

View File

@@ -0,0 +1 @@
export * from './eco-view-containers.js';

View File

@@ -168,12 +168,18 @@ export class EcoViewSystem extends DeesElement {
@property({ type: Number }) @property({ type: Number })
accessor cpuCores = 0; accessor cpuCores = 0;
@property({ type: Number })
accessor cpuPhysicalCores = 0;
@property({ type: String }) @property({ type: String })
accessor cpuModel = 'Unknown'; accessor cpuModel = 'Unknown';
@property({ type: Number }) @property({ type: Number })
accessor cpuSpeed = 0; accessor cpuSpeed = 0;
@property({ type: Number })
accessor cpuSpeedMax = 0;
@property({ type: Number }) @property({ type: Number })
accessor memoryTotal = 0; accessor memoryTotal = 0;
@@ -183,41 +189,155 @@ export class EcoViewSystem extends DeesElement {
@property({ type: Number }) @property({ type: Number })
accessor memoryFree = 0; accessor memoryFree = 0;
@property({ type: Number })
accessor memoryAvailable = 0;
@property({ type: Number })
accessor memoryCached = 0;
@property({ type: Number })
accessor memoryBuffers = 0;
@property({ type: Number })
accessor swapTotal = 0;
@property({ type: Number })
accessor swapUsed = 0;
@property({ type: Number })
accessor diskTotal = 0;
@property({ type: Number })
accessor diskUsed = 0;
@property({ type: Number })
accessor diskFree = 0;
@property({ type: Number })
accessor networkRxSec = 0;
@property({ type: Number })
accessor networkTxSec = 0;
@property({ type: Number })
accessor networkRxTotal = 0;
@property({ type: Number })
accessor networkTxTotal = 0;
@property({ type: String }) @property({ type: String })
accessor hostname = 'Unknown'; accessor hostname = 'Unknown';
@property({ type: String }) @property({ type: String })
accessor platform = 'Unknown'; accessor platform = 'Unknown';
@property({ type: String })
accessor distro = '';
@property({ type: Array }) @property({ type: Array })
accessor loadAvg: number[] = [0, 0, 0]; accessor loadAvg: number[] = [0, 0, 0];
@state() @property({ type: Array })
accessor networkIn = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; accessor coreLoads: number[] = [];
@state() @state()
accessor networkOut = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; accessor networkInHistory: number[] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
@state()
accessor networkOutHistory: number[] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
@state()
accessor memoryUsageHistory: number[] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
// Process data
@state()
accessor processTotal = 0;
@state()
accessor processRunning = 0;
@state()
accessor processSleeping = 0;
@state()
accessor processBlocked = 0;
@state()
accessor topProcesses: Array<{ name: string; pid: number; cpu: number; memory: number; state: string }> = [];
// Public method to update metrics from backend // Public method to update metrics from backend
public setMetrics(metrics: { public setMetrics(metrics: {
cpu: { usage: number; cores: number; model: string; speed: number; loadAvg: number[] }; cpu: { usage: number; cores: number; physicalCores?: number; model: string; speed: number; speedMax?: number; loadAvg: number[]; coreLoads?: number[] };
memory: { total: number; used: number; free: number; usagePercent: number }; memory: { total: number; used: number; free: number; available?: number; usagePercent: number; swapTotal?: number; swapUsed?: number; cached?: number; buffers?: number };
system: { platform: string; hostname: string; uptimeFormatted: string }; disk?: { total: number; used: number; free: number; usagePercent: number };
network?: { rxSec: number; txSec: number; rxTotal: number; txTotal: number };
system: { platform: string; distro?: string; hostname: string; uptimeFormatted: string };
}): void { }): void {
// CPU metrics
this.cpuUsage = metrics.cpu.usage; this.cpuUsage = metrics.cpu.usage;
this.cpuCores = metrics.cpu.cores; this.cpuCores = metrics.cpu.cores;
this.cpuPhysicalCores = metrics.cpu.physicalCores || metrics.cpu.cores;
this.cpuModel = metrics.cpu.model; this.cpuModel = metrics.cpu.model;
this.cpuSpeed = metrics.cpu.speed; this.cpuSpeed = metrics.cpu.speed;
this.cpuSpeedMax = metrics.cpu.speedMax || metrics.cpu.speed;
this.loadAvg = metrics.cpu.loadAvg; this.loadAvg = metrics.cpu.loadAvg;
this.coreLoads = metrics.cpu.coreLoads || [];
// Memory metrics
this.memoryUsage = metrics.memory.usagePercent; this.memoryUsage = metrics.memory.usagePercent;
this.memoryTotal = metrics.memory.total; this.memoryTotal = metrics.memory.total;
this.memoryUsed = metrics.memory.used; this.memoryUsed = metrics.memory.used;
this.memoryFree = metrics.memory.free; this.memoryFree = metrics.memory.free;
this.memoryAvailable = metrics.memory.available || metrics.memory.free;
this.memoryCached = metrics.memory.cached || 0;
this.memoryBuffers = metrics.memory.buffers || 0;
this.swapTotal = metrics.memory.swapTotal || 0;
this.swapUsed = metrics.memory.swapUsed || 0;
// Update memory usage history for trend chart
this.memoryUsageHistory = [...this.memoryUsageHistory.slice(1), metrics.memory.usagePercent];
// Disk metrics
if (metrics.disk) {
this.diskUsage = metrics.disk.usagePercent;
this.diskTotal = metrics.disk.total;
this.diskUsed = metrics.disk.used;
this.diskFree = metrics.disk.free;
}
// Network metrics
if (metrics.network) {
this.networkRxSec = metrics.network.rxSec;
this.networkTxSec = metrics.network.txSec;
this.networkRxTotal = metrics.network.rxTotal;
this.networkTxTotal = metrics.network.txTotal;
// Update history for trend charts
this.networkInHistory = [...this.networkInHistory.slice(1), metrics.network.rxSec];
this.networkOutHistory = [...this.networkOutHistory.slice(1), metrics.network.txSec];
}
// System metrics
this.hostname = metrics.system.hostname; this.hostname = metrics.system.hostname;
this.platform = metrics.system.platform; this.platform = metrics.system.platform;
this.distro = metrics.system.distro || '';
this.uptime = metrics.system.uptimeFormatted; this.uptime = metrics.system.uptimeFormatted;
} }
// Method to set CPU temperature separately (may not always be available)
public setTemperature(temp: { main: number; cores?: number[]; max?: number }): void {
this.cpuTemp = temp.main || 0;
}
// Method to set processes data
public setProcesses(data: { total: number; running: number; sleeping: number; blocked?: number; list: Array<{ name: string; pid: number; cpu: number; memory: number; state: string }> }): void {
this.processTotal = data.total;
this.processRunning = data.running;
this.processSleeping = data.sleeping;
this.processBlocked = data.blocked || 0;
this.topProcesses = data.list || [];
}
// Helper to format bytes // Helper to format bytes
private formatBytes(bytes: number): string { private formatBytes(bytes: number): string {
if (bytes === 0) return '0 B'; if (bytes === 0) return '0 B';
@@ -331,6 +451,15 @@ export class EcoViewSystem extends DeesElement {
} }
} }
// Helper to format bytes per second as speed
private formatSpeed(bytesPerSec: number): string {
if (bytesPerSec === 0) return '0 B/s';
const k = 1024;
const sizes = ['B/s', 'KB/s', 'MB/s', 'GB/s'];
const i = Math.floor(Math.log(bytesPerSec) / Math.log(k));
return parseFloat((bytesPerSec / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
}
private renderOverviewPanel(): TemplateResult { private renderOverviewPanel(): TemplateResult {
const overviewTiles = [ const overviewTiles = [
{ {
@@ -339,6 +468,7 @@ export class EcoViewSystem extends DeesElement {
value: this.cpuUsage, value: this.cpuUsage,
type: 'gauge' as const, type: 'gauge' as const,
icon: 'lucide:cpu', icon: 'lucide:cpu',
description: this.cpuModel !== 'Unknown' ? `${this.cpuPhysicalCores} cores @ ${this.cpuSpeed} GHz` : undefined,
gaugeOptions: { gaugeOptions: {
min: 0, min: 0,
max: 100, max: 100,
@@ -372,6 +502,7 @@ export class EcoViewSystem extends DeesElement {
value: this.diskUsage, value: this.diskUsage,
type: 'gauge' as const, type: 'gauge' as const,
icon: 'lucide:hardDrive', icon: 'lucide:hardDrive',
description: this.diskTotal ? `${this.formatBytes(this.diskUsed)} of ${this.formatBytes(this.diskTotal)}` : undefined,
gaugeOptions: { gaugeOptions: {
min: 0, min: 0,
max: 100, max: 100,
@@ -403,22 +534,22 @@ export class EcoViewSystem extends DeesElement {
{ {
id: 'network-in', id: 'network-in',
title: 'Network In', title: 'Network In',
value: '85', value: this.formatSpeed(this.networkRxSec),
unit: 'Mbps',
type: 'trend' as const, type: 'trend' as const,
icon: 'lucide:download', icon: 'lucide:download',
trendData: this.networkIn, trendData: this.networkInHistory,
color: 'hsl(142 71% 45%)', color: 'hsl(142 71% 45%)',
description: `Total: ${this.formatBytes(this.networkRxTotal)}`,
}, },
{ {
id: 'network-out', id: 'network-out',
title: 'Network Out', title: 'Network Out',
value: '65', value: this.formatSpeed(this.networkTxSec),
unit: 'Mbps',
type: 'trend' as const, type: 'trend' as const,
icon: 'lucide:upload', icon: 'lucide:upload',
trendData: this.networkOut, trendData: this.networkOutHistory,
color: 'hsl(217 91% 60%)', color: 'hsl(217 91% 60%)',
description: `Total: ${this.formatBytes(this.networkTxTotal)}`,
}, },
{ {
id: 'uptime', id: 'uptime',
@@ -435,7 +566,7 @@ export class EcoViewSystem extends DeesElement {
value: this.hostname, value: this.hostname,
type: 'text' as const, type: 'text' as const,
icon: 'lucide:server', icon: 'lucide:server',
description: `${this.platform} - ${this.cpuCores} cores`, description: this.distro ? `${this.distro} - ${this.cpuCores} threads` : `${this.platform} - ${this.cpuCores} threads`,
}, },
]; ];
@@ -456,6 +587,13 @@ export class EcoViewSystem extends DeesElement {
} }
private renderCpuPanel(): TemplateResult { private renderCpuPanel(): TemplateResult {
// Generate cores data for cpuCores tile type
const coresData = this.coreLoads.map((load, index) => ({
id: index,
usage: load,
label: `Core ${index}`,
}));
const cpuTiles = [ const cpuTiles = [
{ {
id: 'cpu-total', id: 'cpu-total',
@@ -463,6 +601,7 @@ export class EcoViewSystem extends DeesElement {
value: this.cpuUsage, value: this.cpuUsage,
type: 'gauge' as const, type: 'gauge' as const,
icon: 'lucide:cpu', icon: 'lucide:cpu',
description: `${this.cpuCores} threads on ${this.cpuPhysicalCores} cores`,
gaugeOptions: { gaugeOptions: {
min: 0, min: 0,
max: 100, max: 100,
@@ -474,73 +613,21 @@ export class EcoViewSystem extends DeesElement {
}, },
}, },
{ {
id: 'core-0', id: 'cpu-cores',
title: 'Core 0', title: 'Core Usage',
value: 38, value: this.cpuUsage,
type: 'gauge' as const, type: 'cpuCores' as const,
gaugeOptions: { coresData: coresData,
min: 0, columnSpan: 2,
max: 100,
thresholds: [
{ value: 0, color: 'hsl(142 71% 45%)' },
{ value: 60, color: 'hsl(45 93% 47%)' },
{ value: 80, color: 'hsl(0 84% 60%)' },
],
},
},
{
id: 'core-1',
title: 'Core 1',
value: 52,
type: 'gauge' as const,
gaugeOptions: {
min: 0,
max: 100,
thresholds: [
{ value: 0, color: 'hsl(142 71% 45%)' },
{ value: 60, color: 'hsl(45 93% 47%)' },
{ value: 80, color: 'hsl(0 84% 60%)' },
],
},
},
{
id: 'core-2',
title: 'Core 2',
value: 45,
type: 'gauge' as const,
gaugeOptions: {
min: 0,
max: 100,
thresholds: [
{ value: 0, color: 'hsl(142 71% 45%)' },
{ value: 60, color: 'hsl(45 93% 47%)' },
{ value: 80, color: 'hsl(0 84% 60%)' },
],
},
},
{
id: 'core-3',
title: 'Core 3',
value: 33,
type: 'gauge' as const,
gaugeOptions: {
min: 0,
max: 100,
thresholds: [
{ value: 0, color: 'hsl(142 71% 45%)' },
{ value: 60, color: 'hsl(45 93% 47%)' },
{ value: 80, color: 'hsl(0 84% 60%)' },
],
},
}, },
{ {
id: 'load-avg', id: 'load-avg',
title: 'Load Average', title: 'Load Average',
value: '2.45', value: this.loadAvg[0]?.toFixed(2) || '0',
type: 'trend' as const, type: 'trend' as const,
icon: 'lucide:activity', icon: 'lucide:activity',
trendData: [1.8, 2.1, 2.4, 2.2, 2.5, 2.3, 2.6, 2.4, 2.45], trendData: this.loadAvg,
description: '1m: 2.45, 5m: 2.32, 15m: 2.18', description: `1m: ${this.loadAvg[0]?.toFixed(2)}, 5m: ${this.loadAvg[1]?.toFixed(2)}, 15m: ${this.loadAvg[2]?.toFixed(2)}`,
}, },
{ {
id: 'cpu-temp', id: 'cpu-temp',
@@ -563,18 +650,18 @@ export class EcoViewSystem extends DeesElement {
{ {
id: 'freq', id: 'freq',
title: 'Clock Speed', title: 'Clock Speed',
value: '3.2', value: this.cpuSpeed.toFixed(1),
unit: 'GHz', unit: 'GHz',
type: 'number' as const, type: 'number' as const,
icon: 'lucide:gauge', icon: 'lucide:gauge',
description: 'Max: 4.2 GHz', description: this.cpuSpeedMax ? `Max: ${this.cpuSpeedMax.toFixed(1)} GHz` : undefined,
}, },
]; ];
return html` return html`
<div class="panel-header"> <div class="panel-header">
<div class="panel-title">CPU</div> <div class="panel-title">CPU</div>
<div class="panel-description">Processor usage and performance</div> <div class="panel-description">${this.cpuModel}</div>
</div> </div>
<div class="stats-section"> <div class="stats-section">
@@ -588,6 +675,8 @@ export class EcoViewSystem extends DeesElement {
} }
private renderMemoryPanel(): TemplateResult { private renderMemoryPanel(): TemplateResult {
const swapUsagePercent = this.swapTotal > 0 ? Math.round((this.swapUsed / this.swapTotal) * 100) : 0;
const memoryTiles = [ const memoryTiles = [
{ {
id: 'ram-usage', id: 'ram-usage',
@@ -604,12 +693,12 @@ export class EcoViewSystem extends DeesElement {
{ value: 85, color: 'hsl(0 84% 60%)' }, { value: 85, color: 'hsl(0 84% 60%)' },
], ],
}, },
description: '10.7 GB of 16 GB', description: `${this.formatBytes(this.memoryUsed)} of ${this.formatBytes(this.memoryTotal)}`,
}, },
{ {
id: 'swap-usage', id: 'swap-usage',
title: 'Swap Usage', title: 'Swap Usage',
value: 12, value: swapUsagePercent,
type: 'gauge' as const, type: 'gauge' as const,
icon: 'lucide:hardDrive', icon: 'lucide:hardDrive',
gaugeOptions: { gaugeOptions: {
@@ -621,41 +710,38 @@ export class EcoViewSystem extends DeesElement {
{ value: 75, color: 'hsl(0 84% 60%)' }, { value: 75, color: 'hsl(0 84% 60%)' },
], ],
}, },
description: '0.5 GB of 4 GB', description: this.swapTotal > 0 ? `${this.formatBytes(this.swapUsed)} of ${this.formatBytes(this.swapTotal)}` : 'No swap',
}, },
{ {
id: 'mem-trend', id: 'mem-trend',
title: 'Memory History', title: 'Memory History',
value: '67%', value: `${this.memoryUsage}%`,
type: 'trend' as const, type: 'trend' as const,
icon: 'lucide:trendingUp', icon: 'lucide:trendingUp',
trendData: [58, 62, 65, 63, 68, 72, 70, 65, 67], trendData: this.memoryUsageHistory,
description: 'Last hour', description: 'Recent usage',
}, },
{ {
id: 'cached', id: 'cached',
title: 'Cached', title: 'Cached',
value: '3.2', value: this.formatBytes(this.memoryCached),
unit: 'GB', type: 'text' as const,
type: 'number' as const,
icon: 'lucide:database', icon: 'lucide:database',
color: 'hsl(217 91% 60%)', color: 'hsl(217 91% 60%)',
}, },
{ {
id: 'buffers', id: 'buffers',
title: 'Buffers', title: 'Buffers',
value: '512', value: this.formatBytes(this.memoryBuffers),
unit: 'MB', type: 'text' as const,
type: 'number' as const,
icon: 'lucide:layers', icon: 'lucide:layers',
color: 'hsl(262 83% 58%)', color: 'hsl(262 83% 58%)',
}, },
{ {
id: 'available', id: 'available',
title: 'Available', title: 'Available',
value: '5.3', value: this.formatBytes(this.memoryAvailable),
unit: 'GB', type: 'text' as const,
type: 'number' as const,
icon: 'lucide:checkCircle', icon: 'lucide:checkCircle',
color: 'hsl(142 71% 45%)', color: 'hsl(142 71% 45%)',
}, },
@@ -680,58 +766,39 @@ export class EcoViewSystem extends DeesElement {
private renderStoragePanel(): TemplateResult { private renderStoragePanel(): TemplateResult {
const storageTiles = [ const storageTiles = [
{ {
id: 'disk-main', id: 'disk-total',
title: 'System Drive', title: 'Total Storage',
value: this.diskUsage, value: this.diskUsage,
type: 'percentage' as const, type: 'percentage' as const,
icon: 'lucide:hardDrive', icon: 'lucide:hardDrive',
description: '275 GB of 512 GB used', description: `${this.formatBytes(this.diskUsed)} of ${this.formatBytes(this.diskTotal)} used`,
color: 'hsl(217 91% 60%)', color: 'hsl(217 91% 60%)',
}, },
{ {
id: 'disk-data', id: 'disk-free',
title: 'Data Drive', title: 'Free Space',
value: 38, value: this.formatBytes(this.diskFree),
type: 'percentage' as const, type: 'text' as const,
icon: 'lucide:hardDrive', icon: 'lucide:hardDrive',
description: '380 GB of 1 TB used', description: 'Available storage',
color: 'hsl(142 71% 45%)', color: 'hsl(142 71% 45%)',
}, },
{ {
id: 'read-speed', id: 'disk-used',
title: 'Read Speed', title: 'Used Space',
value: '245', value: this.formatBytes(this.diskUsed),
unit: 'MB/s', type: 'text' as const,
type: 'trend' as const, icon: 'lucide:database',
icon: 'lucide:download', description: 'Currently in use',
trendData: [180, 220, 195, 280, 245, 210, 265, 230, 245], color: 'hsl(45 93% 47%)',
color: 'hsl(142 71% 45%)',
}, },
{ {
id: 'write-speed', id: 'disk-total-size',
title: 'Write Speed', title: 'Total Capacity',
value: '128', value: this.formatBytes(this.diskTotal),
unit: 'MB/s', type: 'text' as const,
type: 'trend' as const, icon: 'lucide:server',
icon: 'lucide:upload', description: 'All filesystems',
trendData: [95, 110, 85, 145, 120, 105, 138, 115, 128],
color: 'hsl(217 91% 60%)',
},
{
id: 'iops-read',
title: 'Read IOPS',
value: '12.4k',
type: 'number' as const,
icon: 'lucide:gauge',
description: 'Operations/sec',
},
{
id: 'iops-write',
title: 'Write IOPS',
value: '8.2k',
type: 'number' as const,
icon: 'lucide:gauge',
description: 'Operations/sec',
}, },
]; ];
@@ -755,83 +822,38 @@ export class EcoViewSystem extends DeesElement {
const networkTiles = [ const networkTiles = [
{ {
id: 'download', id: 'download',
title: 'Download', title: 'Download Speed',
value: '85.2', value: this.formatSpeed(this.networkRxSec),
unit: 'Mbps',
type: 'trend' as const, type: 'trend' as const,
icon: 'lucide:download', icon: 'lucide:download',
trendData: this.networkIn, trendData: this.networkInHistory,
color: 'hsl(142 71% 45%)', color: 'hsl(142 71% 45%)',
}, },
{ {
id: 'upload', id: 'upload',
title: 'Upload', title: 'Upload Speed',
value: '64.8', value: this.formatSpeed(this.networkTxSec),
unit: 'Mbps',
type: 'trend' as const, type: 'trend' as const,
icon: 'lucide:upload', icon: 'lucide:upload',
trendData: this.networkOut, trendData: this.networkOutHistory,
color: 'hsl(217 91% 60%)', color: 'hsl(217 91% 60%)',
}, },
{
id: 'latency',
title: 'Latency',
value: 12,
unit: 'ms',
type: 'gauge' as const,
icon: 'lucide:activity',
gaugeOptions: {
min: 0,
max: 100,
thresholds: [
{ value: 0, color: 'hsl(142 71% 45%)' },
{ value: 30, color: 'hsl(45 93% 47%)' },
{ value: 60, color: 'hsl(0 84% 60%)' },
],
},
},
{
id: 'packets-in',
title: 'Packets In',
value: '1.2M',
type: 'number' as const,
icon: 'lucide:arrowDownCircle',
description: 'Per second',
},
{
id: 'packets-out',
title: 'Packets Out',
value: '892k',
type: 'number' as const,
icon: 'lucide:arrowUpCircle',
description: 'Per second',
},
{
id: 'connections',
title: 'Active Connections',
value: 48,
type: 'number' as const,
icon: 'lucide:link',
description: '12 established, 36 waiting',
},
{ {
id: 'total-down', id: 'total-down',
title: 'Total Downloaded', title: 'Total Downloaded',
value: '24.5', value: this.formatBytes(this.networkRxTotal),
unit: 'GB', type: 'text' as const,
type: 'number' as const, icon: 'lucide:arrowDownCircle',
icon: 'lucide:database', description: 'Since boot',
description: 'This session',
color: 'hsl(142 71% 45%)', color: 'hsl(142 71% 45%)',
}, },
{ {
id: 'total-up', id: 'total-up',
title: 'Total Uploaded', title: 'Total Uploaded',
value: '8.2', value: this.formatBytes(this.networkTxTotal),
unit: 'GB', type: 'text' as const,
type: 'number' as const, icon: 'lucide:arrowUpCircle',
icon: 'lucide:database', description: 'Since boot',
description: 'This session',
color: 'hsl(217 91% 60%)', color: 'hsl(217 91% 60%)',
}, },
]; ];
@@ -857,14 +879,14 @@ export class EcoViewSystem extends DeesElement {
{ {
id: 'total-processes', id: 'total-processes',
title: 'Total Processes', title: 'Total Processes',
value: 247, value: this.processTotal,
type: 'number' as const, type: 'number' as const,
icon: 'lucide:layers', icon: 'lucide:layers',
}, },
{ {
id: 'running', id: 'running',
title: 'Running', title: 'Running',
value: 12, value: this.processRunning,
type: 'number' as const, type: 'number' as const,
icon: 'lucide:play', icon: 'lucide:play',
color: 'hsl(142 71% 45%)', color: 'hsl(142 71% 45%)',
@@ -872,30 +894,21 @@ export class EcoViewSystem extends DeesElement {
{ {
id: 'sleeping', id: 'sleeping',
title: 'Sleeping', title: 'Sleeping',
value: 235, value: this.processSleeping,
type: 'number' as const, type: 'number' as const,
icon: 'lucide:moon', icon: 'lucide:moon',
color: 'hsl(217 91% 60%)', color: 'hsl(217 91% 60%)',
}, },
{ {
id: 'threads', id: 'blocked',
title: 'Threads', title: 'Blocked',
value: 1842, value: this.processBlocked,
type: 'number' as const, type: 'number' as const,
icon: 'lucide:gitBranch', icon: 'lucide:pauseCircle',
color: 'hsl(0 84% 60%)',
}, },
]; ];
const topProcesses = [
{ name: 'node', pid: 1234, cpu: 12.5, memory: 8.2 },
{ name: 'chrome', pid: 2345, cpu: 8.3, memory: 15.4 },
{ name: 'code', pid: 3456, cpu: 5.2, memory: 12.1 },
{ name: 'docker', pid: 4567, cpu: 4.8, memory: 6.8 },
{ name: 'postgres', pid: 5678, cpu: 3.2, memory: 4.5 },
{ name: 'nginx', pid: 6789, cpu: 1.5, memory: 2.1 },
{ name: 'redis', pid: 7890, cpu: 0.8, memory: 1.8 },
];
return html` return html`
<div class="panel-header"> <div class="panel-header">
<div class="panel-title">Processes</div> <div class="panel-title">Processes</div>
@@ -919,14 +932,14 @@ export class EcoViewSystem extends DeesElement {
<span>CPU %</span> <span>CPU %</span>
<span>Memory %</span> <span>Memory %</span>
</div> </div>
${topProcesses.map(proc => html` ${this.topProcesses.length > 0 ? this.topProcesses.map(proc => html`
<div class="process-row"> <div class="process-row">
<span class="process-name">${proc.name}</span> <span class="process-name">${proc.name}</span>
<span class="process-value">${proc.pid}</span> <span class="process-value">${proc.pid}</span>
<span class="process-value ${proc.cpu > 10 ? 'high' : ''}">${proc.cpu}%</span> <span class="process-value ${proc.cpu > 10 ? 'high' : ''}">${proc.cpu}%</span>
<span class="process-value ${proc.memory > 10 ? 'high' : ''}">${proc.memory}%</span> <span class="process-value ${proc.memory > 10 ? 'high' : ''}">${proc.memory}%</span>
</div> </div>
`)} `) : html`<div class="process-row"><span class="process-name">Loading...</span></div>`}
</div> </div>
</div> </div>
`; `;

View File

@@ -6,3 +6,4 @@ export * from './eco-view-home/index.js';
export * from './eco-view-login/index.js'; export * from './eco-view-login/index.js';
export * from './eco-view-scan/index.js'; export * from './eco-view-scan/index.js';
export * from './eco-view-browser/index.js'; export * from './eco-view-browser/index.js';
export * from './eco-view-containers/index.js';