@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.
- package/dist/components/ui/attachment.cjs +174 -0
- package/dist/components/ui/attachment.d.ts +39 -0
- package/dist/components/ui/attachment.js +113 -0
- package/dist/components/ui/bubble.cjs +123 -0
- package/dist/components/ui/bubble.d.ts +28 -0
- package/dist/components/ui/bubble.js +77 -0
- package/dist/components/ui/combobox.cjs +1 -1
- package/dist/components/ui/combobox.js +1 -1
- package/dist/components/ui/index.cjs +274 -219
- package/dist/components/ui/index.d.ts +6 -1
- package/dist/components/ui/index.js +6 -1
- package/dist/components/ui/input-group.cjs +8 -4
- package/dist/components/ui/input-group.js +8 -4
- package/dist/components/ui/input.cjs +1 -1
- package/dist/components/ui/input.js +1 -1
- package/dist/components/ui/marker.cjs +89 -0
- package/dist/components/ui/marker.d.ts +16 -0
- package/dist/components/ui/marker.js +46 -0
- package/dist/components/ui/message-scroller/index.cjs +58 -0
- package/dist/components/ui/message-scroller/index.d.ts +1 -0
- package/dist/components/ui/message-scroller/index.js +1 -0
- package/dist/components/ui/message-scroller/message-scroller.cjs +137 -0
- package/dist/components/ui/message-scroller/message-scroller.d.ts +60 -0
- package/dist/components/ui/message-scroller/message-scroller.js +73 -0
- package/dist/components/ui/message-scroller/primitive/components.cjs +357 -0
- package/dist/components/ui/message-scroller/primitive/components.d.ts +28 -0
- package/dist/components/ui/message-scroller/primitive/components.js +299 -0
- package/dist/components/ui/message-scroller/primitive/geometry.cjs +232 -0
- package/dist/components/ui/message-scroller/primitive/geometry.d.ts +54 -0
- package/dist/components/ui/message-scroller/primitive/geometry.js +153 -0
- package/dist/components/ui/message-scroller/primitive/index.cjs +53 -0
- package/dist/components/ui/message-scroller/primitive/index.d.ts +23 -0
- package/dist/components/ui/message-scroller/primitive/index.js +10 -0
- package/dist/components/ui/message-scroller/primitive/stores.cjs +81 -0
- package/dist/components/ui/message-scroller/primitive/stores.d.ts +6 -0
- package/dist/components/ui/message-scroller/primitive/stores.js +38 -0
- package/dist/components/ui/message-scroller/primitive/types.cjs +82 -0
- package/dist/components/ui/message-scroller/primitive/types.d.ts +89 -0
- package/dist/components/ui/message-scroller/primitive/types.js +24 -0
- package/dist/components/ui/message-scroller/primitive/use-message-scroller-commands.cjs +213 -0
- package/dist/components/ui/message-scroller/primitive/use-message-scroller-commands.d.ts +18 -0
- package/dist/components/ui/message-scroller/primitive/use-message-scroller-commands.js +179 -0
- package/dist/components/ui/message-scroller/primitive/use-message-scroller-controller.cjs +474 -0
- package/dist/components/ui/message-scroller/primitive/use-message-scroller-controller.d.ts +6 -0
- package/dist/components/ui/message-scroller/primitive/use-message-scroller-controller.js +440 -0
- package/dist/components/ui/message-scroller/primitive/use-message-scroller-refs.cjs +124 -0
- package/dist/components/ui/message-scroller/primitive/use-message-scroller-refs.d.ts +52 -0
- package/dist/components/ui/message-scroller/primitive/use-message-scroller-refs.js +84 -0
- package/dist/components/ui/message-scroller/primitive/use-render.cjs +116 -0
- package/dist/components/ui/message-scroller/primitive/use-render.d.ts +21 -0
- package/dist/components/ui/message-scroller/primitive/use-render.js +76 -0
- package/dist/components/ui/message-scroller/primitive/utils.cjs +41 -0
- package/dist/components/ui/message-scroller/primitive/utils.d.ts +3 -0
- package/dist/components/ui/message-scroller/primitive/utils.js +7 -0
- package/dist/components/ui/message.cjs +96 -0
- package/dist/components/ui/message.d.ts +17 -0
- package/dist/components/ui/message.js +47 -0
- package/dist/components/ui/multi-select.cjs +3 -3
- package/dist/components/ui/multi-select.d.ts +10 -0
- package/dist/components/ui/multi-select.js +3 -3
- package/dist/components/ui/select.cjs +1 -1
- package/dist/components/ui/select.js +1 -1
- package/dist/components/ui/textarea.cjs +1 -1
- package/dist/components/ui/textarea.js +1 -1
- package/dist/index.cjs +164 -51
- package/dist/index.d.ts +10 -0
- package/dist/index.js +6 -1
- package/dist/styles.css +773 -0
- package/dist/tailwind.utilities.css +223 -0
- 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 };
|