@kitn.ai/chat
Version:
Framework-agnostic, Shadow-DOM web components for building AI chat interfaces — works in React, Vue, Angular, Svelte, or plain HTML. Authored in SolidJS.
66 lines (65 loc) • 2.25 kB
JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://kitn.ai/schemas/card/embed.schema.json",
"title": "EmbedCardData",
"description": "Lazy media-embed payload (YouTube / Vimeo / generic player URL).",
"type": "object",
"x-kc-card-type": "embed",
"x-kc-contract-version": "1",
"required": ["provider"],
"additionalProperties": false,
"properties": {
"provider": {
"type": "string",
"enum": ["youtube", "vimeo", "generic"],
"description": "Media provider. 'generic' frames `url` directly (must be an https embeddable player URL whose origin is app-allowlisted).",
"x-kc-control": "select"
},
"id": {
"type": "string",
"description": "Provider video id (required for youtube/vimeo when `url` is absent). e.g. 'dQw4w9WgXcQ'.",
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"url": {
"type": "string",
"format": "uri",
"description": "Full media/watch URL. For youtube/vimeo it is parsed to an id; for 'generic' it is the embeddable player src (https only).",
"x-kc-format": "url"
},
"title": {
"type": "string",
"description": "Accessible title for the player iframe + the poster label. Strongly recommended for a11y.",
"maxLength": 300
},
"poster": {
"type": "string",
"format": "uri",
"description": "Thumbnail shown before play. When omitted, youtube/vimeo derive a default thumbnail; 'generic' shows a neutral play placeholder.",
"x-kc-format": "url"
},
"start": {
"type": "integer",
"minimum": 0,
"description": "Optional start offset in seconds.",
"x-kc-unit": "seconds"
},
"aspectRatio": {
"type": "string",
"enum": ["16:9", "4:3", "1:1", "9:16"],
"default": "16:9",
"description": "Player box aspect ratio (CSS aspect-ratio).",
"x-kc-control": "select"
}
},
"allOf": [
{
"if": { "properties": { "provider": { "const": "generic" } } },
"then": { "required": ["url"] }
},
{
"if": { "properties": { "provider": { "enum": ["youtube", "vimeo"] } } },
"then": { "anyOf": [{ "required": ["id"] }, { "required": ["url"] }] }
}
]
}