{"_id":"@cianfrani/ai-ui","_rev":"5-c54b8f51172e7ebb6ad8b1342022d993","name":"@cianfrani/ai-ui","dist-tags":{"alpha":"0.1.0-alpha.1","latest":"0.1.0-alpha.3"},"versions":{"0.1.0-alpha.0":{"name":"@cianfrani/ai-ui","version":"0.1.0-alpha.0","keywords":["ai","conversation","lit","transcript","web-components"],"author":{"name":"Mark Cianfrani"},"license":"MIT","_id":"@cianfrani/ai-ui@0.1.0-alpha.0","maintainers":[{"name":"mark.cianfrani","email":"markacianf@gmail.com"}],"homepage":"https://github.com/markacianfrani/ai-ui#readme","bugs":{"url":"https://github.com/markacianfrani/ai-ui/issues"},"dist":{"shasum":"8c67f2683727d3c8295e269d8fce84108f037753","tarball":"https://registry.npmjs.org/@cianfrani/ai-ui/-/ai-ui-0.1.0-alpha.0.tgz","fileCount":47,"integrity":"sha512-xpN+GraJ9SLpa0T8G5FPlURcpQdxR+x0/bMRl/ARjivXKs5yp/xrwrfL2QLaoWoON0luVVV/6M7R21VbT65udA==","signatures":[{"sig":"MEUCIHFZglm5eX45cGgNDKBx2d1QFJbDDaXAuj7jYqDX9N3OAiEA9u1PqhJxc+kYIqHI2GgfAyDUwrtVtYJe3O1Dn+f3noY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":335168},"main":"./dist/ai-ui.js","type":"module","types":"./dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","default":"./dist/ai-ui.js"},"./source":{"types":"./src/index.ts","default":"./src/index.ts"},"./package.json":"./package.json","./custom-elements.json":"./src/custom-elements.json"},"gitHead":"6bcfeeb67c00661af4a9098f3fbd940408df45b6","scripts":{"test":"bun test src/","build":"bun build src/index.ts --outfile=dist/ai-ui.js --target=browser --external=lit --external='lit/*' && tsc -p tsconfig.json","analyze":"cem analyze","release":"changeset publish","version":"changeset version","changeset":"changeset"},"_npmUser":{"name":"mark.cianfrani","email":"markacianf@gmail.com"},"repository":{"url":"git+https://github.com/markacianfrani/ai-ui.git","type":"git"},"_npmVersion":"11.6.2","description":"AI conversation web components (ai-message, ai-tool-call, ai-conversation, …) built with Lit.","directories":{},"sideEffects":true,"_nodeVersion":"25.2.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"customElements":"src/custom-elements.json","devDependencies":{"@types/bun":"latest","typescript":"^5","@changesets/cli":"^2.27.0","@custom-elements-manifest/analyzer":"^0.11.0"},"peerDependencies":{"lit":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-ui_0.1.0-alpha.0_1781875598219_0.11544239491700159","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.1":{"name":"@cianfrani/ai-ui","version":"0.1.0-alpha.1","keywords":["ai","conversation","lit","transcript","web-components"],"author":{"name":"Mark Cianfrani"},"license":"MIT","_id":"@cianfrani/ai-ui@0.1.0-alpha.1","maintainers":[{"name":"mark.cianfrani","email":"markacianf@gmail.com"}],"homepage":"https://github.com/markacianfrani/ai-ui#readme","bugs":{"url":"https://github.com/markacianfrani/ai-ui/issues"},"dist":{"shasum":"a77689b0260f451db4a9a9cd0a02327a1d63ee9d","tarball":"https://registry.npmjs.org/@cianfrani/ai-ui/-/ai-ui-0.1.0-alpha.1.tgz","fileCount":47,"integrity":"sha512-pN8fG8YQouFGMaWKAOvDOIED/+G6Qa8+nqqjueweZ2PGLydgB0v4py2ZBqLfRyCsyH9jr5finSoskZRyBoOJoQ==","signatures":[{"sig":"MEUCIHMQ6Ikx0l4JYN6b/4u3vaOjP4GdB1cRrKfCWk8brn81AiEA5AJirpf/8847zR5TYWI8eGVP2WvJwZ4gwpTVeVK40Yw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cianfrani%2fai-ui@0.1.0-alpha.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":335192},"main":"./dist/ai-ui.js","type":"module","types":"./dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","default":"./dist/ai-ui.js"},"./source":{"types":"./src/index.ts","default":"./src/index.ts"},"./package.json":"./package.json","./custom-elements.json":"./src/custom-elements.json"},"gitHead":"9961eb71b8dfb3ed929b4a7dfc2b0e1f053b6e85","scripts":{"test":"bun test src/","build":"bun build src/index.ts --outfile=dist/ai-ui.js --target=browser --external=lit --external='lit/*' && tsc -p tsconfig.json","analyze":"cem analyze","release":"changeset publish","version":"changeset version","changeset":"changeset"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b28f3720-f026-474f-8c51-4ab64f60f243"}},"repository":{"url":"git+https://github.com/markacianfrani/ai-ui.git","type":"git"},"_npmVersion":"11.17.0","description":"AI conversation web components (ai-message, ai-tool-call, ai-conversation, …) built with Lit.","directories":{},"sideEffects":true,"_nodeVersion":"24.16.0","dependencies":{},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"customElements":"src/custom-elements.json","devDependencies":{"@types/bun":"latest","typescript":"^5","@changesets/cli":"^2.27.0","@custom-elements-manifest/analyzer":"^0.11.0"},"peerDependencies":{"lit":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-ui_0.1.0-alpha.1_1781877377802_0.9734516268278073","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.2":{"name":"@cianfrani/ai-ui","version":"0.1.0-alpha.2","keywords":["ai","conversation","lit","transcript","web-components"],"author":{"name":"Mark Cianfrani"},"license":"MIT","_id":"@cianfrani/ai-ui@0.1.0-alpha.2","maintainers":[{"name":"mark.cianfrani","email":"markacianf@gmail.com"}],"homepage":"https://github.com/markacianfrani/ai-ui#readme","bugs":{"url":"https://github.com/markacianfrani/ai-ui/issues"},"dist":{"shasum":"6041571c3251c921488314697c48aec1531f248f","tarball":"https://registry.npmjs.org/@cianfrani/ai-ui/-/ai-ui-0.1.0-alpha.2.tgz","fileCount":47,"integrity":"sha512-DK6vu4rZkXMqJXkL4C3deg+80JGXkXCbx/IFKcr4ejnbgv9gj6FxeuL7MRFrEml5kA48JcSk5+EN6M/XJoGbwA==","signatures":[{"sig":"MEUCIQCJbsfmyxBrhpJE37+S0kiK6emqYuRUHfeU3uNB0CgX/gIgIhEM2dBjqkuduHJKu9GoS30fYfaMUdDjwIgw6z4l1lo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cianfrani%2fai-ui@0.1.0-alpha.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":335411},"main":"./dist/ai-ui.js","type":"module","types":"./dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","default":"./dist/ai-ui.js"},"./source":{"types":"./src/index.ts","default":"./src/index.ts"},"./package.json":"./package.json","./custom-elements.json":"./src/custom-elements.json"},"gitHead":"3f6fd2ef3f83deb2893ddf808361b72b550bffb3","scripts":{"test":"bun test src/","build":"bun build src/index.ts --outfile=dist/ai-ui.js --target=browser --external=lit --external='lit/*' && tsc -p tsconfig.json","analyze":"cem analyze","release":"changeset publish","version":"changeset version","changeset":"changeset","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b28f3720-f026-474f-8c51-4ab64f60f243"}},"repository":{"url":"git+https://github.com/markacianfrani/ai-ui.git","type":"git"},"_npmVersion":"11.17.0","description":"AI conversation web components (ai-message, ai-tool-call, ai-conversation, …) built with Lit.","directories":{},"sideEffects":true,"_nodeVersion":"24.16.0","dependencies":{},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"customElements":"src/custom-elements.json","devDependencies":{"storybook":"^10.4.2","@types/bun":"latest","typescript":"^5","@changesets/cli":"^2.27.0","@storybook/addon-docs":"^10.4.2","@storybook/web-components-vite":"^10.4.2","@custom-elements-manifest/analyzer":"^0.11.0"},"peerDependencies":{"lit":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-ui_0.1.0-alpha.2_1781882338089_0.10076674577307387","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.3":{"name":"@cianfrani/ai-ui","version":"0.1.0-alpha.3","description":"AI conversation web components (ai-message, ai-tool-call, ai-conversation, …) built with Lit.","keywords":["ai","conversation","lit","transcript","web-components"],"homepage":"https://github.com/markacianfrani/ai-ui#readme","bugs":{"url":"https://github.com/markacianfrani/ai-ui/issues"},"license":"MIT","author":{"name":"Mark Cianfrani"},"repository":{"type":"git","url":"git+https://github.com/markacianfrani/ai-ui.git"},"type":"module","sideEffects":true,"main":"./dist/ai-ui.js","types":"./dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","default":"./dist/ai-ui.js"},"./source":{"types":"./src/index.ts","default":"./src/index.ts"},"./custom-elements.json":"./src/custom-elements.json","./package.json":"./package.json"},"publishConfig":{"access":"public","provenance":true},"scripts":{"build":"bun build src/index.ts --outfile=dist/ai-ui.js --target=browser --external=lit --external='lit/*' && tsc -p tsconfig.json","analyze":"cem analyze","test":"bun test src/","changeset":"changeset","version":"changeset version","release":"changeset publish","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"dependencies":{},"devDependencies":{"@changesets/cli":"^2.27.0","@custom-elements-manifest/analyzer":"^0.11.0","@storybook/addon-docs":"^10.4.2","@storybook/web-components-vite":"^10.4.2","@types/bun":"latest","storybook":"^10.4.2","typescript":"^5"},"peerDependencies":{"lit":"^3.0.0"},"customElements":"src/custom-elements.json","gitHead":"ef9ea1ee2eaef34dd58a39e8f409ab6a26b29243","_id":"@cianfrani/ai-ui@0.1.0-alpha.3","_nodeVersion":"24.18.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-4S878UpQt5QMkwi0db8H4l9huIo5wjDwlJlZQFGJUMA7dKDc0CXzW19mq7Y7wFnZcIRS+2s5qfsvmvw6L11m3A==","shasum":"1cbb727371bbb1afb8a6526fbe0b83a9e24810aa","tarball":"https://registry.npmjs.org/@cianfrani/ai-ui/-/ai-ui-0.1.0-alpha.3.tgz","fileCount":47,"unpackedSize":335441,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cianfrani%2fai-ui@0.1.0-alpha.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFxvKp6Q0F8PQct9jqwWkiCYqu7lLcbsW0VTIBt18AQPAiAOyw2vaNpnUj5mLBzNFDwFDt0d6PZDn9+pFxsks+cdBA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b28f3720-f026-474f-8c51-4ab64f60f243"}},"directories":{},"maintainers":[{"name":"mark.cianfrani","email":"markacianf@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-ui_0.1.0-alpha.3_1783215443637_0.25108389902597517"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-19T13:26:38.059Z","modified":"2026-07-05T01:37:24.039Z","0.1.0-alpha.0":"2026-06-19T13:26:38.349Z","0.1.0-alpha.1":"2026-06-19T13:56:17.983Z","0.1.0-alpha.2":"2026-06-19T15:18:58.254Z","0.1.0-alpha.3":"2026-07-05T01:37:23.776Z"},"bugs":{"url":"https://github.com/markacianfrani/ai-ui/issues"},"author":{"name":"Mark Cianfrani"},"license":"MIT","homepage":"https://github.com/markacianfrani/ai-ui#readme","keywords":["ai","conversation","lit","transcript","web-components"],"repository":{"type":"git","url":"git+https://github.com/markacianfrani/ai-ui.git"},"description":"AI conversation web components (ai-message, ai-tool-call, ai-conversation, …) built with Lit.","maintainers":[{"name":"mark.cianfrani","email":"markacianf@gmail.com"}],"readme":"# @cianfrani/ai-ui\n\nAI conversation web components for rendering agent transcripts — messages, tool\ncalls, tool results, reasoning, and events — built with [Lit](https://lit.dev).\n\nFramework-agnostic standard custom elements. Works in any frontend (Lit, React,\nVue, Svelte, plain HTML). Every component renders correctly with **zero host\nCSS** thanks to built-in token fallbacks; skin it to match your product by\noverriding the `--ai-*` design tokens.\n\n> **Status: v0 alpha.** The component API and token names are still settling.\n> Expect breaking changes before `0.1`. Not recommended for production use yet.\n\n## Install\n\n```sh\nnpm install @cianfrani/ai-ui\n# peer: lit ^3\n```\n\n## Quick start\n\n```ts\nimport \"@cianfrani/ai-ui\";\nimport { html, render } from \"lit\";\n```\n\n```html\n<ai-conversation label=\"Chat transcript\" live>\n  <ai-message role=\"user\" timestamp=\"2026-06-19T09:00:00Z\">\n    <ai-markdown tone=\"user\" .content=${\"Ship it.\"></ai-markdown>\n  </ai-message>\n\n  <ai-message role=\"assistant\" timestamp=\"2026-06-19T09:00:02Z\">\n    <ai-markdown .content=${\"Running the tests…\"></ai-markdown>\n    <ai-tool-call id=\"t1\" name=\"bash\" status=\"running\" headline=\"bun test src/\">\n      <pre slot=\"input\">bun test src/</pre>\n      <ai-tool-result for=\"t1\" name=\"bash\" status=\"success\" .content=${\"12 pass\"></ai-tool-result>\n    </ai-tool-call>\n  </ai-message>\n</ai-conversation>\n```\n\n## Components\n\n**Semantic transcript primitives**\n- `ai-conversation` — ordered root container; `density`, `live`, accessible label.\n- `ai-message` — message with `role=\"user|assistant|system|tool\"`, `status`, `timestamp`, `label`; `default` / `meta` / `avatar` slots.\n- `ai-tool-call` — collapsible tool-call block with input / summary slots and `ai-show` / `ai-hide` events.\n- `ai-tool-result` — tool output block with `for` association and channel / status metadata.\n- `ai-thinking` — reasoning block with compact disclosure.\n- `ai-event` — compact status / checkpoint / system / error event.\n\n**Visual atoms** — `ai-markdown` (markdown renderer with `tone=\"assistant|user|system|tool\"`), `ai-stack`, `ai-surface`, `ai-text`, `ai-badge`, `ai-status`, `ai-avatar`, `ai-icon`, `ai-divider`.\n\nFull API docs are generated as a [custom elements manifest](./src/custom-elements.json)\n(`customElements` field). Point your tooling (Storybook, IDE plugins) at it.\n\n## Theming\n\nEvery style reads from `--ai-*` CSS custom properties, and each token falls back\nto a built-in default so the components render reasonably with **zero host CSS**.\nTo skin the library, override these tokens on `:root` (or any ancestor). The\nblock below is a **starter palette** you can adapt — it is not a mirror of the\ninternal defaults (those vary per component and are documented via `@cssprop`\nin source):\n\n```css\n:root {\n  /* Color */\n  --ai-color-text: #f5f5f4;\n  --ai-color-text-muted: #a8a29e;\n  --ai-color-accent: #f97316;\n  --ai-color-border: rgba(255, 255, 255, 0.1);\n  --ai-color-success: #22c55e;\n  --ai-color-warning: #f59e0b;\n  --ai-color-error: #ef4444;\n  --ai-color-info: #3b82f6;\n\n  /* Spacing & radius */\n  --ai-space-xs: 0.25rem;\n  --ai-space-sm: 0.5rem;\n  --ai-space-md: 0.75rem;\n  --ai-space-lg: 1rem;\n  --ai-radius: 8px;\n\n  /* Typography */\n  --ai-font-family-mono: ui-monospace, monospace;\n  --ai-font-size-caption: 0.75rem;\n  --ai-font-size-meta: 0.8125rem;\n  --ai-font-size-body: 0.875rem;\n}\n```\n\nEach component also exposes component-local tokens (e.g.\n`--ai-message-user-background`, `--ai-tool-call-border-color`,\n`--ai-markdown-link-color`) for fine-grained control. See each component's\n`@cssprop` docs in source.\n\n## Framework notes\n\nThese are standard custom elements, so they work everywhere, but note:\n\n- **Properties with`.`prefix** (`.content`, `.for`) must be set from JS, not as\n  HTML attributes. In React this means `ref`-based assignment or a wrapper; Lit\n  and Vue handle them natively.\n- **`sideEffects: true`** — importing the package registers the custom elements.\n\n## Develop\n\n```sh\nbun install\nbun test          # unit tests\nbun run analyze   # regenerate custom-elements.json\nbun run build     # build dist/ai-ui.js bundle + dist/types/*.d.ts (shipped to npm)\n```\n\n## Releasing\n\nReleases are automated with [Changesets](https://github.com/changesets/changesets).\nAdd a changeset describing your change, then merge the auto-opened \"Version\nPackages\" PR to cut a release to npm.\n\n```sh\nbun run changeset   # describe a change (major/minor/patch)\nbun run version     # consume changesets, bump versions + changelog\nbun run release     # publish to npm (run by CI)\n```\n\n**First release.** The release workflow (`.github/workflows/release.yml`) only\npublishes when a \"Version Packages\" PR is merged. The first push to the new\nrepo's `main` ships nothing until you add a changeset and merge its version PR,\nor bootstrap the registry once:\n\n```sh\nnpm publish --tag alpha   # one-time, before relying on CI\n```\n\nThe alpha-line prerelease flow (`changeset pre enter/exit alpha`) is documented\nin [`.changeset/README.md`](./.changeset/README.md).\n\n## License\n\n[MIT](./LICENSE)\n","readmeFilename":"README.md"}