@btndprojects/loam-ui-native 0.1.0 → 0.2.1

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 (263) hide show
  1. package/README.md +56 -0
  2. package/dist/accordion/index.js +5 -3
  3. package/dist/adaptive/index.js +6 -2
  4. package/dist/alert/index.js +5 -2
  5. package/dist/analyzer/index.js +9 -6
  6. package/dist/announcement/index.js +8 -5
  7. package/dist/audio-player/index.js +5 -3
  8. package/dist/avatar/index.js +5 -2
  9. package/dist/avatar-group/index.js +7 -3
  10. package/dist/badge/index.js +7 -4
  11. package/dist/banner/index.js +5 -2
  12. package/dist/board/index.js +11 -6
  13. package/dist/button/index.js +6 -3
  14. package/dist/camera-permission/index.js +15 -12
  15. package/dist/capture-result/index.js +19 -16
  16. package/dist/card/index.js +6 -3
  17. package/dist/card-form/index.js +12 -8
  18. package/dist/carousel/index.js +4 -2
  19. package/dist/chart/index.js +8 -5
  20. package/dist/charts/index.js +8 -6
  21. package/dist/chat/index.js +16 -0
  22. package/dist/checkbox/index.js +6 -4
  23. package/dist/checklist/index.js +11 -8
  24. package/dist/checkout/index.js +16 -11
  25. package/dist/chip/index.js +7 -4
  26. package/dist/{chunk-XNUVB5OL.js → chunk-2OLKPG4E.js} +92 -28
  27. package/dist/{chunk-RUZHTGKB.js → chunk-2PKYGLQ6.js} +71 -40
  28. package/dist/{chunk-UC2WGUP3.js → chunk-2SWKL3AJ.js} +91 -252
  29. package/dist/{chunk-AI4DWZCD.js → chunk-2SY63FCH.js} +63 -16
  30. package/dist/{chunk-F5XNPWS7.js → chunk-2TXERVVA.js} +92 -35
  31. package/dist/chunk-36EC2T6P.js +581 -0
  32. package/dist/chunk-3DUWIYV5.js +437 -0
  33. package/dist/{chunk-RGQWWKLA.js → chunk-3QMEOFW5.js} +275 -71
  34. package/dist/chunk-3WEZCGHX.js +265 -0
  35. package/dist/chunk-46MMSDGL.js +194 -0
  36. package/dist/{chunk-7O2FMUPT.js → chunk-4IZXHVFJ.js} +297 -92
  37. package/dist/{chunk-LAECSR4H.js → chunk-5LAAAXFP.js} +14 -8
  38. package/dist/{chunk-2A5NIQAK.js → chunk-5RENVKBQ.js} +134 -46
  39. package/dist/{chunk-2ZZ7TDJ4.js → chunk-5UTRIXQ6.js} +37 -31
  40. package/dist/{chunk-LOE5YNN3.js → chunk-5VFZRGVD.js} +37 -10
  41. package/dist/{chunk-52X2VYTD.js → chunk-67IZZ2MJ.js} +115 -60
  42. package/dist/{chunk-UYG5L34B.js → chunk-6YAQBXB3.js} +10 -4
  43. package/dist/{chunk-BTTFCMKG.js → chunk-74FLKD24.js} +94 -23
  44. package/dist/{chunk-ITTYJZWX.js → chunk-7BUIKDD6.js} +73 -18
  45. package/dist/{chunk-FOKG57CR.js → chunk-7OVVSVEZ.js} +273 -109
  46. package/dist/chunk-AEB7KCHQ.js +287 -0
  47. package/dist/chunk-APCWFOZW.js +28 -0
  48. package/dist/chunk-AWKQIE5I.js +139 -0
  49. package/dist/{chunk-VCDBXW5H.js → chunk-B7N4ASYE.js} +86 -42
  50. package/dist/{chunk-IVNRBPGC.js → chunk-C4GTDLRC.js} +104 -20
  51. package/dist/{chunk-4ZAHCY44.js → chunk-C6APNDVA.js} +12 -5
  52. package/dist/{chunk-4SZYY6AN.js → chunk-CMTVNF3D.js} +18 -13
  53. package/dist/{chunk-WVKKJA6U.js → chunk-CPTOADB2.js} +151 -96
  54. package/dist/chunk-D5N5QWI7.js +1325 -0
  55. package/dist/{chunk-IIQTAY3J.js → chunk-DN7MNQIP.js} +113 -29
  56. package/dist/{chunk-47FWHGUN.js → chunk-DVGBZ3TX.js} +84 -23
  57. package/dist/chunk-DW3L54DQ.js +305 -0
  58. package/dist/{chunk-3ARE4TES.js → chunk-E2E3I5W2.js} +69 -18
  59. package/dist/{chunk-DHWADYZX.js → chunk-EDCBJV7J.js} +41 -28
  60. package/dist/{chunk-WSW6ZFAQ.js → chunk-ENP3BMZU.js} +4 -4
  61. package/dist/{chunk-OOPPQH27.js → chunk-EVOIGUBI.js} +43 -19
  62. package/dist/{chunk-VEAYTRPX.js → chunk-EY4DD67D.js} +165 -97
  63. package/dist/{chunk-223Q2T2Q.js → chunk-F3H33DQX.js} +132 -61
  64. package/dist/{chunk-CYRBHQQZ.js → chunk-F5B3UINI.js} +68 -35
  65. package/dist/{chunk-6X6PQ443.js → chunk-FAJI7BSC.js} +20 -9
  66. package/dist/{chunk-MOUJOP55.js → chunk-FUMHAAF3.js} +96 -29
  67. package/dist/{chunk-6HT2LP62.js → chunk-FV6HMP7W.js} +192 -73
  68. package/dist/{chunk-S7F6XLTK.js → chunk-FYWNRX4F.js} +76 -47
  69. package/dist/{chunk-YG3ZJHGU.js → chunk-FZGAAOKS.js} +30 -8
  70. package/dist/{chunk-YDGVJETP.js → chunk-G3AFC24V.js} +1 -1
  71. package/dist/{chunk-EJBDRVIH.js → chunk-G6UESEVN.js} +15 -8
  72. package/dist/chunk-GDKVKNR2.js +339 -0
  73. package/dist/chunk-GEIGMWNF.js +10 -0
  74. package/dist/{chunk-JUAMLEHX.js → chunk-H7DWSL4O.js} +24 -12
  75. package/dist/chunk-HJFFOOJ4.js +1 -0
  76. package/dist/{chunk-RW6ZL2FQ.js → chunk-HJLPZA4X.js} +106 -21
  77. package/dist/chunk-HYEOQWT7.js +647 -0
  78. package/dist/chunk-I2KLQ2HA.js +19 -0
  79. package/dist/{chunk-CJ5EOYZE.js → chunk-I4FHVKEC.js} +11 -5
  80. package/dist/{chunk-JNH2TYIN.js → chunk-IDM7JJMO.js} +19 -5
  81. package/dist/{chunk-O4AEHWII.js → chunk-IPUNJMAQ.js} +141 -49
  82. package/dist/{chunk-J7Q7VCVC.js → chunk-IT6FUXXG.js} +13 -6
  83. package/dist/{chunk-QJJ6MADV.js → chunk-IVKMZ7BB.js} +80 -28
  84. package/dist/{chunk-Z7H7VSFZ.js → chunk-IXKWIFWZ.js} +17 -6
  85. package/dist/chunk-J64KGCGX.js +55 -0
  86. package/dist/chunk-JBMLWFSJ.js +270 -0
  87. package/dist/{chunk-4BXMXBJO.js → chunk-JJLPBRVZ.js} +22 -11
  88. package/dist/chunk-JLC6PM5S.js +406 -0
  89. package/dist/chunk-JUYWSSKW.js +335 -0
  90. package/dist/{chunk-7CFF4HXS.js → chunk-JV5YOTOB.js} +49 -11
  91. package/dist/{chunk-LZLHELAG.js → chunk-KFJGFLMW.js} +29 -8
  92. package/dist/{chunk-O7AE6DAF.js → chunk-KQZ3GLHR.js} +18 -8
  93. package/dist/{chunk-N32RGOA5.js → chunk-LKFC4CS7.js} +80 -24
  94. package/dist/{chunk-YC6WORFL.js → chunk-LMPHCVJJ.js} +82 -50
  95. package/dist/{chunk-3WPW4KUN.js → chunk-LQP4KEXZ.js} +45 -13
  96. package/dist/{chunk-TKQYWZ5V.js → chunk-LUMVGO2K.js} +47 -31
  97. package/dist/{chunk-AWJOCGFZ.js → chunk-M656FYNH.js} +25 -13
  98. package/dist/{chunk-35OFI3JG.js → chunk-MKSNFG7H.js} +73 -20
  99. package/dist/{chunk-4GBOGOTV.js → chunk-NBEF4EPJ.js} +16 -6
  100. package/dist/chunk-NNCOFLNE.js +24 -0
  101. package/dist/{chunk-4YQOR7JM.js → chunk-NTQ2F3AU.js} +73 -20
  102. package/dist/{chunk-QCDXZBC5.js → chunk-O5V4TG3V.js} +126 -44
  103. package/dist/{chunk-U7TFM2JA.js → chunk-OJQUBQWA.js} +3 -3
  104. package/dist/{chunk-VQHPQEUH.js → chunk-OWAMM2DK.js} +13 -6
  105. package/dist/chunk-PID3NJB7.js +405 -0
  106. package/dist/{chunk-66SG2H23.js → chunk-PMMTGBBS.js} +27 -17
  107. package/dist/{chunk-RIBDXGUG.js → chunk-PNF3NKB5.js} +49 -16
  108. package/dist/{chunk-JXJB2X6M.js → chunk-Q6NKEPRE.js} +81 -32
  109. package/dist/chunk-QDZGFXQD.js +176 -0
  110. package/dist/{chunk-SYNOJOQO.js → chunk-QEYFDRHR.js} +60 -26
  111. package/dist/{chunk-VBOXAEPI.js → chunk-QHAITQIF.js} +97 -22
  112. package/dist/{chunk-VXDZFJGP.js → chunk-QHTVYA65.js} +230 -76
  113. package/dist/{chunk-TUTI5HOZ.js → chunk-QIKT7LIB.js} +14 -8
  114. package/dist/{chunk-3ENTMPQY.js → chunk-QP3KMOVF.js} +82 -42
  115. package/dist/{chunk-GNNJ4GCC.js → chunk-QPWDDJJ4.js} +62 -148
  116. package/dist/{chunk-QWCMU5B2.js → chunk-QRUMA22E.js} +205 -80
  117. package/dist/{chunk-ZVFE5QGU.js → chunk-QYPE5JX3.js} +50 -10
  118. package/dist/{chunk-PUPM2YGF.js → chunk-ROCUG24E.js} +76 -36
  119. package/dist/{chunk-NQYBUO3K.js → chunk-RU3ZPNL6.js} +333 -142
  120. package/dist/{chunk-TOXAGRDQ.js → chunk-RXSCIO6W.js} +14 -5
  121. package/dist/{chunk-FIF2M24N.js → chunk-SATMR6SG.js} +631 -203
  122. package/dist/{chunk-4YIP3CWS.js → chunk-SHHY5OMK.js} +7 -5
  123. package/dist/chunk-SKWO3SZF.js +2284 -0
  124. package/dist/{chunk-YF4NSSMT.js → chunk-SWS5JQIF.js} +41 -13
  125. package/dist/{chunk-CUMUNPXY.js → chunk-T5LTPKX6.js} +15 -7
  126. package/dist/{chunk-H6NIOQHK.js → chunk-TDMG26JI.js} +26 -6
  127. package/dist/{chunk-UWFLYMAR.js → chunk-TLCIR6RG.js} +267 -126
  128. package/dist/{chunk-SBMNWWBV.js → chunk-TN2ZNJUI.js} +47 -9
  129. package/dist/{chunk-5YNTNN5A.js → chunk-TQVAIKFD.js} +106 -41
  130. package/dist/chunk-TRGFFU6A.js +1456 -0
  131. package/dist/{chunk-2GK6PHGE.js → chunk-TY4MTKQJ.js} +100 -22
  132. package/dist/{chunk-AZRX6SAC.js → chunk-U23FYWME.js} +15 -7
  133. package/dist/{chunk-PZXZJBMP.js → chunk-U5NLHYV6.js} +26 -12
  134. package/dist/chunk-UQEN55EY.js +1 -0
  135. package/dist/chunk-UQGBTPXH.js +218 -0
  136. package/dist/chunk-UXGIW7OK.js +116 -0
  137. package/dist/{chunk-PJXUJYS6.js → chunk-UYGDJWMN.js} +55 -30
  138. package/dist/{chunk-QDYDBCFP.js → chunk-V2OEB75Z.js} +50 -51
  139. package/dist/{chunk-LSS54GLJ.js → chunk-VAOAKWUK.js} +34 -13
  140. package/dist/{chunk-DM5QUKKO.js → chunk-VDPK5CY4.js} +18 -6
  141. package/dist/chunk-W23G6JLF.js +37 -0
  142. package/dist/{chunk-CDRZHT42.js → chunk-W63AJTM7.js} +276 -12
  143. package/dist/{chunk-XXXEFXY5.js → chunk-W74TXYFB.js} +13 -5
  144. package/dist/{chunk-LRJNDEIA.js → chunk-WRDSPUE7.js} +144 -29
  145. package/dist/{chunk-C2NTXVWM.js → chunk-XBZGDDMR.js} +11 -4
  146. package/dist/{chunk-BV3B2HYZ.js → chunk-XIDTBCBA.js} +189 -131
  147. package/dist/{chunk-DSJBXLUG.js → chunk-XN4KG3P4.js} +348 -153
  148. package/dist/chunk-XQXMLMH3.js +211 -0
  149. package/dist/{chunk-HPPW424V.js → chunk-XTORZWRF.js} +19 -8
  150. package/dist/{chunk-P23EQNRQ.js → chunk-YAAHPATV.js} +181 -30
  151. package/dist/{chunk-KMI5ML5I.js → chunk-YXOAPXMU.js} +57 -18
  152. package/dist/{chunk-RJQOOHT2.js → chunk-ZECZOOSB.js} +59 -28
  153. package/dist/{chunk-QKXCPTFS.js → chunk-ZLTO5VQI.js} +121 -31
  154. package/dist/{chunk-BEDBFJND.js → chunk-ZVATDZOM.js} +16 -18
  155. package/dist/coachmark/index.js +6 -3
  156. package/dist/code-block/index.js +5 -3
  157. package/dist/color-field/index.js +6 -4
  158. package/dist/commerce/index.js +19 -16
  159. package/dist/connectivity/index.js +5 -2
  160. package/dist/context-menu/index.js +5 -3
  161. package/dist/copy-button/index.js +4 -2
  162. package/dist/data-grid/index.js +21 -16
  163. package/dist/date-range-picker/index.js +11 -8
  164. package/dist/description-list/index.js +3 -1
  165. package/dist/dialog/index.js +4 -2
  166. package/dist/empty-state/index.js +4 -2
  167. package/dist/error-summary/index.js +4 -2
  168. package/dist/fab/index.js +5 -2
  169. package/dist/file-manager/index.js +28 -0
  170. package/dist/file-upload/index.js +10 -7
  171. package/dist/filter-bar/index.js +9 -6
  172. package/dist/flow-run/index.js +15 -12
  173. package/dist/form/index.js +5 -3
  174. package/dist/gallery/index.js +5 -2
  175. package/dist/hold-to-confirm/index.js +4 -2
  176. package/dist/index.d.ts +9557 -2985
  177. package/dist/index.js +355 -122
  178. package/dist/infinite-list/index.js +4 -2
  179. package/dist/inline-edit/index.js +6 -4
  180. package/dist/input/index.js +5 -3
  181. package/dist/interactions/index.js +2 -1
  182. package/dist/invoice/index.js +13 -9
  183. package/dist/kbd/index.js +5 -1
  184. package/dist/keyboard/index.js +4 -2
  185. package/dist/list-row/index.js +6 -4
  186. package/dist/log-viewer/index.js +4 -2
  187. package/dist/map-view/index.js +5 -3
  188. package/dist/markdown/index.js +9 -6
  189. package/dist/metric/index.js +7 -4
  190. package/dist/money/index.js +9 -3
  191. package/dist/nav-drawer/index.js +4 -2
  192. package/dist/nav-header/index.js +9 -0
  193. package/dist/navigation/index.js +5 -2
  194. package/dist/notification-center/index.js +12 -10
  195. package/dist/number-roll/index.js +5 -2
  196. package/dist/one-handed/index.js +5 -3
  197. package/dist/os-surfaces/index.js +6 -3
  198. package/dist/otp/index.js +7 -4
  199. package/dist/page-header/index.js +1 -0
  200. package/dist/pagination/index.js +6 -0
  201. package/dist/payment-method/index.js +14 -10
  202. package/dist/payment-status/index.js +17 -14
  203. package/dist/permission/index.js +5 -2
  204. package/dist/picker/index.js +11 -6
  205. package/dist/progress/index.js +6 -3
  206. package/dist/pull-to-refresh/index.js +4 -2
  207. package/dist/radio-group/index.js +6 -4
  208. package/dist/rating/index.js +5 -2
  209. package/dist/receivables/index.js +21 -16
  210. package/dist/refund/index.js +18 -14
  211. package/dist/save-status/index.js +5 -3
  212. package/dist/scroll-area/index.js +3 -1
  213. package/dist/search-field/index.js +8 -0
  214. package/dist/segmented-control/index.js +4 -3
  215. package/dist/sheet/index.js +5 -3
  216. package/dist/skeleton/index.js +3 -1
  217. package/dist/slider/index.js +4 -2
  218. package/dist/sortable/index.js +7 -0
  219. package/dist/spinner/index.js +3 -1
  220. package/dist/split-button/index.js +9 -6
  221. package/dist/spotlight/index.js +3 -1
  222. package/dist/stage-timeline/index.js +5 -3
  223. package/dist/status-dot/index.js +4 -2
  224. package/dist/stepper/index.js +7 -4
  225. package/dist/streaming-text/index.js +3 -2
  226. package/dist/survey/index.js +18 -15
  227. package/dist/switch/index.js +5 -3
  228. package/dist/system-state/index.js +7 -4
  229. package/dist/tab-bar/index.js +5 -2
  230. package/dist/tabs/index.js +4 -2
  231. package/dist/tags-input/index.js +10 -0
  232. package/dist/textarea/index.js +6 -4
  233. package/dist/thinking/index.js +3 -1
  234. package/dist/time-field/index.js +12 -0
  235. package/dist/time-range-control/index.js +22 -0
  236. package/dist/timeline/index.js +4 -2
  237. package/dist/toast/index.js +4 -2
  238. package/dist/toolbar/index.js +4 -2
  239. package/dist/tour/index.js +12 -9
  240. package/dist/truncation-notice/index.js +5 -2
  241. package/dist/update-notice/index.js +12 -9
  242. package/dist/video-player/index.js +5 -2
  243. package/dist/viewfinder/index.js +6 -4
  244. package/dist/widget/index.js +7 -4
  245. package/dist/wizard/index.js +7 -4
  246. package/package.json +13 -12
  247. package/dist/chunk-6N33LFQA.js +0 -35
  248. package/dist/chunk-GDKZTW34.js +0 -395
  249. package/dist/chunk-GL7B2DOW.js +0 -134
  250. package/dist/chunk-NKB7BZYK.js +0 -167
  251. package/dist/chunk-OETCUXQP.js +0 -134
  252. package/dist/chunk-OPXFZ4Y5.js +0 -204
  253. package/dist/chunk-Q72LJOVE.js +0 -169
  254. package/dist/chunk-RNGLIHFA.js +0 -191
  255. package/dist/chunk-RQ3HASCC.js +0 -6
  256. package/dist/chunk-RSOJT5YW.js +0 -124
  257. package/dist/chunk-TKVFVF5D.js +0 -95
  258. package/dist/chunk-XOSCY2CW.js +0 -242
  259. package/dist/header/index.js +0 -5
  260. package/dist/search-bar/index.js +0 -5
  261. /package/dist/{chunk-3ECPOSKO.js → chunk-3UG6JUCV.js} +0 -0
  262. /package/dist/{chunk-JRLTGLN4.js → chunk-5WWRTEPS.js} +0 -0
  263. /package/dist/{chunk-RTIKSY6A.js → chunk-5Z5ZYMOJ.js} +0 -0
@@ -0,0 +1,647 @@
1
+ import { DEFAULT_LABELS } from './chunk-JV5YOTOB.js';
2
+ import { SummaryItemRow, PriceRow, Amount, FxNote } from './chunk-QHAITQIF.js';
3
+ import { Sheet } from './chunk-QYPE5JX3.js';
4
+ import { Input } from './chunk-7BUIKDD6.js';
5
+ import { Badge } from './chunk-TN2ZNJUI.js';
6
+ import { expandedProps } from './chunk-W23G6JLF.js';
7
+ import { Button } from './chunk-E2E3I5W2.js';
8
+ import { haptics } from './chunk-NY2U3PBI.js';
9
+ import { useLabels, useLoamLocale } from './chunk-APCWFOZW.js';
10
+ import { Icon } from './chunk-UXGIW7OK.js';
11
+ import { useResolvedMotion, springConfig, motionTiming } from './chunk-J64KGCGX.js';
12
+ import * as React4 from 'react';
13
+ import { StyleSheet, Text, View, AccessibilityInfo, Pressable, LayoutAnimation, Animated } from 'react-native';
14
+ import { createStyleSheet, useLoamTheme, useStyles } from '@btndprojects/loam-theme-native';
15
+ import { SHEET_DISMISS_FRACTION } from '@btndprojects/loam-pay';
16
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
17
+ import { icons } from '@btndprojects/loam-icons';
18
+
19
+ function CheckoutSheet({
20
+ open,
21
+ title,
22
+ titleLevel,
23
+ description,
24
+ children,
25
+ commit,
26
+ trust,
27
+ dismissible = true,
28
+ safeAreaBottom = 0,
29
+ closeLabel,
30
+ style,
31
+ onDismiss
32
+ }) {
33
+ const theme = useLoamTheme("checkout");
34
+ const { styles: styles2 } = useStyles(sheet);
35
+ return /* @__PURE__ */ jsxs(
36
+ Sheet,
37
+ {
38
+ open,
39
+ title,
40
+ titleLevel,
41
+ dismissible,
42
+ closeLabel,
43
+ dismissFraction: SHEET_DISMISS_FRACTION,
44
+ onClose: onDismiss,
45
+ footer: (
46
+ /* The commit bar, outside the scroller. `safeAreaBottom` is padding on
47
+ the bar rather than a margin under it — or `Sheet.safeAreaBottom`, a
48
+ slot padding that would push this bar's own fill up off the screen
49
+ edge — so the surface still reaches the home indicator. */
50
+ /* @__PURE__ */ jsxs(View, { style: [styles2.commitBar, { paddingBottom: theme.space.s4 + safeAreaBottom }], children: [
51
+ commit,
52
+ trust
53
+ ] })
54
+ ),
55
+ children: [
56
+ description ? /* @__PURE__ */ jsx(Text, { style: styles2.description, children: description }) : null,
57
+ /* @__PURE__ */ jsx(View, { style: [styles2.body, style], children })
58
+ ]
59
+ }
60
+ );
61
+ }
62
+ var sheet = createStyleSheet((theme) => ({
63
+ description: {
64
+ fontFamily: theme.font.sans,
65
+ fontSize: theme.type.footnote.fontSize,
66
+ lineHeight: theme.type.footnote.fontSize * theme.lineHeight.normal,
67
+ color: theme.color.text2
68
+ },
69
+ body: { gap: theme.space.s4 },
70
+ // The bar reads as a bar rather than as another block in the form: its own
71
+ // fill, a hairline above it, and the safe-area inset folded into its bottom
72
+ // padding at the use site. The horizontal padding is the bar's own now that it
73
+ // lives in `Sheet`'s footer slot, which is deliberately full-bleed — so the
74
+ // hairline spans the panel while the button keeps the body's gutter.
75
+ commitBar: {
76
+ gap: theme.space.s3,
77
+ paddingTop: theme.space.s4,
78
+ paddingHorizontal: theme.space[22],
79
+ borderTopWidth: theme.borderWidth.base,
80
+ borderTopColor: theme.color.border,
81
+ backgroundColor: theme.color.surface
82
+ }
83
+ }));
84
+ function PayButton({
85
+ label,
86
+ state,
87
+ busyLabel,
88
+ validatingLabel,
89
+ doneLabel,
90
+ showLock = true,
91
+ fullWidth = true,
92
+ size = "lg",
93
+ accessibilityLabel,
94
+ labels: labelsProp,
95
+ style,
96
+ onPress
97
+ }) {
98
+ const labels = useLabels("checkout", DEFAULT_LABELS, labelsProp);
99
+ const theme = useLoamTheme("checkout");
100
+ const { styles: styles2 } = useStyles(sheet2);
101
+ const [idleWidth, setIdleWidth] = React4.useState(null);
102
+ const resting = state === "idle";
103
+ const busy = state === "validating" || state === "busy";
104
+ const onLayout = (event) => {
105
+ if (!resting || fullWidth) return;
106
+ const next = event.nativeEvent.layout.width;
107
+ if (next <= 0) return;
108
+ setIdleWidth((prev) => prev !== null && Math.abs(prev - next) < 1 ? prev : next);
109
+ };
110
+ const currentLabel = resting ? label : state === "validating" ? validatingLabel ?? labels.checking : state === "busy" ? busyLabel ?? labels.paying : doneLabel ?? labels.paid;
111
+ const spoken = React4.useRef(state);
112
+ React4.useEffect(() => {
113
+ if (spoken.current === state) return;
114
+ spoken.current = state;
115
+ if (state !== "idle" && typeof currentLabel === "string") {
116
+ AccessibilityInfo.announceForAccessibility?.(currentLabel);
117
+ }
118
+ }, [state, currentLabel]);
119
+ const leadingIcon = resting && showLock ? "lock" : state === "done" ? "check" : void 0;
120
+ return /* @__PURE__ */ jsx(
121
+ View,
122
+ {
123
+ onLayout,
124
+ style: [
125
+ fullWidth ? styles2.wrapFull : styles2.wrapAuto,
126
+ // The frozen width, and only while the label is not the resting one.
127
+ !resting && !fullWidth && idleWidth !== null ? { minWidth: idleWidth } : null,
128
+ style
129
+ ],
130
+ children: /* @__PURE__ */ jsx(
131
+ Button,
132
+ {
133
+ size,
134
+ fullWidth: true,
135
+ loading: busy,
136
+ leadingIcon,
137
+ accessibilityLabel: resting ? accessibilityLabel : void 0,
138
+ onPress: () => {
139
+ if (!resting) return;
140
+ onPress();
141
+ },
142
+ children: typeof currentLabel === "string" ? currentLabel : /* @__PURE__ */ jsx(View, { style: styles2.labelRow, children: typeof currentLabel === "number" ? /* @__PURE__ */ jsx(Text, { style: [styles2.label, { color: theme.color.accentInk }], children: currentLabel }) : currentLabel })
143
+ }
144
+ )
145
+ }
146
+ );
147
+ }
148
+ var sheet2 = createStyleSheet((theme) => ({
149
+ wrapFull: { alignSelf: "stretch" },
150
+ wrapAuto: { alignSelf: "flex-start" },
151
+ labelRow: {
152
+ flexDirection: "row",
153
+ alignItems: "center",
154
+ justifyContent: "center",
155
+ gap: theme.ctl.gap.lg
156
+ },
157
+ label: {
158
+ fontFamily: theme.font.sans,
159
+ fontWeight: theme.fontWeight.bold,
160
+ fontSize: theme.type.body.fontSize,
161
+ lineHeight: theme.type.body.lineHeight,
162
+ letterSpacing: theme.type.body.letterSpacing
163
+ }
164
+ }));
165
+ function summaryIcon(name) {
166
+ if (name === void 0) return void 0;
167
+ return Object.prototype.hasOwnProperty.call(icons, name) ? name : void 0;
168
+ }
169
+ function OrderSummary({
170
+ variant,
171
+ items,
172
+ rows,
173
+ total,
174
+ currency,
175
+ title,
176
+ totalLabel,
177
+ coupon,
178
+ fxNote,
179
+ locale: localeProp,
180
+ labels: labelsProp,
181
+ style,
182
+ onCouponDraftChange,
183
+ onApplyCoupon,
184
+ onRemoveCoupon
185
+ }) {
186
+ const labels = useLabels("checkout", DEFAULT_LABELS, labelsProp);
187
+ const providerLocale = useLoamLocale();
188
+ const locale = localeProp ?? providerLocale;
189
+ const theme = useLoamTheme("checkout");
190
+ const { styles: styles2 } = useStyles(sheet3);
191
+ const couponLabelId = React4.useId();
192
+ const couponErrorId = React4.useId();
193
+ const heading = labels.summaryHeading(title ?? labels.orderSummary, currency);
194
+ const showItems = variant === "itemised" && items !== void 0 && items.length > 0;
195
+ return /* @__PURE__ */ jsxs(
196
+ View,
197
+ {
198
+ role: "region",
199
+ accessibilityLabel: heading,
200
+ style: [styles2.section, style],
201
+ children: [
202
+ /* @__PURE__ */ jsx(Text, { accessibilityRole: "header", style: styles2.overline, children: heading }),
203
+ showItems ? /* @__PURE__ */ jsx(View, { role: "list", accessibilityRole: "list", style: styles2.itemList, children: items.map((item) => /* @__PURE__ */ jsx(View, { role: "listitem", children: /* @__PURE__ */ jsx(
204
+ SummaryItemRow,
205
+ {
206
+ name: item.name,
207
+ detail: item.detail,
208
+ qty: item.qty,
209
+ minor: item.qty * item.unit,
210
+ currency,
211
+ icon: summaryIcon(item.icon),
212
+ locale,
213
+ noSymbol: true
214
+ }
215
+ ) }, `${item.name}-${item.unit}`)) }) : null,
216
+ rows.length > 0 ? /* @__PURE__ */ jsx(View, { style: [styles2.rowStack, showItems ? styles2.rowStackRuled : null], children: rows.map((row, index) => /* @__PURE__ */ jsx(
217
+ PriceRow,
218
+ {
219
+ label: row.label,
220
+ minor: row.minor,
221
+ currency,
222
+ tone: row.tone,
223
+ strong: row.strong,
224
+ rule: row.rule,
225
+ locale,
226
+ noSymbol: true
227
+ },
228
+ `${index}-${String(row.label)}`
229
+ )) }) : null,
230
+ coupon ? /* @__PURE__ */ jsx(View, { style: styles2.couponBlock, children: coupon.applied ? /* @__PURE__ */ jsxs(View, { style: styles2.appliedRow, children: [
231
+ /* @__PURE__ */ jsx(Icon, { name: "tag", size: theme.icon.sm, color: theme.color.goodOnSoft }),
232
+ /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: styles2.appliedCode, children: coupon.applied }),
233
+ onRemoveCoupon ? /* @__PURE__ */ jsx(View, { style: styles2.pushEnd, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "xs", onPress: onRemoveCoupon, children: labels.remove }) }) : null
234
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
235
+ /* @__PURE__ */ jsx(Text, { nativeID: couponLabelId, style: styles2.fieldLabel, children: coupon.label ?? labels.discountCode }),
236
+ /* @__PURE__ */ jsxs(View, { style: styles2.couponRow, children: [
237
+ /* @__PURE__ */ jsx(View, { style: styles2.couponField, children: /* @__PURE__ */ jsx(
238
+ Input,
239
+ {
240
+ "aria-labelledby": couponLabelId,
241
+ "aria-describedby": coupon.error ? couponErrorId : void 0,
242
+ "aria-invalid": coupon.error !== void 0 || void 0,
243
+ value: coupon.draft,
244
+ placeholder: coupon.placeholder,
245
+ autoComplete: "off",
246
+ autoCorrect: false,
247
+ loading: coupon.busy ?? false,
248
+ error: coupon.error !== void 0,
249
+ onChangeText: (next) => onCouponDraftChange?.(next)
250
+ }
251
+ ) }),
252
+ /* @__PURE__ */ jsx(
253
+ Button,
254
+ {
255
+ variant: "outline",
256
+ loading: coupon.busy ?? false,
257
+ onPress: () => onApplyCoupon?.(coupon.draft),
258
+ children: labels.apply
259
+ }
260
+ )
261
+ ] }),
262
+ coupon.error ? /* @__PURE__ */ jsx(Text, { nativeID: couponErrorId, accessibilityRole: "alert", style: styles2.fieldError, children: coupon.error }) : null
263
+ ] }) }) : null,
264
+ /* @__PURE__ */ jsxs(View, { style: styles2.totalRow, children: [
265
+ /* @__PURE__ */ jsx(Text, { style: styles2.totalLabel, children: totalLabel ?? labels.total }),
266
+ /* @__PURE__ */ jsx(Amount, { minor: total, currency, size: "hero", locale })
267
+ ] }),
268
+ fxNote ? /* @__PURE__ */ jsx(FxNote, { currency: fxNote.currency, rateLine: fxNote.rateLine }) : null
269
+ ]
270
+ }
271
+ );
272
+ }
273
+ function CollapsedSummaryBar({
274
+ total,
275
+ currency,
276
+ open,
277
+ children,
278
+ label,
279
+ locale: localeProp,
280
+ labels: labelsProp,
281
+ style,
282
+ onToggle
283
+ }) {
284
+ const labels = useLabels("checkout", DEFAULT_LABELS, labelsProp);
285
+ const providerLocale = useLoamLocale();
286
+ const locale = localeProp ?? providerLocale;
287
+ const theme = useLoamTheme("checkout");
288
+ const { styles: styles2 } = useStyles(sheet3);
289
+ const panelId = React4.useId();
290
+ return /* @__PURE__ */ jsxs(View, { style: [styles2.bar, style], children: [
291
+ /* @__PURE__ */ jsxs(
292
+ Pressable,
293
+ {
294
+ accessibilityRole: "button",
295
+ accessibilityState: { expanded: open },
296
+ ...expandedProps(open),
297
+ "aria-controls": panelId,
298
+ onPress: () => {
299
+ const ds = theme.spring.ds;
300
+ LayoutAnimation.configureNext(
301
+ theme.reduceMotion ? { duration: theme.duration.fast, update: { type: "easeInEaseOut" }, create: { type: "easeInEaseOut", property: "opacity" }, delete: { type: "easeInEaseOut", property: "opacity" } } : {
302
+ duration: ds.duration,
303
+ update: { type: "spring", springDamping: ds.dampingRatio },
304
+ create: { type: "easeInEaseOut", property: "opacity" },
305
+ delete: { type: "easeInEaseOut", property: "opacity" }
306
+ }
307
+ );
308
+ onToggle(!open);
309
+ },
310
+ style: ({ pressed }) => [styles2.trigger, pressed ? styles2.triggerPressed : null],
311
+ children: [
312
+ /* @__PURE__ */ jsx(
313
+ Icon,
314
+ {
315
+ name: open ? "chevron-up" : "chevron-down",
316
+ size: theme.icon.sm,
317
+ color: theme.color.text3
318
+ }
319
+ ),
320
+ /* @__PURE__ */ jsx(Text, { style: styles2.triggerLabel, children: label ?? labels.orderSummary }),
321
+ /* @__PURE__ */ jsx(View, { style: styles2.pushEnd, children: /* @__PURE__ */ jsx(Amount, { minor: total, currency, size: "md", weight: "bold", locale }) })
322
+ ]
323
+ }
324
+ ),
325
+ open ? /* @__PURE__ */ jsx(View, { nativeID: panelId, style: styles2.panel, children }) : null
326
+ ] });
327
+ }
328
+ var sheet3 = createStyleSheet((theme) => ({
329
+ section: { gap: theme.space.s3 },
330
+ overline: {
331
+ fontFamily: theme.font.sans,
332
+ fontWeight: theme.fontWeight.bold,
333
+ fontSize: theme.type.caption2.fontSize,
334
+ lineHeight: theme.type.caption2.lineHeight,
335
+ letterSpacing: theme.tracking.caps,
336
+ textTransform: "uppercase",
337
+ color: theme.color.text3
338
+ },
339
+ itemList: { gap: theme.space.s3 },
340
+ rowStack: { gap: theme.space.s2 },
341
+ rowStackRuled: {
342
+ paddingTop: theme.space.s3,
343
+ borderTopWidth: theme.borderWidth.base,
344
+ borderTopColor: theme.color.border
345
+ },
346
+ couponBlock: { gap: theme.space.s1 },
347
+ appliedRow: {
348
+ flexDirection: "row",
349
+ alignItems: "center",
350
+ gap: theme.space.s2,
351
+ padding: theme.space.s2,
352
+ borderRadius: theme.radius.md,
353
+ // The soft tint always carries its tone edge: `goodSoft` collapses to the
354
+ // plain surface under high contrast, and the edge is the only thing left
355
+ // drawing the block.
356
+ borderWidth: theme.borderWidth.base,
357
+ borderColor: theme.edge.good,
358
+ backgroundColor: theme.color.goodSoft
359
+ },
360
+ appliedCode: {
361
+ flexShrink: 1,
362
+ fontFamily: theme.font.sans,
363
+ fontWeight: theme.fontWeight.semibold,
364
+ fontSize: theme.type.footnote.fontSize,
365
+ lineHeight: theme.type.footnote.lineHeight,
366
+ color: theme.color.goodOnSoft
367
+ },
368
+ pushEnd: { marginStart: "auto" },
369
+ fieldLabel: {
370
+ fontFamily: theme.font.sans,
371
+ fontWeight: theme.fontWeight.semibold,
372
+ fontSize: theme.type.caption1.fontSize,
373
+ lineHeight: theme.type.caption1.lineHeight,
374
+ color: theme.color.text2
375
+ },
376
+ couponRow: { flexDirection: "row", alignItems: "flex-start", gap: theme.space.s2 },
377
+ couponField: { flex: 1 },
378
+ fieldError: {
379
+ fontFamily: theme.font.sans,
380
+ fontWeight: theme.fontWeight.bold,
381
+ fontSize: theme.type.caption1.fontSize,
382
+ lineHeight: theme.type.caption1.lineHeight,
383
+ color: theme.color.danger
384
+ },
385
+ totalRow: {
386
+ flexDirection: "row",
387
+ alignItems: "baseline",
388
+ justifyContent: "space-between",
389
+ gap: theme.space.s4,
390
+ paddingTop: theme.space.s3,
391
+ borderTopWidth: theme.borderWidth.base,
392
+ borderTopColor: theme.color.border
393
+ },
394
+ totalLabel: {
395
+ fontFamily: theme.font.sans,
396
+ fontWeight: theme.fontWeight.bold,
397
+ fontSize: theme.type.footnote.fontSize,
398
+ lineHeight: theme.type.footnote.lineHeight,
399
+ color: theme.color.text
400
+ },
401
+ bar: {
402
+ borderRadius: theme.radius.md,
403
+ borderWidth: theme.borderWidth.base,
404
+ borderColor: theme.color.border,
405
+ backgroundColor: theme.color.surface
406
+ },
407
+ trigger: {
408
+ flexDirection: "row",
409
+ alignItems: "center",
410
+ gap: theme.space.s3,
411
+ minHeight: theme.ctl.lg,
412
+ padding: theme.space.s3
413
+ },
414
+ triggerPressed: { backgroundColor: theme.state.pressed },
415
+ triggerLabel: {
416
+ fontFamily: theme.font.sans,
417
+ fontWeight: theme.fontWeight.semibold,
418
+ fontSize: theme.type.footnote.fontSize,
419
+ lineHeight: theme.type.footnote.lineHeight,
420
+ color: theme.color.text
421
+ },
422
+ panel: {
423
+ padding: theme.space.s3,
424
+ borderTopWidth: theme.borderWidth.base,
425
+ borderTopColor: theme.color.border
426
+ }
427
+ }));
428
+ var CartContext = React4.createContext(null);
429
+ var measure = (node) => new Promise((resolve) => {
430
+ if (!node?.measureInWindow) return resolve(null);
431
+ node.measureInWindow(
432
+ (x, y, w, h) => resolve(Number.isFinite(x) && w > 0 ? { x, y, w, h } : null)
433
+ );
434
+ });
435
+ function CartHost({ children, motion = "full", style }) {
436
+ const level = useResolvedMotion(motion, "checkout");
437
+ const host = React4.useRef(null);
438
+ const target = React4.useRef(null);
439
+ const bump = React4.useRef(null);
440
+ const [flights, setFlights] = React4.useState([]);
441
+ const seq = React4.useRef(0);
442
+ const levelRef = React4.useRef(level);
443
+ levelRef.current = level;
444
+ const fly = React4.useCallback(async (from, options = {}) => {
445
+ const land = () => {
446
+ bump.current?.();
447
+ haptics.notify("success");
448
+ };
449
+ if (levelRef.current !== "full") {
450
+ if (levelRef.current === "reduced") land();
451
+ return;
452
+ }
453
+ const [h, a, b] = await Promise.all([
454
+ measure(host.current),
455
+ measure(from),
456
+ measure(target.current)
457
+ ]);
458
+ if (!h || !a || !b) {
459
+ land();
460
+ return;
461
+ }
462
+ await new Promise((resolve) => {
463
+ const id = ++seq.current;
464
+ const rel = (r) => ({ x: r.x - h.x, y: r.y - h.y, w: r.w, h: r.h });
465
+ setFlights((all) => [
466
+ ...all,
467
+ {
468
+ id,
469
+ from: rel(a),
470
+ to: rel(b),
471
+ children: options.children,
472
+ done: () => {
473
+ setFlights((rest) => rest.filter((f) => f.id !== id));
474
+ land();
475
+ resolve();
476
+ }
477
+ }
478
+ ]);
479
+ });
480
+ }, []);
481
+ const value = React4.useMemo(() => ({ target, bump, fly }), [fly]);
482
+ return /* @__PURE__ */ jsx(CartContext.Provider, { value, children: /* @__PURE__ */ jsxs(View, { ref: host, style: [styles.host, style], collapsable: false, children: [
483
+ children,
484
+ /* @__PURE__ */ jsx(
485
+ View,
486
+ {
487
+ pointerEvents: "none",
488
+ style: StyleSheet.absoluteFill,
489
+ ...{ "aria-hidden": true },
490
+ children: flights.map((f) => /* @__PURE__ */ jsx(CartFlight, { flight: f }, f.id))
491
+ }
492
+ )
493
+ ] }) });
494
+ }
495
+ var styles = StyleSheet.create({ host: { flex: 1 } });
496
+ function CartFlight({ flight }) {
497
+ const theme = useLoamTheme("checkout");
498
+ const { styles: s } = useStyles(sheet4);
499
+ const p = React4.useRef(new Animated.Value(0)).current;
500
+ const { from, to } = flight;
501
+ const size = Math.max(16, Math.min(from.w, from.h));
502
+ const dx = to.x + to.w / 2 - (from.x + from.w / 2);
503
+ const dy = to.y + to.h / 2 - (from.y + from.h / 2);
504
+ React4.useEffect(() => {
505
+ const anim = Animated.spring(p, {
506
+ toValue: 1,
507
+ ...springConfig(theme, "ss"),
508
+ useNativeDriver: true
509
+ });
510
+ anim.start(() => flight.done());
511
+ return () => anim.stop();
512
+ }, []);
513
+ return /* @__PURE__ */ jsx(
514
+ Animated.View,
515
+ {
516
+ testID: "cart-flight",
517
+ style: [
518
+ s.flight,
519
+ {
520
+ left: from.x + from.w / 2 - size / 2,
521
+ top: from.y + from.h / 2 - size / 2,
522
+ width: size,
523
+ height: size,
524
+ opacity: p.interpolate({
525
+ inputRange: [0, 0.7, 1],
526
+ outputRange: [1, 1, 0],
527
+ extrapolate: "clamp"
528
+ }),
529
+ transform: [
530
+ { translateX: p.interpolate({ inputRange: [0, 1], outputRange: [0, dx] }) },
531
+ // A shallow arc: the copy lifts before it drops into the cart.
532
+ {
533
+ translateY: p.interpolate({
534
+ inputRange: [0, 0.4, 1],
535
+ outputRange: [0, Math.min(dy, 0) * 0.4 - size * 0.4, dy]
536
+ })
537
+ },
538
+ {
539
+ scale: p.interpolate({
540
+ inputRange: [0, 1],
541
+ outputRange: [1, 0.3],
542
+ extrapolate: "clamp"
543
+ })
544
+ }
545
+ ]
546
+ }
547
+ ],
548
+ children: flight.children ?? /* @__PURE__ */ jsx(View, { style: s.dot })
549
+ }
550
+ );
551
+ }
552
+ function useAddToCart() {
553
+ const ctx = React4.useContext(CartContext);
554
+ return React4.useMemo(
555
+ () => ({ fly: ctx ? ctx.fly : async () => haptics.notify("success") }),
556
+ [ctx]
557
+ );
558
+ }
559
+ function CartButton({
560
+ count,
561
+ onPress,
562
+ accessibilityLabel,
563
+ labels: labelsProp,
564
+ motion = "full",
565
+ style,
566
+ testID
567
+ }) {
568
+ const labels = useLabels("checkout", DEFAULT_LABELS, labelsProp);
569
+ const theme = useLoamTheme("checkout");
570
+ const { styles: s } = useStyles(sheet4);
571
+ const level = useResolvedMotion(motion, "checkout");
572
+ const ctx = React4.useContext(CartContext);
573
+ const ref = React4.useRef(null);
574
+ const pulse = React4.useRef(new Animated.Value(0)).current;
575
+ React4.useEffect(() => {
576
+ if (!ctx) return;
577
+ const node = ref.current;
578
+ ctx.target.current = node;
579
+ ctx.bump.current = () => {
580
+ if (level === "none") return;
581
+ pulse.setValue(1);
582
+ const anim = level === "full" ? Animated.spring(pulse, {
583
+ toValue: 0,
584
+ ...springConfig(theme, "fs"),
585
+ useNativeDriver: true
586
+ }) : Animated.timing(pulse, { toValue: 0, ...motionTiming(level), useNativeDriver: true });
587
+ anim.start();
588
+ };
589
+ return () => {
590
+ if (ctx.target.current === node) ctx.target.current = null;
591
+ ctx.bump.current = null;
592
+ };
593
+ }, [ctx, level, theme, pulse]);
594
+ const label = count > 0 ? labels.cartCount(accessibilityLabel ?? labels.cart, count) : accessibilityLabel ?? labels.cart;
595
+ return /* @__PURE__ */ jsxs(
596
+ Pressable,
597
+ {
598
+ ref,
599
+ role: "button",
600
+ accessibilityLabel: label,
601
+ onPress,
602
+ testID,
603
+ collapsable: false,
604
+ style: ({ pressed }) => [s.button, pressed && s.pressed, style],
605
+ children: [
606
+ /* @__PURE__ */ jsx(
607
+ Animated.View,
608
+ {
609
+ style: level === "full" ? {
610
+ transform: [
611
+ { scale: pulse.interpolate({ inputRange: [0, 1], outputRange: [1, 1.12] }) }
612
+ ]
613
+ } : { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [1, 0.5] }) },
614
+ children: /* @__PURE__ */ jsx(Icon, { name: "cart", size: 22, color: theme.color.text })
615
+ }
616
+ ),
617
+ /* @__PURE__ */ jsx(View, { style: s.badge, pointerEvents: "none", ...{ "aria-hidden": true }, children: /* @__PURE__ */ jsx(Badge, { variant: "accent", size: "sm", count, animateCount: true, motion }) })
618
+ ]
619
+ }
620
+ );
621
+ }
622
+ var sheet4 = createStyleSheet((theme) => ({
623
+ button: {
624
+ minWidth: theme.tapMin,
625
+ minHeight: theme.tapMin,
626
+ alignItems: "center",
627
+ justifyContent: "center",
628
+ borderRadius: theme.radius.full
629
+ },
630
+ pressed: { opacity: theme.state.pressedOpacity },
631
+ badge: { position: "absolute", top: theme.space[1], right: theme.space[1] },
632
+ flight: {
633
+ position: "absolute",
634
+ overflow: "hidden",
635
+ borderRadius: theme.radius.md,
636
+ alignItems: "center",
637
+ justifyContent: "center"
638
+ },
639
+ dot: {
640
+ width: "100%",
641
+ height: "100%",
642
+ borderRadius: theme.radius.full,
643
+ backgroundColor: theme.color.accent
644
+ }
645
+ }));
646
+
647
+ export { CartButton, CartHost, CheckoutSheet, CollapsedSummaryBar, OrderSummary, PayButton, summaryIcon, useAddToCart };
@@ -0,0 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
18
+
19
+ export { __export, __reExport };