feat(statsgrid): integrate dees-tile component for enhanced tile structure and styling

This commit is contained in:
2026-04-03 11:59:34 +00:00
parent 6e5def5708
commit 24f96788d5
2 changed files with 25 additions and 32 deletions

View File

@@ -18,6 +18,7 @@ import '../../00group-utility/dees-icon/dees-icon.js';
import '../../00group-overlay/dees-contextmenu/dees-contextmenu.js';
import '../../00group-button/dees-button/dees-button.js';
import { themeDefaultStyles } from '../../00theme.js';
import '../../00group-layout/dees-tile/dees-tile.js';
declare global {
interface HTMLElementTagNameMap {
@@ -179,22 +180,12 @@ export class DeesStatsGrid extends DeesElement {
width: 100%;
}
/* Tile Base Styles */
.stats-tile {
background: ${cssManager.bdTheme('#ffffff', '#09090b')};
border: 1px solid ${cssManager.bdTheme('#e0e0e0', '#202020')};
border-radius: var(--border-radius);
padding: var(--tile-padding);
/* Tile Base Styles — frame provided by dees-tile, hover via ::part */
.stats-tile::part(outer) {
transition: all var(--transition-duration) ease;
cursor: default;
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
}
.stats-tile:hover {
background: ${cssManager.bdTheme('#fafafa', '#0d0d0d')};
.stats-tile:hover::part(outer) {
border-color: ${cssManager.bdTheme('#d0d0d0', '#2a2a2a')};
}
@@ -202,17 +193,18 @@ export class DeesStatsGrid extends DeesElement {
cursor: pointer;
}
.stats-tile.clickable:hover {
.stats-tile.clickable:hover::part(outer) {
transform: translateY(-1px);
box-shadow: 0 2px 6px ${cssManager.bdTheme('rgba(0,0,0,0.03)', 'rgba(0,0,0,0.15)')};
}
/* Tile Header */
/* Tile Header — slotted into dees-tile header */
.tile-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: var(--header-spacing);
align-items: center;
padding: 0 12px;
height: 28px;
flex-shrink: 0;
}
@@ -232,12 +224,12 @@ export class DeesStatsGrid extends DeesElement {
flex-shrink: 0;
}
/* Tile Content */
/* Tile Content — slotted into dees-tile content area */
.tile-content {
min-height: var(--content-min-height);
display: flex;
flex-direction: column;
flex: 1;
padding: 12px;
min-height: var(--content-min-height);
}
.tile-value {
@@ -261,9 +253,10 @@ export class DeesStatsGrid extends DeesElement {
.tile-description {
font-size: var(--label-font-size);
color: ${cssManager.bdTheme('hsl(215.4 16.3% 56.9%)', 'hsl(215 20.2% 55.1%)')};
margin-top: var(--description-spacing);
letter-spacing: -0.01em;
flex-shrink: 0;
padding: 0 12px;
height: 24px;
line-height: 24px;
}
/* Gauge Styles */
@@ -882,27 +875,27 @@ export class DeesStatsGrid extends DeesElement {
const columnSpan = tile.columnSpan && tile.columnSpan > 1 ? tile.columnSpan : undefined;
return html`
<div
<dees-tile
class="stats-tile ${clickable ? 'clickable' : ''}"
style="${columnSpan ? `grid-column: span ${columnSpan}` : ''}"
@click=${clickable ? () => this.handleTileAction(tile.actions![0], tile) : undefined}
@contextmenu=${hasActions ? (e: MouseEvent) => this.showContextMenu(e, tile) : undefined}
>
<div class="tile-header">
<div slot="header" class="tile-header">
<h3 class="tile-title">${tile.title}</h3>
${tile.icon ? html`
<dees-icon class="tile-icon" .icon=${tile.icon} size="small"></dees-icon>
` : ''}
</div>
<div class="tile-content">
${this.renderTileContent(tile)}
</div>
${tile.description && tile.type !== 'trend' ? html`
<div class="tile-description">${tile.description}</div>
<div slot="footer" class="tile-description">${tile.description}</div>
` : ''}
</div>
</dees-tile>
`;
}