@kitn.ai/ui
Version:
Framework-agnostic, Shadow-DOM web components for building AI chat interfaces — works in React, Vue, Angular, Svelte, or plain HTML. Authored in SolidJS.
84 lines (83 loc) • 3.1 kB
JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://kitn.ai/schemas/card/tasks.schema.json",
"title": "TasksCardData",
"description": "Data payload for a `tasks` card (CardEnvelope.data when type='tasks').",
"type": "object",
"required": ["tasks"],
"properties": {
"mode": {
"type": "string",
"enum": ["select", "progress"],
"default": "select",
"description": "'select' (default) = toggle + a confirm button that emits `submit`. 'progress' = an onboarding-checklist look (header `done / total` count, circular indicators, per-item title/description, no confirm button, where checking a row IS the action). Both share the selection model.",
"x-kai-mode": true
},
"heading": {
"type": "string",
"description": "Optional in-body heading; distinct from CardEnvelope.title."
},
"tasks": {
"type": "array",
"minItems": 1,
"description": "The selectable rows, rendered in order.",
"items": {
"type": "object",
"required": ["id", "label"],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "Stable id; the selected ids are returned in the result. Unique within `tasks`.",
"x-kai-unique": true
},
"label": { "type": "string", "minLength": 1, "description": "Row label." },
"description": { "type": "string", "description": "Optional secondary line under the label." },
"checked": {
"type": "boolean",
"default": false,
"description": "Initial checked state of the row."
},
"disabled": {
"type": "boolean",
"default": false,
"description": "Row is shown but not toggleable (and excluded from select-all)."
}
}
}
},
"selectAll": {
"type": "boolean",
"default": false,
"description": "Render a master select-all checkbox above the list.",
"x-kai-control": "select-all"
},
"confirmLabel": {
"type": "string",
"default": "Confirm",
"description": "Label for the confirm button."
},
"allowEmpty": {
"type": "boolean",
"default": false,
"description": "If true, confirm is enabled with zero selected (emits { selected: [] }). If false, confirm is disabled until >=1 selected."
},
"min": {
"type": "integer",
"minimum": 0,
"description": "Optional minimum number that must be selected to confirm.",
"x-kai-select-min": true
},
"max": {
"type": "integer",
"minimum": 1,
"description": "Optional maximum selectable; further toggles are blocked once reached.",
"x-kai-select-max": true
},
"dismissible": {
"type": "boolean",
"default": false,
"description": "Show a close affordance that emits the `dismiss` verb. The card collapses to a re-openable 'dismissed' stub; the host decides via `onReopen` whether it comes back live or `expired`."
}
}
}