@aparte/core 0.19.3 → 0.21.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/dist/client/aparte-client.d.ts +66 -95
- package/dist/client/aparte-client.d.ts.map +1 -1
- package/dist/client/stream-adapter.d.ts +7 -13
- package/dist/client/stream-adapter.d.ts.map +1 -1
- package/dist/client/wire-history.d.ts +4 -5
- package/dist/client/wire-history.d.ts.map +1 -1
- package/dist/components/bubble/aparte-chat-bubble.d.ts +88 -57
- package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -1
- package/dist/components/chat/aparte-chat.d.ts +15 -13
- package/dist/components/chat/aparte-chat.d.ts.map +1 -1
- package/dist/components/chat/glide-gate.d.ts +13 -0
- package/dist/components/chat/glide-gate.d.ts.map +1 -0
- package/dist/components/composer/aparte-composer-action.d.ts +2 -2
- package/dist/components/composer/aparte-composer-add-attachment.d.ts +1 -1
- package/dist/components/composer/aparte-composer-input.d.ts +1 -5
- package/dist/components/composer/aparte-composer-input.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-send.d.ts +8 -10
- package/dist/components/composer/aparte-composer-send.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer.d.ts +48 -80
- package/dist/components/composer/aparte-composer.d.ts.map +1 -1
- package/dist/components/context/aparte-context.d.ts +9 -4
- package/dist/components/context/aparte-context.d.ts.map +1 -1
- package/dist/components/conversation-list/aparte-conversation-list.d.ts +23 -13
- package/dist/components/conversation-list/aparte-conversation-list.d.ts.map +1 -1
- package/dist/components/elicitation/aparte-elicitation.d.ts +15 -22
- package/dist/components/elicitation/aparte-elicitation.d.ts.map +1 -1
- package/dist/components/scroll-rail/aparte-scroll-rail.d.ts +10 -11
- package/dist/components/scroll-rail/aparte-scroll-rail.d.ts.map +1 -1
- package/dist/components/sidebar/aparte-sidebar.d.ts +16 -3
- package/dist/components/sidebar/aparte-sidebar.d.ts.map +1 -1
- package/dist/components/split/aparte-split.d.ts +12 -3
- package/dist/components/split/aparte-split.d.ts.map +1 -1
- package/dist/components/status/aparte-chat-status.d.ts.map +1 -1
- package/dist/components/suggestions/aparte-suggestions.d.ts +6 -9
- package/dist/components/suggestions/aparte-suggestions.d.ts.map +1 -1
- package/dist/components/viewport/aparte-chat-viewport.d.ts +70 -70
- package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -1
- package/dist/config/aparte-config.d.ts +88 -67
- package/dist/config/aparte-config.d.ts.map +1 -1
- package/dist/config/icon-provider.d.ts +19 -2
- package/dist/config/icon-provider.d.ts.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/locale.d.ts +57 -89
- package/dist/config/locale.d.ts.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/conversations/conversation-controller.d.ts +18 -3
- package/dist/conversations/conversation-controller.d.ts.map +1 -1
- package/dist/conversations/conversation-manager.d.ts +3 -3
- package/dist/conversations/conversation-manager.d.ts.map +1 -1
- package/dist/custom-elements.json +7626 -6906
- package/dist/{dialog-triggers-ChnPFG9M.js → dialog-triggers-3Rk7PuZa.js} +444 -287
- package/dist/dialog-triggers-3Rk7PuZa.js.map +1 -0
- package/dist/elicitation/approval-panel.d.ts.map +1 -1
- package/dist/elicitation/index.d.ts +6 -1
- package/dist/elicitation/index.d.ts.map +1 -1
- package/dist/elicitation/panel.d.ts +11 -21
- package/dist/elicitation/panel.d.ts.map +1 -1
- package/dist/elicitation/types.d.ts +19 -27
- package/dist/elicitation/types.d.ts.map +1 -1
- package/dist/generated/element-attributes.d.ts +11 -5
- package/dist/generated/element-attributes.d.ts.map +1 -1
- package/dist/host/aparte-chat-host.d.ts +17 -32
- package/dist/host/aparte-chat-host.d.ts.map +1 -1
- package/dist/icons/extended.d.ts +1 -2
- package/dist/icons/extended.d.ts.map +1 -1
- package/dist/icons.d.ts +6 -8
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +12 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +682 -327
- package/dist/index.js.map +1 -1
- package/dist/index.node.d.ts +6 -3
- package/dist/index.node.d.ts.map +1 -1
- package/dist/index.node.js +2 -2
- package/dist/index.node.js.map +1 -1
- package/dist/interop/dialog-triggers.d.ts +2 -2
- package/dist/interop/element-props.d.ts +16 -27
- package/dist/interop/element-props.d.ts.map +1 -1
- package/dist/primitives/icon/aparte-icon.d.ts.map +1 -1
- package/dist/primitives/select/aparte-option.d.ts +3 -2
- package/dist/primitives/select/aparte-option.d.ts.map +1 -1
- package/dist/primitives/select/aparte-select.d.ts +24 -21
- package/dist/primitives/select/aparte-select.d.ts.map +1 -1
- package/dist/renderers/markdown-stream.d.ts.map +1 -1
- package/dist/renderers/segment-renderers.d.ts +11 -17
- package/dist/renderers/segment-renderers.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/text.d.ts.map +1 -1
- package/dist/renderers/segments/tool-call.d.ts.map +1 -1
- package/dist/runtime/message-repository.d.ts +8 -15
- package/dist/runtime/message-repository.d.ts.map +1 -1
- package/dist/transport/backend-handler.d.ts +4 -6
- package/dist/transport/backend-handler.d.ts.map +1 -1
- package/dist/transport/backend-transport.d.ts +14 -0
- package/dist/transport/backend-transport.d.ts.map +1 -1
- package/dist/transport/types.d.ts +7 -10
- package/dist/transport/types.d.ts.map +1 -1
- package/dist/types/chat.d.ts +10 -18
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/types/element-attributes.d.ts +6 -12
- package/dist/types/element-attributes.d.ts.map +1 -1
- package/dist/types/element-map.d.ts +6 -19
- package/dist/types/element-map.d.ts.map +1 -1
- package/dist/types/event-map.d.ts +11 -17
- package/dist/types/event-map.d.ts.map +1 -1
- package/dist/types/events.d.ts +5 -14
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/model-provider.d.ts +7 -9
- package/dist/types/model-provider.d.ts.map +1 -1
- package/dist/types/segments.d.ts +21 -13
- package/dist/types/segments.d.ts.map +1 -1
- package/dist/types/tools.d.ts +20 -22
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/copy-text.d.ts +1 -2
- package/dist/utils/copy-text.d.ts.map +1 -1
- package/dist/utils/css-escape.d.ts +1 -1
- package/dist/utils/escape.d.ts +4 -19
- package/dist/utils/escape.d.ts.map +1 -1
- package/dist/utils/files-to-attachments.d.ts +2 -2
- package/dist/utils/fold-text.d.ts +13 -0
- package/dist/utils/fold-text.d.ts.map +1 -0
- package/dist/utils/is-awaiting-reply.d.ts +2 -5
- package/dist/utils/is-awaiting-reply.d.ts.map +1 -1
- package/dist/utils/presence.d.ts +5 -5
- package/dist/utils/segments.d.ts +54 -78
- package/dist/utils/segments.d.ts.map +1 -1
- package/dist/utils/tool-input.d.ts +1 -1
- package/dist/utils/tool-input.d.ts.map +1 -1
- package/dist/utils/transcript.d.ts +2 -2
- package/dist/utils/uuid.d.ts +0 -11
- package/dist/utils/uuid.d.ts.map +1 -1
- package/package.json +29 -3
- package/dist/dialog-triggers-ChnPFG9M.js.map +0 -1
|
@@ -3,20 +3,15 @@
|
|
|
3
3
|
* there at all.
|
|
4
4
|
*
|
|
5
5
|
* `'submit'` answers, and `'none'` says this panel has NO act left for that button,
|
|
6
|
-
* so it is not drawn.
|
|
7
|
-
*
|
|
8
|
-
* was one more thing to explain.)
|
|
6
|
+
* so it is not drawn. The chips are the navigation through a form's questions, so the
|
|
7
|
+
* button never means "next".
|
|
9
8
|
*
|
|
10
|
-
* `'none'`
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* button beside them sat permanently disabled, meaning nothing, until the optional
|
|
15
|
-
* instruction field was opened. A control that is never the way forward is not
|
|
16
|
-
* disabled, it is absent (ratified decision #8).
|
|
9
|
+
* `'none'` is for a panel whose options settle on the first click (an approval, a
|
|
10
|
+
* single-choice question): a button beside them would sit permanently disabled,
|
|
11
|
+
* meaning nothing. A control that is never the way forward is not disabled, it is
|
|
12
|
+
* absent.
|
|
17
13
|
*
|
|
18
|
-
* Named rather than inlined at each of its six readers
|
|
19
|
-
* kind of list this repo has watched drift when every reader kept its own copy.
|
|
14
|
+
* Named rather than inlined at each of its six readers, so they share one list.
|
|
20
15
|
*/
|
|
21
16
|
export type AparteComposerPanelMode = 'submit' | 'none';
|
|
22
17
|
export interface AparteComposerEventMap {
|
|
@@ -120,10 +115,6 @@ export interface AparteComposerChangeEventDetail {
|
|
|
120
115
|
* an `id` — otherwise it answers to every chat's events, and one chat's Stop resets the
|
|
121
116
|
* other's composer and evicts its open panel.
|
|
122
117
|
*
|
|
123
|
-
* Prose first, on purpose: when `@element` opens a docblock there is no free text
|
|
124
|
-
* left for the analyser to use, and this component's description came out empty in
|
|
125
|
-
* the manifest and blank on the generated reference page.
|
|
126
|
-
*
|
|
127
118
|
* `aparte-abort` and `aparte-message-aborted` have to be declared by hand and always
|
|
128
119
|
* will: they go out through `window.dispatchEvent` (they concern the whole page, not
|
|
129
120
|
* this subtree), and the analyser's fallback only recognises `this.dispatchEvent`.
|
|
@@ -139,8 +130,7 @@ export interface AparteComposerChangeEventDetail {
|
|
|
139
130
|
* @attr {string} target - The id of the `<aparte-chat>` this composer drives.
|
|
140
131
|
* @attr {boolean} submit-on-enter - Enter sends and Shift+Enter breaks the line (the
|
|
141
132
|
* default); set it to the string `"false"` to swap them. Read lazily by the
|
|
142
|
-
* `submitOnEnter` getter rather than observed
|
|
143
|
-
* manifest — and so from every typed surface — while all four wrappers wrote it.
|
|
133
|
+
* `submitOnEnter` getter rather than observed.
|
|
144
134
|
* @attr {boolean} data-panel-active - Reflected BY the element while a panel (an elicitation, an
|
|
145
135
|
* approval) is mounted inside it; the shipped stylesheet keys off it. Read-only.
|
|
146
136
|
* @attr {string} data-panel-mode - Reflected BY the element while a panel is active: what the send
|
|
@@ -210,14 +200,11 @@ export declare class AparteComposer extends HTMLElement {
|
|
|
210
200
|
/**
|
|
211
201
|
* Who owns the one panel slot, and how to tell them they lost it.
|
|
212
202
|
*
|
|
213
|
-
* There is exactly one slot
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
* turn finished lost its panel while `<aparte-elicitation>` kept `_pending` set,
|
|
219
|
-
* so the request never settled AND every later request was short-circuited for the
|
|
220
|
-
* life of the page.
|
|
203
|
+
* There is exactly one slot and `showPanel` empties it unconditionally, so every
|
|
204
|
+
* path that closes a panel whose owner is still awaiting an answer — a second
|
|
205
|
+
* `showPanel`, `hidePanel` without the owner's token, `_handleMessageDone` (which
|
|
206
|
+
* fires on EVERY turn end) — must tell the owner. An owner that is not told keeps
|
|
207
|
+
* its request pending, and every later request is short-circuited behind it.
|
|
221
208
|
*/
|
|
222
209
|
private _panelToken;
|
|
223
210
|
private _panelOnEvict;
|
|
@@ -230,10 +217,10 @@ export declare class AparteComposer extends HTMLElement {
|
|
|
230
217
|
*
|
|
231
218
|
* A wrapper runs `AparteChatHost.bind()` — which calls `attachConfig` — from its
|
|
232
219
|
* POST-mount hook, so this element connects BEFORE the boundary exists. Caching
|
|
233
|
-
*
|
|
234
|
-
* locale
|
|
235
|
-
* `requireModelSelection` gate
|
|
236
|
-
*
|
|
220
|
+
* would latch the global config forever: an instance `config` carrying an RTL
|
|
221
|
+
* locale would flip the transcript and not the composer, and the
|
|
222
|
+
* `requireModelSelection` gate would be read off the wrong object.
|
|
223
|
+
* `aparte-chat-bubble` resolves live too, and its JSDoc names this race.
|
|
237
224
|
*/
|
|
238
225
|
private get _cfg();
|
|
239
226
|
/** Only OUR config: a change on another chat's instance must not touch us. */
|
|
@@ -245,10 +232,10 @@ export declare class AparteComposer extends HTMLElement {
|
|
|
245
232
|
* Mirror `locale.direction` onto ourselves, so everything inside — input, buttons,
|
|
246
233
|
* the toolbar row and whatever the consumer put in it — inherits it.
|
|
247
234
|
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
235
|
+
* Without it an RTL locale flips the conversation and leaves the composer
|
|
236
|
+
* left-to-right. It is also what makes the toolbar's placement idiom real:
|
|
237
|
+
* `margin-inline-start: auto` in a subtree that inherits no direction is just
|
|
238
|
+
* `margin-left`.
|
|
252
239
|
*
|
|
253
240
|
* One attribute on the host rather than a stamp per child: inheritance is the
|
|
254
241
|
* mechanism, so nothing needs to know about the consumer's markup.
|
|
@@ -264,9 +251,9 @@ export declare class AparteComposer extends HTMLElement {
|
|
|
264
251
|
/**
|
|
265
252
|
* The attribute is the state, so the property writes it. It has to exist: React 19
|
|
266
253
|
* and Svelte assign the PROPERTY whenever the element has one of that name, and a
|
|
267
|
-
* getter alone
|
|
268
|
-
* as valid — throw and take the render down. `presenceOn` because `''` is what
|
|
269
|
-
* those templates hand a presence property
|
|
254
|
+
* getter alone would make `<aparte-composer disabled="">` — a spelling the wrappers
|
|
255
|
+
* type as valid — throw and take the render down. `presenceOn` because `''` is what
|
|
256
|
+
* those templates hand a presence property.
|
|
270
257
|
*/
|
|
271
258
|
set disabled(value: boolean);
|
|
272
259
|
/**
|
|
@@ -318,27 +305,23 @@ export declare class AparteComposer extends HTMLElement {
|
|
|
318
305
|
*
|
|
319
306
|
* While a panel is up, the composer is answering a QUESTION, not composing a
|
|
320
307
|
* message — so the affordances that lead nowhere go away with the text input:
|
|
321
|
-
* the attachment picker above all, which
|
|
322
|
-
* being asked something
|
|
323
|
-
* real session). Ratified decision #8: an affordance nothing can honour is not
|
|
324
|
-
* rendered.
|
|
308
|
+
* the attachment picker above all, which would otherwise stay clickable while the
|
|
309
|
+
* user is being asked something. An affordance nothing can honour is not rendered.
|
|
325
310
|
*
|
|
326
311
|
* What STAYS, deliberately: the attachments strip, because pending attachments
|
|
327
312
|
* are the user's state and not an action to offer — hiding them would look like
|
|
328
313
|
* losing them; and the toolbar, because switching model still does something.
|
|
329
314
|
*
|
|
330
315
|
* The send button is the part the PANEL decides, through `mode`. `'submit'`
|
|
331
|
-
* keeps it; `'none'` says this panel has no act for it and it is not drawn.
|
|
332
|
-
*
|
|
333
|
-
*
|
|
334
|
-
*
|
|
335
|
-
*
|
|
336
|
-
* instruction) turns the button back on.
|
|
316
|
+
* keeps it; `'none'` says this panel has no act for it and it is not drawn. `'none'`
|
|
317
|
+
* is what a panel whose options settle on the first click needs — a single-choice
|
|
318
|
+
* question, an approval. Flip between them at any time with
|
|
319
|
+
* {@link setPanelSubmitEnabled}, which is how a panel that grows an act (an
|
|
320
|
+
* "Other…" field, a written instruction) turns the button back on.
|
|
337
321
|
*
|
|
338
|
-
*
|
|
339
|
-
*
|
|
340
|
-
*
|
|
341
|
-
* wrote `''`, not the previous value).
|
|
322
|
+
* The mode is declared with an attribute + CSS rather than inline `style.display`
|
|
323
|
+
* on a child: an attribute is themeable, is visible to a consumer's own rules, and
|
|
324
|
+
* does not clobber a `display` the consumer set.
|
|
342
325
|
*
|
|
343
326
|
* Returns the TOKEN for this panel. Pass it back to `hidePanel` so a presenter
|
|
344
327
|
* that has already lost the slot cannot close the panel that replaced it, and
|
|
@@ -365,18 +348,6 @@ export declare class AparteComposer extends HTMLElement {
|
|
|
365
348
|
* no token it closes whatever is there, which is what a consumer driving the
|
|
366
349
|
* composer directly means.
|
|
367
350
|
*
|
|
368
|
-
* BOTH forms notify. The no-token form used to call `_teardownPanel` directly,
|
|
369
|
-
* which nulls `_panelOnEvict` without ever calling it — so the documented public
|
|
370
|
-
* `hidePanel()` closed an open approval panel and left its request pending
|
|
371
|
-
* forever. The turn hung on "waiting for you", and because
|
|
372
|
-
* `AparteConfig.requestUserInput` chains each request on the previous one, NO
|
|
373
|
-
* further question or approval on that config was ever presented again, for the
|
|
374
|
-
* life of the page.
|
|
375
|
-
*
|
|
376
|
-
* The old JSDoc justified the silent branch as "what `reset()` needs". It was not:
|
|
377
|
-
* `reset()` calls `_evictPanel()`, which notifies. The branch had no consumer and
|
|
378
|
-
* one failure mode.
|
|
379
|
-
*
|
|
380
351
|
* The two forms differ on purpose, and the difference is who already knows:
|
|
381
352
|
*
|
|
382
353
|
* - **With a matching token** the OWNER is closing its own panel, which is what
|
|
@@ -404,10 +375,10 @@ export declare class AparteComposer extends HTMLElement {
|
|
|
404
375
|
/**
|
|
405
376
|
* Publish the panel mode as an attribute, so CSS can act on it.
|
|
406
377
|
*
|
|
407
|
-
* The same reasoning `data-panel-active` is set for
|
|
408
|
-
*
|
|
409
|
-
*
|
|
410
|
-
*
|
|
378
|
+
* The same reasoning `data-panel-active` is set for: an attribute is themeable, is
|
|
379
|
+
* visible to a consumer's own rules, and does not clobber what the consumer set. It
|
|
380
|
+
* is what lets `'none'` remove the send button without this component reaching
|
|
381
|
+
* into it.
|
|
411
382
|
*/
|
|
412
383
|
private _reflectPanelMode;
|
|
413
384
|
get panelActive(): boolean;
|
|
@@ -442,15 +413,12 @@ export declare class AparteComposer extends HTMLElement {
|
|
|
442
413
|
* Which chat this composer belongs to: its `target` attribute, or the id of the
|
|
443
414
|
* chat host above it.
|
|
444
415
|
*
|
|
445
|
-
* All four wrappers set `target` themselves
|
|
446
|
-
*
|
|
447
|
-
*
|
|
448
|
-
*
|
|
449
|
-
*
|
|
450
|
-
* i.e. the question vanished and the turn hung.
|
|
416
|
+
* All four wrappers set `target` themselves. In RAW core — the documented quick
|
|
417
|
+
* start, where the markup is hand-written — nothing sets it, so the chat host above
|
|
418
|
+
* is what identifies the composer; without either, it would accept every chat's
|
|
419
|
+
* lifecycle events and, on a two-chat page, one chat's Stop would tear down the
|
|
420
|
+
* other's open elicitation panel.
|
|
451
421
|
*
|
|
452
|
-
* Found by a two-chat test written for the elicitation presenter, which is the
|
|
453
|
-
* only reason it surfaced: raw core with two chats is a shape nothing exercised.
|
|
454
422
|
* The hosts matched are the ones `aparte-chat-bubble._resolveTargetId()` matches,
|
|
455
423
|
* for the reason written there — Angular's wrapper root IS `<aparte-chat>`, the
|
|
456
424
|
* other three render a `[data-aparte-chat]` div.
|
|
@@ -473,11 +441,11 @@ export declare class AparteComposer extends HTMLElement {
|
|
|
473
441
|
* Whether a terminal event ends the turn this composer is following.
|
|
474
442
|
*
|
|
475
443
|
* `_isForThisComposer` answers "is this chat's?", and both turns of a retry belong
|
|
476
|
-
* to the same chat: the client aborts the superseded reply
|
|
477
|
-
* `run-aborted` for it,
|
|
478
|
-
*
|
|
479
|
-
*
|
|
480
|
-
*
|
|
444
|
+
* to the same chat: the client aborts the superseded reply and the engine emits
|
|
445
|
+
* `run-aborted` for it, which must not turn Stop back into Send while the new reply
|
|
446
|
+
* is still streaming, nor evict the open panel (the approval question a tool is
|
|
447
|
+
* still waiting on). An event with no `messageId` still ends the turn: a loop of
|
|
448
|
+
* one's own saying "done" means this one.
|
|
481
449
|
*/
|
|
482
450
|
private _isForThisTurn;
|
|
483
451
|
private _handleMessageStart;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-composer.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer.ts"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"aparte-composer.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,8 +25,7 @@ export interface AparteContextThresholdEventDetail {
|
|
|
25
25
|
* Two thresholds turn it `warn` then `danger` (`data-level`), and crossing one fires
|
|
26
26
|
* `aparte-context-threshold`. With `auto-compact`, a turn that ends in `danger` dispatches
|
|
27
27
|
* `aparte-compact` for its chat — one request at a time, asked again on the next turn in
|
|
28
|
-
* `danger` once the plugin has answered
|
|
29
|
-
* a gauge that turns red and then does nothing was missing. What answers the command
|
|
28
|
+
* `danger` once the plugin has answered. What answers the command
|
|
30
29
|
* is `@aparte/plugin-compaction` (`setupCompaction()`): it summarises what no longer
|
|
31
30
|
* fits the window and keeps the recent turns. Core itself does not compact — the
|
|
32
31
|
* gauge asks, the plugin does, and a page without the plugin gets a gauge that only
|
|
@@ -40,6 +39,7 @@ export interface AparteContextThresholdEventDetail {
|
|
|
40
39
|
* @element aparte-context
|
|
41
40
|
*
|
|
42
41
|
* @attr {number} window - The context window, in tokens. Overrides the current model's `contextWindow`.
|
|
42
|
+
* @attr {number} used - Tokens in use before a turn of this page has reported any: a restored conversation's last usage. The next turn's usage replaces it.
|
|
43
43
|
* @attr {number} warn - Fraction of the window at which the level turns `warn`. Default `0.75`.
|
|
44
44
|
* @attr {number} danger - Fraction at which it turns `danger`. Default `0.9`.
|
|
45
45
|
* @attr {boolean} auto-compact - Dispatch `aparte-compact` on each turn that ends in `danger`, one request at a time.
|
|
@@ -86,8 +86,13 @@ export declare class AparteContext extends HTMLElement {
|
|
|
86
86
|
/** A failed compaction spends the request too; the next `danger` asks again. */
|
|
87
87
|
private _onCompactError;
|
|
88
88
|
private _onRerender;
|
|
89
|
-
/** Tokens the last turn reported
|
|
89
|
+
/** Tokens the last turn reported — or `used` set, until a turn reports — else `null`. */
|
|
90
90
|
get used(): number | null;
|
|
91
|
+
/**
|
|
92
|
+
* Writes the `used` attribute: a reading for a conversation restored without a turn of
|
|
93
|
+
* this page, which had nothing to report until the next one. `null` clears it.
|
|
94
|
+
*/
|
|
95
|
+
set used(value: number | null);
|
|
91
96
|
/** The window in force — the attribute, else the current model's. */
|
|
92
97
|
get window(): number | null;
|
|
93
98
|
/**
|
|
@@ -102,7 +107,7 @@ export declare class AparteContext extends HTMLElement {
|
|
|
102
107
|
get level(): AparteContextLevel | null;
|
|
103
108
|
connectedCallback(): void;
|
|
104
109
|
disconnectedCallback(): void;
|
|
105
|
-
attributeChangedCallback(): void;
|
|
110
|
+
attributeChangedCallback(name: string): void;
|
|
106
111
|
private _window;
|
|
107
112
|
/** The chat this gauge watches: `target`, else the chat host above it — the composer's rule. */
|
|
108
113
|
private _ownTargetId;
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;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,
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;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,yFAAyF;IACzF,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IAED;;;OAGG;IACH,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAG5B;IAED,qEAAqE;IACrE,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IAED;;;;;;OAMG;IACH,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAG9B;IAED,2DAA2D;IAC3D,IAAI,KAAK,IAAI,kBAAkB,GAAG,IAAI,CAErC;IAED,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,IAAI,IAAI;IAO5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ5C,OAAO,CAAC,OAAO;IAOf,gGAAgG;IAChG,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,OAAO;CA2FlB"}
|
|
@@ -49,7 +49,7 @@ export interface AparteConversationRenameDetail {
|
|
|
49
49
|
* What it is not: a store. Selecting, renaming, pinning, archiving and deleting all
|
|
50
50
|
* leave the array untouched — the events carry an id (and, for rename, the title) and
|
|
51
51
|
* stop. Set `manage` and the menu's write gestures are carried out on the conversation
|
|
52
|
-
* manager you registered, so
|
|
52
|
+
* manager you registered, so you do not write those six listeners; the
|
|
53
53
|
* event still goes out first and `preventDefault()` takes the gesture back. The array
|
|
54
54
|
* is still not this element's: the manager's own change is what re-renders it.
|
|
55
55
|
* A row's text comes from the array, so it changes when the host assigns
|
|
@@ -65,6 +65,7 @@ export interface AparteConversationRenameDetail {
|
|
|
65
65
|
* @element aparte-conversation-list
|
|
66
66
|
* @attr {string} active-id - The id of the conversation to render as selected.
|
|
67
67
|
* @attr {boolean} flat - Render the rows flat, in host order, with no date headings.
|
|
68
|
+
* @attr {boolean} data-no-match - Reflected BY the element while `filter()` holds a query no title matches. Read-only.
|
|
68
69
|
* @attr {boolean} loading - The list is on its way: six skeleton rows stand where the rows will be, the
|
|
69
70
|
* element is `aria-busy` and a visually hidden line names the wait. A list that is
|
|
70
71
|
* not there yet is not an empty list. Set it while your store answers, clear it when
|
|
@@ -149,11 +150,10 @@ export declare class AparteConversationList extends HTMLElement {
|
|
|
149
150
|
* Let the list finish the gesture through the registered conversation manager.
|
|
150
151
|
* Reflected as the `manage` attribute.
|
|
151
152
|
*
|
|
152
|
-
* The property
|
|
153
|
-
* and
|
|
154
|
-
*
|
|
155
|
-
* turning management off
|
|
156
|
-
* was also done by the list. `presenceOn`, like `loading` above it.
|
|
153
|
+
* The property exists because this is the attribute that authorises a WRITE, and Vue
|
|
154
|
+
* and both Sveltes stringify a bound `false` onto an element that has no property of
|
|
155
|
+
* that name — `manage="false"`, which `hasAttribute` reads as on. Without it,
|
|
156
|
+
* turning management off would turn it on. `presenceOn`, like `loading` above it.
|
|
157
157
|
*/
|
|
158
158
|
get manage(): boolean;
|
|
159
159
|
set manage(value: boolean);
|
|
@@ -173,13 +173,12 @@ export declare class AparteConversationList extends HTMLElement {
|
|
|
173
173
|
/**
|
|
174
174
|
* A press holds every render until its click has landed. The host re-assigns
|
|
175
175
|
* `conversations` on every manager change (a save moves a row, a select marks one),
|
|
176
|
-
* and a row replaced between `mousedown` and `mouseup`
|
|
177
|
-
* it to the list, where the delegated handler
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
* after the click.
|
|
176
|
+
* and a row replaced between `mousedown` and `mouseup` loses its click: Chromium
|
|
177
|
+
* sends it to the list, where the delegated handler matches nothing, and WebKit
|
|
178
|
+
* sends none. Keeping the row node would not help: a row moved to its new place
|
|
179
|
+
* leaves the document on the way, and the row that moves is often the one pressed
|
|
180
|
+
* (the conversation just saved). So nothing changes under a pointer that is down,
|
|
181
|
+
* and the render runs once, after the click.
|
|
183
182
|
*/
|
|
184
183
|
private _pressed;
|
|
185
184
|
private _renderAfterPress;
|
|
@@ -188,6 +187,17 @@ export declare class AparteConversationList extends HTMLElement {
|
|
|
188
187
|
/** The name this element last wrote, so one the app wrote — before or after connect — is left alone. */
|
|
189
188
|
private _ownLabel;
|
|
190
189
|
private _render;
|
|
190
|
+
/** The query `filter()` holds, folded; re-applied on every render, so new rows obey it. */
|
|
191
|
+
private _query;
|
|
192
|
+
/**
|
|
193
|
+
* Show only the conversations whose title contains `query`, case- and
|
|
194
|
+
* accent-insensitive, and the date groups that still hold one; return how many match.
|
|
195
|
+
* An empty query shows everything. The query is kept through every render — a new
|
|
196
|
+
* conversation, a rename — and when nothing matches the list says so in a status line
|
|
197
|
+
* (the locale's `conversationSearchEmpty`) and carries `data-no-match`.
|
|
198
|
+
*/
|
|
199
|
+
filter(query: string): number;
|
|
200
|
+
private _applyFilter;
|
|
191
201
|
private _t;
|
|
192
202
|
/**
|
|
193
203
|
* Pinned first, then the calendar buckets every chat product uses, then a heading
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-conversation-list.d.ts","sourceRoot":"","sources":["../../../src/components/conversation-list/aparte-conversation-list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aparte-conversation-list.d.ts","sourceRoot":"","sources":["../../../src/components/conversation-list/aparte-conversation-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,19 +3,18 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Registers itself as the presenter for the config governing its subtree
|
|
5
5
|
* (`resolveConfig(this)`), so `requestUserInput()` from a tool handler is routed
|
|
6
|
-
* here
|
|
7
|
-
* stringly-typed `aparte-ask-user-*` events that drifted in Phase 1.
|
|
6
|
+
* here, through the typed presenter contract rather than window events.
|
|
8
7
|
*
|
|
9
8
|
* On a request it builds the schema-appropriate panel (enum / boolean / string /
|
|
10
9
|
* object) and mounts it inside the nearest `<aparte-composer>` via its
|
|
11
10
|
* `showPanel` API, resolving:
|
|
12
11
|
* - accept — the send button (panel submit), when all fields are complete
|
|
13
12
|
* - decline — the inline "Skip" affordance
|
|
14
|
-
*
|
|
13
|
+
* and rejecting with an `AparteElicitationAbortError` when the turn is stopped or
|
|
14
|
+
* errors while the question is open, or when the panel is evicted.
|
|
15
15
|
*
|
|
16
|
-
* Its CSS ships in `@aparte/core/styles.css` like every other component
|
|
17
|
-
*
|
|
18
|
-
* be themed and whose variables were missing from the generated CSS reference.
|
|
16
|
+
* Its CSS ships in `@aparte/core/styles.css` like every other component, so it can be
|
|
17
|
+
* themed and its variables appear in the generated CSS reference.
|
|
19
18
|
*
|
|
20
19
|
* Place anywhere inside the chat (it renders nothing itself):
|
|
21
20
|
* <aparte-elicitation></aparte-elicitation>
|
|
@@ -29,9 +28,7 @@ import type { AparteConfig } from '../../config/aparte-config.js';
|
|
|
29
28
|
* `requestUserInput`, or core's own approval gate.
|
|
30
29
|
*
|
|
31
30
|
* It dispatches no events on purpose. A request is answered through the typed presenter
|
|
32
|
-
* contract, not by listening for one
|
|
33
|
-
* existed only because the buttons used to live in a segment renderer with no reference
|
|
34
|
-
* to the client.
|
|
31
|
+
* contract, not by listening for one.
|
|
35
32
|
*
|
|
36
33
|
* It has no children to project: `connectedCallback` sets
|
|
37
34
|
* `display: none`, and the composer it presents in is found by walking UP from
|
|
@@ -74,7 +71,7 @@ import type { AparteConfig } from '../../config/aparte-config.js';
|
|
|
74
71
|
* @cssprop [--aparte-elic-step-padding=var(--aparte-space-2) var(--aparte-space-1)] - Padding of a step tab.
|
|
75
72
|
* @cssprop [--aparte-elic-step-gap=var(--aparte-space-7)] - Gap between step tabs.
|
|
76
73
|
* @cssprop [--aparte-elic-step-underline=2px] - Thickness of the current step's underline (a tab, not a pill).
|
|
77
|
-
* @cssprop [--aparte-elic-dismiss-room=
|
|
74
|
+
* @cssprop [--aparte-elic-dismiss-room=104px] - Space the tab rail and the question message keep clear for the corner: the hide button and, on a question, Skip. Widen it for a locale whose "Skip" word is wider.
|
|
78
75
|
* @cssprop [--aparte-approval-gap=4px] - Gap between the stacked options of an approval request.
|
|
79
76
|
* @cssprop [--aparte-approval-option-size=0.85rem] - Font size of an approval option button.
|
|
80
77
|
* @cssprop [--aparte-approval-option-padding=8px 10px] - Padding of an approval option button.
|
|
@@ -119,12 +116,9 @@ export declare class AparteElicitation extends HTMLElement implements AparteConf
|
|
|
119
116
|
/**
|
|
120
117
|
* A turn ended — cancel the open question only if it was OUR turn.
|
|
121
118
|
*
|
|
122
|
-
* These two listeners sit on `window
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* the user was still looking at. Same defect as the `compact()` handler that
|
|
126
|
-
* emptied both chats, which its four sibling handlers in `AparteClient` already
|
|
127
|
-
* guarded against.
|
|
119
|
+
* These two listeners sit on `window`, so they filter by instance: a Stop (or an
|
|
120
|
+
* error) in one chat must not cancel the question a DIFFERENT chat is waiting on,
|
|
121
|
+
* whose model would be told the user refused a question they were still looking at.
|
|
128
122
|
*
|
|
129
123
|
* The leniency rule is the composer's, deliberately: an event with no
|
|
130
124
|
* `targetId` is for everyone (a single-chat app never sets one), and a chat we
|
|
@@ -174,12 +168,11 @@ export declare class AparteElicitation extends HTMLElement implements AparteConf
|
|
|
174
168
|
* The composer to present in: the nearest one in an ancestor subtree, and
|
|
175
169
|
* nothing else.
|
|
176
170
|
*
|
|
177
|
-
* There
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
* belonging to a chat the user was not looking at.
|
|
171
|
+
* There is no `document.querySelector('aparte-composer')` fallback: on a page with
|
|
172
|
+
* two chats, an elicitation that could not find its own composer would mount its
|
|
173
|
+
* panel in the OTHER chat's, so one conversation's question would appear under the
|
|
174
|
+
* other conversation, and answering it would resolve a tool call belonging to a
|
|
175
|
+
* chat the user was not looking at.
|
|
183
176
|
*
|
|
184
177
|
* Returning `null` instead REJECTS the request, which is honest: nothing was
|
|
185
178
|
* shown, so nothing was answered. The warning names the fix, because this is a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-elicitation.d.ts","sourceRoot":"","sources":["../../../src/components/elicitation/aparte-elicitation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"aparte-elicitation.d.ts","sourceRoot":"","sources":["../../../src/components/elicitation/aparte-elicitation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAgC,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAgGlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyFG;AACH,qBAAa,iBAAkB,SAAQ,WAAY,YAAW,iBAAiB;IAC3E,OAAO,CAAC,QAAQ,CAAwB;IACxC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,UAAU,CAKhB;IAEF,OAAO,CAAC,kBAAkB,CAA6B;IAEvD,iBAAiB,IAAI,IAAI;IAiBzB;;;;;;;;;;;OAWG;IACH,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAQrE,oBAAoB,IAAI,IAAI;IAY5B;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,QAAQ,CAmQd;IAEF,OAAO,CAAC,cAAc;IAItB;;;;;;;;;OASG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,YAAY;CAwBvB"}
|
|
@@ -21,7 +21,7 @@ export type AparteScrollRailEvery = 'user' | 'message';
|
|
|
21
21
|
* surface, never scroll arithmetic), and the first few words of each for the tick's
|
|
22
22
|
* name. A click is a `scrollIntoView` on the bubble, announced first by a cancelable
|
|
23
23
|
* `aparte-scroll-rail-jump` so a host that pages history in can load it before the
|
|
24
|
-
* jump. Honoured by core alone, so it is live by default
|
|
24
|
+
* jump. Honoured by core alone, so it is live by default.
|
|
25
25
|
*
|
|
26
26
|
* Place it as a direct child of `<aparte-chat>` (or the wrapper's `[data-aparte-chat]`
|
|
27
27
|
* host): the stylesheet floats it on the transcript's end edge, centred on the transcript
|
|
@@ -46,6 +46,7 @@ export type AparteScrollRailEvery = 'user' | 'message';
|
|
|
46
46
|
* @cssprop [--aparte-scroll-rail-tick-thickness=2px] - Thickness of a tick.
|
|
47
47
|
* @cssprop [--aparte-scroll-rail-hit-size=24px] - The pressable zone around a tick (WCAG 2.5.8). The drawn line keeps its own size; this one sizes the pseudo-element and, through the gap below, the pitch — so raising it spaces the ticks out rather than overlapping them. When the ticks would not fit, the rail sets it on itself to the pitch that does, never under 6px.
|
|
48
48
|
* @cssprop [--aparte-scroll-rail-gap=calc(var(--aparte-scroll-rail-hit-size) - var(--aparte-scroll-rail-tick-thickness))] - Space between ticks: the zone minus the line, so gap + thickness is exactly the pitch. Set it smaller and the zones overlap.
|
|
49
|
+
* @cssprop [--aparte-scroll-rail-room=calc(var(--aparte-scroll-rail-width) + var(--aparte-space-2))] - The lane the chat leaves at its end edge while the rail is in it, the rail sitting there, so no line runs under the ticks. `0px` lets the rail float over the text.
|
|
49
50
|
* @cssprop [--aparte-scroll-rail-share=.6] - The share of the transcript's height the rail may take. It is the height of its list up to this, centred on the transcript; past it the pitch tightens, then the rail scrolls.
|
|
50
51
|
* @cssprop [--aparte-scroll-rail-bar=0px] - Published BY the element: the width of the transcript's scrollbar when it is a classic one (0 for an overlay bar), which the stylesheet adds to the rail's end inset so the ticks never sit on the bar.
|
|
51
52
|
* @cssprop [--aparte-scroll-rail-block-start=0px] - Published BY the element: the distance from the host's top edge to the transcript's, so the rail centres on the transcript rather than on the composer too.
|
|
@@ -131,12 +132,11 @@ export declare class AparteScrollRail extends HTMLElement {
|
|
|
131
132
|
* intersection observer reports which bubbles reach a reading band — the top 30% of
|
|
132
133
|
* the surface, from its very top so that the bubble a jump aligned there counts. The
|
|
133
134
|
* rule is a scrollspy's: the LAST question that has reached the band is the one the
|
|
134
|
-
* reader is under.
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* holds, and the observer has nothing to report on the last few pixels.
|
|
135
|
+
* reader is under. (The largest visible share would name the first of three questions
|
|
136
|
+
* sitting in the band at the bottom of a thread of short turns.) The one scroll
|
|
137
|
+
* position read is the bottom, because there the reader is under the latest question
|
|
138
|
+
* whatever the band holds, and the observer has nothing to report on the last few
|
|
139
|
+
* pixels.
|
|
140
140
|
*/
|
|
141
141
|
private _observe;
|
|
142
142
|
private _unobserve;
|
|
@@ -170,14 +170,13 @@ export declare class AparteScrollRail extends HTMLElement {
|
|
|
170
170
|
* Scroll the transcript to a message. Announced first, cancelable; then a
|
|
171
171
|
* `scrollIntoView` on the bubble, smooth unless the reader prefers reduced motion.
|
|
172
172
|
* The clicked tick is the mark until the transcript has stopped moving: while a
|
|
173
|
-
* smooth scroll crosses other questions the band would name each in turn
|
|
174
|
-
* ended on the wrong one two times in three before this hold.
|
|
173
|
+
* smooth scroll crosses other questions the band would name each in turn.
|
|
175
174
|
*
|
|
176
175
|
* Where the scroll lands is checked once it has settled, and corrected. The bubbles
|
|
177
176
|
* carry `content-visibility: auto`, so a bubble far from the reader has an estimated
|
|
178
177
|
* height until it is rendered: the scroll aims at an estimate, the bubbles above it
|
|
179
|
-
* take their real size on the way, and the message ends up above or below the top
|
|
180
|
-
*
|
|
178
|
+
* take their real size on the way, and the message ends up above or below the top,
|
|
179
|
+
* the further away the worse.
|
|
181
180
|
* A second `scrollIntoView` from a rendered neighbourhood lands; a few are allowed.
|
|
182
181
|
*/
|
|
183
182
|
jumpTo(messageId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-scroll-rail.d.ts","sourceRoot":"","sources":["../../../src/components/scroll-rail/aparte-scroll-rail.ts"],"names":[],"mappings":"AAIA,yEAAyE;AACzE,MAAM,WAAW,0BAA0B;IACvC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qFAAqF;AACrF,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAAC;AAYvD
|
|
1
|
+
{"version":3,"file":"aparte-scroll-rail.d.ts","sourceRoot":"","sources":["../../../src/components/scroll-rail/aparte-scroll-rail.ts"],"names":[],"mappings":"AAIA,yEAAyE;AACzE,MAAM,WAAW,0BAA0B;IACvC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qFAAqF;AACrF,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAAC;AAYvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;IAC7C,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,cAAc,CAAqC;IAC3D,oHAAoH;IACpH,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,mFAAmF;IACnF,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAuB;IACzC,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAA6B;IAC7C,yFAAyF;IACzF,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,+EAA+E;IAC/E,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,cAAc,CAA4B;IAClD,iDAAiD;IACjD,OAAO,CAAC,YAAY,CAAK;IACzB,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAA6B;IAE7C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,iEAAiE;IACjE,IAAI,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEpC;IAED,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAO5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ5C,uFAAuF;IACvF,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,OAAO;IA8Bf,OAAO,CAAC,OAAO;IAUf,2FAA2F;IAC3F,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,SAAS;IAIjB,+FAA+F;IAC/F,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,QAAQ;IAUhB,sFAAsF;IACtF,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,KAAK;IAIb;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAoEhB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,QAAQ;IAkChB,OAAO,CAAC,UAAU;IAYlB,kGAAkG;IAClG,OAAO,CAAC,aAAa,CAOnB;IAEF,6GAA6G;IAC7G,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,WAAW;IAanB,0FAA0F;IAC1F,OAAO,CAAC,OAAO;IAWf,0FAA0F;IAC1F,OAAO,CAAC,MAAM;IAOd;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,OAAO;IA2Cf,OAAO,CAAC,QAAQ,CAMd;IAEF,sEAAsE;IACtE,OAAO,CAAC,UAAU,CAchB;IAEF;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAoB/B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,SAAS;IAKjB,qFAAqF;IACrF,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,WAAW;IAKnB,iGAAiG;IACjG,OAAO,CAAC,OAAO;IAoBf,OAAO,CAAC,QAAQ;CAOnB"}
|
|
@@ -124,6 +124,10 @@ export declare class AparteSidebar extends HTMLElement {
|
|
|
124
124
|
* Same convention as `_relabel`, which leaves a host-authored `aria-label` alone.
|
|
125
125
|
*/
|
|
126
126
|
private _ownHidden;
|
|
127
|
+
/** The query `filter()` was last given, kept so the sidebar's no-match can follow its lists. */
|
|
128
|
+
private _query;
|
|
129
|
+
/** Watches the lists' own `data-no-match` and `loading`, which change with their renders. */
|
|
130
|
+
private _listWatch;
|
|
127
131
|
/** Whether the sidebar is collapsed (hidden in the flow, or closed as a drawer). */
|
|
128
132
|
get collapsed(): boolean;
|
|
129
133
|
set collapsed(value: boolean);
|
|
@@ -190,10 +194,19 @@ export declare class AparteSidebar extends HTMLElement {
|
|
|
190
194
|
private _onDocumentClick;
|
|
191
195
|
private _onInput;
|
|
192
196
|
/**
|
|
193
|
-
*
|
|
194
|
-
*
|
|
197
|
+
* Filter the conversation lists inside by title (case- and accent-insensitive; an
|
|
198
|
+
* empty query shows everything), and return how many conversations match. Each list
|
|
199
|
+
* keeps the query through its own renders and says when nothing matches; the
|
|
200
|
+
* sidebar carries `data-no-match` then too.
|
|
195
201
|
*/
|
|
196
|
-
filter(query: string):
|
|
202
|
+
filter(query: string): number;
|
|
203
|
+
private _lists;
|
|
204
|
+
/**
|
|
205
|
+
* `data-no-match` while the held query matches nothing in any list — read from the lists
|
|
206
|
+
* themselves, so it follows their renders (a conversation that matches arriving, the last
|
|
207
|
+
* match leaving) and is never set while one of them is still loading.
|
|
208
|
+
*/
|
|
209
|
+
private _syncNoMatch;
|
|
197
210
|
private _onConfigChange;
|
|
198
211
|
private _relabel;
|
|
199
212
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aparte-sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/aparte-sidebar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aparte-sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/aparte-sidebar.ts"],"names":[],"mappings":"AAKA,iEAAiE;AACjE,MAAM,WAAW,yBAAyB;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,MAAM,EAAE,OAAO,CAAC;CACnB;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC1C,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAA4B;IAC1C,0EAA0E;IAC1E,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,cAAc,CAAwB;IAE9C;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAS;IAE9B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB,CAAS;IAElC,qGAAqG;IACrG,OAAO,CAAC,KAAK,CAAS;IAEtB;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAS;IAC3B,gGAAgG;IAChG,OAAO,CAAC,MAAM,CAAM;IACpB,6FAA6F;IAC7F,OAAO,CAAC,UAAU,CAAiC;IAEnD,oFAAoF;IACpF,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAE3B;IAED,iFAAiF;IACjF,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,iBAAiB,IAAI,IAAI;IAiCzB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAexB,oBAAoB,IAAI,IAAI;IAY5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA+B5C,0FAA0F;IAC1F,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI;IAKhC,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI;IAOlC,OAAO,CAAC,cAAc,CAAkE;IAExF;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAepB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAgBpB,wFAAwF;IACxF,OAAO,CAAC,OAAO;IAKf;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,WAAW;IAYnB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,UAAU,CAiChB;IAEF,8FAA8F;IAC9F,OAAO,CAAC,gBAAgB,CAOtB;IAIF,OAAO,CAAC,QAAQ,CAId;IAEF;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAqB7B,OAAO,CAAC,MAAM;IAId;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,eAAe,CAA+B;IAEtD,OAAO,CAAC,QAAQ;CAMnB"}
|