@adea-ai/ui 0.65.1 → 0.66.0
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/README.md +135 -35
- package/dist/NOTICE +125 -97
- package/dist/components/conversation/chat-composer.d.ts +61 -0
- package/dist/components/conversation/chat-composer.d.ts.map +1 -0
- package/dist/components/conversation/chat-composer.js +411 -0
- package/dist/components/conversation/chat-composer.js.map +1 -0
- package/dist/components/conversation/index.d.ts +1 -0
- package/dist/components/conversation/index.d.ts.map +1 -1
- package/dist/components/conversation/index.js +2 -1
- package/dist/index.js +2 -1
- package/dist/r/conversation.json +5 -0
- package/dist/r/registry.json +5 -0
- package/dist/r/src/components/conversation/chat-composer.tsx +378 -0
- package/dist/r/src/components/conversation/index.ts +1 -0
- package/package.json +2 -1
- package/registry.json +5 -0
- package/src/components/conversation/chat-composer.tsx +378 -0
- package/src/components/conversation/index.ts +1 -0
package/README.md
CHANGED
|
@@ -153,29 +153,20 @@ The toolbar switches theme, accent, typeface and density live, which is the
|
|
|
153
153
|
fastest way to see how a component behaves across the catalogue rather than in
|
|
154
154
|
one theme.
|
|
155
155
|
|
|
156
|
-
##
|
|
157
|
-
|
|
158
|
-
Square icon controls use the control-height tokens through the Tailwind `--size`
|
|
159
|
-
mapping; `--spacing-control-*` remains the separate inline-padding ladder.
|
|
160
|
-
Text controls, icon buttons and toggles share the same height in both densities.
|
|
161
|
-
Dimensions remain rem-based and follow the consumer's root font size. The browser
|
|
162
|
-
geometry lane checks all six rungs, heights and padding under both themes/densities.
|
|
156
|
+
## Composer keyboard behavior
|
|
163
157
|
|
|
164
|
-
`
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
same-session preference synchronization remain application-owned.
|
|
158
|
+
`MessageComposer` preserves native IME candidate commits and suppresses sending
|
|
159
|
+
during composition, including the 50 ms commit window when browser flags have
|
|
160
|
+
already cleared. A separate Enter sends after that window; Shift+Enter remains
|
|
161
|
+
a soft break. A host or menu that already prevented the event keeps ownership.
|
|
162
|
+
The selected KiroCrew textarea guard is translated to Solid ownership; it adds
|
|
163
|
+
no document listener or application session state. Source and license details
|
|
164
|
+
are retained in `NOTICE`.
|
|
172
165
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
Solid composition headlessly in Chromium and WebKit. Full Chat composition,
|
|
178
|
-
packed distribution and real consumer/native acceptance remain separate gates.
|
|
166
|
+
Run `bun run test:components` for the built Solid component contracts in
|
|
167
|
+
Chromium and WebKit. The event-sequence tests exercise browser handling of
|
|
168
|
+
composition flags, timers and focus recovery; manual operating-system IME
|
|
169
|
+
acceptance and each application's mounted chat journey remain separate gates.
|
|
179
170
|
|
|
180
171
|
## Transcript follow
|
|
181
172
|
|
|
@@ -199,25 +190,134 @@ application-owned. `ref` and `onScroll` still reach the inner scroller.
|
|
|
199
190
|
The `SurfaceFollowing` story exercises streaming, collapse and pane resizing;
|
|
200
191
|
source/license/test provenance is recorded in `NOTICE`.
|
|
201
192
|
|
|
202
|
-
##
|
|
203
|
-
|
|
204
|
-
`
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
193
|
+
## Packed conversation pilot
|
|
194
|
+
|
|
195
|
+
After building, run `bun run check:packed-conversation` to pack the actual npm
|
|
196
|
+
artifact and install it into a disposable consumer without optional heavy peers.
|
|
197
|
+
The composition imports the documented conversation subpath and builds under
|
|
198
|
+
both default compiled and Solid source conditions. Headless Chromium and WebKit
|
|
199
|
+
check failed-draft retention, recovery, native IME candidate defaults and commit
|
|
200
|
+
latch, reader intent, keyboard jump focus and external Tailwind utility delivery.
|
|
201
|
+
The output records retained module paths, JS/gzip/CSS totals, font exclusion and
|
|
202
|
+
one Solid runtime. Its first measured baseline was 23,880/23,936 gzip JS bytes
|
|
203
|
+
(compiled/Solid) and 40,203 raw CSS bytes. The fixture gates 26 KiB gzip JS and
|
|
204
|
+
42 KiB raw CSS, alongside independent module exclusions. The packed Apache license
|
|
205
|
+
and all four selected KiroCrew attribution sections must be present. This pilot adds no server
|
|
206
|
+
and removes its temporary consumer.
|
|
207
|
+
|
|
208
|
+
A separate packed busy-action fixture imports only `BusySendButton`. Both
|
|
209
|
+
conditions and engines check disabled firing with live mode selection, the scoped
|
|
210
|
+
Tab cycle, focus restoration, action-only execution, unavailable-mode recovery
|
|
211
|
+
and square-control token delivery (24 check groups, plus the conversation's 28).
|
|
212
|
+
Its measured gzip JS baseline is 50,308/50,429 bytes with a separate 50 KiB cap;
|
|
213
|
+
both fixtures share the 42 KiB raw CSS cap. Their module graphs must exclude each
|
|
214
|
+
other's unrelated components as well as charts, editors, terminal/highlighter,
|
|
215
|
+
theme JS, fonts and workshop assets. Tailwind scans the required external source
|
|
216
|
+
folders explicitly; this check does not assume consumer node_modules scanning.
|
|
217
|
+
|
|
218
|
+
This lane complements `check:packed-consumer`; it does not replace its required
|
|
219
|
+
root imports, lightweight controls, overlay and shell checks. Chart and Carousel use explicit optional-engine subpaths; core root imports do not
|
|
220
|
+
require their peers. The root-contract lane independently checks that API. These
|
|
221
|
+
composition fixtures do not certify full donor Chat, rendered Dev/Chat state
|
|
222
|
+
restoration or production adoption.
|
|
216
223
|
|
|
217
224
|
## Licence
|
|
218
225
|
|
|
219
226
|
Apache-2.0.
|
|
220
227
|
|
|
228
|
+
## Busy composer action
|
|
229
|
+
|
|
230
|
+
Square icon controls use the control-height tokens through the Tailwind `--size`
|
|
231
|
+
mapping; `--spacing-control-*` remains the separate inline-padding ladder.
|
|
232
|
+
Text controls, icon buttons and toggles share the same height in both densities.
|
|
233
|
+
Dimensions remain rem-based and follow the consumer's root font size. The browser
|
|
234
|
+
geometry lane checks all six rungs, heights and padding under both themes/densities.
|
|
235
|
+
|
|
236
|
+
`BusySendButton` translates KiroCrew's split fire/mode-picker composition. Pass
|
|
237
|
+
controlled `mode`, `onModeChange` and `onFire`. `disabled` prevents firing while
|
|
238
|
+
leaving mode choice available before typing; `selectionDisabled` gates choosing.
|
|
239
|
+
Inject `unavailable` reasons for unsupported or unauthorized modes: rows remain
|
|
240
|
+
visible, and the selected action cannot fire. Supply `alternateActionHint` only
|
|
241
|
+
when the host implements the described keyboard chord. The component adds no
|
|
242
|
+
keyboard chord, preference storage, runtime command or queue. Persistence and
|
|
243
|
+
same-session preference synchronization remain application-owned.
|
|
244
|
+
|
|
245
|
+
Kobalte owns the menu and focus lifecycle. Its Tab prevention lacks row cycling,
|
|
246
|
+
so a menu-scoped donor translation cycles enabled rows without a document listener.
|
|
247
|
+
Stories cover before-typing, working,
|
|
248
|
+
unavailable and read-only states. `bun run test:components` checks the isolated
|
|
249
|
+
Solid composition headlessly in Chromium and WebKit. Full Chat composition,
|
|
250
|
+
packed distribution and real consumer/native acceptance remain separate gates.
|
|
251
|
+
|
|
252
|
+
## Composed Chat input pilot
|
|
253
|
+
|
|
254
|
+
`ChatComposer` translates the pinned Kiro composer hierarchy: knowledge context,
|
|
255
|
+
follow-ups and adjacent band, approval/notices, staged content, input/action
|
|
256
|
+
rows and the context shelf. It composes the existing IME and busy-action units.
|
|
257
|
+
Its optional controlled `collapse` contract unmounts input and shelf and replaces
|
|
258
|
+
them with a labeled bar showing the waiting draft's first line. Collapse keeps
|
|
259
|
+
the host draft and caret selection; `controlRef` exposes instance-scoped
|
|
260
|
+
`focus()`/`expandAndFocus()` instead of a global shortcut or broadcast.
|
|
261
|
+
|
|
262
|
+
The host supplies `value`, `onValueChange` and `onSubmit({text, action})`; it owns
|
|
263
|
+
attachments and runtime authority and clears its draft only after confirmation.
|
|
264
|
+
The shared input guards pending delivery, reports failure, visibly blocks
|
|
265
|
+
unsupported delivery and fences local feedback on `resetKey`. Enter follows the
|
|
266
|
+
controlled busy mode, while Ctrl/Cmd+Enter requests the other supported busy
|
|
267
|
+
action. `sendableActions` declares non-text payload eligibility per action: a
|
|
268
|
+
reference-only draft can send or queue without becoming steerable. Explicit false
|
|
269
|
+
also vetoes delivery when the draft contains text; alternate-action hints appear
|
|
270
|
+
only when that action is eligible. Mode selection
|
|
271
|
+
itself never fires. `approvalFocus` is host-derived
|
|
272
|
+
presentation, not a permission decision. Agent and model controls remain distinct
|
|
273
|
+
host contributions in `context`.
|
|
274
|
+
|
|
275
|
+
This is an unshipped release proposal for UI issue #21, dependent on the
|
|
276
|
+
packing/IME/follow/busy PRs #16/#18/#19/#20. It is not full donor Chat,
|
|
277
|
+
canonical runtime restoration or application adoption. The donor's paste-token
|
|
278
|
+
editor, sent-prompt undo/history, manual resize, upload/skill/voice/optimizer and
|
|
279
|
+
stop/resume operations are not claimed by these ports. They require their own
|
|
280
|
+
mapped reusable behavior or application composition as the owning issues specify.
|
|
281
|
+
|
|
282
|
+
The composed-input packed fixture checks collapse/draft retention, shelf unmount,
|
|
283
|
+
focus restoration, failed-delivery recovery, controlled busy mode, its alternate
|
|
284
|
+
gesture, native IME defaults and external Tailwind styles under both exports and
|
|
285
|
+
both engines, including reference-only queue eligibility/steer refusal and the
|
|
286
|
+
pending-delivery state with its explicitly scanned spinner CSS. Its measured gzip JS baseline is 53,344/53,435 bytes with a 54 KiB cap
|
|
287
|
+
and 42,366 raw CSS bytes under the shared 42 KiB cap. The three browser fixtures total 100
|
|
288
|
+
check groups, with the native Node SSR expanded/collapsed checks reported separately, retain one Solid runtime/JS chunk each, and exclude unrelated units.
|
|
289
|
+
All four selected Kiro NOTICE sections and the license must survive the tarball.
|
|
290
|
+
Native CSS content sizing replaces live-field measurement on the two verified
|
|
291
|
+
engines, both of which support it; legacy-engine fallback is not claimed.
|
|
292
|
+
|
|
293
|
+
The release gate `bun run check:packed-conversation` installs the actual tarball
|
|
294
|
+
with optional engines absent, checks compiled and Solid browser conditions in
|
|
295
|
+
Chromium and WebKit, and compiles installed Solid source for native Node SSR.
|
|
296
|
+
The expanded server output includes the input and context; collapsed output
|
|
297
|
+
keeps the draft preview while omitting both. Browser cases check opaque menu
|
|
298
|
+
surfaces, control sizing, streaming follow, IME ownership, draft recovery,
|
|
299
|
+
collapse/focus, busy actions and pending spinner styling.
|
|
300
|
+
|
|
301
|
+
External CSS discovery includes the exact component files used by the fixture,
|
|
302
|
+
Button's `src/lib/variants.ts`, and menu compositions' `src/lib/overlay.ts`.
|
|
303
|
+
`node_modules` is excluded from automatic Tailwind scanning; importing a
|
|
304
|
+
stylesheet alone does not discover these shared class strings. Stories are
|
|
305
|
+
excluded from discovery. Complete measured raw CSS is 37,060 bytes for plain
|
|
306
|
+
conversation, 40,644 for busy controls, and 42,366 for composed input; all remain
|
|
307
|
+
under the existing 42 KiB cap. Existing gzip JS caps remain 26, 50 and 54 KiB,
|
|
308
|
+
respectively. This fixture proves the published component contract; mounted
|
|
309
|
+
Adea/Cortana services, hydration and manual IME/assistive-technology acceptance
|
|
310
|
+
remain application evidence lanes.
|
|
311
|
+
|
|
312
|
+
`sendableActions` is the host's payload eligibility contract: explicit `false`
|
|
313
|
+
refuses that action even with typed text, explicit `true` supports structured
|
|
314
|
+
payloads without text, and omitted entries fall back to nonempty text. Selecting
|
|
315
|
+
an unavailable action cannot override this contract through keyboard delivery.
|
|
316
|
+
|
|
317
|
+
Local packed interaction gates require `bunx playwright install chromium webkit`
|
|
318
|
+
after dependency installation. On Linux, use `--with-deps` when required system
|
|
319
|
+
libraries are absent. Automation uses headless disposable browser contexts.
|
|
320
|
+
|
|
221
321
|
## Binary layout model checkpoint
|
|
222
322
|
|
|
223
323
|
UI issue #22 extracts the existing attributed bb/Muxy Adea adaptation rather
|
package/dist/NOTICE
CHANGED
|
@@ -49,87 +49,35 @@ Origin UI / coss (AGPL-3.0-or-later) was consulted for visual ideas only. No
|
|
|
49
49
|
code, class string, or asset from that project is reproduced here, because its
|
|
50
50
|
licence is incompatible with this distribution.
|
|
51
51
|
|
|
52
|
-
## Strict binary layout extracted from the accepted Adea donor port
|
|
53
|
-
|
|
54
|
-
`packages/ui/src/components/layout/split-layout/model.ts` is extracted from
|
|
55
|
-
Adea `packages/dev-view/src/layout/operations.ts` at
|
|
56
|
-
`0322ab09ff5e9775bfddc0bf2d81e1df436dbef7`, whose MIT portions substantially
|
|
57
|
-
translate bb `apps/app/src/lib/split-layout/ops.ts` at
|
|
58
|
-
`52a9256373d4d36f9b60e9e2a7f333464091a2ac` and Muxy
|
|
59
|
-
`Muxy/Models/Workspace/SplitNode.swift` at
|
|
60
|
-
`5c5be8697c57a2fe70cda97fdbaf7c912e2e31b6`.
|
|
61
|
-
|
|
62
|
-
Copyright (c) 2026 Michael Yong
|
|
63
|
-
Copyright (c) 2026 Muxy
|
|
64
|
-
|
|
65
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
66
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
67
|
-
in the Software without restriction, including without limitation the rights
|
|
68
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
69
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
70
|
-
furnished to do so, subject to the following conditions:
|
|
71
52
|
|
|
72
|
-
|
|
73
|
-
copies or substantial portions of the Software.
|
|
74
|
-
|
|
75
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
76
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
77
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
78
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
79
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
80
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
81
|
-
SOFTWARE.
|
|
82
|
-
|
|
83
|
-
The accepted strict binary representation, reading-order insertion, parent
|
|
84
|
-
collapse, exact leaf identity, resize/normalize, move-at-cap and undo semantics
|
|
85
|
-
are retained. Opaque host leaves replace private domain types and the host
|
|
86
|
-
supplies the last-pane placeholder. Construction validates visual identities
|
|
87
|
-
and structural bounds; application scope/persistence, thread/runtime identity,
|
|
88
|
-
harness launch and process authority are excluded. Nearest test behavior from
|
|
89
|
-
Adea `packages/dev-view/tests/layout.test.ts` and bb `ops.test.ts` is preserved
|
|
90
|
-
where it applies to the accepted binary model. The accessible renderer and
|
|
91
|
-
application adoption remain separate gates under UI issue #22.
|
|
53
|
+
## Composer IME input ownership translated from KiroCrew
|
|
92
54
|
|
|
93
|
-
|
|
55
|
+
`packages/ui/src/components/conversation/ime-guard.ts` and its MessageComposer
|
|
56
|
+
binding substantially translate the native latch and textarea-scoped lifecycle
|
|
57
|
+
from `website/src/hooks/useImeGuard.ts`, pinned at KiroCrew revision
|
|
58
|
+
`283e136c0f902e965a535a7c9548c57c7504fed0`.
|
|
94
59
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
through generic callbacks, stable keyed leaf owners and Corvu separators.
|
|
100
|
-
It excludes application commands, persistence, harness/thread authority and
|
|
101
|
-
manual pointer listeners. This renderer is independently written against the
|
|
102
|
-
accepted model; it is not a port of Muxy's native UI or an additional layout tree.
|
|
103
|
-
The MIT attribution and permission above cover the translated frame algorithm.
|
|
60
|
+
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
61
|
+
This product includes software developed at Amazon.com, Inc.
|
|
62
|
+
(https://www.amazon.com/).
|
|
63
|
+
Licensed under the Apache License, Version 2.0.
|
|
104
64
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
65
|
+
Retained: native isComposing/keyCode229 signals, the 50ms post-composition window,
|
|
66
|
+
back-to-back composition fencing, native candidate default actions, and recovery
|
|
67
|
+
on focus/blur. Solid owner cleanup replaces React effects/ref ownership; native
|
|
68
|
+
propagation replaces React's synthetic-event half. A repeated compositionend
|
|
69
|
+
replaces the previous timer so an older expiry cannot release the latest window.
|
|
70
|
+
The document-latch/focus-trap branch is not copied: this is one textarea's send
|
|
71
|
+
binding, and maintained Kobalte primitives retain overlay focus authority.
|
|
110
72
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
Apache License, Version 2.0 (see LICENSE).
|
|
119
|
-
Destination: packages/ui/src/components/conversation/busy-send-button.tsx
|
|
73
|
+
Browser integration tests translate relevant cases from
|
|
74
|
+
`website/src/test/SideChat.imeEnter.test.tsx` and the lifecycle/window cases in
|
|
75
|
+
`website/src/hooks/useImeGuard.documentLatch.test.tsx`; React/Redux/query/API test
|
|
76
|
+
providers are replaced by a controlled Solid fixture. No React dependency,
|
|
77
|
+
service transport, dictation engine, font, asset or document listener is copied.
|
|
78
|
+
This is selected-unit hardening, not a claim that the full KiroCrew composer,
|
|
79
|
+
goal flow or Adea runtime-session Chat has been ported or integrated.
|
|
120
80
|
|
|
121
|
-
The split fire/mode-picker structure, descriptions, independent disabled-fire
|
|
122
|
-
state, selected radio treatment and conditional alternate-action hint are
|
|
123
|
-
substantially translated to Solid and the shared design system. Kobalte owns
|
|
124
|
-
portal positioning, arrow navigation, dismissal and focus restoration. Its
|
|
125
|
-
Tab prevention lacks row cycling, so the donor cycle is translated as a scoped
|
|
126
|
-
menu handler over enabled rows; no document listener or manual focus trap.
|
|
127
|
-
Donor per-slot storage/migration/broadcast, i18n/platform lookup, React runtime,
|
|
128
|
-
manual portal and document listeners are not copied. Applications inject mode,
|
|
129
|
-
action and unavailable reasons. No runtime queue or force-reset authority added.
|
|
130
|
-
Nearest tests: BusySendButton.menuKeyboard.test.tsx and
|
|
131
|
-
BusySendButton.slotScope.test.tsx; controlled mode replaces donor storage tests,
|
|
132
|
-
while keyboard/focus expectations are exercised in Chromium and WebKit.
|
|
133
81
|
## Plain transcript follow translated from KiroCrew
|
|
134
82
|
|
|
135
83
|
`packages/ui/src/components/conversation/scroll-follow-core.ts`,
|
|
@@ -161,34 +109,55 @@ Bun/browser integration and deterministic bounded grids replace React/jsdom,
|
|
|
161
109
|
Vitest and fast-check without adding dependencies. The full Chat product
|
|
162
110
|
composition and application adoption remain separate gates.
|
|
163
111
|
|
|
164
|
-
|
|
112
|
+
Busy composer action translated from KiroCrew
|
|
113
|
+
--------------------------------------------
|
|
114
|
+
Original: website/src/components/BusySendButton.tsx
|
|
115
|
+
Also translated: website/src/hooks/useMenuKeyboard.ts (enabled-row Tab cycle)
|
|
116
|
+
Revision: 283e136c0f902e965a535a7c9548c57c7504fed0
|
|
117
|
+
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
118
|
+
This product includes software developed at Amazon.com, Inc.
|
|
119
|
+
Apache License, Version 2.0 (see LICENSE).
|
|
120
|
+
Destination: packages/ui/src/components/conversation/busy-send-button.tsx
|
|
165
121
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
122
|
+
The split fire/mode-picker structure, descriptions, independent disabled-fire
|
|
123
|
+
state, selected radio treatment and conditional alternate-action hint are
|
|
124
|
+
substantially translated to Solid and the shared design system. Kobalte owns
|
|
125
|
+
portal positioning, arrow navigation, dismissal and focus restoration. Its
|
|
126
|
+
Tab prevention lacks row cycling, so the donor cycle is translated as a scoped
|
|
127
|
+
menu handler over enabled rows; no document listener or manual focus trap.
|
|
128
|
+
Donor per-slot storage/migration/broadcast, i18n/platform lookup, React runtime,
|
|
129
|
+
manual portal and document listeners are not copied. Applications inject mode,
|
|
130
|
+
action and unavailable reasons. No runtime queue or force-reset authority added.
|
|
131
|
+
Nearest tests: BusySendButton.menuKeyboard.test.tsx and
|
|
132
|
+
BusySendButton.slotScope.test.tsx; controlled mode replaces donor storage tests,
|
|
133
|
+
while keyboard/focus expectations are exercised in Chromium and WebKit.
|
|
134
|
+
|
|
135
|
+
## Composed input and reading collapse translated from KiroCrew
|
|
136
|
+
|
|
137
|
+
`packages/ui/src/components/conversation/chat-composer.tsx` substantially
|
|
138
|
+
translates the composer assembly and scoped reading-collapse interactions from
|
|
139
|
+
`website/src/components/ChatInput.tsx`, pinned at
|
|
169
140
|
`283e136c0f902e965a535a7c9548c57c7504fed0`.
|
|
170
141
|
|
|
171
142
|
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
172
143
|
This product includes software developed at Amazon.com, Inc.
|
|
173
|
-
(https://www.amazon.com/).
|
|
174
|
-
Licensed under the Apache License, Version 2.0.
|
|
175
|
-
|
|
176
|
-
Retained: native isComposing/keyCode229 signals, the 50ms post-composition window,
|
|
177
|
-
back-to-back composition fencing, native candidate default actions, and recovery
|
|
178
|
-
on focus/blur. Solid owner cleanup replaces React effects/ref ownership; native
|
|
179
|
-
propagation replaces React's synthetic-event half. A repeated compositionend
|
|
180
|
-
replaces the previous timer so an older expiry cannot release the latest window.
|
|
181
|
-
The document-latch/focus-trap branch is not copied: this is one textarea's send
|
|
182
|
-
binding, and maintained Kobalte primitives retain overlay focus authority.
|
|
183
|
-
|
|
184
|
-
Browser integration tests translate relevant cases from
|
|
185
|
-
`website/src/test/SideChat.imeEnter.test.tsx` and the lifecycle/window cases in
|
|
186
|
-
`website/src/hooks/useImeGuard.documentLatch.test.tsx`; React/Redux/query/API test
|
|
187
|
-
providers are replaced by a controlled Solid fixture. No React dependency,
|
|
188
|
-
service transport, dictation engine, font, asset or document listener is copied.
|
|
189
|
-
This is selected-unit hardening, not a claim that the full KiroCrew composer,
|
|
190
|
-
goal flow or Adea runtime-session Chat has been ported or integrated.
|
|
144
|
+
(https://www.amazon.com/). Licensed under the Apache License, Version 2.0.
|
|
191
145
|
|
|
146
|
+
Retained: knowledge/follow-up/band order, approval and notice surfaces, staged
|
|
147
|
+
content, distinct input action groups, context shelf, opt-in reading collapse,
|
|
148
|
+
visible labeled restoration and first-line draft preview. The input and shelf
|
|
149
|
+
unmount while collapsed; the host retains the draft. Menu actions and focus
|
|
150
|
+
restore translate applicable cases from `ChatInput.collapse.test.tsx`.
|
|
151
|
+
|
|
152
|
+
Solid ownership and maintained Kobalte menus replace React/motion/manual portals.
|
|
153
|
+
A scoped control replaces the global composer lookup and expand broadcast,
|
|
154
|
+
avoiding ambiguous focus when two conversations are present. Controlled host
|
|
155
|
+
collapse replaces localStorage; no shared preference, session store, runtime,
|
|
156
|
+
permission, upload, skill, voice or optimizer authority is copied. Input IME and
|
|
157
|
+
busy-action behavior compose the separately attributed units above. Caret
|
|
158
|
+
selection is retained for reading collapse and local delivery feedback is fenced
|
|
159
|
+
to an injected host reset key. Full Chat composition and product adoption remain
|
|
160
|
+
separate gates.
|
|
192
161
|
## Appearance editor translated from Zeron
|
|
193
162
|
|
|
194
163
|
The System/Light/Dark miniature composition, palette bands, theme selectors,
|
|
@@ -239,3 +208,62 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
239
208
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
240
209
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
241
210
|
SOFTWARE.
|
|
211
|
+
|
|
212
|
+
## Strict binary layout extracted from the accepted Adea donor port
|
|
213
|
+
|
|
214
|
+
`packages/ui/src/components/layout/split-layout/model.ts` is extracted from
|
|
215
|
+
Adea `packages/dev-view/src/layout/operations.ts` at
|
|
216
|
+
`0322ab09ff5e9775bfddc0bf2d81e1df436dbef7`, whose MIT portions substantially
|
|
217
|
+
translate bb `apps/app/src/lib/split-layout/ops.ts` at
|
|
218
|
+
`52a9256373d4d36f9b60e9e2a7f333464091a2ac` and Muxy
|
|
219
|
+
`Muxy/Models/Workspace/SplitNode.swift` at
|
|
220
|
+
`5c5be8697c57a2fe70cda97fdbaf7c912e2e31b6`.
|
|
221
|
+
|
|
222
|
+
Copyright (c) 2026 Michael Yong
|
|
223
|
+
Copyright (c) 2026 Muxy
|
|
224
|
+
|
|
225
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
226
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
227
|
+
in the Software without restriction, including without limitation the rights
|
|
228
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
229
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
230
|
+
furnished to do so, subject to the following conditions:
|
|
231
|
+
|
|
232
|
+
The above copyright notice and this permission notice shall be included in all
|
|
233
|
+
copies or substantial portions of the Software.
|
|
234
|
+
|
|
235
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
236
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
237
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
238
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
239
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
240
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
241
|
+
SOFTWARE.
|
|
242
|
+
|
|
243
|
+
The accepted strict binary representation, reading-order insertion, parent
|
|
244
|
+
collapse, exact leaf identity, resize/normalize, move-at-cap and undo semantics
|
|
245
|
+
are retained. Opaque host leaves replace private domain types and the host
|
|
246
|
+
supplies the last-pane placeholder. Construction validates visual identities
|
|
247
|
+
and structural bounds; application scope/persistence, thread/runtime identity,
|
|
248
|
+
harness launch and process authority are excluded. Nearest test behavior from
|
|
249
|
+
Adea `packages/dev-view/tests/layout.test.ts` and bb `ops.test.ts` is preserved
|
|
250
|
+
where it applies to the accepted binary model. The accessible renderer and
|
|
251
|
+
application adoption remain separate gates under UI issue #22.
|
|
252
|
+
|
|
253
|
+
### Binary frame renderer continuation
|
|
254
|
+
|
|
255
|
+
`geometry.ts` translates `areaFrames` from the pinned Muxy source above. Its
|
|
256
|
+
fractional frames, horizontal/vertical offsets and exact node references are
|
|
257
|
+
retained; ratio repair uses the accepted 0.1–0.9 range rather than Muxy's 0–1.
|
|
258
|
+
`split-layout.tsx` adapts the accepted Adea pane-header/close/focus behavior
|
|
259
|
+
through generic callbacks, stable keyed leaf owners and Corvu separators.
|
|
260
|
+
It excludes application commands, persistence, harness/thread authority and
|
|
261
|
+
manual pointer listeners. This renderer is independently written against the
|
|
262
|
+
accepted model; it is not a port of Muxy's native UI or an additional layout tree.
|
|
263
|
+
The MIT attribution and permission above cover the translated frame algorithm.
|
|
264
|
+
|
|
265
|
+
The pane-drag continuation retains Adea's nearest-edge placement ordering and
|
|
266
|
+
pane-title gesture, replacing plaintext leaf IDs and string casts with typed
|
|
267
|
+
intent, an instance-local active drag payload, and cancellation/removal checks.
|
|
268
|
+
Header action composition injects application keyboard controls without owning
|
|
269
|
+
shortcuts or domain transitions. No new upstream source or license is introduced.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type JSX } from 'solid-js';
|
|
2
|
+
import { type BusySendButtonProps, type BusySendMode } from './busy-send-button';
|
|
3
|
+
export type ChatComposerControl = {
|
|
4
|
+
/** Focus this instance; false when it is unavailable or collapsed. */
|
|
5
|
+
focus: () => boolean;
|
|
6
|
+
/** A typing intent, unlike merely navigating to a conversation. */
|
|
7
|
+
expandAndFocus: () => boolean;
|
|
8
|
+
};
|
|
9
|
+
export type ChatComposerProps = {
|
|
10
|
+
value: string;
|
|
11
|
+
onValueChange: (value: string) => void;
|
|
12
|
+
/** The host owns attachments and delivery; text/action are captured at the gesture. */
|
|
13
|
+
onSubmit: (input: {
|
|
14
|
+
text: string;
|
|
15
|
+
action: 'send' | BusySendMode;
|
|
16
|
+
}) => void | Promise<void>;
|
|
17
|
+
/** Host scope fence; changes discard local feedback, not the host draft. */
|
|
18
|
+
resetKey?: unknown;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
readOnly?: boolean;
|
|
21
|
+
/** A visible capability or connectivity reason. */
|
|
22
|
+
blockedReason?: string;
|
|
23
|
+
placeholder?: string;
|
|
24
|
+
inputLabel?: string;
|
|
25
|
+
/** Opt-in and controlled: the library neither persists nor broadcasts it. */
|
|
26
|
+
collapse?: {
|
|
27
|
+
value: boolean;
|
|
28
|
+
onChange: (value: boolean) => void;
|
|
29
|
+
};
|
|
30
|
+
controlRef?: (control: ChatComposerControl | undefined) => void;
|
|
31
|
+
/** Host payload eligibility by action; explicit false refuses even a nonempty draft. */
|
|
32
|
+
sendableActions?: Partial<Record<'send' | BusySendMode, boolean>>;
|
|
33
|
+
busy?: Omit<BusySendButtonProps, 'onFire' | 'disabled' | 'alternateActionHint'>;
|
|
34
|
+
knowledge?: JSX.Element;
|
|
35
|
+
followUps?: JSX.Element;
|
|
36
|
+
band?: JSX.Element;
|
|
37
|
+
approval?: JSX.Element;
|
|
38
|
+
notices?: JSX.Element;
|
|
39
|
+
attachments?: JSX.Element;
|
|
40
|
+
leadingActions?: JSX.Element;
|
|
41
|
+
trailingActions?: JSX.Element;
|
|
42
|
+
/** Host-contributed menu items; no upload, skill or permission services here. */
|
|
43
|
+
menuItems?: JSX.Element;
|
|
44
|
+
context?: JSX.Element;
|
|
45
|
+
/** Host derives this from the pending approval presentation, not UI policy. */
|
|
46
|
+
approvalFocus?: boolean;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Kiro's composer assembly: context/options, adjacent band, approval/notices,
|
|
50
|
+
* staged content, input/action groups and a context shelf. Reading collapse
|
|
51
|
+
* really unmounts the input and shelf and offers a labeled way back with draft
|
|
52
|
+
* preview. The host retains the only draft, identities, preferences and services.
|
|
53
|
+
*
|
|
54
|
+
* Kobalte owns the options menu. Scoped imperative typing intent replaces the
|
|
55
|
+
* donor global lookup/broadcast so a second composer cannot receive this draft
|
|
56
|
+
* or focus. No animation starts from hidden geometry, no global shortcut, and no
|
|
57
|
+
* runtime/permission/voice/optimizer authority is copied. More specific chips,
|
|
58
|
+
* approval decisions and staged-content semantics are supplied by their owners.
|
|
59
|
+
*/
|
|
60
|
+
export declare function ChatComposer(props: ChatComposerProps): JSX.Element;
|
|
61
|
+
//# sourceMappingURL=chat-composer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-composer.d.ts","sourceRoot":"","sources":["../../../src/components/conversation/chat-composer.tsx"],"names":[],"mappings":"AAOA,OAAO,EAA4D,KAAK,GAAG,EAAE,MAAM,UAAU,CAAA;AAS7F,OAAO,EAAkB,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGhG,MAAM,MAAM,mBAAmB,GAAG;IAChC,sEAAsE;IACtE,KAAK,EAAE,MAAM,OAAO,CAAA;IACpB,mEAAmE;IACnE,cAAc,EAAE,MAAM,OAAO,CAAA;CAC9B,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,uFAAuF;IACvF,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1F,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;IACjE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,KAAK,IAAI,CAAA;IAC/D,wFAAwF;IACxF,eAAe,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;IACjE,IAAI,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,UAAU,GAAG,qBAAqB,CAAC,CAAA;IAC/E,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACvB,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IAC5B,eAAe,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IAC7B,iFAAiF;IACjF,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACrB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,eAkTpD"}
|