@design.estate/dees-catalog 3.35.1 → 3.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +1391 -247
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.d.ts +6 -0
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.demo.js +69 -29
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.js +75 -6
- package/dist_ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.d.ts +104 -6
- package/dist_ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.demo.js +153 -54
- package/dist_ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.js +716 -153
- package/dist_ts_web/elements/dees-statsgrid/dees-statsgrid.d.ts +22 -1
- package/dist_ts_web/elements/dees-statsgrid/dees-statsgrid.demo.js +130 -2
- package/dist_ts_web/elements/dees-statsgrid/dees-statsgrid.js +322 -1
- package/dist_ts_web/services/DeesServiceLibLoader.d.ts +34 -1
- package/dist_ts_web/services/DeesServiceLibLoader.js +27 -1
- package/dist_ts_web/services/index.d.ts +1 -1
- package/dist_ts_web/services/versions.d.ts +1 -0
- package/dist_ts_web/services/versions.js +2 -1
- package/dist_watch/bundle.js +1389 -245
- package/dist_watch/bundle.js.map +3 -3
- package/package.json +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-button/dees-button/dees-button.demo.ts +68 -28
- package/ts_web/elements/00group-button/dees-button/dees-button.ts +78 -6
- package/ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.demo.ts +163 -56
- package/ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.ts +756 -161
- package/ts_web/elements/dees-statsgrid/dees-statsgrid.demo.ts +130 -2
- package/ts_web/elements/dees-statsgrid/dees-statsgrid.ts +352 -1
- package/ts_web/services/DeesServiceLibLoader.ts +50 -1
- package/ts_web/services/index.ts +1 -1
- package/ts_web/services/versions.ts +1 -0
package/dist_bundle/bundle.js
CHANGED
|
@@ -53587,26 +53587,26 @@ var init_fontawesome_svg_core = __esm({
|
|
|
53587
53587
|
}
|
|
53588
53588
|
};
|
|
53589
53589
|
parse7 = {
|
|
53590
|
-
icon: function icon(
|
|
53591
|
-
if (
|
|
53590
|
+
icon: function icon(_icon3) {
|
|
53591
|
+
if (_icon3 === null) {
|
|
53592
53592
|
return null;
|
|
53593
53593
|
}
|
|
53594
|
-
if (_typeof(
|
|
53594
|
+
if (_typeof(_icon3) === "object" && _icon3.prefix && _icon3.iconName) {
|
|
53595
53595
|
return {
|
|
53596
|
-
prefix:
|
|
53597
|
-
iconName: byAlias(
|
|
53596
|
+
prefix: _icon3.prefix,
|
|
53597
|
+
iconName: byAlias(_icon3.prefix, _icon3.iconName) || _icon3.iconName
|
|
53598
53598
|
};
|
|
53599
53599
|
}
|
|
53600
|
-
if (Array.isArray(
|
|
53601
|
-
var iconName =
|
|
53602
|
-
var prefix4 = getCanonicalPrefix(
|
|
53600
|
+
if (Array.isArray(_icon3) && _icon3.length === 2) {
|
|
53601
|
+
var iconName = _icon3[1].indexOf("fa-") === 0 ? _icon3[1].slice(3) : _icon3[1];
|
|
53602
|
+
var prefix4 = getCanonicalPrefix(_icon3[0]);
|
|
53603
53603
|
return {
|
|
53604
53604
|
prefix: prefix4,
|
|
53605
53605
|
iconName: byAlias(prefix4, iconName) || iconName
|
|
53606
53606
|
};
|
|
53607
53607
|
}
|
|
53608
|
-
if (typeof
|
|
53609
|
-
var canonicalIcon = getCanonicalIcon(
|
|
53608
|
+
if (typeof _icon3 === "string" && (_icon3.indexOf("".concat(config2.cssPrefix, "-")) > -1 || _icon3.match(ICON_SELECTION_SYNTAX_PATTERN))) {
|
|
53609
|
+
var canonicalIcon = getCanonicalIcon(_icon3.split(" "), {
|
|
53610
53610
|
skipLookups: true
|
|
53611
53611
|
});
|
|
53612
53612
|
return {
|
|
@@ -53614,11 +53614,11 @@ var init_fontawesome_svg_core = __esm({
|
|
|
53614
53614
|
iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName
|
|
53615
53615
|
};
|
|
53616
53616
|
}
|
|
53617
|
-
if (typeof
|
|
53617
|
+
if (typeof _icon3 === "string") {
|
|
53618
53618
|
var _prefix = getDefaultUsablePrefix();
|
|
53619
53619
|
return {
|
|
53620
53620
|
prefix: _prefix,
|
|
53621
|
-
iconName: byAlias(_prefix,
|
|
53621
|
+
iconName: byAlias(_prefix, _icon3) || _icon3
|
|
53622
53622
|
};
|
|
53623
53623
|
}
|
|
53624
53624
|
}
|
|
@@ -101154,6 +101154,7 @@ var init_versions = __esm({
|
|
|
101154
101154
|
CDN_VERSIONS = {
|
|
101155
101155
|
xterm: "5.3.0",
|
|
101156
101156
|
xtermAddonFit: "0.8.0",
|
|
101157
|
+
xtermAddonSearch: "0.13.0",
|
|
101157
101158
|
highlightJs: "11.11.1",
|
|
101158
101159
|
apexcharts: "5.3.6",
|
|
101159
101160
|
tiptap: "2.23.0",
|
|
@@ -101173,12 +101174,14 @@ var init_DeesServiceLibLoader = __esm({
|
|
|
101173
101174
|
// Cached library references
|
|
101174
101175
|
xtermLib = null;
|
|
101175
101176
|
xtermFitAddonLib = null;
|
|
101177
|
+
xtermSearchAddonLib = null;
|
|
101176
101178
|
highlightJsLib = null;
|
|
101177
101179
|
apexChartsLib = null;
|
|
101178
101180
|
tiptapLib = null;
|
|
101179
101181
|
// Loading promises to prevent duplicate concurrent loads
|
|
101180
101182
|
xtermLoadingPromise = null;
|
|
101181
101183
|
xtermFitAddonLoadingPromise = null;
|
|
101184
|
+
xtermSearchAddonLoadingPromise = null;
|
|
101182
101185
|
highlightJsLoadingPromise = null;
|
|
101183
101186
|
apexChartsLoadingPromise = null;
|
|
101184
101187
|
tiptapLoadingPromise = null;
|
|
@@ -101242,6 +101245,30 @@ var init_DeesServiceLibLoader = __esm({
|
|
|
101242
101245
|
})();
|
|
101243
101246
|
return this.xtermFitAddonLoadingPromise;
|
|
101244
101247
|
}
|
|
101248
|
+
/**
|
|
101249
|
+
* Load xterm-addon-search from CDN
|
|
101250
|
+
* @returns Promise resolving to SearchAddon class
|
|
101251
|
+
*/
|
|
101252
|
+
async loadXtermSearchAddon() {
|
|
101253
|
+
if (this.xtermSearchAddonLib) {
|
|
101254
|
+
return this.xtermSearchAddonLib;
|
|
101255
|
+
}
|
|
101256
|
+
if (this.xtermSearchAddonLoadingPromise) {
|
|
101257
|
+
return this.xtermSearchAddonLoadingPromise;
|
|
101258
|
+
}
|
|
101259
|
+
this.xtermSearchAddonLoadingPromise = (async () => {
|
|
101260
|
+
const url = `${CDN_BASE}/xterm-addon-search@${CDN_VERSIONS.xtermAddonSearch}/+esm`;
|
|
101261
|
+
const module = await import(
|
|
101262
|
+
/* @vite-ignore */
|
|
101263
|
+
url
|
|
101264
|
+
);
|
|
101265
|
+
this.xtermSearchAddonLib = {
|
|
101266
|
+
SearchAddon: module.SearchAddon
|
|
101267
|
+
};
|
|
101268
|
+
return this.xtermSearchAddonLib;
|
|
101269
|
+
})();
|
|
101270
|
+
return this.xtermSearchAddonLoadingPromise;
|
|
101271
|
+
}
|
|
101245
101272
|
/**
|
|
101246
101273
|
* Inject xterm CSS styles into the document head
|
|
101247
101274
|
*/
|
|
@@ -101368,6 +101395,7 @@ var init_DeesServiceLibLoader = __esm({
|
|
|
101368
101395
|
await Promise.all([
|
|
101369
101396
|
this.loadXterm(),
|
|
101370
101397
|
this.loadXtermFitAddon(),
|
|
101398
|
+
this.loadXtermSearchAddon(),
|
|
101371
101399
|
this.loadHighlightJs(),
|
|
101372
101400
|
this.loadApexCharts(),
|
|
101373
101401
|
this.loadTiptap()
|
|
@@ -101382,6 +101410,8 @@ var init_DeesServiceLibLoader = __esm({
|
|
|
101382
101410
|
return this.xtermLib !== null;
|
|
101383
101411
|
case "xtermFitAddon":
|
|
101384
101412
|
return this.xtermFitAddonLib !== null;
|
|
101413
|
+
case "xtermSearchAddon":
|
|
101414
|
+
return this.xtermSearchAddonLib !== null;
|
|
101385
101415
|
case "highlightJs":
|
|
101386
101416
|
return this.highlightJsLib !== null;
|
|
101387
101417
|
case "apexCharts":
|
|
@@ -108343,7 +108373,49 @@ var generateCpuCores = (count2) => {
|
|
|
108343
108373
|
}));
|
|
108344
108374
|
};
|
|
108345
108375
|
var demoFunc7 = () => {
|
|
108346
|
-
return b2(_a11 || (_a11 = __template(["\n <dees-demowrapper>\n <style>\n ", '\n </style>\n \n <div class="demo-container">\n <dees-panel .title=', " .subtitle=", ">\n <dees-statsgrid\n .tiles=", "\n .gridActions=", "\n .minTileWidth=", "\n .gap=", '\n ></dees-statsgrid>\n \n <div id="action-output" style="margin-top: 16px; padding: 12px; background: ', "; border-radius: 6px; font-size: 14px; font-family: monospace; color: ", ';">\n <em>Click on tile actions or grid actions to see the result...</em>\n </div>\n </dees-panel>\n \n <dees-panel .title=', " .subtitle=", ">\n <dees-statsgrid\n .tiles=", "\n .minTileWidth=", "\n .gap=", '\n ></dees-statsgrid>\n \n <div class="tile-config">\n <div class="config-section">\n <div class="config-title">Configuration Options</div>\n <div class="config-description">\n Each tile type supports different properties:\n <ul style="margin: 8px 0; padding-left: 20px;">\n <li><strong>Number:</strong> value, unit, color, description</li>\n <li><strong>Gauge:</strong> value, unit, gaugeOptions (min, max, thresholds)</li>\n <li><strong>Percentage:</strong> value (0-100), color, description</li>\n <li><strong>Trend:</strong> value, unit, trendData array, description</li>\n <li><strong>Text:</strong> value (string), color, description</li>\n </ul>\n </div>\n </div>\n </div>\n </dees-panel>\n \n <dees-panel .title=', " .subtitle=", '>\n <h4 style="margin: 0 0 16px 0; font-size: 16px; font-weight: 600;">Compact Layout (180px tiles)</h4>\n <dees-statsgrid\n .tiles=', "\n .minTileWidth=", "\n .gap=", '\n ></dees-statsgrid>\n \n <h4 style="margin: 24px 0 16px 0; font-size: 16px; font-weight: 600;">Spacious Layout (320px tiles)</h4>\n <dees-statsgrid\n .tiles=', "\n .minTileWidth=", "\n .gap=", "\n ></dees-statsgrid>\n </dees-panel>\n \n <dees-panel .title=", " .subtitle=", '>\n <dees-statsgrid\n id="cpu-cores-grid"\n .tiles=', "\n .gridActions=", "\n .minTileWidth=", "\n .gap=", "\n ></dees-statsgrid>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", '>\n <dees-statsgrid\n id="interactive-grid"\n .tiles=', "\n .gridActions=", "\n .minTileWidth=", "\n .gap=", "\n ></dees-statsgrid>\n </dees-panel>\n \n <dees-panel .title=", " .subtitle=", '>\n <div class="code-block">', "</div>\n </dees-panel>\n
|
|
108376
|
+
return b2(_a11 || (_a11 = __template(["\n <dees-demowrapper>\n <style>\n ", '\n </style>\n \n <div class="demo-container">\n <dees-panel .title=', " .subtitle=", ">\n <dees-statsgrid\n .tiles=", "\n .gridActions=", "\n .minTileWidth=", "\n .gap=", '\n ></dees-statsgrid>\n \n <div id="action-output" style="margin-top: 16px; padding: 12px; background: ', "; border-radius: 6px; font-size: 14px; font-family: monospace; color: ", ';">\n <em>Click on tile actions or grid actions to see the result...</em>\n </div>\n </dees-panel>\n \n <dees-panel .title=', " .subtitle=", ">\n <dees-statsgrid\n .tiles=", "\n .minTileWidth=", "\n .gap=", '\n ></dees-statsgrid>\n \n <div class="tile-config">\n <div class="config-section">\n <div class="config-title">Configuration Options</div>\n <div class="config-description">\n Each tile type supports different properties:\n <ul style="margin: 8px 0; padding-left: 20px;">\n <li><strong>Number:</strong> value, unit, color, description</li>\n <li><strong>Gauge:</strong> value, unit, gaugeOptions (min, max, thresholds)</li>\n <li><strong>Percentage:</strong> value (0-100), color, description</li>\n <li><strong>Trend:</strong> value, unit, trendData array, description</li>\n <li><strong>Text:</strong> value (string), color, description</li>\n </ul>\n </div>\n </div>\n </div>\n </dees-panel>\n \n <dees-panel .title=', " .subtitle=", '>\n <h4 style="margin: 0 0 16px 0; font-size: 16px; font-weight: 600;">Compact Layout (180px tiles)</h4>\n <dees-statsgrid\n .tiles=', "\n .minTileWidth=", "\n .gap=", '\n ></dees-statsgrid>\n \n <h4 style="margin: 24px 0 16px 0; font-size: 16px; font-weight: 600;">Spacious Layout (320px tiles)</h4>\n <dees-statsgrid\n .tiles=', "\n .minTileWidth=", "\n .gap=", "\n ></dees-statsgrid>\n </dees-panel>\n \n <dees-panel .title=", " .subtitle=", '>\n <dees-statsgrid\n id="cpu-cores-grid"\n .tiles=', "\n .gridActions=", "\n .minTileWidth=", "\n .gap=", "\n ></dees-statsgrid>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", '>\n <dees-statsgrid\n id="interactive-grid"\n .tiles=', "\n .gridActions=", "\n .minTileWidth=", "\n .gap=", "\n ></dees-statsgrid>\n </dees-panel>\n \n <dees-panel .title=", " .subtitle=", '>\n <div class="code-block">', "</div>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", ">\n <dees-statsgrid\n .tiles=", "\n .minTileWidth=", "\n .gap=", `
|
|
108377
|
+
></dees-statsgrid>
|
|
108378
|
+
|
|
108379
|
+
<div class="tile-config">
|
|
108380
|
+
<div class="config-section">
|
|
108381
|
+
<div class="config-title">Partition Tile Properties</div>
|
|
108382
|
+
<div class="config-description">
|
|
108383
|
+
<ul style="margin: 8px 0; padding-left: 20px;">
|
|
108384
|
+
<li><strong>partitionData.used:</strong> Used space in bytes (auto-formatted)</li>
|
|
108385
|
+
<li><strong>partitionData.total:</strong> Total capacity in bytes</li>
|
|
108386
|
+
<li><strong>partitionData.filesystem:</strong> Filesystem type (ext4, xfs, ntfs)</li>
|
|
108387
|
+
<li><strong>partitionData.mountPoint:</strong> Mount point path (optional)</li>
|
|
108388
|
+
</ul>
|
|
108389
|
+
Color thresholds: Normal (<75%), Warning (75-90%), Critical (>90%)
|
|
108390
|
+
</div>
|
|
108391
|
+
</div>
|
|
108392
|
+
<div class="config-section">
|
|
108393
|
+
<div class="config-title">Disk Tile Properties</div>
|
|
108394
|
+
<div class="config-description">
|
|
108395
|
+
<ul style="margin: 8px 0; padding-left: 20px;">
|
|
108396
|
+
<li><strong>diskData.capacity:</strong> Total capacity in bytes</li>
|
|
108397
|
+
<li><strong>diskData.model:</strong> Disk model name (optional)</li>
|
|
108398
|
+
<li><strong>diskData.type:</strong> Disk type: 'ssd', 'hdd', or 'nvme'</li>
|
|
108399
|
+
<li><strong>diskData.iops:</strong> Read/write IOPS (optional)</li>
|
|
108400
|
+
<li><strong>diskData.health:</strong> Health percentage 0-100 (optional)</li>
|
|
108401
|
+
</ul>
|
|
108402
|
+
Health thresholds: Good (70-100%), Warning (30-70%), Critical (<30%)
|
|
108403
|
+
</div>
|
|
108404
|
+
</div>
|
|
108405
|
+
</div>
|
|
108406
|
+
</dees-panel>
|
|
108407
|
+
</div>
|
|
108408
|
+
|
|
108409
|
+
<script>
|
|
108410
|
+
// Cleanup live updates on page unload
|
|
108411
|
+
window.addEventListener('beforeunload', () => {
|
|
108412
|
+
if ((window as any).liveUpdateInterval) {
|
|
108413
|
+
clearInterval((window as any).liveUpdateInterval);
|
|
108414
|
+
}
|
|
108415
|
+
});
|
|
108416
|
+
<\/script>
|
|
108417
|
+
</dees-demowrapper>
|
|
108418
|
+
`])), i`
|
|
108347
108419
|
.demo-container {
|
|
108348
108420
|
display: flex;
|
|
108349
108421
|
flex-direction: column;
|
|
@@ -108839,7 +108911,108 @@ html\`
|
|
|
108839
108911
|
}
|
|
108840
108912
|
]}
|
|
108841
108913
|
></dees-statsgrid>
|
|
108842
|
-
|
|
108914
|
+
\`;`, "7. Disk & Storage Tiles", "Partition and physical disk visualization tiles", [
|
|
108915
|
+
{
|
|
108916
|
+
id: "root-partition",
|
|
108917
|
+
title: "Root Partition",
|
|
108918
|
+
value: 0,
|
|
108919
|
+
type: "partition",
|
|
108920
|
+
icon: "lucide:folder-root",
|
|
108921
|
+
partitionData: {
|
|
108922
|
+
used: 698341425152,
|
|
108923
|
+
// ~650 GB
|
|
108924
|
+
total: 1073741824e3,
|
|
108925
|
+
// ~1 TB
|
|
108926
|
+
filesystem: "ext4",
|
|
108927
|
+
mountPoint: "/"
|
|
108928
|
+
}
|
|
108929
|
+
},
|
|
108930
|
+
{
|
|
108931
|
+
id: "home-partition",
|
|
108932
|
+
title: "Home Partition",
|
|
108933
|
+
value: 0,
|
|
108934
|
+
type: "partition",
|
|
108935
|
+
icon: "lucide:home",
|
|
108936
|
+
partitionData: {
|
|
108937
|
+
used: 214748364800,
|
|
108938
|
+
// ~200 GB
|
|
108939
|
+
total: 536870912e3,
|
|
108940
|
+
// ~500 GB
|
|
108941
|
+
filesystem: "ext4",
|
|
108942
|
+
mountPoint: "/home"
|
|
108943
|
+
}
|
|
108944
|
+
},
|
|
108945
|
+
{
|
|
108946
|
+
id: "data-partition",
|
|
108947
|
+
title: "Data Partition",
|
|
108948
|
+
value: 0,
|
|
108949
|
+
type: "partition",
|
|
108950
|
+
icon: "lucide:database",
|
|
108951
|
+
partitionData: {
|
|
108952
|
+
used: 1932735283200,
|
|
108953
|
+
// ~1.8 TB (90% - critical)
|
|
108954
|
+
total: 2147483648e3,
|
|
108955
|
+
// ~2 TB
|
|
108956
|
+
filesystem: "xfs",
|
|
108957
|
+
mountPoint: "/data"
|
|
108958
|
+
}
|
|
108959
|
+
},
|
|
108960
|
+
{
|
|
108961
|
+
id: "nvme-ssd",
|
|
108962
|
+
title: "Primary NVMe",
|
|
108963
|
+
value: 0,
|
|
108964
|
+
type: "disk",
|
|
108965
|
+
icon: "lucide:hard-drive",
|
|
108966
|
+
columnSpan: 2,
|
|
108967
|
+
diskData: {
|
|
108968
|
+
capacity: 2e12,
|
|
108969
|
+
// 2 TB
|
|
108970
|
+
model: "Samsung 990 Pro",
|
|
108971
|
+
type: "nvme",
|
|
108972
|
+
iops: {
|
|
108973
|
+
read: 7450,
|
|
108974
|
+
write: 6900
|
|
108975
|
+
},
|
|
108976
|
+
health: 98
|
|
108977
|
+
}
|
|
108978
|
+
},
|
|
108979
|
+
{
|
|
108980
|
+
id: "sata-ssd",
|
|
108981
|
+
title: "Secondary SSD",
|
|
108982
|
+
value: 0,
|
|
108983
|
+
type: "disk",
|
|
108984
|
+
icon: "lucide:hard-drive",
|
|
108985
|
+
diskData: {
|
|
108986
|
+
capacity: 1e12,
|
|
108987
|
+
// 1 TB
|
|
108988
|
+
model: "Crucial MX500",
|
|
108989
|
+
type: "ssd",
|
|
108990
|
+
iops: {
|
|
108991
|
+
read: 560,
|
|
108992
|
+
write: 510
|
|
108993
|
+
},
|
|
108994
|
+
health: 85
|
|
108995
|
+
}
|
|
108996
|
+
},
|
|
108997
|
+
{
|
|
108998
|
+
id: "hdd-storage",
|
|
108999
|
+
title: "Backup HDD",
|
|
109000
|
+
value: 0,
|
|
109001
|
+
type: "disk",
|
|
109002
|
+
icon: "lucide:archive",
|
|
109003
|
+
diskData: {
|
|
109004
|
+
capacity: 8e12,
|
|
109005
|
+
// 8 TB
|
|
109006
|
+
model: "Seagate IronWolf",
|
|
109007
|
+
type: "hdd",
|
|
109008
|
+
iops: {
|
|
109009
|
+
read: 210,
|
|
109010
|
+
write: 195
|
|
109011
|
+
},
|
|
109012
|
+
health: 42
|
|
109013
|
+
}
|
|
109014
|
+
}
|
|
109015
|
+
], 280, 16);
|
|
108843
109016
|
};
|
|
108844
109017
|
|
|
108845
109018
|
// ts_web/elements/00group-input/dees-input-base/dees-input-base.ts
|
|
@@ -122415,54 +122588,94 @@ var demoFunc26 = () => b2`
|
|
|
122415
122588
|
<dees-panel .title=${"3. Buttons with Icons"} .subtitle=${"Combining icons with text for enhanced visual communication"}>
|
|
122416
122589
|
<div class="icon-row">
|
|
122417
122590
|
<dees-button>
|
|
122418
|
-
<dees-icon
|
|
122591
|
+
<dees-icon icon="fa:plus"></dees-icon>
|
|
122419
122592
|
Add Item
|
|
122420
122593
|
</dees-button>
|
|
122421
122594
|
<dees-button type="destructive">
|
|
122422
|
-
<dees-icon
|
|
122595
|
+
<dees-icon icon="fa:trash"></dees-icon>
|
|
122423
122596
|
Delete
|
|
122424
122597
|
</dees-button>
|
|
122425
122598
|
<dees-button type="outline">
|
|
122426
|
-
<dees-icon
|
|
122599
|
+
<dees-icon icon="lucide:Download"></dees-icon>
|
|
122427
122600
|
Download
|
|
122428
122601
|
</dees-button>
|
|
122429
122602
|
</div>
|
|
122430
|
-
|
|
122603
|
+
|
|
122431
122604
|
<div class="icon-row">
|
|
122432
122605
|
<dees-button type="secondary" size="sm">
|
|
122433
|
-
<dees-icon
|
|
122606
|
+
<dees-icon icon="fa:gear"></dees-icon>
|
|
122434
122607
|
Settings
|
|
122435
122608
|
</dees-button>
|
|
122436
122609
|
<dees-button type="ghost">
|
|
122437
|
-
<dees-icon
|
|
122610
|
+
<dees-icon icon="fa:caretLeft"></dees-icon>
|
|
122438
122611
|
Back
|
|
122439
122612
|
</dees-button>
|
|
122440
122613
|
<dees-button type="ghost">
|
|
122441
122614
|
Next
|
|
122442
|
-
<dees-icon
|
|
122615
|
+
<dees-icon icon="fa:caretRight"></dees-icon>
|
|
122443
122616
|
</dees-button>
|
|
122444
122617
|
</div>
|
|
122445
|
-
|
|
122618
|
+
|
|
122446
122619
|
<div class="icon-row">
|
|
122447
122620
|
<dees-button size="icon" type="default">
|
|
122448
|
-
<dees-icon
|
|
122621
|
+
<dees-icon icon="fa:plus"></dees-icon>
|
|
122449
122622
|
</dees-button>
|
|
122450
122623
|
<dees-button size="icon" type="secondary">
|
|
122451
|
-
<dees-icon
|
|
122624
|
+
<dees-icon icon="fa:gear"></dees-icon>
|
|
122452
122625
|
</dees-button>
|
|
122453
122626
|
<dees-button size="icon" type="outline">
|
|
122454
|
-
<dees-icon
|
|
122627
|
+
<dees-icon icon="lucide:Search"></dees-icon>
|
|
122455
122628
|
</dees-button>
|
|
122456
122629
|
<dees-button size="icon" type="ghost">
|
|
122457
|
-
<dees-icon
|
|
122630
|
+
<dees-icon icon="lucide:MoreVertical"></dees-icon>
|
|
122458
122631
|
</dees-button>
|
|
122459
122632
|
<dees-button size="icon" type="destructive">
|
|
122460
|
-
<dees-icon
|
|
122633
|
+
<dees-icon icon="fa:trash"></dees-icon>
|
|
122461
122634
|
</dees-button>
|
|
122462
122635
|
</div>
|
|
122463
122636
|
</dees-panel>
|
|
122464
122637
|
</dees-demowrapper>
|
|
122465
|
-
|
|
122638
|
+
|
|
122639
|
+
<dees-demowrapper .runAfterRender=${async (elementArg) => {
|
|
122640
|
+
const buttons = elementArg.querySelectorAll("dees-button");
|
|
122641
|
+
buttons.forEach((button) => {
|
|
122642
|
+
button.addEventListener("clicked", () => {
|
|
122643
|
+
const icon3 = button.getAttribute("icon") || "none";
|
|
122644
|
+
const position3 = button.getAttribute("iconPosition") || "left";
|
|
122645
|
+
console.log(`Icon property button: icon=${icon3}, position=${position3}`);
|
|
122646
|
+
});
|
|
122647
|
+
});
|
|
122648
|
+
}}>
|
|
122649
|
+
<dees-panel .title=${"4. Icons via Property"} .subtitle=${"Simplified icon syntax using the icon property"}>
|
|
122650
|
+
<div class="icon-row">
|
|
122651
|
+
<dees-button icon="fa:plus">Add Item</dees-button>
|
|
122652
|
+
<dees-button type="destructive" icon="fa:trash">Delete</dees-button>
|
|
122653
|
+
<dees-button type="outline" icon="lucide:Download">Download</dees-button>
|
|
122654
|
+
</div>
|
|
122655
|
+
|
|
122656
|
+
<div class="icon-row">
|
|
122657
|
+
<dees-button type="secondary" size="sm" icon="fa:gear">Settings</dees-button>
|
|
122658
|
+
<dees-button type="ghost" icon="fa:caretLeft">Back</dees-button>
|
|
122659
|
+
<dees-button type="ghost" icon="fa:caretRight" iconPosition="right">Next</dees-button>
|
|
122660
|
+
</div>
|
|
122661
|
+
|
|
122662
|
+
<div class="icon-row">
|
|
122663
|
+
<dees-button size="icon" type="default" icon="fa:plus"></dees-button>
|
|
122664
|
+
<dees-button size="icon" type="secondary" icon="lucide:Settings"></dees-button>
|
|
122665
|
+
<dees-button size="icon" type="outline" icon="lucide:Search"></dees-button>
|
|
122666
|
+
<dees-button size="icon" type="ghost" icon="lucide:MoreVertical"></dees-button>
|
|
122667
|
+
<dees-button size="icon" type="destructive" icon="fa:trash"></dees-button>
|
|
122668
|
+
</div>
|
|
122669
|
+
|
|
122670
|
+
<div style="margin-top: 16px;">
|
|
122671
|
+
<div class="code-snippet">
|
|
122672
|
+
<dees-button icon="fa:plus">Add Item</dees-button><br>
|
|
122673
|
+
<dees-button icon="fa:caretRight" iconPosition="right">Next</dees-button>
|
|
122674
|
+
</div>
|
|
122675
|
+
</div>
|
|
122676
|
+
</dees-panel>
|
|
122677
|
+
</dees-demowrapper>
|
|
122678
|
+
|
|
122466
122679
|
<dees-demowrapper .runAfterRender=${async (elementArg) => {
|
|
122467
122680
|
const pendingButton = elementArg.querySelector('dees-button[status="pending"]');
|
|
122468
122681
|
const successButton = elementArg.querySelector('dees-button[status="success"]');
|
|
@@ -122483,7 +122696,7 @@ var demoFunc26 = () => b2`
|
|
|
122483
122696
|
});
|
|
122484
122697
|
}
|
|
122485
122698
|
}}>
|
|
122486
|
-
<dees-panel .title=${"
|
|
122699
|
+
<dees-panel .title=${"5. Button States"} .subtitle=${"Different states to indicate button status and loading conditions"}>
|
|
122487
122700
|
<div class="button-group">
|
|
122488
122701
|
<dees-button status="normal">Normal</dees-button>
|
|
122489
122702
|
<dees-button status="pending">Processing...</dees-button>
|
|
@@ -122523,7 +122736,7 @@ var demoFunc26 = () => b2`
|
|
|
122523
122736
|
});
|
|
122524
122737
|
}
|
|
122525
122738
|
}}>
|
|
122526
|
-
<dees-panel .title=${"
|
|
122739
|
+
<dees-panel .title=${"6. Event Handling"} .subtitle=${"Interactive examples with click event handling"}>
|
|
122527
122740
|
<div class="button-group">
|
|
122528
122741
|
<dees-button>Click Me</dees-button>
|
|
122529
122742
|
<dees-button type="secondary" .eventDetailData=${"custom-data-123"}>
|
|
@@ -122559,7 +122772,7 @@ var demoFunc26 = () => b2`
|
|
|
122559
122772
|
});
|
|
122560
122773
|
}
|
|
122561
122774
|
}}>
|
|
122562
|
-
<dees-panel .title=${"
|
|
122775
|
+
<dees-panel .title=${"7. Form Integration"} .subtitle=${"Buttons working within forms with automatic spacing"}>
|
|
122563
122776
|
<dees-form>
|
|
122564
122777
|
<dees-input-text label="Name" key="name" required></dees-input-text>
|
|
122565
122778
|
<dees-input-text label="Email" key="email" type="email" required></dees-input-text>
|
|
@@ -122585,7 +122798,7 @@ var demoFunc26 = () => b2`
|
|
|
122585
122798
|
}
|
|
122586
122799
|
});
|
|
122587
122800
|
}}>
|
|
122588
|
-
<dees-panel .title=${"
|
|
122801
|
+
<dees-panel .title=${"8. Backward Compatibility"} .subtitle=${"Old button types are automatically mapped to new variants"}>
|
|
122589
122802
|
<div class="button-group">
|
|
122590
122803
|
<dees-button type="normal">Normal → Default</dees-button>
|
|
122591
122804
|
<dees-button type="highlighted">Highlighted → Destructive</dees-button>
|
|
@@ -122623,36 +122836,36 @@ var demoFunc26 = () => b2`
|
|
|
122623
122836
|
});
|
|
122624
122837
|
}
|
|
122625
122838
|
}}>
|
|
122626
|
-
<dees-panel .title=${"
|
|
122839
|
+
<dees-panel .title=${"9. Advanced Examples"} .subtitle=${"Complex button configurations and real-world use cases"}>
|
|
122627
122840
|
<div class="horizontal-group">
|
|
122628
122841
|
<div class="vertical-group">
|
|
122629
122842
|
<h4 style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500;">Action Group</h4>
|
|
122630
122843
|
<dees-button type="default" size="sm">
|
|
122631
|
-
<dees-icon
|
|
122844
|
+
<dees-icon icon="lucide:Save"></dees-icon>
|
|
122632
122845
|
Save Changes
|
|
122633
122846
|
</dees-button>
|
|
122634
122847
|
<dees-button type="secondary" size="sm">
|
|
122635
|
-
<dees-icon
|
|
122848
|
+
<dees-icon icon="lucide:Undo2"></dees-icon>
|
|
122636
122849
|
Discard
|
|
122637
122850
|
</dees-button>
|
|
122638
122851
|
<dees-button type="ghost" size="sm">
|
|
122639
|
-
<dees-icon
|
|
122852
|
+
<dees-icon icon="lucide:HelpCircle"></dees-icon>
|
|
122640
122853
|
Help
|
|
122641
122854
|
</dees-button>
|
|
122642
122855
|
</div>
|
|
122643
|
-
|
|
122856
|
+
|
|
122644
122857
|
<div class="vertical-group">
|
|
122645
122858
|
<h4 style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500;">Danger Zone</h4>
|
|
122646
122859
|
<dees-button type="destructive" size="sm">
|
|
122647
|
-
<dees-icon
|
|
122860
|
+
<dees-icon icon="fa:trash"></dees-icon>
|
|
122648
122861
|
Delete Account
|
|
122649
122862
|
</dees-button>
|
|
122650
122863
|
<dees-button type="outline" size="sm">
|
|
122651
|
-
<dees-icon
|
|
122864
|
+
<dees-icon icon="lucide:Archive"></dees-icon>
|
|
122652
122865
|
Archive Data
|
|
122653
122866
|
</dees-button>
|
|
122654
122867
|
<dees-button type="ghost" size="sm" disabled>
|
|
122655
|
-
<dees-icon
|
|
122868
|
+
<dees-icon icon="lucide:Ban"></dees-icon>
|
|
122656
122869
|
Not Available
|
|
122657
122870
|
</dees-button>
|
|
122658
122871
|
</div>
|
|
@@ -122661,8 +122874,7 @@ var demoFunc26 = () => b2`
|
|
|
122661
122874
|
<div style="margin-top: 24px;">
|
|
122662
122875
|
<h4 style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500;">Code Example:</h4>
|
|
122663
122876
|
<div class="code-snippet">
|
|
122664
|
-
<dees-button type="default" size="sm" @clicked="\${handleClick}"><br>
|
|
122665
|
-
<dees-icon iconFA="faSave"></dees-icon><br>
|
|
122877
|
+
<dees-button type="default" size="sm" icon="lucide:Save" @clicked="\${handleClick}"><br>
|
|
122666
122878
|
Save Changes<br>
|
|
122667
122879
|
</dees-button>
|
|
122668
122880
|
</div>
|
|
@@ -122676,7 +122888,7 @@ var demoFunc26 = () => b2`
|
|
|
122676
122888
|
init_dist_ts26();
|
|
122677
122889
|
init_dist_ts25();
|
|
122678
122890
|
init_theme();
|
|
122679
|
-
var _insideForm_dec, _status_dec2, _size_dec2, _type_dec3, _isHidden_dec, _disabled_dec4, _eventDetailData_dec, _text_dec2, _a33, _DeesButton_decorators, _init31, _text2, _eventDetailData, _disabled4, _isHidden, _type3, _size2, _status2, _insideForm;
|
|
122891
|
+
var _iconPosition_dec, _icon_dec2, _insideForm_dec, _status_dec2, _size_dec2, _type_dec3, _isHidden_dec, _disabled_dec4, _eventDetailData_dec, _text_dec2, _a33, _DeesButton_decorators, _init31, _text2, _eventDetailData, _disabled4, _isHidden, _type3, _size2, _status2, _insideForm, _icon2, _iconPosition;
|
|
122680
122892
|
_DeesButton_decorators = [t4("dees-button")];
|
|
122681
122893
|
var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
|
|
122682
122894
|
reflect: true,
|
|
@@ -122697,7 +122909,7 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
|
|
|
122697
122909
|
})], _insideForm_dec = [n5({
|
|
122698
122910
|
type: Boolean,
|
|
122699
122911
|
reflect: true
|
|
122700
|
-
})], _a33) {
|
|
122912
|
+
})], _icon_dec2 = [n5({ type: String, reflect: true })], _iconPosition_dec = [n5({ type: String, reflect: true })], _a33) {
|
|
122701
122913
|
constructor() {
|
|
122702
122914
|
super();
|
|
122703
122915
|
__privateAdd(this, _text2, __runInitializers(_init31, 8, this)), __runInitializers(_init31, 11, this);
|
|
@@ -122708,6 +122920,8 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
|
|
|
122708
122920
|
__privateAdd(this, _size2, __runInitializers(_init31, 28, this, "default")), __runInitializers(_init31, 31, this);
|
|
122709
122921
|
__privateAdd(this, _status2, __runInitializers(_init31, 32, this, "normal")), __runInitializers(_init31, 35, this);
|
|
122710
122922
|
__privateAdd(this, _insideForm, __runInitializers(_init31, 36, this, false)), __runInitializers(_init31, 39, this);
|
|
122923
|
+
__privateAdd(this, _icon2, __runInitializers(_init31, 40, this)), __runInitializers(_init31, 43, this);
|
|
122924
|
+
__privateAdd(this, _iconPosition, __runInitializers(_init31, 44, this, "left")), __runInitializers(_init31, 47, this);
|
|
122711
122925
|
}
|
|
122712
122926
|
async connectedCallback() {
|
|
122713
122927
|
await super.connectedCallback();
|
|
@@ -122715,6 +122929,33 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
|
|
|
122715
122929
|
this.insideForm = true;
|
|
122716
122930
|
}
|
|
122717
122931
|
}
|
|
122932
|
+
/**
|
|
122933
|
+
* Extracts icon and text from light DOM and sets properties
|
|
122934
|
+
*/
|
|
122935
|
+
extractLightDom() {
|
|
122936
|
+
const iconElement = this.querySelector("dees-icon");
|
|
122937
|
+
const textContent = Array.from(this.childNodes).filter((node2) => node2.nodeType === Node.TEXT_NODE).map((node2) => node2.textContent?.trim()).filter(Boolean).join(" ");
|
|
122938
|
+
if (textContent && !this.text) {
|
|
122939
|
+
this.text = textContent;
|
|
122940
|
+
}
|
|
122941
|
+
if (iconElement) {
|
|
122942
|
+
const iconValue = iconElement.icon || iconElement.getAttribute("icon") || (iconElement.iconFA ? `fa:${iconElement.iconFA}` : null);
|
|
122943
|
+
if (iconValue) {
|
|
122944
|
+
const children2 = Array.from(this.childNodes);
|
|
122945
|
+
const iconIndex = children2.indexOf(iconElement);
|
|
122946
|
+
const textNodes = children2.filter(
|
|
122947
|
+
(node2) => node2.nodeType === Node.TEXT_NODE && node2.textContent?.trim()
|
|
122948
|
+
);
|
|
122949
|
+
if (textNodes.length > 0) {
|
|
122950
|
+
const firstTextIndex = children2.indexOf(textNodes[0]);
|
|
122951
|
+
this.iconPosition = iconIndex < firstTextIndex ? "left" : "right";
|
|
122952
|
+
}
|
|
122953
|
+
this.icon = iconValue;
|
|
122954
|
+
}
|
|
122955
|
+
iconElement.remove();
|
|
122956
|
+
}
|
|
122957
|
+
this.innerHTML = "";
|
|
122958
|
+
}
|
|
122718
122959
|
render() {
|
|
122719
122960
|
const typeMap = {
|
|
122720
122961
|
"normal": "default",
|
|
@@ -122725,19 +122966,24 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
|
|
|
122725
122966
|
};
|
|
122726
122967
|
const actualType = typeMap[this.type] || this.type;
|
|
122727
122968
|
const actualSize = this.type === "big" ? "lg" : this.size;
|
|
122969
|
+
const leftIcon = this.iconPosition === "left" && this.icon ? b2`<dees-icon .icon=${this.icon}></dees-icon>` : "";
|
|
122970
|
+
const rightIcon = this.iconPosition === "right" && this.icon ? b2`<dees-icon .icon=${this.icon}></dees-icon>` : "";
|
|
122971
|
+
const isIconOnly = actualSize === "icon" && this.icon;
|
|
122728
122972
|
return b2`
|
|
122729
122973
|
<div
|
|
122730
122974
|
class="button ${this.isHidden ? "hidden" : ""} ${actualType} size-${actualSize} ${this.status} ${this.disabled ? "disabled" : ""}"
|
|
122731
122975
|
@click="${this.dispatchClick}"
|
|
122732
122976
|
>
|
|
122733
122977
|
${this.status === "normal" ? b2`` : b2`
|
|
122734
|
-
<dees-spinner
|
|
122735
|
-
.bnw=${true}
|
|
122978
|
+
<dees-spinner
|
|
122979
|
+
.bnw=${true}
|
|
122736
122980
|
status="${this.status}"
|
|
122737
122981
|
size="${actualSize === "sm" ? 14 : actualSize === "lg" ? 18 : 16}"
|
|
122738
122982
|
></dees-spinner>
|
|
122739
122983
|
`}
|
|
122740
|
-
|
|
122984
|
+
${leftIcon}
|
|
122985
|
+
${isIconOnly ? "" : b2`<div class="textbox">${this.text || "Button"}</div>`}
|
|
122986
|
+
${rightIcon}
|
|
122741
122987
|
</div>
|
|
122742
122988
|
`;
|
|
122743
122989
|
}
|
|
@@ -122755,6 +123001,7 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
|
|
|
122755
123001
|
);
|
|
122756
123002
|
}
|
|
122757
123003
|
async firstUpdated() {
|
|
123004
|
+
this.extractLightDom();
|
|
122758
123005
|
}
|
|
122759
123006
|
};
|
|
122760
123007
|
_init31 = __decoratorStart(_a33);
|
|
@@ -122766,6 +123013,8 @@ _type3 = new WeakMap();
|
|
|
122766
123013
|
_size2 = new WeakMap();
|
|
122767
123014
|
_status2 = new WeakMap();
|
|
122768
123015
|
_insideForm = new WeakMap();
|
|
123016
|
+
_icon2 = new WeakMap();
|
|
123017
|
+
_iconPosition = new WeakMap();
|
|
122769
123018
|
__decorateElement(_init31, 4, "text", _text_dec2, DeesButton, _text2);
|
|
122770
123019
|
__decorateElement(_init31, 4, "eventDetailData", _eventDetailData_dec, DeesButton, _eventDetailData);
|
|
122771
123020
|
__decorateElement(_init31, 4, "disabled", _disabled_dec4, DeesButton, _disabled4);
|
|
@@ -122774,6 +123023,8 @@ __decorateElement(_init31, 4, "type", _type_dec3, DeesButton, _type3);
|
|
|
122774
123023
|
__decorateElement(_init31, 4, "size", _size_dec2, DeesButton, _size2);
|
|
122775
123024
|
__decorateElement(_init31, 4, "status", _status_dec2, DeesButton, _status2);
|
|
122776
123025
|
__decorateElement(_init31, 4, "insideForm", _insideForm_dec, DeesButton, _insideForm);
|
|
123026
|
+
__decorateElement(_init31, 4, "icon", _icon_dec2, DeesButton, _icon2);
|
|
123027
|
+
__decorateElement(_init31, 4, "iconPosition", _iconPosition_dec, DeesButton, _iconPosition);
|
|
122777
123028
|
DeesButton = __decorateElement(_init31, 0, "DeesButton", _DeesButton_decorators, DeesButton);
|
|
122778
123029
|
__publicField(DeesButton, "demo", demoFunc26);
|
|
122779
123030
|
__publicField(DeesButton, "demoGroup", "Button");
|
|
@@ -123037,6 +123288,12 @@ __publicField(DeesButton, "styles", [
|
|
|
123037
123288
|
height: 18px;
|
|
123038
123289
|
}
|
|
123039
123290
|
|
|
123291
|
+
/* Text alignment */
|
|
123292
|
+
.textbox {
|
|
123293
|
+
display: flex;
|
|
123294
|
+
align-items: center;
|
|
123295
|
+
}
|
|
123296
|
+
|
|
123040
123297
|
`
|
|
123041
123298
|
]);
|
|
123042
123299
|
__runInitializers(_init31, 1, DeesButton);
|
|
@@ -123139,6 +123396,10 @@ var DeesStatsGrid = class extends (_a34 = DeesElement, _tiles_dec = [n5({ type:
|
|
|
123139
123396
|
return this.renderMultiPercentage(tile);
|
|
123140
123397
|
case "cpuCores":
|
|
123141
123398
|
return this.renderCpuCores(tile);
|
|
123399
|
+
case "partition":
|
|
123400
|
+
return this.renderPartition(tile);
|
|
123401
|
+
case "disk":
|
|
123402
|
+
return this.renderDisk(tile);
|
|
123142
123403
|
case "text":
|
|
123143
123404
|
return b2`
|
|
123144
123405
|
<div class="text-value" style="${tile.color ? `color: ${tile.color}` : ""}">
|
|
@@ -123324,6 +123585,103 @@ var DeesStatsGrid = class extends (_a34 = DeesElement, _tiles_dec = [n5({ type:
|
|
|
123324
123585
|
</div>
|
|
123325
123586
|
`;
|
|
123326
123587
|
}
|
|
123588
|
+
formatBytes(bytes) {
|
|
123589
|
+
if (bytes === 0) return "0 B";
|
|
123590
|
+
const k4 = 1024;
|
|
123591
|
+
const sizes = ["B", "KB", "MB", "GB", "TB", "PB"];
|
|
123592
|
+
const i11 = Math.floor(Math.log(bytes) / Math.log(k4));
|
|
123593
|
+
return parseFloat((bytes / Math.pow(k4, i11)).toFixed(1)) + " " + sizes[i11];
|
|
123594
|
+
}
|
|
123595
|
+
renderPartition(tile) {
|
|
123596
|
+
if (!tile.partitionData) {
|
|
123597
|
+
return b2`<div class="tile-value">${tile.value}</div>`;
|
|
123598
|
+
}
|
|
123599
|
+
const { used, total, filesystem, mountPoint } = tile.partitionData;
|
|
123600
|
+
const percentage = Math.min(100, Math.max(0, used / total * 100));
|
|
123601
|
+
const free = total - used;
|
|
123602
|
+
const getColorClass = () => {
|
|
123603
|
+
if (percentage >= 90) return "critical";
|
|
123604
|
+
if (percentage >= 75) return "warning";
|
|
123605
|
+
return "";
|
|
123606
|
+
};
|
|
123607
|
+
return b2`
|
|
123608
|
+
<div class="partition-wrapper">
|
|
123609
|
+
<div class="partition-header">
|
|
123610
|
+
<span class="partition-percentage">${Math.round(percentage)}%</span>
|
|
123611
|
+
</div>
|
|
123612
|
+
<div class="partition-bar">
|
|
123613
|
+
<div
|
|
123614
|
+
class="partition-bar-fill ${getColorClass()}"
|
|
123615
|
+
style="width: ${percentage}%"
|
|
123616
|
+
></div>
|
|
123617
|
+
</div>
|
|
123618
|
+
<div class="partition-stats">
|
|
123619
|
+
<div class="partition-stat">
|
|
123620
|
+
<span class="partition-stat-label">Used</span>
|
|
123621
|
+
<span class="partition-stat-value">${this.formatBytes(used)}</span>
|
|
123622
|
+
</div>
|
|
123623
|
+
<div class="partition-stat">
|
|
123624
|
+
<span class="partition-stat-label">Free</span>
|
|
123625
|
+
<span class="partition-stat-value">${this.formatBytes(free)}</span>
|
|
123626
|
+
</div>
|
|
123627
|
+
</div>
|
|
123628
|
+
<div class="partition-meta">
|
|
123629
|
+
<span class="partition-filesystem">${filesystem}</span>
|
|
123630
|
+
${mountPoint ? b2`<span class="partition-mountpoint">${mountPoint}</span>` : ""}
|
|
123631
|
+
</div>
|
|
123632
|
+
</div>
|
|
123633
|
+
`;
|
|
123634
|
+
}
|
|
123635
|
+
renderDisk(tile) {
|
|
123636
|
+
if (!tile.diskData) {
|
|
123637
|
+
return b2`<div class="tile-value">${tile.value}</div>`;
|
|
123638
|
+
}
|
|
123639
|
+
const { capacity, model, type: type5, iops, health } = tile.diskData;
|
|
123640
|
+
const getHealthClass = (value2) => {
|
|
123641
|
+
if (value2 >= 70) return "good";
|
|
123642
|
+
if (value2 >= 30) return "warning";
|
|
123643
|
+
return "critical";
|
|
123644
|
+
};
|
|
123645
|
+
return b2`
|
|
123646
|
+
<div class="disk-wrapper">
|
|
123647
|
+
<div class="disk-capacity">${this.formatBytes(capacity)}</div>
|
|
123648
|
+
${model || type5 ? b2`
|
|
123649
|
+
<div class="disk-model">
|
|
123650
|
+
${model ? b2`<span>${model}</span>` : ""}
|
|
123651
|
+
${type5 ? b2`<span class="disk-type-badge">${type5}</span>` : ""}
|
|
123652
|
+
</div>
|
|
123653
|
+
` : ""}
|
|
123654
|
+
<div class="disk-metrics">
|
|
123655
|
+
${iops ? b2`
|
|
123656
|
+
<div class="disk-iops">
|
|
123657
|
+
<div class="disk-iops-item">
|
|
123658
|
+
<span class="disk-iops-label">Read</span>
|
|
123659
|
+
<span class="disk-iops-value">${iops.read.toLocaleString()}</span>
|
|
123660
|
+
</div>
|
|
123661
|
+
<div class="disk-iops-item">
|
|
123662
|
+
<span class="disk-iops-label">Write</span>
|
|
123663
|
+
<span class="disk-iops-value">${iops.write.toLocaleString()}</span>
|
|
123664
|
+
</div>
|
|
123665
|
+
</div>
|
|
123666
|
+
` : ""}
|
|
123667
|
+
${health !== void 0 ? b2`
|
|
123668
|
+
<div class="disk-health">
|
|
123669
|
+
<div class="disk-health-header">
|
|
123670
|
+
<span class="disk-health-label">Health</span>
|
|
123671
|
+
<span class="disk-health-value">${health}%</span>
|
|
123672
|
+
</div>
|
|
123673
|
+
<div class="disk-health-bar">
|
|
123674
|
+
<div
|
|
123675
|
+
class="disk-health-fill ${getHealthClass(health)}"
|
|
123676
|
+
style="width: ${health}%"
|
|
123677
|
+
></div>
|
|
123678
|
+
</div>
|
|
123679
|
+
</div>
|
|
123680
|
+
` : ""}
|
|
123681
|
+
</div>
|
|
123682
|
+
</div>
|
|
123683
|
+
`;
|
|
123684
|
+
}
|
|
123327
123685
|
async handleGridAction(action) {
|
|
123328
123686
|
if (action.action) {
|
|
123329
123687
|
await action.action();
|
|
@@ -123757,6 +124115,219 @@ __publicField(DeesStatsGrid, "styles", [
|
|
|
123757
124115
|
max-width: 100%;
|
|
123758
124116
|
}
|
|
123759
124117
|
|
|
124118
|
+
/* Partition Styles */
|
|
124119
|
+
.partition-wrapper {
|
|
124120
|
+
width: 100%;
|
|
124121
|
+
display: flex;
|
|
124122
|
+
flex-direction: column;
|
|
124123
|
+
flex: 1;
|
|
124124
|
+
gap: 8px;
|
|
124125
|
+
}
|
|
124126
|
+
|
|
124127
|
+
.partition-header {
|
|
124128
|
+
display: flex;
|
|
124129
|
+
align-items: baseline;
|
|
124130
|
+
gap: 8px;
|
|
124131
|
+
}
|
|
124132
|
+
|
|
124133
|
+
.partition-percentage {
|
|
124134
|
+
font-size: var(--value-font-size);
|
|
124135
|
+
font-weight: 600;
|
|
124136
|
+
color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
|
|
124137
|
+
line-height: 1.1;
|
|
124138
|
+
letter-spacing: -0.025em;
|
|
124139
|
+
}
|
|
124140
|
+
|
|
124141
|
+
.partition-bar {
|
|
124142
|
+
width: 100%;
|
|
124143
|
+
height: 6px;
|
|
124144
|
+
background: ${cssManager.bdTheme("#e8e8e8", "#1a1a1a")};
|
|
124145
|
+
border-radius: 3px;
|
|
124146
|
+
overflow: hidden;
|
|
124147
|
+
}
|
|
124148
|
+
|
|
124149
|
+
.partition-bar-fill {
|
|
124150
|
+
height: 100%;
|
|
124151
|
+
background: ${cssManager.bdTheme("#333333", "#e0e0e0")};
|
|
124152
|
+
transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
|
|
124153
|
+
border-radius: 3px;
|
|
124154
|
+
}
|
|
124155
|
+
|
|
124156
|
+
.partition-bar-fill.warning {
|
|
124157
|
+
background: ${cssManager.bdTheme("hsl(45.4 93.4% 47.5%)", "hsl(45.4 93.4% 47.5%)")};
|
|
124158
|
+
}
|
|
124159
|
+
|
|
124160
|
+
.partition-bar-fill.critical {
|
|
124161
|
+
background: ${cssManager.bdTheme("hsl(0 84.2% 60.2%)", "hsl(0 84.2% 60.2%)")};
|
|
124162
|
+
}
|
|
124163
|
+
|
|
124164
|
+
.partition-stats {
|
|
124165
|
+
display: flex;
|
|
124166
|
+
justify-content: space-between;
|
|
124167
|
+
align-items: center;
|
|
124168
|
+
margin-top: auto;
|
|
124169
|
+
}
|
|
124170
|
+
|
|
124171
|
+
.partition-stat {
|
|
124172
|
+
display: flex;
|
|
124173
|
+
flex-direction: column;
|
|
124174
|
+
gap: 2px;
|
|
124175
|
+
}
|
|
124176
|
+
|
|
124177
|
+
.partition-stat-label {
|
|
124178
|
+
font-size: 10px;
|
|
124179
|
+
font-weight: 500;
|
|
124180
|
+
color: ${cssManager.bdTheme("hsl(215.4 16.3% 56.9%)", "hsl(215 20.2% 55.1%)")};
|
|
124181
|
+
text-transform: uppercase;
|
|
124182
|
+
letter-spacing: 0.02em;
|
|
124183
|
+
}
|
|
124184
|
+
|
|
124185
|
+
.partition-stat-value {
|
|
124186
|
+
font-size: 13px;
|
|
124187
|
+
font-weight: 600;
|
|
124188
|
+
color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
|
|
124189
|
+
letter-spacing: -0.01em;
|
|
124190
|
+
}
|
|
124191
|
+
|
|
124192
|
+
.partition-meta {
|
|
124193
|
+
display: flex;
|
|
124194
|
+
align-items: center;
|
|
124195
|
+
gap: 6px;
|
|
124196
|
+
margin-top: 4px;
|
|
124197
|
+
}
|
|
124198
|
+
|
|
124199
|
+
.partition-filesystem {
|
|
124200
|
+
font-size: 11px;
|
|
124201
|
+
font-weight: 500;
|
|
124202
|
+
color: ${cssManager.bdTheme("hsl(215.4 16.3% 46.9%)", "hsl(215 20.2% 65.1%)")};
|
|
124203
|
+
background: ${cssManager.bdTheme("hsl(210 40% 96.1%)", "hsl(215 20.2% 16.8%)")};
|
|
124204
|
+
padding: 2px 6px;
|
|
124205
|
+
border-radius: 3px;
|
|
124206
|
+
}
|
|
124207
|
+
|
|
124208
|
+
.partition-mountpoint {
|
|
124209
|
+
font-size: 11px;
|
|
124210
|
+
color: ${cssManager.bdTheme("hsl(215.4 16.3% 56.9%)", "hsl(215 20.2% 55.1%)")};
|
|
124211
|
+
}
|
|
124212
|
+
|
|
124213
|
+
/* Disk Styles */
|
|
124214
|
+
.disk-wrapper {
|
|
124215
|
+
width: 100%;
|
|
124216
|
+
display: flex;
|
|
124217
|
+
flex-direction: column;
|
|
124218
|
+
flex: 1;
|
|
124219
|
+
gap: 8px;
|
|
124220
|
+
}
|
|
124221
|
+
|
|
124222
|
+
.disk-capacity {
|
|
124223
|
+
font-size: var(--value-font-size);
|
|
124224
|
+
font-weight: 600;
|
|
124225
|
+
color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
|
|
124226
|
+
line-height: 1.1;
|
|
124227
|
+
letter-spacing: -0.025em;
|
|
124228
|
+
}
|
|
124229
|
+
|
|
124230
|
+
.disk-model {
|
|
124231
|
+
font-size: 12px;
|
|
124232
|
+
color: ${cssManager.bdTheme("hsl(215.4 16.3% 46.9%)", "hsl(215 20.2% 65.1%)")};
|
|
124233
|
+
display: flex;
|
|
124234
|
+
align-items: center;
|
|
124235
|
+
gap: 6px;
|
|
124236
|
+
}
|
|
124237
|
+
|
|
124238
|
+
.disk-type-badge {
|
|
124239
|
+
font-size: 10px;
|
|
124240
|
+
font-weight: 600;
|
|
124241
|
+
text-transform: uppercase;
|
|
124242
|
+
color: ${cssManager.bdTheme("hsl(215.4 16.3% 46.9%)", "hsl(215 20.2% 65.1%)")};
|
|
124243
|
+
background: ${cssManager.bdTheme("hsl(210 40% 96.1%)", "hsl(215 20.2% 16.8%)")};
|
|
124244
|
+
padding: 2px 6px;
|
|
124245
|
+
border-radius: 3px;
|
|
124246
|
+
}
|
|
124247
|
+
|
|
124248
|
+
.disk-metrics {
|
|
124249
|
+
display: flex;
|
|
124250
|
+
flex-direction: column;
|
|
124251
|
+
gap: 8px;
|
|
124252
|
+
margin-top: auto;
|
|
124253
|
+
}
|
|
124254
|
+
|
|
124255
|
+
.disk-iops {
|
|
124256
|
+
display: flex;
|
|
124257
|
+
align-items: center;
|
|
124258
|
+
gap: 12px;
|
|
124259
|
+
}
|
|
124260
|
+
|
|
124261
|
+
.disk-iops-item {
|
|
124262
|
+
display: flex;
|
|
124263
|
+
align-items: baseline;
|
|
124264
|
+
gap: 4px;
|
|
124265
|
+
}
|
|
124266
|
+
|
|
124267
|
+
.disk-iops-label {
|
|
124268
|
+
font-size: 10px;
|
|
124269
|
+
font-weight: 500;
|
|
124270
|
+
color: ${cssManager.bdTheme("hsl(215.4 16.3% 56.9%)", "hsl(215 20.2% 55.1%)")};
|
|
124271
|
+
text-transform: uppercase;
|
|
124272
|
+
}
|
|
124273
|
+
|
|
124274
|
+
.disk-iops-value {
|
|
124275
|
+
font-size: 13px;
|
|
124276
|
+
font-weight: 600;
|
|
124277
|
+
color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
|
|
124278
|
+
}
|
|
124279
|
+
|
|
124280
|
+
.disk-health {
|
|
124281
|
+
display: flex;
|
|
124282
|
+
flex-direction: column;
|
|
124283
|
+
gap: 4px;
|
|
124284
|
+
}
|
|
124285
|
+
|
|
124286
|
+
.disk-health-header {
|
|
124287
|
+
display: flex;
|
|
124288
|
+
justify-content: space-between;
|
|
124289
|
+
align-items: baseline;
|
|
124290
|
+
}
|
|
124291
|
+
|
|
124292
|
+
.disk-health-label {
|
|
124293
|
+
font-size: 10px;
|
|
124294
|
+
font-weight: 500;
|
|
124295
|
+
color: ${cssManager.bdTheme("hsl(215.4 16.3% 56.9%)", "hsl(215 20.2% 55.1%)")};
|
|
124296
|
+
text-transform: uppercase;
|
|
124297
|
+
}
|
|
124298
|
+
|
|
124299
|
+
.disk-health-value {
|
|
124300
|
+
font-size: 12px;
|
|
124301
|
+
font-weight: 600;
|
|
124302
|
+
color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
|
|
124303
|
+
}
|
|
124304
|
+
|
|
124305
|
+
.disk-health-bar {
|
|
124306
|
+
width: 100%;
|
|
124307
|
+
height: 4px;
|
|
124308
|
+
background: ${cssManager.bdTheme("#e8e8e8", "#1a1a1a")};
|
|
124309
|
+
border-radius: 2px;
|
|
124310
|
+
overflow: hidden;
|
|
124311
|
+
}
|
|
124312
|
+
|
|
124313
|
+
.disk-health-fill {
|
|
124314
|
+
height: 100%;
|
|
124315
|
+
transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
|
|
124316
|
+
border-radius: 2px;
|
|
124317
|
+
}
|
|
124318
|
+
|
|
124319
|
+
.disk-health-fill.good {
|
|
124320
|
+
background: ${cssManager.bdTheme("hsl(142.1 76.2% 36.3%)", "hsl(142.1 70.6% 45.3%)")};
|
|
124321
|
+
}
|
|
124322
|
+
|
|
124323
|
+
.disk-health-fill.warning {
|
|
124324
|
+
background: ${cssManager.bdTheme("hsl(45.4 93.4% 47.5%)", "hsl(45.4 93.4% 47.5%)")};
|
|
124325
|
+
}
|
|
124326
|
+
|
|
124327
|
+
.disk-health-fill.critical {
|
|
124328
|
+
background: ${cssManager.bdTheme("hsl(0 84.2% 60.2%)", "hsl(0 84.2% 60.2%)")};
|
|
124329
|
+
}
|
|
124330
|
+
|
|
123760
124331
|
/* Trend Styles */
|
|
123761
124332
|
.trend-container {
|
|
123762
124333
|
width: 100%;
|
|
@@ -129853,8 +130424,10 @@ init_dist_ts26();
|
|
|
129853
130424
|
var demoFunc33 = () => {
|
|
129854
130425
|
return b2`
|
|
129855
130426
|
<dees-demowrapper .runAfterRender=${async (elementArg) => {
|
|
129856
|
-
const
|
|
129857
|
-
|
|
130427
|
+
const structuredLog = elementArg.querySelector("#structured-log");
|
|
130428
|
+
const rawLog = elementArg.querySelector("#raw-log");
|
|
130429
|
+
let structuredIntervalId;
|
|
130430
|
+
let rawIntervalId;
|
|
129858
130431
|
const serverSources = ["Server", "Database", "API", "Auth", "Cache", "Queue", "WebSocket", "Scheduler"];
|
|
129859
130432
|
const logTemplates = {
|
|
129860
130433
|
debug: [
|
|
@@ -129893,6 +130466,20 @@ var demoFunc33 = () => {
|
|
|
129893
130466
|
"Health check passed: all systems operational"
|
|
129894
130467
|
]
|
|
129895
130468
|
};
|
|
130469
|
+
const dockerLogTemplates = [
|
|
130470
|
+
"\x1B[90m2024-01-15T10:23:45.123Z\x1B[0m \x1B[36mINFO\x1B[0m [nginx] GET /api/health 200 - 2ms",
|
|
130471
|
+
"\x1B[90m2024-01-15T10:23:45.456Z\x1B[0m \x1B[33mWARN\x1B[0m [redis] Connection pool running low: 3/10",
|
|
130472
|
+
"\x1B[90m2024-01-15T10:23:45.789Z\x1B[0m \x1B[31mERROR\x1B[0m [mongodb] Query timeout after 30000ms",
|
|
130473
|
+
"\x1B[90m2024-01-15T10:23:46.012Z\x1B[0m \x1B[36mINFO\x1B[0m [app] Processing batch job #{{jobId}}",
|
|
130474
|
+
"\x1B[90m2024-01-15T10:23:46.345Z\x1B[0m \x1B[32mOK\x1B[0m [health] All services healthy",
|
|
130475
|
+
"\x1B[90m2024-01-15T10:23:46.678Z\x1B[0m \x1B[36mINFO\x1B[0m [kafka] Message consumed from topic: events",
|
|
130476
|
+
"\x1B[90m2024-01-15T10:23:47.001Z\x1B[0m \x1B[35mDEBUG\x1B[0m [grpc] Request received: GetUser(id={{userId}})",
|
|
130477
|
+
"\x1B[90m2024-01-15T10:23:47.234Z\x1B[0m \x1B[31mERROR\x1B[0m [auth] Token validation failed: expired",
|
|
130478
|
+
"\x1B[90m2024-01-15T10:23:47.567Z\x1B[0m \x1B[33mWARN\x1B[0m [rate-limit] IP {{ip}} approaching rate limit",
|
|
130479
|
+
"\x1B[90m2024-01-15T10:23:47.890Z\x1B[0m \x1B[36mINFO\x1B[0m [websocket] Client connected: session={{session}}",
|
|
130480
|
+
// Multi-line log entry like stack traces
|
|
130481
|
+
"\x1B[31mError: Connection refused\x1B[0m\n at TcpConnection.connect (/app/node_modules/pg/lib/connection.js:12:15)\n at Pool.connect (/app/node_modules/pg/lib/pool.js:45:23)\n at async DatabaseService.query (/app/src/db/service.ts:89:12)"
|
|
130482
|
+
];
|
|
129896
130483
|
const generateRandomLog = () => {
|
|
129897
130484
|
const levels = ["debug", "info", "warn", "error", "success"];
|
|
129898
130485
|
const weights = [0.2, 0.5, 0.15, 0.1, 0.05];
|
|
@@ -129910,15 +130497,21 @@ var demoFunc33 = () => {
|
|
|
129910
130497
|
const templates = logTemplates[level];
|
|
129911
130498
|
const template = templates[Math.floor(Math.random() * templates.length)];
|
|
129912
130499
|
const message2 = template.replace("{{module}}", ["express", "mongoose", "redis", "socket.io"][Math.floor(Math.random() * 4)]).replace("{{key}}", "user:" + Math.floor(Math.random() * 1e3)).replace("{{time}}", String(Math.floor(Math.random() * 500) + 50)).replace("{{headers}}", "Content-Type: application/json, Authorization: Bearer ...").replace("{{var}}", ["NODE_ENV", "DATABASE_URL", "API_KEY", "PORT"][Math.floor(Math.random() * 4)]).replace("{{method}}", ["GET", "POST", "PUT", "DELETE"][Math.floor(Math.random() * 4)]).replace("{{path}}", ["/api/users", "/api/auth/login", "/api/products", "/health"][Math.floor(Math.random() * 4)]).replace("{{userId}}", String(Math.floor(Math.random() * 1e4))).replace("{{jobId}}", "job_" + Math.random().toString(36).substring(2, 11)).replace("{{task}}", ["cleanup", "backup", "report-generation", "cache-refresh"][Math.floor(Math.random() * 4)]).replace("{{ip}}", `192.168.1.${Math.floor(Math.random() * 255)}`).replace("{{query}}", "SELECT * FROM users WHERE ...").replace("{{percent}}", String(Math.floor(Math.random() * 30) + 70)).replace("{{endpoint}}", "/api/v1/legacy").replace("{{days}}", String(Math.floor(Math.random() * 30) + 1)).replace("{{error}}", ["ECONNREFUSED", "ETIMEDOUT", "ENOTFOUND"][Math.floor(Math.random() * 3)]).replace("{{user}}", "user_" + Math.floor(Math.random() * 1e3)).replace("{{service}}", ["Redis", "MongoDB", "ElasticSearch"][Math.floor(Math.random() * 3)]).replace("{{port}}", String(3e3 + Math.floor(Math.random() * 10))).replace("{{size}}", String(Math.floor(Math.random() * 500) + 100));
|
|
129913
|
-
|
|
130500
|
+
structuredLog.addLog(level, message2, source);
|
|
129914
130501
|
};
|
|
129915
|
-
const
|
|
129916
|
-
|
|
130502
|
+
const generateDockerLog = () => {
|
|
130503
|
+
const template = dockerLogTemplates[Math.floor(Math.random() * dockerLogTemplates.length)];
|
|
130504
|
+
const now2 = (/* @__PURE__ */ new Date()).toISOString();
|
|
130505
|
+
const logLine = template.replace(/2024-01-15T10:23:\d{2}\.\d{3}Z/g, now2).replace("{{jobId}}", String(Math.floor(Math.random() * 1e4))).replace("{{userId}}", String(Math.floor(Math.random() * 1e4))).replace("{{ip}}", `192.168.1.${Math.floor(Math.random() * 255)}`).replace("{{session}}", Math.random().toString(36).substring(2, 11));
|
|
130506
|
+
rawLog.writelnRaw(logLine);
|
|
130507
|
+
};
|
|
130508
|
+
const startStructuredSimulation = () => {
|
|
130509
|
+
if (!structuredIntervalId) {
|
|
129917
130510
|
const scheduleNext = () => {
|
|
129918
130511
|
generateRandomLog();
|
|
129919
130512
|
const nextDelay = Math.random() * 2e3 + 500;
|
|
129920
|
-
|
|
129921
|
-
if (
|
|
130513
|
+
structuredIntervalId = window.setTimeout(() => {
|
|
130514
|
+
if (structuredIntervalId) {
|
|
129922
130515
|
scheduleNext();
|
|
129923
130516
|
}
|
|
129924
130517
|
}, nextDelay);
|
|
@@ -129926,57 +130519,131 @@ var demoFunc33 = () => {
|
|
|
129926
130519
|
scheduleNext();
|
|
129927
130520
|
}
|
|
129928
130521
|
};
|
|
129929
|
-
const
|
|
129930
|
-
if (
|
|
129931
|
-
window.clearTimeout(
|
|
129932
|
-
|
|
130522
|
+
const stopStructuredSimulation = () => {
|
|
130523
|
+
if (structuredIntervalId) {
|
|
130524
|
+
window.clearTimeout(structuredIntervalId);
|
|
130525
|
+
structuredIntervalId = null;
|
|
130526
|
+
}
|
|
130527
|
+
};
|
|
130528
|
+
const startRawSimulation = () => {
|
|
130529
|
+
if (!rawIntervalId) {
|
|
130530
|
+
const scheduleNext = () => {
|
|
130531
|
+
generateDockerLog();
|
|
130532
|
+
const nextDelay = Math.random() * 1e3 + 200;
|
|
130533
|
+
rawIntervalId = window.setTimeout(() => {
|
|
130534
|
+
if (rawIntervalId) {
|
|
130535
|
+
scheduleNext();
|
|
130536
|
+
}
|
|
130537
|
+
}, nextDelay);
|
|
130538
|
+
};
|
|
130539
|
+
scheduleNext();
|
|
130540
|
+
}
|
|
130541
|
+
};
|
|
130542
|
+
const stopRawSimulation = () => {
|
|
130543
|
+
if (rawIntervalId) {
|
|
130544
|
+
window.clearTimeout(rawIntervalId);
|
|
130545
|
+
rawIntervalId = null;
|
|
129933
130546
|
}
|
|
129934
130547
|
};
|
|
129935
130548
|
const buttons = elementArg.querySelectorAll("dees-button");
|
|
129936
130549
|
buttons.forEach((button) => {
|
|
129937
130550
|
const text9 = button.textContent?.trim();
|
|
129938
|
-
|
|
129939
|
-
|
|
129940
|
-
|
|
129941
|
-
|
|
129942
|
-
|
|
129943
|
-
|
|
130551
|
+
switch (text9) {
|
|
130552
|
+
case "Add Structured Log":
|
|
130553
|
+
button.addEventListener("click", () => generateRandomLog());
|
|
130554
|
+
break;
|
|
130555
|
+
case "Start Structured":
|
|
130556
|
+
button.addEventListener("click", () => startStructuredSimulation());
|
|
130557
|
+
break;
|
|
130558
|
+
case "Stop Structured":
|
|
130559
|
+
button.addEventListener("click", () => stopStructuredSimulation());
|
|
130560
|
+
break;
|
|
130561
|
+
case "Add Docker Log":
|
|
130562
|
+
button.addEventListener("click", () => generateDockerLog());
|
|
130563
|
+
break;
|
|
130564
|
+
case "Start Docker":
|
|
130565
|
+
button.addEventListener("click", () => startRawSimulation());
|
|
130566
|
+
break;
|
|
130567
|
+
case "Stop Docker":
|
|
130568
|
+
button.addEventListener("click", () => stopRawSimulation());
|
|
130569
|
+
break;
|
|
129944
130570
|
}
|
|
129945
130571
|
});
|
|
129946
130572
|
}}>
|
|
129947
130573
|
<style>
|
|
129948
|
-
|
|
129949
|
-
|
|
129950
|
-
|
|
129951
|
-
|
|
129952
|
-
|
|
129953
|
-
|
|
129954
|
-
|
|
129955
|
-
|
|
129956
|
-
|
|
129957
|
-
|
|
129958
|
-
|
|
129959
|
-
|
|
129960
|
-
|
|
129961
|
-
|
|
129962
|
-
|
|
129963
|
-
|
|
129964
|
-
|
|
129965
|
-
|
|
129966
|
-
|
|
129967
|
-
|
|
129968
|
-
|
|
129969
|
-
|
|
130574
|
+
${i`
|
|
130575
|
+
.demoBox {
|
|
130576
|
+
position: relative;
|
|
130577
|
+
background: ${cssManager.bdTheme("hsl(0 0% 95%)", "hsl(0 0% 5%)")};
|
|
130578
|
+
height: 100%;
|
|
130579
|
+
width: 100%;
|
|
130580
|
+
padding: 40px;
|
|
130581
|
+
box-sizing: border-box;
|
|
130582
|
+
display: flex;
|
|
130583
|
+
flex-direction: column;
|
|
130584
|
+
gap: 24px;
|
|
130585
|
+
}
|
|
130586
|
+
.section {
|
|
130587
|
+
display: flex;
|
|
130588
|
+
flex-direction: column;
|
|
130589
|
+
gap: 12px;
|
|
130590
|
+
}
|
|
130591
|
+
.section-title {
|
|
130592
|
+
color: ${cssManager.bdTheme("hsl(0 0% 9%)", "hsl(0 0% 95%)")};
|
|
130593
|
+
font-size: 14px;
|
|
130594
|
+
font-weight: 600;
|
|
130595
|
+
font-family: 'Geist Sans', sans-serif;
|
|
130596
|
+
}
|
|
130597
|
+
.section-description {
|
|
130598
|
+
color: ${cssManager.bdTheme("hsl(215.4 16.3% 46.9%)", "hsl(215 20.2% 65.1%)")};
|
|
130599
|
+
font-size: 12px;
|
|
130600
|
+
font-family: 'Geist Sans', sans-serif;
|
|
130601
|
+
}
|
|
130602
|
+
.controls {
|
|
130603
|
+
display: flex;
|
|
130604
|
+
gap: 10px;
|
|
130605
|
+
flex-wrap: wrap;
|
|
130606
|
+
}
|
|
130607
|
+
`}
|
|
130608
|
+
</style>
|
|
129970
130609
|
<div class="demoBox">
|
|
129971
|
-
|
|
129972
|
-
|
|
129973
|
-
<
|
|
129974
|
-
<
|
|
130610
|
+
<!-- Structured Logs Section -->
|
|
130611
|
+
<div class="section">
|
|
130612
|
+
<div class="section-title">Structured Logs (ILogEntry)</div>
|
|
130613
|
+
<div class="section-description">
|
|
130614
|
+
Structured log entries with level, message, and source. Supports search and keyword highlighting.
|
|
130615
|
+
</div>
|
|
130616
|
+
<div class="controls">
|
|
130617
|
+
<dees-button>Add Structured Log</dees-button>
|
|
130618
|
+
<dees-button>Start Structured</dees-button>
|
|
130619
|
+
<dees-button>Stop Structured</dees-button>
|
|
130620
|
+
</div>
|
|
130621
|
+
<dees-chart-log
|
|
130622
|
+
id="structured-log"
|
|
130623
|
+
.label=${"Production Server Logs"}
|
|
130624
|
+
.highlightKeywords=${["error", "failed", "timeout"]}
|
|
130625
|
+
.showMetrics=${true}
|
|
130626
|
+
></dees-chart-log>
|
|
130627
|
+
</div>
|
|
130628
|
+
|
|
130629
|
+
<!-- Raw Logs Section -->
|
|
130630
|
+
<div class="section">
|
|
130631
|
+
<div class="section-title">Raw Logs (Docker/Container Style)</div>
|
|
130632
|
+
<div class="section-description">
|
|
130633
|
+
Raw log output with ANSI escape sequences for real Docker/container logs.
|
|
130634
|
+
</div>
|
|
130635
|
+
<div class="controls">
|
|
130636
|
+
<dees-button>Add Docker Log</dees-button>
|
|
130637
|
+
<dees-button>Start Docker</dees-button>
|
|
130638
|
+
<dees-button>Stop Docker</dees-button>
|
|
130639
|
+
</div>
|
|
130640
|
+
<dees-chart-log
|
|
130641
|
+
id="raw-log"
|
|
130642
|
+
.label=${"Docker Container Logs"}
|
|
130643
|
+
.mode=${"raw"}
|
|
130644
|
+
.showMetrics=${false}
|
|
130645
|
+
></dees-chart-log>
|
|
129975
130646
|
</div>
|
|
129976
|
-
<div class="info">Simulating realistic server logs with various levels and sources</div>
|
|
129977
|
-
<dees-chart-log
|
|
129978
|
-
.label=${"Production Server Logs"}
|
|
129979
|
-
></dees-chart-log>
|
|
129980
130647
|
</div>
|
|
129981
130648
|
</dees-demowrapper>
|
|
129982
130649
|
`;
|
|
@@ -129986,16 +130653,37 @@ var demoFunc33 = () => {
|
|
|
129986
130653
|
init_dist_ts26();
|
|
129987
130654
|
init_dist_ts25();
|
|
129988
130655
|
init_theme();
|
|
129989
|
-
|
|
130656
|
+
init_services();
|
|
130657
|
+
var _terminalReady_dec, _metrics_dec, _filterMode_dec, _searchQuery_dec2, _showMetrics_dec, _highlightKeywords_dec, _maxEntries_dec, _autoScroll_dec, _logEntries_dec, _mode_dec, _label_dec6, _a45, _DeesChartLog_decorators, _init47, _label6, _mode, _logEntries, _autoScroll, _maxEntries, _highlightKeywords, _showMetrics, _searchQuery2, _filterMode, _metrics, _terminalReady;
|
|
129990
130658
|
_DeesChartLog_decorators = [t4("dees-chart-log")];
|
|
129991
|
-
var DeesChartLog = class extends (_a45 = DeesElement, _label_dec6 = [n5()], _logEntries_dec = [n5({ type: Array })], _autoScroll_dec = [n5({ type: Boolean })], _maxEntries_dec = [n5({ type: Number })], _a45) {
|
|
130659
|
+
var DeesChartLog = class extends (_a45 = DeesElement, _label_dec6 = [n5()], _mode_dec = [n5({ type: String })], _logEntries_dec = [n5({ type: Array })], _autoScroll_dec = [n5({ type: Boolean })], _maxEntries_dec = [n5({ type: Number })], _highlightKeywords_dec = [n5({ type: Array })], _showMetrics_dec = [n5({ type: Boolean })], _searchQuery_dec2 = [r5()], _filterMode_dec = [r5()], _metrics_dec = [r5()], _terminalReady_dec = [r5()], _a45) {
|
|
129992
130660
|
constructor() {
|
|
129993
130661
|
super();
|
|
129994
130662
|
__privateAdd(this, _label6, __runInitializers(_init47, 8, this, "Server Logs")), __runInitializers(_init47, 11, this);
|
|
129995
|
-
__privateAdd(this,
|
|
129996
|
-
__privateAdd(this,
|
|
129997
|
-
__privateAdd(this,
|
|
129998
|
-
|
|
130663
|
+
__privateAdd(this, _mode, __runInitializers(_init47, 12, this, "structured")), __runInitializers(_init47, 15, this);
|
|
130664
|
+
__privateAdd(this, _logEntries, __runInitializers(_init47, 16, this, [])), __runInitializers(_init47, 19, this);
|
|
130665
|
+
__privateAdd(this, _autoScroll, __runInitializers(_init47, 20, this, true)), __runInitializers(_init47, 23, this);
|
|
130666
|
+
__privateAdd(this, _maxEntries, __runInitializers(_init47, 24, this, 1e4)), __runInitializers(_init47, 27, this);
|
|
130667
|
+
__privateAdd(this, _highlightKeywords, __runInitializers(_init47, 28, this, [])), __runInitializers(_init47, 31, this);
|
|
130668
|
+
__privateAdd(this, _showMetrics, __runInitializers(_init47, 32, this, true)), __runInitializers(_init47, 35, this);
|
|
130669
|
+
__privateAdd(this, _searchQuery2, __runInitializers(_init47, 36, this, "")), __runInitializers(_init47, 39, this);
|
|
130670
|
+
__privateAdd(this, _filterMode, __runInitializers(_init47, 40, this, false)), __runInitializers(_init47, 43, this);
|
|
130671
|
+
__privateAdd(this, _metrics, __runInitializers(_init47, 44, this, { debug: 0, info: 0, warn: 0, error: 0, success: 0, total: 0, rate: 0 })), __runInitializers(_init47, 47, this);
|
|
130672
|
+
__privateAdd(this, _terminalReady, __runInitializers(_init47, 48, this, false)), __runInitializers(_init47, 51, this);
|
|
130673
|
+
// Buffer of all log entries for filter mode
|
|
130674
|
+
__publicField(this, "logBuffer", []);
|
|
130675
|
+
// Track trailing hidden entries count for live updates in filter mode
|
|
130676
|
+
__publicField(this, "trailingHiddenCount", 0);
|
|
130677
|
+
// xterm instances
|
|
130678
|
+
__publicField(this, "terminal", null);
|
|
130679
|
+
__publicField(this, "fitAddon", null);
|
|
130680
|
+
__publicField(this, "searchAddon", null);
|
|
130681
|
+
__publicField(this, "resizeObserver", null);
|
|
130682
|
+
__publicField(this, "terminalThemeSubscription", null);
|
|
130683
|
+
__publicField(this, "domtoolsInstance", null);
|
|
130684
|
+
// Rate calculation
|
|
130685
|
+
__publicField(this, "rateBuffer", []);
|
|
130686
|
+
__publicField(this, "rateInterval", null);
|
|
129999
130687
|
domtools_elementbasic_exports.setup();
|
|
130000
130688
|
}
|
|
130001
130689
|
render() {
|
|
@@ -130003,105 +130691,508 @@ var DeesChartLog = class extends (_a45 = DeesElement, _label_dec6 = [n5()], _log
|
|
|
130003
130691
|
<div class="mainbox">
|
|
130004
130692
|
<div class="header">
|
|
130005
130693
|
<div class="title">${this.label}</div>
|
|
130694
|
+
<div class="search-box">
|
|
130695
|
+
<input
|
|
130696
|
+
type="text"
|
|
130697
|
+
placeholder="Search logs..."
|
|
130698
|
+
.value=${this.searchQuery}
|
|
130699
|
+
@input=${(e11) => this.handleSearchInput(e11)}
|
|
130700
|
+
@keydown=${(e11) => this.handleSearchKeydown(e11)}
|
|
130701
|
+
/>
|
|
130702
|
+
<div class="search-nav">
|
|
130703
|
+
<button @click=${() => this.searchPrevious()} title="Previous match">↑</button>
|
|
130704
|
+
<button @click=${() => this.searchNext()} title="Next match">↓</button>
|
|
130705
|
+
</div>
|
|
130706
|
+
<button
|
|
130707
|
+
class="filter-toggle ${this.filterMode ? "active" : ""}"
|
|
130708
|
+
@click=${() => this.toggleFilterMode()}
|
|
130709
|
+
title="${this.filterMode ? "Switch to highlight mode" : "Switch to filter mode"}"
|
|
130710
|
+
>
|
|
130711
|
+
${this.filterMode ? "Filter" : "Highlight"}
|
|
130712
|
+
</button>
|
|
130713
|
+
</div>
|
|
130006
130714
|
<div class="controls">
|
|
130007
|
-
<button
|
|
130715
|
+
<button
|
|
130008
130716
|
class="control-button ${this.autoScroll ? "active" : ""}"
|
|
130009
|
-
@click=${() =>
|
|
130010
|
-
this.autoScroll = !this.autoScroll;
|
|
130011
|
-
}}
|
|
130717
|
+
@click=${() => this.toggleAutoScroll()}
|
|
130012
130718
|
>
|
|
130013
130719
|
Auto Scroll
|
|
130014
130720
|
</button>
|
|
130015
|
-
<button
|
|
130016
|
-
class="control-button"
|
|
130017
|
-
@click=${() => {
|
|
130018
|
-
this.clearLogs();
|
|
130019
|
-
}}
|
|
130020
|
-
>
|
|
130721
|
+
<button class="control-button" @click=${() => this.clearLogs()}>
|
|
130021
130722
|
Clear
|
|
130022
130723
|
</button>
|
|
130023
130724
|
</div>
|
|
130024
130725
|
</div>
|
|
130025
|
-
|
|
130026
|
-
|
|
130726
|
+
|
|
130727
|
+
<div class="terminal-container">
|
|
130728
|
+
${!this.terminalReady ? b2`<div class="loading-state">Loading terminal...</div>` : ""}
|
|
130027
130729
|
</div>
|
|
130730
|
+
|
|
130731
|
+
${this.showMetrics ? b2`
|
|
130732
|
+
<div class="metrics-bar">
|
|
130733
|
+
<span class="metric error">errors: ${this.metrics.error}</span>
|
|
130734
|
+
<span class="metric warn">warns: ${this.metrics.warn}</span>
|
|
130735
|
+
<span class="metric info">info: ${this.metrics.info}</span>
|
|
130736
|
+
<span class="metric success">success: ${this.metrics.success}</span>
|
|
130737
|
+
<span class="metric debug">debug: ${this.metrics.debug}</span>
|
|
130738
|
+
<span class="metric rate">${this.metrics.rate.toFixed(1)} logs/sec</span>
|
|
130739
|
+
</div>
|
|
130740
|
+
` : ""}
|
|
130028
130741
|
</div>
|
|
130029
130742
|
`;
|
|
130030
130743
|
}
|
|
130031
|
-
|
|
130032
|
-
|
|
130744
|
+
async firstUpdated() {
|
|
130745
|
+
this.domtoolsInstance = await this.domtoolsPromise;
|
|
130746
|
+
await this.initializeTerminal();
|
|
130747
|
+
if (this.logEntries.length > 0) {
|
|
130748
|
+
for (const entry of this.logEntries) {
|
|
130749
|
+
this.writeLogEntry(entry);
|
|
130750
|
+
}
|
|
130751
|
+
}
|
|
130752
|
+
}
|
|
130753
|
+
async initializeTerminal() {
|
|
130754
|
+
const libLoader = DeesServiceLibLoader.getInstance();
|
|
130755
|
+
const [xtermBundle, fitBundle, searchBundle] = await Promise.all([
|
|
130756
|
+
libLoader.loadXterm(),
|
|
130757
|
+
libLoader.loadXtermFitAddon(),
|
|
130758
|
+
libLoader.loadXtermSearchAddon()
|
|
130759
|
+
]);
|
|
130760
|
+
await this.injectXtermStylesIntoShadow();
|
|
130761
|
+
this.terminal = new xtermBundle.Terminal({
|
|
130762
|
+
cursorBlink: false,
|
|
130763
|
+
disableStdin: true,
|
|
130764
|
+
fontSize: 12,
|
|
130765
|
+
fontFamily: "'SF Mono', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', monospace",
|
|
130766
|
+
theme: this.getTerminalTheme(),
|
|
130767
|
+
scrollback: this.maxEntries,
|
|
130768
|
+
convertEol: true
|
|
130769
|
+
});
|
|
130770
|
+
this.fitAddon = new fitBundle.FitAddon();
|
|
130771
|
+
this.searchAddon = new searchBundle.SearchAddon();
|
|
130772
|
+
this.terminal.loadAddon(this.fitAddon);
|
|
130773
|
+
this.terminal.loadAddon(this.searchAddon);
|
|
130774
|
+
const container = this.shadowRoot.querySelector(".terminal-container");
|
|
130775
|
+
this.terminal.open(container);
|
|
130776
|
+
await new Promise((resolve2) => requestAnimationFrame(resolve2));
|
|
130777
|
+
this.fitAddon.fit();
|
|
130778
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
130779
|
+
this.fitAddon?.fit();
|
|
130780
|
+
});
|
|
130781
|
+
this.resizeObserver.observe(container);
|
|
130782
|
+
this.terminalThemeSubscription = this.domtoolsInstance.themeManager.themeObservable.subscribe(() => {
|
|
130783
|
+
if (this.terminal) {
|
|
130784
|
+
this.terminal.options.theme = this.getTerminalTheme();
|
|
130785
|
+
}
|
|
130786
|
+
});
|
|
130787
|
+
this.rateInterval = setInterval(() => this.calculateRate(), 1e3);
|
|
130788
|
+
this.terminalReady = true;
|
|
130789
|
+
}
|
|
130790
|
+
getTerminalTheme() {
|
|
130791
|
+
const isDark = this.domtoolsInstance?.themeManager?.isDarkMode ?? true;
|
|
130792
|
+
return isDark ? {
|
|
130793
|
+
background: "#0a0a0a",
|
|
130794
|
+
foreground: "#e0e0e0",
|
|
130795
|
+
cursor: "#e0e0e0",
|
|
130796
|
+
selectionBackground: "#404040",
|
|
130797
|
+
black: "#000000",
|
|
130798
|
+
red: "#ff5555",
|
|
130799
|
+
green: "#50fa7b",
|
|
130800
|
+
yellow: "#f1fa8c",
|
|
130801
|
+
blue: "#6272a4",
|
|
130802
|
+
magenta: "#ff79c6",
|
|
130803
|
+
cyan: "#8be9fd",
|
|
130804
|
+
white: "#f8f8f2",
|
|
130805
|
+
brightBlack: "#6272a4",
|
|
130806
|
+
brightRed: "#ff6e6e",
|
|
130807
|
+
brightGreen: "#69ff94",
|
|
130808
|
+
brightYellow: "#ffffa5",
|
|
130809
|
+
brightBlue: "#d6acff",
|
|
130810
|
+
brightMagenta: "#ff92df",
|
|
130811
|
+
brightCyan: "#a4ffff",
|
|
130812
|
+
brightWhite: "#ffffff"
|
|
130813
|
+
} : {
|
|
130814
|
+
background: "#ffffff",
|
|
130815
|
+
foreground: "#333333",
|
|
130816
|
+
cursor: "#333333",
|
|
130817
|
+
selectionBackground: "#add6ff",
|
|
130818
|
+
black: "#000000",
|
|
130819
|
+
red: "#cd3131",
|
|
130820
|
+
green: "#00bc00",
|
|
130821
|
+
yellow: "#949800",
|
|
130822
|
+
blue: "#0451a5",
|
|
130823
|
+
magenta: "#bc05bc",
|
|
130824
|
+
cyan: "#0598bc",
|
|
130825
|
+
white: "#555555",
|
|
130826
|
+
brightBlack: "#666666",
|
|
130827
|
+
brightRed: "#cd3131",
|
|
130828
|
+
brightGreen: "#14ce14",
|
|
130829
|
+
brightYellow: "#b5ba00",
|
|
130830
|
+
brightBlue: "#0451a5",
|
|
130831
|
+
brightMagenta: "#bc05bc",
|
|
130832
|
+
brightCyan: "#0598bc",
|
|
130833
|
+
brightWhite: "#a5a5a5"
|
|
130834
|
+
};
|
|
130835
|
+
}
|
|
130836
|
+
/**
|
|
130837
|
+
* Inject xterm CSS styles into shadow root
|
|
130838
|
+
* This is needed because shadow DOM doesn't inherit styles from document.head
|
|
130839
|
+
*/
|
|
130840
|
+
async injectXtermStylesIntoShadow() {
|
|
130841
|
+
const styleId = "xterm-shadow-styles";
|
|
130842
|
+
if (this.shadowRoot.getElementById(styleId)) {
|
|
130843
|
+
return;
|
|
130844
|
+
}
|
|
130845
|
+
const cssUrl = `${CDN_BASE}/xterm@${CDN_VERSIONS.xterm}/css/xterm.css`;
|
|
130846
|
+
const response = await fetch(cssUrl);
|
|
130847
|
+
const cssText = await response.text();
|
|
130848
|
+
const style = document.createElement("style");
|
|
130849
|
+
style.id = styleId;
|
|
130850
|
+
style.textContent = cssText;
|
|
130851
|
+
this.shadowRoot.appendChild(style);
|
|
130852
|
+
}
|
|
130853
|
+
// =====================
|
|
130854
|
+
// Structured Log Methods
|
|
130855
|
+
// =====================
|
|
130856
|
+
/**
|
|
130857
|
+
* Add a single structured log entry
|
|
130858
|
+
*/
|
|
130859
|
+
addLog(level, message2, source) {
|
|
130860
|
+
const entry = {
|
|
130861
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
130862
|
+
level,
|
|
130863
|
+
message: message2,
|
|
130864
|
+
source
|
|
130865
|
+
};
|
|
130866
|
+
this.logBuffer.push(entry);
|
|
130867
|
+
if (this.logBuffer.length > this.maxEntries) {
|
|
130868
|
+
this.logBuffer.shift();
|
|
130869
|
+
}
|
|
130870
|
+
if (!this.filterMode || !this.searchQuery) {
|
|
130871
|
+
this.writeLogEntry(entry);
|
|
130872
|
+
} else if (this.entryMatchesFilter(entry)) {
|
|
130873
|
+
this.trailingHiddenCount = 0;
|
|
130874
|
+
this.writeLogEntry(entry);
|
|
130875
|
+
} else {
|
|
130876
|
+
this.updateTrailingPlaceholder();
|
|
130877
|
+
}
|
|
130878
|
+
this.updateMetrics(entry.level);
|
|
130879
|
+
}
|
|
130880
|
+
/**
|
|
130881
|
+
* Add multiple structured log entries
|
|
130882
|
+
*/
|
|
130883
|
+
updateLog(entries) {
|
|
130884
|
+
if (!entries) return;
|
|
130885
|
+
for (const entry of entries) {
|
|
130886
|
+
this.logBuffer.push(entry);
|
|
130887
|
+
if (this.logBuffer.length > this.maxEntries) {
|
|
130888
|
+
this.logBuffer.shift();
|
|
130889
|
+
}
|
|
130890
|
+
if (!this.filterMode || !this.searchQuery) {
|
|
130891
|
+
this.writeLogEntry(entry);
|
|
130892
|
+
} else if (this.entryMatchesFilter(entry)) {
|
|
130893
|
+
this.trailingHiddenCount = 0;
|
|
130894
|
+
this.writeLogEntry(entry);
|
|
130895
|
+
} else {
|
|
130896
|
+
this.updateTrailingPlaceholder();
|
|
130897
|
+
}
|
|
130898
|
+
this.updateMetrics(entry.level);
|
|
130899
|
+
}
|
|
130900
|
+
}
|
|
130901
|
+
/**
|
|
130902
|
+
* Update the trailing hidden placeholder in real-time
|
|
130903
|
+
* Clears the last line if a placeholder already exists, then writes updated count
|
|
130904
|
+
*/
|
|
130905
|
+
updateTrailingPlaceholder() {
|
|
130906
|
+
if (!this.terminal) return;
|
|
130907
|
+
if (this.trailingHiddenCount > 0) {
|
|
130908
|
+
this.terminal.write("\x1B[1A\x1B[2K\r");
|
|
130909
|
+
}
|
|
130910
|
+
this.trailingHiddenCount++;
|
|
130911
|
+
this.writeHiddenPlaceholder(this.trailingHiddenCount);
|
|
130912
|
+
if (this.autoScroll) {
|
|
130913
|
+
this.terminal.scrollToBottom();
|
|
130914
|
+
}
|
|
130915
|
+
}
|
|
130916
|
+
/**
|
|
130917
|
+
* Check if a log entry matches the current filter
|
|
130918
|
+
*/
|
|
130919
|
+
entryMatchesFilter(entry) {
|
|
130920
|
+
if (!this.searchQuery) return true;
|
|
130921
|
+
const query4 = this.searchQuery.toLowerCase();
|
|
130922
|
+
return entry.message.toLowerCase().includes(query4) || entry.level.toLowerCase().includes(query4) || (entry.source?.toLowerCase().includes(query4) ?? false);
|
|
130923
|
+
}
|
|
130924
|
+
writeLogEntry(entry) {
|
|
130925
|
+
if (!this.terminal) return;
|
|
130926
|
+
const formatted = this.formatLogEntry(entry);
|
|
130927
|
+
this.terminal.writeln(formatted);
|
|
130928
|
+
if (this.autoScroll) {
|
|
130929
|
+
this.terminal.scrollToBottom();
|
|
130930
|
+
}
|
|
130931
|
+
}
|
|
130932
|
+
formatLogEntry(entry) {
|
|
130933
|
+
const timestamp2 = this.formatTimestamp(entry.timestamp);
|
|
130934
|
+
const levelColors = {
|
|
130935
|
+
debug: "\x1B[90m",
|
|
130936
|
+
// Gray
|
|
130937
|
+
info: "\x1B[36m",
|
|
130938
|
+
// Cyan
|
|
130939
|
+
warn: "\x1B[33m",
|
|
130940
|
+
// Yellow
|
|
130941
|
+
error: "\x1B[31m",
|
|
130942
|
+
// Red
|
|
130943
|
+
success: "\x1B[32m"
|
|
130944
|
+
// Green
|
|
130945
|
+
};
|
|
130946
|
+
const reset = "\x1B[0m";
|
|
130947
|
+
const dim = "\x1B[2m";
|
|
130948
|
+
const levelStr = `${levelColors[entry.level]}[${entry.level.toUpperCase().padEnd(7)}]${reset}`;
|
|
130949
|
+
const sourceStr = entry.source ? `${dim}[${entry.source}]${reset} ` : "";
|
|
130950
|
+
const messageStr = this.applyHighlights(entry.message);
|
|
130951
|
+
return `${dim}${timestamp2}${reset} ${levelStr} ${sourceStr}${messageStr}`;
|
|
130952
|
+
}
|
|
130953
|
+
formatTimestamp(isoString) {
|
|
130954
|
+
const date = new Date(isoString);
|
|
130955
|
+
return date.toLocaleTimeString("en-US", {
|
|
130033
130956
|
hour12: false,
|
|
130034
130957
|
hour: "2-digit",
|
|
130035
130958
|
minute: "2-digit",
|
|
130036
130959
|
second: "2-digit",
|
|
130037
130960
|
fractionalSecondDigits: 3
|
|
130038
130961
|
});
|
|
130039
|
-
return b2`
|
|
130040
|
-
<div class="logEntry">
|
|
130041
|
-
<span class="timestamp">${timestamp2}</span>
|
|
130042
|
-
<span class="level ${entry.level}">${entry.level}</span>
|
|
130043
|
-
${entry.source ? b2`<span class="source">[${entry.source}]</span>` : ""}
|
|
130044
|
-
<span class="message">${entry.message}</span>
|
|
130045
|
-
</div>
|
|
130046
|
-
`;
|
|
130047
130962
|
}
|
|
130048
|
-
|
|
130049
|
-
|
|
130050
|
-
this.
|
|
130051
|
-
|
|
130052
|
-
|
|
130053
|
-
|
|
130054
|
-
|
|
130055
|
-
|
|
130056
|
-
|
|
130057
|
-
|
|
130058
|
-
|
|
130059
|
-
|
|
130060
|
-
|
|
130061
|
-
|
|
130062
|
-
|
|
130063
|
-
|
|
130064
|
-
|
|
130065
|
-
|
|
130066
|
-
|
|
130067
|
-
|
|
130068
|
-
|
|
130963
|
+
applyHighlights(text9) {
|
|
130964
|
+
const keywords = [...this.highlightKeywords];
|
|
130965
|
+
if (this.filterMode && this.searchQuery) {
|
|
130966
|
+
keywords.push(this.searchQuery);
|
|
130967
|
+
}
|
|
130968
|
+
if (keywords.length === 0) return text9;
|
|
130969
|
+
let result = text9;
|
|
130970
|
+
for (const keyword of keywords) {
|
|
130971
|
+
const escaped = keyword.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
130972
|
+
const regex = new RegExp(`(${escaped})`, "gi");
|
|
130973
|
+
result = result.replace(regex, "\x1B[43m\x1B[30m$1\x1B[0m");
|
|
130974
|
+
}
|
|
130975
|
+
return result;
|
|
130976
|
+
}
|
|
130977
|
+
// =====================
|
|
130978
|
+
// Raw Log Methods
|
|
130979
|
+
// =====================
|
|
130980
|
+
/**
|
|
130981
|
+
* Write raw data to the terminal (for Docker logs, etc.)
|
|
130982
|
+
*/
|
|
130983
|
+
writeRaw(data) {
|
|
130984
|
+
if (!this.terminal) return;
|
|
130985
|
+
this.terminal.write(data);
|
|
130986
|
+
this.recordLogEvent();
|
|
130987
|
+
if (this.autoScroll) {
|
|
130988
|
+
this.terminal.scrollToBottom();
|
|
130989
|
+
}
|
|
130990
|
+
}
|
|
130991
|
+
/**
|
|
130992
|
+
* Write a raw line to the terminal
|
|
130993
|
+
*/
|
|
130994
|
+
writelnRaw(line) {
|
|
130995
|
+
if (!this.terminal) return;
|
|
130996
|
+
this.terminal.writeln(line);
|
|
130997
|
+
this.recordLogEvent();
|
|
130998
|
+
if (this.autoScroll) {
|
|
130999
|
+
this.terminal.scrollToBottom();
|
|
131000
|
+
}
|
|
131001
|
+
}
|
|
131002
|
+
// =====================
|
|
131003
|
+
// Search Methods
|
|
131004
|
+
// =====================
|
|
131005
|
+
handleSearchInput(e11) {
|
|
131006
|
+
const input = e11.target;
|
|
131007
|
+
const newQuery = input.value;
|
|
131008
|
+
const queryChanged = this.searchQuery !== newQuery;
|
|
131009
|
+
this.searchQuery = newQuery;
|
|
131010
|
+
if (this.filterMode && queryChanged) {
|
|
131011
|
+
this.reRenderFilteredLogs();
|
|
131012
|
+
} else if (this.searchQuery) {
|
|
131013
|
+
this.searchAddon?.findNext(this.searchQuery);
|
|
131014
|
+
}
|
|
131015
|
+
}
|
|
131016
|
+
handleSearchKeydown(e11) {
|
|
131017
|
+
if (e11.key === "Enter") {
|
|
131018
|
+
if (e11.shiftKey) {
|
|
131019
|
+
this.searchPrevious();
|
|
131020
|
+
} else {
|
|
131021
|
+
this.searchNext();
|
|
130069
131022
|
}
|
|
130070
|
-
|
|
130071
|
-
|
|
130072
|
-
|
|
130073
|
-
|
|
131023
|
+
} else if (e11.key === "Escape") {
|
|
131024
|
+
this.searchQuery = "";
|
|
131025
|
+
e11.target.value = "";
|
|
131026
|
+
}
|
|
131027
|
+
}
|
|
131028
|
+
/**
|
|
131029
|
+
* Search for a query in the terminal
|
|
131030
|
+
*/
|
|
131031
|
+
search(query4) {
|
|
131032
|
+
this.searchQuery = query4;
|
|
131033
|
+
this.searchAddon?.findNext(query4);
|
|
131034
|
+
}
|
|
131035
|
+
/**
|
|
131036
|
+
* Find next search match
|
|
131037
|
+
*/
|
|
131038
|
+
searchNext() {
|
|
131039
|
+
if (this.searchQuery) {
|
|
131040
|
+
this.searchAddon?.findNext(this.searchQuery);
|
|
131041
|
+
}
|
|
131042
|
+
}
|
|
131043
|
+
/**
|
|
131044
|
+
* Find previous search match
|
|
131045
|
+
*/
|
|
131046
|
+
searchPrevious() {
|
|
131047
|
+
if (this.searchQuery) {
|
|
131048
|
+
this.searchAddon?.findPrevious(this.searchQuery);
|
|
131049
|
+
}
|
|
131050
|
+
}
|
|
131051
|
+
// =====================
|
|
131052
|
+
// Control Methods
|
|
131053
|
+
// =====================
|
|
131054
|
+
toggleAutoScroll() {
|
|
131055
|
+
this.autoScroll = !this.autoScroll;
|
|
131056
|
+
if (this.autoScroll && this.terminal) {
|
|
131057
|
+
this.terminal.scrollToBottom();
|
|
131058
|
+
}
|
|
131059
|
+
}
|
|
131060
|
+
/**
|
|
131061
|
+
* Toggle between filter mode and highlight mode
|
|
131062
|
+
*/
|
|
131063
|
+
toggleFilterMode() {
|
|
131064
|
+
this.filterMode = !this.filterMode;
|
|
131065
|
+
this.reRenderFilteredLogs();
|
|
131066
|
+
}
|
|
131067
|
+
/**
|
|
131068
|
+
* Re-render logs based on current filter state
|
|
131069
|
+
* In filter mode: show matching logs with placeholders for hidden entries
|
|
131070
|
+
* In highlight mode: show all logs
|
|
131071
|
+
*/
|
|
131072
|
+
reRenderFilteredLogs() {
|
|
131073
|
+
if (!this.terminal) return;
|
|
131074
|
+
this.terminal.clear();
|
|
131075
|
+
this.trailingHiddenCount = 0;
|
|
131076
|
+
if (!this.filterMode || !this.searchQuery) {
|
|
131077
|
+
for (const entry of this.logBuffer) {
|
|
131078
|
+
const formatted = this.formatLogEntry(entry);
|
|
131079
|
+
this.terminal.writeln(formatted);
|
|
130074
131080
|
}
|
|
131081
|
+
} else {
|
|
131082
|
+
let hiddenCount = 0;
|
|
131083
|
+
for (const entry of this.logBuffer) {
|
|
131084
|
+
if (this.entryMatchesFilter(entry)) {
|
|
131085
|
+
if (hiddenCount > 0) {
|
|
131086
|
+
this.writeHiddenPlaceholder(hiddenCount);
|
|
131087
|
+
hiddenCount = 0;
|
|
131088
|
+
}
|
|
131089
|
+
const formatted = this.formatLogEntry(entry);
|
|
131090
|
+
this.terminal.writeln(formatted);
|
|
131091
|
+
} else {
|
|
131092
|
+
hiddenCount++;
|
|
131093
|
+
}
|
|
131094
|
+
}
|
|
131095
|
+
if (hiddenCount > 0) {
|
|
131096
|
+
this.writeHiddenPlaceholder(hiddenCount);
|
|
131097
|
+
this.trailingHiddenCount = hiddenCount;
|
|
131098
|
+
}
|
|
131099
|
+
}
|
|
131100
|
+
if (this.autoScroll) {
|
|
131101
|
+
this.terminal.scrollToBottom();
|
|
130075
131102
|
}
|
|
130076
131103
|
}
|
|
131104
|
+
/**
|
|
131105
|
+
* Write a placeholder line showing how many log entries are hidden by filter
|
|
131106
|
+
*/
|
|
131107
|
+
writeHiddenPlaceholder(count2) {
|
|
131108
|
+
const dim = "\x1B[2m";
|
|
131109
|
+
const reset = "\x1B[0m";
|
|
131110
|
+
const text9 = count2 === 1 ? `[1 log line hidden by filter ...]` : `[${count2} log lines hidden by filter ...]`;
|
|
131111
|
+
this.terminal?.writeln(`${dim}${text9}${reset}`);
|
|
131112
|
+
}
|
|
131113
|
+
/**
|
|
131114
|
+
* Clear all logs and reset metrics
|
|
131115
|
+
*/
|
|
130077
131116
|
clearLogs() {
|
|
130078
|
-
this.
|
|
130079
|
-
this.
|
|
131117
|
+
this.terminal?.clear();
|
|
131118
|
+
this.logBuffer = [];
|
|
131119
|
+
this.trailingHiddenCount = 0;
|
|
131120
|
+
this.resetMetrics();
|
|
130080
131121
|
}
|
|
131122
|
+
/**
|
|
131123
|
+
* Scroll to the bottom of the log
|
|
131124
|
+
*/
|
|
130081
131125
|
scrollToBottom() {
|
|
130082
|
-
|
|
130083
|
-
this.logContainer.scrollTop = this.logContainer.scrollHeight;
|
|
130084
|
-
}
|
|
131126
|
+
this.terminal?.scrollToBottom();
|
|
130085
131127
|
}
|
|
130086
|
-
|
|
130087
|
-
|
|
130088
|
-
|
|
130089
|
-
|
|
130090
|
-
|
|
130091
|
-
|
|
131128
|
+
// =====================
|
|
131129
|
+
// Metrics Methods
|
|
131130
|
+
// =====================
|
|
131131
|
+
updateMetrics(level) {
|
|
131132
|
+
this.metrics = {
|
|
131133
|
+
...this.metrics,
|
|
131134
|
+
[level]: this.metrics[level] + 1,
|
|
131135
|
+
total: this.metrics.total + 1
|
|
130092
131136
|
};
|
|
130093
|
-
this.
|
|
131137
|
+
this.recordLogEvent();
|
|
131138
|
+
}
|
|
131139
|
+
recordLogEvent() {
|
|
131140
|
+
this.rateBuffer.push(Date.now());
|
|
131141
|
+
}
|
|
131142
|
+
calculateRate() {
|
|
131143
|
+
const now2 = Date.now();
|
|
131144
|
+
this.rateBuffer = this.rateBuffer.filter((t9) => now2 - t9 < 1e4);
|
|
131145
|
+
const rate = this.rateBuffer.length / 10;
|
|
131146
|
+
if (rate !== this.metrics.rate) {
|
|
131147
|
+
this.metrics = { ...this.metrics, rate };
|
|
131148
|
+
}
|
|
131149
|
+
}
|
|
131150
|
+
resetMetrics() {
|
|
131151
|
+
this.metrics = { debug: 0, info: 0, warn: 0, error: 0, success: 0, total: 0, rate: 0 };
|
|
131152
|
+
this.rateBuffer = [];
|
|
131153
|
+
}
|
|
131154
|
+
// =====================
|
|
131155
|
+
// Lifecycle
|
|
131156
|
+
// =====================
|
|
131157
|
+
async disconnectedCallback() {
|
|
131158
|
+
await super.disconnectedCallback();
|
|
131159
|
+
if (this.resizeObserver) {
|
|
131160
|
+
this.resizeObserver.disconnect();
|
|
131161
|
+
}
|
|
131162
|
+
if (this.terminalThemeSubscription) {
|
|
131163
|
+
this.terminalThemeSubscription.unsubscribe();
|
|
131164
|
+
}
|
|
131165
|
+
if (this.rateInterval) {
|
|
131166
|
+
clearInterval(this.rateInterval);
|
|
131167
|
+
}
|
|
131168
|
+
if (this.terminal) {
|
|
131169
|
+
this.terminal.dispose();
|
|
131170
|
+
}
|
|
130094
131171
|
}
|
|
130095
131172
|
};
|
|
130096
131173
|
_init47 = __decoratorStart(_a45);
|
|
130097
131174
|
_label6 = new WeakMap();
|
|
131175
|
+
_mode = new WeakMap();
|
|
130098
131176
|
_logEntries = new WeakMap();
|
|
130099
131177
|
_autoScroll = new WeakMap();
|
|
130100
131178
|
_maxEntries = new WeakMap();
|
|
131179
|
+
_highlightKeywords = new WeakMap();
|
|
131180
|
+
_showMetrics = new WeakMap();
|
|
131181
|
+
_searchQuery2 = new WeakMap();
|
|
131182
|
+
_filterMode = new WeakMap();
|
|
131183
|
+
_metrics = new WeakMap();
|
|
131184
|
+
_terminalReady = new WeakMap();
|
|
130101
131185
|
__decorateElement(_init47, 4, "label", _label_dec6, DeesChartLog, _label6);
|
|
131186
|
+
__decorateElement(_init47, 4, "mode", _mode_dec, DeesChartLog, _mode);
|
|
130102
131187
|
__decorateElement(_init47, 4, "logEntries", _logEntries_dec, DeesChartLog, _logEntries);
|
|
130103
131188
|
__decorateElement(_init47, 4, "autoScroll", _autoScroll_dec, DeesChartLog, _autoScroll);
|
|
130104
131189
|
__decorateElement(_init47, 4, "maxEntries", _maxEntries_dec, DeesChartLog, _maxEntries);
|
|
131190
|
+
__decorateElement(_init47, 4, "highlightKeywords", _highlightKeywords_dec, DeesChartLog, _highlightKeywords);
|
|
131191
|
+
__decorateElement(_init47, 4, "showMetrics", _showMetrics_dec, DeesChartLog, _showMetrics);
|
|
131192
|
+
__decorateElement(_init47, 4, "searchQuery", _searchQuery_dec2, DeesChartLog, _searchQuery2);
|
|
131193
|
+
__decorateElement(_init47, 4, "filterMode", _filterMode_dec, DeesChartLog, _filterMode);
|
|
131194
|
+
__decorateElement(_init47, 4, "metrics", _metrics_dec, DeesChartLog, _metrics);
|
|
131195
|
+
__decorateElement(_init47, 4, "terminalReady", _terminalReady_dec, DeesChartLog, _terminalReady);
|
|
130105
131196
|
DeesChartLog = __decorateElement(_init47, 0, "DeesChartLog", _DeesChartLog_decorators, DeesChartLog);
|
|
130106
131197
|
__publicField(DeesChartLog, "demo", demoFunc33);
|
|
130107
131198
|
__publicField(DeesChartLog, "demoGroup", "Chart");
|
|
@@ -130109,13 +131200,12 @@ __publicField(DeesChartLog, "styles", [
|
|
|
130109
131200
|
themeDefaultStyles,
|
|
130110
131201
|
cssManager.defaultStyles,
|
|
130111
131202
|
i`
|
|
130112
|
-
/* TODO: Migrate hardcoded values to --dees-* CSS variables */
|
|
130113
131203
|
:host {
|
|
130114
|
-
|
|
131204
|
+
display: block;
|
|
131205
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
130115
131206
|
color: ${cssManager.bdTheme("hsl(0 0% 3.9%)", "hsl(0 0% 98%)")};
|
|
130116
|
-
font-size: 12px;
|
|
130117
|
-
line-height: 1.5;
|
|
130118
131207
|
}
|
|
131208
|
+
|
|
130119
131209
|
.mainbox {
|
|
130120
131210
|
position: relative;
|
|
130121
131211
|
width: 100%;
|
|
@@ -130130,143 +131220,197 @@ __publicField(DeesChartLog, "styles", [
|
|
|
130130
131220
|
|
|
130131
131221
|
.header {
|
|
130132
131222
|
background: ${cssManager.bdTheme("hsl(0 0% 97%)", "hsl(0 0% 7%)")};
|
|
130133
|
-
padding: 12px
|
|
131223
|
+
padding: 8px 12px;
|
|
130134
131224
|
border-bottom: 1px solid ${cssManager.bdTheme("hsl(0 0% 89.8%)", "hsl(0 0% 14.9%)")};
|
|
130135
131225
|
display: flex;
|
|
130136
|
-
justify-content: space-between;
|
|
130137
131226
|
align-items: center;
|
|
131227
|
+
gap: 12px;
|
|
130138
131228
|
flex-shrink: 0;
|
|
131229
|
+
flex-wrap: wrap;
|
|
130139
131230
|
}
|
|
130140
131231
|
|
|
130141
131232
|
.title {
|
|
130142
131233
|
font-weight: 500;
|
|
130143
131234
|
font-size: 14px;
|
|
130144
131235
|
color: ${cssManager.bdTheme("hsl(0 0% 9%)", "hsl(0 0% 95%)")};
|
|
130145
|
-
|
|
131236
|
+
white-space: nowrap;
|
|
130146
131237
|
}
|
|
130147
131238
|
|
|
130148
|
-
.
|
|
131239
|
+
.search-box {
|
|
130149
131240
|
display: flex;
|
|
130150
|
-
|
|
131241
|
+
align-items: center;
|
|
131242
|
+
gap: 4px;
|
|
131243
|
+
flex: 1;
|
|
131244
|
+
min-width: 150px;
|
|
131245
|
+
max-width: 300px;
|
|
130151
131246
|
}
|
|
130152
131247
|
|
|
130153
|
-
.
|
|
130154
|
-
|
|
130155
|
-
|
|
130156
|
-
border-radius: 6px;
|
|
130157
|
-
padding: 6px 12px;
|
|
130158
|
-
color: ${cssManager.bdTheme("hsl(0 0% 45.1%)", "hsl(0 0% 63.9%)")};
|
|
130159
|
-
cursor: pointer;
|
|
131248
|
+
.search-box input {
|
|
131249
|
+
flex: 1;
|
|
131250
|
+
padding: 4px 8px;
|
|
130160
131251
|
font-size: 12px;
|
|
130161
|
-
|
|
130162
|
-
|
|
130163
|
-
|
|
130164
|
-
|
|
130165
|
-
|
|
130166
|
-
.control-button:hover {
|
|
130167
|
-
background: ${cssManager.bdTheme("hsl(0 0% 95.1%)", "hsl(0 0% 14.9%)")};
|
|
130168
|
-
border-color: ${cssManager.bdTheme("hsl(0 0% 79.8%)", "hsl(0 0% 20.9%)")};
|
|
130169
|
-
color: ${cssManager.bdTheme("hsl(0 0% 15%)", "hsl(0 0% 93.9%)")};
|
|
131252
|
+
border: 1px solid ${cssManager.bdTheme("hsl(0 0% 89.8%)", "hsl(0 0% 14.9%)")};
|
|
131253
|
+
border-radius: 4px;
|
|
131254
|
+
background: ${cssManager.bdTheme("hsl(0 0% 100%)", "hsl(0 0% 9%)")};
|
|
131255
|
+
color: ${cssManager.bdTheme("hsl(0 0% 9%)", "hsl(0 0% 95%)")};
|
|
131256
|
+
outline: none;
|
|
130170
131257
|
}
|
|
130171
131258
|
|
|
130172
|
-
.
|
|
130173
|
-
|
|
130174
|
-
color: ${cssManager.bdTheme("hsl(0 0% 98%)", "hsl(0 0% 3.9%)")};
|
|
131259
|
+
.search-box input:focus {
|
|
131260
|
+
border-color: ${cssManager.bdTheme("hsl(222.2 47.4% 51.2%)", "hsl(217.2 91.2% 59.8%)")};
|
|
130175
131261
|
}
|
|
130176
131262
|
|
|
130177
|
-
.
|
|
130178
|
-
|
|
130179
|
-
overflow-y: auto;
|
|
130180
|
-
overflow-x: hidden;
|
|
130181
|
-
padding: 16px;
|
|
130182
|
-
font-size: 12px;
|
|
131263
|
+
.search-box input::placeholder {
|
|
131264
|
+
color: ${cssManager.bdTheme("hsl(0 0% 63.9%)", "hsl(0 0% 45.1%)")};
|
|
130183
131265
|
}
|
|
130184
131266
|
|
|
130185
|
-
.
|
|
130186
|
-
margin-bottom: 4px;
|
|
131267
|
+
.search-nav {
|
|
130187
131268
|
display: flex;
|
|
130188
|
-
|
|
130189
|
-
word-break: break-all;
|
|
130190
|
-
font-variant-numeric: tabular-nums;
|
|
131269
|
+
gap: 2px;
|
|
130191
131270
|
}
|
|
130192
131271
|
|
|
130193
|
-
.
|
|
130194
|
-
|
|
130195
|
-
|
|
130196
|
-
|
|
131272
|
+
.search-nav button {
|
|
131273
|
+
padding: 4px 6px;
|
|
131274
|
+
font-size: 11px;
|
|
131275
|
+
background: ${cssManager.bdTheme("hsl(0 0% 100%)", "hsl(0 0% 14.9%)")};
|
|
131276
|
+
border: 1px solid ${cssManager.bdTheme("hsl(0 0% 89.8%)", "hsl(0 0% 14.9%)")};
|
|
131277
|
+
border-radius: 3px;
|
|
131278
|
+
color: ${cssManager.bdTheme("hsl(0 0% 45.1%)", "hsl(0 0% 63.9%)")};
|
|
131279
|
+
cursor: pointer;
|
|
131280
|
+
line-height: 1;
|
|
130197
131281
|
}
|
|
130198
131282
|
|
|
130199
|
-
.
|
|
130200
|
-
|
|
130201
|
-
|
|
130202
|
-
border-radius: 3px;
|
|
130203
|
-
font-weight: 600;
|
|
130204
|
-
text-transform: uppercase;
|
|
130205
|
-
font-size: 10px;
|
|
130206
|
-
flex-shrink: 0;
|
|
131283
|
+
.search-nav button:hover {
|
|
131284
|
+
background: ${cssManager.bdTheme("hsl(0 0% 95.1%)", "hsl(0 0% 20%)")};
|
|
131285
|
+
color: ${cssManager.bdTheme("hsl(0 0% 15%)", "hsl(0 0% 93.9%)")};
|
|
130207
131286
|
}
|
|
130208
131287
|
|
|
130209
|
-
.
|
|
131288
|
+
.filter-toggle {
|
|
131289
|
+
padding: 4px 8px;
|
|
131290
|
+
font-size: 11px;
|
|
131291
|
+
font-weight: 500;
|
|
131292
|
+
background: ${cssManager.bdTheme("hsl(0 0% 100%)", "hsl(0 0% 14.9%)")};
|
|
131293
|
+
border: 1px solid ${cssManager.bdTheme("hsl(0 0% 89.8%)", "hsl(0 0% 14.9%)")};
|
|
131294
|
+
border-radius: 4px;
|
|
130210
131295
|
color: ${cssManager.bdTheme("hsl(0 0% 45.1%)", "hsl(0 0% 63.9%)")};
|
|
130211
|
-
|
|
131296
|
+
cursor: pointer;
|
|
131297
|
+
transition: all 0.15s;
|
|
131298
|
+
white-space: nowrap;
|
|
130212
131299
|
}
|
|
130213
131300
|
|
|
130214
|
-
.
|
|
130215
|
-
|
|
130216
|
-
|
|
131301
|
+
.filter-toggle:hover {
|
|
131302
|
+
background: ${cssManager.bdTheme("hsl(0 0% 95.1%)", "hsl(0 0% 20%)")};
|
|
131303
|
+
color: ${cssManager.bdTheme("hsl(0 0% 15%)", "hsl(0 0% 93.9%)")};
|
|
130217
131304
|
}
|
|
130218
131305
|
|
|
130219
|
-
.
|
|
130220
|
-
|
|
130221
|
-
|
|
131306
|
+
.filter-toggle.active {
|
|
131307
|
+
background: ${cssManager.bdTheme("hsl(45 93% 47%)", "hsl(45 93% 47%)")};
|
|
131308
|
+
border-color: ${cssManager.bdTheme("hsl(45 93% 47%)", "hsl(45 93% 47%)")};
|
|
131309
|
+
color: hsl(0 0% 9%);
|
|
130222
131310
|
}
|
|
130223
131311
|
|
|
130224
|
-
.
|
|
130225
|
-
|
|
130226
|
-
|
|
131312
|
+
.controls {
|
|
131313
|
+
display: flex;
|
|
131314
|
+
gap: 6px;
|
|
131315
|
+
margin-left: auto;
|
|
130227
131316
|
}
|
|
130228
131317
|
|
|
130229
|
-
.
|
|
130230
|
-
|
|
130231
|
-
|
|
131318
|
+
.control-button {
|
|
131319
|
+
background: ${cssManager.bdTheme("hsl(0 0% 100%)", "hsl(0 0% 14.9%)")};
|
|
131320
|
+
border: 1px solid ${cssManager.bdTheme("hsl(0 0% 89.8%)", "hsl(0 0% 14.9%)")};
|
|
131321
|
+
border-radius: 4px;
|
|
131322
|
+
padding: 4px 10px;
|
|
131323
|
+
color: ${cssManager.bdTheme("hsl(0 0% 45.1%)", "hsl(0 0% 63.9%)")};
|
|
131324
|
+
cursor: pointer;
|
|
131325
|
+
font-size: 12px;
|
|
131326
|
+
font-weight: 500;
|
|
131327
|
+
transition: all 0.15s;
|
|
130232
131328
|
}
|
|
130233
131329
|
|
|
130234
|
-
.
|
|
130235
|
-
|
|
130236
|
-
|
|
130237
|
-
|
|
131330
|
+
.control-button:hover {
|
|
131331
|
+
background: ${cssManager.bdTheme("hsl(0 0% 95.1%)", "hsl(0 0% 20%)")};
|
|
131332
|
+
border-color: ${cssManager.bdTheme("hsl(0 0% 79.8%)", "hsl(0 0% 25%)")};
|
|
131333
|
+
color: ${cssManager.bdTheme("hsl(0 0% 15%)", "hsl(0 0% 93.9%)")};
|
|
130238
131334
|
}
|
|
130239
131335
|
|
|
130240
|
-
.
|
|
130241
|
-
|
|
131336
|
+
.control-button.active {
|
|
131337
|
+
background: ${cssManager.bdTheme("hsl(222.2 47.4% 51.2%)", "hsl(217.2 91.2% 59.8%)")};
|
|
131338
|
+
border-color: ${cssManager.bdTheme("hsl(222.2 47.4% 51.2%)", "hsl(217.2 91.2% 59.8%)")};
|
|
131339
|
+
color: white;
|
|
131340
|
+
}
|
|
131341
|
+
|
|
131342
|
+
.terminal-container {
|
|
130242
131343
|
flex: 1;
|
|
131344
|
+
overflow: hidden;
|
|
131345
|
+
padding: 8px;
|
|
131346
|
+
background: ${cssManager.bdTheme("hsl(0 0% 100%)", "hsl(0 0% 3.9%)")};
|
|
130243
131347
|
}
|
|
130244
131348
|
|
|
130245
|
-
.
|
|
131349
|
+
.terminal-container .xterm {
|
|
131350
|
+
height: 100%;
|
|
131351
|
+
}
|
|
131352
|
+
|
|
131353
|
+
.loading-state {
|
|
130246
131354
|
display: flex;
|
|
130247
131355
|
align-items: center;
|
|
130248
131356
|
justify-content: center;
|
|
130249
131357
|
height: 100%;
|
|
130250
131358
|
color: ${cssManager.bdTheme("hsl(0 0% 45.1%)", "hsl(0 0% 63.9%)")};
|
|
130251
131359
|
font-style: italic;
|
|
131360
|
+
font-size: 13px;
|
|
130252
131361
|
}
|
|
130253
131362
|
|
|
130254
|
-
|
|
130255
|
-
|
|
131363
|
+
.metrics-bar {
|
|
131364
|
+
background: ${cssManager.bdTheme("hsl(0 0% 97%)", "hsl(0 0% 7%)")};
|
|
131365
|
+
border-top: 1px solid ${cssManager.bdTheme("hsl(0 0% 89.8%)", "hsl(0 0% 14.9%)")};
|
|
131366
|
+
padding: 6px 12px;
|
|
131367
|
+
display: flex;
|
|
131368
|
+
gap: 16px;
|
|
131369
|
+
font-size: 11px;
|
|
131370
|
+
font-weight: 500;
|
|
131371
|
+
flex-shrink: 0;
|
|
131372
|
+
}
|
|
131373
|
+
|
|
131374
|
+
.metric {
|
|
131375
|
+
display: flex;
|
|
131376
|
+
align-items: center;
|
|
131377
|
+
gap: 4px;
|
|
131378
|
+
}
|
|
131379
|
+
|
|
131380
|
+
.metric::before {
|
|
131381
|
+
content: '';
|
|
130256
131382
|
width: 8px;
|
|
131383
|
+
height: 8px;
|
|
131384
|
+
border-radius: 50%;
|
|
130257
131385
|
}
|
|
130258
131386
|
|
|
130259
|
-
.
|
|
130260
|
-
background:
|
|
131387
|
+
.metric.error::before {
|
|
131388
|
+
background: hsl(0 84.2% 60.2%);
|
|
130261
131389
|
}
|
|
130262
131390
|
|
|
130263
|
-
.
|
|
130264
|
-
background:
|
|
130265
|
-
border-radius: 4px;
|
|
131391
|
+
.metric.warn::before {
|
|
131392
|
+
background: hsl(25 95% 53%);
|
|
130266
131393
|
}
|
|
130267
131394
|
|
|
130268
|
-
.
|
|
130269
|
-
background:
|
|
131395
|
+
.metric.info::before {
|
|
131396
|
+
background: hsl(222.2 47.4% 51.2%);
|
|
131397
|
+
}
|
|
131398
|
+
|
|
131399
|
+
.metric.success::before {
|
|
131400
|
+
background: hsl(142.1 76.2% 36.3%);
|
|
131401
|
+
}
|
|
131402
|
+
|
|
131403
|
+
.metric.debug::before {
|
|
131404
|
+
background: hsl(0 0% 63.9%);
|
|
131405
|
+
}
|
|
131406
|
+
|
|
131407
|
+
.metric.rate {
|
|
131408
|
+
margin-left: auto;
|
|
131409
|
+
color: ${cssManager.bdTheme("hsl(0 0% 45.1%)", "hsl(0 0% 63.9%)")};
|
|
131410
|
+
}
|
|
131411
|
+
|
|
131412
|
+
.metric.rate::before {
|
|
131413
|
+
display: none;
|
|
130270
131414
|
}
|
|
130271
131415
|
`
|
|
130272
131416
|
]);
|
|
@@ -154160,9 +155304,9 @@ var openWidgetContextMenu = ({
|
|
|
154160
155304
|
// ts_web/elements/dees-dashboardgrid/dees-dashboardgrid.ts
|
|
154161
155305
|
init_dist_ts26();
|
|
154162
155306
|
init_dees_icon();
|
|
154163
|
-
var _previewWidgets_dec, _resolvedMargins_dec,
|
|
155307
|
+
var _previewWidgets_dec, _resolvedMargins_dec, _metrics_dec2, _placeholderPosition_dec, _activeBreakpoint_dec, _layouts_dec, _showGridLines_dec, _rtl_dec, _cellHeightUnit_dec, _enableAnimation_dec, _editable_dec, _columns_dec2, _margin_dec, _cellHeight_dec, _widgets_dec2, _a75, _DeesDashboardgrid_decorators, _init78, _widgets2, _cellHeight, _margin, _columns2, _editable, _enableAnimation, _cellHeightUnit, _rtl, _showGridLines, _layouts, _activeBreakpoint, _placeholderPosition, _metrics2, _resolvedMargins, _previewWidgets;
|
|
154164
155308
|
_DeesDashboardgrid_decorators = [t4("dees-dashboardgrid")];
|
|
154165
|
-
var DeesDashboardgrid = class extends (_a75 = DeesElement, _widgets_dec2 = [n5({ type: Array })], _cellHeight_dec = [n5({ type: Number })], _margin_dec = [n5({ type: Object })], _columns_dec2 = [n5({ type: Number })], _editable_dec = [n5({ type: Boolean })], _enableAnimation_dec = [n5({ type: Boolean, reflect: true })], _cellHeightUnit_dec = [n5({ type: String })], _rtl_dec = [n5({ type: Boolean })], _showGridLines_dec = [n5({ type: Boolean })], _layouts_dec = [n5({ attribute: false })], _activeBreakpoint_dec = [n5({ type: String })], _placeholderPosition_dec = [r5()],
|
|
155309
|
+
var DeesDashboardgrid = class extends (_a75 = DeesElement, _widgets_dec2 = [n5({ type: Array })], _cellHeight_dec = [n5({ type: Number })], _margin_dec = [n5({ type: Object })], _columns_dec2 = [n5({ type: Number })], _editable_dec = [n5({ type: Boolean })], _enableAnimation_dec = [n5({ type: Boolean, reflect: true })], _cellHeightUnit_dec = [n5({ type: String })], _rtl_dec = [n5({ type: Boolean })], _showGridLines_dec = [n5({ type: Boolean })], _layouts_dec = [n5({ attribute: false })], _activeBreakpoint_dec = [n5({ type: String })], _placeholderPosition_dec = [r5()], _metrics_dec2 = [r5()], _resolvedMargins_dec = [r5()], _previewWidgets_dec = [r5()], _a75) {
|
|
154166
155310
|
constructor() {
|
|
154167
155311
|
super(...arguments);
|
|
154168
155312
|
__privateAdd(this, _widgets2, __runInitializers(_init78, 8, this, [])), __runInitializers(_init78, 11, this);
|
|
@@ -154177,7 +155321,7 @@ var DeesDashboardgrid = class extends (_a75 = DeesElement, _widgets_dec2 = [n5({
|
|
|
154177
155321
|
__privateAdd(this, _layouts, __runInitializers(_init78, 44, this)), __runInitializers(_init78, 47, this);
|
|
154178
155322
|
__privateAdd(this, _activeBreakpoint, __runInitializers(_init78, 48, this, "base")), __runInitializers(_init78, 51, this);
|
|
154179
155323
|
__privateAdd(this, _placeholderPosition, __runInitializers(_init78, 52, this, null)), __runInitializers(_init78, 55, this);
|
|
154180
|
-
__privateAdd(this,
|
|
155324
|
+
__privateAdd(this, _metrics2, __runInitializers(_init78, 56, this, null)), __runInitializers(_init78, 59, this);
|
|
154181
155325
|
__privateAdd(this, _resolvedMargins, __runInitializers(_init78, 60, this, null)), __runInitializers(_init78, 63, this);
|
|
154182
155326
|
__privateAdd(this, _previewWidgets, __runInitializers(_init78, 64, this, null)), __runInitializers(_init78, 67, this);
|
|
154183
155327
|
__publicField(this, "containerBounds", null);
|
|
@@ -154754,7 +155898,7 @@ _showGridLines = new WeakMap();
|
|
|
154754
155898
|
_layouts = new WeakMap();
|
|
154755
155899
|
_activeBreakpoint = new WeakMap();
|
|
154756
155900
|
_placeholderPosition = new WeakMap();
|
|
154757
|
-
|
|
155901
|
+
_metrics2 = new WeakMap();
|
|
154758
155902
|
_resolvedMargins = new WeakMap();
|
|
154759
155903
|
_previewWidgets = new WeakMap();
|
|
154760
155904
|
__decorateElement(_init78, 4, "widgets", _widgets_dec2, DeesDashboardgrid, _widgets2);
|
|
@@ -154769,7 +155913,7 @@ __decorateElement(_init78, 4, "showGridLines", _showGridLines_dec, DeesDashboard
|
|
|
154769
155913
|
__decorateElement(_init78, 4, "layouts", _layouts_dec, DeesDashboardgrid, _layouts);
|
|
154770
155914
|
__decorateElement(_init78, 4, "activeBreakpoint", _activeBreakpoint_dec, DeesDashboardgrid, _activeBreakpoint);
|
|
154771
155915
|
__decorateElement(_init78, 4, "placeholderPosition", _placeholderPosition_dec, DeesDashboardgrid, _placeholderPosition);
|
|
154772
|
-
__decorateElement(_init78, 4, "metrics",
|
|
155916
|
+
__decorateElement(_init78, 4, "metrics", _metrics_dec2, DeesDashboardgrid, _metrics2);
|
|
154773
155917
|
__decorateElement(_init78, 4, "resolvedMargins", _resolvedMargins_dec, DeesDashboardgrid, _resolvedMargins);
|
|
154774
155918
|
__decorateElement(_init78, 4, "previewWidgets", _previewWidgets_dec, DeesDashboardgrid, _previewWidgets);
|
|
154775
155919
|
DeesDashboardgrid = __decorateElement(_init78, 0, "DeesDashboardgrid", _DeesDashboardgrid_decorators, DeesDashboardgrid);
|
|
@@ -157504,7 +158648,7 @@ init_group_runtime();
|
|
|
157504
158648
|
// ts_web/00_commitinfo_data.ts
|
|
157505
158649
|
var commitinfo = {
|
|
157506
158650
|
name: "@design.estate/dees-catalog",
|
|
157507
|
-
version: "3.
|
|
158651
|
+
version: "3.36.0",
|
|
157508
158652
|
description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
|
|
157509
158653
|
};
|
|
157510
158654
|
export {
|
|
@@ -159407,4 +160551,4 @@ ibantools/jsnext/ibantools.js:
|
|
|
159407
160551
|
* @preferred
|
|
159408
160552
|
*)
|
|
159409
160553
|
*/
|
|
159410
|
-
//# sourceMappingURL=bundle-
|
|
160554
|
+
//# sourceMappingURL=bundle-1768337007500.js.map
|