@adia-ai/web-components 0.4.5 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +63 -24
  2. package/USAGE.md +584 -0
  3. package/components/calendar-picker/calendar-picker.d.ts +27 -0
  4. package/components/check/check.d.ts +30 -0
  5. package/components/code/code.d.ts +39 -0
  6. package/components/color-picker/color-picker.d.ts +37 -0
  7. package/components/index.js +1 -0
  8. package/components/input/input.d.ts +61 -0
  9. package/components/option-card/option-card.d.ts +30 -0
  10. package/components/otp-input/otp-input.d.ts +25 -0
  11. package/components/pane/pane.css +10 -0
  12. package/components/pane/pane.js +28 -4
  13. package/components/radio/radio.d.ts +28 -0
  14. package/components/range/range.d.ts +31 -0
  15. package/components/rating/rating.d.ts +33 -0
  16. package/components/search/search.d.ts +35 -0
  17. package/components/segmented/segmented.d.ts +24 -0
  18. package/components/select/select.d.ts +57 -0
  19. package/components/slider/slider.d.ts +31 -0
  20. package/components/switch/switch.d.ts +30 -0
  21. package/components/textarea/textarea.d.ts +31 -0
  22. package/components/toggle-scheme/toggle-scheme.a2ui.json +197 -0
  23. package/components/toggle-scheme/toggle-scheme.css +20 -0
  24. package/components/toggle-scheme/toggle-scheme.js +277 -0
  25. package/components/toggle-scheme/toggle-scheme.yaml +173 -0
  26. package/components/upload/upload.d.ts +27 -0
  27. package/core/element.d.ts +174 -0
  28. package/core/form.d.ts +108 -0
  29. package/core/index.d.ts +11 -0
  30. package/core/index.js +1 -0
  31. package/core/register.d.ts +25 -0
  32. package/core/register.js +58 -0
  33. package/core/signals.d.ts +94 -0
  34. package/core/template.d.ts +70 -0
  35. package/index.d.ts +161 -0
  36. package/package.json +21 -6
  37. package/traits/CATEGORIES.md +1 -1
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # @adia-ai/web-components
2
2
 
3
- Vanilla web components + A2UI runtime for AdiaUI. **80 light-DOM custom
4
- elements**, a reactive core, a trait system, and a renderer that turns
5
- A2UI protocol messages into live DOM.
3
+ Vanilla web components + A2UI runtime for AdiaUI. **95 light-DOM custom
4
+ elements** + **56 composable traits**, a reactive core (signals + tagged-template renderer), form-associated form controls, and integration into the A2UI generation pipeline.
6
5
 
7
- > This package ships UI atoms only. The generation pipeline lives in
8
- > [`@adia-ai/a2ui-compose`](../a2ui/compose); the pattern corpus in
9
- > [`@adia-ai/a2ui-corpus`](../a2ui/corpus); the MCP server in
10
- > [`@adia-ai/a2ui-mcp`](../a2ui/mcp).
6
+ > This package ships UI atoms only. Composite shells (admin / chat / editor / simple / theme) live in [`@adia-ai/web-modules`](../web-modules). The generation pipeline lives in [`@adia-ai/a2ui-compose`](../a2ui/compose); the pattern corpus in [`@adia-ai/a2ui-corpus`](../a2ui/corpus); the MCP server in [`@adia-ai/a2ui-mcp`](../a2ui/mcp).
7
+ >
8
+ > **Consumer guide:** [`USAGE.md`](./USAGE.md) property reactivity, event contract, form participation, lifecycle, registration, TypeScript. Start here if you're integrating AdiaUI into an app.
9
+ >
10
+ > **Live demos** for every primitive at [`https://ui-kit.exe.xyz/site/components/<name>`](https://ui-kit.exe.xyz/site/) — `<name>` is the tag without the `-ui` suffix (e.g. [`button`](https://ui-kit.exe.xyz/site/components/button), [`select`](https://ui-kit.exe.xyz/site/components/select), [`slider`](https://ui-kit.exe.xyz/site/components/slider)).
11
11
 
12
12
  ## Install
13
13
 
@@ -23,13 +23,23 @@ npm install @adia-ai/web-components @adia-ai/web-modules
23
23
 
24
24
  ## Quick start
25
25
 
26
- ```html
27
- <link rel="stylesheet" href="node_modules/@adia-ai/web-components/index.css" />
26
+ ESM-only — bundlers (Vite, esbuild, webpack 5+, Rollup) resolve `import` for both `.js` and `.css`; in plain HTML use `<script type="module">` + `<link rel="stylesheet">`.
27
+
28
+ ```js
29
+ import '@adia-ai/web-components'; // registers every *-ui tag (95 primitives)
30
+ import '@adia-ai/web-components/css'; // every primitive's CSS (one stylesheet)
31
+ ```
28
32
 
29
- <script type="module">
30
- import '@adia-ai/web-components'; // registers every *-ui tag
31
- </script>
33
+ Or per-component for tree-shaking-conscious bundles:
34
+
35
+ ```js
36
+ import '@adia-ai/web-components/components/button'; // <button-ui> only
37
+ import '@adia-ai/web-components/components/button.css'; // its CSS
38
+ ```
32
39
 
40
+ Then use the tags in markup:
41
+
42
+ ```html
33
43
  <card-ui>
34
44
  <header>
35
45
  <span slot="icon"><avatar-ui icon="user"></avatar-ui></span>
@@ -49,8 +59,8 @@ web-components/
49
59
  ├── core/ — Reactivity + base classes
50
60
  │ ├── signals.js signal() / computed() / effect() / batch() / untracked()
51
61
  │ ├── template.js tagged templates: html, css, repeat, stamp
52
- │ ├── element.js AdiaElement — light-DOM reactive base
53
- │ ├── form.js AdiaFormElement — form-associated + validation
62
+ │ ├── element.js UIElement — light-DOM reactive base
63
+ │ ├── form.js UIFormElement — form-associated + ElementInternals + validation
54
64
  │ ├── provider.js global provider registration + router-ui
55
65
  │ ├── anchor.js popover + anchor-positioning
56
66
  │ ├── markdown.js lightweight markdown renderer
@@ -58,18 +68,19 @@ web-components/
58
68
  │ └── data-stream.js `data-stream-*` attribute trait (HTTP/SSE/WS,
59
69
  │ signal-backed, refcounted shared transports)
60
70
 
61
- ├── components/ — 80 *-ui custom elements (primitives)
71
+ ├── components/ — 95 *-ui custom elements (primitives)
62
72
  │ └── <tag>/
63
- │ ├── <tag>.js class definition (extends AdiaElement)
73
+ │ ├── <tag>.js class definition (extends UIElement / UIFormElement)
64
74
  │ ├── <tag>.css @scope(tag-ui) two-block: tokens + styles
65
75
  │ ├── <tag>.yaml authoring contract (props, slots, events, examples)
66
76
  │ └── <tag>.a2ui.json generated — do NOT edit
67
77
 
68
- │ Composite elements (app-shell, app-nav*, adia-chat, adia-editor,
69
- │ gen-ui, a2ui-root) ship in the sibling `@adia-ai/web-modules`
70
- │ package as of 0.0.29 — see ADR-0012 for the three-tier rationale.
78
+ │ Composite shells (admin-shell, chat-shell, editor-shell, simple-shell,
79
+ theme-panel, gen-root, a2ui-root) ship in the sibling
80
+ `@adia-ai/web-modules` package — see ADR-0012 for the three-tier
81
+ │ rationale.
71
82
 
72
- ├── traits/ — 41 composable behaviors via defineTrait() + the
83
+ ├── traits/ — 56 composable behaviors via defineTrait() + the
73
84
  │ <traits-host> wrapper for raw-HTML declarative
74
85
  │ composition. Generated catalog at _catalog.json
75
86
  │ drives the MCP get_traits tool + per-trait demo
@@ -96,11 +107,39 @@ live at the repo-root `scripts/` directory rather than inside this
96
107
  package — they span the monorepo (MCP server, a2ui-corpus data,
97
108
  component catalog) and aren't scoped to web-components alone.
98
109
 
99
- ## Component contract
110
+ ## Using a primitive (consumer guide)
111
+
112
+ The complete consumer surface — property reactivity, event contract, form participation, lifecycle, registration, TypeScript — lives in [**`USAGE.md`**](./USAGE.md). Start there if you're integrating AdiaUI into an app rather than authoring a new primitive.
113
+
114
+ Quick reference:
115
+
116
+ ```js
117
+ // Property reactivity — every prop is signal-backed
118
+ slider.value = 75; // triggers re-render
119
+
120
+ // Event contract — CustomEvent with typed detail (since v0.4.5)
121
+ slider.addEventListener('change', (e) => console.log(e.detail.value));
122
+
123
+ // Form participation — 15 primitives extend UIFormElement
124
+ new FormData(document.getElementById('settings')); // includes every <input-ui>, <select-ui>, etc.
125
+
126
+ // Lifecycle — UIElement provides connected/render/updated/disconnected hooks
127
+ class MyWidget extends UIElement {
128
+ connected() { /* set up */ }
129
+ render() { /* update DOM */ }
130
+ disconnected() { /* tear down */ }
131
+ }
132
+
133
+ // Registration — conflict-safe via defineIfFree
134
+ import { defineIfFree } from '@adia-ai/web-components/core';
135
+ defineIfFree('my-widget', MyWidget);
136
+ ```
137
+
138
+ TypeScript users: types ship in the package since v0.4.6. `import type { UISlider, SliderChangeEvent } from '@adia-ai/web-components'` for hand-typed handlers; `HTMLElementTagNameMap` is augmented so `document.querySelector('slider-ui')` returns `UISlider`.
139
+
140
+ ## Authoring a primitive
100
141
 
101
- Every component is a single-file class extending `AdiaElement` (or
102
- `AdiaFormElement` for form fields). All styling lives in a sibling `.css`
103
- file using **two-block `@scope`**:
142
+ If you're contributing a new primitive (rather than consuming one), this is for you. Every component is a single-file class extending `UIElement` (or `UIFormElement` for form fields). All styling lives in a sibling `.css` file using **two-block `@scope`**:
104
143
 
105
144
  ```css
106
145
  @scope (button-ui) {