PolicyConfigListEditor
components/policy-config/ListEditor.vue
Config shape: allow/deny-list management — searchable-feeling entry table (value, scope, added-by, last-matched) with a pattern-friendly add row. Fully controlled: renders `entries` as given, emits intents; the parent owns the array (mock: mutate on the events; qdash: persist via API, e.g. /api/egress-decisions).
Approved destinations
3 entries · patterns supported (* and ?)
| Destination | Scope | Added by | Last matched | |
|---|---|---|---|---|
| api.anthropic.com | global | mark | 2m ago | |
| *.openai.com | global | mark | 11m ago | |
| registry.npmjs.orgbuild runners | host | seed | 38m ago | |
| you |
Empty (everything violates)
Approved MCP servers
0 entries · patterns supported (* and ?)
| Server | Added by | Last matched | |
|---|---|---|---|
| Empty list — everything violates until entries are approved. | |||
| you | |||
components/policy-config/ListEditor.vue
Usage
<PolicyConfigListEditor
title = "(required)"
valueLabel = "Entry"
placeholder = "value or pattern"
:scopes = "[]"
:entries = "[]"
/>
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| title | String | (required) | Section heading |
| valueLabel | String | 'Entry' | First column header |
| placeholder | String | 'value or pattern' | Add-row input placeholder |
| scopes | Array | [] | Scope options; scope column hidden when empty |
| entries | Array | [] | { value, scope, addedBy, lastMatched, note? } |
Events
| Event | Description |
|---|---|
| add | Add clicked → { value, scope, addedBy, lastMatched } |
| remove | ✕ clicked → index |