- Add DataTable.svelte: declarative columns, built-in sorting, sticky headers, text truncation, column alignment, configurable widths, optional pagination/search - 12 built-in renderers: BadgeRenderer, StatusBadgeRenderer (unified risk/severity/ execution/state/type variant mapping), HealthDotRenderer, RelativeTimeRenderer, DateRenderer, DurationRenderer, StatusDotRenderer, SignalActions, ApprovalActions, ActivityAction, ActivityCancel - Migrate Overview (task board), Signals, Ops (3 tables) to DataTable - Refactor EntityTable treegrid to use shared SortHeader, EmptyState, HealthDotRenderer - Create shared components: EmptyState, StatusBadge, FilterTabs - Clean up Knowledge.svelte: replace inline relTime() and typeVariant() with shared utils - Add width, align, truncate column props; table-fixed layout; rounded-xl borders - Bump version to 0.11.0
50 lines
1.3 KiB
Svelte
50 lines
1.3 KiB
Svelte
<script lang="ts">
|
|
import { Badge } from '$lib/components/ui/badge'
|
|
|
|
let { value, kind = 'default' }: { value: unknown; kind?: 'risk' | 'severity' | 'execution' | 'state' | 'type' | 'default' } = $props()
|
|
|
|
const v = $derived(String(value ?? ''))
|
|
|
|
const variantMap: Record<string, Record<string, 'default' | 'secondary' | 'destructive' | 'outline'>> = {
|
|
risk: {
|
|
destructive: 'destructive',
|
|
config_mutation: 'secondary',
|
|
default: 'default',
|
|
},
|
|
severity: {
|
|
critical: 'destructive',
|
|
warning: 'secondary',
|
|
info: 'default',
|
|
default: 'default',
|
|
},
|
|
execution: {
|
|
failed: 'destructive',
|
|
denied: 'destructive',
|
|
revoked: 'destructive',
|
|
cancelled: 'destructive',
|
|
completed: 'default',
|
|
running: 'secondary',
|
|
approved: 'secondary',
|
|
default: 'outline',
|
|
},
|
|
state: {
|
|
active: 'default',
|
|
healthy: 'default',
|
|
default: 'outline',
|
|
},
|
|
type: {
|
|
runbook: 'secondary',
|
|
investigation: 'default',
|
|
default: 'outline',
|
|
},
|
|
default: { default: 'default' },
|
|
}
|
|
|
|
const variant = $derived.by(() => {
|
|
const map = variantMap[kind] ?? variantMap.default
|
|
return (map[v] ?? map.default) as 'default' | 'secondary' | 'destructive' | 'outline'
|
|
})
|
|
</script>
|
|
|
|
<Badge {variant}>{v}</Badge>
|