@sincpro/mobile-ui 3.1.0 → 3.3.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 (37) hide show
  1. package/dist/Dialog/Dialog.EditValue.js +6 -19
  2. package/dist/Dialog/Dialog.Sheet.js +48 -12
  3. package/dist/Dialog/OverlayHost.d.ts +2 -1
  4. package/dist/Dialog/OverlayHost.js +36 -2
  5. package/dist/Dialog/SheetSurface.d.ts +19 -0
  6. package/dist/Dialog/SheetSurface.js +279 -225
  7. package/dist/Display/Display.DocumentPreview.d.ts +15 -0
  8. package/dist/Display/Display.DocumentPreview.js +349 -0
  9. package/dist/Display/Display.DocumentViewer.d.ts +15 -0
  10. package/dist/Display/Display.DocumentViewer.js +465 -0
  11. package/dist/Display/Display.SwipeableRow.js +30 -23
  12. package/dist/Display/document-pages.d.ts +21 -0
  13. package/dist/Display/document-pages.js +282 -0
  14. package/dist/Display/document-renderer.d.ts +30 -0
  15. package/dist/Display/document-renderer.js +28 -0
  16. package/dist/Display/icon-map.d.ts +10 -10
  17. package/dist/Display/icon-map.js +14 -10
  18. package/dist/Display/index.d.ts +8 -0
  19. package/dist/Display/index.js +6 -0
  20. package/dist/Form/Form.DatePicker.js +2 -0
  21. package/dist/Form/Form.Input.d.ts +1 -1
  22. package/dist/Form/Form.Input.js +234 -215
  23. package/dist/Form/Form.KeyboardToolbarHost.js +78 -37
  24. package/dist/Form/Form.PickerField.js +133 -156
  25. package/dist/Form/Form.RadioButton.d.ts +1 -0
  26. package/dist/Form/Form.RadioButton.js +11 -122
  27. package/dist/Form/Form.Select.d.ts +2 -1
  28. package/dist/Form/Form.Select.js +183 -286
  29. package/dist/Form/choice-row.d.ts +15 -0
  30. package/dist/Form/choice-row.js +236 -0
  31. package/dist/theme/active.d.ts +2 -0
  32. package/dist/theme/active.js +13 -0
  33. package/dist/theme/useTheme.d.ts +4 -0
  34. package/dist/theme/useTheme.js +7 -12
  35. package/dist/utils/document.d.ts +18 -0
  36. package/dist/utils/document.js +46 -0
  37. package/package.json +4 -1
@@ -2,7 +2,7 @@ import { c as _c } from "react/compiler-runtime";
2
2
  import { useTheme } from "../theme/index.js";
3
3
  import { SCRIM } from "../theme/on-dark-surface.js";
4
4
  import { useReducedMotion } from "../utils/useReducedMotion.js";
5
- import { useEffect, useEffectEvent } from "react";
5
+ import { createContext, useContext, useEffect, useEffectEvent, useRef, useState } from "react";
6
6
  import { Pressable, StyleSheet, useWindowDimensions, View } from "react-native";
7
7
  import { GestureDetector, usePanGesture } from "react-native-gesture-handler";
8
8
  import { KeyboardToolbar, useReanimatedKeyboardAnimation } from "react-native-keyboard-controller";
@@ -13,17 +13,50 @@ import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
13
13
  const DURATION_MS = 260;
14
14
  const CLOSE_VELOCITY = 900;
15
15
  const MIN_CONTENT_ABOVE_KEYBOARD = 240;
16
+ const RestingOffsetContext = createContext(0);
17
+
18
+ /** The part of the sheet panel below the screen at rest (0 outside a sheet). */
19
+ export function useSheetRestingOffset() {
20
+ return useContext(RestingOffsetContext);
21
+ }
16
22
  export function resolveSnapPoint(point, windowHeight) {
17
23
  if (typeof point === "number") return point;
18
24
  const percent = Number.parseFloat(point);
19
25
  return Number.isFinite(percent) ? windowHeight * percent / 100 : windowHeight * 0.6;
20
26
  }
27
+
28
+ /**
29
+ * Panel geometry for a host of `height` whose top `topInset` points are covered (status
30
+ * bar, notch). The panel is as tall as the highest snap point and never reaches into the
31
+ * inset; it rests pushed down `restOffset` so only the lowest snap point shows.
32
+ */
33
+ export function sheetGeometry(snapPoints, height, topInset) {
34
+ const ceiling = height - topInset - 8;
35
+ const snaps = snapPoints.map(point => Math.min(resolveSnapPoint(point, height), ceiling)).sort((a, b) => a - b);
36
+ const panelHeight = snaps[snaps.length - 1] ?? height * 0.6;
37
+ const offsets = snaps.map(snap => panelHeight - snap).sort((a, b) => b - a);
38
+ return {
39
+ ceiling,
40
+ panelHeight,
41
+ offsets,
42
+ restOffset: offsets[0] ?? 0
43
+ };
44
+ }
45
+
46
+ /**
47
+ * How much of the panel sits below the screen while it rests at its lowest snap point.
48
+ * Scroll content needs this much extra room at its end, or its last rows stay off screen
49
+ * until the sheet is dragged up.
50
+ */
51
+ export function restingOffset(snapPoints, height, topInset) {
52
+ return sheetGeometry(snapPoints, height, topInset).restOffset;
53
+ }
21
54
  /**
22
55
  * Bottom sheet drawn in the app window. While it exits it ignores touches,
23
56
  * so a tap during the close animation never lands on a view that unmounts.
24
57
  */
25
58
  export function SheetSurface(t0) {
26
- const $ = _c(89);
59
+ const $ = _c(88);
27
60
  const {
28
61
  visible,
29
62
  snapPoints,
@@ -42,49 +75,57 @@ export function SheetSurface(t0) {
42
75
  } = useWindowDimensions();
43
76
  const reducedMotion = useReducedMotion();
44
77
  const keyboard = useReanimatedKeyboardAnimation();
45
- const ceiling = windowHeight - insets.top - 8;
46
- let panelHeight;
78
+ const frame = useRef(null);
79
+ const [host, setHost] = useState(null);
80
+ const available = host?.height ?? windowHeight;
81
+ const topInset = Math.max(0, insets.top - (host?.top ?? 0));
47
82
  let t1;
48
- if ($[0] !== ceiling || $[1] !== snapPoints || $[2] !== windowHeight) {
49
- let t2;
50
- if ($[5] !== ceiling || $[6] !== windowHeight) {
51
- t2 = point => Math.min(resolveSnapPoint(point, windowHeight), ceiling);
52
- $[5] = ceiling;
53
- $[6] = windowHeight;
54
- $[7] = t2;
55
- } else {
56
- t2 = $[7];
57
- }
58
- const snaps = snapPoints.map(t2).sort(_temp);
59
- panelHeight = snaps[snaps.length - 1] ?? windowHeight * 0.6;
60
- t1 = snaps.map(snap => panelHeight - snap).sort(_temp2);
61
- $[0] = ceiling;
62
- $[1] = snapPoints;
63
- $[2] = windowHeight;
64
- $[3] = panelHeight;
65
- $[4] = t1;
83
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
84
+ t1 = () => frame.current?.measureInWindow((_x, top, _width, height) => {
85
+ if (height > 0) {
86
+ setHost({
87
+ top,
88
+ height
89
+ });
90
+ }
91
+ });
92
+ $[0] = t1;
66
93
  } else {
67
- panelHeight = $[3];
68
- t1 = $[4];
94
+ t1 = $[0];
69
95
  }
70
- const offsets = t1;
71
- const restOffset = offsets[0] ?? 0;
96
+ const measureHost = t1;
97
+ let t2;
98
+ if ($[1] !== available || $[2] !== snapPoints || $[3] !== topInset) {
99
+ t2 = sheetGeometry(snapPoints, available, topInset);
100
+ $[1] = available;
101
+ $[2] = snapPoints;
102
+ $[3] = topInset;
103
+ $[4] = t2;
104
+ } else {
105
+ t2 = $[4];
106
+ }
107
+ const {
108
+ ceiling,
109
+ panelHeight,
110
+ offsets,
111
+ restOffset
112
+ } = t2;
72
113
  const hiddenOffset = panelHeight + insets.bottom;
73
114
  const duration = reducedMotion ? 0 : DURATION_MS;
74
115
  const translateY = useSharedValue(hiddenOffset);
75
116
  const dragStart = useSharedValue(0);
76
- let t2;
77
- if ($[8] !== onExited) {
78
- t2 = () => onExited();
79
- $[8] = onExited;
80
- $[9] = t2;
117
+ let t3;
118
+ if ($[5] !== onExited) {
119
+ t3 = () => onExited();
120
+ $[5] = onExited;
121
+ $[6] = t3;
81
122
  } else {
82
- t2 = $[9];
123
+ t3 = $[6];
83
124
  }
84
- const exited = useEffectEvent(t2);
85
- let t3;
86
- if ($[10] !== duration || $[11] !== exited || $[12] !== hiddenOffset || $[13] !== restOffset || $[14] !== translateY || $[15] !== visible) {
87
- t3 = () => {
125
+ const exited = useEffectEvent(t3);
126
+ let t4;
127
+ if ($[7] !== duration || $[8] !== exited || $[9] !== hiddenOffset || $[10] !== restOffset || $[11] !== translateY || $[12] !== visible) {
128
+ t4 = () => {
88
129
  if (visible) {
89
130
  translateY.set(withTiming(restOffset, {
90
131
  duration,
@@ -103,84 +144,84 @@ export function SheetSurface(t0) {
103
144
  const timer = setTimeout(() => exited(), duration);
104
145
  return () => clearTimeout(timer);
105
146
  };
106
- $[10] = duration;
107
- $[11] = exited;
108
- $[12] = hiddenOffset;
109
- $[13] = restOffset;
110
- $[14] = translateY;
111
- $[15] = visible;
112
- $[16] = t3;
147
+ $[7] = duration;
148
+ $[8] = exited;
149
+ $[9] = hiddenOffset;
150
+ $[10] = restOffset;
151
+ $[11] = translateY;
152
+ $[12] = visible;
153
+ $[13] = t4;
113
154
  } else {
114
- t3 = $[16];
155
+ t4 = $[13];
115
156
  }
116
- let t4;
117
- if ($[17] !== duration || $[18] !== hiddenOffset || $[19] !== restOffset || $[20] !== translateY || $[21] !== visible) {
118
- t4 = [visible, restOffset, hiddenOffset, duration, translateY];
119
- $[17] = duration;
120
- $[18] = hiddenOffset;
121
- $[19] = restOffset;
122
- $[20] = translateY;
123
- $[21] = visible;
124
- $[22] = t4;
157
+ let t5;
158
+ if ($[14] !== duration || $[15] !== hiddenOffset || $[16] !== restOffset || $[17] !== translateY || $[18] !== visible) {
159
+ t5 = [visible, restOffset, hiddenOffset, duration, translateY];
160
+ $[14] = duration;
161
+ $[15] = hiddenOffset;
162
+ $[16] = restOffset;
163
+ $[17] = translateY;
164
+ $[18] = visible;
165
+ $[19] = t5;
125
166
  } else {
126
- t4 = $[22];
167
+ t5 = $[19];
127
168
  }
128
- useEffect(t3, t4);
129
- let t5;
130
- if ($[23] !== dismissible || $[24] !== onRequestClose || $[25] !== visible) {
131
- t5 = () => {
169
+ useEffect(t4, t5);
170
+ let t6;
171
+ if ($[20] !== dismissible || $[21] !== onRequestClose || $[22] !== visible) {
172
+ t6 = () => {
132
173
  if (visible && dismissible) {
133
174
  onRequestClose();
134
175
  }
135
176
  };
136
- $[23] = dismissible;
137
- $[24] = onRequestClose;
138
- $[25] = visible;
139
- $[26] = t5;
177
+ $[20] = dismissible;
178
+ $[21] = onRequestClose;
179
+ $[22] = visible;
180
+ $[23] = t6;
140
181
  } else {
141
- t5 = $[26];
182
+ t6 = $[23];
142
183
  }
143
- const requestClose = t5;
144
- let t6;
145
- if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
146
- t6 = [-8, 8];
147
- $[27] = t6;
184
+ const requestClose = t6;
185
+ let t7;
186
+ if ($[24] === Symbol.for("react.memo_cache_sentinel")) {
187
+ t7 = [-8, 8];
188
+ $[24] = t7;
148
189
  } else {
149
- t6 = $[27];
190
+ t7 = $[24];
150
191
  }
151
- let t7;
152
- if ($[28] !== dragStart || $[29] !== translateY) {
153
- t7 = () => {
192
+ let t8;
193
+ if ($[25] !== dragStart || $[26] !== translateY) {
194
+ t8 = () => {
154
195
  "worklet";
155
196
 
156
197
  dragStart.set(translateY.get());
157
198
  };
158
- $[28] = dragStart;
159
- $[29] = translateY;
160
- $[30] = t7;
199
+ $[25] = dragStart;
200
+ $[26] = translateY;
201
+ $[27] = t8;
161
202
  } else {
162
- t7 = $[30];
203
+ t8 = $[27];
163
204
  }
164
- let t8;
165
- if ($[31] !== dismissible || $[32] !== dragStart || $[33] !== hiddenOffset || $[34] !== restOffset || $[35] !== translateY) {
166
- t8 = event => {
205
+ let t9;
206
+ if ($[28] !== dismissible || $[29] !== dragStart || $[30] !== hiddenOffset || $[31] !== restOffset || $[32] !== translateY) {
207
+ t9 = event => {
167
208
  "worklet";
168
209
 
169
210
  const lowest = dismissible ? hiddenOffset : restOffset + 40;
170
211
  translateY.set(Math.min(Math.max(dragStart.get() + event.translationY, 0), lowest));
171
212
  };
172
- $[31] = dismissible;
173
- $[32] = dragStart;
174
- $[33] = hiddenOffset;
175
- $[34] = restOffset;
176
- $[35] = translateY;
177
- $[36] = t8;
213
+ $[28] = dismissible;
214
+ $[29] = dragStart;
215
+ $[30] = hiddenOffset;
216
+ $[31] = restOffset;
217
+ $[32] = translateY;
218
+ $[33] = t9;
178
219
  } else {
179
- t8 = $[36];
220
+ t9 = $[33];
180
221
  }
181
- let t9;
182
- if ($[37] !== dismissible || $[38] !== offsets || $[39] !== onRequestClose || $[40] !== panelHeight || $[41] !== restOffset || $[42] !== translateY) {
183
- t9 = event_0 => {
222
+ let t10;
223
+ if ($[34] !== dismissible || $[35] !== offsets || $[36] !== onRequestClose || $[37] !== panelHeight || $[38] !== restOffset || $[39] !== translateY) {
224
+ t10 = event_0 => {
184
225
  "worklet";
185
226
 
186
227
  const position = translateY.get();
@@ -200,37 +241,37 @@ export function SheetSurface(t0) {
200
241
  duration: DURATION_MS
201
242
  }));
202
243
  };
203
- $[37] = dismissible;
204
- $[38] = offsets;
205
- $[39] = onRequestClose;
206
- $[40] = panelHeight;
207
- $[41] = restOffset;
208
- $[42] = translateY;
209
- $[43] = t9;
244
+ $[34] = dismissible;
245
+ $[35] = offsets;
246
+ $[36] = onRequestClose;
247
+ $[37] = panelHeight;
248
+ $[38] = restOffset;
249
+ $[39] = translateY;
250
+ $[40] = t10;
210
251
  } else {
211
- t9 = $[43];
252
+ t10 = $[40];
212
253
  }
213
- let t10;
214
- if ($[44] !== t7 || $[45] !== t8 || $[46] !== t9) {
215
- t10 = {
216
- activeOffsetY: t6,
217
- onActivate: t7,
218
- onUpdate: t8,
219
- onDeactivate: t9
254
+ let t11;
255
+ if ($[41] !== t10 || $[42] !== t8 || $[43] !== t9) {
256
+ t11 = {
257
+ activeOffsetY: t7,
258
+ onActivate: t8,
259
+ onUpdate: t9,
260
+ onDeactivate: t10
220
261
  };
221
- $[44] = t7;
222
- $[45] = t8;
223
- $[46] = t9;
224
- $[47] = t10;
262
+ $[41] = t10;
263
+ $[42] = t8;
264
+ $[43] = t9;
265
+ $[44] = t11;
225
266
  } else {
226
- t10 = $[47];
267
+ t11 = $[44];
227
268
  }
228
- const pan = usePanGesture(t10);
269
+ const pan = usePanGesture(t11);
229
270
  const panelStyle = useAnimatedStyle(() => {
230
271
  const lifted = Math.abs(keyboard.height.get());
231
- const height = lifted > 0 ? Math.max(panelHeight, Math.min(ceiling, lifted + MIN_CONTENT_ABOVE_KEYBOARD)) : panelHeight;
272
+ const height_0 = lifted > 0 ? Math.max(panelHeight, Math.min(ceiling, lifted + MIN_CONTENT_ABOVE_KEYBOARD)) : panelHeight;
232
273
  return {
233
- height,
274
+ height: height_0,
234
275
  paddingBottom: Math.max(insets.bottom, lifted),
235
276
  transform: [{
236
277
  translateY: translateY.get()
@@ -245,171 +286,178 @@ export function SheetSurface(t0) {
245
286
  const backdropStyle = useAnimatedStyle(() => ({
246
287
  opacity: interpolate(translateY.get(), [restOffset, hiddenOffset], [1, 0], "clamp")
247
288
  }));
248
- const t11 = visible ? "box-none" : "none";
249
- let t12;
250
- if ($[48] !== backdropStyle) {
251
- t12 = [StyleSheet.absoluteFill, styles.backdrop, backdropStyle];
252
- $[48] = backdropStyle;
253
- $[49] = t12;
289
+ const t12 = visible ? "box-none" : "none";
290
+ let t13;
291
+ if ($[45] !== backdropStyle) {
292
+ t13 = [StyleSheet.absoluteFill, styles.backdrop, backdropStyle];
293
+ $[45] = backdropStyle;
294
+ $[46] = t13;
254
295
  } else {
255
- t12 = $[49];
296
+ t13 = $[46];
256
297
  }
257
- const t13 = dismissible ? "Cerrar" : undefined;
258
- const t14 = dismissible ? "button" : undefined;
259
- const t15 = testID ? `${testID}-backdrop` : undefined;
260
- let t16;
261
- if ($[50] !== dismissible || $[51] !== requestClose || $[52] !== t13 || $[53] !== t14 || $[54] !== t15) {
262
- t16 = _jsx(Pressable, {
263
- accessibilityLabel: t13,
264
- accessibilityRole: t14,
298
+ const t14 = dismissible ? "Cerrar" : undefined;
299
+ const t15 = dismissible ? "button" : undefined;
300
+ const t16 = testID ? `${testID}-backdrop` : undefined;
301
+ let t17;
302
+ if ($[47] !== dismissible || $[48] !== requestClose || $[49] !== t14 || $[50] !== t15 || $[51] !== t16) {
303
+ t17 = _jsx(Pressable, {
304
+ accessibilityLabel: t14,
305
+ accessibilityRole: t15,
265
306
  accessible: dismissible,
266
307
  onPress: requestClose,
267
308
  style: StyleSheet.absoluteFill,
268
- testID: t15
309
+ testID: t16
269
310
  });
270
- $[50] = dismissible;
271
- $[51] = requestClose;
272
- $[52] = t13;
273
- $[53] = t14;
274
- $[54] = t15;
275
- $[55] = t16;
311
+ $[47] = dismissible;
312
+ $[48] = requestClose;
313
+ $[49] = t14;
314
+ $[50] = t15;
315
+ $[51] = t16;
316
+ $[52] = t17;
276
317
  } else {
277
- t16 = $[55];
318
+ t17 = $[52];
278
319
  }
279
- let t17;
280
- if ($[56] !== t12 || $[57] !== t16) {
281
- t17 = _jsx(Animated.View, {
282
- style: t12,
283
- children: t16
320
+ let t18;
321
+ if ($[53] !== t13 || $[54] !== t17) {
322
+ t18 = _jsx(Animated.View, {
323
+ style: t13,
324
+ children: t17
284
325
  });
285
- $[56] = t12;
286
- $[57] = t16;
287
- $[58] = t17;
326
+ $[53] = t13;
327
+ $[54] = t17;
328
+ $[55] = t18;
288
329
  } else {
289
- t17 = $[58];
330
+ t18 = $[55];
290
331
  }
291
- let t18;
292
- if ($[59] !== theme.bg.card) {
293
- t18 = {
332
+ let t19;
333
+ if ($[56] !== theme.bg.card) {
334
+ t19 = {
294
335
  backgroundColor: theme.bg.card
295
336
  };
296
- $[59] = theme.bg.card;
297
- $[60] = t18;
337
+ $[56] = theme.bg.card;
338
+ $[57] = t19;
298
339
  } else {
299
- t18 = $[60];
340
+ t19 = $[57];
300
341
  }
301
- let t19;
302
- if ($[61] !== panelStyle || $[62] !== t18) {
303
- t19 = [styles.panel, t18, panelStyle];
304
- $[61] = panelStyle;
305
- $[62] = t18;
306
- $[63] = t19;
342
+ let t20;
343
+ if ($[58] !== panelStyle || $[59] !== t19) {
344
+ t20 = [styles.panel, t19, panelStyle];
345
+ $[58] = panelStyle;
346
+ $[59] = t19;
347
+ $[60] = t20;
307
348
  } else {
308
- t19 = $[63];
349
+ t20 = $[60];
309
350
  }
310
- let t20;
311
- if ($[64] !== theme.border.default) {
312
- t20 = _jsx(View, {
351
+ let t21;
352
+ if ($[61] !== theme.border.default) {
353
+ t21 = _jsx(View, {
313
354
  style: [styles.handle, {
314
355
  backgroundColor: theme.border.default
315
356
  }]
316
357
  });
317
- $[64] = theme.border.default;
318
- $[65] = t20;
358
+ $[61] = theme.border.default;
359
+ $[62] = t21;
319
360
  } else {
320
- t20 = $[65];
361
+ t21 = $[62];
321
362
  }
322
- let t21;
323
- if ($[66] !== header || $[67] !== t20) {
324
- t21 = _jsxs(View, {
363
+ let t22;
364
+ if ($[63] !== header || $[64] !== t21) {
365
+ t22 = _jsxs(View, {
325
366
  style: styles.handleArea,
326
- children: [t20, header]
367
+ children: [t21, header]
327
368
  });
328
- $[66] = header;
329
- $[67] = t20;
330
- $[68] = t21;
369
+ $[63] = header;
370
+ $[64] = t21;
371
+ $[65] = t22;
331
372
  } else {
332
- t21 = $[68];
373
+ t22 = $[65];
333
374
  }
334
- let t22;
335
- if ($[69] !== pan || $[70] !== t21) {
336
- t22 = _jsx(GestureDetector, {
375
+ let t23;
376
+ if ($[66] !== pan || $[67] !== t22) {
377
+ t23 = _jsx(GestureDetector, {
337
378
  gesture: pan,
338
- children: t21
379
+ children: t22
339
380
  });
340
- $[69] = pan;
341
- $[70] = t21;
342
- $[71] = t22;
381
+ $[66] = pan;
382
+ $[67] = t22;
383
+ $[68] = t23;
343
384
  } else {
344
- t22 = $[71];
385
+ t23 = $[68];
345
386
  }
346
- let t23;
347
- if ($[72] !== children) {
348
- t23 = _jsx(KeyboardToolbar.Group, {
387
+ let t24;
388
+ if ($[69] !== children || $[70] !== restOffset) {
389
+ t24 = _jsx(KeyboardToolbar.Group, {
349
390
  style: styles.content,
350
- children: children
391
+ children: _jsx(RestingOffsetContext, {
392
+ value: restOffset,
393
+ children: children
394
+ })
351
395
  });
352
- $[72] = children;
353
- $[73] = t23;
396
+ $[69] = children;
397
+ $[70] = restOffset;
398
+ $[71] = t24;
354
399
  } else {
355
- t23 = $[73];
400
+ t24 = $[71];
356
401
  }
357
- let t24;
358
- if ($[74] !== footer || $[75] !== footerStyle || $[76] !== theme.bg.card) {
359
- t24 = footer ? _jsx(Animated.View, {
402
+ let t25;
403
+ if ($[72] !== available || $[73] !== footer || $[74] !== footerStyle || $[75] !== theme.bg.card) {
404
+ t25 = footer ? _jsxs(Animated.View, {
360
405
  style: [{
361
406
  backgroundColor: theme.bg.card
362
407
  }, footerStyle],
363
- children: footer
408
+ children: [footer, _jsx(View, {
409
+ pointerEvents: "none",
410
+ style: [styles.footerSkirt, {
411
+ backgroundColor: theme.bg.card,
412
+ height: available
413
+ }]
414
+ })]
364
415
  }) : null;
365
- $[74] = footer;
366
- $[75] = footerStyle;
367
- $[76] = theme.bg.card;
368
- $[77] = t24;
416
+ $[72] = available;
417
+ $[73] = footer;
418
+ $[74] = footerStyle;
419
+ $[75] = theme.bg.card;
420
+ $[76] = t25;
369
421
  } else {
370
- t24 = $[77];
422
+ t25 = $[76];
371
423
  }
372
- let t25;
373
- if ($[78] !== requestClose || $[79] !== t19 || $[80] !== t22 || $[81] !== t23 || $[82] !== t24 || $[83] !== testID) {
374
- t25 = _jsxs(Animated.View, {
424
+ let t26;
425
+ if ($[77] !== requestClose || $[78] !== t20 || $[79] !== t23 || $[80] !== t24 || $[81] !== t25 || $[82] !== testID) {
426
+ t26 = _jsxs(Animated.View, {
375
427
  accessibilityViewIsModal: true,
376
428
  importantForAccessibility: "yes",
377
429
  onAccessibilityEscape: requestClose,
378
- style: t19,
430
+ style: t20,
379
431
  testID: testID,
380
- children: [t22, t23, t24]
432
+ children: [t23, t24, t25]
381
433
  });
382
- $[78] = requestClose;
383
- $[79] = t19;
384
- $[80] = t22;
385
- $[81] = t23;
386
- $[82] = t24;
387
- $[83] = testID;
388
- $[84] = t25;
434
+ $[77] = requestClose;
435
+ $[78] = t20;
436
+ $[79] = t23;
437
+ $[80] = t24;
438
+ $[81] = t25;
439
+ $[82] = testID;
440
+ $[83] = t26;
389
441
  } else {
390
- t25 = $[84];
442
+ t26 = $[83];
391
443
  }
392
- let t26;
393
- if ($[85] !== t11 || $[86] !== t17 || $[87] !== t25) {
394
- t26 = _jsxs(View, {
395
- pointerEvents: t11,
444
+ let t27;
445
+ if ($[84] !== t12 || $[85] !== t18 || $[86] !== t26) {
446
+ t27 = _jsxs(View, {
447
+ onLayout: measureHost,
448
+ pointerEvents: t12,
449
+ ref: frame,
396
450
  style: StyleSheet.absoluteFill,
397
- children: [t17, t25]
451
+ children: [t18, t26]
398
452
  });
399
- $[85] = t11;
400
- $[86] = t17;
401
- $[87] = t25;
402
- $[88] = t26;
453
+ $[84] = t12;
454
+ $[85] = t18;
455
+ $[86] = t26;
456
+ $[87] = t27;
403
457
  } else {
404
- t26 = $[88];
458
+ t27 = $[87];
405
459
  }
406
- return t26;
407
- }
408
- function _temp2(a_0, b_0) {
409
- return b_0 - a_0;
410
- }
411
- function _temp(a, b) {
412
- return a - b;
460
+ return t27;
413
461
  }
414
462
  const styles = StyleSheet.create({
415
463
  backdrop: {
@@ -428,6 +476,12 @@ const styles = StyleSheet.create({
428
476
  flex: 1,
429
477
  minHeight: 0
430
478
  },
479
+ footerSkirt: {
480
+ position: "absolute",
481
+ left: 0,
482
+ right: 0,
483
+ top: "100%"
484
+ },
431
485
  handleArea: {
432
486
  paddingTop: 8
433
487
  },
@@ -0,0 +1,15 @@
1
+ import type { DocumentRenderer } from "./document-renderer.js";
2
+ import type { DocumentSource } from "../utils/document.js";
3
+ export interface DocumentPreviewProps {
4
+ source: DocumentSource;
5
+ title?: string;
6
+ height?: number;
7
+ fit?: "top" | "contain";
8
+ onPress?: () => void;
9
+ renderer?: DocumentRenderer;
10
+ className?: string;
11
+ testID?: string;
12
+ }
13
+ declare function DocumentPreview({ source, title, height, fit, onPress, renderer, className, testID, }: DocumentPreviewProps): import("react").JSX.Element;
14
+ export default DocumentPreview;
15
+ export { DocumentPreview };