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.
Files changed (209) hide show
  1. package/README.md +21 -1
  2. package/lib/module/components/area-chart/index.js +18 -1
  3. package/lib/module/components/area-chart/index.js.map +1 -1
  4. package/lib/module/components/bar-chart/index.js +18 -1
  5. package/lib/module/components/bar-chart/index.js.map +1 -1
  6. package/lib/module/components/bottom-sheet/index.js.map +1 -1
  7. package/lib/module/components/candlestick-chart/index.js +18 -1
  8. package/lib/module/components/candlestick-chart/index.js.map +1 -1
  9. package/lib/module/components/carousel/carousel-lifecycle.js +51 -0
  10. package/lib/module/components/carousel/carousel-lifecycle.js.map +1 -0
  11. package/lib/module/components/carousel/index.js +61 -24
  12. package/lib/module/components/carousel/index.js.map +1 -1
  13. package/lib/module/components/context-menu/context-menu-invocation.js +23 -0
  14. package/lib/module/components/context-menu/context-menu-invocation.js.map +1 -0
  15. package/lib/module/components/context-menu/index.js +78 -9
  16. package/lib/module/components/context-menu/index.js.map +1 -1
  17. package/lib/module/components/dialog/index.js.map +1 -1
  18. package/lib/module/components/drawer/index.js.map +1 -1
  19. package/lib/module/components/flow/flow-accessibility.js +18 -2
  20. package/lib/module/components/flow/flow-accessibility.js.map +1 -1
  21. package/lib/module/components/flow/flow-identifiers.js +81 -0
  22. package/lib/module/components/flow/flow-identifiers.js.map +1 -0
  23. package/lib/module/components/flow/index.js +12 -18
  24. package/lib/module/components/flow/index.js.map +1 -1
  25. package/lib/module/components/form/index.js +7 -5
  26. package/lib/module/components/form/index.js.map +1 -1
  27. package/lib/module/components/form/typed-form.js +11 -0
  28. package/lib/module/components/form/typed-form.js.map +1 -0
  29. package/lib/module/components/form/use-form.js +4 -0
  30. package/lib/module/components/form/use-form.js.map +1 -1
  31. package/lib/module/components/heatmap-chart/index.js +27 -1
  32. package/lib/module/components/heatmap-chart/index.js.map +1 -1
  33. package/lib/module/components/line-chart/index.js +18 -1
  34. package/lib/module/components/line-chart/index.js.map +1 -1
  35. package/lib/module/components/message-scroller/index.js +187 -17
  36. package/lib/module/components/message-scroller/index.js.map +1 -1
  37. package/lib/module/components/message-scroller/message-scroller-math.js +43 -0
  38. package/lib/module/components/message-scroller/message-scroller-math.js.map +1 -0
  39. package/lib/module/components/meter/index.js +250 -0
  40. package/lib/module/components/meter/index.js.map +1 -0
  41. package/lib/module/components/meter/meter-scale.js +88 -0
  42. package/lib/module/components/meter/meter-scale.js.map +1 -0
  43. package/lib/module/components/planner/index.js +714 -0
  44. package/lib/module/components/planner/index.js.map +1 -0
  45. package/lib/module/components/planner/planner-entries.js +124 -0
  46. package/lib/module/components/planner/planner-entries.js.map +1 -0
  47. package/lib/module/components/popover/index.js.map +1 -1
  48. package/lib/module/components/radar-chart/index.js +18 -1
  49. package/lib/module/components/radar-chart/index.js.map +1 -1
  50. package/lib/module/components/scatter-chart/index.js +18 -1
  51. package/lib/module/components/scatter-chart/index.js.map +1 -1
  52. package/lib/module/components/selection-mode/index.js +26 -31
  53. package/lib/module/components/selection-mode/index.js.map +1 -1
  54. package/lib/module/components/selection-mode/selection-mode-contracts.js +48 -0
  55. package/lib/module/components/selection-mode/selection-mode-contracts.js.map +1 -0
  56. package/lib/module/components/signature/index.js +62 -20
  57. package/lib/module/components/signature/index.js.map +1 -1
  58. package/lib/module/components/signature/signature-accessibility.js +58 -0
  59. package/lib/module/components/signature/signature-accessibility.js.map +1 -0
  60. package/lib/module/components/skeleton/index.js +45 -7
  61. package/lib/module/components/skeleton/index.js.map +1 -1
  62. package/lib/module/components/slider/index.js +22 -18
  63. package/lib/module/components/slider/index.js.map +1 -1
  64. package/lib/module/components/spinner/index.js +63 -14
  65. package/lib/module/components/spinner/index.js.map +1 -1
  66. package/lib/module/components/time-picker/index.js +46 -21
  67. package/lib/module/components/time-picker/index.js.map +1 -1
  68. package/lib/module/components/time-picker/ruler-window.js +25 -0
  69. package/lib/module/components/time-picker/ruler-window.js.map +1 -0
  70. package/lib/module/hooks/breakpoint-contract.js +29 -0
  71. package/lib/module/hooks/breakpoint-contract.js.map +1 -0
  72. package/lib/module/hooks/index.js +1 -1
  73. package/lib/module/hooks/index.js.map +1 -1
  74. package/lib/module/hooks/use-breakpoint.js +46 -1
  75. package/lib/module/hooks/use-breakpoint.js.map +1 -1
  76. package/lib/module/index.js +3 -1
  77. package/lib/module/index.js.map +1 -1
  78. package/lib/module/primitives/chart-accessibility.js +68 -0
  79. package/lib/module/primitives/chart-accessibility.js.map +1 -0
  80. package/lib/module/primitives/scrim.js +94 -3
  81. package/lib/module/primitives/scrim.js.map +1 -1
  82. package/lib/typescript/src/components/area-chart/index.d.ts +2 -1
  83. package/lib/typescript/src/components/area-chart/index.d.ts.map +1 -1
  84. package/lib/typescript/src/components/bar-chart/index.d.ts +2 -1
  85. package/lib/typescript/src/components/bar-chart/index.d.ts.map +1 -1
  86. package/lib/typescript/src/components/bottom-sheet/index.d.ts +3 -0
  87. package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
  88. package/lib/typescript/src/components/candlestick-chart/index.d.ts +2 -1
  89. package/lib/typescript/src/components/candlestick-chart/index.d.ts.map +1 -1
  90. package/lib/typescript/src/components/carousel/carousel-lifecycle.d.ts +23 -0
  91. package/lib/typescript/src/components/carousel/carousel-lifecycle.d.ts.map +1 -0
  92. package/lib/typescript/src/components/carousel/index.d.ts +5 -2
  93. package/lib/typescript/src/components/carousel/index.d.ts.map +1 -1
  94. package/lib/typescript/src/components/context-menu/context-menu-invocation.d.ts +20 -0
  95. package/lib/typescript/src/components/context-menu/context-menu-invocation.d.ts.map +1 -0
  96. package/lib/typescript/src/components/context-menu/index.d.ts +18 -8
  97. package/lib/typescript/src/components/context-menu/index.d.ts.map +1 -1
  98. package/lib/typescript/src/components/dialog/index.d.ts +3 -0
  99. package/lib/typescript/src/components/dialog/index.d.ts.map +1 -1
  100. package/lib/typescript/src/components/drawer/index.d.ts +3 -0
  101. package/lib/typescript/src/components/drawer/index.d.ts.map +1 -1
  102. package/lib/typescript/src/components/flow/flow-accessibility.d.ts +8 -0
  103. package/lib/typescript/src/components/flow/flow-accessibility.d.ts.map +1 -1
  104. package/lib/typescript/src/components/flow/flow-identifiers.d.ts +24 -0
  105. package/lib/typescript/src/components/flow/flow-identifiers.d.ts.map +1 -0
  106. package/lib/typescript/src/components/flow/index.d.ts +6 -5
  107. package/lib/typescript/src/components/flow/index.d.ts.map +1 -1
  108. package/lib/typescript/src/components/form/index.d.ts +18 -5
  109. package/lib/typescript/src/components/form/index.d.ts.map +1 -1
  110. package/lib/typescript/src/components/form/typed-form.d.ts +7 -0
  111. package/lib/typescript/src/components/form/typed-form.d.ts.map +1 -0
  112. package/lib/typescript/src/components/form/use-form.d.ts +4 -0
  113. package/lib/typescript/src/components/form/use-form.d.ts.map +1 -1
  114. package/lib/typescript/src/components/heatmap-chart/index.d.ts +2 -1
  115. package/lib/typescript/src/components/heatmap-chart/index.d.ts.map +1 -1
  116. package/lib/typescript/src/components/line-chart/index.d.ts +2 -1
  117. package/lib/typescript/src/components/line-chart/index.d.ts.map +1 -1
  118. package/lib/typescript/src/components/message-scroller/index.d.ts +30 -2
  119. package/lib/typescript/src/components/message-scroller/index.d.ts.map +1 -1
  120. package/lib/typescript/src/components/message-scroller/message-scroller-math.d.ts +18 -0
  121. package/lib/typescript/src/components/message-scroller/message-scroller-math.d.ts.map +1 -0
  122. package/lib/typescript/src/components/meter/index.d.ts +270 -0
  123. package/lib/typescript/src/components/meter/index.d.ts.map +1 -0
  124. package/lib/typescript/src/components/meter/meter-scale.d.ts +57 -0
  125. package/lib/typescript/src/components/meter/meter-scale.d.ts.map +1 -0
  126. package/lib/typescript/src/components/planner/index.d.ts +274 -0
  127. package/lib/typescript/src/components/planner/index.d.ts.map +1 -0
  128. package/lib/typescript/src/components/planner/planner-entries.d.ts +75 -0
  129. package/lib/typescript/src/components/planner/planner-entries.d.ts.map +1 -0
  130. package/lib/typescript/src/components/popover/index.d.ts +3 -0
  131. package/lib/typescript/src/components/popover/index.d.ts.map +1 -1
  132. package/lib/typescript/src/components/radar-chart/index.d.ts +4 -0
  133. package/lib/typescript/src/components/radar-chart/index.d.ts.map +1 -1
  134. package/lib/typescript/src/components/scatter-chart/index.d.ts +2 -1
  135. package/lib/typescript/src/components/scatter-chart/index.d.ts.map +1 -1
  136. package/lib/typescript/src/components/selection-mode/index.d.ts +6 -4
  137. package/lib/typescript/src/components/selection-mode/index.d.ts.map +1 -1
  138. package/lib/typescript/src/components/selection-mode/selection-mode-contracts.d.ts +18 -0
  139. package/lib/typescript/src/components/selection-mode/selection-mode-contracts.d.ts.map +1 -0
  140. package/lib/typescript/src/components/signature/index.d.ts +6 -0
  141. package/lib/typescript/src/components/signature/index.d.ts.map +1 -1
  142. package/lib/typescript/src/components/signature/signature-accessibility.d.ts +27 -0
  143. package/lib/typescript/src/components/signature/signature-accessibility.d.ts.map +1 -0
  144. package/lib/typescript/src/components/skeleton/index.d.ts +25 -2
  145. package/lib/typescript/src/components/skeleton/index.d.ts.map +1 -1
  146. package/lib/typescript/src/components/slider/index.d.ts.map +1 -1
  147. package/lib/typescript/src/components/spinner/index.d.ts +25 -2
  148. package/lib/typescript/src/components/spinner/index.d.ts.map +1 -1
  149. package/lib/typescript/src/components/time-picker/index.d.ts +5 -6
  150. package/lib/typescript/src/components/time-picker/index.d.ts.map +1 -1
  151. package/lib/typescript/src/components/time-picker/ruler-window.d.ts +12 -0
  152. package/lib/typescript/src/components/time-picker/ruler-window.d.ts.map +1 -0
  153. package/lib/typescript/src/hooks/breakpoint-contract.d.ts +6 -0
  154. package/lib/typescript/src/hooks/breakpoint-contract.d.ts.map +1 -0
  155. package/lib/typescript/src/hooks/index.d.ts +1 -1
  156. package/lib/typescript/src/hooks/index.d.ts.map +1 -1
  157. package/lib/typescript/src/hooks/use-breakpoint.d.ts +22 -0
  158. package/lib/typescript/src/hooks/use-breakpoint.d.ts.map +1 -1
  159. package/lib/typescript/src/index.d.ts +4 -2
  160. package/lib/typescript/src/index.d.ts.map +1 -1
  161. package/lib/typescript/src/primitives/chart-accessibility.d.ts +33 -0
  162. package/lib/typescript/src/primitives/chart-accessibility.d.ts.map +1 -0
  163. package/lib/typescript/src/primitives/scrim.d.ts +5 -3
  164. package/lib/typescript/src/primitives/scrim.d.ts.map +1 -1
  165. package/lib/typescript/types/form-api.type-test.d.ts +2 -0
  166. package/lib/typescript/types/form-api.type-test.d.ts.map +1 -0
  167. package/package.json +34 -5
  168. package/src/components/area-chart/index.tsx +27 -2
  169. package/src/components/bar-chart/index.tsx +27 -2
  170. package/src/components/bottom-sheet/index.tsx +3 -0
  171. package/src/components/candlestick-chart/index.tsx +30 -2
  172. package/src/components/carousel/carousel-lifecycle.ts +74 -0
  173. package/src/components/carousel/index.tsx +80 -25
  174. package/src/components/context-menu/context-menu-invocation.ts +44 -0
  175. package/src/components/context-menu/index.tsx +113 -13
  176. package/src/components/dialog/index.tsx +3 -0
  177. package/src/components/drawer/index.tsx +3 -0
  178. package/src/components/flow/flow-accessibility.ts +16 -2
  179. package/src/components/flow/flow-identifiers.ts +98 -0
  180. package/src/components/flow/index.tsx +29 -19
  181. package/src/components/form/index.tsx +32 -5
  182. package/src/components/form/typed-form.ts +13 -0
  183. package/src/components/form/use-form.ts +9 -0
  184. package/src/components/heatmap-chart/index.tsx +49 -3
  185. package/src/components/line-chart/index.tsx +27 -2
  186. package/src/components/message-scroller/index.tsx +273 -13
  187. package/src/components/message-scroller/message-scroller-math.ts +62 -0
  188. package/src/components/meter/index.tsx +318 -0
  189. package/src/components/meter/meter-scale.ts +109 -0
  190. package/src/components/planner/index.tsx +886 -0
  191. package/src/components/planner/planner-entries.ts +146 -0
  192. package/src/components/popover/index.tsx +3 -0
  193. package/src/components/radar-chart/index.tsx +24 -0
  194. package/src/components/scatter-chart/index.tsx +27 -2
  195. package/src/components/selection-mode/index.tsx +37 -30
  196. package/src/components/selection-mode/selection-mode-contracts.ts +53 -0
  197. package/src/components/signature/index.tsx +107 -20
  198. package/src/components/signature/signature-accessibility.ts +67 -0
  199. package/src/components/skeleton/index.tsx +59 -5
  200. package/src/components/slider/index.tsx +28 -18
  201. package/src/components/spinner/index.tsx +80 -13
  202. package/src/components/time-picker/index.tsx +57 -29
  203. package/src/components/time-picker/ruler-window.ts +24 -0
  204. package/src/hooks/breakpoint-contract.ts +31 -0
  205. package/src/hooks/index.ts +4 -0
  206. package/src/hooks/use-breakpoint.ts +61 -10
  207. package/src/index.ts +32 -0
  208. package/src/primitives/chart-accessibility.ts +102 -0
  209. 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 === undefined) return;
133
- following.current = false;
134
- scrollRef.current?.scrollTo({
135
- y: Math.max(0, y - ANCHOR_PEEK),
136
- animated
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
- const distance = contentSize.height - layoutMeasurement.height - contentOffset.y;
229
- const next = distance <= END_THRESHOLD ? 1 : 0;
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
- atEnd,
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(target === 'end' ? 1 - atEnd.value : atEnd.value, {
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":"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","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