@helpai/elements 0.21.0 → 0.21.1
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/elements-web-component.esm.js +18 -18
- package/elements-web-component.esm.js.map +3 -3
- package/elements.cjs.js +18 -18
- package/elements.cjs.js.map +3 -3
- package/elements.esm.js +18 -18
- package/elements.esm.js.map +3 -3
- package/elements.js +18 -18
- package/elements.js.map +3 -3
- package/index.d.ts +1 -1
- package/index.mjs +6 -2
- package/package.json +1 -1
- package/schema.d.ts +49 -49
- package/web-component.mjs +6 -2
package/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as Asset, B as BlocksConfig, C as ConnectionConfig, a as ConnectionConfigPartial, L as Link, S as ServerConfig, b as SiteConfig, c as StartConversationResponse, W as WidgetConfig, d as WidgetConfigPartial, e as WidgetSettings, f as WidgetSettingsPartial } from './deployment-
|
|
1
|
+
export { A as Asset, B as BlocksConfig, C as ConnectionConfig, a as ConnectionConfigPartial, L as Link, S as ServerConfig, b as SiteConfig, c as StartConversationResponse, W as WidgetConfig, d as WidgetConfigPartial, e as WidgetSettings, f as WidgetSettingsPartial } from './deployment-B8UxV4b5.js';
|
|
2
2
|
import 'zod';
|
|
3
3
|
|
|
4
4
|
/**
|
package/index.mjs
CHANGED
|
@@ -4750,6 +4750,7 @@ function LoadingSpinner({ label }) {
|
|
|
4750
4750
|
import { jsx as jsx17, jsxs as jsxs14 } from "preact/jsx-runtime";
|
|
4751
4751
|
var p15 = BRAND.cssPrefix;
|
|
4752
4752
|
var STICK_THRESHOLD = 120;
|
|
4753
|
+
var INTERACTION_GRACE_MS = 350;
|
|
4753
4754
|
var DIVIDER_IDLE_MS = 1200;
|
|
4754
4755
|
function MessageList({
|
|
4755
4756
|
messagesSig,
|
|
@@ -4770,6 +4771,8 @@ function MessageList({
|
|
|
4770
4771
|
const hasHydratedRef = useRef5(false);
|
|
4771
4772
|
const detachedRef = useRef5(false);
|
|
4772
4773
|
const interactingRef = useRef5(false);
|
|
4774
|
+
const interactionEndedAtRef = useRef5(0);
|
|
4775
|
+
const inInteractionGrace = () => interactingRef.current || performance.now() - interactionEndedAtRef.current < INTERACTION_GRACE_MS;
|
|
4773
4776
|
const autoPinAtRef = useRef5(0);
|
|
4774
4777
|
const pinBottom = (el) => {
|
|
4775
4778
|
autoPinAtRef.current = performance.now();
|
|
@@ -4810,7 +4813,7 @@ function MessageList({
|
|
|
4810
4813
|
pinBottom(el);
|
|
4811
4814
|
return;
|
|
4812
4815
|
}
|
|
4813
|
-
if (detachedRef.current ||
|
|
4816
|
+
if (detachedRef.current || inInteractionGrace()) return;
|
|
4814
4817
|
const distanceFromBottom = el.scrollHeight - el.scrollTop - el.clientHeight;
|
|
4815
4818
|
if (distanceFromBottom < STICK_THRESHOLD) pinBottom(el);
|
|
4816
4819
|
}, [messages.value.length]);
|
|
@@ -4820,7 +4823,7 @@ function MessageList({
|
|
|
4820
4823
|
const last = messages.value.at(-1);
|
|
4821
4824
|
if (!last) return;
|
|
4822
4825
|
const pinIfNear = () => {
|
|
4823
|
-
if (detachedRef.current ||
|
|
4826
|
+
if (detachedRef.current || inInteractionGrace()) return;
|
|
4824
4827
|
const distance = el.scrollHeight - el.scrollTop - el.clientHeight;
|
|
4825
4828
|
if (distance < STICK_THRESHOLD * 2) pinBottom(el);
|
|
4826
4829
|
};
|
|
@@ -4870,6 +4873,7 @@ function MessageList({
|
|
|
4870
4873
|
};
|
|
4871
4874
|
const endInteraction = () => {
|
|
4872
4875
|
interactingRef.current = false;
|
|
4876
|
+
interactionEndedAtRef.current = performance.now();
|
|
4873
4877
|
};
|
|
4874
4878
|
const onPointerDown = () => {
|
|
4875
4879
|
interactingRef.current = true;
|
package/package.json
CHANGED
package/schema.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as Asset, B as BlocksConfig, C as ConnectionConfig, a as ConnectionConfigPartial, E as Endpoints, L as Link, P as PAGE_AREA_SUGGESTIONS, g as PageContext, S as ServerConfig, b as SiteConfig, c as StartConversationResponse, U as UserContext, W as WidgetConfig, d as WidgetConfigPartial, e as WidgetSettings, f as WidgetSettingsPartial, h as assetSchema, i as blocksConfigSchema, j as connectionConfigPartialSchema, k as connectionConfigSchema, l as cssColorSchema, m as cssLengthSchema, n as endpointsSchema, o as linkSchema, p as localeSchema, q as pageContextSchema, s as serverConfigSchema, r as siteConfigSchema, t as startConversationResponseSchema, u as userContextSchema, v as uuid7Schema, w as widgetConfigPartialSchema, x as widgetConfigSchema, y as widgetSettingsPartialSchema, z as widgetSettingsSchema } from './deployment-
|
|
1
|
+
export { A as Asset, B as BlocksConfig, C as ConnectionConfig, a as ConnectionConfigPartial, E as Endpoints, L as Link, P as PAGE_AREA_SUGGESTIONS, g as PageContext, S as ServerConfig, b as SiteConfig, c as StartConversationResponse, U as UserContext, W as WidgetConfig, d as WidgetConfigPartial, e as WidgetSettings, f as WidgetSettingsPartial, h as assetSchema, i as blocksConfigSchema, j as connectionConfigPartialSchema, k as connectionConfigSchema, l as cssColorSchema, m as cssLengthSchema, n as endpointsSchema, o as linkSchema, p as localeSchema, q as pageContextSchema, s as serverConfigSchema, r as siteConfigSchema, t as startConversationResponseSchema, u as userContextSchema, v as uuid7Schema, w as widgetConfigPartialSchema, x as widgetConfigSchema, y as widgetSettingsPartialSchema, z as widgetSettingsSchema } from './deployment-B8UxV4b5.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -56,9 +56,9 @@ declare const presentationSchema: z.ZodObject<{
|
|
|
56
56
|
inset: z.ZodOptional<z.ZodString>;
|
|
57
57
|
initialSize: z.ZodDefault<z.ZodEnum<{
|
|
58
58
|
fullscreen: "fullscreen";
|
|
59
|
-
normal: "normal";
|
|
60
59
|
expanded: "expanded";
|
|
61
60
|
auto: "auto";
|
|
61
|
+
normal: "normal";
|
|
62
62
|
}>>;
|
|
63
63
|
autoSizeBreakpoint: z.ZodDefault<z.ZodNumber>;
|
|
64
64
|
}, z.core.$loose>>;
|
|
@@ -148,9 +148,9 @@ declare const launcherSizeSchema: z.ZodEnum<{
|
|
|
148
148
|
}>;
|
|
149
149
|
type LauncherSize = z.infer<typeof launcherSizeSchema>;
|
|
150
150
|
declare const calloutShapeSchema: z.ZodEnum<{
|
|
151
|
+
callout: "callout";
|
|
151
152
|
pill: "pill";
|
|
152
153
|
bubble: "bubble";
|
|
153
|
-
callout: "callout";
|
|
154
154
|
}>;
|
|
155
155
|
type CalloutShape = z.infer<typeof calloutShapeSchema>;
|
|
156
156
|
declare const calloutPositionSchema: z.ZodEnum<{
|
|
@@ -162,9 +162,9 @@ type CalloutPosition = z.infer<typeof calloutPositionSchema>;
|
|
|
162
162
|
declare const launcherCalloutSchema: z.ZodObject<{
|
|
163
163
|
text: z.ZodDefault<z.ZodString>;
|
|
164
164
|
shape: z.ZodDefault<z.ZodEnum<{
|
|
165
|
+
callout: "callout";
|
|
165
166
|
pill: "pill";
|
|
166
167
|
bubble: "bubble";
|
|
167
|
-
callout: "callout";
|
|
168
168
|
}>>;
|
|
169
169
|
position: z.ZodDefault<z.ZodEnum<{
|
|
170
170
|
auto: "auto";
|
|
@@ -195,9 +195,9 @@ declare const launcherOptionsSchema: z.ZodObject<{
|
|
|
195
195
|
callout: z.ZodOptional<z.ZodObject<{
|
|
196
196
|
text: z.ZodDefault<z.ZodString>;
|
|
197
197
|
shape: z.ZodDefault<z.ZodEnum<{
|
|
198
|
+
callout: "callout";
|
|
198
199
|
pill: "pill";
|
|
199
200
|
bubble: "bubble";
|
|
200
|
-
callout: "callout";
|
|
201
201
|
}>>;
|
|
202
202
|
position: z.ZodDefault<z.ZodEnum<{
|
|
203
203
|
auto: "auto";
|
|
@@ -240,9 +240,9 @@ type LauncherOptions = z.infer<typeof launcherOptionsSchema>;
|
|
|
240
240
|
|
|
241
241
|
declare const initialSizeSchema: z.ZodEnum<{
|
|
242
242
|
fullscreen: "fullscreen";
|
|
243
|
-
normal: "normal";
|
|
244
243
|
expanded: "expanded";
|
|
245
244
|
auto: "auto";
|
|
245
|
+
normal: "normal";
|
|
246
246
|
}>;
|
|
247
247
|
declare const resizeOptionsSchema: z.ZodObject<{
|
|
248
248
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -269,9 +269,9 @@ declare const sizeOptionsSchema: z.ZodObject<{
|
|
|
269
269
|
inset: z.ZodOptional<z.ZodString>;
|
|
270
270
|
initialSize: z.ZodDefault<z.ZodEnum<{
|
|
271
271
|
fullscreen: "fullscreen";
|
|
272
|
-
normal: "normal";
|
|
273
272
|
expanded: "expanded";
|
|
274
273
|
auto: "auto";
|
|
274
|
+
normal: "normal";
|
|
275
275
|
}>>;
|
|
276
276
|
autoSizeBreakpoint: z.ZodDefault<z.ZodNumber>;
|
|
277
277
|
}, z.core.$loose>;
|
|
@@ -323,43 +323,43 @@ type FeatureFlags = z.infer<typeof featureFlagsSchema>;
|
|
|
323
323
|
*/
|
|
324
324
|
|
|
325
325
|
declare const actionNameSchema: z.ZodEnum<{
|
|
326
|
+
close: "close";
|
|
326
327
|
expand: "expand";
|
|
327
328
|
fullscreen: "fullscreen";
|
|
328
329
|
popOut: "popOut";
|
|
329
|
-
|
|
330
|
-
language: "language";
|
|
330
|
+
clear: "clear";
|
|
331
331
|
theme: "theme";
|
|
332
|
+
language: "language";
|
|
332
333
|
textSize: "textSize";
|
|
333
334
|
history: "history";
|
|
334
|
-
clear: "clear";
|
|
335
335
|
sound: "sound";
|
|
336
336
|
}>;
|
|
337
337
|
type ActionName = z.infer<typeof actionNameSchema>;
|
|
338
338
|
declare const headerActionsSchema: z.ZodArray<z.ZodEnum<{
|
|
339
|
+
close: "close";
|
|
339
340
|
expand: "expand";
|
|
340
341
|
fullscreen: "fullscreen";
|
|
341
342
|
popOut: "popOut";
|
|
342
|
-
|
|
343
|
-
language: "language";
|
|
343
|
+
clear: "clear";
|
|
344
344
|
theme: "theme";
|
|
345
|
+
language: "language";
|
|
345
346
|
textSize: "textSize";
|
|
346
347
|
history: "history";
|
|
347
|
-
clear: "clear";
|
|
348
348
|
sound: "sound";
|
|
349
349
|
}>>;
|
|
350
350
|
type HeaderActions = z.infer<typeof headerActionsSchema>;
|
|
351
351
|
/** Section wrapper — `actions` list wrapped under `header` in the dashboard form. */
|
|
352
352
|
declare const headerSchema: z.ZodObject<{
|
|
353
353
|
actions: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
354
|
+
close: "close";
|
|
354
355
|
expand: "expand";
|
|
355
356
|
fullscreen: "fullscreen";
|
|
356
357
|
popOut: "popOut";
|
|
357
|
-
|
|
358
|
-
language: "language";
|
|
358
|
+
clear: "clear";
|
|
359
359
|
theme: "theme";
|
|
360
|
+
language: "language";
|
|
360
361
|
textSize: "textSize";
|
|
361
362
|
history: "history";
|
|
362
|
-
clear: "clear";
|
|
363
363
|
sound: "sound";
|
|
364
364
|
}>>>;
|
|
365
365
|
}, z.core.$loose>;
|
|
@@ -375,33 +375,33 @@ type HeaderOptions = z.infer<typeof headerSchema>;
|
|
|
375
375
|
*/
|
|
376
376
|
|
|
377
377
|
declare const feedbackEventSchema: z.ZodEnum<{
|
|
378
|
+
voiceStart: "voiceStart";
|
|
379
|
+
voiceStop: "voiceStop";
|
|
378
380
|
error: "error";
|
|
379
381
|
messageReceived: "messageReceived";
|
|
380
382
|
messageSent: "messageSent";
|
|
381
|
-
voiceStart: "voiceStart";
|
|
382
|
-
voiceStop: "voiceStop";
|
|
383
383
|
}>;
|
|
384
384
|
type FeedbackEvent = z.infer<typeof feedbackEventSchema>;
|
|
385
385
|
declare const soundOptionsSchema: z.ZodObject<{
|
|
386
386
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
387
387
|
volume: z.ZodDefault<z.ZodNumber>;
|
|
388
388
|
events: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
|
|
389
|
+
voiceStart: "voiceStart";
|
|
390
|
+
voiceStop: "voiceStop";
|
|
389
391
|
error: "error";
|
|
390
392
|
messageReceived: "messageReceived";
|
|
391
393
|
messageSent: "messageSent";
|
|
392
|
-
voiceStart: "voiceStart";
|
|
393
|
-
voiceStop: "voiceStop";
|
|
394
394
|
}> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>;
|
|
395
395
|
}, z.core.$loose>;
|
|
396
396
|
type SoundOptions = z.infer<typeof soundOptionsSchema>;
|
|
397
397
|
declare const hapticsOptionsSchema: z.ZodObject<{
|
|
398
398
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
399
399
|
events: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
|
|
400
|
+
voiceStart: "voiceStart";
|
|
401
|
+
voiceStop: "voiceStop";
|
|
400
402
|
error: "error";
|
|
401
403
|
messageReceived: "messageReceived";
|
|
402
404
|
messageSent: "messageSent";
|
|
403
|
-
voiceStart: "voiceStart";
|
|
404
|
-
voiceStop: "voiceStop";
|
|
405
405
|
}> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodArray<z.ZodNumber>]>>>;
|
|
406
406
|
}, z.core.$loose>;
|
|
407
407
|
type HapticsOptions = z.infer<typeof hapticsOptionsSchema>;
|
|
@@ -410,21 +410,21 @@ declare const feedbackSchema: z.ZodObject<{
|
|
|
410
410
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
411
411
|
volume: z.ZodDefault<z.ZodNumber>;
|
|
412
412
|
events: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
|
|
413
|
+
voiceStart: "voiceStart";
|
|
414
|
+
voiceStop: "voiceStop";
|
|
413
415
|
error: "error";
|
|
414
416
|
messageReceived: "messageReceived";
|
|
415
417
|
messageSent: "messageSent";
|
|
416
|
-
voiceStart: "voiceStart";
|
|
417
|
-
voiceStop: "voiceStop";
|
|
418
418
|
}> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>;
|
|
419
419
|
}, z.core.$loose>>;
|
|
420
420
|
haptics: z.ZodOptional<z.ZodObject<{
|
|
421
421
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
422
422
|
events: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
|
|
423
|
+
voiceStart: "voiceStart";
|
|
424
|
+
voiceStop: "voiceStop";
|
|
423
425
|
error: "error";
|
|
424
426
|
messageReceived: "messageReceived";
|
|
425
427
|
messageSent: "messageSent";
|
|
426
|
-
voiceStart: "voiceStart";
|
|
427
|
-
voiceStop: "voiceStop";
|
|
428
428
|
}> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodArray<z.ZodNumber>]>>>;
|
|
429
429
|
}, z.core.$loose>>;
|
|
430
430
|
}, z.core.$loose>;
|
|
@@ -544,16 +544,16 @@ type FooterOptions = z.infer<typeof footerSchema>;
|
|
|
544
544
|
|
|
545
545
|
declare const fieldTypeSchema: z.ZodEnum<{
|
|
546
546
|
number: "number";
|
|
547
|
+
select: "select";
|
|
548
|
+
textarea: "textarea";
|
|
549
|
+
time: "time";
|
|
547
550
|
text: "text";
|
|
551
|
+
checkbox: "checkbox";
|
|
552
|
+
radio: "radio";
|
|
548
553
|
url: "url";
|
|
549
554
|
email: "email";
|
|
550
555
|
tel: "tel";
|
|
551
556
|
date: "date";
|
|
552
|
-
time: "time";
|
|
553
|
-
textarea: "textarea";
|
|
554
|
-
select: "select";
|
|
555
|
-
radio: "radio";
|
|
556
|
-
checkbox: "checkbox";
|
|
557
557
|
multiselect: "multiselect";
|
|
558
558
|
}>;
|
|
559
559
|
type FieldType = z.infer<typeof fieldTypeSchema>;
|
|
@@ -578,16 +578,16 @@ declare const formFieldSchema: z.ZodObject<{
|
|
|
578
578
|
label: z.ZodString;
|
|
579
579
|
type: z.ZodEnum<{
|
|
580
580
|
number: "number";
|
|
581
|
+
select: "select";
|
|
582
|
+
textarea: "textarea";
|
|
583
|
+
time: "time";
|
|
581
584
|
text: "text";
|
|
585
|
+
checkbox: "checkbox";
|
|
586
|
+
radio: "radio";
|
|
582
587
|
url: "url";
|
|
583
588
|
email: "email";
|
|
584
589
|
tel: "tel";
|
|
585
590
|
date: "date";
|
|
586
|
-
time: "time";
|
|
587
|
-
textarea: "textarea";
|
|
588
|
-
select: "select";
|
|
589
|
-
radio: "radio";
|
|
590
|
-
checkbox: "checkbox";
|
|
591
591
|
multiselect: "multiselect";
|
|
592
592
|
}>;
|
|
593
593
|
placeholder: z.ZodOptional<z.ZodString>;
|
|
@@ -638,16 +638,16 @@ declare const formDefSchema: z.ZodObject<{
|
|
|
638
638
|
label: z.ZodString;
|
|
639
639
|
type: z.ZodEnum<{
|
|
640
640
|
number: "number";
|
|
641
|
+
select: "select";
|
|
642
|
+
textarea: "textarea";
|
|
643
|
+
time: "time";
|
|
641
644
|
text: "text";
|
|
645
|
+
checkbox: "checkbox";
|
|
646
|
+
radio: "radio";
|
|
642
647
|
url: "url";
|
|
643
648
|
email: "email";
|
|
644
649
|
tel: "tel";
|
|
645
650
|
date: "date";
|
|
646
|
-
time: "time";
|
|
647
|
-
textarea: "textarea";
|
|
648
|
-
select: "select";
|
|
649
|
-
radio: "radio";
|
|
650
|
-
checkbox: "checkbox";
|
|
651
651
|
multiselect: "multiselect";
|
|
652
652
|
}>;
|
|
653
653
|
placeholder: z.ZodOptional<z.ZodString>;
|
|
@@ -696,16 +696,16 @@ declare const formsSchema: z.ZodArray<z.ZodObject<{
|
|
|
696
696
|
label: z.ZodString;
|
|
697
697
|
type: z.ZodEnum<{
|
|
698
698
|
number: "number";
|
|
699
|
+
select: "select";
|
|
700
|
+
textarea: "textarea";
|
|
701
|
+
time: "time";
|
|
699
702
|
text: "text";
|
|
703
|
+
checkbox: "checkbox";
|
|
704
|
+
radio: "radio";
|
|
700
705
|
url: "url";
|
|
701
706
|
email: "email";
|
|
702
707
|
tel: "tel";
|
|
703
708
|
date: "date";
|
|
704
|
-
time: "time";
|
|
705
|
-
textarea: "textarea";
|
|
706
|
-
select: "select";
|
|
707
|
-
radio: "radio";
|
|
708
|
-
checkbox: "checkbox";
|
|
709
709
|
multiselect: "multiselect";
|
|
710
710
|
}>;
|
|
711
711
|
placeholder: z.ZodOptional<z.ZodString>;
|
|
@@ -777,18 +777,18 @@ type I18nOptions = z.infer<typeof i18nSchema>;
|
|
|
777
777
|
*/
|
|
778
778
|
|
|
779
779
|
declare const moduleLayoutSchema: z.ZodEnum<{
|
|
780
|
+
home: "home";
|
|
780
781
|
chat: "chat";
|
|
781
782
|
help: "help";
|
|
782
|
-
home: "home";
|
|
783
783
|
news: "news";
|
|
784
784
|
}>;
|
|
785
785
|
type ModuleLayout = z.infer<typeof moduleLayoutSchema>;
|
|
786
786
|
declare const moduleSchema: z.ZodObject<{
|
|
787
787
|
label: z.ZodString;
|
|
788
788
|
layout: z.ZodEnum<{
|
|
789
|
+
home: "home";
|
|
789
790
|
chat: "chat";
|
|
790
791
|
help: "help";
|
|
791
|
-
home: "home";
|
|
792
792
|
news: "news";
|
|
793
793
|
}>;
|
|
794
794
|
contentTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -814,9 +814,9 @@ type ModuleOptions = z.infer<typeof moduleSchema>;
|
|
|
814
814
|
declare const modulesSchema: z.ZodArray<z.ZodObject<{
|
|
815
815
|
label: z.ZodString;
|
|
816
816
|
layout: z.ZodEnum<{
|
|
817
|
+
home: "home";
|
|
817
818
|
chat: "chat";
|
|
818
819
|
help: "help";
|
|
819
|
-
home: "home";
|
|
820
820
|
news: "news";
|
|
821
821
|
}>;
|
|
822
822
|
contentTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
package/web-component.mjs
CHANGED
|
@@ -4805,6 +4805,7 @@ function LoadingSpinner({ label }) {
|
|
|
4805
4805
|
import { jsx as jsx17, jsxs as jsxs14 } from "preact/jsx-runtime";
|
|
4806
4806
|
var p15 = BRAND.cssPrefix;
|
|
4807
4807
|
var STICK_THRESHOLD = 120;
|
|
4808
|
+
var INTERACTION_GRACE_MS = 350;
|
|
4808
4809
|
var DIVIDER_IDLE_MS = 1200;
|
|
4809
4810
|
function MessageList({
|
|
4810
4811
|
messagesSig,
|
|
@@ -4825,6 +4826,8 @@ function MessageList({
|
|
|
4825
4826
|
const hasHydratedRef = useRef5(false);
|
|
4826
4827
|
const detachedRef = useRef5(false);
|
|
4827
4828
|
const interactingRef = useRef5(false);
|
|
4829
|
+
const interactionEndedAtRef = useRef5(0);
|
|
4830
|
+
const inInteractionGrace = () => interactingRef.current || performance.now() - interactionEndedAtRef.current < INTERACTION_GRACE_MS;
|
|
4828
4831
|
const autoPinAtRef = useRef5(0);
|
|
4829
4832
|
const pinBottom = (el) => {
|
|
4830
4833
|
autoPinAtRef.current = performance.now();
|
|
@@ -4865,7 +4868,7 @@ function MessageList({
|
|
|
4865
4868
|
pinBottom(el);
|
|
4866
4869
|
return;
|
|
4867
4870
|
}
|
|
4868
|
-
if (detachedRef.current ||
|
|
4871
|
+
if (detachedRef.current || inInteractionGrace()) return;
|
|
4869
4872
|
const distanceFromBottom = el.scrollHeight - el.scrollTop - el.clientHeight;
|
|
4870
4873
|
if (distanceFromBottom < STICK_THRESHOLD) pinBottom(el);
|
|
4871
4874
|
}, [messages.value.length]);
|
|
@@ -4875,7 +4878,7 @@ function MessageList({
|
|
|
4875
4878
|
const last = messages.value.at(-1);
|
|
4876
4879
|
if (!last) return;
|
|
4877
4880
|
const pinIfNear = () => {
|
|
4878
|
-
if (detachedRef.current ||
|
|
4881
|
+
if (detachedRef.current || inInteractionGrace()) return;
|
|
4879
4882
|
const distance = el.scrollHeight - el.scrollTop - el.clientHeight;
|
|
4880
4883
|
if (distance < STICK_THRESHOLD * 2) pinBottom(el);
|
|
4881
4884
|
};
|
|
@@ -4925,6 +4928,7 @@ function MessageList({
|
|
|
4925
4928
|
};
|
|
4926
4929
|
const endInteraction = () => {
|
|
4927
4930
|
interactingRef.current = false;
|
|
4931
|
+
interactionEndedAtRef.current = performance.now();
|
|
4928
4932
|
};
|
|
4929
4933
|
const onPointerDown = () => {
|
|
4930
4934
|
interactingRef.current = true;
|