@aparte/core 0.16.7 → 0.16.9
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/dist/client/aparte-client.d.ts +57 -2
- package/dist/client/aparte-client.d.ts.map +1 -1
- package/dist/client/lifecycle-events.d.ts +8 -1
- package/dist/client/lifecycle-events.d.ts.map +1 -1
- package/dist/client/stream-adapter.d.ts +8 -0
- package/dist/client/stream-adapter.d.ts.map +1 -1
- package/dist/components/bubble/aparte-chat-bubble.d.ts +39 -18
- package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -1
- package/dist/components/chat/aparte-chat.d.ts +32 -25
- package/dist/components/chat/aparte-chat.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-action.d.ts +1 -1
- package/dist/components/composer/aparte-composer-add-attachment.d.ts +1 -1
- package/dist/components/composer/aparte-composer-attachments.d.ts +1 -1
- package/dist/components/composer/aparte-composer-attachments.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-cancel.d.ts +2 -2
- package/dist/components/composer/aparte-composer-cancel.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-input.d.ts +6 -6
- package/dist/components/composer/aparte-composer-send.d.ts +3 -3
- package/dist/components/composer/aparte-composer-send.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer.d.ts +9 -2
- package/dist/components/composer/aparte-composer.d.ts.map +1 -1
- package/dist/components/context/aparte-context.d.ts +0 -1
- package/dist/components/context/aparte-context.d.ts.map +1 -1
- package/dist/components/conversation-list/aparte-conversation-list.d.ts +11 -6
- package/dist/components/conversation-list/aparte-conversation-list.d.ts.map +1 -1
- package/dist/components/elicitation/aparte-elicitation.d.ts +20 -18
- package/dist/components/elicitation/aparte-elicitation.d.ts.map +1 -1
- package/dist/components/scroll-rail/aparte-scroll-rail.d.ts +11 -3
- package/dist/components/scroll-rail/aparte-scroll-rail.d.ts.map +1 -1
- package/dist/components/sidebar/aparte-sidebar.d.ts +16 -2
- package/dist/components/sidebar/aparte-sidebar.d.ts.map +1 -1
- package/dist/components/split/aparte-split.d.ts +9 -4
- package/dist/components/split/aparte-split.d.ts.map +1 -1
- package/dist/components/status/aparte-chat-status.d.ts +44 -5
- package/dist/components/status/aparte-chat-status.d.ts.map +1 -1
- package/dist/components/viewport/aparte-chat-viewport.d.ts +27 -4
- package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -1
- package/dist/config/icon-provider.d.ts +6 -0
- package/dist/config/icon-provider.d.ts.map +1 -1
- package/dist/config/locale.d.ts +3 -1
- package/dist/config/locale.d.ts.map +1 -1
- package/dist/custom-elements.json +13010 -12737
- package/dist/{dialog-triggers-Dw_DIlQ7.js → dialog-triggers-CApC7K1I.js} +119 -44
- package/dist/dialog-triggers-CApC7K1I.js.map +1 -0
- package/dist/elicitation/panel.d.ts.map +1 -1
- package/dist/generated/element-attributes.d.ts +13 -3
- package/dist/generated/element-attributes.d.ts.map +1 -1
- package/dist/{glyphs-DQTeOj4w.js → glyphs-C8z2oJUg.js} +36 -27
- package/dist/{glyphs-DQTeOj4w.js.map → glyphs-C8z2oJUg.js.map} +1 -1
- package/dist/icons/extended.d.ts +0 -6
- package/dist/icons/extended.d.ts.map +1 -1
- package/dist/icons/glyphs.d.ts +13 -4
- package/dist/icons/glyphs.d.ts.map +1 -1
- package/dist/icons.js +28 -31
- package/dist/icons.js.map +1 -1
- package/dist/index.css +946 -386
- package/dist/index.js +321 -89
- package/dist/index.js.map +1 -1
- package/dist/index.node.js +1 -1
- package/dist/interop/element-props.d.ts.map +1 -1
- package/dist/primitives/icon/aparte-icon.d.ts +1 -1
- package/dist/primitives/progress-spinner/aparte-progress-spinner.d.ts +2 -3
- package/dist/primitives/progress-spinner/aparte-progress-spinner.d.ts.map +1 -1
- package/dist/primitives/select/aparte-optgroup.d.ts +1 -1
- package/dist/primitives/select/aparte-optgroup.d.ts.map +1 -1
- package/dist/primitives/select/aparte-option.d.ts +4 -4
- package/dist/primitives/select/aparte-option.d.ts.map +1 -1
- package/dist/primitives/select/aparte-select.d.ts +43 -12
- package/dist/primitives/select/aparte-select.d.ts.map +1 -1
- package/dist/renderers/segments/code.d.ts.map +1 -1
- package/dist/renderers/segments/error.d.ts.map +1 -1
- package/dist/renderers/segments/thinking.d.ts.map +1 -1
- package/dist/renderers/segments/tool-call.d.ts.map +1 -1
- package/dist/types/events.d.ts +4 -2
- package/dist/types/events.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/dialog-triggers-Dw_DIlQ7.js.map +0 -1
|
@@ -85,7 +85,12 @@ export interface AparteClientOptions {
|
|
|
85
85
|
autoRegister?: boolean;
|
|
86
86
|
/**
|
|
87
87
|
* Conversation history strategy:
|
|
88
|
-
* - 'viewport' (default) —
|
|
88
|
+
* - 'viewport' (default) — sends every user/assistant turn up to the last answered
|
|
89
|
+
* one. A turn that errored, or is still in flight
|
|
90
|
+
* ('streaming' / 'pending'), is held back and does not move
|
|
91
|
+
* that cutoff; a turn a host seeded with NO `status` counts
|
|
92
|
+
* as answered, so a restored or server-rendered transcript
|
|
93
|
+
* goes out as history without inventing a status for it.
|
|
89
94
|
* - 'none' — sends only the current message (original behavior)
|
|
90
95
|
* - function — custom: receives viewport messages, returns AparteChatMessage[]
|
|
91
96
|
*/
|
|
@@ -366,9 +371,46 @@ export declare class AparteClient {
|
|
|
366
371
|
*/
|
|
367
372
|
private _asRenderTarget;
|
|
368
373
|
/**
|
|
369
|
-
*
|
|
374
|
+
* Which chat a render target BELONGS to — the id the lifecycle events must carry.
|
|
375
|
+
*
|
|
376
|
+
* Not `target.id`: the target is whatever renders, and an `<aparte-chat>` shell
|
|
377
|
+
* delegates that to its `.viewport`, which has no id. So every lifecycle event on
|
|
378
|
+
* a shell-shaped chat went out unstamped, and the receive side reads a missing id
|
|
379
|
+
* as "for every chat on the page" — deliberately, so a single-chat page needs no
|
|
380
|
+
* wiring. On a two-chat page one chat's turn therefore drove every composer.
|
|
381
|
+
*
|
|
382
|
+
* The climb is the same rule `aparte-composer._ownTargetId` uses on the receive
|
|
383
|
+
* side, and it has to be, or the two would disagree about which chat is which:
|
|
384
|
+
* the nearest `aparte-chat` / `[data-aparte-chat]` ancestor (or the element
|
|
385
|
+
* itself) that HAS an id. Deliberately not `chatBoundaryOf` — that returns the
|
|
386
|
+
* boundary whether or not it is identified, and an id-less boundary must fall
|
|
387
|
+
* through to the next one up rather than answer "no id".
|
|
388
|
+
*/
|
|
389
|
+
private _targetIdOf;
|
|
390
|
+
/**
|
|
391
|
+
* Convert AparteMessage[] to AparteChatMessage[] for re-submission (retry, edit).
|
|
392
|
+
*
|
|
393
|
+
* The SLICE is each caller's own business — retry cuts before the reply it is
|
|
394
|
+
* regenerating, edit cuts after the message being reworded, send cuts at the last
|
|
395
|
+
* answered turn. What a message CONTRIBUTES to the wire is not: send, retry and
|
|
396
|
+
* edit must not disagree about it, and they did. This one had no filter at all,
|
|
397
|
+
* so a failed turn and a turn stopped before its first token both went out as
|
|
398
|
+
* `{ role: 'assistant', content: '' }` — a claim the assistant said nothing, which
|
|
399
|
+
* some providers reject outright and the rest read as an empty reply worth
|
|
400
|
+
* imitating.
|
|
370
401
|
*/
|
|
371
402
|
private _messagesToChatMessages;
|
|
403
|
+
/**
|
|
404
|
+
* The one rule for what a message contributes to the wire.
|
|
405
|
+
*
|
|
406
|
+
* Not the slice — the contribution: a role the wire has (`user`/`assistant`), a
|
|
407
|
+
* turn that neither failed nor is still in flight, and text that is not empty.
|
|
408
|
+
*
|
|
409
|
+
* `_wireText` (not `m.content`): assistant replies stream their text into
|
|
410
|
+
* `segments`, leaving `content` as '', so without flattening every reply would be
|
|
411
|
+
* empty here and the drop below would swallow the whole transcript.
|
|
412
|
+
*/
|
|
413
|
+
private _wireHistory;
|
|
372
414
|
/** The "no model selected" warning is said once per client, not once per dropped send. */
|
|
373
415
|
private _warnedNoModel;
|
|
374
416
|
private _handleSend;
|
|
@@ -376,6 +418,19 @@ export declare class AparteClient {
|
|
|
376
418
|
* Build the initial messages array, prepending system prompts and conversation history.
|
|
377
419
|
*/
|
|
378
420
|
private _buildMessages;
|
|
421
|
+
/**
|
|
422
|
+
* A turn that has not finished yet. `status` is OPTIONAL on `AparteMessage`, so
|
|
423
|
+
* the question the history gates can ask is "is this still in flight?", never
|
|
424
|
+
* "is this completed?".
|
|
425
|
+
*
|
|
426
|
+
* The gates below used to ask the second one, and a host that SEEDS a transcript
|
|
427
|
+
* — restoring a saved conversation, hydrating a server-rendered one — has no
|
|
428
|
+
* reason to invent a status for turns that are already over. With none, the
|
|
429
|
+
* cutoff never advanced past 0 and the whole transcript was sliced away: the
|
|
430
|
+
* model got the new question with no context, and nothing in the UI said so,
|
|
431
|
+
* because the viewport still showed every message.
|
|
432
|
+
*/
|
|
433
|
+
private static _inFlight;
|
|
379
434
|
private _toHistoryMessages;
|
|
380
435
|
/**
|
|
381
436
|
* A message's text as the MODEL should read it — the one mapper both history
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-client.d.ts","sourceRoot":"","sources":["../../src/client/aparte-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAO9E,OAAO,KAAK,EAAE,kBAAkB,EAA+C,MAAM,qBAAqB,CAAC;AAC3G,OAAO,KAAK,EAAoC,aAAa,EAAsB,MAAM,mBAAmB,CAAC;AAG7G,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAkC,MAAM,kBAAkB,CAAC;AAsCxG;;;;;;;;GAQG;AACH,MAAM,MAAM,0BAA0B,GAAG,CACrC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAClE,MAAM,EAAE,WAAW,KAClB,OAAO,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAMH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAEvJ;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;IAE9C;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAElC;;OAEG;IACH,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEpG;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB
|
|
1
|
+
{"version":3,"file":"aparte-client.d.ts","sourceRoot":"","sources":["../../src/client/aparte-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,13 @@ export interface AparteLifecycleTarget {
|
|
|
38
38
|
* deliberately: it is a superset of the client copy's unconditional spread, so
|
|
39
39
|
* unifying on it cannot change any existing call, and it is the only difference
|
|
40
40
|
* between the two versions that was ever load-bearing.
|
|
41
|
+
*
|
|
42
|
+
* `targetId` is the id of the chat the target BELONGS to, and the caller has to say
|
|
43
|
+
* it, because `target.id` is not it. The target is whatever RENDERS — an
|
|
44
|
+
* `<aparte-chat>` shell delegates to its `.viewport`, which carries no id — so the
|
|
45
|
+
* stamp read empty for every shell-shaped chat, and a missing id means "for every
|
|
46
|
+
* chat on the page" on the receive side. `target.id` stays the fallback: it is right
|
|
47
|
+
* whenever the render target IS the chat host, which is the viewport-only shape.
|
|
41
48
|
*/
|
|
42
|
-
export declare function dispatchLifecycleEvent(target: AparteLifecycleTarget, name: string, detail: unknown): void;
|
|
49
|
+
export declare function dispatchLifecycleEvent(target: AparteLifecycleTarget, name: string, detail: unknown, targetId?: string): void;
|
|
43
50
|
//# sourceMappingURL=lifecycle-events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/client/lifecycle-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;CACxC;AAED
|
|
1
|
+
{"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/client/lifecycle-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,QAAQ,CAAC,EAAE,MAAM,GAClB,IAAI,CAMN"}
|
|
@@ -71,6 +71,14 @@ export interface CreateStreamAdapterOptions {
|
|
|
71
71
|
config: AparteConfig;
|
|
72
72
|
/** The streamed assistant message id (carried in the run events). */
|
|
73
73
|
messageId: string;
|
|
74
|
+
/**
|
|
75
|
+
* The id of the CHAT the target belongs to, stamped on every lifecycle event the
|
|
76
|
+
* adapter dispatches. The target is whatever renders — a shell's `.viewport`,
|
|
77
|
+
* which has no id of its own — so it cannot be read off the target, and an
|
|
78
|
+
* unstamped event is read as "for every chat on the page". Omitted, the dispatcher
|
|
79
|
+
* falls back to `target.id`, which is right for the viewport-only chat shape.
|
|
80
|
+
*/
|
|
81
|
+
targetId?: string;
|
|
74
82
|
}
|
|
75
83
|
/**
|
|
76
84
|
* Build the event → DOM adapter for one streamed message. Returns a synchronous
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-adapter.d.ts","sourceRoot":"","sources":["../../src/client/stream-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAKzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKtG;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAElD,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;AAEpG;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,aAAa,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IAClE,iBAAiB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1E,UAAU,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C,aAAa,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACzE,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAChD,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,0BAA0B;IACvC,4DAA4D;IAC5D,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kEAAkE;IAClE,MAAM,EAAE,YAAY,CAAC;IACrB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,sBAAsB,CAuK5F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,cAAc,CAAC,iBAAiB,CAAC,EACzC,MAAM,EAAE,WAAW,GACpB,aAAa,CAAC,iBAAiB,CAAC,CA4BlC"}
|
|
1
|
+
{"version":3,"file":"stream-adapter.d.ts","sourceRoot":"","sources":["../../src/client/stream-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAKzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKtG;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAElD,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;AAEpG;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,aAAa,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IAClE,iBAAiB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1E,UAAU,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C,aAAa,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACzE,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAChD,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,0BAA0B;IACvC,4DAA4D;IAC5D,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kEAAkE;IAClE,MAAM,EAAE,YAAY,CAAC;IACrB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,sBAAsB,CAuK5F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,cAAc,CAAC,iBAAiB,CAAC,EACzC,MAAM,EAAE,WAAW,GACpB,aAAa,CAAC,iBAAiB,CAAC,CA4BlC"}
|
|
@@ -60,60 +60,59 @@ import type { AparteSegment, AparteAttachment, AparteUsage, AparteMessage } from
|
|
|
60
60
|
* @fires {CustomEvent<AparteAttachmentPreviewEventDetail>} aparte-attachment-preview - An attached image was clicked, asking the app to open it full-size.
|
|
61
61
|
* @fires {CustomEvent<AparteLinkClickEventDetail>} aparte-link-click - A link in the message body is about to be followed. Cancelable: `preventDefault()` keeps the browser from navigating, so a host can route the link itself.
|
|
62
62
|
*
|
|
63
|
-
* @cssprop [--aparte-message-gap=
|
|
64
|
-
* @cssprop [--aparte-message-padding=
|
|
63
|
+
* @cssprop [--aparte-message-gap=var(--aparte-space-6)] - Gap between the avatar column and the body (the viewport reuses it between messages).
|
|
64
|
+
* @cssprop [--aparte-message-padding-block=var(--aparte-space-8)] - Vertical padding of one message row. (The composite `--aparte-message-padding` is gone: joined on `:root`, it froze both parts, and the narrow-container override of them never reached the row.)
|
|
65
|
+
* @cssprop [--aparte-message-padding-inline=var(--aparte-space-6)] - Horizontal padding of one message row.
|
|
65
66
|
* @cssprop [--aparte-message-max-width=800px] - Width of the centred message row.
|
|
66
67
|
*
|
|
67
|
-
* @cssprop [--aparte-message-content-radius=
|
|
68
|
-
* @cssprop [--aparte-message-content-padding=
|
|
68
|
+
* @cssprop [--aparte-message-content-radius=var(--aparte-radius-bubble)] - Radius of the painted content box.
|
|
69
|
+
* @cssprop [--aparte-message-content-padding=var(--aparte-space-5) var(--aparte-space-7)] - Padding of the USER box only; the assistant's content is plain full-width prose.
|
|
69
70
|
* @cssprop --aparte-message-content-bg-user - Background of the user box: a wash of `--aparte-primary` over `--aparte-surface-1`, derived in `theme.css` so a rebrand moves it (declare it to override).
|
|
70
71
|
* @cssprop [--aparte-message-content-bg-assistant=transparent] - Background of the assistant box — transparent on purpose (AI-chat convention, not messaging).
|
|
71
72
|
* @cssprop [--aparte-message-content-text-user=var(--aparte-text)] - Text colour inside the user box.
|
|
72
73
|
* @cssprop [--aparte-message-content-text-assistant=var(--aparte-text)] - Text colour inside the assistant box.
|
|
73
74
|
*
|
|
74
75
|
* @cssprop [--aparte-avatar-size=32px] - Square size of the avatar slot.
|
|
75
|
-
* @cssprop [--aparte-avatar-radius=
|
|
76
|
-
* @cssprop [--aparte-avatar-
|
|
76
|
+
* @cssprop [--aparte-avatar-radius-ratio=0.28] - Avatar corner radius, as a fraction of its size (the corner follows the ramp; 0.28 × 32px is the 9px it used to be).
|
|
77
|
+
* @cssprop [--aparte-avatar-initials-ratio=0.34] - Size of the initial, as a fraction of the avatar's size.
|
|
77
78
|
* @cssprop [--aparte-avatar-bg-user=var(--aparte-primary)] - Avatar background, user role.
|
|
78
79
|
* @cssprop [--aparte-avatar-text-user=var(--aparte-text-inverse)] - Avatar text colour, user role.
|
|
79
80
|
* @cssprop [--aparte-avatar-bg-assistant=var(--aparte-surface-3)] - Avatar background, assistant role.
|
|
80
|
-
* @cssprop [--aparte-avatar-text-assistant=var(--aparte-text
|
|
81
|
+
* @cssprop [--aparte-avatar-text-assistant=var(--aparte-text)] - Avatar text colour, assistant role.
|
|
81
82
|
* @cssprop [--aparte-avatar-image-user=none] - `background-image` for the user avatar — a logo with no AvatarProvider and no JS.
|
|
82
83
|
* @cssprop [--aparte-avatar-image-assistant=none] - `background-image` for the assistant avatar.
|
|
83
84
|
* @cssprop [--aparte-avatar-image-size=90%] - `background-size` for both avatar images.
|
|
84
85
|
*
|
|
85
|
-
* @cssprop [--aparte-name-font-size=
|
|
86
|
+
* @cssprop [--aparte-name-font-size=var(--aparte-font-size-md)] - Sender name in the header.
|
|
86
87
|
* @cssprop [--aparte-name-color=var(--aparte-text)] - Sender name colour.
|
|
87
|
-
* @cssprop [--aparte-timestamp-font-size=
|
|
88
|
+
* @cssprop [--aparte-timestamp-font-size=var(--aparte-font-size-sm)] - Timestamp in the header.
|
|
88
89
|
* @cssprop [--aparte-timestamp-color=var(--aparte-text-muted)] - Timestamp colour.
|
|
89
|
-
* @cssprop [--aparte-content-font-size=
|
|
90
|
+
* @cssprop [--aparte-content-font-size=var(--aparte-font-size-base)] - Body type size, applied to both the plain-content and the segments container.
|
|
90
91
|
* @cssprop [--aparte-content-color=var(--aparte-text)] - Body text colour.
|
|
91
92
|
* @cssprop [--aparte-content-line-height=var(--aparte-line-height-loose)] - Body line height.
|
|
92
93
|
*
|
|
93
94
|
* @cssprop [--aparte-attachments-max-height=140px] - Cap on the sent-attachment strip; past it the strip scrolls instead of growing.
|
|
94
|
-
* @cssprop [--aparte-attachment-image-size=
|
|
95
|
+
* @cssprop [--aparte-attachment-image-size=72px] - Tile size in the strip. The strip re-declares the global 72px down to 40px, since these are thumbnails inside a conversation.
|
|
95
96
|
* @cssprop [--aparte-thumb-radius=var(--aparte-radius-lg)] - Attachment tile radius (shared with the composer's preview tiles).
|
|
96
97
|
* @cssprop [--aparte-thumb-name-color=#ffffff] - Filename overlaid on a tile.
|
|
97
98
|
* @cssprop --aparte-thumb-name-scrim - Gradient behind that filename, so it stays legible over any image.
|
|
98
99
|
* @cssprop [--aparte-thumb-name-padding=14px 5px 4px] - Padding of the filename overlay.
|
|
99
100
|
*
|
|
100
|
-
* @cssprop [--aparte-action-bar-gap=
|
|
101
|
-
* @cssprop [--aparte-action-bar-btn-size=
|
|
101
|
+
* @cssprop [--aparte-action-bar-gap=var(--aparte-space-2)] - Gap between action buttons (and between the footer's two regions).
|
|
102
|
+
* @cssprop [--aparte-action-bar-btn-size=var(--aparte-btn-size-sm)] - Square size of an action button (the recipe's small step); also the footer's reserved height.
|
|
102
103
|
* @cssprop [--aparte-action-bar-btn-color=var(--aparte-text-muted)] - Action icon colour at rest.
|
|
103
104
|
* @cssprop [--aparte-action-bar-btn-hover-bg=var(--aparte-surface-2)] - Action button hover background (the branch arrows reuse it).
|
|
104
105
|
* @cssprop [--aparte-action-bar-btn-hover-color=var(--aparte-text)] - Action icon colour on hover.
|
|
105
106
|
*
|
|
106
|
-
* @cssprop [--aparte-branch-picker-gap=
|
|
107
|
-
* @cssprop [--aparte-branch-picker-btn-size=20px] - Square size of each arrow.
|
|
108
|
-
* @cssprop [--aparte-branch-picker-btn-icon-size=16px] - Glyph size inside an arrow.
|
|
107
|
+
* @cssprop [--aparte-branch-picker-gap=var(--aparte-space-2)] - Gap between the arrows and the position label.
|
|
109
108
|
* @cssprop [--aparte-branch-picker-btn-color=var(--aparte-text-muted)] - Arrow colour at rest.
|
|
110
109
|
* @cssprop [--aparte-branch-picker-btn-hover-color=var(--aparte-text)] - Arrow colour on hover (a disabled arrow is dimmed instead).
|
|
111
|
-
* @cssprop [--aparte-branch-picker-label-size=
|
|
110
|
+
* @cssprop [--aparte-branch-picker-label-size=var(--aparte-font-size-sm)] - Type size of the position label.
|
|
112
111
|
* @cssprop [--aparte-branch-picker-label-color=var(--aparte-text-muted)] - Colour of the position label.
|
|
113
112
|
* @cssprop [--aparte-branch-picker-label-min-width=32px] - Reserved label width, so `9 / 9` growing to `10 / 12` does not shift the arrows.
|
|
114
113
|
*
|
|
115
114
|
* @cssprop [--aparte-waiting-height=1.5em] - Min height of the waiting region, so the first token does not jump the layout.
|
|
116
|
-
* @cssprop [--aparte-waiting-dot-gap=
|
|
115
|
+
* @cssprop [--aparte-waiting-dot-gap=var(--aparte-space-2)] - Gap between the three waiting dots.
|
|
117
116
|
* @cssprop [--aparte-status-dot-size=6px] - Diameter of a waiting dot (shared with the status indicator).
|
|
118
117
|
* @cssprop [--aparte-status-color=var(--aparte-text-muted)] - Colour of the waiting dots (shared with the status indicator).
|
|
119
118
|
*
|
|
@@ -172,6 +171,12 @@ export declare class AparteChatBubble extends HTMLElement {
|
|
|
172
171
|
private _editing;
|
|
173
172
|
/** The live inline editor (the composer's contenteditable primitive), present only while `_editing`. */
|
|
174
173
|
private _editInput;
|
|
174
|
+
/**
|
|
175
|
+
* The `data-action` of the button the editor was opened from, so leaving it can hand
|
|
176
|
+
* the keyboard back. The STRING, not the node: entering and leaving edit mode rewrite
|
|
177
|
+
* the action bar's `innerHTML`, so the opener's identity is destroyed twice.
|
|
178
|
+
*/
|
|
179
|
+
private _editReturnAction;
|
|
175
180
|
static get observedAttributes(): string[];
|
|
176
181
|
constructor();
|
|
177
182
|
private _onConfigChange;
|
|
@@ -362,6 +367,22 @@ export declare class AparteChatBubble extends HTMLElement {
|
|
|
362
367
|
setTranscriptBusy(busy: boolean): void;
|
|
363
368
|
private _applyTranscriptBusy;
|
|
364
369
|
private _updateBranchPicker;
|
|
370
|
+
/**
|
|
371
|
+
* What the copy action copies: the reply, not the reasoning. A `thinking` segment is
|
|
372
|
+
* the model's scratchpad, and the client already keeps it out of the history it sends
|
|
373
|
+
* back (`_segmentsToText`) for the same reason — copying it along with the answer
|
|
374
|
+
* pasted a paragraph of deliberation above every reply, which no assistant on the
|
|
375
|
+
* market does. Segments with no `content` (a tool call) contribute nothing, so a
|
|
376
|
+
* turn made only of those copies as `''` — and the action bar reads this to decide
|
|
377
|
+
* whether to offer the button at all.
|
|
378
|
+
*/
|
|
379
|
+
private _copyableText;
|
|
380
|
+
/**
|
|
381
|
+
* The copy button is for text. `hidden` rather than removed: the bar is rebuilt
|
|
382
|
+
* rarely and the text changes on every streamed token, so the button is toggled in
|
|
383
|
+
* place from each path that changes what a copy would paste.
|
|
384
|
+
*/
|
|
385
|
+
private _syncCopyAction;
|
|
365
386
|
private _updateActionBar;
|
|
366
387
|
/**
|
|
367
388
|
* `role="toolbar"` promises a keyboard model. This is it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-chat-bubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubble/aparte-chat-bubble.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EACb,gBAAgB,EAQhB,WAAW,EACX,aAAa,EACd,MAAM,sBAAsB,CAAC;AAkG9B
|
|
1
|
+
{"version":3,"file":"aparte-chat-bubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubble/aparte-chat-bubble.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,9 +26,8 @@ import '../elicitation/aparte-elicitation.js';
|
|
|
26
26
|
* Being a component (not a bare `<div>`), it also owns behaviour a wrapper div
|
|
27
27
|
* can't: with `center-empty`, it watches its own viewport and keeps the composer
|
|
28
28
|
* centered as a welcome state until the first `<aparte-chat-bubble>` lands, then
|
|
29
|
-
* slides to the normal layout — no external JavaScript
|
|
30
|
-
*
|
|
31
|
-
* style the welcome state from an app's own CSS. The watcher needs a viewport somewhere
|
|
29
|
+
* slides to the normal layout — no external JavaScript (`data-empty`, in the attribute
|
|
30
|
+
* list below, is that watcher's output). The watcher needs a viewport somewhere
|
|
32
31
|
* inside, and hand-written markup always has one because composing the default injects
|
|
33
32
|
* it — so the only path where no watcher starts and `data-empty` is never set is
|
|
34
33
|
* `framework-managed`, where the framework owns the subtree anyway. The stylesheet
|
|
@@ -47,10 +46,38 @@ import '../elicitation/aparte-elicitation.js';
|
|
|
47
46
|
* `AparteClient`, or handle `aparte-send` yourself, as with the primitives.
|
|
48
47
|
* Size the element via CSS (a height, or let it fill a sized parent).
|
|
49
48
|
*
|
|
49
|
+
* Composing it yourself is the other form, and the container still lays it out and still
|
|
50
|
+
* runs `center-empty`. It is written out here rather than as a second `@example` for a
|
|
51
|
+
* mechanical reason: every element-own example is concatenated into ONE live frame on the
|
|
52
|
+
* generated reference page, so a second `<aparte-chat>` there rendered as a second whole
|
|
53
|
+
* chat — two empty composers with 600px of nothing between them.
|
|
54
|
+
*
|
|
55
|
+
* ```html
|
|
56
|
+
* <aparte-chat center-empty attachments style="height: 24rem">
|
|
57
|
+
* <aparte-chat-viewport></aparte-chat-viewport>
|
|
58
|
+
* <aparte-composer>
|
|
59
|
+
* <div class="aparte-composer-shell">
|
|
60
|
+
* <div class="aparte-composer-row">
|
|
61
|
+
* <aparte-composer-input></aparte-composer-input>
|
|
62
|
+
* <aparte-composer-send></aparte-composer-send>
|
|
63
|
+
* </div>
|
|
64
|
+
* </div>
|
|
65
|
+
* </aparte-composer>
|
|
66
|
+
* </aparte-chat>
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
50
69
|
* @element aparte-chat
|
|
51
70
|
* @attr {string} placeholder - Placeholder for the composer input (default composition)
|
|
52
71
|
* @attr {boolean} disabled - Disables the composer
|
|
72
|
+
* @attr {boolean} submit-on-enter - Forwarded to the composer by value: `submit-on-enter="false"`
|
|
73
|
+
* makes Enter break the line and Shift+Enter send (the bare attribute, or none, keeps the
|
|
74
|
+
* default — Enter sends). The four wrappers expose the same switch as `submitOnEnter`.
|
|
53
75
|
* @attr {boolean} center-empty - Center the composer as a welcome state until the first message, then slide to the normal layout
|
|
76
|
+
* @attr {boolean} data-empty - Reflected BY the element while `center-empty` is set and no
|
|
77
|
+
* `<aparte-chat-bubble>` has landed in its viewport; the stylesheet centers the composer through
|
|
78
|
+
* `aparte-chat[center-empty][data-empty]`, and an app styles its welcome state against it. Never
|
|
79
|
+
* set without `center-empty`, and never under `framework-managed` (no viewport child to watch).
|
|
80
|
+
* Read-only.
|
|
54
81
|
* @attr {boolean} overlay-composer - The ChatGPT anatomy, opt-in: the transcript's scroll
|
|
55
82
|
* surface spans the whole column and the composer (with the rest of the bottom stack)
|
|
56
83
|
* floats over it, so the scrollbar runs edge to edge instead of stopping at the
|
|
@@ -65,35 +92,15 @@ import '../elicitation/aparte-elicitation.js';
|
|
|
65
92
|
* `[data-aparte-chat]` div and never create this element at all.
|
|
66
93
|
* @attr {boolean} attachments - Add the file picker + chips strip to the default composition (opt-in: the host must consume the files — an `AparteClient` does, a hand-rolled loop must read `event.detail.files`)
|
|
67
94
|
*
|
|
68
|
-
* @cssprop [--aparte-chat-bottom-gap=var(--aparte-space-8
|
|
95
|
+
* @cssprop [--aparte-chat-bottom-gap=var(--aparte-space-8)] - Space below the
|
|
69
96
|
* composer, as `padding-block-end` on the shell (the same rule covers a wrapper's
|
|
70
97
|
* `[data-aparte-chat]` root). The gap belongs to this element because padding applied
|
|
71
98
|
* from outside would also shrink the scroll area, stopping the transcript short of the
|
|
72
99
|
* edge instead of scrolling to it.
|
|
73
100
|
*
|
|
74
|
-
* Composing it yourself is the other form, and the container still lays it out and still
|
|
75
|
-
* runs `center-empty`. It is written out here rather than as a second `@example` for a
|
|
76
|
-
* mechanical reason: every element-own example is concatenated into ONE live frame on the
|
|
77
|
-
* generated reference page, so a second `<aparte-chat>` there rendered as a second whole
|
|
78
|
-
* chat — two empty composers with 600px of nothing between them.
|
|
79
|
-
*
|
|
80
|
-
* ```html
|
|
81
|
-
* <aparte-chat center-empty attachments style="height: 320px">
|
|
82
|
-
* <aparte-chat-viewport></aparte-chat-viewport>
|
|
83
|
-
* <aparte-composer>
|
|
84
|
-
* <div class="aparte-composer-shell">
|
|
85
|
-
* <div class="aparte-composer-row">
|
|
86
|
-
* <aparte-composer-input></aparte-composer-input>
|
|
87
|
-
* <aparte-composer-send></aparte-composer-send>
|
|
88
|
-
* </div>
|
|
89
|
-
* </div>
|
|
90
|
-
* </aparte-composer>
|
|
91
|
-
* </aparte-chat>
|
|
92
|
-
* ```
|
|
93
|
-
*
|
|
94
101
|
* @example
|
|
95
102
|
* <!-- Left empty it fills in a viewport, an input and a send button. -->
|
|
96
|
-
* <aparte-chat center-empty placeholder="Say something…" style="height:
|
|
103
|
+
* <aparte-chat center-empty placeholder="Say something…" style="height: 24rem"></aparte-chat>
|
|
97
104
|
*
|
|
98
105
|
* <script>
|
|
99
106
|
* // Seeded so the frame shows a real exchange rather than an empty box: this
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-chat.d.ts","sourceRoot":"","sources":["../../../src/components/chat/aparte-chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,sCAAsC,CAAC;AAG9C
|
|
1
|
+
{"version":3,"file":"aparte-chat.d.ts","sourceRoot":"","sources":["../../../src/components/chat/aparte-chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,sCAAsC,CAAC;AAG9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgHG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,OAAO,CAAC,SAAS,CAAiC;IAElD;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAS;IAE3B,iBAAiB,IAAI,IAAI;IAQzB,oBAAoB,IAAI,IAAI;IAK5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAmB9F,6EAA6E;IAC7E,IAAI,QAAQ,IAAI,kBAAkB,GAAG,IAAI,CAExC;IAED,qEAAqE;IACrE,IAAI,QAAQ,IAAI,cAAc,GAAG,IAAI,CAEpC;IAED,OAAO,CAAC,OAAO;IAsDf;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAuBxB,6EAA6E;IAC7E,OAAO,CAAC,YAAY;IAKpB,yEAAyE;IACzE,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,YAAY;CAMrB"}
|
|
@@ -42,7 +42,7 @@ import type { AparteComposer } from './aparte-composer.js';
|
|
|
42
42
|
* could not tell which one fired.
|
|
43
43
|
* detail: { actionId: string, composer: AparteComposer | null }
|
|
44
44
|
*
|
|
45
|
-
* @cssprop [--aparte-input-action-btn-size=
|
|
45
|
+
* @cssprop [--aparte-input-action-btn-size=var(--aparte-btn-size-lg)] - Square size of the button. On a coarse
|
|
46
46
|
* pointer the stylesheet re-sets it to `--aparte-touch-target-size` (44px) on
|
|
47
47
|
* `.aparte-action-button` itself, which wins over a value inherited from your theme.
|
|
48
48
|
* @cssprop [--aparte-input-action-btn-icon-size=20px] - Size of the `<svg>` inside it.
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
* @attr {boolean} disabled - Greys out the picker. Drops are gated by the composer root's
|
|
39
39
|
* `disabled`, not by this one.
|
|
40
40
|
*
|
|
41
|
-
* @cssprop [--aparte-input-action-btn-size=
|
|
41
|
+
* @cssprop [--aparte-input-action-btn-size=var(--aparte-btn-size-lg)] - Square size of the button. On a coarse
|
|
42
42
|
* pointer the stylesheet re-sets it to `--aparte-touch-target-size` (44px) on
|
|
43
43
|
* `.aparte-action-button` itself, which wins over a value inherited from your theme.
|
|
44
44
|
* @cssprop [--aparte-input-action-btn-icon-size=20px] - Size of the `<svg>` inside it.
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
*
|
|
25
25
|
* @cssprop [--aparte-attachments-max-height=140px] - Height cap on the strip; past it the
|
|
26
26
|
* tiles scroll instead of pushing the composer up.
|
|
27
|
-
* @cssprop [--aparte-attachment-image-size=
|
|
27
|
+
* @cssprop [--aparte-attachment-image-size=72px] - Tile edge. The stylesheet sets 56px on
|
|
28
28
|
* this element (the `:root` default is 72px, and the sent-message strip re-sets 40px on
|
|
29
29
|
* itself), so a theme-level value reaches neither strip — target
|
|
30
30
|
* `aparte-composer-attachments` to resize these tiles.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-composer-attachments.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-attachments.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,qBAAa,yBAA0B,SAAQ,WAAW;IACtD,OAAO,CAAC,aAAa,CAAsB;IAC3C,+EAA+E;IAC/E,OAAO,CAAC,WAAW,CAAgB;IAEnC,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,cAAc;IAYtB,kEAAkE;IAClE,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"aparte-composer-attachments.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-attachments.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,qBAAa,yBAA0B,SAAQ,WAAW;IACtD,OAAO,CAAC,aAAa,CAAsB;IAC3C,+EAA+E;IAC/E,OAAO,CAAC,WAAW,CAAgB;IAEnC,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,cAAc;IAYtB,kEAAkE;IAClE,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,OAAO;IAsFf,0EAA0E;IAC1E,OAAO,CAAC,IAAI;CAIf"}
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
*
|
|
21
21
|
* @element aparte-composer-cancel
|
|
22
22
|
*
|
|
23
|
-
* @cssprop [--aparte-composer-control-size=
|
|
23
|
+
* @cssprop [--aparte-composer-control-size=var(--aparte-btn-size-lg)] - Width/height of the button inside the
|
|
24
24
|
* `.aparte-composer-row` layout helper, shared with the composer's other
|
|
25
25
|
* controls so the row stays aligned.
|
|
26
|
-
* @cssprop [--aparte-radius-action-btn=
|
|
26
|
+
* @cssprop [--aparte-radius-action-btn=var(--aparte-radius-sm)] - Corner radius of the button.
|
|
27
27
|
* @cssprop --aparte-neutral - Icon colour at rest (the button's background is
|
|
28
28
|
* transparent).
|
|
29
29
|
* @cssprop --aparte-text - Icon colour on hover.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-composer-cancel.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-cancel.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACjD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,QAAQ,CAAgC;IAEhD,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"aparte-composer-cancel.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-cancel.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACjD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,QAAQ,CAAgC;IAEhD,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,YAAY;IAKpB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,YAAY;CAGvB"}
|
|
@@ -39,14 +39,14 @@
|
|
|
39
39
|
* resize the editor in pure CSS without being fought by
|
|
40
40
|
* an inline height.
|
|
41
41
|
*
|
|
42
|
-
* @cssprop [--aparte-composer-control-size=
|
|
42
|
+
* @cssprop [--aparte-composer-control-size=var(--aparte-btn-size-lg)] - Single-line min-height of the editor.
|
|
43
43
|
* Inside the `.aparte-composer-row` layout helper the composer's buttons read
|
|
44
44
|
* the same token, so one value resizes that whole control set and the row stays
|
|
45
45
|
* aligned.
|
|
46
|
-
* @cssprop [--aparte-input-padding-y=
|
|
47
|
-
* @cssprop [--aparte-input-padding-x=
|
|
48
|
-
* @cssprop [--aparte-input-font-size=
|
|
49
|
-
* @cssprop [--aparte-input-line-height=
|
|
46
|
+
* @cssprop [--aparte-input-padding-y=calc((var(--aparte-composer-control-size) - 1lh) / 2)] - Vertical padding inside the editor.
|
|
47
|
+
* @cssprop [--aparte-input-padding-x=var(--aparte-space-6)] - Horizontal padding inside the editor.
|
|
48
|
+
* @cssprop [--aparte-input-font-size=var(--aparte-font-size-base)] - Editor font size.
|
|
49
|
+
* @cssprop [--aparte-input-line-height=var(--aparte-line-height-normal)] - Editor line height — also what the
|
|
50
50
|
* auto-expand measures, so changing it changes the height the editor settles at
|
|
51
51
|
* (until `max-height` clamps it).
|
|
52
52
|
* @cssprop --aparte-text - Text and caret colour of the editor.
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
* bubble's inline editor (`.aparte-message[data-editing]`) — inside a composer
|
|
57
57
|
* the shell paints the surface instead.
|
|
58
58
|
* @cssprop --aparte-input-border - Border colour of that same edit-mode box.
|
|
59
|
-
* @cssprop [--aparte-radius-input=
|
|
59
|
+
* @cssprop [--aparte-radius-input=var(--aparte-radius-lg)] - Corner radius of the edit-mode box.
|
|
60
60
|
* @cssprop --aparte-input-focus-border - Border colour of the edit-mode box while it
|
|
61
61
|
* holds focus (`:focus-within`).
|
|
62
62
|
*
|
|
@@ -29,14 +29,14 @@
|
|
|
29
29
|
*
|
|
30
30
|
* @element aparte-composer-send
|
|
31
31
|
*
|
|
32
|
-
* @cssprop [--aparte-composer-control-size=
|
|
32
|
+
* @cssprop [--aparte-composer-control-size=var(--aparte-btn-size-lg)] - Width/height of the button inside the
|
|
33
33
|
* `.aparte-composer-row` layout helper, shared with the input's single-line
|
|
34
34
|
* height so the row stays aligned. It wins over `--aparte-send-btn-size` there.
|
|
35
|
-
* @cssprop [--aparte-send-btn-size=
|
|
35
|
+
* @cssprop [--aparte-send-btn-size=var(--aparte-btn-size-lg)] - Width/height of the button outside that row
|
|
36
36
|
* helper. On coarse pointers it is raised to `--aparte-touch-target-size`.
|
|
37
37
|
* @cssprop [--aparte-touch-target-size=44px] - Hit-area floor applied to the button
|
|
38
38
|
* under `@media (pointer: coarse)`.
|
|
39
|
-
* @cssprop [--aparte-radius-send-btn=
|
|
39
|
+
* @cssprop [--aparte-radius-send-btn=var(--aparte-radius-md)] - Corner radius of the button.
|
|
40
40
|
* @cssprop --aparte-primary - Button background.
|
|
41
41
|
* @cssprop --aparte-primary-hover - Button background on hover, while enabled.
|
|
42
42
|
* @cssprop --aparte-on-primary - The glyph's colour. Undeclared by default, which means
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-composer-send.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-send.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IAC/C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAsB;IAC3C;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAA2F;IAGzG,OAAO,CAAC,QAAQ,CAAgC;IAEhD,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"aparte-composer-send.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-send.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IAC/C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAsB;IAC3C;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAA2F;IAGzG,OAAO,CAAC,QAAQ,CAAgC;IAEhD,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,cAAc;IAgCtB;;;;;;;;;OASG;IACH,OAAO,CAAC,cAAc;IAOtB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;CAGvB"}
|
|
@@ -141,6 +141,13 @@ export interface AparteComposerChangeEventDetail {
|
|
|
141
141
|
* default); set it to the string `"false"` to swap them. Read lazily by the
|
|
142
142
|
* `submitOnEnter` getter rather than observed, which is why it was missing from the
|
|
143
143
|
* manifest — and so from every typed surface — while all four wrappers wrote it.
|
|
144
|
+
* @attr {boolean} data-panel-active - Reflected BY the element while a panel (an elicitation, an
|
|
145
|
+
* approval) is mounted inside it; the shipped stylesheet keys off it. Read-only.
|
|
146
|
+
* @attr {string} data-panel-mode - Reflected BY the element while a panel is active: what the send
|
|
147
|
+
* button does meanwhile (`'none'` removes it — through this attribute, not by reaching into the
|
|
148
|
+
* button). Read-only.
|
|
149
|
+
* @attr {boolean} data-model-gated - Reflected BY the element when `requireModelSelection` is on and
|
|
150
|
+
* no model is selected: sending is blocked and the shipped stylesheet greys the composer. Read-only.
|
|
144
151
|
*
|
|
145
152
|
* @fires {CustomEvent<AparteSendEventDetail>} aparte-send - A message was submitted: the text, its attachments and the target.
|
|
146
153
|
* @fires aparte-cancel - The stop button was pressed. No detail; the two window events below carry the target.
|
|
@@ -148,7 +155,7 @@ export interface AparteComposerChangeEventDetail {
|
|
|
148
155
|
* @fires {CustomEvent<AparteMessageAbortedEventDetail>} aparte-message-aborted - The run for this target ended early — the user pressed Stop, or `abort()` was called. This element dispatches it on `window`; `AparteClient` also dispatches it on the chat host, so it is listenable on either.
|
|
149
156
|
* @fires {CustomEvent<AparteComposerChangeEventDetail>} aparte-composer-change - Any of value / streaming / disabled / attachments / panel changed, folded into one event.
|
|
150
157
|
*
|
|
151
|
-
* @cssprop [--aparte-composer-control-size=
|
|
158
|
+
* @cssprop [--aparte-composer-control-size=var(--aparte-btn-size-lg)] - Width and height of the composer's
|
|
152
159
|
* own control buttons (each is an `.aparte-btn--icon`, so it needs the opt-in
|
|
153
160
|
* `.aparte-composer-row` wrapper, which is what carries the size down) and the
|
|
154
161
|
* minimum height of the input's editor, which needs no wrapper. One knob for the
|
|
@@ -167,7 +174,7 @@ export interface AparteComposerChangeEventDetail {
|
|
|
167
174
|
* composer keeps the transcript's column. Set on THIS element it moves the shell only:
|
|
168
175
|
* custom properties inherit downward and the transcript is a sibling subtree, so set
|
|
169
176
|
* it on a shared ancestor (the chat host, `:root`) to move both.
|
|
170
|
-
* @cssprop [--aparte-viewport-padding=
|
|
177
|
+
* @cssprop [--aparte-viewport-padding=var(--aparte-space-8)] - Inline gutter between this element and the
|
|
171
178
|
* chat's edge — the same token the transcript reads, so the shell keeps
|
|
172
179
|
* `.aparte-message`'s column BELOW the max-width above as well as above it, where the
|
|
173
180
|
* two would otherwise diverge by the transcript's whole inset. Only the inline halves
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-composer.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAKxD,MAAM,WAAW,sBAAsB;IACnC,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,kBAAkB,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3C,iBAAiB,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IACzC,oBAAoB,EAAE;QAAE,WAAW,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IAC9C,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,cAAc,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,uBAAuB,CAAA;KAAE,CAAC;CAC9F;AAED,MAAM,MAAM,uBAAuB,GAAG,MAAM,sBAAsB,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB,8EAA8E;IAC9E,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED,+DAA+D;AAC/D,MAAM,WAAW,+BAA+B;IAC5C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,cAAc,CAAC;CAC5B;AAMD
|
|
1
|
+
{"version":3,"file":"aparte-composer.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,6 @@ export interface AparteContextThresholdEventDetail {
|
|
|
51
51
|
* @fires {CustomEvent<AparteCompactEventDetail>} aparte-compact - Dispatched on `window` when `auto-compact` is set and the gauge first reaches `danger`: compact this target's transcript. Once per crossing, and only while the attribute is present. `@aparte/plugin-compaction` answers it; with no listener nothing happens.
|
|
52
52
|
*
|
|
53
53
|
* @cssprop [--aparte-context-ring-size=22px] - Diameter of the ring variant.
|
|
54
|
-
* @cssprop [--aparte-context-ring-stroke=4] - Thickness of the ring, in its own units (the ring is drawn on a 36-unit box).
|
|
55
54
|
*
|
|
56
55
|
* @example
|
|
57
56
|
* <!-- The same gauge twice: the bar takes the room it is given, the ring takes none. -->
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-context.d.ts","sourceRoot":"","sources":["../../../src/components/context/aparte-context.ts"],"names":[],"mappings":"AAGA,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1D,+FAA+F;AAC/F,MAAM,WAAW,iCAAiC;IAC9C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAoCD
|
|
1
|
+
{"version":3,"file":"aparte-context.d.ts","sourceRoot":"","sources":["../../../src/components/context/aparte-context.ts"],"names":[],"mappings":"AAGA,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1D,+FAA+F;AAC/F,MAAM,WAAW,iCAAiC;IAC9C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAoCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC1C,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,iBAAiB,CAAS;IAElC,OAAO,CAAC,OAAO,CAMb;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,YAAY,CAWlB;IAEF,gFAAgF;IAChF,OAAO,CAAC,eAAe,CAIrB;IAEF,OAAO,CAAC,WAAW,CAA8B;IAEjD,sEAAsE;IACtE,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IAED,qEAAqE;IACrE,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IAED,2DAA2D;IAC3D,IAAI,KAAK,IAAI,kBAAkB,GAAG,IAAI,CAErC;IAED,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,IAAI,IAAI;IAO5B,wBAAwB,IAAI,IAAI;IAIhC,OAAO,CAAC,OAAO;IAOf,gGAAgG;IAChG,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,OAAO;CA2FlB"}
|
|
@@ -69,17 +69,17 @@ export interface AparteConversationRenameDetail {
|
|
|
69
69
|
* @fires {CustomEvent<AparteConversationArchiveDetail>} aparte-unarchive-conversation - The same item on an already-archived one; same detail shape, opposite intent.
|
|
70
70
|
* @fires {CustomEvent<AparteConversationDeleteDetail>} aparte-delete-conversation - The delete was confirmed. Nothing is removed here.
|
|
71
71
|
*
|
|
72
|
-
* @cssprop [--aparte-conv-list-gap=
|
|
73
|
-
* @cssprop [--aparte-conv-item-padding=
|
|
74
|
-
* @cssprop [--aparte-conv-item-gap=
|
|
72
|
+
* @cssprop [--aparte-conv-list-gap=var(--aparte-space-1)] - Vertical gap between rows, and between a group's heading and its rows.
|
|
73
|
+
* @cssprop [--aparte-conv-item-padding=var(--aparte-space-4) var(--aparte-space-5)] - Padding of a row's title button.
|
|
74
|
+
* @cssprop [--aparte-conv-item-gap=var(--aparte-space-3)] - Gap between a row's title and its `⋯` button.
|
|
75
75
|
* @cssprop [--aparte-conv-item-radius=var(--aparte-radius-md)] - Corner radius of a row.
|
|
76
|
-
* @cssprop [--aparte-conv-item-font-size=
|
|
76
|
+
* @cssprop [--aparte-conv-item-font-size=var(--aparte-font-size-md)] - Font size of a row's title.
|
|
77
77
|
* @cssprop [--aparte-conv-item-color=var(--aparte-text-muted)] - Title colour of an inactive row.
|
|
78
78
|
* @cssprop [--aparte-conv-item-bg-hover=var(--aparte-surface-3)] - Row background on hover.
|
|
79
79
|
* @cssprop [--aparte-conv-item-bg-active=var(--aparte-surface-3)] - Background of the row matching `active-id`.
|
|
80
80
|
* @cssprop [--aparte-conv-item-color-active=var(--aparte-text)] - Title colour of the active row.
|
|
81
|
-
* @cssprop [--aparte-conv-item-font-weight-active=var(--aparte-font-weight-medium
|
|
82
|
-
* @cssprop [--aparte-conv-action-btn-size=
|
|
81
|
+
* @cssprop [--aparte-conv-item-font-weight-active=var(--aparte-font-weight-medium)] - Title weight of the active row.
|
|
82
|
+
* @cssprop [--aparte-conv-action-btn-size=var(--aparte-btn-size-sm)] - Square size of the `⋯` button (the recipe's small step). Under `(pointer: coarse)` the stylesheet redeclares it as the touch target size on the button itself, so a value set on the element does not reach it there; the button also stays visible instead of appearing on hover.
|
|
83
83
|
*
|
|
84
84
|
* @example
|
|
85
85
|
* <!-- It stores nothing and fetches nothing: an empty tag renders the empty state, and
|
|
@@ -164,6 +164,11 @@ export declare class AparteConversationList extends HTMLElement {
|
|
|
164
164
|
* the blur a removal causes cannot commit a second time. The row is re-rendered
|
|
165
165
|
* from the array either way: the list shows data, and the host's re-assignment is
|
|
166
166
|
* what makes the new title appear.
|
|
167
|
+
*
|
|
168
|
+
* `restoreFocus` puts the keyboard back on the row: every exit destroys the field
|
|
169
|
+
* the reader was in, so without it the focus lands on `<body>` and the next Tab
|
|
170
|
+
* restarts at the top of the page. The caller decides — the blur path says no when
|
|
171
|
+
* the focus is already heading somewhere live outside this list.
|
|
167
172
|
*/
|
|
168
173
|
private _finishRename;
|
|
169
174
|
private _onClick;
|