@aparte/core 0.16.1 → 0.16.2
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/components/chat/aparte-chat.d.ts +7 -0
- package/dist/components/chat/aparte-chat.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-action.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-add-attachment.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-cancel.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-input.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-send.d.ts.map +1 -1
- package/dist/components/viewport/aparte-chat-viewport.d.ts +25 -0
- package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -1
- package/dist/custom-elements.json +10612 -10548
- package/dist/generated/element-attributes.d.ts +2 -0
- package/dist/generated/element-attributes.d.ts.map +1 -1
- package/dist/index.css +126 -7
- package/dist/index.js +66 -13
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -8,6 +8,8 @@ export interface AparteChatAttributes {
|
|
|
8
8
|
'center-empty'?: boolean;
|
|
9
9
|
/** 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`) */
|
|
10
10
|
attachments?: boolean;
|
|
11
|
+
/** The ChatGPT anatomy, opt-in: the transcript's scroll surface spans the whole column and the composer (with the rest of the bottom stack) floats over it, so the scrollbar runs edge to edge instead of stopping at the composer's top. The viewport measures the stack and publishes `--aparte-bottom-inset`; content, spacer and the scroll button clear it. Read when the viewport wires its observers — set it in the initial markup. Also honoured on a wrapper's `[data-aparte-chat]` root. */
|
|
12
|
+
'overlay-composer'?: boolean;
|
|
11
13
|
/** The wrapper's explicit hands-off signal: set it and this element composes none of its own children, because the framework owns them. Read once at connect (it is not observed), so it has to be in the initial markup. Angular's wrapper sets it on this element — its component selector IS `aparte-chat`; React/Vue/Svelte render a `[data-aparte-chat]` div and never create this element at all. */
|
|
12
14
|
'framework-managed'?: boolean;
|
|
13
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-attributes.d.ts","sourceRoot":"","sources":["../../src/generated/element-attributes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"element-attributes.d.ts","sourceRoot":"","sources":["../../src/generated/element-attributes.ts"],"names":[],"mappings":"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"}
|
package/dist/index.css
CHANGED
|
@@ -1025,10 +1025,20 @@ aparte-conversation-list {
|
|
|
1025
1025
|
* <button class="aparte-btn aparte-btn--icon" aria-label="Copy">
|
|
1026
1026
|
* <aparte-icon name="copy"></aparte-icon>
|
|
1027
1027
|
* </button>
|
|
1028
|
+
* <div class="aparte-btn-group" role="group" aria-label="Versions">
|
|
1029
|
+
* <button class="aparte-btn aparte-btn--surface">‹</button>
|
|
1030
|
+
* <button class="aparte-btn aparte-btn--surface">1 / 2</button>
|
|
1031
|
+
* <button class="aparte-btn aparte-btn--surface">›</button>
|
|
1032
|
+
* </div>
|
|
1028
1033
|
*
|
|
1029
1034
|
* An intent on its own is a ghost — the quietest form, and the one a chat uses most.
|
|
1030
1035
|
* Add a fill when the button has to carry more weight.
|
|
1031
1036
|
*
|
|
1037
|
+
* `.aparte-btn-group` fuses adjacent buttons into ONE control: the inner corners
|
|
1038
|
+
* drop, the shared borders overlap, and only the group's ends keep the radius. Give
|
|
1039
|
+
* the wrapper `role="group"` and a name — visually one control, it should read as
|
|
1040
|
+
* one too.
|
|
1041
|
+
*
|
|
1032
1042
|
* This layer is NEUTRAL: it is what a UI library offers, not a summary of what this
|
|
1033
1043
|
* repo happens to use. A variant nothing wears still ships, because the plugin that
|
|
1034
1044
|
* needs it is not written yet, and its absence is what makes an author invent a
|
|
@@ -4337,6 +4347,59 @@ aparte-chat > aparte-chat-viewport,
|
|
|
4337
4347
|
min-height: 0;
|
|
4338
4348
|
}
|
|
4339
4349
|
|
|
4350
|
+
/* ─── Overlay composer (`overlay-composer`) ───────────────────────────────────
|
|
4351
|
+
The ChatGPT anatomy, opt-in: the transcript's scroll surface spans the WHOLE
|
|
4352
|
+
column and the composer floats over it, so the scrollbar runs edge to edge
|
|
4353
|
+
instead of stopping at the composer's top. Opt-in, never the default — a chat
|
|
4354
|
+
embedded in a small box should not have its composer eating the transcript.
|
|
4355
|
+
|
|
4356
|
+
The viewport leaves the flow (absolute over the shell) and everything else —
|
|
4357
|
+
elicitation, an above-composer row, the composer — keeps flowing, pushed to the
|
|
4358
|
+
bottom and painted over it. The transcript clears that stack through
|
|
4359
|
+
`--aparte-bottom-inset`, which the viewport measures from the stack's top edge
|
|
4360
|
+
(see `_updateOverlayInset`): the `::after` spacer grows by it in
|
|
4361
|
+
framework-managed mode, the container's own padding in core mode, and the
|
|
4362
|
+
scroll button's `bottom` rides it in both. The inset var and its readers are
|
|
4363
|
+
unconditional (0px when unset), so a host that overlays a composer of its own
|
|
4364
|
+
can write the variable itself without this attribute.
|
|
4365
|
+
|
|
4366
|
+
Three shell shapes, because the wrappers differ: the vanilla <aparte-chat>
|
|
4367
|
+
element, the [data-aparte-chat] div React/Vue/Svelte render, and Angular's
|
|
4368
|
+
inner .aparte-chat-container (its host IS aparte-chat, but the viewport is a
|
|
4369
|
+
child of the inner div, so that div is the shell the recipe lays out — the
|
|
4370
|
+
Angular wrapper binds the attribute there). The inner-div shape declares its
|
|
4371
|
+
own flex column: unlike the other two it inherits none. */
|
|
4372
|
+
aparte-chat[overlay-composer],
|
|
4373
|
+
[data-aparte-chat][overlay-composer],
|
|
4374
|
+
.aparte-chat-container[overlay-composer] {
|
|
4375
|
+
position: relative;
|
|
4376
|
+
display: flex;
|
|
4377
|
+
flex-direction: column;
|
|
4378
|
+
justify-content: flex-end;
|
|
4379
|
+
}
|
|
4380
|
+
|
|
4381
|
+
aparte-chat[overlay-composer] > aparte-chat-viewport,
|
|
4382
|
+
[data-aparte-chat][overlay-composer] > aparte-chat-viewport,
|
|
4383
|
+
.aparte-chat-container[overlay-composer] > aparte-chat-viewport {
|
|
4384
|
+
position: absolute;
|
|
4385
|
+
/* The padding box, so the scroll surface reaches the shell's true bottom edge —
|
|
4386
|
+
the `--aparte-chat-bottom-gap` padding stays under the floating stack and the
|
|
4387
|
+
measured inset covers it. */
|
|
4388
|
+
inset: 0;
|
|
4389
|
+
height: auto;
|
|
4390
|
+
z-index: 0;
|
|
4391
|
+
}
|
|
4392
|
+
|
|
4393
|
+
/* The bottom stack paints over the absolutely positioned viewport. `:not()` is
|
|
4394
|
+
exact here: the only child that is not the viewport IS the stack (the scroll
|
|
4395
|
+
button lives inside the viewport). */
|
|
4396
|
+
aparte-chat[overlay-composer] > :not(aparte-chat-viewport),
|
|
4397
|
+
[data-aparte-chat][overlay-composer] > :not(aparte-chat-viewport),
|
|
4398
|
+
.aparte-chat-container[overlay-composer] > :not(aparte-chat-viewport) {
|
|
4399
|
+
position: relative;
|
|
4400
|
+
z-index: var(--aparte-z-raised);
|
|
4401
|
+
}
|
|
4402
|
+
|
|
4340
4403
|
/* center-empty: the shell centers the composer as a welcome state until the first
|
|
4341
4404
|
message, then slides to the normal layout. The component toggles [data-empty]
|
|
4342
4405
|
on itself by watching its viewport — only `flex-grow` animates, so the composer
|
|
@@ -4382,6 +4445,11 @@ aparte-chat-viewport {
|
|
|
4382
4445
|
width: 100%;
|
|
4383
4446
|
overflow-y: auto;
|
|
4384
4447
|
overflow-x: hidden;
|
|
4448
|
+
/* The overlay clearance (0 outside overlay mode). Padding is SAFE on this box —
|
|
4449
|
+
the scroll button is absolute on the host, which does not scroll — where the
|
|
4450
|
+
framework-managed host must carry the same clearance in its ::after instead,
|
|
4451
|
+
because there the button is a sticky CHILD and padding would clamp it. */
|
|
4452
|
+
padding-bottom: var(--aparte-bottom-inset, 0px);
|
|
4385
4453
|
overscroll-behavior: contain;
|
|
4386
4454
|
scrollbar-width: thin;
|
|
4387
4455
|
scrollbar-color: var(--aparte-scrollbar-thumb) var(--aparte-scrollbar-track);
|
|
@@ -4392,6 +4460,11 @@ aparte-chat-viewport {
|
|
|
4392
4460
|
scrollbar-gutter: stable both-edges;
|
|
4393
4461
|
}
|
|
4394
4462
|
|
|
4463
|
+
/* NOT dead code: on modern Chromium/WebKit these ::-webkit-scrollbar-* blocks are
|
|
4464
|
+
ignored the moment `scrollbar-width`/`scrollbar-color` above are non-initial
|
|
4465
|
+
(CSSWG resolution, Chrome 121+). They exist for Safari BEFORE 18.2, which has no
|
|
4466
|
+
`scrollbar-width` at all - remove them and old Safari falls back to the fat
|
|
4467
|
+
native bar. Re-measured 2026-08-30 against MDN before a cleanup deletes them. */
|
|
4395
4468
|
.aparte-viewport-container::-webkit-scrollbar {
|
|
4396
4469
|
width: var(--aparte-scrollbar-width);
|
|
4397
4470
|
}
|
|
@@ -4424,7 +4497,9 @@ aparte-chat-viewport.aparte-viewport--framework::-webkit-scrollbar-thumb {
|
|
|
4424
4497
|
.aparte-scroll-btn {
|
|
4425
4498
|
--aparte-btn-size: var(--aparte-scroll-btn-size);
|
|
4426
4499
|
position: absolute;
|
|
4427
|
-
|
|
4500
|
+
/* Rides the overlay clearance (0 outside overlay mode), so it floats above a
|
|
4501
|
+
composer laid over the transcript rather than behind it. */
|
|
4502
|
+
bottom: calc(var(--aparte-space-8) + var(--aparte-bottom-inset, 0px));
|
|
4428
4503
|
left: 50%;
|
|
4429
4504
|
transform: translateX(-50%);
|
|
4430
4505
|
z-index: var(--aparte-z-floating);
|
|
@@ -4450,8 +4525,8 @@ aparte-chat-viewport.aparte-viewport--framework::-webkit-scrollbar-thumb {
|
|
|
4450
4525
|
the viewport does NOT relocate them into an internal wrapper (that would break
|
|
4451
4526
|
the framework's DOM reconciliation). Instead the HOST itself is the scroll
|
|
4452
4527
|
surface — these rules mirror .aparte-viewport-container + .aparte-messages-wrapper
|
|
4453
|
-
onto the host, and the bottom spacer becomes an
|
|
4454
|
-
so it can't collide with the framework's children
|
|
4528
|
+
onto the host, and the bottom spacer becomes an `::after` flex item — still
|
|
4529
|
+
nothing in the DOM, so it can't collide with the framework's children. */
|
|
4455
4530
|
aparte-chat-viewport.aparte-viewport--framework,
|
|
4456
4531
|
aparte-chat-viewport[framework-managed] {
|
|
4457
4532
|
/* The base rule gives this element `width: 100%`, and core ships no global
|
|
@@ -4470,7 +4545,10 @@ aparte-chat-viewport[framework-managed] {
|
|
|
4470
4545
|
flex-direction: column;
|
|
4471
4546
|
gap: var(--aparte-message-gap);
|
|
4472
4547
|
padding: var(--aparte-viewport-padding);
|
|
4473
|
-
|
|
4548
|
+
/* No bottom padding: a sticky child is clamped to its parent's CONTENT box, so
|
|
4549
|
+
clearance carried as padding held the scroll button `padding + spacer` above
|
|
4550
|
+
the bottom edge — the whole clearance lives in the `::after` below instead. */
|
|
4551
|
+
padding-bottom: 0;
|
|
4474
4552
|
scrollbar-width: thin;
|
|
4475
4553
|
scrollbar-color: var(--aparte-scrollbar-thumb) var(--aparte-scrollbar-track);
|
|
4476
4554
|
/* Same gutter rule as `.aparte-viewport-container` above: the host is the scroll
|
|
@@ -4488,6 +4566,24 @@ aparte-chat-viewport[framework-managed] > * {
|
|
|
4488
4566
|
flex-shrink: 0;
|
|
4489
4567
|
}
|
|
4490
4568
|
|
|
4569
|
+
/* The bottom spacer: the base padding plus whatever `_setSpacerHeight` writes to
|
|
4570
|
+
`--aparte-fw-spacer`. A flex item rather than host padding because the scroll
|
|
4571
|
+
button's `position: sticky` is clamped to the CONTENT box — clearance carried as
|
|
4572
|
+
padding is territory the button can never enter, and it floated the full
|
|
4573
|
+
`padding + spacer` above the bottom edge (measured: 48-278px for 32 asked).
|
|
4574
|
+
`flex: 0 0` spells out `flex-shrink: 0`: the `> *` pin above matches elements
|
|
4575
|
+
only, never a pseudo. */
|
|
4576
|
+
aparte-chat-viewport.aparte-viewport--framework::after,
|
|
4577
|
+
aparte-chat-viewport[framework-managed]::after {
|
|
4578
|
+
content: '';
|
|
4579
|
+
flex: 0 0 calc(var(--aparte-viewport-padding) + var(--aparte-fw-spacer, 0px) + var(--aparte-bottom-inset, 0px));
|
|
4580
|
+
/* A flex item pays the column's `gap`; the padding this replaced did not. Without
|
|
4581
|
+
the cancel, an EMPTY transcript was 8px taller than its box and grew a scrollbar
|
|
4582
|
+
beside the welcome state — with children the spacer recalc absorbed it, which is
|
|
4583
|
+
why the geometry specs stayed green while the smoke case regressed. */
|
|
4584
|
+
margin-block-start: calc(var(--aparte-message-gap) * -1);
|
|
4585
|
+
}
|
|
4586
|
+
|
|
4491
4587
|
aparte-chat-viewport.aparte-viewport--framework::-webkit-scrollbar {
|
|
4492
4588
|
width: var(--aparte-scrollbar-width);
|
|
4493
4589
|
}
|
|
@@ -4498,18 +4594,29 @@ aparte-chat-viewport.aparte-viewport--framework::-webkit-scrollbar-track {
|
|
|
4498
4594
|
|
|
4499
4595
|
/* The scroll button lives INSIDE the scrolling host here (last child), so it
|
|
4500
4596
|
floats with `position: sticky` instead of the `absolute` used in core mode
|
|
4501
|
-
(where it sits outside the scroll container).
|
|
4597
|
+
(where it sits outside the scroll container). `order: 1` puts its FLOW position
|
|
4598
|
+
after the `::after` spacer (source order cannot — a pseudo always renders last):
|
|
4599
|
+
a bottom-sticky element sits at its flow position whenever that is above the
|
|
4600
|
+
sticky line, so a button flowing before a 230px spacer drifted up to 262px from
|
|
4601
|
+
the edge as the reader neared the bottom. Flowing last, its flow position is the
|
|
4602
|
+
very end and the sticky line always wins. */
|
|
4502
4603
|
aparte-chat-viewport.aparte-viewport--framework > .aparte-scroll-btn {
|
|
4503
4604
|
position: sticky;
|
|
4504
|
-
bottom: var(--aparte-space-8);
|
|
4605
|
+
bottom: calc(var(--aparte-space-8) + var(--aparte-bottom-inset, 0px));
|
|
4505
4606
|
left: auto;
|
|
4506
4607
|
align-self: center;
|
|
4507
4608
|
transform: none;
|
|
4508
4609
|
flex-shrink: 0;
|
|
4610
|
+
order: 1;
|
|
4509
4611
|
}
|
|
4510
4612
|
|
|
4613
|
+
/* Fade only, no slide: since `order: 1` the button is the LAST flow content, so a
|
|
4614
|
+
hidden-state translate overhangs the content end by its full distance — 8px of
|
|
4615
|
+
scrollable overflow, which on an EMPTY transcript is the whole scrollbar (the old
|
|
4616
|
+
padding used to absorb the overhang; the ::after spacer flows BEFORE the button
|
|
4617
|
+
and cannot). Core mode keeps the slide: its button is absolute, out of flow. */
|
|
4511
4618
|
aparte-chat-viewport.aparte-viewport--framework > .aparte-scroll-btn.aparte-scroll-btn--hidden {
|
|
4512
|
-
transform:
|
|
4619
|
+
transform: none;
|
|
4513
4620
|
}
|
|
4514
4621
|
|
|
4515
4622
|
/* =========================================
|
|
@@ -4595,6 +4702,18 @@ aparte-chat-status:not([visible]) {
|
|
|
4595
4702
|
aparte-chat-viewport.aparte-viewport--framework {
|
|
4596
4703
|
flex-grow: 0;
|
|
4597
4704
|
}
|
|
4705
|
+
|
|
4706
|
+
/* overlay-composer × center-empty: while the welcome state centres the composer,
|
|
4707
|
+
the overlay stands down — an empty transcript has nothing to scroll, so the
|
|
4708
|
+
surface has nothing to span, and an absolute viewport would pin the welcome to
|
|
4709
|
+
the top of the page while the composer floated alone at the bottom. One
|
|
4710
|
+
property: back in the flow, the centring rules above govern the rest. The first
|
|
4711
|
+
message drops the empty flag and the overlay takes over. */
|
|
4712
|
+
aparte-chat[overlay-composer][center-empty][data-empty] > aparte-chat-viewport,
|
|
4713
|
+
[data-aparte-chat][overlay-composer][data-aparte-empty] > aparte-chat-viewport,
|
|
4714
|
+
.aparte-chat-container[overlay-composer][data-aparte-empty] > aparte-chat-viewport {
|
|
4715
|
+
position: static;
|
|
4716
|
+
}
|
|
4598
4717
|
/*
|
|
4599
4718
|
* aparté — A message: avatar, name, timestamp, body, action bar, branch picker.
|
|
4600
4719
|
*
|
package/dist/index.js
CHANGED
|
@@ -2328,6 +2328,12 @@ class AparteChatViewport extends HTMLElement {
|
|
|
2328
2328
|
_maxRenderedBubbles = 1e3;
|
|
2329
2329
|
_resizeObserver = null;
|
|
2330
2330
|
_mutationObserver = null;
|
|
2331
|
+
/** The `[overlay-composer]` shell this viewport floats in, if any. Read at observer setup, like `framework-managed`. */
|
|
2332
|
+
_overlayRoot = null;
|
|
2333
|
+
/** Watches the overlay shell's childList, so a stack child that mounts later (elicitation) gets observed too. */
|
|
2334
|
+
_overlayObserver = null;
|
|
2335
|
+
/** Last `--aparte-bottom-inset` written, in px — style writes only when it changes. */
|
|
2336
|
+
_overlayInset = -1;
|
|
2331
2337
|
_boundResetHandler = null;
|
|
2332
2338
|
/**
|
|
2333
2339
|
* When true, _reRenderActivePath() only dispatches aparte-path-changed without
|
|
@@ -3244,6 +3250,7 @@ class AparteChatViewport extends HTMLElement {
|
|
|
3244
3250
|
}
|
|
3245
3251
|
_setupObservers() {
|
|
3246
3252
|
this._resizeObserver = new ResizeObserver(() => {
|
|
3253
|
+
this._updateOverlayInset();
|
|
3247
3254
|
if (this._isAutoScrollEnabled) {
|
|
3248
3255
|
this._scrollToBottom();
|
|
3249
3256
|
}
|
|
@@ -3258,6 +3265,16 @@ class AparteChatViewport extends HTMLElement {
|
|
|
3258
3265
|
this._resizeObserver.observe(this._container);
|
|
3259
3266
|
}
|
|
3260
3267
|
}
|
|
3268
|
+
this._overlayRoot = this.closest("[overlay-composer]");
|
|
3269
|
+
if (this._overlayRoot && this._resizeObserver) {
|
|
3270
|
+
for (const child of this._overlayStack()) this._resizeObserver.observe(child);
|
|
3271
|
+
this._overlayObserver = new MutationObserver(() => {
|
|
3272
|
+
for (const child of this._overlayStack()) this._resizeObserver?.observe(child);
|
|
3273
|
+
this._updateOverlayInset();
|
|
3274
|
+
});
|
|
3275
|
+
this._overlayObserver.observe(this._overlayRoot, { childList: true });
|
|
3276
|
+
this._updateOverlayInset();
|
|
3277
|
+
}
|
|
3261
3278
|
this._mutationObserver = new MutationObserver(() => {
|
|
3262
3279
|
if (this._frameworkManagedDOM) this._keepScrollButtonLast();
|
|
3263
3280
|
if (this._isAutoScrollEnabled) {
|
|
@@ -3275,6 +3292,37 @@ class AparteChatViewport extends HTMLElement {
|
|
|
3275
3292
|
});
|
|
3276
3293
|
}
|
|
3277
3294
|
}
|
|
3295
|
+
/** The overlay shell's element children that are not this viewport — the floating bottom stack. */
|
|
3296
|
+
_overlayStack() {
|
|
3297
|
+
if (!this._overlayRoot) return [];
|
|
3298
|
+
return Array.from(this._overlayRoot.children).filter(
|
|
3299
|
+
(el2) => el2 instanceof HTMLElement && el2 !== this
|
|
3300
|
+
);
|
|
3301
|
+
}
|
|
3302
|
+
/**
|
|
3303
|
+
* Measure how much of this viewport the overlay stack covers, and publish it as
|
|
3304
|
+
* `--aparte-bottom-inset` — the `::after` spacer (framework mode), the
|
|
3305
|
+
* container's own padding (core mode) and the scroll button's `bottom` all read
|
|
3306
|
+
* it (shell.css). Measured from the stack's highest visible top edge rather
|
|
3307
|
+
* than by summing heights, so margins and anything the host renders between
|
|
3308
|
+
* the rows count themselves. No-op outside overlay mode, and when the value
|
|
3309
|
+
* has not changed — a var write invalidates layout, and this runs from the
|
|
3310
|
+
* ResizeObserver its own write can re-trigger (core mode observes the
|
|
3311
|
+
* container's content box, which the padding is part of).
|
|
3312
|
+
*/
|
|
3313
|
+
_updateOverlayInset() {
|
|
3314
|
+
if (!this._overlayRoot) return;
|
|
3315
|
+
const bottom = this.getBoundingClientRect().bottom;
|
|
3316
|
+
let top = Infinity;
|
|
3317
|
+
for (const el2 of this._overlayStack()) {
|
|
3318
|
+
const rect = el2.getBoundingClientRect();
|
|
3319
|
+
if (rect.height > 0) top = Math.min(top, rect.top);
|
|
3320
|
+
}
|
|
3321
|
+
const inset = top === Infinity ? 0 : Math.max(0, Math.round(bottom - top));
|
|
3322
|
+
if (inset === this._overlayInset) return;
|
|
3323
|
+
this._overlayInset = inset;
|
|
3324
|
+
this.style.setProperty("--aparte-bottom-inset", `${inset}px`);
|
|
3325
|
+
}
|
|
3278
3326
|
/** Is the scroll surface within `_scrollThreshold` of its bottom, right now? */
|
|
3279
3327
|
_isAtBottom() {
|
|
3280
3328
|
if (!this._container) return true;
|
|
@@ -3489,6 +3537,10 @@ class AparteChatViewport extends HTMLElement {
|
|
|
3489
3537
|
this.removeEventListener("aparte-branch-navigate", this._onBranchNavigate);
|
|
3490
3538
|
this._resizeObserver?.disconnect();
|
|
3491
3539
|
this._mutationObserver?.disconnect();
|
|
3540
|
+
this._overlayObserver?.disconnect();
|
|
3541
|
+
this._overlayObserver = null;
|
|
3542
|
+
this._overlayRoot = null;
|
|
3543
|
+
this._overlayInset = -1;
|
|
3492
3544
|
this._resizeObserver = null;
|
|
3493
3545
|
this._mutationObserver = null;
|
|
3494
3546
|
if (this._spacerRafId !== null) {
|
|
@@ -4001,6 +4053,12 @@ class AparteComposerInput extends HTMLElement {
|
|
|
4001
4053
|
}
|
|
4002
4054
|
connectedCallback() {
|
|
4003
4055
|
this._render();
|
|
4056
|
+
this._editor = this.querySelector(".aparte-ci-editor");
|
|
4057
|
+
this._editor?.addEventListener("input", this._onInput);
|
|
4058
|
+
this._editor?.addEventListener("keydown", this._onKeydown);
|
|
4059
|
+
this._editor?.addEventListener("focus", this._onFocus);
|
|
4060
|
+
this._editor?.addEventListener("blur", this._onBlur);
|
|
4061
|
+
this._editor?.addEventListener("paste", this._onPaste);
|
|
4004
4062
|
this._connectToRoot();
|
|
4005
4063
|
this._scheduleInitialReflow();
|
|
4006
4064
|
this._unsubscribes.push(subscribeConfigChange(this, () => this._updatePlaceholder()));
|
|
@@ -4104,11 +4162,6 @@ class AparteComposerInput extends HTMLElement {
|
|
|
4104
4162
|
data-placeholder="${placeholder}"
|
|
4105
4163
|
></div>`;
|
|
4106
4164
|
this._editor = this.querySelector(".aparte-ci-editor");
|
|
4107
|
-
this._editor?.addEventListener("input", this._onInput);
|
|
4108
|
-
this._editor?.addEventListener("keydown", this._onKeydown);
|
|
4109
|
-
this._editor?.addEventListener("focus", this._onFocus);
|
|
4110
|
-
this._editor?.addEventListener("blur", this._onBlur);
|
|
4111
|
-
this._editor?.addEventListener("paste", this._onPaste);
|
|
4112
4165
|
this._adjustHeight();
|
|
4113
4166
|
}
|
|
4114
4167
|
_connectToRoot() {
|
|
@@ -4237,6 +4290,8 @@ class AparteComposerSend extends HTMLElement {
|
|
|
4237
4290
|
_onClick = this._handleClick.bind(this);
|
|
4238
4291
|
connectedCallback() {
|
|
4239
4292
|
this._render();
|
|
4293
|
+
this._button = this.querySelector(".aparte-cs-button");
|
|
4294
|
+
this._button?.addEventListener("click", this._onClick);
|
|
4240
4295
|
this._connectToRoot();
|
|
4241
4296
|
}
|
|
4242
4297
|
disconnectedCallback() {
|
|
@@ -4260,8 +4315,6 @@ class AparteComposerSend extends HTMLElement {
|
|
|
4260
4315
|
title="${escapeAttr(label)}"
|
|
4261
4316
|
${disabled ? "disabled" : ""}
|
|
4262
4317
|
>${icon}</button>`;
|
|
4263
|
-
this._button = this.querySelector(".aparte-cs-button");
|
|
4264
|
-
this._button?.addEventListener("click", this._onClick);
|
|
4265
4318
|
}
|
|
4266
4319
|
_connectToRoot() {
|
|
4267
4320
|
const root = this._getRoot();
|
|
@@ -4389,6 +4442,8 @@ class AparteComposerCancel extends HTMLElement {
|
|
|
4389
4442
|
_onClick = this._handleClick.bind(this);
|
|
4390
4443
|
connectedCallback() {
|
|
4391
4444
|
this._render();
|
|
4445
|
+
this._button = this.querySelector(".aparte-cc-button");
|
|
4446
|
+
this._button?.addEventListener("click", this._onClick);
|
|
4392
4447
|
this._connectToRoot();
|
|
4393
4448
|
this._unsubscribes.push(subscribeConfigChange(this, () => this._refreshChrome()));
|
|
4394
4449
|
}
|
|
@@ -4411,8 +4466,6 @@ class AparteComposerCancel extends HTMLElement {
|
|
|
4411
4466
|
title="${escapeAttr(label)}"
|
|
4412
4467
|
hidden
|
|
4413
4468
|
>${icon}</button>`;
|
|
4414
|
-
this._button = this.querySelector(".aparte-cc-button");
|
|
4415
|
-
this._button?.addEventListener("click", this._onClick);
|
|
4416
4469
|
}
|
|
4417
4470
|
_connectToRoot() {
|
|
4418
4471
|
const root = this._getRoot();
|
|
@@ -4543,6 +4596,8 @@ class AparteComposerAddAttachment extends HTMLElement {
|
|
|
4543
4596
|
}
|
|
4544
4597
|
connectedCallback() {
|
|
4545
4598
|
this._render();
|
|
4599
|
+
this._button = this.querySelector(".aparte-caa-button");
|
|
4600
|
+
this._button?.addEventListener("click", this._onClick);
|
|
4546
4601
|
this._connectToRoot();
|
|
4547
4602
|
this._setupDragDrop();
|
|
4548
4603
|
this._unsubscribes.push(subscribeConfigChange(this, () => this._refreshChrome()));
|
|
@@ -4591,8 +4646,6 @@ class AparteComposerAddAttachment extends HTMLElement {
|
|
|
4591
4646
|
type="button"
|
|
4592
4647
|
${disabled ? "disabled" : ""}
|
|
4593
4648
|
>${icon}</button>`;
|
|
4594
|
-
this._button = this.querySelector(".aparte-caa-button");
|
|
4595
|
-
this._button?.addEventListener("click", this._onClick);
|
|
4596
4649
|
}
|
|
4597
4650
|
_connectToRoot() {
|
|
4598
4651
|
const root = this._getRoot();
|
|
@@ -4668,6 +4721,8 @@ class AparteComposerAction extends HTMLElement {
|
|
|
4668
4721
|
}
|
|
4669
4722
|
connectedCallback() {
|
|
4670
4723
|
this._render();
|
|
4724
|
+
this._button = this.querySelector(".aparte-cact-button");
|
|
4725
|
+
this._button?.addEventListener("click", this._onClick);
|
|
4671
4726
|
this._connectToRoot();
|
|
4672
4727
|
this._unsubscribes.push(subscribeConfigChange(this, () => {
|
|
4673
4728
|
if (this._button) this._button.innerHTML = this._resolveIcon(this.getAttribute("icon") ?? "");
|
|
@@ -4707,8 +4762,6 @@ class AparteComposerAction extends HTMLElement {
|
|
|
4707
4762
|
type="button"
|
|
4708
4763
|
${disabled ? "disabled" : ""}
|
|
4709
4764
|
>${icon}</button>`;
|
|
4710
|
-
this._button = this.querySelector(".aparte-cact-button");
|
|
4711
|
-
this._button?.addEventListener("click", this._onClick);
|
|
4712
4765
|
}
|
|
4713
4766
|
_connectToRoot() {
|
|
4714
4767
|
const root = this._getRoot();
|