2 Commits
v2.8.0 ... main

Author SHA1 Message Date
9d1471a363 v2.9.0 2026-03-19 16:01:34 +00:00
6db2e3ff4f feat(app-store-view): add app details action to store cards 2026-03-19 16:01:34 +00:00
4 changed files with 62 additions and 12 deletions

View File

@@ -1,5 +1,12 @@
# Changelog
## 2026-03-19 - 2.9.0 - feat(app-store-view)
add app details action to store cards
- adds a new "View Details" button alongside the existing deploy action
- dispatches a bubbling "view-app" event with the selected app payload for parent handlers
- updates card action layout and button styling to support multiple actions
## 2026-03-18 - 2.8.0 - feat(elements)
add app store view component for browsing and deploying app templates

View File

@@ -1,6 +1,6 @@
{
"name": "@serve.zone/catalog",
"version": "2.8.0",
"version": "2.9.0",
"private": false,
"description": "UI component catalog for serve.zone",
"main": "dist_ts_web/index.js",

View File

@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@serve.zone/catalog',
version: '2.8.0',
version: '2.9.0',
description: 'UI component catalog for serve.zone'
}

View File

@@ -396,6 +396,34 @@ export class SzAppStoreView extends DeesElement {
height: 14px;
}
.details-button {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 7px 12px;
border-radius: 6px;
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: all 200ms ease;
border: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
background: transparent;
color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
white-space: nowrap;
flex-shrink: 0;
}
.details-button:hover {
border-color: ${cssManager.bdTheme('#d4d4d8', '#3f3f46')};
color: ${cssManager.bdTheme('#18181b', '#fafafa')};
}
.card-actions {
display: flex;
align-items: center;
gap: 8px;
}
.empty-state {
grid-column: 1 / -1;
padding: 64px 24px;
@@ -524,16 +552,21 @@ export class SzAppStoreView extends DeesElement {
<div class="app-description">${app.description}</div>
<div class="card-footer">
<span class="image-tag" title="${app.image}">${app.image}</span>
<button class="deploy-button" @click=${() => this.handleDeploy(app)}>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="20 12 20 22 4 22 4 12"></polyline>
<rect x="2" y="7" width="20" height="5"></rect>
<line x1="12" y1="22" x2="12" y2="7"></line>
<path d="M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z"></path>
<path d="M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z"></path>
</svg>
Deploy
</button>
<div class="card-actions">
<button class="details-button" @click=${() => this.handleViewDetails(app)}>
View Details
</button>
<button class="deploy-button" @click=${() => this.handleDeploy(app)}>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="20 12 20 22 4 22 4 12"></polyline>
<rect x="2" y="7" width="20" height="5"></rect>
<line x1="12" y1="22" x2="12" y2="7"></line>
<path d="M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z"></path>
<path d="M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z"></path>
</svg>
Deploy
</button>
</div>
</div>
</div>
`;
@@ -556,6 +589,16 @@ export class SzAppStoreView extends DeesElement {
return icons[name] || html`<span class="letter-fallback">?</span>`;
}
private handleViewDetails(app: IAppTemplate) {
this.dispatchEvent(
new CustomEvent('view-app', {
detail: { app },
bubbles: true,
composed: true,
})
);
}
private handleDeploy(app: IAppTemplate) {
this.dispatchEvent(
new CustomEvent('deploy-app', {