@uipath/apollo-wind 2.66.1 → 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 (57) 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/index.cjs +268 -213
  8. package/dist/components/ui/index.d.ts +6 -1
  9. package/dist/components/ui/index.js +6 -1
  10. package/dist/components/ui/marker.cjs +89 -0
  11. package/dist/components/ui/marker.d.ts +16 -0
  12. package/dist/components/ui/marker.js +46 -0
  13. package/dist/components/ui/message-scroller/index.cjs +58 -0
  14. package/dist/components/ui/message-scroller/index.d.ts +1 -0
  15. package/dist/components/ui/message-scroller/index.js +1 -0
  16. package/dist/components/ui/message-scroller/message-scroller.cjs +137 -0
  17. package/dist/components/ui/message-scroller/message-scroller.d.ts +60 -0
  18. package/dist/components/ui/message-scroller/message-scroller.js +73 -0
  19. package/dist/components/ui/message-scroller/primitive/components.cjs +357 -0
  20. package/dist/components/ui/message-scroller/primitive/components.d.ts +28 -0
  21. package/dist/components/ui/message-scroller/primitive/components.js +299 -0
  22. package/dist/components/ui/message-scroller/primitive/geometry.cjs +232 -0
  23. package/dist/components/ui/message-scroller/primitive/geometry.d.ts +54 -0
  24. package/dist/components/ui/message-scroller/primitive/geometry.js +153 -0
  25. package/dist/components/ui/message-scroller/primitive/index.cjs +53 -0
  26. package/dist/components/ui/message-scroller/primitive/index.d.ts +23 -0
  27. package/dist/components/ui/message-scroller/primitive/index.js +10 -0
  28. package/dist/components/ui/message-scroller/primitive/stores.cjs +81 -0
  29. package/dist/components/ui/message-scroller/primitive/stores.d.ts +6 -0
  30. package/dist/components/ui/message-scroller/primitive/stores.js +38 -0
  31. package/dist/components/ui/message-scroller/primitive/types.cjs +82 -0
  32. package/dist/components/ui/message-scroller/primitive/types.d.ts +89 -0
  33. package/dist/components/ui/message-scroller/primitive/types.js +24 -0
  34. package/dist/components/ui/message-scroller/primitive/use-message-scroller-commands.cjs +213 -0
  35. package/dist/components/ui/message-scroller/primitive/use-message-scroller-commands.d.ts +18 -0
  36. package/dist/components/ui/message-scroller/primitive/use-message-scroller-commands.js +179 -0
  37. package/dist/components/ui/message-scroller/primitive/use-message-scroller-controller.cjs +474 -0
  38. package/dist/components/ui/message-scroller/primitive/use-message-scroller-controller.d.ts +6 -0
  39. package/dist/components/ui/message-scroller/primitive/use-message-scroller-controller.js +440 -0
  40. package/dist/components/ui/message-scroller/primitive/use-message-scroller-refs.cjs +124 -0
  41. package/dist/components/ui/message-scroller/primitive/use-message-scroller-refs.d.ts +52 -0
  42. package/dist/components/ui/message-scroller/primitive/use-message-scroller-refs.js +84 -0
  43. package/dist/components/ui/message-scroller/primitive/use-render.cjs +116 -0
  44. package/dist/components/ui/message-scroller/primitive/use-render.d.ts +21 -0
  45. package/dist/components/ui/message-scroller/primitive/use-render.js +76 -0
  46. package/dist/components/ui/message-scroller/primitive/utils.cjs +41 -0
  47. package/dist/components/ui/message-scroller/primitive/utils.d.ts +3 -0
  48. package/dist/components/ui/message-scroller/primitive/utils.js +7 -0
  49. package/dist/components/ui/message.cjs +96 -0
  50. package/dist/components/ui/message.d.ts +17 -0
  51. package/dist/components/ui/message.js +47 -0
  52. package/dist/index.cjs +164 -51
  53. package/dist/index.d.ts +10 -0
  54. package/dist/index.js +6 -1
  55. package/dist/styles.css +720 -0
  56. package/dist/tailwind.utilities.css +223 -0
  57. package/package.json +1 -1
@@ -0,0 +1,232 @@
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
+ hasMultipleNewScrollAnchors: ()=>hasMultipleNewScrollAnchors,
28
+ getMessageScrollerVisibilityState: ()=>getMessageScrollerVisibilityState,
29
+ getUnanchoredScrollAnchor: ()=>getUnanchoredScrollAnchor,
30
+ getContentBottom: ()=>getContentBottom,
31
+ getFirstVisibleMessageItem: ()=>getFirstVisibleMessageItem,
32
+ getMessageScrollerItems: ()=>getMessageScrollerItems,
33
+ getElementScrollTop: ()=>getElementScrollTop,
34
+ getFlexGap: ()=>getFlexGap,
35
+ getElementTop: ()=>getElementTop,
36
+ getLastScrollAnchor: ()=>getLastScrollAnchor,
37
+ getTailSpacerHeight: ()=>getTailSpacerHeight,
38
+ getElementViewportTop: ()=>getElementViewportTop,
39
+ getContentBlockPadding: ()=>getContentBlockPadding,
40
+ getMaxScrollTop: ()=>getMaxScrollTop,
41
+ getMessageScrollerScrollable: ()=>getMessageScrollerScrollable,
42
+ getNewScrollAnchor: ()=>getNewScrollAnchor
43
+ });
44
+ const external_types_cjs_namespaceObject = require("./types.cjs");
45
+ function getMessageScrollerScrollable({ content, scrollEdgeThreshold, spacer, viewport }) {
46
+ if (!viewport || !content) return external_types_cjs_namespaceObject.EMPTY_MESSAGE_SCROLLER_SCROLLABLE;
47
+ const contentBottom = getContentBottom({
48
+ content,
49
+ spacer,
50
+ viewport
51
+ });
52
+ return {
53
+ start: viewport.scrollTop > scrollEdgeThreshold,
54
+ end: contentBottom - viewport.scrollTop - viewport.clientHeight > scrollEdgeThreshold
55
+ };
56
+ }
57
+ function getMessageScrollerVisibilityState({ content, scrollMargin, scrollPreviousItemPeek, spacer, viewport, visibleMessageIds }) {
58
+ if (!content || !viewport) return external_types_cjs_namespaceObject.EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE;
59
+ const viewportRect = viewport.getBoundingClientRect();
60
+ const lineTop = viewportRect.top + scrollMargin + scrollPreviousItemPeek;
61
+ const trackByLayout = "u" < typeof IntersectionObserver;
62
+ const visible = [];
63
+ let currentAnchorId = null;
64
+ for (const item of getMessageScrollerItems(content, spacer)){
65
+ const messageId = item.dataset.messageId;
66
+ if (!messageId) continue;
67
+ const isAnchor = 'true' === item.dataset.scrollAnchor;
68
+ const rect = isAnchor || trackByLayout ? item.getBoundingClientRect() : null;
69
+ const isVisible = trackByLayout && rect ? rect.bottom > lineTop && rect.top < viewportRect.bottom : visibleMessageIds.has(messageId);
70
+ if (isVisible) visible.push(messageId);
71
+ if (isAnchor && rect && rect.top <= lineTop + external_types_cjs_namespaceObject.SCROLL_POSITION_EPSILON) currentAnchorId = messageId;
72
+ }
73
+ if (0 === visible.length && null === currentAnchorId) return external_types_cjs_namespaceObject.EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE;
74
+ return {
75
+ currentAnchorId,
76
+ visibleMessageIds: visible
77
+ };
78
+ }
79
+ function getMessageScrollerItems(content, spacer) {
80
+ return Array.from(content.children).filter((child)=>child instanceof HTMLElement && child !== spacer);
81
+ }
82
+ function getNewScrollAnchor(items, previousItemCount) {
83
+ for(let index = previousItemCount; index < items.length; index++){
84
+ const item = items[index];
85
+ if (item?.dataset.scrollAnchor === 'true') return item;
86
+ }
87
+ return null;
88
+ }
89
+ function getUnanchoredScrollAnchor(items, handledAnchors) {
90
+ for (const item of items)if ('true' === item.dataset.scrollAnchor && !handledAnchors.has(item)) return item;
91
+ return null;
92
+ }
93
+ function hasMultipleNewScrollAnchors(items, previousItemCount) {
94
+ let count = 0;
95
+ for(let index = previousItemCount; index < items.length; index++){
96
+ const item = items[index];
97
+ if (item?.dataset.scrollAnchor === 'true') {
98
+ count += 1;
99
+ if (count > 1) return true;
100
+ }
101
+ }
102
+ return false;
103
+ }
104
+ function getLastScrollAnchor(items) {
105
+ for(let index = items.length - 1; index >= 0; index--){
106
+ const item = items[index];
107
+ if (item?.dataset.scrollAnchor === 'true') return item;
108
+ }
109
+ return null;
110
+ }
111
+ function getFirstVisibleMessageItem({ content, spacer, viewport }) {
112
+ const viewportRect = viewport.getBoundingClientRect();
113
+ for (const item of getMessageScrollerItems(content, spacer)){
114
+ if (!item.dataset.messageId) continue;
115
+ const rect = item.getBoundingClientRect();
116
+ if (rect.bottom > viewportRect.top && rect.top < viewportRect.bottom) return item;
117
+ }
118
+ return null;
119
+ }
120
+ function getElementScrollTop({ align, element, scrollMargin, spacer, viewport }) {
121
+ const elementTop = getElementTop(element, viewport);
122
+ const elementHeight = element.getBoundingClientRect().height;
123
+ const contentPadding = getContentBlockPadding(spacer);
124
+ if ('center' === align) {
125
+ const insetHeight = Math.max(0, viewport.clientHeight - contentPadding.start - contentPadding.end);
126
+ return elementTop - contentPadding.start - (insetHeight - elementHeight) / 2 - scrollMargin;
127
+ }
128
+ if ('end' === align) return elementTop - viewport.clientHeight + elementHeight + contentPadding.end + scrollMargin;
129
+ if ('nearest' === align) {
130
+ const elementBottom = elementTop + elementHeight;
131
+ const viewportTop = viewport.scrollTop + contentPadding.start;
132
+ const viewportBottom = viewport.scrollTop + viewport.clientHeight - contentPadding.end;
133
+ if (elementTop >= viewportTop && elementBottom <= viewportBottom) return viewport.scrollTop;
134
+ if (elementTop < viewportTop) return elementTop - contentPadding.start - scrollMargin;
135
+ return elementBottom - viewport.clientHeight + contentPadding.end + scrollMargin;
136
+ }
137
+ return elementTop - contentPadding.start - scrollMargin;
138
+ }
139
+ function getElementTop(element, viewport) {
140
+ const elementRect = element.getBoundingClientRect();
141
+ const viewportRect = viewport.getBoundingClientRect();
142
+ return elementRect.top - viewportRect.top + viewport.scrollTop;
143
+ }
144
+ function getElementViewportTop(element, viewport) {
145
+ return element.getBoundingClientRect().top - viewport.getBoundingClientRect().top;
146
+ }
147
+ function getTailSpacerHeight({ content, scrollTop, spacer, viewport }) {
148
+ const contentBottom = getContentBottom({
149
+ content,
150
+ spacer,
151
+ viewport
152
+ });
153
+ return scrollTop + viewport.clientHeight - contentBottom;
154
+ }
155
+ function getContentBottom({ content, spacer, viewport }) {
156
+ const items = getMessageScrollerItems(content, spacer);
157
+ const padding = getBlockPadding(content);
158
+ const viewportRect = viewport.getBoundingClientRect();
159
+ const scrollTop = viewport.scrollTop;
160
+ let contentBottom = padding.start + padding.end;
161
+ for (const item of items){
162
+ const rect = item.getBoundingClientRect();
163
+ contentBottom = Math.max(contentBottom, rect.bottom - viewportRect.top + scrollTop + padding.end);
164
+ }
165
+ return contentBottom;
166
+ }
167
+ function getMaxScrollTop(viewport) {
168
+ return Math.max(0, viewport.scrollHeight - viewport.clientHeight);
169
+ }
170
+ function getBlockPadding(element) {
171
+ const style = window.getComputedStyle(element);
172
+ return {
173
+ end: readCssPixel(style.paddingBlockEnd || style.paddingBottom),
174
+ start: readCssPixel(style.paddingBlockStart || style.paddingTop)
175
+ };
176
+ }
177
+ function getContentBlockPadding(spacer) {
178
+ const content = spacer?.parentElement;
179
+ if (!content) return {
180
+ end: 0,
181
+ start: 0
182
+ };
183
+ return getBlockPadding(content);
184
+ }
185
+ function getFlexGap(element) {
186
+ if (!element) return 0;
187
+ const style = window.getComputedStyle(element);
188
+ const gap = 'normal' === style.rowGap ? style.gap : style.rowGap;
189
+ return readCssPixel(gap);
190
+ }
191
+ function readCssPixel(value) {
192
+ if (!value) return 0;
193
+ const number = Number.parseFloat(value);
194
+ return Number.isFinite(number) ? number : 0;
195
+ }
196
+ exports.getContentBlockPadding = __webpack_exports__.getContentBlockPadding;
197
+ exports.getContentBottom = __webpack_exports__.getContentBottom;
198
+ exports.getElementScrollTop = __webpack_exports__.getElementScrollTop;
199
+ exports.getElementTop = __webpack_exports__.getElementTop;
200
+ exports.getElementViewportTop = __webpack_exports__.getElementViewportTop;
201
+ exports.getFirstVisibleMessageItem = __webpack_exports__.getFirstVisibleMessageItem;
202
+ exports.getFlexGap = __webpack_exports__.getFlexGap;
203
+ exports.getLastScrollAnchor = __webpack_exports__.getLastScrollAnchor;
204
+ exports.getMaxScrollTop = __webpack_exports__.getMaxScrollTop;
205
+ exports.getMessageScrollerItems = __webpack_exports__.getMessageScrollerItems;
206
+ exports.getMessageScrollerScrollable = __webpack_exports__.getMessageScrollerScrollable;
207
+ exports.getMessageScrollerVisibilityState = __webpack_exports__.getMessageScrollerVisibilityState;
208
+ exports.getNewScrollAnchor = __webpack_exports__.getNewScrollAnchor;
209
+ exports.getTailSpacerHeight = __webpack_exports__.getTailSpacerHeight;
210
+ exports.getUnanchoredScrollAnchor = __webpack_exports__.getUnanchoredScrollAnchor;
211
+ exports.hasMultipleNewScrollAnchors = __webpack_exports__.hasMultipleNewScrollAnchors;
212
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
213
+ "getContentBlockPadding",
214
+ "getContentBottom",
215
+ "getElementScrollTop",
216
+ "getElementTop",
217
+ "getElementViewportTop",
218
+ "getFirstVisibleMessageItem",
219
+ "getFlexGap",
220
+ "getLastScrollAnchor",
221
+ "getMaxScrollTop",
222
+ "getMessageScrollerItems",
223
+ "getMessageScrollerScrollable",
224
+ "getMessageScrollerVisibilityState",
225
+ "getNewScrollAnchor",
226
+ "getTailSpacerHeight",
227
+ "getUnanchoredScrollAnchor",
228
+ "hasMultipleNewScrollAnchors"
229
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
230
+ Object.defineProperty(exports, '__esModule', {
231
+ value: true
232
+ });
@@ -0,0 +1,54 @@
1
+ import type { MessageScrollerScrollAlign, MessageScrollerScrollable, MessageScrollerVisibilityState } from './types';
2
+ declare function getMessageScrollerScrollable({ content, scrollEdgeThreshold, spacer, viewport, }: {
3
+ content: HTMLElement | null;
4
+ scrollEdgeThreshold: number;
5
+ spacer: HTMLElement | null;
6
+ viewport: HTMLElement | null;
7
+ }): MessageScrollerScrollable;
8
+ declare function getMessageScrollerVisibilityState({ content, scrollMargin, scrollPreviousItemPeek, spacer, viewport, visibleMessageIds, }: {
9
+ content: HTMLElement | null;
10
+ scrollMargin: number;
11
+ scrollPreviousItemPeek: number;
12
+ spacer: HTMLElement | null;
13
+ viewport: HTMLElement | null;
14
+ visibleMessageIds: Set<string>;
15
+ }): MessageScrollerVisibilityState;
16
+ declare function getMessageScrollerItems(content: HTMLElement, spacer: HTMLElement | null): HTMLElement[];
17
+ declare function getNewScrollAnchor(items: HTMLElement[], previousItemCount: number): HTMLElement | null;
18
+ declare function getUnanchoredScrollAnchor(items: HTMLElement[], handledAnchors: {
19
+ has(element: HTMLElement): boolean;
20
+ }): HTMLElement | null;
21
+ declare function hasMultipleNewScrollAnchors(items: HTMLElement[], previousItemCount: number): boolean;
22
+ declare function getLastScrollAnchor(items: HTMLElement[]): HTMLElement | null;
23
+ declare function getFirstVisibleMessageItem({ content, spacer, viewport, }: {
24
+ content: HTMLElement;
25
+ spacer: HTMLElement | null;
26
+ viewport: HTMLElement;
27
+ }): HTMLElement | null;
28
+ declare function getElementScrollTop({ align, element, scrollMargin, spacer, viewport, }: {
29
+ align: MessageScrollerScrollAlign;
30
+ element: HTMLElement;
31
+ scrollMargin: number;
32
+ spacer: HTMLElement | null;
33
+ viewport: HTMLElement;
34
+ }): number;
35
+ declare function getElementTop(element: HTMLElement, viewport: HTMLElement): number;
36
+ declare function getElementViewportTop(element: HTMLElement, viewport: HTMLElement): number;
37
+ declare function getTailSpacerHeight({ content, scrollTop, spacer, viewport, }: {
38
+ content: HTMLElement;
39
+ scrollTop: number;
40
+ spacer: HTMLElement | null;
41
+ viewport: HTMLElement;
42
+ }): number;
43
+ declare function getContentBottom({ content, spacer, viewport, }: {
44
+ content: HTMLElement;
45
+ spacer: HTMLElement | null;
46
+ viewport: HTMLElement;
47
+ }): number;
48
+ declare function getMaxScrollTop(viewport: HTMLElement): number;
49
+ declare function getContentBlockPadding(spacer: HTMLElement | null): {
50
+ end: number;
51
+ start: number;
52
+ };
53
+ declare function getFlexGap(element: HTMLElement | null): number;
54
+ export { getContentBlockPadding, getContentBottom, getElementScrollTop, getElementTop, getElementViewportTop, getFirstVisibleMessageItem, getFlexGap, getLastScrollAnchor, getMaxScrollTop, getMessageScrollerItems, getMessageScrollerScrollable, getMessageScrollerVisibilityState, getNewScrollAnchor, getTailSpacerHeight, getUnanchoredScrollAnchor, hasMultipleNewScrollAnchors, };
@@ -0,0 +1,153 @@
1
+ import { EMPTY_MESSAGE_SCROLLER_SCROLLABLE, EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE, SCROLL_POSITION_EPSILON } from "./types.js";
2
+ function getMessageScrollerScrollable({ content, scrollEdgeThreshold, spacer, viewport }) {
3
+ if (!viewport || !content) return EMPTY_MESSAGE_SCROLLER_SCROLLABLE;
4
+ const contentBottom = getContentBottom({
5
+ content,
6
+ spacer,
7
+ viewport
8
+ });
9
+ return {
10
+ start: viewport.scrollTop > scrollEdgeThreshold,
11
+ end: contentBottom - viewport.scrollTop - viewport.clientHeight > scrollEdgeThreshold
12
+ };
13
+ }
14
+ function getMessageScrollerVisibilityState({ content, scrollMargin, scrollPreviousItemPeek, spacer, viewport, visibleMessageIds }) {
15
+ if (!content || !viewport) return EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE;
16
+ const viewportRect = viewport.getBoundingClientRect();
17
+ const lineTop = viewportRect.top + scrollMargin + scrollPreviousItemPeek;
18
+ const trackByLayout = "u" < typeof IntersectionObserver;
19
+ const visible = [];
20
+ let currentAnchorId = null;
21
+ for (const item of getMessageScrollerItems(content, spacer)){
22
+ const messageId = item.dataset.messageId;
23
+ if (!messageId) continue;
24
+ const isAnchor = 'true' === item.dataset.scrollAnchor;
25
+ const rect = isAnchor || trackByLayout ? item.getBoundingClientRect() : null;
26
+ const isVisible = trackByLayout && rect ? rect.bottom > lineTop && rect.top < viewportRect.bottom : visibleMessageIds.has(messageId);
27
+ if (isVisible) visible.push(messageId);
28
+ if (isAnchor && rect && rect.top <= lineTop + SCROLL_POSITION_EPSILON) currentAnchorId = messageId;
29
+ }
30
+ if (0 === visible.length && null === currentAnchorId) return EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE;
31
+ return {
32
+ currentAnchorId,
33
+ visibleMessageIds: visible
34
+ };
35
+ }
36
+ function getMessageScrollerItems(content, spacer) {
37
+ return Array.from(content.children).filter((child)=>child instanceof HTMLElement && child !== spacer);
38
+ }
39
+ function getNewScrollAnchor(items, previousItemCount) {
40
+ for(let index = previousItemCount; index < items.length; index++){
41
+ const item = items[index];
42
+ if (item?.dataset.scrollAnchor === 'true') return item;
43
+ }
44
+ return null;
45
+ }
46
+ function getUnanchoredScrollAnchor(items, handledAnchors) {
47
+ for (const item of items)if ('true' === item.dataset.scrollAnchor && !handledAnchors.has(item)) return item;
48
+ return null;
49
+ }
50
+ function hasMultipleNewScrollAnchors(items, previousItemCount) {
51
+ let count = 0;
52
+ for(let index = previousItemCount; index < items.length; index++){
53
+ const item = items[index];
54
+ if (item?.dataset.scrollAnchor === 'true') {
55
+ count += 1;
56
+ if (count > 1) return true;
57
+ }
58
+ }
59
+ return false;
60
+ }
61
+ function getLastScrollAnchor(items) {
62
+ for(let index = items.length - 1; index >= 0; index--){
63
+ const item = items[index];
64
+ if (item?.dataset.scrollAnchor === 'true') return item;
65
+ }
66
+ return null;
67
+ }
68
+ function getFirstVisibleMessageItem({ content, spacer, viewport }) {
69
+ const viewportRect = viewport.getBoundingClientRect();
70
+ for (const item of getMessageScrollerItems(content, spacer)){
71
+ if (!item.dataset.messageId) continue;
72
+ const rect = item.getBoundingClientRect();
73
+ if (rect.bottom > viewportRect.top && rect.top < viewportRect.bottom) return item;
74
+ }
75
+ return null;
76
+ }
77
+ function getElementScrollTop({ align, element, scrollMargin, spacer, viewport }) {
78
+ const elementTop = getElementTop(element, viewport);
79
+ const elementHeight = element.getBoundingClientRect().height;
80
+ const contentPadding = getContentBlockPadding(spacer);
81
+ if ('center' === align) {
82
+ const insetHeight = Math.max(0, viewport.clientHeight - contentPadding.start - contentPadding.end);
83
+ return elementTop - contentPadding.start - (insetHeight - elementHeight) / 2 - scrollMargin;
84
+ }
85
+ if ('end' === align) return elementTop - viewport.clientHeight + elementHeight + contentPadding.end + scrollMargin;
86
+ if ('nearest' === align) {
87
+ const elementBottom = elementTop + elementHeight;
88
+ const viewportTop = viewport.scrollTop + contentPadding.start;
89
+ const viewportBottom = viewport.scrollTop + viewport.clientHeight - contentPadding.end;
90
+ if (elementTop >= viewportTop && elementBottom <= viewportBottom) return viewport.scrollTop;
91
+ if (elementTop < viewportTop) return elementTop - contentPadding.start - scrollMargin;
92
+ return elementBottom - viewport.clientHeight + contentPadding.end + scrollMargin;
93
+ }
94
+ return elementTop - contentPadding.start - scrollMargin;
95
+ }
96
+ function getElementTop(element, viewport) {
97
+ const elementRect = element.getBoundingClientRect();
98
+ const viewportRect = viewport.getBoundingClientRect();
99
+ return elementRect.top - viewportRect.top + viewport.scrollTop;
100
+ }
101
+ function getElementViewportTop(element, viewport) {
102
+ return element.getBoundingClientRect().top - viewport.getBoundingClientRect().top;
103
+ }
104
+ function getTailSpacerHeight({ content, scrollTop, spacer, viewport }) {
105
+ const contentBottom = getContentBottom({
106
+ content,
107
+ spacer,
108
+ viewport
109
+ });
110
+ return scrollTop + viewport.clientHeight - contentBottom;
111
+ }
112
+ function getContentBottom({ content, spacer, viewport }) {
113
+ const items = getMessageScrollerItems(content, spacer);
114
+ const padding = getBlockPadding(content);
115
+ const viewportRect = viewport.getBoundingClientRect();
116
+ const scrollTop = viewport.scrollTop;
117
+ let contentBottom = padding.start + padding.end;
118
+ for (const item of items){
119
+ const rect = item.getBoundingClientRect();
120
+ contentBottom = Math.max(contentBottom, rect.bottom - viewportRect.top + scrollTop + padding.end);
121
+ }
122
+ return contentBottom;
123
+ }
124
+ function getMaxScrollTop(viewport) {
125
+ return Math.max(0, viewport.scrollHeight - viewport.clientHeight);
126
+ }
127
+ function getBlockPadding(element) {
128
+ const style = window.getComputedStyle(element);
129
+ return {
130
+ end: readCssPixel(style.paddingBlockEnd || style.paddingBottom),
131
+ start: readCssPixel(style.paddingBlockStart || style.paddingTop)
132
+ };
133
+ }
134
+ function getContentBlockPadding(spacer) {
135
+ const content = spacer?.parentElement;
136
+ if (!content) return {
137
+ end: 0,
138
+ start: 0
139
+ };
140
+ return getBlockPadding(content);
141
+ }
142
+ function getFlexGap(element) {
143
+ if (!element) return 0;
144
+ const style = window.getComputedStyle(element);
145
+ const gap = 'normal' === style.rowGap ? style.gap : style.rowGap;
146
+ return readCssPixel(gap);
147
+ }
148
+ function readCssPixel(value) {
149
+ if (!value) return 0;
150
+ const number = Number.parseFloat(value);
151
+ return Number.isFinite(number) ? number : 0;
152
+ }
153
+ export { getContentBlockPadding, getContentBottom, getElementScrollTop, getElementTop, getElementViewportTop, getFirstVisibleMessageItem, getFlexGap, getLastScrollAnchor, getMaxScrollTop, getMessageScrollerItems, getMessageScrollerScrollable, getMessageScrollerVisibilityState, getNewScrollAnchor, getTailSpacerHeight, getUnanchoredScrollAnchor, hasMultipleNewScrollAnchors };
@@ -0,0 +1,53 @@
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
+ useMessageScrollerVisibility: ()=>external_components_cjs_namespaceObject.useMessageScrollerVisibility,
28
+ MessageScroller: ()=>MessageScroller,
29
+ useMessageScroller: ()=>external_components_cjs_namespaceObject.useMessageScroller,
30
+ useMessageScrollerScrollable: ()=>external_components_cjs_namespaceObject.useMessageScrollerScrollable
31
+ });
32
+ const external_components_cjs_namespaceObject = require("./components.cjs");
33
+ const MessageScroller = {
34
+ Provider: external_components_cjs_namespaceObject.MessageScrollerProvider,
35
+ Root: external_components_cjs_namespaceObject.MessageScroller,
36
+ Viewport: external_components_cjs_namespaceObject.MessageScrollerViewport,
37
+ Content: external_components_cjs_namespaceObject.MessageScrollerContent,
38
+ Item: external_components_cjs_namespaceObject.MessageScrollerItem,
39
+ Button: external_components_cjs_namespaceObject.MessageScrollerButton
40
+ };
41
+ exports.MessageScroller = __webpack_exports__.MessageScroller;
42
+ exports.useMessageScroller = __webpack_exports__.useMessageScroller;
43
+ exports.useMessageScrollerScrollable = __webpack_exports__.useMessageScrollerScrollable;
44
+ exports.useMessageScrollerVisibility = __webpack_exports__.useMessageScrollerVisibility;
45
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
46
+ "MessageScroller",
47
+ "useMessageScroller",
48
+ "useMessageScrollerScrollable",
49
+ "useMessageScrollerVisibility"
50
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
51
+ Object.defineProperty(exports, '__esModule', {
52
+ value: true
53
+ });
@@ -0,0 +1,23 @@
1
+ import { MessageScrollerProvider as Provider } from './components';
2
+ export declare const MessageScroller: {
3
+ Provider: typeof Provider;
4
+ Root: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
5
+ Viewport: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
6
+ preserveScrollOnPrepend?: boolean;
7
+ } & import("react").RefAttributes<HTMLDivElement>>;
8
+ Content: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
9
+ spacerClassName?: string;
10
+ } & import("react").RefAttributes<HTMLDivElement>>;
11
+ Item: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
12
+ messageId?: string;
13
+ scrollAnchor?: boolean;
14
+ } & import("react").RefAttributes<HTMLDivElement>>;
15
+ Button: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
16
+ render?: (import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | ((props: Record<string, unknown>, state: import("./types").MessageScrollerButtonRenderState) => React.ReactElement | null)) | undefined;
17
+ } & {
18
+ behavior?: ScrollBehavior;
19
+ direction?: import("./types").MessageScrollerButtonDirection;
20
+ } & import("react").RefAttributes<HTMLButtonElement>>;
21
+ };
22
+ export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, } from './components';
23
+ export type { MessageScrollerDefaultScrollPosition, MessageScrollerScrollAlign, MessageScrollerScrollable, MessageScrollerScrollOptions, MessageScrollerVisibilityState, } from './types';
@@ -0,0 +1,10 @@
1
+ import { MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from "./components.js";
2
+ const primitive_MessageScroller = {
3
+ Provider: MessageScrollerProvider,
4
+ Root: MessageScroller,
5
+ Viewport: MessageScrollerViewport,
6
+ Content: MessageScrollerContent,
7
+ Item: MessageScrollerItem,
8
+ Button: MessageScrollerButton
9
+ };
10
+ export { primitive_MessageScroller as MessageScroller, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility };
@@ -0,0 +1,81 @@
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
+ createMessageScrollerVisibilityStore: ()=>createMessageScrollerVisibilityStore,
28
+ areVisibilityStatesEqual: ()=>areVisibilityStatesEqual,
29
+ areScrollStatesEqual: ()=>areScrollStatesEqual,
30
+ createMessageScrollerStore: ()=>createMessageScrollerStore
31
+ });
32
+ const external_types_cjs_namespaceObject = require("./types.cjs");
33
+ function createExternalStore(initialSnapshot, isEqual) {
34
+ let snapshot = initialSnapshot;
35
+ const listeners = new Set();
36
+ return {
37
+ getSnapshot: ()=>snapshot,
38
+ hasListeners: ()=>listeners.size > 0,
39
+ setSnapshot: (nextSnapshot)=>{
40
+ if (isEqual(snapshot, nextSnapshot)) return;
41
+ snapshot = nextSnapshot;
42
+ for (const listener of listeners)listener();
43
+ },
44
+ subscribe: (listener, onFirstSubscribe, onLastUnsubscribe)=>{
45
+ const wasEmpty = 0 === listeners.size;
46
+ listeners.add(listener);
47
+ if (wasEmpty) onFirstSubscribe?.();
48
+ return ()=>{
49
+ listeners.delete(listener);
50
+ if (0 === listeners.size) onLastUnsubscribe?.();
51
+ };
52
+ }
53
+ };
54
+ }
55
+ function createMessageScrollerStore(initialSnapshot, isEqual) {
56
+ return createExternalStore(initialSnapshot, isEqual);
57
+ }
58
+ function createMessageScrollerVisibilityStore() {
59
+ return createExternalStore(external_types_cjs_namespaceObject.EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE, areVisibilityStatesEqual);
60
+ }
61
+ function areScrollStatesEqual(current, next) {
62
+ return current.start === next.start && current.end === next.end;
63
+ }
64
+ function areVisibilityStatesEqual(current, next) {
65
+ if (current.currentAnchorId !== next.currentAnchorId) return false;
66
+ if (current.visibleMessageIds.length !== next.visibleMessageIds.length) return false;
67
+ return current.visibleMessageIds.every((messageId, index)=>messageId === next.visibleMessageIds[index]);
68
+ }
69
+ exports.areScrollStatesEqual = __webpack_exports__.areScrollStatesEqual;
70
+ exports.areVisibilityStatesEqual = __webpack_exports__.areVisibilityStatesEqual;
71
+ exports.createMessageScrollerStore = __webpack_exports__.createMessageScrollerStore;
72
+ exports.createMessageScrollerVisibilityStore = __webpack_exports__.createMessageScrollerVisibilityStore;
73
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
74
+ "areScrollStatesEqual",
75
+ "areVisibilityStatesEqual",
76
+ "createMessageScrollerStore",
77
+ "createMessageScrollerVisibilityStore"
78
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
79
+ Object.defineProperty(exports, '__esModule', {
80
+ value: true
81
+ });
@@ -0,0 +1,6 @@
1
+ import type { MessageScrollerScrollable, MessageScrollerStore, MessageScrollerVisibilityState, MessageScrollerVisibilityStore } from './types';
2
+ declare function createMessageScrollerStore<T>(initialSnapshot: T, isEqual: (a: T, b: T) => boolean): MessageScrollerStore<T>;
3
+ declare function createMessageScrollerVisibilityStore(): MessageScrollerVisibilityStore;
4
+ declare function areScrollStatesEqual(current: MessageScrollerScrollable, next: MessageScrollerScrollable): boolean;
5
+ declare function areVisibilityStatesEqual(current: MessageScrollerVisibilityState, next: MessageScrollerVisibilityState): boolean;
6
+ export { areScrollStatesEqual, areVisibilityStatesEqual, createMessageScrollerStore, createMessageScrollerVisibilityStore, };
@@ -0,0 +1,38 @@
1
+ import { EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE } from "./types.js";
2
+ function createExternalStore(initialSnapshot, isEqual) {
3
+ let snapshot = initialSnapshot;
4
+ const listeners = new Set();
5
+ return {
6
+ getSnapshot: ()=>snapshot,
7
+ hasListeners: ()=>listeners.size > 0,
8
+ setSnapshot: (nextSnapshot)=>{
9
+ if (isEqual(snapshot, nextSnapshot)) return;
10
+ snapshot = nextSnapshot;
11
+ for (const listener of listeners)listener();
12
+ },
13
+ subscribe: (listener, onFirstSubscribe, onLastUnsubscribe)=>{
14
+ const wasEmpty = 0 === listeners.size;
15
+ listeners.add(listener);
16
+ if (wasEmpty) onFirstSubscribe?.();
17
+ return ()=>{
18
+ listeners.delete(listener);
19
+ if (0 === listeners.size) onLastUnsubscribe?.();
20
+ };
21
+ }
22
+ };
23
+ }
24
+ function createMessageScrollerStore(initialSnapshot, isEqual) {
25
+ return createExternalStore(initialSnapshot, isEqual);
26
+ }
27
+ function createMessageScrollerVisibilityStore() {
28
+ return createExternalStore(EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE, areVisibilityStatesEqual);
29
+ }
30
+ function areScrollStatesEqual(current, next) {
31
+ return current.start === next.start && current.end === next.end;
32
+ }
33
+ function areVisibilityStatesEqual(current, next) {
34
+ if (current.currentAnchorId !== next.currentAnchorId) return false;
35
+ if (current.visibleMessageIds.length !== next.visibleMessageIds.length) return false;
36
+ return current.visibleMessageIds.every((messageId, index)=>messageId === next.visibleMessageIds[index]);
37
+ }
38
+ export { areScrollStatesEqual, areVisibilityStatesEqual, createMessageScrollerStore, createMessageScrollerVisibilityStore };