@design.estate/dees-catalog 3.36.0 → 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.
@@ -53587,26 +53587,26 @@ var init_fontawesome_svg_core = __esm({
53587
53587
  }
53588
53588
  };
53589
53589
  parse7 = {
53590
- icon: function icon(_icon2) {
53591
- if (_icon2 === null) {
53590
+ icon: function icon(_icon3) {
53591
+ if (_icon3 === null) {
53592
53592
  return null;
53593
53593
  }
53594
- if (_typeof(_icon2) === "object" && _icon2.prefix && _icon2.iconName) {
53594
+ if (_typeof(_icon3) === "object" && _icon3.prefix && _icon3.iconName) {
53595
53595
  return {
53596
- prefix: _icon2.prefix,
53597
- iconName: byAlias(_icon2.prefix, _icon2.iconName) || _icon2.iconName
53596
+ prefix: _icon3.prefix,
53597
+ iconName: byAlias(_icon3.prefix, _icon3.iconName) || _icon3.iconName
53598
53598
  };
53599
53599
  }
53600
- if (Array.isArray(_icon2) && _icon2.length === 2) {
53601
- var iconName = _icon2[1].indexOf("fa-") === 0 ? _icon2[1].slice(3) : _icon2[1];
53602
- var prefix4 = getCanonicalPrefix(_icon2[0]);
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 _icon2 === "string" && (_icon2.indexOf("".concat(config2.cssPrefix, "-")) > -1 || _icon2.match(ICON_SELECTION_SYNTAX_PATTERN))) {
53609
- var canonicalIcon = getCanonicalIcon(_icon2.split(" "), {
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 _icon2 === "string") {
53617
+ if (typeof _icon3 === "string") {
53618
53618
  var _prefix = getDefaultUsablePrefix();
53619
53619
  return {
53620
53620
  prefix: _prefix,
53621
- iconName: byAlias(_prefix, _icon2) || _icon2
53621
+ iconName: byAlias(_prefix, _icon3) || _icon3
53622
53622
  };
53623
53623
  }
53624
53624
  }
@@ -113576,7 +113576,49 @@ var generateCpuCores = (count2) => {
113576
113576
  }));
113577
113577
  };
113578
113578
  var demoFunc7 = () => {
113579
- 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 </div>\n \n <script>\n // Cleanup live updates on page unload\n window.addEventListener('beforeunload', () => {\n if ((window as any).liveUpdateInterval) {\n clearInterval((window as any).liveUpdateInterval);\n }\n });\n <\/script>\n </dees-demowrapper>\n "])), i`
113579
+ 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=", `
113580
+ ></dees-statsgrid>
113581
+
113582
+ <div class="tile-config">
113583
+ <div class="config-section">
113584
+ <div class="config-title">Partition Tile Properties</div>
113585
+ <div class="config-description">
113586
+ <ul style="margin: 8px 0; padding-left: 20px;">
113587
+ <li><strong>partitionData.used:</strong> Used space in bytes (auto-formatted)</li>
113588
+ <li><strong>partitionData.total:</strong> Total capacity in bytes</li>
113589
+ <li><strong>partitionData.filesystem:</strong> Filesystem type (ext4, xfs, ntfs)</li>
113590
+ <li><strong>partitionData.mountPoint:</strong> Mount point path (optional)</li>
113591
+ </ul>
113592
+ Color thresholds: Normal (&lt;75%), Warning (75-90%), Critical (&gt;90%)
113593
+ </div>
113594
+ </div>
113595
+ <div class="config-section">
113596
+ <div class="config-title">Disk Tile Properties</div>
113597
+ <div class="config-description">
113598
+ <ul style="margin: 8px 0; padding-left: 20px;">
113599
+ <li><strong>diskData.capacity:</strong> Total capacity in bytes</li>
113600
+ <li><strong>diskData.model:</strong> Disk model name (optional)</li>
113601
+ <li><strong>diskData.type:</strong> Disk type: 'ssd', 'hdd', or 'nvme'</li>
113602
+ <li><strong>diskData.iops:</strong> Read/write IOPS (optional)</li>
113603
+ <li><strong>diskData.health:</strong> Health percentage 0-100 (optional)</li>
113604
+ </ul>
113605
+ Health thresholds: Good (70-100%), Warning (30-70%), Critical (&lt;30%)
113606
+ </div>
113607
+ </div>
113608
+ </div>
113609
+ </dees-panel>
113610
+ </div>
113611
+
113612
+ <script>
113613
+ // Cleanup live updates on page unload
113614
+ window.addEventListener('beforeunload', () => {
113615
+ if ((window as any).liveUpdateInterval) {
113616
+ clearInterval((window as any).liveUpdateInterval);
113617
+ }
113618
+ });
113619
+ <\/script>
113620
+ </dees-demowrapper>
113621
+ `])), i`
113580
113622
  .demo-container {
113581
113623
  display: flex;
113582
113624
  flex-direction: column;
@@ -114072,7 +114114,108 @@ html\`
114072
114114
  }
114073
114115
  ]}
114074
114116
  ></dees-statsgrid>
114075
- \`;`);
114117
+ \`;`, "7. Disk & Storage Tiles", "Partition and physical disk visualization tiles", [
114118
+ {
114119
+ id: "root-partition",
114120
+ title: "Root Partition",
114121
+ value: 0,
114122
+ type: "partition",
114123
+ icon: "lucide:folder-root",
114124
+ partitionData: {
114125
+ used: 698341425152,
114126
+ // ~650 GB
114127
+ total: 1073741824e3,
114128
+ // ~1 TB
114129
+ filesystem: "ext4",
114130
+ mountPoint: "/"
114131
+ }
114132
+ },
114133
+ {
114134
+ id: "home-partition",
114135
+ title: "Home Partition",
114136
+ value: 0,
114137
+ type: "partition",
114138
+ icon: "lucide:home",
114139
+ partitionData: {
114140
+ used: 214748364800,
114141
+ // ~200 GB
114142
+ total: 536870912e3,
114143
+ // ~500 GB
114144
+ filesystem: "ext4",
114145
+ mountPoint: "/home"
114146
+ }
114147
+ },
114148
+ {
114149
+ id: "data-partition",
114150
+ title: "Data Partition",
114151
+ value: 0,
114152
+ type: "partition",
114153
+ icon: "lucide:database",
114154
+ partitionData: {
114155
+ used: 1932735283200,
114156
+ // ~1.8 TB (90% - critical)
114157
+ total: 2147483648e3,
114158
+ // ~2 TB
114159
+ filesystem: "xfs",
114160
+ mountPoint: "/data"
114161
+ }
114162
+ },
114163
+ {
114164
+ id: "nvme-ssd",
114165
+ title: "Primary NVMe",
114166
+ value: 0,
114167
+ type: "disk",
114168
+ icon: "lucide:hard-drive",
114169
+ columnSpan: 2,
114170
+ diskData: {
114171
+ capacity: 2e12,
114172
+ // 2 TB
114173
+ model: "Samsung 990 Pro",
114174
+ type: "nvme",
114175
+ iops: {
114176
+ read: 7450,
114177
+ write: 6900
114178
+ },
114179
+ health: 98
114180
+ }
114181
+ },
114182
+ {
114183
+ id: "sata-ssd",
114184
+ title: "Secondary SSD",
114185
+ value: 0,
114186
+ type: "disk",
114187
+ icon: "lucide:hard-drive",
114188
+ diskData: {
114189
+ capacity: 1e12,
114190
+ // 1 TB
114191
+ model: "Crucial MX500",
114192
+ type: "ssd",
114193
+ iops: {
114194
+ read: 560,
114195
+ write: 510
114196
+ },
114197
+ health: 85
114198
+ }
114199
+ },
114200
+ {
114201
+ id: "hdd-storage",
114202
+ title: "Backup HDD",
114203
+ value: 0,
114204
+ type: "disk",
114205
+ icon: "lucide:archive",
114206
+ diskData: {
114207
+ capacity: 8e12,
114208
+ // 8 TB
114209
+ model: "Seagate IronWolf",
114210
+ type: "hdd",
114211
+ iops: {
114212
+ read: 210,
114213
+ write: 195
114214
+ },
114215
+ health: 42
114216
+ }
114217
+ }
114218
+ ], 280, 16);
114076
114219
  };
114077
114220
 
114078
114221
  // ts_web/elements/00group-input/dees-input-base/dees-input-base.ts
@@ -127643,54 +127786,94 @@ var demoFunc26 = () => b2`
127643
127786
  <dees-panel .title=${"3. Buttons with Icons"} .subtitle=${"Combining icons with text for enhanced visual communication"}>
127644
127787
  <div class="icon-row">
127645
127788
  <dees-button>
127646
- <dees-icon iconFA="faPlus"></dees-icon>
127789
+ <dees-icon icon="fa:plus"></dees-icon>
127647
127790
  Add Item
127648
127791
  </dees-button>
127649
127792
  <dees-button type="destructive">
127650
- <dees-icon iconFA="faTrash"></dees-icon>
127793
+ <dees-icon icon="fa:trash"></dees-icon>
127651
127794
  Delete
127652
127795
  </dees-button>
127653
127796
  <dees-button type="outline">
127654
- <dees-icon iconFA="faDownload"></dees-icon>
127797
+ <dees-icon icon="lucide:Download"></dees-icon>
127655
127798
  Download
127656
127799
  </dees-button>
127657
127800
  </div>
127658
-
127801
+
127659
127802
  <div class="icon-row">
127660
127803
  <dees-button type="secondary" size="sm">
127661
- <dees-icon iconFA="faCog"></dees-icon>
127804
+ <dees-icon icon="fa:gear"></dees-icon>
127662
127805
  Settings
127663
127806
  </dees-button>
127664
127807
  <dees-button type="ghost">
127665
- <dees-icon iconFA="faChevronLeft"></dees-icon>
127808
+ <dees-icon icon="fa:caretLeft"></dees-icon>
127666
127809
  Back
127667
127810
  </dees-button>
127668
127811
  <dees-button type="ghost">
127669
127812
  Next
127670
- <dees-icon iconFA="faChevronRight"></dees-icon>
127813
+ <dees-icon icon="fa:caretRight"></dees-icon>
127671
127814
  </dees-button>
127672
127815
  </div>
127673
-
127816
+
127674
127817
  <div class="icon-row">
127675
127818
  <dees-button size="icon" type="default">
127676
- <dees-icon iconFA="faPlus"></dees-icon>
127819
+ <dees-icon icon="fa:plus"></dees-icon>
127677
127820
  </dees-button>
127678
127821
  <dees-button size="icon" type="secondary">
127679
- <dees-icon iconFA="faCog"></dees-icon>
127822
+ <dees-icon icon="fa:gear"></dees-icon>
127680
127823
  </dees-button>
127681
127824
  <dees-button size="icon" type="outline">
127682
- <dees-icon iconFA="faSearch"></dees-icon>
127825
+ <dees-icon icon="lucide:Search"></dees-icon>
127683
127826
  </dees-button>
127684
127827
  <dees-button size="icon" type="ghost">
127685
- <dees-icon iconFA="faEllipsisV"></dees-icon>
127828
+ <dees-icon icon="lucide:MoreVertical"></dees-icon>
127686
127829
  </dees-button>
127687
127830
  <dees-button size="icon" type="destructive">
127688
- <dees-icon iconFA="faTrash"></dees-icon>
127831
+ <dees-icon icon="fa:trash"></dees-icon>
127689
127832
  </dees-button>
127690
127833
  </div>
127691
127834
  </dees-panel>
127692
127835
  </dees-demowrapper>
127693
-
127836
+
127837
+ <dees-demowrapper .runAfterRender=${async (elementArg) => {
127838
+ const buttons = elementArg.querySelectorAll("dees-button");
127839
+ buttons.forEach((button) => {
127840
+ button.addEventListener("clicked", () => {
127841
+ const icon3 = button.getAttribute("icon") || "none";
127842
+ const position3 = button.getAttribute("iconPosition") || "left";
127843
+ console.log(`Icon property button: icon=${icon3}, position=${position3}`);
127844
+ });
127845
+ });
127846
+ }}>
127847
+ <dees-panel .title=${"4. Icons via Property"} .subtitle=${"Simplified icon syntax using the icon property"}>
127848
+ <div class="icon-row">
127849
+ <dees-button icon="fa:plus">Add Item</dees-button>
127850
+ <dees-button type="destructive" icon="fa:trash">Delete</dees-button>
127851
+ <dees-button type="outline" icon="lucide:Download">Download</dees-button>
127852
+ </div>
127853
+
127854
+ <div class="icon-row">
127855
+ <dees-button type="secondary" size="sm" icon="fa:gear">Settings</dees-button>
127856
+ <dees-button type="ghost" icon="fa:caretLeft">Back</dees-button>
127857
+ <dees-button type="ghost" icon="fa:caretRight" iconPosition="right">Next</dees-button>
127858
+ </div>
127859
+
127860
+ <div class="icon-row">
127861
+ <dees-button size="icon" type="default" icon="fa:plus"></dees-button>
127862
+ <dees-button size="icon" type="secondary" icon="lucide:Settings"></dees-button>
127863
+ <dees-button size="icon" type="outline" icon="lucide:Search"></dees-button>
127864
+ <dees-button size="icon" type="ghost" icon="lucide:MoreVertical"></dees-button>
127865
+ <dees-button size="icon" type="destructive" icon="fa:trash"></dees-button>
127866
+ </div>
127867
+
127868
+ <div style="margin-top: 16px;">
127869
+ <div class="code-snippet">
127870
+ &lt;dees-button icon="fa:plus"&gt;Add Item&lt;/dees-button&gt;<br>
127871
+ &lt;dees-button icon="fa:caretRight" iconPosition="right"&gt;Next&lt;/dees-button&gt;
127872
+ </div>
127873
+ </div>
127874
+ </dees-panel>
127875
+ </dees-demowrapper>
127876
+
127694
127877
  <dees-demowrapper .runAfterRender=${async (elementArg) => {
127695
127878
  const pendingButton = elementArg.querySelector('dees-button[status="pending"]');
127696
127879
  const successButton = elementArg.querySelector('dees-button[status="success"]');
@@ -127711,7 +127894,7 @@ var demoFunc26 = () => b2`
127711
127894
  });
127712
127895
  }
127713
127896
  }}>
127714
- <dees-panel .title=${"4. Button States"} .subtitle=${"Different states to indicate button status and loading conditions"}>
127897
+ <dees-panel .title=${"5. Button States"} .subtitle=${"Different states to indicate button status and loading conditions"}>
127715
127898
  <div class="button-group">
127716
127899
  <dees-button status="normal">Normal</dees-button>
127717
127900
  <dees-button status="pending">Processing...</dees-button>
@@ -127751,7 +127934,7 @@ var demoFunc26 = () => b2`
127751
127934
  });
127752
127935
  }
127753
127936
  }}>
127754
- <dees-panel .title=${"5. Event Handling"} .subtitle=${"Interactive examples with click event handling"}>
127937
+ <dees-panel .title=${"6. Event Handling"} .subtitle=${"Interactive examples with click event handling"}>
127755
127938
  <div class="button-group">
127756
127939
  <dees-button>Click Me</dees-button>
127757
127940
  <dees-button type="secondary" .eventDetailData=${"custom-data-123"}>
@@ -127787,7 +127970,7 @@ var demoFunc26 = () => b2`
127787
127970
  });
127788
127971
  }
127789
127972
  }}>
127790
- <dees-panel .title=${"6. Form Integration"} .subtitle=${"Buttons working within forms with automatic spacing"}>
127973
+ <dees-panel .title=${"7. Form Integration"} .subtitle=${"Buttons working within forms with automatic spacing"}>
127791
127974
  <dees-form>
127792
127975
  <dees-input-text label="Name" key="name" required></dees-input-text>
127793
127976
  <dees-input-text label="Email" key="email" type="email" required></dees-input-text>
@@ -127813,7 +127996,7 @@ var demoFunc26 = () => b2`
127813
127996
  }
127814
127997
  });
127815
127998
  }}>
127816
- <dees-panel .title=${"7. Backward Compatibility"} .subtitle=${"Old button types are automatically mapped to new variants"}>
127999
+ <dees-panel .title=${"8. Backward Compatibility"} .subtitle=${"Old button types are automatically mapped to new variants"}>
127817
128000
  <div class="button-group">
127818
128001
  <dees-button type="normal">Normal → Default</dees-button>
127819
128002
  <dees-button type="highlighted">Highlighted → Destructive</dees-button>
@@ -127851,36 +128034,36 @@ var demoFunc26 = () => b2`
127851
128034
  });
127852
128035
  }
127853
128036
  }}>
127854
- <dees-panel .title=${"8. Advanced Examples"} .subtitle=${"Complex button configurations and real-world use cases"}>
128037
+ <dees-panel .title=${"9. Advanced Examples"} .subtitle=${"Complex button configurations and real-world use cases"}>
127855
128038
  <div class="horizontal-group">
127856
128039
  <div class="vertical-group">
127857
128040
  <h4 style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500;">Action Group</h4>
127858
128041
  <dees-button type="default" size="sm">
127859
- <dees-icon iconFA="faSave"></dees-icon>
128042
+ <dees-icon icon="lucide:Save"></dees-icon>
127860
128043
  Save Changes
127861
128044
  </dees-button>
127862
128045
  <dees-button type="secondary" size="sm">
127863
- <dees-icon iconFA="faUndo"></dees-icon>
128046
+ <dees-icon icon="lucide:Undo2"></dees-icon>
127864
128047
  Discard
127865
128048
  </dees-button>
127866
128049
  <dees-button type="ghost" size="sm">
127867
- <dees-icon iconFA="faQuestionCircle"></dees-icon>
128050
+ <dees-icon icon="lucide:HelpCircle"></dees-icon>
127868
128051
  Help
127869
128052
  </dees-button>
127870
128053
  </div>
127871
-
128054
+
127872
128055
  <div class="vertical-group">
127873
128056
  <h4 style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500;">Danger Zone</h4>
127874
128057
  <dees-button type="destructive" size="sm">
127875
- <dees-icon iconFA="faTrash"></dees-icon>
128058
+ <dees-icon icon="fa:trash"></dees-icon>
127876
128059
  Delete Account
127877
128060
  </dees-button>
127878
128061
  <dees-button type="outline" size="sm">
127879
- <dees-icon iconFA="faArchive"></dees-icon>
128062
+ <dees-icon icon="lucide:Archive"></dees-icon>
127880
128063
  Archive Data
127881
128064
  </dees-button>
127882
128065
  <dees-button type="ghost" size="sm" disabled>
127883
- <dees-icon iconFA="faBan"></dees-icon>
128066
+ <dees-icon icon="lucide:Ban"></dees-icon>
127884
128067
  Not Available
127885
128068
  </dees-button>
127886
128069
  </div>
@@ -127889,8 +128072,7 @@ var demoFunc26 = () => b2`
127889
128072
  <div style="margin-top: 24px;">
127890
128073
  <h4 style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500;">Code Example:</h4>
127891
128074
  <div class="code-snippet">
127892
- &lt;dees-button type="default" size="sm" @clicked="\${handleClick}"&gt;<br>
127893
- &nbsp;&nbsp;&lt;dees-icon iconFA="faSave"&gt;&lt;/dees-icon&gt;<br>
128075
+ &lt;dees-button type="default" size="sm" icon="lucide:Save" @clicked="\${handleClick}"&gt;<br>
127894
128076
  &nbsp;&nbsp;Save Changes<br>
127895
128077
  &lt;/dees-button&gt;
127896
128078
  </div>
@@ -127904,7 +128086,7 @@ var demoFunc26 = () => b2`
127904
128086
  init_dist_ts26();
127905
128087
  init_dist_ts25();
127906
128088
  init_theme();
127907
- 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;
128089
+ 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;
127908
128090
  _DeesButton_decorators = [t4("dees-button")];
127909
128091
  var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
127910
128092
  reflect: true,
@@ -127925,7 +128107,7 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
127925
128107
  })], _insideForm_dec = [n5({
127926
128108
  type: Boolean,
127927
128109
  reflect: true
127928
- })], _a33) {
128110
+ })], _icon_dec2 = [n5({ type: String, reflect: true })], _iconPosition_dec = [n5({ type: String, reflect: true })], _a33) {
127929
128111
  constructor() {
127930
128112
  super();
127931
128113
  __privateAdd(this, _text2, __runInitializers(_init31, 8, this)), __runInitializers(_init31, 11, this);
@@ -127936,6 +128118,8 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
127936
128118
  __privateAdd(this, _size2, __runInitializers(_init31, 28, this, "default")), __runInitializers(_init31, 31, this);
127937
128119
  __privateAdd(this, _status2, __runInitializers(_init31, 32, this, "normal")), __runInitializers(_init31, 35, this);
127938
128120
  __privateAdd(this, _insideForm, __runInitializers(_init31, 36, this, false)), __runInitializers(_init31, 39, this);
128121
+ __privateAdd(this, _icon2, __runInitializers(_init31, 40, this)), __runInitializers(_init31, 43, this);
128122
+ __privateAdd(this, _iconPosition, __runInitializers(_init31, 44, this, "left")), __runInitializers(_init31, 47, this);
127939
128123
  }
127940
128124
  async connectedCallback() {
127941
128125
  await super.connectedCallback();
@@ -127943,6 +128127,33 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
127943
128127
  this.insideForm = true;
127944
128128
  }
127945
128129
  }
128130
+ /**
128131
+ * Extracts icon and text from light DOM and sets properties
128132
+ */
128133
+ extractLightDom() {
128134
+ const iconElement = this.querySelector("dees-icon");
128135
+ const textContent = Array.from(this.childNodes).filter((node2) => node2.nodeType === Node.TEXT_NODE).map((node2) => node2.textContent?.trim()).filter(Boolean).join(" ");
128136
+ if (textContent && !this.text) {
128137
+ this.text = textContent;
128138
+ }
128139
+ if (iconElement) {
128140
+ const iconValue = iconElement.icon || iconElement.getAttribute("icon") || (iconElement.iconFA ? `fa:${iconElement.iconFA}` : null);
128141
+ if (iconValue) {
128142
+ const children2 = Array.from(this.childNodes);
128143
+ const iconIndex = children2.indexOf(iconElement);
128144
+ const textNodes = children2.filter(
128145
+ (node2) => node2.nodeType === Node.TEXT_NODE && node2.textContent?.trim()
128146
+ );
128147
+ if (textNodes.length > 0) {
128148
+ const firstTextIndex = children2.indexOf(textNodes[0]);
128149
+ this.iconPosition = iconIndex < firstTextIndex ? "left" : "right";
128150
+ }
128151
+ this.icon = iconValue;
128152
+ }
128153
+ iconElement.remove();
128154
+ }
128155
+ this.innerHTML = "";
128156
+ }
127946
128157
  render() {
127947
128158
  const typeMap = {
127948
128159
  "normal": "default",
@@ -127953,19 +128164,24 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
127953
128164
  };
127954
128165
  const actualType = typeMap[this.type] || this.type;
127955
128166
  const actualSize = this.type === "big" ? "lg" : this.size;
128167
+ const leftIcon = this.iconPosition === "left" && this.icon ? b2`<dees-icon .icon=${this.icon}></dees-icon>` : "";
128168
+ const rightIcon = this.iconPosition === "right" && this.icon ? b2`<dees-icon .icon=${this.icon}></dees-icon>` : "";
128169
+ const isIconOnly = actualSize === "icon" && this.icon;
127956
128170
  return b2`
127957
128171
  <div
127958
128172
  class="button ${this.isHidden ? "hidden" : ""} ${actualType} size-${actualSize} ${this.status} ${this.disabled ? "disabled" : ""}"
127959
128173
  @click="${this.dispatchClick}"
127960
128174
  >
127961
128175
  ${this.status === "normal" ? b2`` : b2`
127962
- <dees-spinner
127963
- .bnw=${true}
128176
+ <dees-spinner
128177
+ .bnw=${true}
127964
128178
  status="${this.status}"
127965
128179
  size="${actualSize === "sm" ? 14 : actualSize === "lg" ? 18 : 16}"
127966
128180
  ></dees-spinner>
127967
128181
  `}
127968
- <div class="textbox">${this.text || b2`<slot>Button</slot>`}</div>
128182
+ ${leftIcon}
128183
+ ${isIconOnly ? "" : b2`<div class="textbox">${this.text || "Button"}</div>`}
128184
+ ${rightIcon}
127969
128185
  </div>
127970
128186
  `;
127971
128187
  }
@@ -127983,6 +128199,7 @@ var DeesButton = class extends (_a33 = DeesElement, _text_dec2 = [n5({
127983
128199
  );
127984
128200
  }
127985
128201
  async firstUpdated() {
128202
+ this.extractLightDom();
127986
128203
  }
127987
128204
  };
127988
128205
  _init31 = __decoratorStart(_a33);
@@ -127994,6 +128211,8 @@ _type3 = new WeakMap();
127994
128211
  _size2 = new WeakMap();
127995
128212
  _status2 = new WeakMap();
127996
128213
  _insideForm = new WeakMap();
128214
+ _icon2 = new WeakMap();
128215
+ _iconPosition = new WeakMap();
127997
128216
  __decorateElement(_init31, 4, "text", _text_dec2, DeesButton, _text2);
127998
128217
  __decorateElement(_init31, 4, "eventDetailData", _eventDetailData_dec, DeesButton, _eventDetailData);
127999
128218
  __decorateElement(_init31, 4, "disabled", _disabled_dec4, DeesButton, _disabled4);
@@ -128002,6 +128221,8 @@ __decorateElement(_init31, 4, "type", _type_dec3, DeesButton, _type3);
128002
128221
  __decorateElement(_init31, 4, "size", _size_dec2, DeesButton, _size2);
128003
128222
  __decorateElement(_init31, 4, "status", _status_dec2, DeesButton, _status2);
128004
128223
  __decorateElement(_init31, 4, "insideForm", _insideForm_dec, DeesButton, _insideForm);
128224
+ __decorateElement(_init31, 4, "icon", _icon_dec2, DeesButton, _icon2);
128225
+ __decorateElement(_init31, 4, "iconPosition", _iconPosition_dec, DeesButton, _iconPosition);
128005
128226
  DeesButton = __decorateElement(_init31, 0, "DeesButton", _DeesButton_decorators, DeesButton);
128006
128227
  __publicField(DeesButton, "demo", demoFunc26);
128007
128228
  __publicField(DeesButton, "demoGroup", "Button");
@@ -128265,6 +128486,12 @@ __publicField(DeesButton, "styles", [
128265
128486
  height: 18px;
128266
128487
  }
128267
128488
 
128489
+ /* Text alignment */
128490
+ .textbox {
128491
+ display: flex;
128492
+ align-items: center;
128493
+ }
128494
+
128268
128495
  `
128269
128496
  ]);
128270
128497
  __runInitializers(_init31, 1, DeesButton);
@@ -128367,6 +128594,10 @@ var DeesStatsGrid = class extends (_a34 = DeesElement, _tiles_dec = [n5({ type:
128367
128594
  return this.renderMultiPercentage(tile);
128368
128595
  case "cpuCores":
128369
128596
  return this.renderCpuCores(tile);
128597
+ case "partition":
128598
+ return this.renderPartition(tile);
128599
+ case "disk":
128600
+ return this.renderDisk(tile);
128370
128601
  case "text":
128371
128602
  return b2`
128372
128603
  <div class="text-value" style="${tile.color ? `color: ${tile.color}` : ""}">
@@ -128552,6 +128783,103 @@ var DeesStatsGrid = class extends (_a34 = DeesElement, _tiles_dec = [n5({ type:
128552
128783
  </div>
128553
128784
  `;
128554
128785
  }
128786
+ formatBytes(bytes) {
128787
+ if (bytes === 0) return "0 B";
128788
+ const k4 = 1024;
128789
+ const sizes = ["B", "KB", "MB", "GB", "TB", "PB"];
128790
+ const i11 = Math.floor(Math.log(bytes) / Math.log(k4));
128791
+ return parseFloat((bytes / Math.pow(k4, i11)).toFixed(1)) + " " + sizes[i11];
128792
+ }
128793
+ renderPartition(tile) {
128794
+ if (!tile.partitionData) {
128795
+ return b2`<div class="tile-value">${tile.value}</div>`;
128796
+ }
128797
+ const { used, total, filesystem, mountPoint } = tile.partitionData;
128798
+ const percentage = Math.min(100, Math.max(0, used / total * 100));
128799
+ const free = total - used;
128800
+ const getColorClass = () => {
128801
+ if (percentage >= 90) return "critical";
128802
+ if (percentage >= 75) return "warning";
128803
+ return "";
128804
+ };
128805
+ return b2`
128806
+ <div class="partition-wrapper">
128807
+ <div class="partition-header">
128808
+ <span class="partition-percentage">${Math.round(percentage)}%</span>
128809
+ </div>
128810
+ <div class="partition-bar">
128811
+ <div
128812
+ class="partition-bar-fill ${getColorClass()}"
128813
+ style="width: ${percentage}%"
128814
+ ></div>
128815
+ </div>
128816
+ <div class="partition-stats">
128817
+ <div class="partition-stat">
128818
+ <span class="partition-stat-label">Used</span>
128819
+ <span class="partition-stat-value">${this.formatBytes(used)}</span>
128820
+ </div>
128821
+ <div class="partition-stat">
128822
+ <span class="partition-stat-label">Free</span>
128823
+ <span class="partition-stat-value">${this.formatBytes(free)}</span>
128824
+ </div>
128825
+ </div>
128826
+ <div class="partition-meta">
128827
+ <span class="partition-filesystem">${filesystem}</span>
128828
+ ${mountPoint ? b2`<span class="partition-mountpoint">${mountPoint}</span>` : ""}
128829
+ </div>
128830
+ </div>
128831
+ `;
128832
+ }
128833
+ renderDisk(tile) {
128834
+ if (!tile.diskData) {
128835
+ return b2`<div class="tile-value">${tile.value}</div>`;
128836
+ }
128837
+ const { capacity, model, type: type5, iops, health } = tile.diskData;
128838
+ const getHealthClass = (value2) => {
128839
+ if (value2 >= 70) return "good";
128840
+ if (value2 >= 30) return "warning";
128841
+ return "critical";
128842
+ };
128843
+ return b2`
128844
+ <div class="disk-wrapper">
128845
+ <div class="disk-capacity">${this.formatBytes(capacity)}</div>
128846
+ ${model || type5 ? b2`
128847
+ <div class="disk-model">
128848
+ ${model ? b2`<span>${model}</span>` : ""}
128849
+ ${type5 ? b2`<span class="disk-type-badge">${type5}</span>` : ""}
128850
+ </div>
128851
+ ` : ""}
128852
+ <div class="disk-metrics">
128853
+ ${iops ? b2`
128854
+ <div class="disk-iops">
128855
+ <div class="disk-iops-item">
128856
+ <span class="disk-iops-label">Read</span>
128857
+ <span class="disk-iops-value">${iops.read.toLocaleString()}</span>
128858
+ </div>
128859
+ <div class="disk-iops-item">
128860
+ <span class="disk-iops-label">Write</span>
128861
+ <span class="disk-iops-value">${iops.write.toLocaleString()}</span>
128862
+ </div>
128863
+ </div>
128864
+ ` : ""}
128865
+ ${health !== void 0 ? b2`
128866
+ <div class="disk-health">
128867
+ <div class="disk-health-header">
128868
+ <span class="disk-health-label">Health</span>
128869
+ <span class="disk-health-value">${health}%</span>
128870
+ </div>
128871
+ <div class="disk-health-bar">
128872
+ <div
128873
+ class="disk-health-fill ${getHealthClass(health)}"
128874
+ style="width: ${health}%"
128875
+ ></div>
128876
+ </div>
128877
+ </div>
128878
+ ` : ""}
128879
+ </div>
128880
+ </div>
128881
+ `;
128882
+ }
128555
128883
  async handleGridAction(action) {
128556
128884
  if (action.action) {
128557
128885
  await action.action();
@@ -128985,6 +129313,219 @@ __publicField(DeesStatsGrid, "styles", [
128985
129313
  max-width: 100%;
128986
129314
  }
128987
129315
 
129316
+ /* Partition Styles */
129317
+ .partition-wrapper {
129318
+ width: 100%;
129319
+ display: flex;
129320
+ flex-direction: column;
129321
+ flex: 1;
129322
+ gap: 8px;
129323
+ }
129324
+
129325
+ .partition-header {
129326
+ display: flex;
129327
+ align-items: baseline;
129328
+ gap: 8px;
129329
+ }
129330
+
129331
+ .partition-percentage {
129332
+ font-size: var(--value-font-size);
129333
+ font-weight: 600;
129334
+ color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
129335
+ line-height: 1.1;
129336
+ letter-spacing: -0.025em;
129337
+ }
129338
+
129339
+ .partition-bar {
129340
+ width: 100%;
129341
+ height: 6px;
129342
+ background: ${cssManager.bdTheme("#e8e8e8", "#1a1a1a")};
129343
+ border-radius: 3px;
129344
+ overflow: hidden;
129345
+ }
129346
+
129347
+ .partition-bar-fill {
129348
+ height: 100%;
129349
+ background: ${cssManager.bdTheme("#333333", "#e0e0e0")};
129350
+ transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
129351
+ border-radius: 3px;
129352
+ }
129353
+
129354
+ .partition-bar-fill.warning {
129355
+ background: ${cssManager.bdTheme("hsl(45.4 93.4% 47.5%)", "hsl(45.4 93.4% 47.5%)")};
129356
+ }
129357
+
129358
+ .partition-bar-fill.critical {
129359
+ background: ${cssManager.bdTheme("hsl(0 84.2% 60.2%)", "hsl(0 84.2% 60.2%)")};
129360
+ }
129361
+
129362
+ .partition-stats {
129363
+ display: flex;
129364
+ justify-content: space-between;
129365
+ align-items: center;
129366
+ margin-top: auto;
129367
+ }
129368
+
129369
+ .partition-stat {
129370
+ display: flex;
129371
+ flex-direction: column;
129372
+ gap: 2px;
129373
+ }
129374
+
129375
+ .partition-stat-label {
129376
+ font-size: 10px;
129377
+ font-weight: 500;
129378
+ color: ${cssManager.bdTheme("hsl(215.4 16.3% 56.9%)", "hsl(215 20.2% 55.1%)")};
129379
+ text-transform: uppercase;
129380
+ letter-spacing: 0.02em;
129381
+ }
129382
+
129383
+ .partition-stat-value {
129384
+ font-size: 13px;
129385
+ font-weight: 600;
129386
+ color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
129387
+ letter-spacing: -0.01em;
129388
+ }
129389
+
129390
+ .partition-meta {
129391
+ display: flex;
129392
+ align-items: center;
129393
+ gap: 6px;
129394
+ margin-top: 4px;
129395
+ }
129396
+
129397
+ .partition-filesystem {
129398
+ font-size: 11px;
129399
+ font-weight: 500;
129400
+ color: ${cssManager.bdTheme("hsl(215.4 16.3% 46.9%)", "hsl(215 20.2% 65.1%)")};
129401
+ background: ${cssManager.bdTheme("hsl(210 40% 96.1%)", "hsl(215 20.2% 16.8%)")};
129402
+ padding: 2px 6px;
129403
+ border-radius: 3px;
129404
+ }
129405
+
129406
+ .partition-mountpoint {
129407
+ font-size: 11px;
129408
+ color: ${cssManager.bdTheme("hsl(215.4 16.3% 56.9%)", "hsl(215 20.2% 55.1%)")};
129409
+ }
129410
+
129411
+ /* Disk Styles */
129412
+ .disk-wrapper {
129413
+ width: 100%;
129414
+ display: flex;
129415
+ flex-direction: column;
129416
+ flex: 1;
129417
+ gap: 8px;
129418
+ }
129419
+
129420
+ .disk-capacity {
129421
+ font-size: var(--value-font-size);
129422
+ font-weight: 600;
129423
+ color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
129424
+ line-height: 1.1;
129425
+ letter-spacing: -0.025em;
129426
+ }
129427
+
129428
+ .disk-model {
129429
+ font-size: 12px;
129430
+ color: ${cssManager.bdTheme("hsl(215.4 16.3% 46.9%)", "hsl(215 20.2% 65.1%)")};
129431
+ display: flex;
129432
+ align-items: center;
129433
+ gap: 6px;
129434
+ }
129435
+
129436
+ .disk-type-badge {
129437
+ font-size: 10px;
129438
+ font-weight: 600;
129439
+ text-transform: uppercase;
129440
+ color: ${cssManager.bdTheme("hsl(215.4 16.3% 46.9%)", "hsl(215 20.2% 65.1%)")};
129441
+ background: ${cssManager.bdTheme("hsl(210 40% 96.1%)", "hsl(215 20.2% 16.8%)")};
129442
+ padding: 2px 6px;
129443
+ border-radius: 3px;
129444
+ }
129445
+
129446
+ .disk-metrics {
129447
+ display: flex;
129448
+ flex-direction: column;
129449
+ gap: 8px;
129450
+ margin-top: auto;
129451
+ }
129452
+
129453
+ .disk-iops {
129454
+ display: flex;
129455
+ align-items: center;
129456
+ gap: 12px;
129457
+ }
129458
+
129459
+ .disk-iops-item {
129460
+ display: flex;
129461
+ align-items: baseline;
129462
+ gap: 4px;
129463
+ }
129464
+
129465
+ .disk-iops-label {
129466
+ font-size: 10px;
129467
+ font-weight: 500;
129468
+ color: ${cssManager.bdTheme("hsl(215.4 16.3% 56.9%)", "hsl(215 20.2% 55.1%)")};
129469
+ text-transform: uppercase;
129470
+ }
129471
+
129472
+ .disk-iops-value {
129473
+ font-size: 13px;
129474
+ font-weight: 600;
129475
+ color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
129476
+ }
129477
+
129478
+ .disk-health {
129479
+ display: flex;
129480
+ flex-direction: column;
129481
+ gap: 4px;
129482
+ }
129483
+
129484
+ .disk-health-header {
129485
+ display: flex;
129486
+ justify-content: space-between;
129487
+ align-items: baseline;
129488
+ }
129489
+
129490
+ .disk-health-label {
129491
+ font-size: 10px;
129492
+ font-weight: 500;
129493
+ color: ${cssManager.bdTheme("hsl(215.4 16.3% 56.9%)", "hsl(215 20.2% 55.1%)")};
129494
+ text-transform: uppercase;
129495
+ }
129496
+
129497
+ .disk-health-value {
129498
+ font-size: 12px;
129499
+ font-weight: 600;
129500
+ color: ${cssManager.bdTheme("hsl(215.3 25% 8.8%)", "hsl(210 40% 98%)")};
129501
+ }
129502
+
129503
+ .disk-health-bar {
129504
+ width: 100%;
129505
+ height: 4px;
129506
+ background: ${cssManager.bdTheme("#e8e8e8", "#1a1a1a")};
129507
+ border-radius: 2px;
129508
+ overflow: hidden;
129509
+ }
129510
+
129511
+ .disk-health-fill {
129512
+ height: 100%;
129513
+ transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
129514
+ border-radius: 2px;
129515
+ }
129516
+
129517
+ .disk-health-fill.good {
129518
+ background: ${cssManager.bdTheme("hsl(142.1 76.2% 36.3%)", "hsl(142.1 70.6% 45.3%)")};
129519
+ }
129520
+
129521
+ .disk-health-fill.warning {
129522
+ background: ${cssManager.bdTheme("hsl(45.4 93.4% 47.5%)", "hsl(45.4 93.4% 47.5%)")};
129523
+ }
129524
+
129525
+ .disk-health-fill.critical {
129526
+ background: ${cssManager.bdTheme("hsl(0 84.2% 60.2%)", "hsl(0 84.2% 60.2%)")};
129527
+ }
129528
+
128988
129529
  /* Trend Styles */
128989
129530
  .trend-container {
128990
129531
  width: 100%;