panelui-native 0.65.0 → 0.68.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/README.md +21 -1
- package/lib/module/components/area-chart/index.js +18 -1
- package/lib/module/components/area-chart/index.js.map +1 -1
- package/lib/module/components/bar-chart/index.js +18 -1
- package/lib/module/components/bar-chart/index.js.map +1 -1
- package/lib/module/components/bottom-sheet/index.js.map +1 -1
- package/lib/module/components/candlestick-chart/index.js +18 -1
- package/lib/module/components/candlestick-chart/index.js.map +1 -1
- package/lib/module/components/carousel/carousel-lifecycle.js +51 -0
- package/lib/module/components/carousel/carousel-lifecycle.js.map +1 -0
- package/lib/module/components/carousel/index.js +61 -24
- package/lib/module/components/carousel/index.js.map +1 -1
- package/lib/module/components/context-menu/context-menu-invocation.js +23 -0
- package/lib/module/components/context-menu/context-menu-invocation.js.map +1 -0
- package/lib/module/components/context-menu/index.js +78 -9
- package/lib/module/components/context-menu/index.js.map +1 -1
- package/lib/module/components/dialog/index.js.map +1 -1
- package/lib/module/components/drawer/index.js.map +1 -1
- package/lib/module/components/flow/flow-accessibility.js +18 -2
- package/lib/module/components/flow/flow-accessibility.js.map +1 -1
- package/lib/module/components/flow/flow-identifiers.js +81 -0
- package/lib/module/components/flow/flow-identifiers.js.map +1 -0
- package/lib/module/components/flow/index.js +12 -18
- package/lib/module/components/flow/index.js.map +1 -1
- package/lib/module/components/form/index.js +7 -5
- package/lib/module/components/form/index.js.map +1 -1
- package/lib/module/components/form/typed-form.js +11 -0
- package/lib/module/components/form/typed-form.js.map +1 -0
- package/lib/module/components/form/use-form.js +4 -0
- package/lib/module/components/form/use-form.js.map +1 -1
- package/lib/module/components/heatmap-chart/index.js +27 -1
- package/lib/module/components/heatmap-chart/index.js.map +1 -1
- package/lib/module/components/line-chart/index.js +18 -1
- package/lib/module/components/line-chart/index.js.map +1 -1
- package/lib/module/components/message-scroller/index.js +187 -17
- package/lib/module/components/message-scroller/index.js.map +1 -1
- package/lib/module/components/message-scroller/message-scroller-math.js +43 -0
- package/lib/module/components/message-scroller/message-scroller-math.js.map +1 -0
- package/lib/module/components/meter/index.js +250 -0
- package/lib/module/components/meter/index.js.map +1 -0
- package/lib/module/components/meter/meter-scale.js +88 -0
- package/lib/module/components/meter/meter-scale.js.map +1 -0
- package/lib/module/components/planner/index.js +714 -0
- package/lib/module/components/planner/index.js.map +1 -0
- package/lib/module/components/planner/planner-entries.js +124 -0
- package/lib/module/components/planner/planner-entries.js.map +1 -0
- package/lib/module/components/popover/index.js.map +1 -1
- package/lib/module/components/radar-chart/index.js +18 -1
- package/lib/module/components/radar-chart/index.js.map +1 -1
- package/lib/module/components/scatter-chart/index.js +18 -1
- package/lib/module/components/scatter-chart/index.js.map +1 -1
- package/lib/module/components/selection-mode/index.js +26 -31
- package/lib/module/components/selection-mode/index.js.map +1 -1
- package/lib/module/components/selection-mode/selection-mode-contracts.js +48 -0
- package/lib/module/components/selection-mode/selection-mode-contracts.js.map +1 -0
- package/lib/module/components/signature/index.js +62 -20
- package/lib/module/components/signature/index.js.map +1 -1
- package/lib/module/components/signature/signature-accessibility.js +58 -0
- package/lib/module/components/signature/signature-accessibility.js.map +1 -0
- package/lib/module/components/skeleton/index.js +45 -7
- package/lib/module/components/skeleton/index.js.map +1 -1
- package/lib/module/components/slider/index.js +22 -18
- package/lib/module/components/slider/index.js.map +1 -1
- package/lib/module/components/spinner/index.js +63 -14
- package/lib/module/components/spinner/index.js.map +1 -1
- package/lib/module/components/time-picker/index.js +46 -21
- package/lib/module/components/time-picker/index.js.map +1 -1
- package/lib/module/components/time-picker/ruler-window.js +25 -0
- package/lib/module/components/time-picker/ruler-window.js.map +1 -0
- package/lib/module/hooks/breakpoint-contract.js +29 -0
- package/lib/module/hooks/breakpoint-contract.js.map +1 -0
- package/lib/module/hooks/index.js +1 -1
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/hooks/use-breakpoint.js +46 -1
- package/lib/module/hooks/use-breakpoint.js.map +1 -1
- package/lib/module/index.js +3 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/primitives/chart-accessibility.js +68 -0
- package/lib/module/primitives/chart-accessibility.js.map +1 -0
- package/lib/module/primitives/scrim.js +94 -3
- package/lib/module/primitives/scrim.js.map +1 -1
- package/lib/typescript/src/components/area-chart/index.d.ts +2 -1
- package/lib/typescript/src/components/area-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/bar-chart/index.d.ts +2 -1
- package/lib/typescript/src/components/bar-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/bottom-sheet/index.d.ts +3 -0
- package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/src/components/candlestick-chart/index.d.ts +2 -1
- package/lib/typescript/src/components/candlestick-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/carousel/carousel-lifecycle.d.ts +23 -0
- package/lib/typescript/src/components/carousel/carousel-lifecycle.d.ts.map +1 -0
- package/lib/typescript/src/components/carousel/index.d.ts +5 -2
- package/lib/typescript/src/components/carousel/index.d.ts.map +1 -1
- package/lib/typescript/src/components/context-menu/context-menu-invocation.d.ts +20 -0
- package/lib/typescript/src/components/context-menu/context-menu-invocation.d.ts.map +1 -0
- package/lib/typescript/src/components/context-menu/index.d.ts +18 -8
- package/lib/typescript/src/components/context-menu/index.d.ts.map +1 -1
- package/lib/typescript/src/components/dialog/index.d.ts +3 -0
- package/lib/typescript/src/components/dialog/index.d.ts.map +1 -1
- package/lib/typescript/src/components/drawer/index.d.ts +3 -0
- package/lib/typescript/src/components/drawer/index.d.ts.map +1 -1
- package/lib/typescript/src/components/flow/flow-accessibility.d.ts +8 -0
- package/lib/typescript/src/components/flow/flow-accessibility.d.ts.map +1 -1
- package/lib/typescript/src/components/flow/flow-identifiers.d.ts +24 -0
- package/lib/typescript/src/components/flow/flow-identifiers.d.ts.map +1 -0
- package/lib/typescript/src/components/flow/index.d.ts +6 -5
- package/lib/typescript/src/components/flow/index.d.ts.map +1 -1
- package/lib/typescript/src/components/form/index.d.ts +18 -5
- package/lib/typescript/src/components/form/index.d.ts.map +1 -1
- package/lib/typescript/src/components/form/typed-form.d.ts +7 -0
- package/lib/typescript/src/components/form/typed-form.d.ts.map +1 -0
- package/lib/typescript/src/components/form/use-form.d.ts +4 -0
- package/lib/typescript/src/components/form/use-form.d.ts.map +1 -1
- package/lib/typescript/src/components/heatmap-chart/index.d.ts +2 -1
- package/lib/typescript/src/components/heatmap-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/line-chart/index.d.ts +2 -1
- package/lib/typescript/src/components/line-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/message-scroller/index.d.ts +30 -2
- package/lib/typescript/src/components/message-scroller/index.d.ts.map +1 -1
- package/lib/typescript/src/components/message-scroller/message-scroller-math.d.ts +18 -0
- package/lib/typescript/src/components/message-scroller/message-scroller-math.d.ts.map +1 -0
- package/lib/typescript/src/components/meter/index.d.ts +270 -0
- package/lib/typescript/src/components/meter/index.d.ts.map +1 -0
- package/lib/typescript/src/components/meter/meter-scale.d.ts +57 -0
- package/lib/typescript/src/components/meter/meter-scale.d.ts.map +1 -0
- package/lib/typescript/src/components/planner/index.d.ts +274 -0
- package/lib/typescript/src/components/planner/index.d.ts.map +1 -0
- package/lib/typescript/src/components/planner/planner-entries.d.ts +75 -0
- package/lib/typescript/src/components/planner/planner-entries.d.ts.map +1 -0
- package/lib/typescript/src/components/popover/index.d.ts +3 -0
- package/lib/typescript/src/components/popover/index.d.ts.map +1 -1
- package/lib/typescript/src/components/radar-chart/index.d.ts +4 -0
- package/lib/typescript/src/components/radar-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/scatter-chart/index.d.ts +2 -1
- package/lib/typescript/src/components/scatter-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/selection-mode/index.d.ts +6 -4
- package/lib/typescript/src/components/selection-mode/index.d.ts.map +1 -1
- package/lib/typescript/src/components/selection-mode/selection-mode-contracts.d.ts +18 -0
- package/lib/typescript/src/components/selection-mode/selection-mode-contracts.d.ts.map +1 -0
- package/lib/typescript/src/components/signature/index.d.ts +6 -0
- package/lib/typescript/src/components/signature/index.d.ts.map +1 -1
- package/lib/typescript/src/components/signature/signature-accessibility.d.ts +27 -0
- package/lib/typescript/src/components/signature/signature-accessibility.d.ts.map +1 -0
- package/lib/typescript/src/components/skeleton/index.d.ts +25 -2
- package/lib/typescript/src/components/skeleton/index.d.ts.map +1 -1
- package/lib/typescript/src/components/slider/index.d.ts.map +1 -1
- package/lib/typescript/src/components/spinner/index.d.ts +25 -2
- package/lib/typescript/src/components/spinner/index.d.ts.map +1 -1
- package/lib/typescript/src/components/time-picker/index.d.ts +5 -6
- package/lib/typescript/src/components/time-picker/index.d.ts.map +1 -1
- package/lib/typescript/src/components/time-picker/ruler-window.d.ts +12 -0
- package/lib/typescript/src/components/time-picker/ruler-window.d.ts.map +1 -0
- package/lib/typescript/src/hooks/breakpoint-contract.d.ts +6 -0
- package/lib/typescript/src/hooks/breakpoint-contract.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +1 -1
- package/lib/typescript/src/hooks/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/use-breakpoint.d.ts +22 -0
- package/lib/typescript/src/hooks/use-breakpoint.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/primitives/chart-accessibility.d.ts +33 -0
- package/lib/typescript/src/primitives/chart-accessibility.d.ts.map +1 -0
- package/lib/typescript/src/primitives/scrim.d.ts +5 -3
- package/lib/typescript/src/primitives/scrim.d.ts.map +1 -1
- package/lib/typescript/types/form-api.type-test.d.ts +2 -0
- package/lib/typescript/types/form-api.type-test.d.ts.map +1 -0
- package/package.json +34 -5
- package/src/components/area-chart/index.tsx +27 -2
- package/src/components/bar-chart/index.tsx +27 -2
- package/src/components/bottom-sheet/index.tsx +3 -0
- package/src/components/candlestick-chart/index.tsx +30 -2
- package/src/components/carousel/carousel-lifecycle.ts +74 -0
- package/src/components/carousel/index.tsx +80 -25
- package/src/components/context-menu/context-menu-invocation.ts +44 -0
- package/src/components/context-menu/index.tsx +113 -13
- package/src/components/dialog/index.tsx +3 -0
- package/src/components/drawer/index.tsx +3 -0
- package/src/components/flow/flow-accessibility.ts +16 -2
- package/src/components/flow/flow-identifiers.ts +98 -0
- package/src/components/flow/index.tsx +29 -19
- package/src/components/form/index.tsx +32 -5
- package/src/components/form/typed-form.ts +13 -0
- package/src/components/form/use-form.ts +9 -0
- package/src/components/heatmap-chart/index.tsx +49 -3
- package/src/components/line-chart/index.tsx +27 -2
- package/src/components/message-scroller/index.tsx +273 -13
- package/src/components/message-scroller/message-scroller-math.ts +62 -0
- package/src/components/meter/index.tsx +318 -0
- package/src/components/meter/meter-scale.ts +109 -0
- package/src/components/planner/index.tsx +886 -0
- package/src/components/planner/planner-entries.ts +146 -0
- package/src/components/popover/index.tsx +3 -0
- package/src/components/radar-chart/index.tsx +24 -0
- package/src/components/scatter-chart/index.tsx +27 -2
- package/src/components/selection-mode/index.tsx +37 -30
- package/src/components/selection-mode/selection-mode-contracts.ts +53 -0
- package/src/components/signature/index.tsx +107 -20
- package/src/components/signature/signature-accessibility.ts +67 -0
- package/src/components/skeleton/index.tsx +59 -5
- package/src/components/slider/index.tsx +28 -18
- package/src/components/spinner/index.tsx +80 -13
- package/src/components/time-picker/index.tsx +57 -29
- package/src/components/time-picker/ruler-window.ts +24 -0
- package/src/hooks/breakpoint-contract.ts +31 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/use-breakpoint.ts +61 -10
- package/src/index.ts +32 -0
- package/src/primitives/chart-accessibility.ts +102 -0
- package/src/primitives/scrim.tsx +127 -7
|
@@ -41,15 +41,14 @@ import { ChevronDownIcon } from "../../icons/index.js";
|
|
|
41
41
|
import { AnimatedPressable } from "../../primitives/animated-pressable.js";
|
|
42
42
|
import { cn } from "../../utils/cn.js";
|
|
43
43
|
import { textChildren } from "../../primitives/text.js";
|
|
44
|
+
import { distanceFromMessageScrollerTarget, initialMessageScrollerIndex, isMessageScrollerTargetVisible, messageScrollerAnchorAt, messageScrollerIndex, MESSAGE_SCROLLER_EDGE_THRESHOLD } from "./message-scroller-math.js";
|
|
44
45
|
|
|
45
|
-
/** Within this many pixels of the bottom still counts as being at the bottom. */
|
|
46
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
47
|
-
const END_THRESHOLD = 24;
|
|
48
46
|
/**
|
|
49
47
|
* How much of the previous turn is left showing above an anchored one. Scrolling
|
|
50
48
|
* a turn flush to the top reads as content having been cut off; a sliver of the
|
|
51
49
|
* message before it says "this is where you are", not "this is the beginning".
|
|
52
50
|
*/
|
|
51
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
53
52
|
const ANCHOR_PEEK = 24;
|
|
54
53
|
const MessageScrollerContext = /*#__PURE__*/createContext(null);
|
|
55
54
|
function useScroller(component) {
|
|
@@ -99,11 +98,18 @@ function MessageScrollerRoot({
|
|
|
99
98
|
}) {
|
|
100
99
|
const scrollRef = useAnimatedRef();
|
|
101
100
|
const atEnd = useSharedValue(1);
|
|
101
|
+
const awayFromEdge = MESSAGE_SCROLLER_EDGE_THRESHOLD + 1;
|
|
102
|
+
const distanceFromStart = useSharedValue(defaultScrollPosition === 'start' ? 0 : awayFromEdge);
|
|
103
|
+
const distanceFromEnd = useSharedValue(defaultScrollPosition === 'end' ? 0 : awayFromEdge);
|
|
102
104
|
const [atEndJS, setAtEndJS] = useState(true);
|
|
103
105
|
const [currentAnchorId, setCurrentAnchorId] = useState(null);
|
|
104
106
|
const itemY = useRef(new Map());
|
|
105
107
|
const anchors = useRef([]);
|
|
106
108
|
const following = useRef(autoScroll);
|
|
109
|
+
const driver = useRef(null);
|
|
110
|
+
const registerDriver = useCallback(next => {
|
|
111
|
+
driver.current = next;
|
|
112
|
+
}, []);
|
|
107
113
|
const registerItem = useCallback((id, y, anchor) => {
|
|
108
114
|
itemY.current.set(id, y);
|
|
109
115
|
const list = anchors.current;
|
|
@@ -116,29 +122,37 @@ function MessageScrollerRoot({
|
|
|
116
122
|
}, []);
|
|
117
123
|
const scrollToEnd = useCallback((animated = true) => {
|
|
118
124
|
following.current = true;
|
|
119
|
-
scrollRef.current?.scrollToEnd({
|
|
125
|
+
if (driver.current) driver.current.scrollToEnd(animated);else scrollRef.current?.scrollToEnd({
|
|
120
126
|
animated
|
|
121
127
|
});
|
|
122
128
|
}, [scrollRef]);
|
|
123
129
|
const scrollToStart = useCallback((animated = true) => {
|
|
124
130
|
following.current = false;
|
|
125
|
-
scrollRef.current?.scrollTo({
|
|
131
|
+
if (driver.current) driver.current.scrollToStart(animated);else scrollRef.current?.scrollTo({
|
|
126
132
|
y: 0,
|
|
127
133
|
animated
|
|
128
134
|
});
|
|
129
135
|
}, [scrollRef]);
|
|
130
136
|
const scrollToMessage = useCallback((id, animated = true) => {
|
|
137
|
+
if (driver.current) {
|
|
138
|
+
if (driver.current.scrollToMessage(id, animated)) following.current = false;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
131
141
|
const y = itemY.current.get(id);
|
|
132
|
-
if (y
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
142
|
+
if (y !== undefined) {
|
|
143
|
+
following.current = false;
|
|
144
|
+
scrollRef.current?.scrollTo({
|
|
145
|
+
y: Math.max(0, y - ANCHOR_PEEK),
|
|
146
|
+
animated
|
|
147
|
+
});
|
|
148
|
+
}
|
|
138
149
|
}, [scrollRef]);
|
|
139
150
|
const context = useMemo(() => ({
|
|
140
151
|
scrollRef,
|
|
152
|
+
registerDriver,
|
|
141
153
|
atEnd,
|
|
154
|
+
distanceFromStart,
|
|
155
|
+
distanceFromEnd,
|
|
142
156
|
atEndJS,
|
|
143
157
|
setAtEndJS,
|
|
144
158
|
autoScroll,
|
|
@@ -154,7 +168,7 @@ function MessageScrollerRoot({
|
|
|
154
168
|
scrollToMessage,
|
|
155
169
|
currentAnchorId,
|
|
156
170
|
setCurrentAnchorId
|
|
157
|
-
}), [scrollRef, atEnd, atEndJS, autoScroll, preserveScrollOnPrepend, defaultScrollPosition, registerItem, unregisterItem, scrollToEnd, scrollToStart, scrollToMessage, currentAnchorId]);
|
|
171
|
+
}), [scrollRef, registerDriver, atEnd, distanceFromStart, distanceFromEnd, atEndJS, autoScroll, preserveScrollOnPrepend, defaultScrollPosition, registerItem, unregisterItem, scrollToEnd, scrollToStart, scrollToMessage, currentAnchorId]);
|
|
158
172
|
return /*#__PURE__*/_jsx(MessageScrollerContext.Provider, {
|
|
159
173
|
value: context,
|
|
160
174
|
children: /*#__PURE__*/_jsx(View, {
|
|
@@ -185,6 +199,8 @@ function MessageScrollerViewport({
|
|
|
185
199
|
const {
|
|
186
200
|
scrollRef,
|
|
187
201
|
atEnd,
|
|
202
|
+
distanceFromStart,
|
|
203
|
+
distanceFromEnd,
|
|
188
204
|
setAtEndJS,
|
|
189
205
|
autoScroll,
|
|
190
206
|
preserveScrollOnPrepend,
|
|
@@ -225,8 +241,9 @@ function MessageScrollerViewport({
|
|
|
225
241
|
layoutMeasurement
|
|
226
242
|
} = event;
|
|
227
243
|
offsetY.value = contentOffset.y;
|
|
228
|
-
|
|
229
|
-
|
|
244
|
+
distanceFromStart.value = distanceFromMessageScrollerTarget('start', contentOffset.y, contentSize.height, layoutMeasurement.height);
|
|
245
|
+
distanceFromEnd.value = distanceFromMessageScrollerTarget('end', contentOffset.y, contentSize.height, layoutMeasurement.height);
|
|
246
|
+
const next = isMessageScrollerTargetVisible(distanceFromEnd.value) ? 0 : 1;
|
|
230
247
|
if (next !== atEnd.value) {
|
|
231
248
|
atEnd.value = next;
|
|
232
249
|
runOnJS(publishAtEnd)(next === 1);
|
|
@@ -317,6 +334,157 @@ function MessageScrollerViewport({
|
|
|
317
334
|
});
|
|
318
335
|
}
|
|
319
336
|
MessageScrollerViewport.displayName = 'MessageScroller.Viewport';
|
|
337
|
+
/**
|
|
338
|
+
* The real virtualized transcript path. Only its render window mounts; native
|
|
339
|
+
* visible-content maintenance keeps prepends still without measuring offscreen
|
|
340
|
+
* rows in JavaScript.
|
|
341
|
+
*/
|
|
342
|
+
function MessageScrollerList({
|
|
343
|
+
className,
|
|
344
|
+
contentContainerClassName,
|
|
345
|
+
data,
|
|
346
|
+
renderItem,
|
|
347
|
+
initialNumToRender = 12,
|
|
348
|
+
maxToRenderPerBatch = 8,
|
|
349
|
+
windowSize = 7,
|
|
350
|
+
...props
|
|
351
|
+
}) {
|
|
352
|
+
const {
|
|
353
|
+
atEnd,
|
|
354
|
+
distanceFromStart,
|
|
355
|
+
distanceFromEnd,
|
|
356
|
+
setAtEndJS,
|
|
357
|
+
autoScroll,
|
|
358
|
+
preserveScrollOnPrepend,
|
|
359
|
+
defaultScrollPosition,
|
|
360
|
+
following,
|
|
361
|
+
registerDriver,
|
|
362
|
+
setCurrentAnchorId
|
|
363
|
+
} = useScroller('MessageScroller.List');
|
|
364
|
+
const listRef = useRef(null);
|
|
365
|
+
const items = useRef(data);
|
|
366
|
+
items.current = data;
|
|
367
|
+
const opened = useRef(false);
|
|
368
|
+
const firstVisibleIndex = useRef(null);
|
|
369
|
+
const publishAtEnd = useCallback(next => {
|
|
370
|
+
following.current = autoScroll && next;
|
|
371
|
+
setAtEndJS(next);
|
|
372
|
+
}, [autoScroll, following, setAtEndJS]);
|
|
373
|
+
const scrollHandler = useAnimatedScrollHandler({
|
|
374
|
+
onScroll: event => {
|
|
375
|
+
const {
|
|
376
|
+
contentOffset,
|
|
377
|
+
contentSize,
|
|
378
|
+
layoutMeasurement
|
|
379
|
+
} = event;
|
|
380
|
+
distanceFromStart.value = distanceFromMessageScrollerTarget('start', contentOffset.y, contentSize.height, layoutMeasurement.height);
|
|
381
|
+
distanceFromEnd.value = distanceFromMessageScrollerTarget('end', contentOffset.y, contentSize.height, layoutMeasurement.height);
|
|
382
|
+
const next = isMessageScrollerTargetVisible(distanceFromEnd.value) ? 0 : 1;
|
|
383
|
+
if (next !== atEnd.value) {
|
|
384
|
+
atEnd.value = next;
|
|
385
|
+
runOnJS(publishAtEnd)(next === 1);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
const scrollToIndex = useCallback((index, animated) => {
|
|
390
|
+
listRef.current?.scrollToIndex({
|
|
391
|
+
index,
|
|
392
|
+
viewOffset: ANCHOR_PEEK,
|
|
393
|
+
animated
|
|
394
|
+
});
|
|
395
|
+
}, []);
|
|
396
|
+
const setAnchorAtIndex = useCallback(index => setCurrentAnchorId(messageScrollerAnchorAt(items.current, index)), [setCurrentAnchorId]);
|
|
397
|
+
useEffect(() => {
|
|
398
|
+
registerDriver({
|
|
399
|
+
scrollToEnd: animated => {
|
|
400
|
+
listRef.current?.scrollToEnd({
|
|
401
|
+
animated
|
|
402
|
+
});
|
|
403
|
+
setAnchorAtIndex(items.current.length - 1);
|
|
404
|
+
},
|
|
405
|
+
scrollToStart: animated => {
|
|
406
|
+
listRef.current?.scrollToOffset({
|
|
407
|
+
offset: 0,
|
|
408
|
+
animated
|
|
409
|
+
});
|
|
410
|
+
setAnchorAtIndex(0);
|
|
411
|
+
},
|
|
412
|
+
scrollToMessage: (id, animated) => {
|
|
413
|
+
const index = messageScrollerIndex(items.current, id);
|
|
414
|
+
if (index === undefined) return false;
|
|
415
|
+
scrollToIndex(index, animated);
|
|
416
|
+
setAnchorAtIndex(index);
|
|
417
|
+
return true;
|
|
418
|
+
}
|
|
419
|
+
});
|
|
420
|
+
return () => registerDriver(null);
|
|
421
|
+
}, [registerDriver, scrollToIndex, setAnchorAtIndex]);
|
|
422
|
+
useEffect(() => {
|
|
423
|
+
following.current = autoScroll && atEnd.value === 1;
|
|
424
|
+
}, [atEnd, autoScroll, following]);
|
|
425
|
+
const onContentSizeChange = () => {
|
|
426
|
+
if (!opened.current) {
|
|
427
|
+
opened.current = true;
|
|
428
|
+
const index = initialMessageScrollerIndex(data, defaultScrollPosition);
|
|
429
|
+
const target = index ?? data.length - 1;
|
|
430
|
+
if (index === undefined) listRef.current?.scrollToEnd({
|
|
431
|
+
animated: false
|
|
432
|
+
});else if (index > 0) scrollToIndex(index, false);
|
|
433
|
+
setAnchorAtIndex(target);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
if (following.current) listRef.current?.scrollToEnd({
|
|
437
|
+
animated: true
|
|
438
|
+
});
|
|
439
|
+
};
|
|
440
|
+
const onViewableItemsChanged = useRef(({
|
|
441
|
+
viewableItems
|
|
442
|
+
}) => {
|
|
443
|
+
const first = viewableItems.reduce((best, token) => token.index !== null && token.index < best ? token.index : best, Infinity);
|
|
444
|
+
firstVisibleIndex.current = Number.isFinite(first) ? first : null;
|
|
445
|
+
}).current;
|
|
446
|
+
const settleAnchor = () => {
|
|
447
|
+
if (firstVisibleIndex.current !== null) {
|
|
448
|
+
setCurrentAnchorId(messageScrollerAnchorAt(items.current, firstVisibleIndex.current));
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
return /*#__PURE__*/_jsx(Animated.FlatList, {
|
|
452
|
+
ref: listRef,
|
|
453
|
+
data: data,
|
|
454
|
+
renderItem: renderItem,
|
|
455
|
+
keyExtractor: item => item.messageId,
|
|
456
|
+
accessibilityRole: "list",
|
|
457
|
+
accessibilityLabel: "Messages",
|
|
458
|
+
accessibilityLiveRegion: "polite",
|
|
459
|
+
scrollEventThrottle: 16,
|
|
460
|
+
showsVerticalScrollIndicator: false,
|
|
461
|
+
initialNumToRender: initialNumToRender,
|
|
462
|
+
maxToRenderPerBatch: maxToRenderPerBatch,
|
|
463
|
+
windowSize: windowSize,
|
|
464
|
+
maintainVisibleContentPosition: preserveScrollOnPrepend ? {
|
|
465
|
+
minIndexForVisible: 0
|
|
466
|
+
} : undefined,
|
|
467
|
+
className: cn('flex-1', className),
|
|
468
|
+
contentContainerClassName: cn('gap-3 p-4 pb-16', contentContainerClassName),
|
|
469
|
+
...props,
|
|
470
|
+
onScroll: scrollHandler,
|
|
471
|
+
onContentSizeChange: onContentSizeChange,
|
|
472
|
+
onViewableItemsChanged: onViewableItemsChanged,
|
|
473
|
+
onScrollEndDrag: settleAnchor,
|
|
474
|
+
onMomentumScrollEnd: settleAnchor,
|
|
475
|
+
onScrollToIndexFailed: ({
|
|
476
|
+
index,
|
|
477
|
+
averageItemLength
|
|
478
|
+
}) => {
|
|
479
|
+
listRef.current?.scrollToOffset({
|
|
480
|
+
offset: index * averageItemLength,
|
|
481
|
+
animated: false
|
|
482
|
+
});
|
|
483
|
+
setTimeout(() => scrollToIndex(index, false), 0);
|
|
484
|
+
}
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
MessageScrollerList.displayName = 'MessageScroller.List';
|
|
320
488
|
|
|
321
489
|
/**
|
|
322
490
|
* How far the transcript shifted, measured on the message closest to the top
|
|
@@ -393,14 +561,15 @@ function MessageScrollerButton({
|
|
|
393
561
|
...props
|
|
394
562
|
}) {
|
|
395
563
|
const {
|
|
396
|
-
|
|
564
|
+
distanceFromStart,
|
|
565
|
+
distanceFromEnd,
|
|
397
566
|
scrollToEnd,
|
|
398
567
|
scrollToStart
|
|
399
568
|
} = useScroller('MessageScroller.Button');
|
|
400
569
|
const tint = useCSSVariable('--color-foreground');
|
|
401
|
-
|
|
570
|
+
const targetDistance = target === 'end' ? distanceFromEnd : distanceFromStart;
|
|
402
571
|
// Shown when away from the edge the button points at.
|
|
403
|
-
const shown = useDerivedValue(() => withTiming(
|
|
572
|
+
const shown = useDerivedValue(() => withTiming(isMessageScrollerTargetVisible(targetDistance.value) ? 1 : 0, {
|
|
404
573
|
duration: 160
|
|
405
574
|
}));
|
|
406
575
|
const style = useAnimatedStyle(() => ({
|
|
@@ -445,6 +614,7 @@ function MessageScrollerButton({
|
|
|
445
614
|
MessageScrollerButton.displayName = 'MessageScroller.Button';
|
|
446
615
|
export const MessageScroller = Object.assign(MessageScrollerRoot, {
|
|
447
616
|
Viewport: MessageScrollerViewport,
|
|
617
|
+
List: MessageScrollerList,
|
|
448
618
|
Content: MessageScrollerContent,
|
|
449
619
|
Item: MessageScrollerItem,
|
|
450
620
|
Button: MessageScrollerButton
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","View","Animated","runOnJS","useAnimatedRef","useAnimatedScrollHandler","useAnimatedStyle","useDerivedValue","useSharedValue","withTiming","useCSSVariable","ChevronDownIcon","AnimatedPressable","cn","textChildren","jsx","_jsx","END_THRESHOLD","ANCHOR_PEEK","MessageScrollerContext","useScroller","component","context","Error","useMessageScroller","scrollToEnd","scrollToStart","scrollToMessage","useMessageScrollerVisibility","currentAnchorId","atEndJS","atEnd","MessageScrollerRoot","className","autoScroll","preserveScrollOnPrepend","defaultScrollPosition","children","props","scrollRef","setAtEndJS","setCurrentAnchorId","itemY","Map","anchors","following","registerItem","id","y","anchor","current","set","list","includes","push","filter","a","unregisterItem","delete","animated","scrollTo","get","undefined","Math","max","Provider","value","displayName","MessageScrollerViewport","contentHeight","previousY","opened","offsetY","publishAtEnd","next","scrollHandler","onScroll","event","contentOffset","contentSize","layoutMeasurement","distance","height","settleAnchor","bestY","Infinity","onContentSizeChange","_width","previousHeight","openAt","grew","shift","topmostShift","position","last","length","ScrollView","ref","accessibilityRole","accessibilityLabel","scrollEventThrottle","showsVerticalScrollIndicator","onScrollEndDrag","onMomentumScrollEnd","before","after","now","MessageScrollerContent","accessibilityLiveRegion","MessageScrollerItem","messageId","scrollAnchor","onLayout","nativeEvent","layout","MessageScrollerButton","target","tint","shown","duration","style","opacity","transform","translateY","scale","interactive","setInteractive","pointerEvents","accessibilityElementsHidden","importantForAccessibility","onPress","size","color","rotate","MessageScroller","Object","assign","Viewport","Content","Item","Button"],"sourceRoot":"../../../../src","sources":["components/message-scroller/index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SACEA,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QAEH,OAAO;AACd,SAASC,IAAI,QAAgD,cAAc;AAC3E,OAAOC,QAAQ,IACbC,OAAO,EACPC,cAAc,EACdC,wBAAwB,EACxBC,gBAAgB,EAChBC,eAAe,EACfC,cAAc,EACdC,UAAU,QAEL,yBAAyB;AAChC,SAASC,cAAc,QAAQ,SAAS;AACxC,SAASC,eAAe,QAAQ,sBAAa;AAC7C,SAASC,iBAAiB,QAAQ,wCAAqC;AACvE,SAASC,EAAE,QAAQ,mBAAgB;AACnC,SAASC,YAAY,QAAQ,0BAAuB;;AAEpD;AAAA,SAAAC,GAAA,IAAAC,IAAA;AACA,MAAMC,aAAa,GAAG,EAAE;AACxB;AACA;AACA;AACA;AACA;AACA,MAAMC,WAAW,GAAG,EAAE;AA2BtB,MAAMC,sBAAsB,gBAAGzB,aAAa,CAAqC,IAAI,CAAC;AAEtF,SAAS0B,WAAWA,CAACC,SAAiB,EAA+B;EACnE,MAAMC,OAAO,GAAG1B,UAAU,CAACuB,sBAAsB,CAAC;EAClD,IAAI,CAACG,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,GAAGF,SAAS,0CAA0C,CAAC;EACzE;EACA,OAAOC,OAAO;AAChB;;AAEA;AACA,OAAO,SAASE,kBAAkBA,CAAA,EAAG;EACnC,MAAM;IAAEC,WAAW;IAAEC,aAAa;IAAEC;EAAgB,CAAC,GAAGP,WAAW,CAAC,oBAAoB,CAAC;EACzF,OAAO;IAAEK,WAAW;IAAEC,aAAa;IAAEC;EAAgB,CAAC;AACxD;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,4BAA4BA,CAAA,EAAG;EAC7C,MAAM;IAAEC,eAAe;IAAEC;EAAQ,CAAC,GAAGV,WAAW,CAAC,8BAA8B,CAAC;EAChF,OAAO;IAAES,eAAe;IAAEE,KAAK,EAAED;EAAQ,CAAC;AAC5C;AAwBA,SAASE,mBAAmBA,CAAC;EAC3BC,SAAS;EACTC,UAAU,GAAG,KAAK;EAClBC,uBAAuB,GAAG,IAAI;EAC9BC,qBAAqB,GAAG,KAAK;EAC7BC,QAAQ;EACR,GAAGC;AACiB,CAAC,EAAE;EACvB,MAAMC,SAAS,GAAGnC,cAAc,CAAsB,CAAC;EACvD,MAAM2B,KAAK,GAAGvB,cAAc,CAAC,CAAC,CAAC;EAC/B,MAAM,CAACsB,OAAO,EAAEU,UAAU,CAAC,GAAGxC,QAAQ,CAAC,IAAI,CAAC;EAC5C,MAAM,CAAC6B,eAAe,EAAEY,kBAAkB,CAAC,GAAGzC,QAAQ,CAAgB,IAAI,CAAC;EAE3E,MAAM0C,KAAK,GAAG3C,MAAM,CAAC,IAAI4C,GAAG,CAAiB,CAAC,CAAC;EAC/C,MAAMC,OAAO,GAAG7C,MAAM,CAAW,EAAE,CAAC;EACpC,MAAM8C,SAAS,GAAG9C,MAAM,CAACmC,UAAU,CAAC;EAEpC,MAAMY,YAAY,GAAGnD,WAAW,CAAC,CAACoD,EAAU,EAAEC,CAAS,EAAEC,MAAe,KAAK;IAC3EP,KAAK,CAACQ,OAAO,CAACC,GAAG,CAACJ,EAAE,EAAEC,CAAC,CAAC;IACxB,MAAMI,IAAI,GAAGR,OAAO,CAACM,OAAO;IAC5B,IAAID,MAAM,IAAI,CAACG,IAAI,CAACC,QAAQ,CAACN,EAAE,CAAC,EAAEK,IAAI,CAACE,IAAI,CAACP,EAAE,CAAC;IAC/C,IAAI,CAACE,MAAM,IAAIG,IAAI,CAACC,QAAQ,CAACN,EAAE,CAAC,EAAEH,OAAO,CAACM,OAAO,GAAGE,IAAI,CAACG,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKT,EAAE,CAAC;EAClF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMU,cAAc,GAAG9D,WAAW,CAAEoD,EAAU,IAAK;IACjDL,KAAK,CAACQ,OAAO,CAACQ,MAAM,CAACX,EAAE,CAAC;IACxBH,OAAO,CAACM,OAAO,GAAGN,OAAO,CAACM,OAAO,CAACK,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKT,EAAE,CAAC;EAC3D,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMtB,WAAW,GAAG9B,WAAW,CAC7B,CAACgE,QAAQ,GAAG,IAAI,KAAK;IACnBd,SAAS,CAACK,OAAO,GAAG,IAAI;IACxBX,SAAS,CAACW,OAAO,EAAEzB,WAAW,CAAC;MAAEkC;IAAS,CAAC,CAAC;EAC9C,CAAC,EACD,CAACpB,SAAS,CACZ,CAAC;EAED,MAAMb,aAAa,GAAG/B,WAAW,CAC/B,CAACgE,QAAQ,GAAG,IAAI,KAAK;IACnBd,SAAS,CAACK,OAAO,GAAG,KAAK;IACzBX,SAAS,CAACW,OAAO,EAAEU,QAAQ,CAAC;MAAEZ,CAAC,EAAE,CAAC;MAAEW;IAAS,CAAC,CAAC;EACjD,CAAC,EACD,CAACpB,SAAS,CACZ,CAAC;EAED,MAAMZ,eAAe,GAAGhC,WAAW,CACjC,CAACoD,EAAU,EAAEY,QAAQ,GAAG,IAAI,KAAK;IAC/B,MAAMX,CAAC,GAAGN,KAAK,CAACQ,OAAO,CAACW,GAAG,CAACd,EAAE,CAAC;IAC/B,IAAIC,CAAC,KAAKc,SAAS,EAAE;IACrBjB,SAAS,CAACK,OAAO,GAAG,KAAK;IACzBX,SAAS,CAACW,OAAO,EAAEU,QAAQ,CAAC;MAAEZ,CAAC,EAAEe,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEhB,CAAC,GAAG9B,WAAW,CAAC;MAAEyC;IAAS,CAAC,CAAC;EAC5E,CAAC,EACD,CAACpB,SAAS,CACZ,CAAC;EAED,MAAMjB,OAAO,GAAGxB,OAAO,CACrB,OAAO;IACLyC,SAAS;IACTR,KAAK;IACLD,OAAO;IACPU,UAAU;IACVN,UAAU;IACVC,uBAAuB;IACvBC,qBAAqB;IACrBM,KAAK;IACLE,OAAO;IACPC,SAAS;IACTC,YAAY;IACZW,cAAc;IACdhC,WAAW;IACXC,aAAa;IACbC,eAAe;IACfE,eAAe;IACfY;EACF,CAAC,CAAC,EACF,CACEF,SAAS,EACTR,KAAK,EACLD,OAAO,EACPI,UAAU,EACVC,uBAAuB,EACvBC,qBAAqB,EACrBU,YAAY,EACZW,cAAc,EACdhC,WAAW,EACXC,aAAa,EACbC,eAAe,EACfE,eAAe,CAEnB,CAAC;EAED,oBACEb,IAAA,CAACG,sBAAsB,CAAC8C,QAAQ;IAACC,KAAK,EAAE5C,OAAQ;IAAAe,QAAA,eAC9CrB,IAAA,CAACf,IAAI;MAACgC,SAAS,EAAEpB,EAAE,CAAC,0BAA0B,EAAEoB,SAAS,CAAE;MAAA,GAAKK,KAAK;MAAAD,QAAA,EAClEvB,YAAY,CAACuB,QAAQ;IAAC,CACnB;EAAC,CACwB,CAAC;AAEtC;AACAL,mBAAmB,CAACmC,WAAW,GAAG,iBAAiB;;AAEnD;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA,SAASC,uBAAuBA,CAAC;EAC/BnC,SAAS;EACTI,QAAQ;EACR,GAAGC;AACyB,CAAC,EAAE;EAC/B,MAAM;IACJC,SAAS;IACTR,KAAK;IACLS,UAAU;IACVN,UAAU;IACVC,uBAAuB;IACvBC,qBAAqB;IACrBM,KAAK;IACLE,OAAO;IACPC,SAAS;IACTpB,WAAW;IACXE,eAAe;IACfc;EACF,CAAC,GAAGrB,WAAW,CAAC,0BAA0B,CAAC;EAE3C,MAAMiD,aAAa,GAAGtE,MAAM,CAAC,CAAC,CAAC;EAC/B,MAAMuE,SAAS,GAAGvE,MAAM,CAAC,IAAI4C,GAAG,CAAiB,CAAC,CAAC;EACnD,MAAM4B,MAAM,GAAGxE,MAAM,CAAC,KAAK,CAAC;EAC5B;AACF;AACA;AACA;AACA;AACA;EACE,MAAMyE,OAAO,GAAGhE,cAAc,CAAC,CAAC,CAAC;;EAEjC;AACF;AACA;AACA;AACA;AACA;EACE,MAAMiE,YAAY,GAAG9E,WAAW,CAC7B+E,IAAa,IAAK;IACjB7B,SAAS,CAACK,OAAO,GAAGhB,UAAU,IAAIwC,IAAI;IACtClC,UAAU,CAACkC,IAAI,CAAC;EAClB,CAAC,EACD,CAACxC,UAAU,EAAEW,SAAS,EAAEL,UAAU,CACpC,CAAC;EAED,MAAMmC,aAAa,GAAGtE,wBAAwB,CAAC;IAC7CuE,QAAQ,EAAGC,KAAK,IAAK;MACnB,MAAM;QAAEC,aAAa;QAAEC,WAAW;QAAEC;MAAkB,CAAC,GAAGH,KAAK;MAC/DL,OAAO,CAACN,KAAK,GAAGY,aAAa,CAAC9B,CAAC;MAE/B,MAAMiC,QAAQ,GAAGF,WAAW,CAACG,MAAM,GAAGF,iBAAiB,CAACE,MAAM,GAAGJ,aAAa,CAAC9B,CAAC;MAChF,MAAM0B,IAAI,GAAGO,QAAQ,IAAIhE,aAAa,GAAG,CAAC,GAAG,CAAC;MAC9C,IAAIyD,IAAI,KAAK3C,KAAK,CAACmC,KAAK,EAAE;QACxBnC,KAAK,CAACmC,KAAK,GAAGQ,IAAI;QAClBvE,OAAO,CAACsE,YAAY,CAAC,CAACC,IAAI,KAAK,CAAC,CAAC;MACnC;IACF;EACF,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;EACE,MAAMS,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAIjC,OAAsB,GAAG,IAAI;IACjC,IAAIkC,KAAK,GAAG,CAACC,QAAQ;IACrB,KAAK,MAAMtC,EAAE,IAAIH,OAAO,CAACM,OAAO,EAAE;MAChC,MAAMF,CAAC,GAAGN,KAAK,CAACQ,OAAO,CAACW,GAAG,CAACd,EAAE,CAAC;MAC/B,IAAIC,CAAC,KAAKc,SAAS,EAAE;MACrB,IAAId,CAAC,IAAIwB,OAAO,CAACN,KAAK,GAAGhD,WAAW,IAAI8B,CAAC,GAAGoC,KAAK,EAAE;QACjDA,KAAK,GAAGpC,CAAC;QACTE,OAAO,GAAGH,EAAE;MACd;IACF;IACAN,kBAAkB,CAACS,OAAO,CAAC;EAC7B,CAAC;EAED,MAAMoC,mBAAmB,GAAGA,CAACC,MAAc,EAAEL,MAAc,KAAK;IAC9D,MAAMM,cAAc,GAAGnB,aAAa,CAACnB,OAAO;IAC5CmB,aAAa,CAACnB,OAAO,GAAGgC,MAAM;;IAE9B;IACA,IAAI,CAACX,MAAM,CAACrB,OAAO,EAAE;MACnBqB,MAAM,CAACrB,OAAO,GAAG,IAAI;MACrBoB,SAAS,CAACpB,OAAO,GAAG,IAAIP,GAAG,CAACD,KAAK,CAACQ,OAAO,CAAC;MAC1CuC,MAAM,CAACrD,qBAAqB,CAAC;MAC7B;IACF;IAEA,MAAMsD,IAAI,GAAGR,MAAM,GAAGM,cAAc;IAEpC,IAAIE,IAAI,GAAG,CAAC,EAAE;MACZ,IAAI7C,SAAS,CAACK,OAAO,EAAE;QACrBzB,WAAW,CAAC,IAAI,CAAC;MACnB,CAAC,MAAM,IAAIU,uBAAuB,EAAE;QAClC;QACA;QACA;QACA;QACA;QACA,MAAMwD,KAAK,GAAGC,YAAY,CAACtB,SAAS,CAACpB,OAAO,EAAER,KAAK,CAACQ,OAAO,CAAC;QAC5D,IAAIyC,KAAK,GAAG,GAAG,EAAE;UACfpD,SAAS,CAACW,OAAO,EAAEU,QAAQ,CAAC;YAAEZ,CAAC,EAAEwB,OAAO,CAACN,KAAK,GAAGyB,KAAK;YAAEhC,QAAQ,EAAE;UAAM,CAAC,CAAC;QAC5E;MACF;IACF;IAEAW,SAAS,CAACpB,OAAO,GAAG,IAAIP,GAAG,CAACD,KAAK,CAACQ,OAAO,CAAC;IAC1CiC,YAAY,CAAC,CAAC;EAChB,CAAC;EAED,MAAMM,MAAM,GAAII,QAAiC,IAAK;IACpD,IAAIA,QAAQ,KAAK,OAAO,EAAE;IAC1B,IAAIA,QAAQ,KAAK,KAAK,EAAE;MACtBpE,WAAW,CAAC,KAAK,CAAC;MAClB;IACF;IACA,MAAMqE,IAAI,GAAGlD,OAAO,CAACM,OAAO,CAACN,OAAO,CAACM,OAAO,CAAC6C,MAAM,GAAG,CAAC,CAAC;IACxD,IAAID,IAAI,EAAEnE,eAAe,CAACmE,IAAI,EAAE,KAAK,CAAC,CAAC,KAClCrE,WAAW,CAAC,KAAK,CAAC;EACzB,CAAC;EAED5B,SAAS,CAAC,MAAM;IACdgD,SAAS,CAACK,OAAO,GAAGhB,UAAU,IAAIH,KAAK,CAACmC,KAAK,KAAK,CAAC;EACrD,CAAC,EAAE,CAAChC,UAAU,EAAEW,SAAS,EAAEd,KAAK,CAAC,CAAC;EAElC,oBACEf,IAAA,CAACd,QAAQ,CAAC8F,UAAU;IAClBC,GAAG,EAAE1D,SAAU;IACf2D,iBAAiB,EAAC,MAAM;IACxBC,kBAAkB,EAAC,UAAU;IAC7BC,mBAAmB,EAAE,EAAG;IACxBC,4BAA4B,EAAE,KAAM;IACpCpE,SAAS,EAAEpB,EAAE,CAAC,QAAQ,EAAEoB,SAAS,CAAE;IAAA,GAC/BK,KAAK;IACT;IACA;IACA;IACAsC,QAAQ,EAAED,aAAc;IACxB2B,eAAe,EAAEnB,YAAa;IAC9BoB,mBAAmB,EAAEpB,YAAa;IAClCG,mBAAmB,EAAEA,mBAAoB;IAAAjD,QAAA,EAExCvB,YAAY,CAACuB,QAAQ;EAAC,CACJ,CAAC;AAE1B;AACA+B,uBAAuB,CAACD,WAAW,GAAG,0BAA0B;;AAEhE;AACA;AACA;AACA;AACA,SAASyB,YAAYA,CAACY,MAA2B,EAAEC,KAA0B,EAAU;EACrF,IAAIrB,KAAK,GAAGC,QAAQ;EACpB,IAAIM,KAAK,GAAG,CAAC;EACb,KAAK,MAAM,CAAC5C,EAAE,EAAEC,CAAC,CAAC,IAAIwD,MAAM,EAAE;IAC5B,MAAME,GAAG,GAAGD,KAAK,CAAC5C,GAAG,CAACd,EAAE,CAAC;IACzB,IAAI2D,GAAG,KAAK5C,SAAS,IAAId,CAAC,IAAIoC,KAAK,EAAE;IACrCA,KAAK,GAAGpC,CAAC;IACT2C,KAAK,GAAGe,GAAG,GAAG1D,CAAC;EACjB;EACA,OAAO2C,KAAK;AACd;AAOA;AACA,SAASgB,sBAAsBA,CAAC;EAC9B1E,SAAS;EACTI,QAAQ;EACR,GAAGC;AACwB,CAAC,EAAE;EAC9B,oBACEtB,IAAA,CAACf,IAAI;IACH2G,uBAAuB,EAAC;IACxB;IACA;IAAA;IACA3E,SAAS,EAAEpB,EAAE,CAAC,iBAAiB,EAAEoB,SAAS,CAAE;IAAA,GACxCK,KAAK;IAAAD,QAAA,EAERvB,YAAY,CAACuB,QAAQ;EAAC,CACnB,CAAC;AAEX;AACAsE,sBAAsB,CAACxC,WAAW,GAAG,yBAAyB;AAe9D;AACA;AACA;AACA;AACA;AACA,SAAS0C,mBAAmBA,CAAC;EAC3B5E,SAAS;EACT6E,SAAS;EACTC,YAAY,GAAG,KAAK;EACpB1E,QAAQ;EACR,GAAGC;AACqB,CAAC,EAAE;EAC3B,MAAM;IAAEQ,YAAY;IAAEW;EAAe,CAAC,GAAGrC,WAAW,CAAC,sBAAsB,CAAC;EAE5E,MAAM4F,QAAQ,GAAInC,KAAwB,IAAK;IAC7C/B,YAAY,CAACgE,SAAS,EAAEjC,KAAK,CAACoC,WAAW,CAACC,MAAM,CAAClE,CAAC,EAAE+D,YAAY,CAAC;IACjEzE,KAAK,CAAC0E,QAAQ,GAAGnC,KAAK,CAAC;EACzB,CAAC;EAEDhF,SAAS,CAAC,MAAM,MAAM4D,cAAc,CAACqD,SAAS,CAAC,EAAE,CAACA,SAAS,EAAErD,cAAc,CAAC,CAAC;EAE7E,oBACEzC,IAAA,CAACf,IAAI;IAACgC,SAAS,EAAEA,SAAU;IAAA,GAAKK,KAAK;IAAE0E,QAAQ,EAAEA,QAAS;IAAA3E,QAAA,EACvDvB,YAAY,CAACuB,QAAQ;EAAC,CACnB,CAAC;AAEX;AACAwE,mBAAmB,CAAC1C,WAAW,GAAG,sBAAsB;AAUxD;AACA;AACA;AACA;AACA;AACA;AACA,SAASgD,qBAAqBA,CAAC;EAC7BlF,SAAS;EACTmF,MAAM,GAAG,KAAK;EACdjB,kBAAkB;EAClB9D,QAAQ;EACR,GAAGC;AACuB,CAAC,EAAE;EAC7B,MAAM;IAAEP,KAAK;IAAEN,WAAW;IAAEC;EAAc,CAAC,GAAGN,WAAW,CAAC,wBAAwB,CAAC;EACnF,MAAMiG,IAAI,GAAG3G,cAAc,CAAC,oBAAoB,CAAC;;EAEjD;EACA,MAAM4G,KAAK,GAAG/G,eAAe,CAAC,MAC5BE,UAAU,CAAC2G,MAAM,KAAK,KAAK,GAAG,CAAC,GAAGrF,KAAK,CAACmC,KAAK,GAAGnC,KAAK,CAACmC,KAAK,EAAE;IAAEqD,QAAQ,EAAE;EAAI,CAAC,CAChF,CAAC;EAED,MAAMC,KAAK,GAAGlH,gBAAgB,CAAC,OAAO;IACpCmH,OAAO,EAAEH,KAAK,CAACpD,KAAK;IACpBwD,SAAS,EAAE,CAAC;MAAEC,UAAU,EAAE,CAAC,CAAC,GAAGL,KAAK,CAACpD,KAAK,IAAI;IAAE,CAAC,EAAE;MAAE0D,KAAK,EAAE,IAAI,GAAG,IAAI,GAAGN,KAAK,CAACpD;IAAM,CAAC;EACzF,CAAC,CAAC,CAAC;EAEH,MAAM,CAAC2D,WAAW,EAAEC,cAAc,CAAC,GAAG9H,QAAQ,CAAC,KAAK,CAAC;EACrDO,eAAe,CAAC,MAAM;IACpB,MAAMmE,IAAI,GAAG4C,KAAK,CAACpD,KAAK,GAAG,GAAG;IAC9B,IAAIQ,IAAI,KAAKmD,WAAW,EAAE1H,OAAO,CAAC2H,cAAc,CAAC,CAACpD,IAAI,CAAC;EACzD,CAAC,CAAC;EAEF,oBACE1D,IAAA,CAACd,QAAQ,CAACD,IAAI;IACZ;IACA;IACA8H,aAAa,EAAEF,WAAW,GAAG,MAAM,GAAG,MAAO;IAC7CG,2BAA2B,EAAE,CAACH,WAAY;IAC1CI,yBAAyB,EAAEJ,WAAW,GAAG,MAAM,GAAG,qBAAsB;IACxEL,KAAK,EAAEA,KAAM;IACbvF,SAAS,EAAEpB,EAAE,CAAC,+BAA+B,EAAEoB,SAAS,CAAE;IAAA,GACtDK,KAAK;IAAAD,QAAA,eAETrB,IAAA,CAACJ,iBAAiB;MAChBsF,iBAAiB,EAAC,QAAQ;MAC1BC,kBAAkB,EAChBA,kBAAkB,KACjBiB,MAAM,KAAK,KAAK,GAAG,4BAA4B,GAAG,mBAAmB,CACvE;MACDc,OAAO,EAAEA,CAAA,KAAOd,MAAM,KAAK,KAAK,GAAG3F,WAAW,CAAC,IAAI,CAAC,GAAGC,aAAa,CAAC,IAAI,CAAG;MAC5EO,SAAS,EAAC,8FAA8F;MAAAI,QAAA,EAEvGA,QAAQ,iBACPrB,IAAA,CAACL,eAAe;QACdwH,IAAI,EAAE,EAAG;QACTC,KAAK,EAAE,OAAOf,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGvD,SAAU;QACnD0D,KAAK,EAAEJ,MAAM,KAAK,OAAO,GAAG;UAAEM,SAAS,EAAE,CAAC;YAAEW,MAAM,EAAE;UAAS,CAAC;QAAE,CAAC,GAAGvE;MAAU,CAC/E;IACF,CACgB;EAAC,CACP,CAAC;AAEpB;AACAqD,qBAAqB,CAAChD,WAAW,GAAG,wBAAwB;AAE5D,OAAO,MAAMmE,eAAe,GAAGC,MAAM,CAACC,MAAM,CAACxG,mBAAmB,EAAE;EAChEyG,QAAQ,EAAErE,uBAAuB;EACjCsE,OAAO,EAAE/B,sBAAsB;EAC/BgC,IAAI,EAAE9B,mBAAmB;EACzB+B,MAAM,EAAEzB;AACV,CAAC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","View","Animated","runOnJS","useAnimatedRef","useAnimatedScrollHandler","useAnimatedStyle","useDerivedValue","useSharedValue","withTiming","useCSSVariable","ChevronDownIcon","AnimatedPressable","cn","textChildren","distanceFromMessageScrollerTarget","initialMessageScrollerIndex","isMessageScrollerTargetVisible","messageScrollerAnchorAt","messageScrollerIndex","MESSAGE_SCROLLER_EDGE_THRESHOLD","jsx","_jsx","ANCHOR_PEEK","MessageScrollerContext","useScroller","component","context","Error","useMessageScroller","scrollToEnd","scrollToStart","scrollToMessage","useMessageScrollerVisibility","currentAnchorId","atEndJS","atEnd","MessageScrollerRoot","className","autoScroll","preserveScrollOnPrepend","defaultScrollPosition","children","props","scrollRef","awayFromEdge","distanceFromStart","distanceFromEnd","setAtEndJS","setCurrentAnchorId","itemY","Map","anchors","following","driver","registerDriver","next","current","registerItem","id","y","anchor","set","list","includes","push","filter","a","unregisterItem","delete","animated","scrollTo","get","undefined","Math","max","Provider","value","displayName","MessageScrollerViewport","contentHeight","previousY","opened","offsetY","publishAtEnd","scrollHandler","onScroll","event","contentOffset","contentSize","layoutMeasurement","height","settleAnchor","bestY","Infinity","onContentSizeChange","_width","previousHeight","openAt","grew","shift","topmostShift","position","last","length","ScrollView","ref","accessibilityRole","accessibilityLabel","scrollEventThrottle","showsVerticalScrollIndicator","onScrollEndDrag","onMomentumScrollEnd","MessageScrollerList","contentContainerClassName","data","renderItem","initialNumToRender","maxToRenderPerBatch","windowSize","listRef","items","firstVisibleIndex","scrollToIndex","index","viewOffset","setAnchorAtIndex","scrollToOffset","offset","target","onViewableItemsChanged","viewableItems","first","reduce","best","token","Number","isFinite","FlatList","keyExtractor","item","messageId","accessibilityLiveRegion","maintainVisibleContentPosition","minIndexForVisible","onScrollToIndexFailed","averageItemLength","setTimeout","before","after","now","MessageScrollerContent","MessageScrollerItem","scrollAnchor","onLayout","nativeEvent","layout","MessageScrollerButton","tint","targetDistance","shown","duration","style","opacity","transform","translateY","scale","interactive","setInteractive","pointerEvents","accessibilityElementsHidden","importantForAccessibility","onPress","size","color","rotate","MessageScroller","Object","assign","Viewport","List","Content","Item","Button"],"sourceRoot":"../../../../src","sources":["components/message-scroller/index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export const MESSAGE_SCROLLER_EDGE_THRESHOLD = 24;
|
|
4
|
+
|
|
5
|
+
/** Distance from the viewport to the edge a jump button targets. */
|
|
6
|
+
export function distanceFromMessageScrollerTarget(target, contentOffsetY, contentHeight, viewportHeight) {
|
|
7
|
+
'worklet';
|
|
8
|
+
|
|
9
|
+
const maximumOffset = Math.max(0, contentHeight - viewportHeight);
|
|
10
|
+
const boundedOffset = Math.min(maximumOffset, Math.max(0, contentOffsetY));
|
|
11
|
+
return target === 'start' ? boundedOffset : maximumOffset - boundedOffset;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Whether the control has enough distance to its target edge to be useful. */
|
|
15
|
+
export function isMessageScrollerTargetVisible(distance) {
|
|
16
|
+
'worklet';
|
|
17
|
+
|
|
18
|
+
return distance > MESSAGE_SCROLLER_EDGE_THRESHOLD;
|
|
19
|
+
}
|
|
20
|
+
/** Index used by initial positioning and id-addressed virtualized jumps. */
|
|
21
|
+
export function messageScrollerIndex(items, id) {
|
|
22
|
+
const index = items.findIndex(item => item.messageId === id);
|
|
23
|
+
return index < 0 ? undefined : index;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Initial target for a list; `undefined` means use the physical end. */
|
|
27
|
+
export function initialMessageScrollerIndex(items, position) {
|
|
28
|
+
if (position === 'end') return undefined;
|
|
29
|
+
if (position === 'start') return items.length ? 0 : undefined;
|
|
30
|
+
for (let index = items.length - 1; index >= 0; index -= 1) {
|
|
31
|
+
if (items[index].scrollAnchor) return index;
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Anchor at or before the first visible virtualized row. */
|
|
37
|
+
export function messageScrollerAnchorAt(items, firstVisibleIndex) {
|
|
38
|
+
for (let index = Math.min(firstVisibleIndex, items.length - 1); index >= 0; index -= 1) {
|
|
39
|
+
if (items[index].scrollAnchor) return items[index].messageId;
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=message-scroller-math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MESSAGE_SCROLLER_EDGE_THRESHOLD","distanceFromMessageScrollerTarget","target","contentOffsetY","contentHeight","viewportHeight","maximumOffset","Math","max","boundedOffset","min","isMessageScrollerTargetVisible","distance","messageScrollerIndex","items","id","index","findIndex","item","messageId","undefined","initialMessageScrollerIndex","position","length","scrollAnchor","messageScrollerAnchorAt","firstVisibleIndex"],"sourceRoot":"../../../../src","sources":["components/message-scroller/message-scroller-math.ts"],"mappings":";;AAEA,OAAO,MAAMA,+BAA+B,GAAG,EAAE;;AAEjD;AACA,OAAO,SAASC,iCAAiCA,CAC/CC,MAA6B,EAC7BC,cAAsB,EACtBC,aAAqB,EACrBC,cAAsB,EACd;EACR,SAAS;;EAET,MAAMC,aAAa,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,aAAa,GAAGC,cAAc,CAAC;EACjE,MAAMI,aAAa,GAAGF,IAAI,CAACG,GAAG,CAACJ,aAAa,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEL,cAAc,CAAC,CAAC;EAC1E,OAAOD,MAAM,KAAK,OAAO,GAAGO,aAAa,GAAGH,aAAa,GAAGG,aAAa;AAC3E;;AAEA;AACA,OAAO,SAASE,8BAA8BA,CAACC,QAAgB,EAAW;EACxE,SAAS;;EAET,OAAOA,QAAQ,GAAGZ,+BAA+B;AACnD;AAOA;AACA,OAAO,SAASa,oBAAoBA,CAClCC,KAA4C,EAC5CC,EAAU,EACU;EACpB,MAAMC,KAAK,GAAGF,KAAK,CAACG,SAAS,CAAEC,IAAI,IAAKA,IAAI,CAACC,SAAS,KAAKJ,EAAE,CAAC;EAC9D,OAAOC,KAAK,GAAG,CAAC,GAAGI,SAAS,GAAGJ,KAAK;AACtC;;AAEA;AACA,OAAO,SAASK,2BAA2BA,CACzCP,KAA4C,EAC5CQ,QAAyC,EACrB;EACpB,IAAIA,QAAQ,KAAK,KAAK,EAAE,OAAOF,SAAS;EACxC,IAAIE,QAAQ,KAAK,OAAO,EAAE,OAAOR,KAAK,CAACS,MAAM,GAAG,CAAC,GAAGH,SAAS;EAC7D,KAAK,IAAIJ,KAAK,GAAGF,KAAK,CAACS,MAAM,GAAG,CAAC,EAAEP,KAAK,IAAI,CAAC,EAAEA,KAAK,IAAI,CAAC,EAAE;IACzD,IAAIF,KAAK,CAACE,KAAK,CAAC,CAAEQ,YAAY,EAAE,OAAOR,KAAK;EAC9C;EACA,OAAOI,SAAS;AAClB;;AAEA;AACA,OAAO,SAASK,uBAAuBA,CACrCX,KAA4C,EAC5CY,iBAAyB,EACV;EACf,KAAK,IAAIV,KAAK,GAAGT,IAAI,CAACG,GAAG,CAACgB,iBAAiB,EAAEZ,KAAK,CAACS,MAAM,GAAG,CAAC,CAAC,EAAEP,KAAK,IAAI,CAAC,EAAEA,KAAK,IAAI,CAAC,EAAE;IACtF,IAAIF,KAAK,CAACE,KAAK,CAAC,CAAEQ,YAAY,EAAE,OAAOV,KAAK,CAACE,KAAK,CAAC,CAAEG,SAAS;EAChE;EACA,OAAO,IAAI;AACb","ignoreList":[]}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { forwardRef, useEffect } from 'react';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
import Animated, { useAnimatedStyle, useReducedMotion, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
|
|
6
|
+
import { tv } from 'tailwind-variants';
|
|
7
|
+
import { Text } from "../../primitives/text.js";
|
|
8
|
+
import { clamp, colorFor, fractionOf, formatValue, litSegments } from "./meter-scale.js";
|
|
9
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
const SPRING = {
|
|
11
|
+
damping: 20,
|
|
12
|
+
stiffness: 180,
|
|
13
|
+
mass: 0.6
|
|
14
|
+
};
|
|
15
|
+
/** Milliseconds for a segment to light or go out. */
|
|
16
|
+
const SEGMENT_DURATION = 180;
|
|
17
|
+
/** How faint an unlit segment sits. Present, but plainly not counted. */
|
|
18
|
+
const SEGMENT_UNLIT = 0.22;
|
|
19
|
+
const meterVariants = tv({
|
|
20
|
+
slots: {
|
|
21
|
+
root: 'w-full gap-2',
|
|
22
|
+
header: 'flex-row items-center justify-between gap-2',
|
|
23
|
+
track: 'w-full overflow-hidden rounded-full',
|
|
24
|
+
indicator: 'h-full rounded-full',
|
|
25
|
+
segments: 'w-full flex-row',
|
|
26
|
+
segment: 'flex-1 rounded-full'
|
|
27
|
+
},
|
|
28
|
+
variants: {
|
|
29
|
+
color: {
|
|
30
|
+
primary: {
|
|
31
|
+
track: 'bg-primary/16',
|
|
32
|
+
indicator: 'bg-primary',
|
|
33
|
+
segment: 'bg-primary'
|
|
34
|
+
},
|
|
35
|
+
success: {
|
|
36
|
+
track: 'bg-success/16',
|
|
37
|
+
indicator: 'bg-success',
|
|
38
|
+
segment: 'bg-success'
|
|
39
|
+
},
|
|
40
|
+
warning: {
|
|
41
|
+
track: 'bg-warning/16',
|
|
42
|
+
indicator: 'bg-warning',
|
|
43
|
+
segment: 'bg-warning'
|
|
44
|
+
},
|
|
45
|
+
destructive: {
|
|
46
|
+
track: 'bg-destructive/16',
|
|
47
|
+
indicator: 'bg-destructive',
|
|
48
|
+
segment: 'bg-destructive'
|
|
49
|
+
},
|
|
50
|
+
info: {
|
|
51
|
+
track: 'bg-info/16',
|
|
52
|
+
indicator: 'bg-info',
|
|
53
|
+
segment: 'bg-info'
|
|
54
|
+
},
|
|
55
|
+
muted: {
|
|
56
|
+
track: 'bg-muted',
|
|
57
|
+
indicator: 'bg-muted-foreground',
|
|
58
|
+
segment: 'bg-muted-foreground'
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
size: {
|
|
62
|
+
sm: {
|
|
63
|
+
track: 'h-1.5',
|
|
64
|
+
segments: 'h-1.5 gap-1',
|
|
65
|
+
segment: 'h-1.5'
|
|
66
|
+
},
|
|
67
|
+
md: {
|
|
68
|
+
track: 'h-2',
|
|
69
|
+
segments: 'h-2 gap-1.5',
|
|
70
|
+
segment: 'h-2'
|
|
71
|
+
},
|
|
72
|
+
lg: {
|
|
73
|
+
track: 'h-3',
|
|
74
|
+
segments: 'h-3 gap-1.5',
|
|
75
|
+
segment: 'h-3'
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
defaultVariants: {
|
|
80
|
+
color: 'primary',
|
|
81
|
+
size: 'md'
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
/**
|
|
85
|
+
* One block of a segmented meter. It reads the lit count rather than a boolean
|
|
86
|
+
* so the whole row animates from one shared value, without a render per block.
|
|
87
|
+
*/
|
|
88
|
+
function Segment({
|
|
89
|
+
index,
|
|
90
|
+
lit,
|
|
91
|
+
className,
|
|
92
|
+
reducedMotion
|
|
93
|
+
}) {
|
|
94
|
+
const style = useAnimatedStyle(() => {
|
|
95
|
+
const on = lit.value > index ? 1 : SEGMENT_UNLIT;
|
|
96
|
+
return {
|
|
97
|
+
opacity: reducedMotion ? on : withTiming(on, {
|
|
98
|
+
duration: SEGMENT_DURATION
|
|
99
|
+
})
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
103
|
+
style: style,
|
|
104
|
+
className: className
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* A measurement on a fixed scale: disk used, battery left, a score, a password's
|
|
110
|
+
* strength. The fill is driven on the UI thread, so a value change costs one
|
|
111
|
+
* render and nothing per frame.
|
|
112
|
+
*
|
|
113
|
+
* A meter is not a progress bar. Progress is a task moving towards an end that
|
|
114
|
+
* finishing is the point of; a meter is a reading that happens to sit where it
|
|
115
|
+
* sits, and may go back down. Reach for
|
|
116
|
+
* [Progress](/docs/components/progress) when something is completing.
|
|
117
|
+
*
|
|
118
|
+
* `thresholds` paint the bar by where the reading falls, and `segments` draws
|
|
119
|
+
* the scale as discrete blocks for readings that are counted rather than
|
|
120
|
+
* measured.
|
|
121
|
+
*
|
|
122
|
+
* The value is read against `minValue` / `maxValue`, which default to 0 and
|
|
123
|
+
* 100 — so a percentage needs neither. Set them and the meter speaks in
|
|
124
|
+
* whatever is being measured: bytes, degrees, points. Nothing has to be
|
|
125
|
+
* converted to a percent on the way in, and the screen reader is told the real
|
|
126
|
+
* scale rather than a derived one.
|
|
127
|
+
*
|
|
128
|
+
* React Native has no meter role, so this announces as a progress bar with its
|
|
129
|
+
* value, range and unit attached. That is the closest the platform offers, and
|
|
130
|
+
* it is why `label` matters: the role will not distinguish a reading from a
|
|
131
|
+
* task, and the name is what does.
|
|
132
|
+
*/
|
|
133
|
+
export const Meter = /*#__PURE__*/forwardRef(({
|
|
134
|
+
className,
|
|
135
|
+
indicatorClassName,
|
|
136
|
+
headerClassName,
|
|
137
|
+
value,
|
|
138
|
+
minValue = 0,
|
|
139
|
+
maxValue = 100,
|
|
140
|
+
label,
|
|
141
|
+
showValueLabel = false,
|
|
142
|
+
valueLabel,
|
|
143
|
+
formatOptions,
|
|
144
|
+
thresholds,
|
|
145
|
+
segments,
|
|
146
|
+
color,
|
|
147
|
+
size,
|
|
148
|
+
accessibilityLabel,
|
|
149
|
+
...props
|
|
150
|
+
}, ref) => {
|
|
151
|
+
const held = clamp(value, minValue, maxValue);
|
|
152
|
+
const fraction = fractionOf(value, minValue, maxValue);
|
|
153
|
+
const resolvedColor = colorFor(held, color ?? 'primary', thresholds);
|
|
154
|
+
const slots = meterVariants({
|
|
155
|
+
color: resolvedColor,
|
|
156
|
+
size
|
|
157
|
+
});
|
|
158
|
+
const reducedMotion = useReducedMotion();
|
|
159
|
+
const trackWidth = useSharedValue(0);
|
|
160
|
+
const progress = useSharedValue(fraction);
|
|
161
|
+
// Any reading above the floor lights a block, so "a little" never looks
|
|
162
|
+
// like "none". Rounding down would leave the first quarter of a
|
|
163
|
+
// four-block meter dark, which is the reading it is least able to afford.
|
|
164
|
+
const litCount = segments ? litSegments(fraction, segments) : 0;
|
|
165
|
+
const lit = useSharedValue(litCount);
|
|
166
|
+
|
|
167
|
+
// Reduce motion lands on the value instead of springing to it — the
|
|
168
|
+
// number is the information, and the overshoot is decoration.
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
progress.value = reducedMotion ? fraction : withSpring(fraction, SPRING);
|
|
171
|
+
}, [fraction, progress, reducedMotion]);
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
lit.value = litCount;
|
|
174
|
+
}, [lit, litCount]);
|
|
175
|
+
const onLayout = event => {
|
|
176
|
+
trackWidth.value = event.nativeEvent.layout.width;
|
|
177
|
+
};
|
|
178
|
+
const fillStyle = useAnimatedStyle(() => ({
|
|
179
|
+
width: trackWidth.value * progress.value
|
|
180
|
+
}));
|
|
181
|
+
const spoken = formatValue(held, fraction, valueLabel, formatOptions);
|
|
182
|
+
const showValue = showValueLabel;
|
|
183
|
+
const hasHeader = label != null || showValue;
|
|
184
|
+
const accessibility = {
|
|
185
|
+
accessibilityRole: 'progressbar',
|
|
186
|
+
accessibilityLabel: accessibilityLabel ?? label,
|
|
187
|
+
accessibilityValue: {
|
|
188
|
+
min: minValue,
|
|
189
|
+
max: maxValue,
|
|
190
|
+
now: held,
|
|
191
|
+
// Without this the scale is read as a bare number. `text` is what
|
|
192
|
+
// carries the unit — the percent sign, the gigabytes, the word.
|
|
193
|
+
text: spoken
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
const bar = segments && segments > 0 ? /*#__PURE__*/_jsx(View, {
|
|
197
|
+
ref: ref,
|
|
198
|
+
...accessibility,
|
|
199
|
+
className: slots.segments({
|
|
200
|
+
className
|
|
201
|
+
}),
|
|
202
|
+
...props,
|
|
203
|
+
children: Array.from({
|
|
204
|
+
length: segments
|
|
205
|
+
}, (_, index) => /*#__PURE__*/_jsx(Segment, {
|
|
206
|
+
index: index,
|
|
207
|
+
lit: lit,
|
|
208
|
+
reducedMotion: reducedMotion,
|
|
209
|
+
className: slots.segment({
|
|
210
|
+
className: indicatorClassName
|
|
211
|
+
})
|
|
212
|
+
}, index))
|
|
213
|
+
}) : /*#__PURE__*/_jsx(View, {
|
|
214
|
+
ref: ref,
|
|
215
|
+
...accessibility,
|
|
216
|
+
className: slots.track({
|
|
217
|
+
className
|
|
218
|
+
}),
|
|
219
|
+
onLayout: onLayout,
|
|
220
|
+
...props,
|
|
221
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
222
|
+
style: fillStyle,
|
|
223
|
+
className: slots.indicator({
|
|
224
|
+
className: indicatorClassName
|
|
225
|
+
})
|
|
226
|
+
})
|
|
227
|
+
});
|
|
228
|
+
if (!hasHeader) return bar;
|
|
229
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
230
|
+
className: slots.root(),
|
|
231
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
232
|
+
className: slots.header({
|
|
233
|
+
className: headerClassName
|
|
234
|
+
}),
|
|
235
|
+
children: [label != null ? /*#__PURE__*/_jsx(Text, {
|
|
236
|
+
size: "sm",
|
|
237
|
+
weight: "medium",
|
|
238
|
+
numberOfLines: 1,
|
|
239
|
+
children: label
|
|
240
|
+
}) : /*#__PURE__*/_jsx(View, {}), showValue ? /*#__PURE__*/_jsx(Text, {
|
|
241
|
+
size: "sm",
|
|
242
|
+
muted: true,
|
|
243
|
+
numberOfLines: 1,
|
|
244
|
+
children: spoken
|
|
245
|
+
}) : null]
|
|
246
|
+
}), bar]
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
Meter.displayName = 'Meter';
|
|
250
|
+
//# sourceMappingURL=index.js.map
|