@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 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
- ## Busy composer action
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
- `BusySendButton` translates KiroCrew's split fire/mode-picker composition. Pass
165
- controlled `mode`, `onModeChange` and `onFire`. `disabled` prevents firing while
166
- leaving mode choice available before typing; `selectionDisabled` gates choosing.
167
- Inject `unavailable` reasons for unsupported or unauthorized modes: rows remain
168
- visible, and the selected action cannot fire. Supply `alternateActionHint` only
169
- when the host implements the described keyboard chord. The component adds no
170
- keyboard chord, preference storage, runtime command or queue. Persistence and
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
- Kobalte owns the menu and focus lifecycle. Its Tab prevention lacks row cycling,
174
- so a menu-scoped donor translation cycles enabled rows without a document listener.
175
- Stories cover before-typing, working,
176
- unavailable and read-only states. `bun run test:components` checks the isolated
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
- ## Composer keyboard behavior
203
-
204
- `MessageComposer` preserves native IME candidate commits and suppresses sending
205
- during composition, including the 50 ms commit window when browser flags have
206
- already cleared. A separate Enter sends after that window; Shift+Enter remains
207
- a soft break. A host or menu that already prevented the event keeps ownership.
208
- The selected KiroCrew textarea guard is translated to Solid ownership; it adds
209
- no document listener or application session state. Source and license details
210
- are retained in `NOTICE`.
211
-
212
- Run `bun run test:components` for the built Solid component contracts in
213
- Chromium and WebKit. The event-sequence tests exercise browser handling of
214
- composition flags, timers and focus recovery; manual operating-system IME
215
- acceptance and each application's mounted chat journey remain separate gates.
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
- The above copyright notice and this permission notice shall be included in all
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
- ### Binary frame renderer continuation
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
- `geometry.ts` translates `areaFrames` from the pinned Muxy source above. Its
96
- fractional frames, horizontal/vertical offsets and exact node references are
97
- retained; ratio repair uses the accepted 0.1–0.9 range rather than Muxy's 0–1.
98
- `split-layout.tsx` adapts the accepted Adea pane-header/close/focus behavior
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
- The pane-drag continuation retains Adea's nearest-edge placement ordering and
106
- pane-title gesture, replacing plaintext leaf IDs and string casts with typed
107
- intent, an instance-local active drag payload, and cancellation/removal checks.
108
- Header action composition injects application keyboard controls without owning
109
- shortcuts or domain transitions. No new upstream source or license is introduced.
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
- Busy composer action translated from KiroCrew
112
- --------------------------------------------
113
- Original: website/src/components/BusySendButton.tsx
114
- Also translated: website/src/hooks/useMenuKeyboard.ts (enabled-row Tab cycle)
115
- Revision: 283e136c0f902e965a535a7c9548c57c7504fed0
116
- Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
117
- This product includes software developed at Amazon.com, Inc.
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
- ## Composer IME input ownership translated from KiroCrew
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
- `packages/ui/src/components/conversation/ime-guard.ts` and its MessageComposer
167
- binding substantially translate the native latch and textarea-scoped lifecycle
168
- from `website/src/hooks/useImeGuard.ts`, pinned at KiroCrew revision
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"}