@uipath/apollo-wind 2.66.0 → 2.67.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.
Files changed (70) hide show
  1. package/dist/components/ui/attachment.cjs +174 -0
  2. package/dist/components/ui/attachment.d.ts +39 -0
  3. package/dist/components/ui/attachment.js +113 -0
  4. package/dist/components/ui/bubble.cjs +123 -0
  5. package/dist/components/ui/bubble.d.ts +28 -0
  6. package/dist/components/ui/bubble.js +77 -0
  7. package/dist/components/ui/combobox.cjs +1 -1
  8. package/dist/components/ui/combobox.js +1 -1
  9. package/dist/components/ui/index.cjs +274 -219
  10. package/dist/components/ui/index.d.ts +6 -1
  11. package/dist/components/ui/index.js +6 -1
  12. package/dist/components/ui/input-group.cjs +8 -4
  13. package/dist/components/ui/input-group.js +8 -4
  14. package/dist/components/ui/input.cjs +1 -1
  15. package/dist/components/ui/input.js +1 -1
  16. package/dist/components/ui/marker.cjs +89 -0
  17. package/dist/components/ui/marker.d.ts +16 -0
  18. package/dist/components/ui/marker.js +46 -0
  19. package/dist/components/ui/message-scroller/index.cjs +58 -0
  20. package/dist/components/ui/message-scroller/index.d.ts +1 -0
  21. package/dist/components/ui/message-scroller/index.js +1 -0
  22. package/dist/components/ui/message-scroller/message-scroller.cjs +137 -0
  23. package/dist/components/ui/message-scroller/message-scroller.d.ts +60 -0
  24. package/dist/components/ui/message-scroller/message-scroller.js +73 -0
  25. package/dist/components/ui/message-scroller/primitive/components.cjs +357 -0
  26. package/dist/components/ui/message-scroller/primitive/components.d.ts +28 -0
  27. package/dist/components/ui/message-scroller/primitive/components.js +299 -0
  28. package/dist/components/ui/message-scroller/primitive/geometry.cjs +232 -0
  29. package/dist/components/ui/message-scroller/primitive/geometry.d.ts +54 -0
  30. package/dist/components/ui/message-scroller/primitive/geometry.js +153 -0
  31. package/dist/components/ui/message-scroller/primitive/index.cjs +53 -0
  32. package/dist/components/ui/message-scroller/primitive/index.d.ts +23 -0
  33. package/dist/components/ui/message-scroller/primitive/index.js +10 -0
  34. package/dist/components/ui/message-scroller/primitive/stores.cjs +81 -0
  35. package/dist/components/ui/message-scroller/primitive/stores.d.ts +6 -0
  36. package/dist/components/ui/message-scroller/primitive/stores.js +38 -0
  37. package/dist/components/ui/message-scroller/primitive/types.cjs +82 -0
  38. package/dist/components/ui/message-scroller/primitive/types.d.ts +89 -0
  39. package/dist/components/ui/message-scroller/primitive/types.js +24 -0
  40. package/dist/components/ui/message-scroller/primitive/use-message-scroller-commands.cjs +213 -0
  41. package/dist/components/ui/message-scroller/primitive/use-message-scroller-commands.d.ts +18 -0
  42. package/dist/components/ui/message-scroller/primitive/use-message-scroller-commands.js +179 -0
  43. package/dist/components/ui/message-scroller/primitive/use-message-scroller-controller.cjs +474 -0
  44. package/dist/components/ui/message-scroller/primitive/use-message-scroller-controller.d.ts +6 -0
  45. package/dist/components/ui/message-scroller/primitive/use-message-scroller-controller.js +440 -0
  46. package/dist/components/ui/message-scroller/primitive/use-message-scroller-refs.cjs +124 -0
  47. package/dist/components/ui/message-scroller/primitive/use-message-scroller-refs.d.ts +52 -0
  48. package/dist/components/ui/message-scroller/primitive/use-message-scroller-refs.js +84 -0
  49. package/dist/components/ui/message-scroller/primitive/use-render.cjs +116 -0
  50. package/dist/components/ui/message-scroller/primitive/use-render.d.ts +21 -0
  51. package/dist/components/ui/message-scroller/primitive/use-render.js +76 -0
  52. package/dist/components/ui/message-scroller/primitive/utils.cjs +41 -0
  53. package/dist/components/ui/message-scroller/primitive/utils.d.ts +3 -0
  54. package/dist/components/ui/message-scroller/primitive/utils.js +7 -0
  55. package/dist/components/ui/message.cjs +96 -0
  56. package/dist/components/ui/message.d.ts +17 -0
  57. package/dist/components/ui/message.js +47 -0
  58. package/dist/components/ui/multi-select.cjs +3 -3
  59. package/dist/components/ui/multi-select.d.ts +10 -0
  60. package/dist/components/ui/multi-select.js +3 -3
  61. package/dist/components/ui/select.cjs +1 -1
  62. package/dist/components/ui/select.js +1 -1
  63. package/dist/components/ui/textarea.cjs +1 -1
  64. package/dist/components/ui/textarea.js +1 -1
  65. package/dist/index.cjs +164 -51
  66. package/dist/index.d.ts +10 -0
  67. package/dist/index.js +6 -1
  68. package/dist/styles.css +773 -0
  69. package/dist/tailwind.utilities.css +223 -0
  70. package/package.json +1 -1
@@ -0,0 +1,357 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ MessageScrollerViewport: ()=>components_MessageScrollerViewport,
28
+ MessageScrollerItem: ()=>components_MessageScrollerItem,
29
+ useMessageScroller: ()=>useMessageScroller,
30
+ MessageScrollerButton: ()=>components_MessageScrollerButton,
31
+ useMessageScrollerScrollable: ()=>useMessageScrollerScrollable,
32
+ MessageScrollerProvider: ()=>MessageScrollerProvider,
33
+ useMessageScrollerVisibility: ()=>useMessageScrollerVisibility,
34
+ MessageScroller: ()=>components_MessageScroller,
35
+ MessageScrollerContent: ()=>components_MessageScrollerContent
36
+ });
37
+ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
38
+ const external_react_namespaceObject = require("react");
39
+ const external_types_cjs_namespaceObject = require("./types.cjs");
40
+ const external_use_message_scroller_controller_cjs_namespaceObject = require("./use-message-scroller-controller.cjs");
41
+ const external_use_render_cjs_namespaceObject = require("./use-render.cjs");
42
+ const external_utils_cjs_namespaceObject = require("./utils.cjs");
43
+ const MessageScrollerContext = /*#__PURE__*/ external_react_namespaceObject.createContext(null);
44
+ const MessageScrollerItemContext = /*#__PURE__*/ external_react_namespaceObject.createContext(null);
45
+ function useMessageScrollerContext() {
46
+ const context = external_react_namespaceObject.useContext(MessageScrollerContext);
47
+ if (!context) throw new Error('useMessageScroller must be used within a MessageScroller.');
48
+ return context;
49
+ }
50
+ function useMessageScrollerItemContext() {
51
+ const context = external_react_namespaceObject.useContext(MessageScrollerItemContext);
52
+ if (!context) throw new Error('MessageScrollerItem must be used within a MessageScroller.');
53
+ return context;
54
+ }
55
+ function useMessageScroller() {
56
+ const { scrollToEnd, scrollToMessage, scrollToStart } = useMessageScrollerContext();
57
+ return external_react_namespaceObject.useMemo(()=>({
58
+ scrollToEnd,
59
+ scrollToMessage,
60
+ scrollToStart
61
+ }), [
62
+ scrollToEnd,
63
+ scrollToMessage,
64
+ scrollToStart
65
+ ]);
66
+ }
67
+ function useMessageScrollerScrollable() {
68
+ const { stateStore } = useMessageScrollerContext();
69
+ return external_react_namespaceObject.useSyncExternalStore(stateStore.subscribe, stateStore.getSnapshot, stateStore.getSnapshot);
70
+ }
71
+ function useMessageScrollerVisibility() {
72
+ const { observeVisibility, unobserveVisibility, visibilityStore } = useMessageScrollerContext();
73
+ const subscribe = external_react_namespaceObject.useCallback((listener)=>visibilityStore.subscribe(listener, observeVisibility, unobserveVisibility), [
74
+ observeVisibility,
75
+ unobserveVisibility,
76
+ visibilityStore
77
+ ]);
78
+ return external_react_namespaceObject.useSyncExternalStore(subscribe, visibilityStore.getSnapshot, visibilityStore.getSnapshot);
79
+ }
80
+ function MessageScrollerProvider({ autoScroll = false, children, defaultScrollPosition = 'end', scrollEdgeThreshold, scrollPreviousItemPeek, scrollMargin }) {
81
+ const { context, registerMessage } = (0, external_use_message_scroller_controller_cjs_namespaceObject.useMessageScrollerController)({
82
+ autoScroll,
83
+ defaultScrollPosition,
84
+ scrollEdgeThreshold,
85
+ scrollPreviousItemPeek,
86
+ scrollMargin
87
+ });
88
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(MessageScrollerContext.Provider, {
89
+ value: context,
90
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(MessageScrollerItemContext.Provider, {
91
+ value: registerMessage,
92
+ children: children
93
+ })
94
+ });
95
+ }
96
+ function usePendingDefaultScroll() {
97
+ const { pendingDefaultScrollStore } = useMessageScrollerContext();
98
+ return external_react_namespaceObject.useSyncExternalStore(pendingDefaultScrollStore.subscribe, pendingDefaultScrollStore.getSnapshot, pendingDefaultScrollStore.getSnapshot);
99
+ }
100
+ const components_MessageScroller = /*#__PURE__*/ external_react_namespaceObject.forwardRef(function({ children, ...props }, ref) {
101
+ const { setRootElement } = useMessageScrollerContext();
102
+ const pendingDefaultScroll = usePendingDefaultScroll();
103
+ const setRootRef = external_react_namespaceObject.useCallback((element)=>{
104
+ setRootElement(element);
105
+ (0, external_use_render_cjs_namespaceObject.composeRefs)(ref)?.(element);
106
+ }, [
107
+ ref,
108
+ setRootElement
109
+ ]);
110
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
111
+ ref: setRootRef,
112
+ ...props,
113
+ ...pendingDefaultScroll ? {
114
+ 'data-pending-scroll': ''
115
+ } : null,
116
+ children: children
117
+ });
118
+ });
119
+ const components_MessageScrollerViewport = /*#__PURE__*/ external_react_namespaceObject.forwardRef(function({ 'aria-label': ariaLabel, children, onKeyDown, onScroll, onTouchMove, onWheel, preserveScrollOnPrepend = true, role, tabIndex, ...props }, ref) {
120
+ const { handleResize, preserveScrollOnPrependRef, setViewportElement, syncAfterScroll, userScrollIntent, viewportRef } = useMessageScrollerContext();
121
+ const pendingDefaultScroll = usePendingDefaultScroll();
122
+ preserveScrollOnPrependRef.current = preserveScrollOnPrepend;
123
+ const setViewportRef = external_react_namespaceObject.useCallback((element)=>{
124
+ setViewportElement(element);
125
+ (0, external_use_render_cjs_namespaceObject.composeRefs)(ref)?.(element);
126
+ }, [
127
+ ref,
128
+ setViewportElement
129
+ ]);
130
+ function handleScroll(event) {
131
+ syncAfterScroll();
132
+ onScroll?.(event);
133
+ }
134
+ function handleWheel(event) {
135
+ userScrollIntent();
136
+ onWheel?.(event);
137
+ }
138
+ function handleTouchMove(event) {
139
+ userScrollIntent();
140
+ onTouchMove?.(event);
141
+ }
142
+ function handleKeyDown(event) {
143
+ if (external_types_cjs_namespaceObject.USER_SCROLL_KEYS.has(event.key)) userScrollIntent();
144
+ onKeyDown?.(event);
145
+ }
146
+ external_react_namespaceObject.useEffect(()=>{
147
+ const viewport = viewportRef.current;
148
+ if (!viewport || "u" < typeof ResizeObserver) return;
149
+ let frame = 0;
150
+ const observer = new ResizeObserver(()=>{
151
+ window.cancelAnimationFrame(frame);
152
+ frame = window.requestAnimationFrame(handleResize);
153
+ });
154
+ observer.observe(viewport);
155
+ return ()=>{
156
+ window.cancelAnimationFrame(frame);
157
+ observer.disconnect();
158
+ };
159
+ }, [
160
+ handleResize,
161
+ viewportRef
162
+ ]);
163
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
164
+ ref: setViewportRef,
165
+ role: role ?? 'region',
166
+ "aria-label": ariaLabel ?? 'Messages',
167
+ tabIndex: tabIndex ?? 0,
168
+ onKeyDown: handleKeyDown,
169
+ onScroll: handleScroll,
170
+ onTouchMove: handleTouchMove,
171
+ onWheel: handleWheel,
172
+ ...props,
173
+ ...pendingDefaultScroll ? {
174
+ 'data-pending-scroll': ''
175
+ } : null,
176
+ children: children
177
+ });
178
+ });
179
+ const components_MessageScrollerContent = /*#__PURE__*/ external_react_namespaceObject.forwardRef(function({ 'aria-relevant': ariaRelevant, children, role, spacerClassName, ...props }, ref) {
180
+ const { handleContentChange, handleResize, setContentElement, setSpacerElement } = useMessageScrollerContext();
181
+ const contentRef = external_react_namespaceObject.useRef(null);
182
+ const setContentRef = external_react_namespaceObject.useCallback((element)=>{
183
+ contentRef.current = element;
184
+ setContentElement(element);
185
+ (0, external_use_render_cjs_namespaceObject.composeRefs)(ref)?.(element);
186
+ }, [
187
+ ref,
188
+ setContentElement
189
+ ]);
190
+ external_react_namespaceObject.useLayoutEffect(()=>{
191
+ const content = contentRef.current;
192
+ if (!content) return;
193
+ handleContentChange();
194
+ if ("u" < typeof MutationObserver) return;
195
+ const observer = new MutationObserver(()=>{
196
+ handleContentChange();
197
+ });
198
+ observer.observe(content, {
199
+ childList: true
200
+ });
201
+ return ()=>observer.disconnect();
202
+ }, [
203
+ handleContentChange
204
+ ]);
205
+ external_react_namespaceObject.useEffect(()=>{
206
+ const content = contentRef.current;
207
+ if (!content || "u" < typeof ResizeObserver) return;
208
+ let frame = 0;
209
+ const observer = new ResizeObserver(()=>{
210
+ window.cancelAnimationFrame(frame);
211
+ frame = window.requestAnimationFrame(handleResize);
212
+ });
213
+ observer.observe(content);
214
+ return ()=>{
215
+ window.cancelAnimationFrame(frame);
216
+ observer.disconnect();
217
+ };
218
+ }, [
219
+ handleResize
220
+ ]);
221
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
222
+ ref: setContentRef,
223
+ role: role ?? 'log',
224
+ "aria-relevant": ariaRelevant ?? 'additions',
225
+ ...props,
226
+ children: [
227
+ children,
228
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
229
+ ref: setSpacerElement,
230
+ "aria-hidden": "true",
231
+ "data-message-scroller-spacer": "",
232
+ hidden: true,
233
+ className: spacerClassName
234
+ })
235
+ ]
236
+ });
237
+ });
238
+ const components_MessageScrollerItem = /*#__PURE__*/ external_react_namespaceObject.forwardRef(function({ messageId, scrollAnchor = false, ...props }, ref) {
239
+ const registerMessage = useMessageScrollerItemContext();
240
+ const elementRef = external_react_namespaceObject.useRef(null);
241
+ const setItemRef = external_react_namespaceObject.useCallback((element)=>{
242
+ const previousElement = elementRef.current;
243
+ elementRef.current = element;
244
+ if (messageId) registerMessage(messageId, element, previousElement);
245
+ (0, external_use_render_cjs_namespaceObject.composeRefs)(ref)?.(element);
246
+ }, [
247
+ messageId,
248
+ ref,
249
+ registerMessage
250
+ ]);
251
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
252
+ ref: setItemRef,
253
+ "data-message-id": messageId,
254
+ "data-scroll-anchor": scrollAnchor ? 'true' : 'false',
255
+ ...props
256
+ });
257
+ });
258
+ const components_MessageScrollerButton = /*#__PURE__*/ external_react_namespaceObject.forwardRef(function({ behavior = 'smooth', children, direction = 'end', onClick, render, tabIndex, type = 'button', ...props }, ref) {
259
+ const { scrollToEnd, scrollToStart, stateStore } = useMessageScrollerContext();
260
+ const onClickRef = (0, external_utils_cjs_namespaceObject.useLatest)(onClick);
261
+ const subscribe = external_react_namespaceObject.useCallback((listener)=>stateStore.subscribe(listener), [
262
+ stateStore
263
+ ]);
264
+ const getSnapshot = external_react_namespaceObject.useCallback(()=>{
265
+ const state = stateStore.getSnapshot();
266
+ return 'start' === direction ? state.start : state.end;
267
+ }, [
268
+ direction,
269
+ stateStore
270
+ ]);
271
+ const isActive = external_react_namespaceObject.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
272
+ const elementRef = external_react_namespaceObject.useRef(null);
273
+ const setButtonRef = external_react_namespaceObject.useCallback((element)=>{
274
+ elementRef.current = element;
275
+ (0, external_use_render_cjs_namespaceObject.composeRefs)(ref)?.(element);
276
+ }, [
277
+ ref
278
+ ]);
279
+ external_react_namespaceObject.useLayoutEffect(()=>{
280
+ elementRef.current?.toggleAttribute('inert', !isActive);
281
+ }, [
282
+ isActive
283
+ ]);
284
+ const handleClick = external_react_namespaceObject.useCallback((event)=>{
285
+ if (!isActive) return;
286
+ onClickRef.current?.(event);
287
+ if (!event.defaultPrevented) {
288
+ event.currentTarget.blur();
289
+ if ('start' === direction) scrollToStart({
290
+ behavior
291
+ });
292
+ else scrollToEnd({
293
+ behavior
294
+ });
295
+ }
296
+ }, [
297
+ behavior,
298
+ direction,
299
+ isActive,
300
+ onClickRef,
301
+ scrollToEnd,
302
+ scrollToStart
303
+ ]);
304
+ return (0, external_use_render_cjs_namespaceObject.useRender)({
305
+ defaultTagName: 'button',
306
+ props: (0, external_use_render_cjs_namespaceObject.mergeProps)({
307
+ ref: setButtonRef,
308
+ type,
309
+ tabIndex: isActive ? tabIndex : -1,
310
+ children: children ?? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("span", {
311
+ children: [
312
+ "Scroll to ",
313
+ direction
314
+ ]
315
+ }),
316
+ onClick: handleClick
317
+ }, props),
318
+ render,
319
+ state: {
320
+ active: isActive,
321
+ direction
322
+ },
323
+ stateAttributesMapping: {
324
+ active: (value)=>({
325
+ 'data-active': value ? 'true' : 'false'
326
+ })
327
+ }
328
+ });
329
+ });
330
+ components_MessageScroller.displayName = 'MessageScroller';
331
+ components_MessageScrollerViewport.displayName = 'MessageScrollerViewport';
332
+ components_MessageScrollerContent.displayName = 'MessageScrollerContent';
333
+ components_MessageScrollerItem.displayName = 'MessageScrollerItem';
334
+ components_MessageScrollerButton.displayName = 'MessageScrollerButton';
335
+ exports.MessageScroller = __webpack_exports__.MessageScroller;
336
+ exports.MessageScrollerButton = __webpack_exports__.MessageScrollerButton;
337
+ exports.MessageScrollerContent = __webpack_exports__.MessageScrollerContent;
338
+ exports.MessageScrollerItem = __webpack_exports__.MessageScrollerItem;
339
+ exports.MessageScrollerProvider = __webpack_exports__.MessageScrollerProvider;
340
+ exports.MessageScrollerViewport = __webpack_exports__.MessageScrollerViewport;
341
+ exports.useMessageScroller = __webpack_exports__.useMessageScroller;
342
+ exports.useMessageScrollerScrollable = __webpack_exports__.useMessageScrollerScrollable;
343
+ exports.useMessageScrollerVisibility = __webpack_exports__.useMessageScrollerVisibility;
344
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
345
+ "MessageScroller",
346
+ "MessageScrollerButton",
347
+ "MessageScrollerContent",
348
+ "MessageScrollerItem",
349
+ "MessageScrollerProvider",
350
+ "MessageScrollerViewport",
351
+ "useMessageScroller",
352
+ "useMessageScrollerScrollable",
353
+ "useMessageScrollerVisibility"
354
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
355
+ Object.defineProperty(exports, '__esModule', {
356
+ value: true
357
+ });
@@ -0,0 +1,28 @@
1
+ import * as React from 'react';
2
+ import type { MessageScrollerProviderProps } from './types';
3
+ declare function useMessageScroller(): {
4
+ scrollToEnd: (options?: import("./types").MessageScrollerScrollOptions) => boolean;
5
+ scrollToMessage: (messageId: string, options?: import("./types").MessageScrollerScrollOptions) => boolean;
6
+ scrollToStart: (options?: import("./types").MessageScrollerScrollOptions) => boolean;
7
+ };
8
+ declare function useMessageScrollerScrollable(): import("./types").MessageScrollerScrollable;
9
+ declare function useMessageScrollerVisibility(): import("./types").MessageScrollerVisibilityState;
10
+ declare function MessageScrollerProvider({ autoScroll, children, defaultScrollPosition, scrollEdgeThreshold, scrollPreviousItemPeek, scrollMargin, }: MessageScrollerProviderProps): import("react/jsx-runtime").JSX.Element;
11
+ declare const MessageScroller: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
+ declare const MessageScrollerViewport: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
13
+ preserveScrollOnPrepend?: boolean;
14
+ } & React.RefAttributes<HTMLDivElement>>;
15
+ declare const MessageScrollerContent: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
16
+ spacerClassName?: string;
17
+ } & React.RefAttributes<HTMLDivElement>>;
18
+ declare const MessageScrollerItem: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
19
+ messageId?: string;
20
+ scrollAnchor?: boolean;
21
+ } & React.RefAttributes<HTMLDivElement>>;
22
+ declare const MessageScrollerButton: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
23
+ render?: (React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | ((props: Record<string, unknown>, state: import("./types").MessageScrollerButtonRenderState) => React.ReactElement | null)) | undefined;
24
+ } & {
25
+ behavior?: ScrollBehavior;
26
+ direction?: import("./types").MessageScrollerButtonDirection;
27
+ } & React.RefAttributes<HTMLButtonElement>>;
28
+ export { MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, };
@@ -0,0 +1,299 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { createContext, forwardRef, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useSyncExternalStore } from "react";
3
+ import { USER_SCROLL_KEYS } from "./types.js";
4
+ import { useMessageScrollerController } from "./use-message-scroller-controller.js";
5
+ import { composeRefs, mergeProps, useRender } from "./use-render.js";
6
+ import { useLatest } from "./utils.js";
7
+ const MessageScrollerContext = /*#__PURE__*/ createContext(null);
8
+ const MessageScrollerItemContext = /*#__PURE__*/ createContext(null);
9
+ function useMessageScrollerContext() {
10
+ const context = useContext(MessageScrollerContext);
11
+ if (!context) throw new Error('useMessageScroller must be used within a MessageScroller.');
12
+ return context;
13
+ }
14
+ function useMessageScrollerItemContext() {
15
+ const context = useContext(MessageScrollerItemContext);
16
+ if (!context) throw new Error('MessageScrollerItem must be used within a MessageScroller.');
17
+ return context;
18
+ }
19
+ function useMessageScroller() {
20
+ const { scrollToEnd, scrollToMessage, scrollToStart } = useMessageScrollerContext();
21
+ return useMemo(()=>({
22
+ scrollToEnd,
23
+ scrollToMessage,
24
+ scrollToStart
25
+ }), [
26
+ scrollToEnd,
27
+ scrollToMessage,
28
+ scrollToStart
29
+ ]);
30
+ }
31
+ function useMessageScrollerScrollable() {
32
+ const { stateStore } = useMessageScrollerContext();
33
+ return useSyncExternalStore(stateStore.subscribe, stateStore.getSnapshot, stateStore.getSnapshot);
34
+ }
35
+ function useMessageScrollerVisibility() {
36
+ const { observeVisibility, unobserveVisibility, visibilityStore } = useMessageScrollerContext();
37
+ const subscribe = useCallback((listener)=>visibilityStore.subscribe(listener, observeVisibility, unobserveVisibility), [
38
+ observeVisibility,
39
+ unobserveVisibility,
40
+ visibilityStore
41
+ ]);
42
+ return useSyncExternalStore(subscribe, visibilityStore.getSnapshot, visibilityStore.getSnapshot);
43
+ }
44
+ function MessageScrollerProvider({ autoScroll = false, children, defaultScrollPosition = 'end', scrollEdgeThreshold, scrollPreviousItemPeek, scrollMargin }) {
45
+ const { context, registerMessage } = useMessageScrollerController({
46
+ autoScroll,
47
+ defaultScrollPosition,
48
+ scrollEdgeThreshold,
49
+ scrollPreviousItemPeek,
50
+ scrollMargin
51
+ });
52
+ return /*#__PURE__*/ jsx(MessageScrollerContext.Provider, {
53
+ value: context,
54
+ children: /*#__PURE__*/ jsx(MessageScrollerItemContext.Provider, {
55
+ value: registerMessage,
56
+ children: children
57
+ })
58
+ });
59
+ }
60
+ function usePendingDefaultScroll() {
61
+ const { pendingDefaultScrollStore } = useMessageScrollerContext();
62
+ return useSyncExternalStore(pendingDefaultScrollStore.subscribe, pendingDefaultScrollStore.getSnapshot, pendingDefaultScrollStore.getSnapshot);
63
+ }
64
+ const components_MessageScroller = /*#__PURE__*/ forwardRef(function({ children, ...props }, ref) {
65
+ const { setRootElement } = useMessageScrollerContext();
66
+ const pendingDefaultScroll = usePendingDefaultScroll();
67
+ const setRootRef = useCallback((element)=>{
68
+ setRootElement(element);
69
+ composeRefs(ref)?.(element);
70
+ }, [
71
+ ref,
72
+ setRootElement
73
+ ]);
74
+ return /*#__PURE__*/ jsx("div", {
75
+ ref: setRootRef,
76
+ ...props,
77
+ ...pendingDefaultScroll ? {
78
+ 'data-pending-scroll': ''
79
+ } : null,
80
+ children: children
81
+ });
82
+ });
83
+ const components_MessageScrollerViewport = /*#__PURE__*/ forwardRef(function({ 'aria-label': ariaLabel, children, onKeyDown, onScroll, onTouchMove, onWheel, preserveScrollOnPrepend = true, role, tabIndex, ...props }, ref) {
84
+ const { handleResize, preserveScrollOnPrependRef, setViewportElement, syncAfterScroll, userScrollIntent, viewportRef } = useMessageScrollerContext();
85
+ const pendingDefaultScroll = usePendingDefaultScroll();
86
+ preserveScrollOnPrependRef.current = preserveScrollOnPrepend;
87
+ const setViewportRef = useCallback((element)=>{
88
+ setViewportElement(element);
89
+ composeRefs(ref)?.(element);
90
+ }, [
91
+ ref,
92
+ setViewportElement
93
+ ]);
94
+ function handleScroll(event) {
95
+ syncAfterScroll();
96
+ onScroll?.(event);
97
+ }
98
+ function handleWheel(event) {
99
+ userScrollIntent();
100
+ onWheel?.(event);
101
+ }
102
+ function handleTouchMove(event) {
103
+ userScrollIntent();
104
+ onTouchMove?.(event);
105
+ }
106
+ function handleKeyDown(event) {
107
+ if (USER_SCROLL_KEYS.has(event.key)) userScrollIntent();
108
+ onKeyDown?.(event);
109
+ }
110
+ useEffect(()=>{
111
+ const viewport = viewportRef.current;
112
+ if (!viewport || "u" < typeof ResizeObserver) return;
113
+ let frame = 0;
114
+ const observer = new ResizeObserver(()=>{
115
+ window.cancelAnimationFrame(frame);
116
+ frame = window.requestAnimationFrame(handleResize);
117
+ });
118
+ observer.observe(viewport);
119
+ return ()=>{
120
+ window.cancelAnimationFrame(frame);
121
+ observer.disconnect();
122
+ };
123
+ }, [
124
+ handleResize,
125
+ viewportRef
126
+ ]);
127
+ return /*#__PURE__*/ jsx("div", {
128
+ ref: setViewportRef,
129
+ role: role ?? 'region',
130
+ "aria-label": ariaLabel ?? 'Messages',
131
+ tabIndex: tabIndex ?? 0,
132
+ onKeyDown: handleKeyDown,
133
+ onScroll: handleScroll,
134
+ onTouchMove: handleTouchMove,
135
+ onWheel: handleWheel,
136
+ ...props,
137
+ ...pendingDefaultScroll ? {
138
+ 'data-pending-scroll': ''
139
+ } : null,
140
+ children: children
141
+ });
142
+ });
143
+ const components_MessageScrollerContent = /*#__PURE__*/ forwardRef(function({ 'aria-relevant': ariaRelevant, children, role, spacerClassName, ...props }, ref) {
144
+ const { handleContentChange, handleResize, setContentElement, setSpacerElement } = useMessageScrollerContext();
145
+ const contentRef = useRef(null);
146
+ const setContentRef = useCallback((element)=>{
147
+ contentRef.current = element;
148
+ setContentElement(element);
149
+ composeRefs(ref)?.(element);
150
+ }, [
151
+ ref,
152
+ setContentElement
153
+ ]);
154
+ useLayoutEffect(()=>{
155
+ const content = contentRef.current;
156
+ if (!content) return;
157
+ handleContentChange();
158
+ if ("u" < typeof MutationObserver) return;
159
+ const observer = new MutationObserver(()=>{
160
+ handleContentChange();
161
+ });
162
+ observer.observe(content, {
163
+ childList: true
164
+ });
165
+ return ()=>observer.disconnect();
166
+ }, [
167
+ handleContentChange
168
+ ]);
169
+ useEffect(()=>{
170
+ const content = contentRef.current;
171
+ if (!content || "u" < typeof ResizeObserver) return;
172
+ let frame = 0;
173
+ const observer = new ResizeObserver(()=>{
174
+ window.cancelAnimationFrame(frame);
175
+ frame = window.requestAnimationFrame(handleResize);
176
+ });
177
+ observer.observe(content);
178
+ return ()=>{
179
+ window.cancelAnimationFrame(frame);
180
+ observer.disconnect();
181
+ };
182
+ }, [
183
+ handleResize
184
+ ]);
185
+ return /*#__PURE__*/ jsxs("div", {
186
+ ref: setContentRef,
187
+ role: role ?? 'log',
188
+ "aria-relevant": ariaRelevant ?? 'additions',
189
+ ...props,
190
+ children: [
191
+ children,
192
+ /*#__PURE__*/ jsx("div", {
193
+ ref: setSpacerElement,
194
+ "aria-hidden": "true",
195
+ "data-message-scroller-spacer": "",
196
+ hidden: true,
197
+ className: spacerClassName
198
+ })
199
+ ]
200
+ });
201
+ });
202
+ const components_MessageScrollerItem = /*#__PURE__*/ forwardRef(function({ messageId, scrollAnchor = false, ...props }, ref) {
203
+ const registerMessage = useMessageScrollerItemContext();
204
+ const elementRef = useRef(null);
205
+ const setItemRef = useCallback((element)=>{
206
+ const previousElement = elementRef.current;
207
+ elementRef.current = element;
208
+ if (messageId) registerMessage(messageId, element, previousElement);
209
+ composeRefs(ref)?.(element);
210
+ }, [
211
+ messageId,
212
+ ref,
213
+ registerMessage
214
+ ]);
215
+ return /*#__PURE__*/ jsx("div", {
216
+ ref: setItemRef,
217
+ "data-message-id": messageId,
218
+ "data-scroll-anchor": scrollAnchor ? 'true' : 'false',
219
+ ...props
220
+ });
221
+ });
222
+ const components_MessageScrollerButton = /*#__PURE__*/ forwardRef(function({ behavior = 'smooth', children, direction = 'end', onClick, render, tabIndex, type = 'button', ...props }, ref) {
223
+ const { scrollToEnd, scrollToStart, stateStore } = useMessageScrollerContext();
224
+ const onClickRef = useLatest(onClick);
225
+ const subscribe = useCallback((listener)=>stateStore.subscribe(listener), [
226
+ stateStore
227
+ ]);
228
+ const getSnapshot = useCallback(()=>{
229
+ const state = stateStore.getSnapshot();
230
+ return 'start' === direction ? state.start : state.end;
231
+ }, [
232
+ direction,
233
+ stateStore
234
+ ]);
235
+ const isActive = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
236
+ const elementRef = useRef(null);
237
+ const setButtonRef = useCallback((element)=>{
238
+ elementRef.current = element;
239
+ composeRefs(ref)?.(element);
240
+ }, [
241
+ ref
242
+ ]);
243
+ useLayoutEffect(()=>{
244
+ elementRef.current?.toggleAttribute('inert', !isActive);
245
+ }, [
246
+ isActive
247
+ ]);
248
+ const handleClick = useCallback((event)=>{
249
+ if (!isActive) return;
250
+ onClickRef.current?.(event);
251
+ if (!event.defaultPrevented) {
252
+ event.currentTarget.blur();
253
+ if ('start' === direction) scrollToStart({
254
+ behavior
255
+ });
256
+ else scrollToEnd({
257
+ behavior
258
+ });
259
+ }
260
+ }, [
261
+ behavior,
262
+ direction,
263
+ isActive,
264
+ onClickRef,
265
+ scrollToEnd,
266
+ scrollToStart
267
+ ]);
268
+ return useRender({
269
+ defaultTagName: 'button',
270
+ props: mergeProps({
271
+ ref: setButtonRef,
272
+ type,
273
+ tabIndex: isActive ? tabIndex : -1,
274
+ children: children ?? /*#__PURE__*/ jsxs("span", {
275
+ children: [
276
+ "Scroll to ",
277
+ direction
278
+ ]
279
+ }),
280
+ onClick: handleClick
281
+ }, props),
282
+ render,
283
+ state: {
284
+ active: isActive,
285
+ direction
286
+ },
287
+ stateAttributesMapping: {
288
+ active: (value)=>({
289
+ 'data-active': value ? 'true' : 'false'
290
+ })
291
+ }
292
+ });
293
+ });
294
+ components_MessageScroller.displayName = 'MessageScroller';
295
+ components_MessageScrollerViewport.displayName = 'MessageScrollerViewport';
296
+ components_MessageScrollerContent.displayName = 'MessageScrollerContent';
297
+ components_MessageScrollerItem.displayName = 'MessageScrollerItem';
298
+ components_MessageScrollerButton.displayName = 'MessageScrollerButton';
299
+ export { components_MessageScroller as MessageScroller, components_MessageScrollerButton as MessageScrollerButton, components_MessageScrollerContent as MessageScrollerContent, components_MessageScrollerItem as MessageScrollerItem, MessageScrollerProvider, components_MessageScrollerViewport as MessageScrollerViewport, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility };