diff --git a/ts_web/elements/upladmin-monitor-list/upladmin-monitor-list.ts b/ts_web/elements/upladmin-monitor-list/upladmin-monitor-list.ts
index 9ebf029..1892924 100644
--- a/ts_web/elements/upladmin-monitor-list/upladmin-monitor-list.ts
+++ b/ts_web/elements/upladmin-monitor-list/upladmin-monitor-list.ts
@@ -128,6 +128,12 @@ export class UpladminMonitorList extends DeesElement {
box-shadow: 0 0 0 3px ${cssManager.bdTheme('rgba(59, 130, 246, 0.1)', 'rgba(96, 165, 250, 0.15)')};
}
+ @media (prefers-color-scheme: dark) {
+ .filter-select {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23a1a1aa' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E");
+ }
+ }
+
.table-container {
padding: 0;
}
@@ -189,20 +195,20 @@ export class UpladminMonitorList extends DeesElement {
.status-badge.initializing {
background: ${cssManager.bdTheme('rgba(107, 114, 128, 0.1)', 'rgba(107, 114, 128, 0.15)')};
- color: #6b7280;
- --icon-color: #6b7280;
+ color: ${cssManager.bdTheme('#6b7280', '#9ca3af')};
+ --icon-color: ${cssManager.bdTheme('#6b7280', '#9ca3af')};
}
.status-badge.error {
background: ${cssManager.bdTheme('rgba(220, 38, 38, 0.1)', 'rgba(220, 38, 38, 0.15)')};
- color: #dc2626;
- --icon-color: #dc2626;
+ color: ${cssManager.bdTheme('#dc2626', '#f87171')};
+ --icon-color: ${cssManager.bdTheme('#dc2626', '#f87171')};
}
.status-badge.paused {
background: ${cssManager.bdTheme('rgba(139, 92, 246, 0.1)', 'rgba(139, 92, 246, 0.15)')};
- color: #8b5cf6;
- --icon-color: #8b5cf6;
+ color: ${cssManager.bdTheme('#8b5cf6', '#a78bfa')};
+ --icon-color: ${cssManager.bdTheme('#8b5cf6', '#a78bfa')};
}
/* Status indicators for override and pause */
@@ -224,12 +230,12 @@ export class UpladminMonitorList extends DeesElement {
.status-indicator.override {
background: ${cssManager.bdTheme('rgba(234, 179, 8, 0.15)', 'rgba(234, 179, 8, 0.2)')};
- --icon-color: #eab308;
+ --icon-color: ${cssManager.bdTheme('#d97706', '#fbbf24')};
}
.status-indicator.paused {
background: ${cssManager.bdTheme('rgba(139, 92, 246, 0.15)', 'rgba(139, 92, 246, 0.2)')};
- --icon-color: #8b5cf6;
+ --icon-color: ${cssManager.bdTheme('#8b5cf6', '#a78bfa')};
}
.monitor-info {
diff --git a/ts_web/elements/upladmin-option-card/index.ts b/ts_web/elements/upladmin-option-card/index.ts
new file mode 100644
index 0000000..9fe5a37
--- /dev/null
+++ b/ts_web/elements/upladmin-option-card/index.ts
@@ -0,0 +1 @@
+export * from './upladmin-option-card.js';
diff --git a/ts_web/elements/upladmin-option-card/upladmin-option-card.demo.ts b/ts_web/elements/upladmin-option-card/upladmin-option-card.demo.ts
new file mode 100644
index 0000000..63056d4
--- /dev/null
+++ b/ts_web/elements/upladmin-option-card/upladmin-option-card.demo.ts
@@ -0,0 +1,118 @@
+import { html, css, cssManager } from '@design.estate/dees-element';
+import type { UpladminOptionCard } from './upladmin-option-card.js';
+
+export const demoFunc = () => html`
+
+
+
+
Severity Variants
+
+
+
+
+
+
+
+
+
+
Status Variants
+
+
+
+
+
+
+
+
+
+
+
+`;
diff --git a/ts_web/elements/upladmin-option-card/upladmin-option-card.ts b/ts_web/elements/upladmin-option-card/upladmin-option-card.ts
new file mode 100644
index 0000000..11920bb
--- /dev/null
+++ b/ts_web/elements/upladmin-option-card/upladmin-option-card.ts
@@ -0,0 +1,178 @@
+import {
+ DeesElement,
+ property,
+ html,
+ customElement,
+ type TemplateResult,
+ css,
+ cssManager,
+ unsafeCSS,
+} from '@design.estate/dees-element';
+import * as sharedStyles from '../../styles/shared.styles.js';
+import { demoFunc } from './upladmin-option-card.demo.js';
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'upladmin-option-card': UpladminOptionCard;
+ }
+}
+
+export type TOptionVariant =
+ // Severity variants
+ | 'critical' | 'major' | 'minor' | 'maintenance'
+ // Status variants
+ | 'investigating' | 'identified' | 'monitoring' | 'resolved' | 'postmortem'
+ // Generic variants
+ | 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';
+
+@customElement('upladmin-option-card')
+export class UpladminOptionCard extends DeesElement {
+ public static demo = demoFunc;
+
+ @property({ type: String })
+ accessor icon: string = '';
+
+ @property({ type: String })
+ accessor label: string = '';
+
+ @property({ type: String })
+ accessor description: string = '';
+
+ @property({ type: String, reflect: true })
+ accessor variant: TOptionVariant = 'default';
+
+ @property({ type: Boolean, reflect: true })
+ accessor selected: boolean = false;
+
+ @property({ type: Boolean, reflect: true })
+ accessor disabled: boolean = false;
+
+ public static styles = [
+ cssManager.defaultStyles,
+ css`
+ :host {
+ display: block;
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
+ }
+
+ .option-card {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 10px;
+ padding: 18px 14px;
+ background: ${cssManager.bdTheme('#ffffff', '#09090b')};
+ border: 2px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
+ border-radius: 6px;
+ cursor: pointer;
+ transition: all 0.1s ease;
+ text-align: center;
+ user-select: none;
+ }
+
+ .option-card:hover:not(.disabled) {
+ border-color: ${cssManager.bdTheme('#d4d4d8', '#3f3f46')};
+ background: ${cssManager.bdTheme('#f4f4f5', '#18181b')};
+ }
+
+ :host([selected]) .option-card {
+ border-color: ${cssManager.bdTheme('#3b82f6', '#60a5fa')};
+ background: ${cssManager.bdTheme('rgba(59, 130, 246, 0.05)', 'rgba(96, 165, 250, 0.1)')};
+ }
+
+ :host([disabled]) .option-card {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
+
+ .option-label {
+ font-size: 13px;
+ font-weight: 600;
+ color: ${cssManager.bdTheme('#09090b', '#fafafa')};
+ }
+
+ .option-desc {
+ font-size: 11px;
+ color: ${cssManager.bdTheme('#a1a1aa', '#71717a')};
+ line-height: 1.3;
+ }
+
+ /* Variant icon colors - all using bdTheme for proper light/dark support */
+
+ /* Severity variants */
+ :host([variant="critical"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#dc2626', '#f87171')};
+ }
+ :host([variant="major"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#ea580c', '#fb923c')};
+ }
+ :host([variant="minor"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#ca8a04', '#fbbf24')};
+ }
+ :host([variant="maintenance"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#2563eb', '#60a5fa')};
+ }
+
+ /* Status variants */
+ :host([variant="investigating"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#ea580c', '#fb923c')};
+ }
+ :host([variant="identified"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#ca8a04', '#fbbf24')};
+ }
+ :host([variant="monitoring"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#2563eb', '#60a5fa')};
+ }
+ :host([variant="resolved"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#16a34a', '#22c55e')};
+ }
+ :host([variant="postmortem"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#9333ea', '#a855f7')};
+ }
+
+ /* Generic variants */
+ :host([variant="default"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
+ }
+ :host([variant="primary"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#3b82f6', '#60a5fa')};
+ }
+ :host([variant="success"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#16a34a', '#22c55e')};
+ }
+ :host([variant="warning"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#ca8a04', '#fbbf24')};
+ }
+ :host([variant="danger"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#dc2626', '#f87171')};
+ }
+ :host([variant="info"]) dees-icon {
+ --icon-color: ${cssManager.bdTheme('#2563eb', '#60a5fa')};
+ }
+
+ dees-icon {
+ color: var(--icon-color);
+ }
+ `,
+ ];
+
+ public render(): TemplateResult {
+ return html`
+
+ ${this.icon ? html`` : ''}
+ ${this.label ? html`${this.label}` : ''}
+ ${this.description ? html`${this.description}` : ''}
+
+ `;
+ }
+
+ private handleClick() {
+ if (this.disabled) return;
+
+ this.dispatchEvent(new CustomEvent('select', {
+ detail: { selected: !this.selected },
+ bubbles: true,
+ composed: true,
+ }));
+ }
+}