@adia-ai/web-modules 0.4.5 → 0.4.7
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.
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,25 @@ Built from `@adia-ai/web-components` primitives.
|
|
|
11
11
|
|
|
12
12
|
_No pending changes._
|
|
13
13
|
|
|
14
|
+
## [0.4.7] - 2026-05-12
|
|
15
|
+
|
|
16
|
+
### Changed — `chat/chat-thread.yaml` populates `synonyms.tags` (§72)
|
|
17
|
+
|
|
18
|
+
The composite `chat-thread.yaml` picks up the alias array previously held in the retired `@adia-ai/a2ui-corpus/patterns/_components.json` — `chat`, `conversation`, `messages`, `chat-log`, `message-thread`. Sidecar regenerated by `npm run components`. Mirrors the per-component yaml sweep on `@adia-ai/web-components` for §72 (the §65 carry-over from v0.4.6).
|
|
19
|
+
|
|
20
|
+
## [0.4.6] - 2026-05-12
|
|
21
|
+
|
|
22
|
+
### Fixed — `<editor-sidebar>` resize-state detection via `:has()`
|
|
23
|
+
|
|
24
|
+
`<editor-sidebar>`'s `[resizing]` host attribute previously tripped on a heuristic regex against `[data-resize], [class*="resize"], [class*="handle"]` matched on the pointerdown's direct target. This caught `admin-sidebar`'s `[data-resize]` grabber but missed `<pane-ui>`'s slot-based `[slot="resize"]` grabber — so the wrapper's `transition: width` collapse animation was never suppressed during a pane drag, causing the wrapper to interpolate widths while pointer events tracked 1:1 (visible "rubber band" + ~16-ms-per-frame stutter).
|
|
25
|
+
|
|
26
|
+
- **`editor-sidebar.js`** — pointerdown detection switched to `closest('[slot="resize"], [data-resize], [class*="handle"]')`, matching both the pane's slot-based handle and the legacy `[data-resize]` shape. Behavior preserved for admin/chat sidebars; pane-ui case now correctly sets `[resizing]`.
|
|
27
|
+
- **`editor-shell.bespoke.css`** — CSS bypass selector widened from `editor-sidebar[resizing]` to `editor-sidebar:is([resizing], :has(pane-ui[data-resizing]))`, so the transition-bypass fires whenever EITHER (a) the wrapper detected pointerdown on a known handle OR (b) any descendant `<pane-ui>` is in an active drag (independent of pointerdown heuristics). Defense-in-depth: covers consumer rules with high specificity that defeat the host-level `[resizing]` attribute.
|
|
28
|
+
|
|
29
|
+
Pairs with the `<pane-ui>` resize tracking fix in `@adia-ai/web-components@[Unreleased]`.
|
|
30
|
+
|
|
31
|
+
See root [CHANGELOG.md `[Unreleased]`](../../CHANGELOG.md) for the cross-cutting arc narrative.
|
|
32
|
+
|
|
14
33
|
## [0.4.5] - 2026-05-12
|
|
15
34
|
|
|
16
35
|
### Added — CSS importable via package specifier (§61)
|
|
@@ -1,89 +1,98 @@
|
|
|
1
|
-
# Edit this file; run `npm run build:components` to regenerate a2ui.json.
|
|
2
1
|
$schema: ../../../../scripts/schemas/component.yaml.schema.json
|
|
3
2
|
name: ChatThread
|
|
4
3
|
tag: chat-thread
|
|
5
4
|
component: ChatThread
|
|
6
5
|
category: container
|
|
7
6
|
version: 1
|
|
8
|
-
description:
|
|
9
|
-
|
|
7
|
+
description: 'Module-tier chat message thread container — replaces legacy
|
|
8
|
+
|
|
10
9
|
<section data-chat-messages> per ADR-0023. Owns scroll-to-bottom
|
|
10
|
+
|
|
11
11
|
on new message (with user-scroll-up suspension), [streaming] and
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
[empty] reflected attributes, and a stable target for the host''s
|
|
14
|
+
|
|
13
15
|
message rendering pipeline.
|
|
14
16
|
|
|
17
|
+
|
|
15
18
|
Sits inside <chat-shell> as the central scroll surface. Authors
|
|
19
|
+
|
|
16
20
|
compose <chat-empty> as an optional first child for the empty
|
|
21
|
+
|
|
17
22
|
state; message children are appended dynamically by the host.
|
|
18
23
|
|
|
24
|
+
|
|
19
25
|
Backwards compat — <chat-shell> still recognizes the legacy
|
|
26
|
+
|
|
20
27
|
<section data-chat-messages> shape via :is() selector. New code
|
|
28
|
+
|
|
21
29
|
should prefer <chat-thread>.
|
|
22
30
|
|
|
31
|
+
'
|
|
23
32
|
props:
|
|
24
33
|
streaming:
|
|
25
|
-
description:
|
|
26
|
-
|
|
34
|
+
description: 'Reflected — set by the host while an LLM response is streaming.
|
|
35
|
+
|
|
27
36
|
Consumers can style streaming-mode (e.g. cursor blink) via
|
|
37
|
+
|
|
28
38
|
:has(chat-thread[streaming]) or attribute selectors.
|
|
39
|
+
|
|
40
|
+
'
|
|
29
41
|
type: boolean
|
|
30
42
|
default: false
|
|
31
43
|
reflect: true
|
|
32
|
-
|
|
33
44
|
empty:
|
|
34
|
-
description:
|
|
35
|
-
|
|
45
|
+
description: 'Reflected — set when zero message children. Drives the
|
|
46
|
+
|
|
36
47
|
<chat-empty> visibility via CSS — no JS toggling needed.
|
|
48
|
+
|
|
49
|
+
'
|
|
37
50
|
type: boolean
|
|
38
51
|
default: true
|
|
39
52
|
reflect: true
|
|
40
|
-
|
|
41
53
|
events: {}
|
|
42
|
-
|
|
43
54
|
slots:
|
|
44
55
|
default:
|
|
45
|
-
description:
|
|
46
|
-
|
|
47
|
-
<chat-shell>'s rendering pipeline) plus an optional first
|
|
48
|
-
<chat-empty> sibling for the empty state.
|
|
49
|
-
|
|
56
|
+
description: Default — message children (typically appended dynamically by <chat-shell>'s rendering pipeline) plus an
|
|
57
|
+
optional first <chat-empty> sibling for the empty state.
|
|
50
58
|
states:
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
- name: idle
|
|
60
|
+
description: Default, no streaming.
|
|
61
|
+
- name: streaming
|
|
62
|
+
attribute: streaming
|
|
63
|
+
description: Host is actively streaming an LLM response.
|
|
64
|
+
- name: empty
|
|
65
|
+
attribute: empty
|
|
66
|
+
description: Zero message children — empty state visible.
|
|
60
67
|
traits: []
|
|
61
|
-
|
|
62
68
|
a2ui:
|
|
63
69
|
rules:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
divs as children.
|
|
69
|
-
- >-
|
|
70
|
-
Place <chat-empty> as an optional first child for the empty
|
|
71
|
-
state; the [empty] reflected attribute drives its visibility
|
|
72
|
-
via CSS (no JS toggling).
|
|
73
|
-
|
|
70
|
+
- chat-thread is the bespoke replacement for legacy <section data-chat-messages> inside <chat-shell>. Use it for the message
|
|
71
|
+
scroll surface; the host appends dynamic message divs as children.
|
|
72
|
+
- Place <chat-empty> as an optional first child for the empty state; the [empty] reflected attribute drives its visibility
|
|
73
|
+
via CSS (no JS toggling).
|
|
74
74
|
keywords:
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
- chat-thread
|
|
76
|
+
- message-list
|
|
77
|
+
- conversation
|
|
78
|
+
- thread
|
|
79
|
+
- scroll-surface
|
|
81
80
|
synonyms:
|
|
82
|
-
thread:
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
thread:
|
|
82
|
+
- conversation
|
|
83
|
+
- dialogue
|
|
84
|
+
- chat-log
|
|
85
|
+
- transcript
|
|
86
|
+
message-list:
|
|
87
|
+
- messages
|
|
88
|
+
- message-stream
|
|
89
|
+
tags:
|
|
90
|
+
- Chat
|
|
91
|
+
- conversation
|
|
92
|
+
- chat-log
|
|
93
|
+
- message-thread
|
|
85
94
|
related:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
95
|
+
- ChatShell
|
|
96
|
+
- ChatEmpty
|
|
97
|
+
- ChatComposer
|
|
98
|
+
- ChatSidebar
|
|
@@ -198,11 +198,17 @@ editor-sidebar[collapsed] {
|
|
|
198
198
|
/* Children can hide labels / shrink icons via [data-narrow] */
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
/* When resizing — disable transitions to feel responsive
|
|
202
|
-
|
|
201
|
+
/* When resizing — disable transitions to feel responsive.
|
|
202
|
+
`:has(pane-ui[data-resizing])` makes the bypass independent of the
|
|
203
|
+
wrapper's pointerdown heuristic: as long as the inner pane is in an
|
|
204
|
+
active drag, the wrapper's `transition: width` is suppressed. The
|
|
205
|
+
inner-pane rule is redundant (pane.css owns its own bypass) but is
|
|
206
|
+
kept for defense-in-depth against consumer rules with high
|
|
207
|
+
specificity. */
|
|
208
|
+
editor-sidebar:is([resizing], :has(pane-ui[data-resizing])) {
|
|
203
209
|
transition: none;
|
|
204
210
|
}
|
|
205
|
-
editor-sidebar[resizing] > pane-ui {
|
|
211
|
+
editor-sidebar:is([resizing], :has(pane-ui[data-resizing])) > pane-ui {
|
|
206
212
|
transition: none;
|
|
207
213
|
}
|
|
208
214
|
|
|
@@ -97,10 +97,11 @@ class EditorSidebar extends UIElement {
|
|
|
97
97
|
// (pane-ui's drag-handle is internal; we listen on the pane and let
|
|
98
98
|
// pointerup on document terminate)
|
|
99
99
|
this.#onPointerDown = (e) => {
|
|
100
|
-
//
|
|
101
|
-
//
|
|
100
|
+
// pane-ui's resize grabber is `[slot="resize"]`; admin-sidebar and
|
|
101
|
+
// chat-sidebar use `[data-resize]`. Match both so this wrapper's
|
|
102
|
+
// `[resizing]` attribute reflects whichever primitive is composed.
|
|
102
103
|
const target = e.target;
|
|
103
|
-
if (target?.
|
|
104
|
+
if (target?.closest?.('[slot="resize"], [data-resize], [class*="handle"]')) {
|
|
104
105
|
this.resizing = true;
|
|
105
106
|
}
|
|
106
107
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adia-ai/web-modules",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.7",
|
|
4
4
|
"description": "AdiaUI composite custom elements — shell, chat, editor, runtime clusters built from @adia-ai/web-components primitives. Subpath exports per cluster.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|