@webority/mobile-ui 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 (405) hide show
  1. package/lib/commonjs/components/BottomSheet/BottomSheet.js +1 -1
  2. package/lib/commonjs/components/Button/Button.js +1 -1
  3. package/lib/commonjs/components/Confetti/Confetti.js +1 -1
  4. package/lib/commonjs/components/Drawer/Drawer.js +1 -1
  5. package/lib/commonjs/components/ImageGallery/ImageGallery.js +1 -1
  6. package/lib/commonjs/components/SlideToConfirm/SlideToConfirm.js +1 -1
  7. package/lib/commonjs/components/Slider/Slider.js +1 -1
  8. package/lib/commonjs/components/Swipeable/Swipeable.js +1 -1
  9. package/lib/commonjs/components/ZoomableImage/ZoomableImage.js +1 -1
  10. package/lib/module/components/Accordion/Accordion.js +1 -1
  11. package/lib/module/components/Accordion/index.js +1 -1
  12. package/lib/module/components/AmountSlider/AmountSlider.js +1 -1
  13. package/lib/module/components/AmountSlider/index.js +1 -1
  14. package/lib/module/components/AnimatePresence/AnimatePresence.js +1 -1
  15. package/lib/module/components/AnimatePresence/index.js +1 -1
  16. package/lib/module/components/AppBar/AppBar.js +1 -1
  17. package/lib/module/components/AppBar/index.js +1 -1
  18. package/lib/module/components/AppIcon/AppIcon.js +1 -1
  19. package/lib/module/components/AppIcon/catalog/bold/a.g.js +1 -1
  20. package/lib/module/components/AppIcon/catalog/bold/b.g.js +1 -1
  21. package/lib/module/components/AppIcon/catalog/bold/c.g.js +1 -1
  22. package/lib/module/components/AppIcon/catalog/bold/d.g.js +1 -1
  23. package/lib/module/components/AppIcon/catalog/bold/e.g.js +1 -1
  24. package/lib/module/components/AppIcon/catalog/bold/f.g.js +1 -1
  25. package/lib/module/components/AppIcon/catalog/bold/g.g.js +1 -1
  26. package/lib/module/components/AppIcon/catalog/bold/h.g.js +1 -1
  27. package/lib/module/components/AppIcon/catalog/bold/i.g.js +1 -1
  28. package/lib/module/components/AppIcon/catalog/bold/j.g.js +1 -1
  29. package/lib/module/components/AppIcon/catalog/bold/k.g.js +1 -1
  30. package/lib/module/components/AppIcon/catalog/bold/l.g.js +1 -1
  31. package/lib/module/components/AppIcon/catalog/bold/m.g.js +1 -1
  32. package/lib/module/components/AppIcon/catalog/bold/n.g.js +1 -1
  33. package/lib/module/components/AppIcon/catalog/bold/o.g.js +1 -1
  34. package/lib/module/components/AppIcon/catalog/bold/p.g.js +1 -1
  35. package/lib/module/components/AppIcon/catalog/bold/q.g.js +1 -1
  36. package/lib/module/components/AppIcon/catalog/bold/r.g.js +1 -1
  37. package/lib/module/components/AppIcon/catalog/bold/s.g.js +1 -1
  38. package/lib/module/components/AppIcon/catalog/bold/t.g.js +1 -1
  39. package/lib/module/components/AppIcon/catalog/bold/u.g.js +1 -1
  40. package/lib/module/components/AppIcon/catalog/bold/v.g.js +1 -1
  41. package/lib/module/components/AppIcon/catalog/bold/w.g.js +1 -1
  42. package/lib/module/components/AppIcon/catalog/bold/x.g.js +1 -1
  43. package/lib/module/components/AppIcon/catalog/bold/y.g.js +1 -1
  44. package/lib/module/components/AppIcon/catalog/bold/z.g.js +1 -1
  45. package/lib/module/components/AppIcon/catalog/broken/a.g.js +1 -1
  46. package/lib/module/components/AppIcon/catalog/broken/b.g.js +1 -1
  47. package/lib/module/components/AppIcon/catalog/broken/c.g.js +1 -1
  48. package/lib/module/components/AppIcon/catalog/broken/d.g.js +1 -1
  49. package/lib/module/components/AppIcon/catalog/broken/e.g.js +1 -1
  50. package/lib/module/components/AppIcon/catalog/broken/f.g.js +1 -1
  51. package/lib/module/components/AppIcon/catalog/broken/g.g.js +1 -1
  52. package/lib/module/components/AppIcon/catalog/broken/h.g.js +1 -1
  53. package/lib/module/components/AppIcon/catalog/broken/i.g.js +1 -1
  54. package/lib/module/components/AppIcon/catalog/broken/j.g.js +1 -1
  55. package/lib/module/components/AppIcon/catalog/broken/k.g.js +1 -1
  56. package/lib/module/components/AppIcon/catalog/broken/l.g.js +1 -1
  57. package/lib/module/components/AppIcon/catalog/broken/m.g.js +1 -1
  58. package/lib/module/components/AppIcon/catalog/broken/n.g.js +1 -1
  59. package/lib/module/components/AppIcon/catalog/broken/o.g.js +1 -1
  60. package/lib/module/components/AppIcon/catalog/broken/p.g.js +1 -1
  61. package/lib/module/components/AppIcon/catalog/broken/q.g.js +1 -1
  62. package/lib/module/components/AppIcon/catalog/broken/r.g.js +1 -1
  63. package/lib/module/components/AppIcon/catalog/broken/s.g.js +1 -1
  64. package/lib/module/components/AppIcon/catalog/broken/t.g.js +1 -1
  65. package/lib/module/components/AppIcon/catalog/broken/u.g.js +1 -1
  66. package/lib/module/components/AppIcon/catalog/broken/v.g.js +1 -1
  67. package/lib/module/components/AppIcon/catalog/broken/w.g.js +1 -1
  68. package/lib/module/components/AppIcon/catalog/broken/x.g.js +1 -1
  69. package/lib/module/components/AppIcon/catalog/broken/y.g.js +1 -1
  70. package/lib/module/components/AppIcon/catalog/broken/z.g.js +1 -1
  71. package/lib/module/components/AppIcon/catalog/bulk/a.g.js +1 -1
  72. package/lib/module/components/AppIcon/catalog/bulk/b.g.js +1 -1
  73. package/lib/module/components/AppIcon/catalog/bulk/c.g.js +1 -1
  74. package/lib/module/components/AppIcon/catalog/bulk/d.g.js +1 -1
  75. package/lib/module/components/AppIcon/catalog/bulk/e.g.js +1 -1
  76. package/lib/module/components/AppIcon/catalog/bulk/f.g.js +1 -1
  77. package/lib/module/components/AppIcon/catalog/bulk/g.g.js +1 -1
  78. package/lib/module/components/AppIcon/catalog/bulk/h.g.js +1 -1
  79. package/lib/module/components/AppIcon/catalog/bulk/i.g.js +1 -1
  80. package/lib/module/components/AppIcon/catalog/bulk/j.g.js +1 -1
  81. package/lib/module/components/AppIcon/catalog/bulk/k.g.js +1 -1
  82. package/lib/module/components/AppIcon/catalog/bulk/l.g.js +1 -1
  83. package/lib/module/components/AppIcon/catalog/bulk/m.g.js +1 -1
  84. package/lib/module/components/AppIcon/catalog/bulk/n.g.js +1 -1
  85. package/lib/module/components/AppIcon/catalog/bulk/o.g.js +1 -1
  86. package/lib/module/components/AppIcon/catalog/bulk/p.g.js +1 -1
  87. package/lib/module/components/AppIcon/catalog/bulk/q.g.js +1 -1
  88. package/lib/module/components/AppIcon/catalog/bulk/r.g.js +1 -1
  89. package/lib/module/components/AppIcon/catalog/bulk/s.g.js +1 -1
  90. package/lib/module/components/AppIcon/catalog/bulk/t.g.js +1 -1
  91. package/lib/module/components/AppIcon/catalog/bulk/u.g.js +1 -1
  92. package/lib/module/components/AppIcon/catalog/bulk/v.g.js +1 -1
  93. package/lib/module/components/AppIcon/catalog/bulk/w.g.js +1 -1
  94. package/lib/module/components/AppIcon/catalog/bulk/x.g.js +1 -1
  95. package/lib/module/components/AppIcon/catalog/bulk/y.g.js +1 -1
  96. package/lib/module/components/AppIcon/catalog/bulk/z.g.js +1 -1
  97. package/lib/module/components/AppIcon/catalog/linear/a.g.js +1 -1
  98. package/lib/module/components/AppIcon/catalog/linear/b.g.js +1 -1
  99. package/lib/module/components/AppIcon/catalog/linear/c.g.js +1 -1
  100. package/lib/module/components/AppIcon/catalog/linear/d.g.js +1 -1
  101. package/lib/module/components/AppIcon/catalog/linear/e.g.js +1 -1
  102. package/lib/module/components/AppIcon/catalog/linear/f.g.js +1 -1
  103. package/lib/module/components/AppIcon/catalog/linear/g.g.js +1 -1
  104. package/lib/module/components/AppIcon/catalog/linear/h.g.js +1 -1
  105. package/lib/module/components/AppIcon/catalog/linear/i.g.js +1 -1
  106. package/lib/module/components/AppIcon/catalog/linear/j.g.js +1 -1
  107. package/lib/module/components/AppIcon/catalog/linear/k.g.js +1 -1
  108. package/lib/module/components/AppIcon/catalog/linear/l.g.js +1 -1
  109. package/lib/module/components/AppIcon/catalog/linear/m.g.js +1 -1
  110. package/lib/module/components/AppIcon/catalog/linear/n.g.js +1 -1
  111. package/lib/module/components/AppIcon/catalog/linear/o.g.js +1 -1
  112. package/lib/module/components/AppIcon/catalog/linear/p.g.js +1 -1
  113. package/lib/module/components/AppIcon/catalog/linear/q.g.js +1 -1
  114. package/lib/module/components/AppIcon/catalog/linear/r.g.js +1 -1
  115. package/lib/module/components/AppIcon/catalog/linear/s.g.js +1 -1
  116. package/lib/module/components/AppIcon/catalog/linear/t.g.js +1 -1
  117. package/lib/module/components/AppIcon/catalog/linear/u.g.js +1 -1
  118. package/lib/module/components/AppIcon/catalog/linear/v.g.js +1 -1
  119. package/lib/module/components/AppIcon/catalog/linear/w.g.js +1 -1
  120. package/lib/module/components/AppIcon/catalog/linear/x.g.js +1 -1
  121. package/lib/module/components/AppIcon/catalog/linear/y.g.js +1 -1
  122. package/lib/module/components/AppIcon/catalog/linear/z.g.js +1 -1
  123. package/lib/module/components/AppIcon/catalog/outline/a.g.js +1 -1
  124. package/lib/module/components/AppIcon/catalog/outline/b.g.js +1 -1
  125. package/lib/module/components/AppIcon/catalog/outline/c.g.js +1 -1
  126. package/lib/module/components/AppIcon/catalog/outline/d.g.js +1 -1
  127. package/lib/module/components/AppIcon/catalog/outline/e.g.js +1 -1
  128. package/lib/module/components/AppIcon/catalog/outline/f.g.js +1 -1
  129. package/lib/module/components/AppIcon/catalog/outline/g.g.js +1 -1
  130. package/lib/module/components/AppIcon/catalog/outline/h.g.js +1 -1
  131. package/lib/module/components/AppIcon/catalog/outline/i.g.js +1 -1
  132. package/lib/module/components/AppIcon/catalog/outline/j.g.js +1 -1
  133. package/lib/module/components/AppIcon/catalog/outline/k.g.js +1 -1
  134. package/lib/module/components/AppIcon/catalog/outline/l.g.js +1 -1
  135. package/lib/module/components/AppIcon/catalog/outline/m.g.js +1 -1
  136. package/lib/module/components/AppIcon/catalog/outline/n.g.js +1 -1
  137. package/lib/module/components/AppIcon/catalog/outline/o.g.js +1 -1
  138. package/lib/module/components/AppIcon/catalog/outline/p.g.js +1 -1
  139. package/lib/module/components/AppIcon/catalog/outline/q.g.js +1 -1
  140. package/lib/module/components/AppIcon/catalog/outline/r.g.js +1 -1
  141. package/lib/module/components/AppIcon/catalog/outline/s.g.js +1 -1
  142. package/lib/module/components/AppIcon/catalog/outline/t.g.js +1 -1
  143. package/lib/module/components/AppIcon/catalog/outline/u.g.js +1 -1
  144. package/lib/module/components/AppIcon/catalog/outline/v.g.js +1 -1
  145. package/lib/module/components/AppIcon/catalog/outline/w.g.js +1 -1
  146. package/lib/module/components/AppIcon/catalog/outline/x.g.js +1 -1
  147. package/lib/module/components/AppIcon/catalog/outline/y.g.js +1 -1
  148. package/lib/module/components/AppIcon/catalog/outline/z.g.js +1 -1
  149. package/lib/module/components/AppIcon/catalog/twotone/a.g.js +1 -1
  150. package/lib/module/components/AppIcon/catalog/twotone/b.g.js +1 -1
  151. package/lib/module/components/AppIcon/catalog/twotone/c.g.js +1 -1
  152. package/lib/module/components/AppIcon/catalog/twotone/d.g.js +1 -1
  153. package/lib/module/components/AppIcon/catalog/twotone/e.g.js +1 -1
  154. package/lib/module/components/AppIcon/catalog/twotone/f.g.js +1 -1
  155. package/lib/module/components/AppIcon/catalog/twotone/g.g.js +1 -1
  156. package/lib/module/components/AppIcon/catalog/twotone/h.g.js +1 -1
  157. package/lib/module/components/AppIcon/catalog/twotone/i.g.js +1 -1
  158. package/lib/module/components/AppIcon/catalog/twotone/j.g.js +1 -1
  159. package/lib/module/components/AppIcon/catalog/twotone/k.g.js +1 -1
  160. package/lib/module/components/AppIcon/catalog/twotone/l.g.js +1 -1
  161. package/lib/module/components/AppIcon/catalog/twotone/m.g.js +1 -1
  162. package/lib/module/components/AppIcon/catalog/twotone/n.g.js +1 -1
  163. package/lib/module/components/AppIcon/catalog/twotone/o.g.js +1 -1
  164. package/lib/module/components/AppIcon/catalog/twotone/p.g.js +1 -1
  165. package/lib/module/components/AppIcon/catalog/twotone/q.g.js +1 -1
  166. package/lib/module/components/AppIcon/catalog/twotone/r.g.js +1 -1
  167. package/lib/module/components/AppIcon/catalog/twotone/s.g.js +1 -1
  168. package/lib/module/components/AppIcon/catalog/twotone/t.g.js +1 -1
  169. package/lib/module/components/AppIcon/catalog/twotone/u.g.js +1 -1
  170. package/lib/module/components/AppIcon/catalog/twotone/v.g.js +1 -1
  171. package/lib/module/components/AppIcon/catalog/twotone/w.g.js +1 -1
  172. package/lib/module/components/AppIcon/catalog/twotone/x.g.js +1 -1
  173. package/lib/module/components/AppIcon/catalog/twotone/y.g.js +1 -1
  174. package/lib/module/components/AppIcon/catalog/twotone/z.g.js +1 -1
  175. package/lib/module/components/AppIcon/catalog.g.js +1 -1
  176. package/lib/module/components/AppIcon/defaultIcons.js +1 -1
  177. package/lib/module/components/AppIcon/glyphs.g.js +1 -1
  178. package/lib/module/components/AppIcon/index.js +1 -1
  179. package/lib/module/components/AppIcon/slotIcon.js +1 -1
  180. package/lib/module/components/AppIcon/variants.g.js +1 -1
  181. package/lib/module/components/AsyncBlock/AsyncBlock.js +1 -1
  182. package/lib/module/components/AsyncBlock/index.js +1 -1
  183. package/lib/module/components/AuthedImage/AuthedImage.js +1 -1
  184. package/lib/module/components/AuthedImage/authedImageCache.js +1 -1
  185. package/lib/module/components/AuthedImage/index.js +1 -1
  186. package/lib/module/components/Autocomplete/Autocomplete.js +1 -1
  187. package/lib/module/components/Autocomplete/index.js +1 -1
  188. package/lib/module/components/Avatar/Avatar.js +1 -1
  189. package/lib/module/components/Avatar/index.js +1 -1
  190. package/lib/module/components/Badge/Badge.js +1 -1
  191. package/lib/module/components/Badge/index.js +1 -1
  192. package/lib/module/components/Banner/Banner.js +1 -1
  193. package/lib/module/components/Banner/index.js +1 -1
  194. package/lib/module/components/BottomNavigation/BottomNavigation.js +1 -1
  195. package/lib/module/components/BottomNavigation/index.js +1 -1
  196. package/lib/module/components/BottomSheet/BottomSheet.js +1 -1
  197. package/lib/module/components/BottomSheet/index.js +1 -1
  198. package/lib/module/components/Box/Box.js +1 -1
  199. package/lib/module/components/Box/index.js +1 -1
  200. package/lib/module/components/Button/Button.js +1 -1
  201. package/lib/module/components/Button/index.js +1 -1
  202. package/lib/module/components/Card/Card.js +1 -1
  203. package/lib/module/components/Card/index.js +1 -1
  204. package/lib/module/components/Carousel/Carousel.js +1 -1
  205. package/lib/module/components/Carousel/index.js +1 -1
  206. package/lib/module/components/Checkbox/Checkbox.js +1 -1
  207. package/lib/module/components/Checkbox/index.js +1 -1
  208. package/lib/module/components/Chip/Chip.js +1 -1
  209. package/lib/module/components/Chip/index.js +1 -1
  210. package/lib/module/components/ChoiceGroup/ChoiceGroup.js +1 -1
  211. package/lib/module/components/ChoiceGroup/index.js +1 -1
  212. package/lib/module/components/Confetti/Confetti.js +1 -1
  213. package/lib/module/components/Confetti/index.js +1 -1
  214. package/lib/module/components/DatePicker/DatePicker.js +1 -1
  215. package/lib/module/components/DatePicker/index.js +1 -1
  216. package/lib/module/components/DateRangePicker/DateRangePicker.js +1 -1
  217. package/lib/module/components/DateRangePicker/index.js +1 -1
  218. package/lib/module/components/DecimalInput/DecimalInput.js +1 -1
  219. package/lib/module/components/DecimalInput/index.js +1 -1
  220. package/lib/module/components/Descriptions/Descriptions.js +1 -1
  221. package/lib/module/components/Descriptions/index.js +1 -1
  222. package/lib/module/components/Dialog/Dialog.js +1 -1
  223. package/lib/module/components/Dialog/index.js +1 -1
  224. package/lib/module/components/Divider/Divider.js +1 -1
  225. package/lib/module/components/Divider/index.js +1 -1
  226. package/lib/module/components/Drawer/Drawer.js +1 -1
  227. package/lib/module/components/Drawer/index.js +1 -1
  228. package/lib/module/components/EmptyState/EmptyState.js +1 -1
  229. package/lib/module/components/EmptyState/index.js +1 -1
  230. package/lib/module/components/ErrorBoundary/ErrorBoundary.js +1 -1
  231. package/lib/module/components/ErrorBoundary/index.js +1 -1
  232. package/lib/module/components/ErrorBoundary/useErrorHandler.js +1 -1
  233. package/lib/module/components/ErrorBoundary/withErrorBoundary.js +1 -1
  234. package/lib/module/components/FieldBase/Chevron.js +1 -1
  235. package/lib/module/components/FieldBase/ChoiceText.js +1 -1
  236. package/lib/module/components/FieldBase/FieldBase.js +1 -1
  237. package/lib/module/components/FieldBase/index.js +1 -1
  238. package/lib/module/components/FieldBase/useFloatingLabel.js +1 -1
  239. package/lib/module/components/FilePicker/FilePicker.js +1 -1
  240. package/lib/module/components/FilePicker/index.js +1 -1
  241. package/lib/module/components/FileViewer/FileViewer.js +1 -1
  242. package/lib/module/components/FileViewer/index.js +1 -1
  243. package/lib/module/components/FloatingActionButton/FloatingActionButton.js +1 -1
  244. package/lib/module/components/FloatingActionButton/index.js +1 -1
  245. package/lib/module/components/ForceUpdateDialog/ForceUpdateDialog.js +1 -1
  246. package/lib/module/components/ForceUpdateDialog/index.js +1 -1
  247. package/lib/module/components/FormField/FormField.js +1 -1
  248. package/lib/module/components/FormField/index.js +1 -1
  249. package/lib/module/components/IconBadge/IconBadge.js +1 -1
  250. package/lib/module/components/IconBadge/index.js +1 -1
  251. package/lib/module/components/IconButton/IconButton.js +1 -1
  252. package/lib/module/components/IconButton/index.js +1 -1
  253. package/lib/module/components/ImageGallery/ImageGallery.js +1 -1
  254. package/lib/module/components/ImageGallery/index.js +1 -1
  255. package/lib/module/components/InlineSelect/InlineSelect.js +1 -1
  256. package/lib/module/components/InlineSelect/index.js +1 -1
  257. package/lib/module/components/Input/Input.js +1 -1
  258. package/lib/module/components/Input/index.js +1 -1
  259. package/lib/module/components/KeyboardAwareScrollView/KeyboardAwareScrollView.js +1 -1
  260. package/lib/module/components/KeyboardAwareScrollView/index.js +1 -1
  261. package/lib/module/components/KeyboardToolbar/KeyboardToolbar.js +1 -1
  262. package/lib/module/components/KeyboardToolbar/index.js +1 -1
  263. package/lib/module/components/ListItem/ListItem.js +1 -1
  264. package/lib/module/components/ListItem/index.js +1 -1
  265. package/lib/module/components/LoaderOverlay/LoaderOverlay.js +1 -1
  266. package/lib/module/components/LoaderOverlay/index.js +1 -1
  267. package/lib/module/components/Markdown/Markdown.js +1 -1
  268. package/lib/module/components/Markdown/index.js +1 -1
  269. package/lib/module/components/Markdown/parse.js +1 -1
  270. package/lib/module/components/Modal/Modal.js +1 -1
  271. package/lib/module/components/Modal/index.js +1 -1
  272. package/lib/module/components/Notation/Notation.js +1 -1
  273. package/lib/module/components/Notation/index.js +1 -1
  274. package/lib/module/components/NumberInput/NumberInput.js +1 -1
  275. package/lib/module/components/NumberInput/index.js +1 -1
  276. package/lib/module/components/OTPInput/OTPInput.js +1 -1
  277. package/lib/module/components/OTPInput/index.js +1 -1
  278. package/lib/module/components/OptionSheet/OptionSheet.js +1 -1
  279. package/lib/module/components/OptionSheet/index.js +1 -1
  280. package/lib/module/components/PhoneNumberInput/PhoneNumberInput.js +1 -1
  281. package/lib/module/components/PhoneNumberInput/index.js +1 -1
  282. package/lib/module/components/PickerTrigger/PickerTrigger.js +1 -1
  283. package/lib/module/components/PickerTrigger/index.js +1 -1
  284. package/lib/module/components/ProfileCompletion/ProfileCompletion.js +1 -1
  285. package/lib/module/components/ProfileCompletion/index.js +1 -1
  286. package/lib/module/components/ProfilePicker/ProfilePicker.js +1 -1
  287. package/lib/module/components/ProfilePicker/index.js +1 -1
  288. package/lib/module/components/ProgressBar/ProgressBar.js +1 -1
  289. package/lib/module/components/ProgressBar/index.js +1 -1
  290. package/lib/module/components/ProgressRing/ProgressRing.js +1 -1
  291. package/lib/module/components/ProgressRing/index.js +1 -1
  292. package/lib/module/components/Radio/Radio.js +1 -1
  293. package/lib/module/components/Radio/RadioDot.js +1 -1
  294. package/lib/module/components/Radio/RadioGroup.js +1 -1
  295. package/lib/module/components/Radio/index.js +1 -1
  296. package/lib/module/components/Rating/Rating.js +1 -1
  297. package/lib/module/components/Rating/index.js +1 -1
  298. package/lib/module/components/Repeater/Repeater.js +1 -1
  299. package/lib/module/components/Repeater/index.js +1 -1
  300. package/lib/module/components/RichTextEditor/RichTextEditor.js +1 -1
  301. package/lib/module/components/RichTextEditor/index.js +1 -1
  302. package/lib/module/components/RichTextEditor/markdownActions.js +1 -1
  303. package/lib/module/components/SearchBar/SearchBar.js +1 -1
  304. package/lib/module/components/SearchBar/index.js +1 -1
  305. package/lib/module/components/SectionHeader/SectionHeader.js +1 -1
  306. package/lib/module/components/SectionHeader/index.js +1 -1
  307. package/lib/module/components/SegmentedControl/SegmentedControl.js +1 -1
  308. package/lib/module/components/SegmentedControl/index.js +1 -1
  309. package/lib/module/components/Select/Select.js +1 -1
  310. package/lib/module/components/Select/index.js +1 -1
  311. package/lib/module/components/Skeleton/Skeleton.js +1 -1
  312. package/lib/module/components/Skeleton/SkeletonClock.js +1 -1
  313. package/lib/module/components/Skeleton/SkeletonContent.js +1 -1
  314. package/lib/module/components/Skeleton/SkeletonList.js +1 -1
  315. package/lib/module/components/Skeleton/SkeletonProvider.js +1 -1
  316. package/lib/module/components/Skeleton/SkeletonSkip.js +1 -1
  317. package/lib/module/components/Skeleton/index.js +1 -1
  318. package/lib/module/components/SlideToConfirm/SlideToConfirm.js +1 -1
  319. package/lib/module/components/SlideToConfirm/index.js +1 -1
  320. package/lib/module/components/Slider/Slider.js +1 -1
  321. package/lib/module/components/Slider/index.js +1 -1
  322. package/lib/module/components/Slider/valueText.js +1 -1
  323. package/lib/module/components/SliderField/SliderField.js +1 -1
  324. package/lib/module/components/SliderField/index.js +1 -1
  325. package/lib/module/components/Spinner/Spinner.js +1 -1
  326. package/lib/module/components/Spinner/index.js +1 -1
  327. package/lib/module/components/SquircleFill/SquircleFill.js +1 -1
  328. package/lib/module/components/StatTile/StatTile.js +1 -1
  329. package/lib/module/components/StatTile/index.js +1 -1
  330. package/lib/module/components/StatusBadge/StatusBadge.js +1 -1
  331. package/lib/module/components/StatusBadge/index.js +1 -1
  332. package/lib/module/components/Stepper/Stepper.js +1 -1
  333. package/lib/module/components/Stepper/index.js +1 -1
  334. package/lib/module/components/Swipeable/Swipeable.js +1 -1
  335. package/lib/module/components/Swipeable/index.js +1 -1
  336. package/lib/module/components/Switch/Switch.js +1 -1
  337. package/lib/module/components/Switch/index.js +1 -1
  338. package/lib/module/components/Tabs/Tabs.js +1 -1
  339. package/lib/module/components/Tabs/index.js +1 -1
  340. package/lib/module/components/TagInput/TagInput.js +1 -1
  341. package/lib/module/components/TagInput/index.js +1 -1
  342. package/lib/module/components/Text/Text.js +1 -1
  343. package/lib/module/components/Text/index.js +1 -1
  344. package/lib/module/components/TimePicker/TimePicker.js +1 -1
  345. package/lib/module/components/TimePicker/index.js +1 -1
  346. package/lib/module/components/Timeline/Timeline.js +1 -1
  347. package/lib/module/components/Timeline/index.js +1 -1
  348. package/lib/module/components/Toast/Toast.js +1 -1
  349. package/lib/module/components/Toast/ToastProvider.js +1 -1
  350. package/lib/module/components/Toast/index.js +1 -1
  351. package/lib/module/components/Tooltip/Tooltip.js +1 -1
  352. package/lib/module/components/Tooltip/index.js +1 -1
  353. package/lib/module/components/Tour/Tour.js +1 -1
  354. package/lib/module/components/Tour/index.js +1 -1
  355. package/lib/module/components/ZoomableImage/ZoomableImage.js +1 -1
  356. package/lib/module/components/ZoomableImage/index.js +1 -1
  357. package/lib/module/components/index.js +1 -1
  358. package/lib/module/form/FormContext.js +1 -1
  359. package/lib/module/form/HookFormField.js +1 -1
  360. package/lib/module/form/equal.js +1 -1
  361. package/lib/module/form/index.js +1 -1
  362. package/lib/module/form/path.js +1 -1
  363. package/lib/module/form/rules.js +1 -1
  364. package/lib/module/form/types.js +1 -0
  365. package/lib/module/form/useField.js +1 -1
  366. package/lib/module/form/useForm.js +1 -1
  367. package/lib/module/form/useFormCompletion.js +1 -1
  368. package/lib/module/form/useHookFormField.js +1 -1
  369. package/lib/module/hooks/index.js +1 -1
  370. package/lib/module/hooks/useControllableState.js +1 -1
  371. package/lib/module/hooks/useDebounce.js +1 -1
  372. package/lib/module/hooks/useDragToDismiss.js +1 -1
  373. package/lib/module/hooks/useFlickGuard.js +1 -1
  374. package/lib/module/hooks/usePressAnimation.js +1 -1
  375. package/lib/module/hooks/useReducedMotion.js +1 -1
  376. package/lib/module/hooks/useToggle.js +1 -1
  377. package/lib/module/index.js +1 -1
  378. package/lib/module/initUI.js +1 -1
  379. package/lib/module/network/NetworkStatusBanner.js +1 -1
  380. package/lib/module/network/index.js +1 -1
  381. package/lib/module/specs/NativePdfRasterizer.js +1 -1
  382. package/lib/module/theme/Gradient.js +1 -1
  383. package/lib/module/theme/ThemeContext.js +1 -1
  384. package/lib/module/theme/animatedValue.js +1 -1
  385. package/lib/module/theme/index.js +1 -1
  386. package/lib/module/theme/merge.js +1 -1
  387. package/lib/module/theme/textStyle.js +1 -1
  388. package/lib/module/theme/tokens.js +1 -1
  389. package/lib/module/theme/types.js +1 -1
  390. package/lib/module/utils/color.js +1 -1
  391. package/lib/module/utils/corners.js +1 -1
  392. package/lib/module/utils/dimensions.js +1 -1
  393. package/lib/module/utils/feedback.js +1 -1
  394. package/lib/module/utils/hapticUtils.js +1 -1
  395. package/lib/module/utils/hashString.js +1 -1
  396. package/lib/module/utils/index.js +1 -1
  397. package/lib/module/utils/mergeRefs.js +1 -1
  398. package/lib/module/utils/responsive.js +1 -1
  399. package/lib/module/utils/shadows.js +1 -1
  400. package/lib/module/utils/spacing.js +1 -1
  401. package/lib/module/utils/squircle.js +1 -1
  402. package/lib/module/utils/warnUnknownProps.js +1 -1
  403. package/lib/typescript/commonjs/components/Button/Button.d.ts +5 -0
  404. package/lib/typescript/module/components/Button/Button.d.ts +5 -0
  405. package/package.json +2 -2
@@ -1 +1 @@
1
- import e,{useCallback as t,useEffect as o,useMemo as i,useRef as r,useState as n}from"react";import{Animated as s,Dimensions as l,Easing as a,FlatList as c,Modal as d,Platform as p,Pressable as h,StatusBar as g,StyleSheet as m,Text as u,TextInput as y,View as b}from"react-native";import{Gesture as f,GestureDetector as x,GestureHandlerRootView as S}from"react-native-gesture-handler";import{useKeyboardState as T}from"react-native-keyboard-controller";import{useSafeAreaInsets as C}from"react-native-safe-area-context";import{useDragToDismiss as k}from"../../hooks/useDragToDismiss.js";import{createAnimatedValue as v,setNativeValue as z,useTheme as w}from"../../theme/index.js";import{smoothCorners as L}from"../../utils/corners.js";import{defaultIcons as R}from"../AppIcon/defaultIcons.js";import{ToastHost as W}from"../Toast/ToastProvider.js";import{jsx as I,jsxs as D,Fragment as H}from"react/jsx-runtime";export const OptionSheet=e=>{const{open:P,onClose:O,onAfterClose:B,title:V,options:F,sections:j,renderSectionHeader:M,renderOption:N,alphabetIndex:A=!1,searchPlaceholder:E="Search…",emptyText:$="No options",labelOf:J,getValue:U,disabledOf:Y,destructiveOf:G,descriptionOf:Z,iconOf:q,isSelected:K,onSelect:Q,multi:X=!1,searchable:_=!1,searchSelectionColor:ee,accessibilityLabel:te,optionStyle:oe,selectedOptionStyle:ie,optionTextStyle:re,selectedOptionTextStyle:ne,testID:se}=e,le=w(),ae=C(),ce=i(()=>buildStyles(le),[le]),[de,pe]=n(""),he=l.get("window").height,ge=Math.round(.7*he),[me,ue]=n(P),ye=r(v(0)).current,be=r(v(ge)).current,fe=r(v(0)).current,xe=i(()=>s.add(be,fe),[be,fe]);o(()=>{P&&ue(!0)},[P]);const Se=r(B);Se.current=B;const Te=r(me);o(()=>{Te.current&&!me&&"ios"!==p.OS&&Se.current?.(),Te.current=me},[me]),o(()=>{if(!me)return;P&&z(fe,0);const e=P?s.parallel([s.timing(ye,{toValue:1,duration:le.motion.duration.fast,easing:a.bezier(...le.motion.easing.standard),useNativeDriver:!1}),s.spring(be,{toValue:0,damping:le.motion.spring.snappy.damping,stiffness:le.motion.spring.snappy.stiffness,mass:le.motion.spring.snappy.mass,useNativeDriver:!0})]):s.parallel([s.timing(ye,{toValue:0,duration:le.motion.duration.fast,easing:a.bezier(...le.motion.easing.standard),useNativeDriver:!1}),s.timing(be,{toValue:ge,duration:le.motion.duration.fast,easing:a.bezier(...le.motion.easing.accelerate),useNativeDriver:!0})]);return e.start(({finished:e})=>{e&&!P&&ue(!1)}),()=>e.stop()},[P,me,ye,be,fe,ge,le.motion.duration.fast,le.motion.easing.standard,le.motion.easing.accelerate,le.motion.spring.snappy]);const{handleGesture:Ce}=k({drag:fe,travel:ge,onDismiss:O}),ke=i(()=>f.Native(),[]),[ve,ze]=n(0),we=T(e=>e.height),Le=me?Math.max(0,Math.round(we)):0,Re=Math.max(ae.top,g.currentHeight??0)+le.spacing.sm,We=Le>0,Ie=We?Math.max(0,Math.min(ge,(ve>0?ve:he)-Le-Re)):ge;o(()=>{P||pe("")},[P]);const De=i(()=>{const e=_?de.trim().toLowerCase():"",matches=t=>0===e.length||J(t).toLowerCase().includes(e)||(Z(t)??"").toLowerCase().includes(e);if(!j)return F.filter(matches).map(e=>({kind:"option",option:e}));const t=[];return j.forEach((e,o)=>{const i=e.options.filter(matches);if(0!==i.length){t.push({kind:"header",title:e.title});for(const e of i)t.push({kind:"option",option:e,section:o})}}),t},[_,de,F,j,J,Z]),He=t(()=>{O()},[O]),Pe=r(null),Oe=i(()=>{const e=new Map;if(!A)return e;let t=0;if(j)for(let e=De.length-1;e>=0;e-=1)if("header"===De[e].kind){t=e+1;break}for(let o=t;o<De.length;o+=1){const t=De[o];if("option"!==t.kind)continue;const i=J(t.option).trim().charAt(0).toUpperCase(),r=/^[A-Z]$/.test(i)?i:"#";e.has(r)||e.set(r,o)}return e},[A,De,j,J]),Be=A&&Oe.size>0&&0===de.trim().length,Ve=i(()=>[..."ABCDEFGHIJKLMNOPQRSTUVWXYZ",...Oe.has("#")?["#"]:[]],[Oe]),Fe=t(e=>{const t=Oe.get(e);void 0!==t&&Pe.current?.scrollToIndex({index:t,animated:!0,viewPosition:0})},[Oe]),je=r(null),Me=t(()=>{null!==je.current&&(clearTimeout(je.current),je.current=null)},[]),Ne=t(e=>{Pe.current?.scrollToOffset({offset:e.averageItemLength*e.index,animated:!1}),Me(),je.current=setTimeout(()=>{je.current=null,Pe.current?.scrollToIndex({index:e.index,animated:!0,viewPosition:0})},50)},[Me]);o(()=>(me||Me(),Me),[me,Me]);return I(d,{visible:me,transparent:!0,animationType:"none",onRequestClose:He,onDismiss:()=>Se.current?.(),statusBarTranslucent:!0,navigationBarTranslucent:!0,children:D(S,{collapsable:!1,onLayout:e=>ze(e.nativeEvent.layout.height),style:[m.absoluteFill,{backgroundColor:le.colors.background.overlay}],children:[I(h,{style:m.absoluteFill,onPress:He,accessibilityRole:"button",accessibilityLabel:"Close picker"}),D(s.View,{testID:se,accessibilityViewIsModal:!0,accessibilityLabel:te??V??"Options",style:[ce.sheet,{maxHeight:Ie,bottom:Le,paddingBottom:We?16:ae.bottom+16,backgroundColor:le.colors.background.elevated,borderTopLeftRadius:le.radius.xl,borderTopRightRadius:le.radius.xl,...L,transform:[{translateY:xe}],...le.shadows.xl}],children:[I(x,{gesture:Ce,children:D(b,{children:[I(b,{style:ce.sheetHandleRow,children:I(b,{style:[ce.sheetHandle,{backgroundColor:le.components.select?.handleColor??le.components.bottomSheet?.handleColor??le.colors.border.primary}]})}),V?I(u,{style:[ce.sheetTitle,{color:le.colors.text.primary,fontSize:le.typography.fontSize.lg,fontWeight:le.typography.fontWeight.semibold,paddingHorizontal:le.spacing.lg,marginBottom:le.spacing.sm}],children:V}):null]})}),_?I(b,{style:[ce.searchWrap,{marginHorizontal:le.spacing.lg,marginBottom:le.spacing.sm}],children:D(b,{style:[ce.searchBox,{backgroundColor:le.colors.background.secondary,borderColor:le.colors.border.primary,borderRadius:le.radius.md,...L,paddingHorizontal:le.spacing.md,gap:le.spacing.sm}],children:[(le.icons?.search??R.search)({size:18,color:le.colors.text.tertiary}),I(y,{value:de,onChangeText:pe,placeholder:E,placeholderTextColor:le.colors.text.tertiary,selectionColor:ee??le.colors.border.focus,accessibilityLabel:"Search options",style:[ce.searchInput,{color:le.colors.text.primary,fontSize:le.typography.fontSize.base,paddingVertical:le.spacing.sm}]}),de.length>0?I(h,{onPress:()=>pe(""),hitSlop:8,accessibilityRole:"button",accessibilityLabel:"Clear search",children:(le.icons?.close??R.close)({size:18,color:le.colors.text.secondary})}):null]})}):null,D(b,{style:[ce.listWrap,Be?ce.listRow:null],children:[I(x,{gesture:ke,children:I(c,{ref:Pe,data:De,keyExtractor:e=>"header"===e.kind?`h:${e.title}`:`o:${e.section??""}:${String(U(e.option))}`,renderItem:({item:e})=>{if("header"===e.kind)return I(b,{accessible:!0,accessibilityRole:"header",style:[ce.sectionHeader,{paddingHorizontal:le.spacing.lg,paddingTop:le.spacing.md}],children:M?M(e.title):I(u,{style:[ce.sectionTitle,{color:le.colors.text.tertiary,fontSize:le.typography.fontSize.xs,fontWeight:le.typography.fontWeight.semibold}],children:e.title.toUpperCase()})});const t=e.option,o=J(t),i=U(t),r=Z(t),n=q(t),s=K(i),l=Y(t),a=G?.(t)??!1;return D(h,{onPress:()=>Q(t),disabled:l,android_ripple:{color:le.colors.surface.pressed,borderless:!1},accessibilityRole:"button",accessibilityLabel:o,accessibilityState:{selected:s,disabled:l},style:({pressed:e})=>[ce.optionRow,{backgroundColor:s?le.colors.surface.selected:e?le.colors.surface.pressed:"transparent",opacity:l?.5:1,paddingHorizontal:le.spacing.lg,paddingVertical:le.spacing.md},oe,s?ie:null],children:[N?I(b,{style:ce.optionTextWrap,children:N(t,{selected:s,disabled:l})}):D(H,{children:[n?I(b,{style:ce.optionIcon,children:n}):null,D(b,{style:ce.optionTextWrap,children:[I(u,{style:[ce.optionLabel,{color:a?le.colors.error:s?le.colors.primary:le.colors.text.primary,fontSize:le.typography.fontSize.base,fontWeight:s?le.typography.fontWeight.semibold:le.typography.fontWeight.medium},re,s?ne:null],numberOfLines:1,children:o}),r?I(u,{style:[ce.optionDescription,{color:le.colors.text.tertiary,fontSize:le.typography.fontSize.sm}],numberOfLines:2,children:r}):null]})]}),X?I(b,{style:[ce.checkbox,{borderColor:s?le.colors.primary:le.colors.border.primary,backgroundColor:s?le.colors.primary:"transparent"}],children:s?I(b,{style:ce.checkboxTick}):null}):s?I(b,{style:[ce.singleSelectedDot,{backgroundColor:le.colors.primary}]}):null]})},onScrollToIndexFailed:Ne,overScrollMode:"never",bounces:!1,keyboardShouldPersistTaps:"handled",showsVerticalScrollIndicator:!Be,style:Be?ce.listBesideRail:null,ListEmptyComponent:I(u,{style:[ce.empty,{color:le.colors.text.tertiary,fontSize:le.typography.fontSize.sm,paddingVertical:le.spacing.xl}],children:$})})}),Be?I(b,{style:[ce.rail,{paddingRight:le.spacing.xs}],accessibilityRole:"list",accessibilityLabel:"Jump to letter",testID:"option-sheet-alphabet",children:Ve.map(e=>{const t=Oe.has(e);return I(h,{onPress:()=>Fe(e),disabled:!t,hitSlop:{left:8,right:8},accessibilityRole:"button",accessibilityLabel:`Jump to ${e}`,accessibilityState:{disabled:!t},style:ce.railLetter,children:I(u,{style:[ce.railLetterText,{color:t?le.colors.primary:le.colors.text.tertiary,fontSize:le.typography.fontSize.xs,fontWeight:le.typography.fontWeight.semibold,opacity:t?1:.45}],children:e})},e)})}):null]}),X?I(b,{style:[ce.sheetFooter,{borderTopColor:le.colors.border.secondary,paddingHorizontal:le.spacing.lg,paddingVertical:le.spacing.md}],children:I(h,{onPress:He,accessibilityRole:"button",accessibilityLabel:"Done",style:({pressed:e})=>[ce.doneButton,{backgroundColor:e?le.colors.primaryPressed:le.colors.primary,borderRadius:le.radius.md,...L,paddingVertical:le.spacing.sm,paddingHorizontal:le.spacing.lg}],children:I(u,{style:{color:le.colors.onPrimary,fontSize:le.typography.fontSize.base,fontWeight:le.typography.fontWeight.semibold},children:"Done"})})}):null]}),I(W,{})]})})};OptionSheet.displayName="OptionSheet";const buildStyles=e=>m.create({sheet:{position:"absolute",left:0,right:0,bottom:0,paddingBottom:16,overflow:"hidden"},sheetHandleRow:{alignItems:"center",paddingTop:10,paddingBottom:8},sheetHandle:{width:36,height:4,borderRadius:2,...L},sheetTitle:{includeFontPadding:!1},searchWrap:{width:"auto"},searchBox:{flexDirection:"row",alignItems:"center",borderWidth:1},searchInput:{flex:1,includeFontPadding:!1},optionRow:{flexDirection:"row",alignItems:"center"},sectionHeader:{paddingBottom:4},listWrap:{flexShrink:1},listRow:{flexDirection:"row"},listBesideRail:{flex:1},rail:{justifyContent:"space-between",alignItems:"center",alignSelf:"stretch",paddingVertical:4},railLetter:{paddingHorizontal:4,minHeight:14,justifyContent:"center"},railLetterText:{includeFontPadding:!1,lineHeight:14},sectionTitle:{includeFontPadding:!1,letterSpacing:.6},optionIcon:{marginRight:12},optionTextWrap:{flex:1},optionLabel:{includeFontPadding:!1},optionDescription:{includeFontPadding:!1,marginTop:2},checkbox:{width:22,height:22,borderRadius:6,...L,borderWidth:2,alignItems:"center",justifyContent:"center",marginLeft:12},checkboxTick:{width:10,height:6,borderLeftWidth:2,borderBottomWidth:2,borderColor:e.colors.onPrimary,transform:[{rotate:"-45deg"},{translateY:-1}]},singleSelectedDot:{width:8,height:8,borderRadius:4,...L,marginLeft:12},empty:{textAlign:"center"},sheetFooter:{borderTopWidth:m.hairlineWidth,alignItems:"flex-end"},doneButton:{alignSelf:"flex-end"}});export default OptionSheet;
1
+ "use strict";import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Dimensions,Easing,FlatList,Modal,Platform,Pressable,StatusBar,StyleSheet,Text,TextInput,View}from"react-native";import{Gesture,GestureDetector,GestureHandlerRootView}from"react-native-gesture-handler";import{useKeyboardState}from"react-native-keyboard-controller";import{useSafeAreaInsets}from"react-native-safe-area-context";import{useDragToDismiss}from"../../hooks/useDragToDismiss.js";import{createAnimatedValue,setNativeValue,useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{defaultIcons}from"../AppIcon/defaultIcons.js";import{ToastHost}from"../Toast/ToastProvider.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const SEARCH_ICON_SIZE=18;export const OptionSheet=e=>{const{open:t,onClose:o,onAfterClose:i,title:s,options:r,sections:n,renderSectionHeader:a,renderOption:l,alphabetIndex:c=!1,searchPlaceholder:d="Search…",emptyText:p="No options",labelOf:u,getValue:h,disabledOf:m,destructiveOf:g,descriptionOf:y,iconOf:f,isSelected:b,onSelect:x,multi:S=!1,searchable:T=!1,searchSelectionColor:j,accessibilityLabel:C,optionStyle:w,selectedOptionStyle:_,optionTextStyle:R,selectedOptionTextStyle:V,testID:k}=e,I=useTheme(),v=useSafeAreaInsets(),z=useMemo(()=>buildStyles(I),[I]),[D,L]=useState(""),P=Dimensions.get("window").height,H=Math.round(.7*P),[W,A]=useState(t),M=useRef(createAnimatedValue(0)).current,O=useRef(createAnimatedValue(H)).current,B=useRef(createAnimatedValue(0)).current,E=useMemo(()=>Animated.add(O,B),[O,B]);useEffect(()=>{t&&A(!0)},[t]);const F=useRef(i);F.current=i;const N=useRef(W);useEffect(()=>{N.current&&!W&&"ios"!==Platform.OS&&F.current?.(),N.current=W},[W]),useEffect(()=>{if(!W)return;t&&setNativeValue(B,0);const e=t?Animated.parallel([Animated.timing(M,{toValue:1,duration:I.motion.duration.fast,easing:Easing.bezier(...I.motion.easing.standard),useNativeDriver:!1}),Animated.spring(O,{toValue:0,damping:I.motion.spring.snappy.damping,stiffness:I.motion.spring.snappy.stiffness,mass:I.motion.spring.snappy.mass,useNativeDriver:!0})]):Animated.parallel([Animated.timing(M,{toValue:0,duration:I.motion.duration.fast,easing:Easing.bezier(...I.motion.easing.standard),useNativeDriver:!1}),Animated.timing(O,{toValue:H,duration:I.motion.duration.fast,easing:Easing.bezier(...I.motion.easing.accelerate),useNativeDriver:!0})]);return e.start(({finished:e})=>{e&&!t&&A(!1)}),()=>e.stop()},[t,W,M,O,B,H,I.motion.duration.fast,I.motion.easing.standard,I.motion.easing.accelerate,I.motion.spring.snappy]);const{handleGesture:G}=useDragToDismiss({drag:B,travel:H,onDismiss:o}),$=useMemo(()=>Gesture.Native(),[]),[J,K]=useState(0),U=useKeyboardState(e=>e.height),Y=W?Math.max(0,Math.round(U)):0,Z=Math.max(v.top,StatusBar.currentHeight??0)+I.spacing.sm,q=Y>0,Q=q?Math.max(0,Math.min(H,(J>0?J:P)-Y-Z)):H;useEffect(()=>{t||L("")},[t]);const X=useMemo(()=>{const e=T?D.trim().toLowerCase():"",matches=t=>0===e.length||u(t).toLowerCase().includes(e)||(y(t)??"").toLowerCase().includes(e);if(!n)return r.filter(matches).map(e=>({kind:"option",option:e}));const t=[];return n.forEach((e,o)=>{const i=e.options.filter(matches);if(0!==i.length){t.push({kind:"header",title:e.title});for(const e of i)t.push({kind:"option",option:e,section:o})}}),t},[T,D,r,n,u,y]),ee=useCallback(()=>{o()},[o]),te=useRef(null),oe=useMemo(()=>{const e=new Map;if(!c)return e;let t=0;if(n)for(let e=X.length-1;e>=0;e-=1)if("header"===X[e].kind){t=e+1;break}for(let o=t;o<X.length;o+=1){const t=X[o];if("option"!==t.kind)continue;const i=u(t.option).trim().charAt(0).toUpperCase(),s=/^[A-Z]$/.test(i)?i:"#";e.has(s)||e.set(s,o)}return e},[c,X,n,u]),ie=c&&oe.size>0&&0===D.trim().length,se=useMemo(()=>[..."ABCDEFGHIJKLMNOPQRSTUVWXYZ",...oe.has("#")?["#"]:[]],[oe]),re=useCallback(e=>{const t=oe.get(e);void 0!==t&&te.current?.scrollToIndex({index:t,animated:!0,viewPosition:0})},[oe]),ne=useRef(null),ae=useCallback(()=>{null!==ne.current&&(clearTimeout(ne.current),ne.current=null)},[]),le=useCallback(e=>{te.current?.scrollToOffset({offset:e.averageItemLength*e.index,animated:!1}),ae(),ne.current=setTimeout(()=>{ne.current=null,te.current?.scrollToIndex({index:e.index,animated:!0,viewPosition:0})},50)},[ae]);useEffect(()=>(W||ae(),ae),[W,ae]);return _jsx(Modal,{visible:W,transparent:!0,animationType:"none",onRequestClose:ee,onDismiss:()=>F.current?.(),statusBarTranslucent:!0,navigationBarTranslucent:!0,children:_jsxs(GestureHandlerRootView,{collapsable:!1,onLayout:e=>K(e.nativeEvent.layout.height),style:[StyleSheet.absoluteFill,{backgroundColor:I.colors.background.overlay}],children:[_jsx(Pressable,{style:StyleSheet.absoluteFill,onPress:ee,accessibilityRole:"button",accessibilityLabel:"Close picker"}),_jsxs(Animated.View,{testID:k,accessibilityViewIsModal:!0,accessibilityLabel:C??s??"Options",style:[z.sheet,{maxHeight:Q,bottom:Y,paddingBottom:q?16:v.bottom+16,backgroundColor:I.colors.background.elevated,borderTopLeftRadius:I.radius.xl,borderTopRightRadius:I.radius.xl,...smoothCorners,transform:[{translateY:E}],...I.shadows.xl}],children:[_jsx(GestureDetector,{gesture:G,children:_jsxs(View,{children:[_jsx(View,{style:z.sheetHandleRow,children:_jsx(View,{style:[z.sheetHandle,{backgroundColor:I.components.select?.handleColor??I.components.bottomSheet?.handleColor??I.colors.border.primary}]})}),s?_jsx(Text,{style:[z.sheetTitle,{color:I.colors.text.primary,fontSize:I.typography.fontSize.lg,fontWeight:I.typography.fontWeight.semibold,paddingHorizontal:I.spacing.lg,marginBottom:I.spacing.sm}],children:s}):null]})}),T?_jsx(View,{style:[z.searchWrap,{marginHorizontal:I.spacing.lg,marginBottom:I.spacing.sm}],children:_jsxs(View,{style:[z.searchBox,{backgroundColor:I.colors.background.secondary,borderColor:I.colors.border.primary,borderRadius:I.radius.md,...smoothCorners,paddingHorizontal:I.spacing.md,gap:I.spacing.sm}],children:[(I.icons?.search??defaultIcons.search)({size:18,color:I.colors.text.tertiary}),_jsx(TextInput,{value:D,onChangeText:L,placeholder:d,placeholderTextColor:I.colors.text.tertiary,selectionColor:j??I.colors.border.focus,accessibilityLabel:"Search options",style:[z.searchInput,{color:I.colors.text.primary,fontSize:I.typography.fontSize.base,paddingVertical:I.spacing.sm}]}),D.length>0?_jsx(Pressable,{onPress:()=>L(""),hitSlop:8,accessibilityRole:"button",accessibilityLabel:"Clear search",children:(I.icons?.close??defaultIcons.close)({size:18,color:I.colors.text.secondary})}):null]})}):null,_jsxs(View,{style:[z.listWrap,ie?z.listRow:null],children:[_jsx(GestureDetector,{gesture:$,children:_jsx(FlatList,{ref:te,data:X,keyExtractor:e=>"header"===e.kind?`h:${e.title}`:`o:${e.section??""}:${String(h(e.option))}`,renderItem:({item:e})=>{if("header"===e.kind)return _jsx(View,{accessible:!0,accessibilityRole:"header",style:[z.sectionHeader,{paddingHorizontal:I.spacing.lg,paddingTop:I.spacing.md}],children:a?a(e.title):_jsx(Text,{style:[z.sectionTitle,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.xs,fontWeight:I.typography.fontWeight.semibold}],children:e.title.toUpperCase()})});const t=e.option,o=u(t),i=h(t),s=y(t),r=f(t),n=b(i),c=m(t),d=g?.(t)??!1;return _jsxs(Pressable,{onPress:()=>x(t),disabled:c,android_ripple:{color:I.colors.surface.pressed,borderless:!1},accessibilityRole:"button",accessibilityLabel:o,accessibilityState:{selected:n,disabled:c},style:({pressed:e})=>[z.optionRow,{backgroundColor:n?I.colors.surface.selected:e?I.colors.surface.pressed:"transparent",opacity:c?.5:1,paddingHorizontal:I.spacing.lg,paddingVertical:I.spacing.md},w,n?_:null],children:[l?_jsx(View,{style:z.optionTextWrap,children:l(t,{selected:n,disabled:c})}):_jsxs(_Fragment,{children:[r?_jsx(View,{style:z.optionIcon,children:r}):null,_jsxs(View,{style:z.optionTextWrap,children:[_jsx(Text,{style:[z.optionLabel,{color:d?I.colors.error:n?I.colors.primary:I.colors.text.primary,fontSize:I.typography.fontSize.base,fontWeight:n?I.typography.fontWeight.semibold:I.typography.fontWeight.medium},R,n?V:null],numberOfLines:1,children:o}),s?_jsx(Text,{style:[z.optionDescription,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.sm}],numberOfLines:2,children:s}):null]})]}),S?_jsx(View,{style:[z.checkbox,{borderColor:n?I.colors.primary:I.colors.border.primary,backgroundColor:n?I.colors.primary:"transparent"}],children:n?_jsx(View,{style:z.checkboxTick}):null}):n?_jsx(View,{style:[z.singleSelectedDot,{backgroundColor:I.colors.primary}]}):null]})},onScrollToIndexFailed:le,overScrollMode:"never",bounces:!1,keyboardShouldPersistTaps:"handled",showsVerticalScrollIndicator:!ie,style:ie?z.listBesideRail:null,ListEmptyComponent:_jsx(Text,{style:[z.empty,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.sm,paddingVertical:I.spacing.xl}],children:p})})}),ie?_jsx(View,{style:[z.rail,{paddingRight:I.spacing.xs}],accessibilityRole:"list",accessibilityLabel:"Jump to letter",testID:"option-sheet-alphabet",children:se.map(e=>{const t=oe.has(e);return _jsx(Pressable,{onPress:()=>re(e),disabled:!t,hitSlop:{left:8,right:8},accessibilityRole:"button",accessibilityLabel:`Jump to ${e}`,accessibilityState:{disabled:!t},style:z.railLetter,children:_jsx(Text,{style:[z.railLetterText,{color:t?I.colors.primary:I.colors.text.tertiary,fontSize:I.typography.fontSize.xs,fontWeight:I.typography.fontWeight.semibold,opacity:t?1:.45}],children:e})},e)})}):null]}),S?_jsx(View,{style:[z.sheetFooter,{borderTopColor:I.colors.border.secondary,paddingHorizontal:I.spacing.lg,paddingVertical:I.spacing.md}],children:_jsx(Pressable,{onPress:ee,accessibilityRole:"button",accessibilityLabel:"Done",style:({pressed:e})=>[z.doneButton,{backgroundColor:e?I.colors.primaryPressed:I.colors.primary,borderRadius:I.radius.md,...smoothCorners,paddingVertical:I.spacing.sm,paddingHorizontal:I.spacing.lg}],children:_jsx(Text,{style:{color:I.colors.onPrimary,fontSize:I.typography.fontSize.base,fontWeight:I.typography.fontWeight.semibold},children:"Done"})})}):null]}),_jsx(ToastHost,{})]})})};OptionSheet.displayName="OptionSheet";const buildStyles=e=>StyleSheet.create({sheet:{position:"absolute",left:0,right:0,bottom:0,paddingBottom:16,overflow:"hidden"},sheetHandleRow:{alignItems:"center",paddingTop:10,paddingBottom:8},sheetHandle:{width:36,height:4,borderRadius:2,...smoothCorners},sheetTitle:{includeFontPadding:!1},searchWrap:{width:"auto"},searchBox:{flexDirection:"row",alignItems:"center",borderWidth:1},searchInput:{flex:1,includeFontPadding:!1},optionRow:{flexDirection:"row",alignItems:"center"},sectionHeader:{paddingBottom:4},listWrap:{flexShrink:1},listRow:{flexDirection:"row"},listBesideRail:{flex:1},rail:{justifyContent:"space-between",alignItems:"center",alignSelf:"stretch",paddingVertical:4},railLetter:{paddingHorizontal:4,minHeight:14,justifyContent:"center"},railLetterText:{includeFontPadding:!1,lineHeight:14},sectionTitle:{includeFontPadding:!1,letterSpacing:.6},optionIcon:{marginRight:12},optionTextWrap:{flex:1},optionLabel:{includeFontPadding:!1},optionDescription:{includeFontPadding:!1,marginTop:2},checkbox:{width:22,height:22,borderRadius:6,...smoothCorners,borderWidth:2,alignItems:"center",justifyContent:"center",marginLeft:12},checkboxTick:{width:10,height:6,borderLeftWidth:2,borderBottomWidth:2,borderColor:e.colors.onPrimary,transform:[{rotate:"-45deg"},{translateY:-1}]},singleSelectedDot:{width:8,height:8,borderRadius:4,...smoothCorners,marginLeft:12},empty:{textAlign:"center"},sheetFooter:{borderTopWidth:StyleSheet.hairlineWidth,alignItems:"flex-end"},doneButton:{alignSelf:"flex-end"}});export default OptionSheet;
@@ -1 +1 @@
1
- export{default,OptionSheet}from"./OptionSheet.js";
1
+ "use strict";export{default,OptionSheet}from"./OptionSheet.js";
@@ -1 +1 @@
1
- import{countryFlagEmoji as e,formatPhoneAsTyped as o,getPhoneCountries as n,isSupportedCountry as t,isValidNationalNumber as i,maxNationalNumberLength as l,splitPhoneNumber as r}from"@webority/mobile-core";import{PHONE_COUNTRY_NAMES as a}from"@webority/mobile-core/phone/countries";import{forwardRef as s,useCallback as c,useEffect as d,useImperativeHandle as u,useMemo as b,useRef as m,useState as p}from"react";import{Pressable as f,StyleSheet as g,Text as h,TextInput as y,View as N}from"react-native";import{useControllableState as C}from"../../hooks/index.js";import{fontFor as S,useTheme as v}from"../../theme/index.js";import{resolveHaptic as I,triggerHaptic as x}from"../../utils/index.js";import{FieldBase as L,FieldLabel as E,FieldMessage as T,RequiredPlaceholder as F,resolveFieldSize as A,resolveFieldTextStyle as z}from"../FieldBase/index.js";import{Chevron as O}from"../FieldBase/Chevron.js";import{useFloatingLabel as P}from"../FieldBase/useFloatingLabel.js";import{OptionSheet as D}from"../OptionSheet/OptionSheet.js";import{jsx as w,jsxs as j}from"react/jsx-runtime";export const DEFAULT_CALLING_CODES=[{iso:"IN",code:"91",label:"India"},{iso:"AE",code:"971",label:"United Arab Emirates"},{iso:"GB",code:"44",label:"United Kingdom"},{iso:"US",code:"1",label:"United States"},{iso:"CA",code:"1",label:"Canada"},{iso:"AU",code:"61",label:"Australia"},{iso:"SG",code:"65",label:"Singapore"},{iso:"SA",code:"966",label:"Saudi Arabia"}];export const ALL_CALLING_CODES=n().map(e=>({iso:e.iso,code:e.callingCode,label:a[e.iso]??e.iso})).sort((e,o)=>e.label.localeCompare(o.label));const digitsOnly=e=>e.replace(/[^0-9]/g,"");export const formatE164=e=>`+${e.callingCode}${e.nationalNumber}`;export const parseE164=(e,o,n)=>{const t=e.replace(/[^0-9]/g,"");if(!t)return null;const i=r(`+${t}`);let l=i?.callingCode,a=i?.nationalNumber??"";if(!l){const e=Array.from(new Set(o.map(e=>e.code))).sort((e,o)=>o.length-e.length);if(l=e.find(e=>t.startsWith(e)),!l)return null;a=t.slice(l.length)}const s=o.filter(e=>e.code===l),c=s.find(e=>e.iso===n)?.iso??s.find(e=>e.iso===i?.country)?.iso??i?.country??s[0]?.iso??"";return{callingCode:l,nationalNumber:a,iso:c}};const planOf=e=>t(e)?e:null;export const PhoneNumberInput=s((n,t)=>{const{value:a,defaultValue:s,onChange:g,e164:S,onChangeE164:B,returnKeyType:$,submitBehavior:V,onSubmitEditing:_,blurOnSubmit:U,onComplete:W,onValidityChange:k,countries:G=ALL_CALLING_CODES,popularCountries:R,popularCountriesTitle:M="Popular",allCountriesTitle:q="All countries",hiddenCountries:K,showFlag:Y=!0,renderFlag:H,renderCountry:J,countrySearchPlaceholder:Q,showAlphabetIndex:X,defaultIso:Z="IN",validation:ee="any",maxLength:oe,formatAsYouType:ne=!0,countryLocked:te=!1,label:ie,labelMode:le="top",labelStyle:re,placeholder:ae="Phone number",helperText:se,error:ce,invalidMessage:de,required:ue,disabled:be=!1,size:me="md",variant:pe,borderRadius:fe,countrySheetTitle:ge="Country code",haptic:he,accessibilityLabel:ye,countryAccessibilityLabel:Ne,onFocus:Ce,onBlur:Se,style:ve,testID:Ie}=n,xe=v(),Le=b(()=>buildStyles(xe),[xe]),Ee=m(null),Te=b(()=>K?.length?G.filter(e=>!K.includes(e.iso)):G,[G,K]),Fe=b(()=>{if(!R?.length)return;const e=R.map(e=>Te.find(o=>o.iso===e)).filter(e=>void 0!==e);return e.length?[{title:M,options:e},{title:q,options:Te}]:void 0},[R,M,q,Te]),Ae=c((o,n,t)=>{if(!o)return null;if(H)return H(o);if(!Y)return null;const i=e(o.iso);return i?w(h,{style:[Le.flag,{fontSize:n}],testID:t,children:i}):null},[H,Y,Le.flag]),ze=c(e=>{const o=planOf(e),n=o?l(o,!1===ee?"any":ee):Number.POSITIVE_INFINITY;return oe?Math.min(n,oe):n},[oe,ee]),Oe=c((e,o)=>e.slice(0,ze(o)),[ze]),Pe=c((e,o)=>{const n=planOf(o)??void 0,t=r(e,n);if(!t)return null;const i=t.country??o,l=G.find(e=>e.iso===i);return{callingCode:l?.code??t.callingCode,nationalNumber:Oe(t.nationalNumber,i),iso:l?.iso??i}},[G,Oe]),De=b(()=>{const e=Te.find(e=>e.iso===Z)??Te[0]??G[0],o={callingCode:e?.code??"91",nationalNumber:"",iso:e?.iso??"IN"};return"string"==typeof s?Pe(s,o.iso)??o:s??o},[G,Te,Z,s,Pe]),we=c(e=>{if(!1===ee)return e.nationalNumber.length>0;const o=planOf(e.iso);return o?i(e.nationalNumber,o,ee):e.nationalNumber.length>0},[ee]),[je,Be]=p(De.iso),$e=b(()=>{if(void 0===S)return;const e=S?parseE164(S,G,je):null;if(e)return{...e,nationalNumber:Oe(e.nationalNumber,e.iso)};const o=G.find(e=>e.iso===je);return{callingCode:o?.code??De.callingCode,nationalNumber:"",iso:je}},[S,G,je,De.callingCode,Oe]),Ve=c(e=>{Be(e.iso),g?.(e),B?.(e.nationalNumber?formatE164(e):"",{country:G.find(o=>o.iso===e.iso),national:e.nationalNumber,valid:we(e)})},[g,B,G,we]),[_e,Ue]=C({value:a??$e,defaultValue:De,onChange:Ve}),[We,ke]=p(!1),Ge=c(()=>{be||Ee.current?.focus()},[be]),[Re,Me]=p(!1),[qe,Ke]=p(!1),[Ye,He]=p(!1),Je=m(!1);d(()=>{Ye||(Je.current=!1)},[Ye]);const Qe=A(xe,me),Xe=z(xe,{disabled:be}),Ze=pe??xe.components.field?.defaultVariant??"outlined",eo="underline"===Ze,oo=fe??xe.components.phoneNumberInput?.borderRadius,no=xe.spacing.md,[to,io]=p(0),lo=to+no+1+no,ro=_e.nationalNumber.length>0,ao=ue&&!ie&&!ro&&ae.length>0,so=We||ro,co=Boolean(ie)&&"float"===le&&to>0,uo=P({label:ie,enabled:co,floated:so,required:ue,variant:Ze,sizeTokens:Qe,leadingOffset:lo,paddingLeft:eo?0:Qe.paddingHorizontal,color:xe.colors.field.label,style:re}),bo=b(()=>G.find(e=>e.iso===_e.iso),[G,_e.iso]),mo=planOf(_e.iso),po=ne&&mo?o(_e.nationalNumber,mo):_e.nationalNumber,fo=ze(_e.iso),go=0===_e.nationalNumber.length||Re||!Number.isFinite(fo)?void 0:po.length+Math.max(0,fo-_e.nationalNumber.length),ho=we(_e);d(()=>{ro||Ke(!1)},[ro]);const yo=mo?l(mo,!1===ee?"any":ee):Number.POSITIVE_INFINITY,No=_e.nationalNumber.length>=yo,Co=ce??(!1!==ee&&!1!==de&&ro&&!ho&&(qe||No)?de||("mobile"===ee?"Enter a valid mobile number":"Enter a valid number"):void 0),So=m(ho),vo=m(_e);vo.current=_e,d(()=>{So.current!==ho&&(So.current=ho,k?.(ho),ho&&W?.(formatE164(vo.current)))},[ho,W,k]);const Io=c(e=>{if(e.includes("+")){const o=Pe(e,_e.iso);if(o&&!te&&Te.some(e=>e.iso===o.iso))return void Ue(o);if(o&&o.iso===_e.iso)return void Ue(o)}Ue({..._e,nationalNumber:Oe(digitsOnly(e),_e.iso)})},[Te,te,_e,Pe,Oe,Ue]),xo=c(e=>{const o=e;Ue({callingCode:o.code,iso:o.iso,nationalNumber:Oe(_e.nationalNumber,o.iso)}),He(!1);const n=I(he,"selection");n&&x(n)},[_e,he,Oe,Ue]);u(t,()=>({focus:()=>Ee.current?.focus(),blur:()=>Ee.current?.blur(),clear:()=>Ue({...vo.current,nationalNumber:""}),isFocused:()=>Ee.current?.isFocused()??!1,getValue:()=>vo.current,getE164:()=>formatE164(vo.current),getFormatted:()=>{const e=vo.current,n=planOf(e.iso);return n?o(e.nationalNumber,n):e.nationalNumber},isValid:()=>we(vo.current),getCountry:()=>G.find(e=>e.iso===vo.current.iso)}),[G,we,Ue]);const Lo=be||te,Eo=w(L,{size:me,variant:Ze,borderRadius:oo,topNotch:uo.topNotch,focused:We,disabled:be,error:Boolean(Co),filled:ro,onPress:Ge,pressFeedback:!1,leadingDivider:!0,paddingLeft:eo?0:void 0,leading:j(f,{onPress:()=>{Lo||(Je.current=!0,He(!0))},disabled:Lo,accessibilityRole:"button",accessibilityLabel:Ne??`Country code, currently +${_e.callingCode}`,accessibilityState:{disabled:Lo},hitSlop:6,onLayout:e=>{const{width:o}=e.nativeEvent.layout;io(e=>e===o?e:o)},style:Le.codeTrigger,testID:Ie?`${Ie}-code`:void 0,children:[Ae(bo,Qe.fontSize,Ie?`${Ie}-flag`:void 0),w(h,{style:[Le.codeText,{color:Xe.color,fontSize:Qe.fontSize}],children:`+${_e.callingCode}`}),te?null:w(O,{color:be?xe.colors.field.iconDisabled:xe.colors.field.icon,size:Qe.iconSize,open:Ye})]}),children:j(N,{style:Le.inputWrap,children:[w(y,{ref:Ee,value:po,maxLength:go,onChangeText:Io,returnKeyType:$,submitBehavior:V,onSubmitEditing:_,blurOnSubmit:U,onSelectionChange:e=>{const{start:o,end:n}=e.nativeEvent.selection;Me(o!==n)},onFocus:()=>{ke(!0),Ce?.()},onBlur:()=>{ke(!1),ro&&!Je.current&&Ke(!0),Se?.()},editable:!be,placeholder:co&&!so||ao?void 0:ae,placeholderTextColor:Xe.placeholderColor,accessibilityLabel:ye??ie??ae,selectionColor:xe.colors.field.caret,keyboardType:"phone-pad",textContentType:"telephoneNumber",autoComplete:"tel",style:[Le.input,{color:Xe.color,fontSize:Qe.fontSize,...Xe.weightStyle,paddingLeft:eo?0:void 0}],testID:Ie?`${Ie}-input`:void 0}),ao?w(F,{text:ae,color:Xe.placeholderColor,fontSize:Qe.fontSize,weightStyle:Xe.weightStyle}):null]})});return j(N,{style:ve,testID:Ie,children:[ie&&"top"===le?w(E,{size:me,required:ue,children:ie}):null,j(N,{style:Le.fieldWrapper,children:[Eo,uo.node]}),w(T,{size:me,error:Boolean(Co),text:Co??se}),w(D,{open:Ye,onClose:()=>He(!1),title:ge,options:Te,sections:Fe,labelOf:e=>`${e.label} (+${e.code})`,getValue:e=>e.iso,disabledOf:()=>!1,descriptionOf:()=>{},iconOf:e=>Ae(e,xe.typography.fontSize.lg),renderOption:J?(e,o)=>J(e,{selected:o.selected}):void 0,isSelected:e=>e===bo?.iso,onSelect:xo,searchable:Te.length>8,searchPlaceholder:Q,alphabetIndex:X??Te.length>20})]})});PhoneNumberInput.displayName="PhoneNumberInput";const buildStyles=e=>g.create({fieldWrapper:{position:"relative",overflow:"visible"},codeTrigger:{flexDirection:"row",alignItems:"center",gap:2},flag:{includeFontPadding:!1,marginRight:4},codeText:{...S(e,"semibold"),fontWeight:"600",includeFontPadding:!1,writingDirection:"ltr"},input:{padding:0,margin:0,includeFontPadding:!1,writingDirection:"ltr"},inputWrap:{flex:1,alignSelf:"stretch",justifyContent:"center"}});export default PhoneNumberInput;
1
+ "use strict";import{countryFlagEmoji,formatPhoneAsTyped,getPhoneCountries,isSupportedCountry,isValidNationalNumber,maxNationalNumberLength,splitPhoneNumber}from"@webority/mobile-core";import{PHONE_COUNTRY_NAMES}from"@webority/mobile-core/phone/countries";import{forwardRef,useCallback,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Pressable,StyleSheet,Text,TextInput,View}from"react-native";import{useControllableState}from"../../hooks/index.js";import{fontFor,useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/index.js";import{FieldBase,FieldLabel,FieldMessage,RequiredPlaceholder,resolveFieldSize,resolveFieldTextStyle}from"../FieldBase/index.js";import{Chevron}from"../FieldBase/Chevron.js";import{useFloatingLabel}from"../FieldBase/useFloatingLabel.js";import{OptionSheet}from"../OptionSheet/OptionSheet.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export const DEFAULT_CALLING_CODES=[{iso:"IN",code:"91",label:"India"},{iso:"AE",code:"971",label:"United Arab Emirates"},{iso:"GB",code:"44",label:"United Kingdom"},{iso:"US",code:"1",label:"United States"},{iso:"CA",code:"1",label:"Canada"},{iso:"AU",code:"61",label:"Australia"},{iso:"SG",code:"65",label:"Singapore"},{iso:"SA",code:"966",label:"Saudi Arabia"}];export const ALL_CALLING_CODES=getPhoneCountries().map(e=>({iso:e.iso,code:e.callingCode,label:PHONE_COUNTRY_NAMES[e.iso]??e.iso})).sort((e,o)=>e.label.localeCompare(o.label));const digitsOnly=e=>e.replace(/[^0-9]/g,"");export const formatE164=e=>`+${e.callingCode}${e.nationalNumber}`;export const parseE164=(e,o,t)=>{const i=e.replace(/[^0-9]/g,"");if(!i)return null;const n=splitPhoneNumber(`+${i}`);let l=n?.callingCode,r=n?.nationalNumber??"";if(!l){const e=Array.from(new Set(o.map(e=>e.code))).sort((e,o)=>o.length-e.length);if(l=e.find(e=>i.startsWith(e)),!l)return null;r=i.slice(l.length)}const a=o.filter(e=>e.code===l),s=a.find(e=>e.iso===t)?.iso??a.find(e=>e.iso===n?.country)?.iso??n?.country??a[0]?.iso??"";return{callingCode:l,nationalNumber:r,iso:s}};const planOf=e=>isSupportedCountry(e)?e:null;export const PhoneNumberInput=forwardRef((e,o)=>{const{value:t,defaultValue:i,onChange:n,e164:l,onChangeE164:r,returnKeyType:a,submitBehavior:s,onSubmitEditing:u,blurOnSubmit:d,onComplete:c,onValidityChange:b,countries:m=ALL_CALLING_CODES,popularCountries:p,popularCountriesTitle:f="Popular",allCountriesTitle:g="All countries",hiddenCountries:h,showFlag:y=!0,renderFlag:N,renderCountry:C,countrySearchPlaceholder:S,showAlphabetIndex:x,defaultIso:v="IN",validation:F="any",maxLength:I,formatAsYouType:T=!0,countryLocked:E=!1,label:L,labelMode:O="top",labelStyle:P,placeholder:j="Phone number",helperText:_,error:A,invalidMessage:w,required:z,disabled:R=!1,size:k="md",variant:M,borderRadius:V,countrySheetTitle:D="Country code",haptic:B,accessibilityLabel:$,countryAccessibilityLabel:H,onFocus:U,onBlur:W,style:q,testID:G}=e,Y=useTheme(),K=useMemo(()=>buildStyles(Y),[Y]),J=useRef(null),Q=useMemo(()=>h?.length?m.filter(e=>!h.includes(e.iso)):m,[m,h]),X=useMemo(()=>{if(!p?.length)return;const e=p.map(e=>Q.find(o=>o.iso===e)).filter(e=>void 0!==e);return e.length?[{title:f,options:e},{title:g,options:Q}]:void 0},[p,f,g,Q]),Z=useCallback((e,o,t)=>{if(!e)return null;if(N)return N(e);if(!y)return null;const i=countryFlagEmoji(e.iso);return i?_jsx(Text,{style:[K.flag,{fontSize:o}],testID:t,children:i}):null},[N,y,K.flag]),ee=useCallback(e=>{const o=planOf(e),t=o?maxNationalNumberLength(o,!1===F?"any":F):Number.POSITIVE_INFINITY;return I?Math.min(t,I):t},[I,F]),oe=useCallback((e,o)=>e.slice(0,ee(o)),[ee]),te=useCallback((e,o)=>{const t=planOf(o)??void 0,i=splitPhoneNumber(e,t);if(!i)return null;const n=i.country??o,l=m.find(e=>e.iso===n);return{callingCode:l?.code??i.callingCode,nationalNumber:oe(i.nationalNumber,n),iso:l?.iso??n}},[m,oe]),ie=useMemo(()=>{const e=Q.find(e=>e.iso===v)??Q[0]??m[0],o={callingCode:e?.code??"91",nationalNumber:"",iso:e?.iso??"IN"};return"string"==typeof i?te(i,o.iso)??o:i??o},[m,Q,v,i,te]),ne=useCallback(e=>{if(!1===F)return e.nationalNumber.length>0;const o=planOf(e.iso);return o?isValidNationalNumber(e.nationalNumber,o,F):e.nationalNumber.length>0},[F]),[le,re]=useState(ie.iso),ae=useMemo(()=>{if(void 0===l)return;const e=l?parseE164(l,m,le):null;if(e)return{...e,nationalNumber:oe(e.nationalNumber,e.iso)};const o=m.find(e=>e.iso===le);return{callingCode:o?.code??ie.callingCode,nationalNumber:"",iso:le}},[l,m,le,ie.callingCode,oe]),se=useCallback(e=>{re(e.iso),n?.(e),r?.(e.nationalNumber?formatE164(e):"",{country:m.find(o=>o.iso===e.iso),national:e.nationalNumber,valid:ne(e)})},[n,r,m,ne]),[ue,de]=useControllableState({value:t??ae,defaultValue:ie,onChange:se}),[ce,be]=useState(!1),me=useCallback(()=>{R||J.current?.focus()},[R]),[pe,fe]=useState(!1),[ge,he]=useState(!1),[ye,Ne]=useState(!1),Ce=useRef(!1);useEffect(()=>{ye||(Ce.current=!1)},[ye]);const Se=resolveFieldSize(Y,k),xe=resolveFieldTextStyle(Y,{disabled:R}),ve=M??Y.components.field?.defaultVariant??"outlined",Fe="underline"===ve,Ie=V??Y.components.phoneNumberInput?.borderRadius,Te=Y.spacing.md,[Ee,Le]=useState(0),Oe=Ee+Te+1+Te,Pe=ue.nationalNumber.length>0,je=z&&!L&&!Pe&&j.length>0,_e=ce||Pe,Ae=Boolean(L)&&"float"===O&&Ee>0,we=useFloatingLabel({label:L,enabled:Ae,floated:_e,required:z,variant:ve,sizeTokens:Se,leadingOffset:Oe,paddingLeft:Fe?0:Se.paddingHorizontal,color:Y.colors.field.label,style:P}),ze=useMemo(()=>m.find(e=>e.iso===ue.iso),[m,ue.iso]),Re=planOf(ue.iso),ke=T&&Re?formatPhoneAsTyped(ue.nationalNumber,Re):ue.nationalNumber,Me=ee(ue.iso),Ve=0===ue.nationalNumber.length||pe||!Number.isFinite(Me)?void 0:ke.length+Math.max(0,Me-ue.nationalNumber.length),De=ne(ue);useEffect(()=>{Pe||he(!1)},[Pe]);const Be=Re?maxNationalNumberLength(Re,!1===F?"any":F):Number.POSITIVE_INFINITY,$e=ue.nationalNumber.length>=Be,He=A??(!1!==F&&!1!==w&&Pe&&!De&&(ge||$e)?w||("mobile"===F?"Enter a valid mobile number":"Enter a valid number"):void 0),Ue=useRef(De),We=useRef(ue);We.current=ue,useEffect(()=>{Ue.current!==De&&(Ue.current=De,b?.(De),De&&c?.(formatE164(We.current)))},[De,c,b]);const qe=useCallback(e=>{if(e.includes("+")){const o=te(e,ue.iso);if(o&&!E&&Q.some(e=>e.iso===o.iso))return void de(o);if(o&&o.iso===ue.iso)return void de(o)}de({...ue,nationalNumber:oe(digitsOnly(e),ue.iso)})},[Q,E,ue,te,oe,de]),Ge=useCallback(e=>{const o=e;de({callingCode:o.code,iso:o.iso,nationalNumber:oe(ue.nationalNumber,o.iso)}),Ne(!1);const t=resolveHaptic(B,"selection");t&&triggerHaptic(t)},[ue,B,oe,de]);useImperativeHandle(o,()=>({focus:()=>J.current?.focus(),blur:()=>J.current?.blur(),clear:()=>de({...We.current,nationalNumber:""}),isFocused:()=>J.current?.isFocused()??!1,getValue:()=>We.current,getE164:()=>formatE164(We.current),getFormatted:()=>{const e=We.current,o=planOf(e.iso);return o?formatPhoneAsTyped(e.nationalNumber,o):e.nationalNumber},isValid:()=>ne(We.current),getCountry:()=>m.find(e=>e.iso===We.current.iso)}),[m,ne,de]);const Ye=R||E,Ke=_jsx(FieldBase,{size:k,variant:ve,borderRadius:Ie,topNotch:we.topNotch,focused:ce,disabled:R,error:Boolean(He),filled:Pe,onPress:me,pressFeedback:!1,leadingDivider:!0,paddingLeft:Fe?0:void 0,leading:_jsxs(Pressable,{onPress:()=>{Ye||(Ce.current=!0,Ne(!0))},disabled:Ye,accessibilityRole:"button",accessibilityLabel:H??`Country code, currently +${ue.callingCode}`,accessibilityState:{disabled:Ye},hitSlop:6,onLayout:e=>{const{width:o}=e.nativeEvent.layout;Le(e=>e===o?e:o)},style:K.codeTrigger,testID:G?`${G}-code`:void 0,children:[Z(ze,Se.fontSize,G?`${G}-flag`:void 0),_jsx(Text,{style:[K.codeText,{color:xe.color,fontSize:Se.fontSize}],children:`+${ue.callingCode}`}),E?null:_jsx(Chevron,{color:R?Y.colors.field.iconDisabled:Y.colors.field.icon,size:Se.iconSize,open:ye})]}),children:_jsxs(View,{style:K.inputWrap,children:[_jsx(TextInput,{ref:J,value:ke,maxLength:Ve,onChangeText:qe,returnKeyType:a,submitBehavior:s,onSubmitEditing:u,blurOnSubmit:d,onSelectionChange:e=>{const{start:o,end:t}=e.nativeEvent.selection;fe(o!==t)},onFocus:()=>{be(!0),U?.()},onBlur:()=>{be(!1),Pe&&!Ce.current&&he(!0),W?.()},editable:!R,placeholder:Ae&&!_e||je?void 0:j,placeholderTextColor:xe.placeholderColor,accessibilityLabel:$??L??j,selectionColor:Y.colors.field.caret,keyboardType:"phone-pad",textContentType:"telephoneNumber",autoComplete:"tel",style:[K.input,{color:xe.color,fontSize:Se.fontSize,...xe.weightStyle,paddingLeft:Fe?0:void 0}],testID:G?`${G}-input`:void 0}),je?_jsx(RequiredPlaceholder,{text:j,color:xe.placeholderColor,fontSize:Se.fontSize,weightStyle:xe.weightStyle}):null]})});return _jsxs(View,{style:q,testID:G,children:[L&&"top"===O?_jsx(FieldLabel,{size:k,required:z,children:L}):null,_jsxs(View,{style:K.fieldWrapper,children:[Ke,we.node]}),_jsx(FieldMessage,{size:k,error:Boolean(He),text:He??_}),_jsx(OptionSheet,{open:ye,onClose:()=>Ne(!1),title:D,options:Q,sections:X,labelOf:e=>`${e.label} (+${e.code})`,getValue:e=>e.iso,disabledOf:()=>!1,descriptionOf:()=>{},iconOf:e=>Z(e,Y.typography.fontSize.lg),renderOption:C?(e,o)=>C(e,{selected:o.selected}):void 0,isSelected:e=>e===ze?.iso,onSelect:Ge,searchable:Q.length>8,searchPlaceholder:S,alphabetIndex:x??Q.length>20})]})});PhoneNumberInput.displayName="PhoneNumberInput";const buildStyles=e=>StyleSheet.create({fieldWrapper:{position:"relative",overflow:"visible"},codeTrigger:{flexDirection:"row",alignItems:"center",gap:2},flag:{includeFontPadding:!1,marginRight:4},codeText:{...fontFor(e,"semibold"),fontWeight:"600",includeFontPadding:!1,writingDirection:"ltr"},input:{padding:0,margin:0,includeFontPadding:!1,writingDirection:"ltr"},inputWrap:{flex:1,alignSelf:"stretch",justifyContent:"center"}});export default PhoneNumberInput;
@@ -1 +1 @@
1
- export{ALL_CALLING_CODES,DEFAULT_CALLING_CODES,default,formatE164,PhoneNumberInput,parseE164}from"./PhoneNumberInput.js";
1
+ "use strict";export{ALL_CALLING_CODES,DEFAULT_CALLING_CODES,default,formatE164,PhoneNumberInput,parseE164}from"./PhoneNumberInput.js";
@@ -1 +1 @@
1
- import e,{forwardRef as l,useMemo as i}from"react";import{StyleSheet as t,Text as r,View as o}from"react-native";import{useTheme as s}from"../../theme/index.js";import{FieldBase as n,FieldLabel as a,FieldMessage as c,fieldTextAsString as d,hasFieldText as y,RequiredMark as b,resolveFieldSize as u,resolveFieldTextStyle as g}from"../FieldBase/index.js";import{Chevron as m}from"../FieldBase/Chevron.js";import{jsx as h,jsxs as p}from"react/jsx-runtime";const x=l((e,l)=>{const{value:t,placeholder:x,label:f,help:S,helperText:z,error:v,required:P=!1,onPress:j,clearable:w=!1,onClear:F,leadingIcon:C,trailing:I,disabled:L=!1,size:R="md",variant:T,style:D,triggerStyle:q,valueStyle:B,labelStyle:N,messageStyle:$,accessibilityLabel:k,testID:H}=e,O=s(),A=i(()=>buildStyles(O),[O]),E=u(O,R),G=g(O,{disabled:L}),J="string"==typeof t&&t.length>0,K=y(v),M=y(f),Q=J?t:x??"Select…",U=J?G.color:G.placeholderColor,V=J?`${d(f)??"Selection"}: ${t}`:x??"No selection",W=k??V,X={disabled:L},Y=void 0===I,Z=w&&J&&!L;return p(o,{style:[A.root,D],testID:H,children:[M?h(a,{size:R,required:P,help:S,style:N,children:f}):null,h(n,{size:R,variant:T,disabled:L,error:K,filled:J,onPress:j,leading:C,trailing:Z||Y||null!==I?p(o,{style:A.trailingRow,children:[Z?h(r,{onPress:()=>{L||F?.()},accessibilityRole:"button",accessibilityLabel:"Clear",style:{fontSize:E.iconSize,color:O.colors.text.secondary,paddingHorizontal:4},children:"×"}):null,void 0!==I?I:Y?h(m,{size:E.iconSize,color:L?O.colors.text.disabled:O.colors.text.tertiary}):null]}):null,accessibilityLabel:W,accessibilityState:X,accessibilityRole:"button",style:q,children:p(r,{numberOfLines:1,style:[A.valueText,{color:U,fontSize:E.fontSize,...G.weightStyle},B],children:[Q,J||!P||M?null:h(b,{})]})}),h(c,{size:R,error:K,text:K?v:z,style:$})]})});x.displayName="PickerTrigger";const buildStyles=e=>t.create({root:{width:"100%"},label:{includeFontPadding:!1},valueText:{flex:1,includeFontPadding:!1},message:{includeFontPadding:!1},trailingRow:{flexDirection:"row",alignItems:"center"}});export{x as PickerTrigger};export default x;
1
+ "use strict";import React,{forwardRef,useMemo}from"react";import{StyleSheet,Text,View}from"react-native";import{useTheme}from"../../theme/index.js";import{FieldBase,FieldLabel,FieldMessage,fieldTextAsString,hasFieldText,RequiredMark,resolveFieldSize,resolveFieldTextStyle}from"../FieldBase/index.js";import{Chevron}from"../FieldBase/Chevron.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const PickerTrigger=forwardRef((e,l)=>{const{value:i,placeholder:t,label:r,help:s,helperText:o,error:a,required:d=!1,onPress:n,clearable:c=!1,onClear:x,leadingIcon:g,trailing:u,disabled:y=!1,size:b="md",variant:h,style:S,triggerStyle:m,valueStyle:f,labelStyle:T,messageStyle:F,accessibilityLabel:j,testID:p}=e,v=useTheme(),z=useMemo(()=>buildStyles(v),[v]),P=resolveFieldSize(v,b),_=resolveFieldTextStyle(v,{disabled:y}),w="string"==typeof i&&i.length>0,R=hasFieldText(a),k=hasFieldText(r),C=w?i:t??"Select…",L=w?_.color:_.placeholderColor,M=w?`${fieldTextAsString(r)??"Selection"}: ${i}`:t??"No selection",q=j??M,B={disabled:y},I=void 0===u,D=c&&w&&!y;return _jsxs(View,{style:[z.root,S],testID:p,children:[k?_jsx(FieldLabel,{size:b,required:d,help:s,style:T,children:r}):null,_jsx(FieldBase,{size:b,variant:h,disabled:y,error:R,filled:w,onPress:n,leading:g,trailing:D||I||null!==u?_jsxs(View,{style:z.trailingRow,children:[D?_jsx(Text,{onPress:()=>{y||x?.()},accessibilityRole:"button",accessibilityLabel:"Clear",style:{fontSize:P.iconSize,color:v.colors.text.secondary,paddingHorizontal:4},children:"×"}):null,void 0!==u?u:I?_jsx(Chevron,{size:P.iconSize,color:y?v.colors.text.disabled:v.colors.text.tertiary}):null]}):null,accessibilityLabel:q,accessibilityState:B,accessibilityRole:"button",style:m,children:_jsxs(Text,{numberOfLines:1,style:[z.valueText,{color:L,fontSize:P.fontSize,..._.weightStyle},f],children:[C,w||!d||k?null:_jsx(RequiredMark,{})]})}),_jsx(FieldMessage,{size:b,error:R,text:R?a:o,style:F})]})});PickerTrigger.displayName="PickerTrigger";const buildStyles=e=>StyleSheet.create({root:{width:"100%"},label:{includeFontPadding:!1},valueText:{flex:1,includeFontPadding:!1},message:{includeFontPadding:!1},trailingRow:{flexDirection:"row",alignItems:"center"}});export{PickerTrigger};export default PickerTrigger;
@@ -1 +1 @@
1
- export{default,PickerTrigger}from"./PickerTrigger.js";
1
+ "use strict";export{default,PickerTrigger}from"./PickerTrigger.js";
@@ -1 +1 @@
1
- import{forwardRef as e,useMemo as t}from"react";import{StyleSheet as r,Text as o,View as i}from"react-native";import{fontFor as n,useTheme as l}from"../../theme/index.js";import{smoothCorners as s}from"../../utils/corners.js";import{AppIcon as a}from"../AppIcon/index.js";import{Avatar as c}from"../Avatar/index.js";import{ProgressRing as m}from"../ProgressRing/index.js";import{jsx as p,jsxs as d}from"react/jsx-runtime";const g=56,y=1,u=e((e,r)=>{const{progress:n,title:u,subtitle:h,description:b,source:f,ImageComponent:x,size:S=g,avatarTone:z="neutral",avatarBackgroundColor:C,avatarColor:I,ringWidth:v,ringGap:w=y,ringVariant:j="banded",tone:D,ringColor:k,animated:M=!0,showCompleteBadge:$=!0,trailing:L,accessibilityLabel:R,style:G,titleStyle:N,subtitleStyle:B,descriptionStyle:P,testID:T}=e,W=l(),A=t(()=>buildStyles(W),[W]),H=v??W.components.progressRing?.strokeWidth??3,O=S+2*(w+H),V=Math.min(100,Math.max(0,Number.isNaN(n)?0:n)),E=Math.round(V),Q=R??`${u}, profile ${E}% complete`,_=T??"profile-completion",q=$&&V>=100,F=Math.max(16,Math.round(.3*O)),J=O/2*(1+Math.SQRT1_2)-H/2,K=k??("banded"===j&&null==D||"success"===D?W.colors.success:"warning"===D?W.colors.warning:"error"===D?W.colors.error:W.colors.primary);return d(i,{ref:r,style:[A.root,G],testID:T,children:[d(i,{style:A.summary,accessible:!0,accessibilityRole:"summary",accessibilityLabel:Q,accessibilityValue:{min:0,max:100,now:E},testID:`${_}-summary`,children:[d(i,{style:{width:O,height:O},children:[p(m,{progress:V/100,size:O,strokeWidth:H,tone:D??"primary",ringColor:k,colorByProgress:"banded"===j&&null==D&&null==k,animated:M,testID:`${_}-ring`,children:p(c,{name:u,source:f,ImageComponent:x,size:S,tone:z,backgroundColor:C,color:I,accessibilityLabel:`${u}'s avatar`})}),q?p(i,{pointerEvents:"none",style:[A.badge,{width:F,height:F,borderRadius:F/2,...s,left:J-F/2,top:J-F/2,backgroundColor:W.colors.background.elevated}],testID:`${_}-complete-badge`,children:p(a,{name:"verify",variant:"bold",size:F-2,color:K})}):null]}),d(i,{style:A.body,children:[p(o,{style:[A.title,N],numberOfLines:2,children:u}),h?p(o,{style:[A.subtitle,B],numberOfLines:1,children:h}):null,b?p(o,{style:[A.description,P],children:b}):null]})]}),null!=L?p(i,{style:A.trailing,children:L}):null]})});u.displayName="ProfileCompletion";const buildStyles=e=>r.create({root:{flexDirection:"row",alignItems:"center",columnGap:e.spacing.md},summary:{flex:1,flexDirection:"row",alignItems:"center",columnGap:e.spacing.md},body:{flex:1,rowGap:2},badge:{position:"absolute",alignItems:"center",justifyContent:"center"},title:{fontSize:e.typography.fontSize.xl,lineHeight:e.typography.fontSize.xl*e.typography.lineHeight.tight,color:e.colors.text.primary,...n(e,"semibold")},subtitle:{fontSize:e.typography.fontSize.sm,color:e.colors.text.tertiary,textTransform:"uppercase",letterSpacing:e.typography.letterSpacing.wide,...n(e,"medium")},description:{fontSize:e.typography.fontSize.base,color:e.colors.text.secondary,...n(e,"normal")},trailing:{alignSelf:"flex-start"}});export{u as ProfileCompletion};export default u;
1
+ "use strict";import{forwardRef,useMemo}from"react";import{StyleSheet,Text,View}from"react-native";import{fontFor,useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{AppIcon}from"../AppIcon/index.js";import{Avatar}from"../Avatar/index.js";import{ProgressRing}from"../ProgressRing/index.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const DEFAULT_AVATAR_SIZE=56,DEFAULT_RING_WIDTH=3,DEFAULT_RING_GAP=1,ProfileCompletion=forwardRef((e,t)=>{const{progress:o,title:r,subtitle:i,description:s,source:n,ImageComponent:l,size:a=DEFAULT_AVATAR_SIZE,avatarTone:c="neutral",avatarBackgroundColor:m,avatarColor:p,ringWidth:d,ringGap:g=DEFAULT_RING_GAP,ringVariant:u="banded",tone:y,ringColor:f,animated:h=!0,showCompleteBadge:x=!0,trailing:b,accessibilityLabel:_,style:j,titleStyle:S,subtitleStyle:w,descriptionStyle:A,testID:I}=e,C=useTheme(),T=useMemo(()=>buildStyles(C),[C]),R=d??C.components.progressRing?.strokeWidth??3,D=a+2*(g+R),v=Math.min(100,Math.max(0,Number.isNaN(o)?0:o)),z=Math.round(v),P=_??`${r}, profile ${z}% complete`,V=I??"profile-completion",L=x&&v>=100,F=Math.max(16,Math.round(.3*D)),G=D/2*(1+Math.SQRT1_2)-R/2,E=f??("banded"===u&&null==y||"success"===y?C.colors.success:"warning"===y?C.colors.warning:"error"===y?C.colors.error:C.colors.primary);return _jsxs(View,{ref:t,style:[T.root,j],testID:I,children:[_jsxs(View,{style:T.summary,accessible:!0,accessibilityRole:"summary",accessibilityLabel:P,accessibilityValue:{min:0,max:100,now:z},testID:`${V}-summary`,children:[_jsxs(View,{style:{width:D,height:D},children:[_jsx(ProgressRing,{progress:v/100,size:D,strokeWidth:R,tone:y??"primary",ringColor:f,colorByProgress:"banded"===u&&null==y&&null==f,animated:h,testID:`${V}-ring`,children:_jsx(Avatar,{name:r,source:n,ImageComponent:l,size:a,tone:c,backgroundColor:m,color:p,accessibilityLabel:`${r}'s avatar`})}),L?_jsx(View,{pointerEvents:"none",style:[T.badge,{width:F,height:F,borderRadius:F/2,...smoothCorners,left:G-F/2,top:G-F/2,backgroundColor:C.colors.background.elevated}],testID:`${V}-complete-badge`,children:_jsx(AppIcon,{name:"verify",variant:"bold",size:F-2,color:E})}):null]}),_jsxs(View,{style:T.body,children:[_jsx(Text,{style:[T.title,S],numberOfLines:2,children:r}),i?_jsx(Text,{style:[T.subtitle,w],numberOfLines:1,children:i}):null,s?_jsx(Text,{style:[T.description,A],children:s}):null]})]}),null!=b?_jsx(View,{style:T.trailing,children:b}):null]})});ProfileCompletion.displayName="ProfileCompletion";const buildStyles=e=>StyleSheet.create({root:{flexDirection:"row",alignItems:"center",columnGap:e.spacing.md},summary:{flex:1,flexDirection:"row",alignItems:"center",columnGap:e.spacing.md},body:{flex:1,rowGap:2},badge:{position:"absolute",alignItems:"center",justifyContent:"center"},title:{fontSize:e.typography.fontSize.xl,lineHeight:e.typography.fontSize.xl*e.typography.lineHeight.tight,color:e.colors.text.primary,...fontFor(e,"semibold")},subtitle:{fontSize:e.typography.fontSize.sm,color:e.colors.text.tertiary,textTransform:"uppercase",letterSpacing:e.typography.letterSpacing.wide,...fontFor(e,"medium")},description:{fontSize:e.typography.fontSize.base,color:e.colors.text.secondary,...fontFor(e,"normal")},trailing:{alignSelf:"flex-start"}});export{ProfileCompletion};export default ProfileCompletion;
@@ -1 +1 @@
1
- export{default,ProfileCompletion}from"./ProfileCompletion.js";
1
+ "use strict";export{default,ProfileCompletion}from"./ProfileCompletion.js";
@@ -1 +1 @@
1
- import e,{forwardRef as r,useCallback as o,useMemo as t,useRef as n,useState as i}from"react";import{Pressable as l,StyleSheet as s,Text as a,View as c}from"react-native";import{fontFor as d,useTheme as u}from"../../theme/index.js";import{resolveHaptic as m,triggerHaptic as p}from"../../utils/index.js";import{blendOf as g}from"../../utils/color.js";import{smoothCorners as b}from"../../utils/corners.js";import{AppIcon as f}from"../AppIcon/index.js";import{renderSlotIcon as h}from"../AppIcon/slotIcon.js";import{Avatar as y,avatarToneColors as k}from"../Avatar/index.js";import{FieldLabel as v,FieldMessage as x}from"../FieldBase/index.js";import{matchesAccept as C}from"../FilePicker/FilePicker.js";import{OptionSheet as I}from"../OptionSheet/OptionSheet.js";import{Spinner as j}from"../Spinner/index.js";import{jsx as S,jsxs as w}from"react/jsx-runtime";const T={pick:"Change profile photo",remove:"Remove photo",sheetTitle:"Change photo",errorTooLarge:e=>`The photo is larger than ${e} MB.`,errorWrongType:"That file is not a supported image."},z=["image/*"],M={sm:72,md:120,lg:160},P=r((e,r)=>{const{value:s,name:P,sources:R,onPick:O,onRemove:A,loading:D=!1,disabled:F=!1,accept:E=z,maxSizeMB:L,size:_="md",shape:W="circle",badgeIcon:$="camera",tone:q,variant:G,avatarTone:V,avatarBackgroundColor:H,avatarColor:N,label:Q,required:J=!1,helperText:K,error:U,layout:X="stacked",title:Y,subtitle:Z,ImageComponent:ee,labels:re,haptic:oe,onError:te,accessibilityLabel:ne,style:ie,testID:le}=e,se=u(),ae=se.components.profilePicker,ce=q??ae?.defaultTone??"primary",de=G??ae?.defaultVariant??"solid",ue=t(()=>((e,r,o,t)=>{const n=((e,r)=>{switch(r){case"success":return{base:e.colors.success,on:e.colors.onSuccess};case"warning":return{base:e.colors.warning,on:e.colors.onWarning};case"error":return{base:e.colors.error,on:e.colors.onError};case"info":return{base:e.colors.info,on:e.colors.onInfo};case"neutral":return{base:e.colors.text.secondary,on:e.colors.text.inverse};default:return{base:e.colors.primary,on:e.colors.onPrimary}}})(e,r),i=t?.badgeColor??n.base,l=e.colors.background.primary,s="neutral"===r&&void 0===t?.badgeColor;let a;switch(o){case"soft":a={fill:s?e.colors.background.tertiary:g(i,.14,l,e.colors.background.secondary),ring:l,icon:i};break;case"outline":a={fill:l,ring:s?e.colors.border.primary:i,icon:i};break;default:a={fill:i,ring:l,icon:n.on}}return t?.badgeIconColor?{...a,icon:t.badgeIconColor}:a})(se,ce,de,ae),[se,ce,de,ae]),me=V??ae?.defaultAvatarTone,pe=t(()=>{const e=me?k(se,me):null;return{background:H??e?.background??se.colors.background.tertiary,icon:N??e?.color??se.colors.text.tertiary}},[se,me,H,N]),ge=t(()=>({...T,...re}),[re]),[be,fe]=i(null),[he,ye]=i(null),[ke,ve]=i(!1),[xe,Ce]=i(s);s!==xe&&(Ce(s),fe(null));const Ie=D||F,je=be??s??null,Se=U??he??void 0,we=!Ie&&(null!==be||Boolean(s)&&Boolean(A)),Te=R.length>0||we,ze="number"==typeof _?_:M[_],Me=((e,r)=>"circle"===e?r/2:"rounded"===e?Math.max(6,Math.round(.22*r)):0)(W,ze),Pe=Me*(1-Math.SQRT1_2),Be=(Re=Math.round(.28*ze),Oe=24,Ae=44,Math.min(Ae,Math.max(Oe,Re)));var Re,Oe,Ae;const De=Pe-Be/2,Fe=Math.max(0,-De),Ee=o(e=>{ye(e),te?.(e),!1!==oe&&p("notificationError")},[te,oe]),Le=o(async e=>{let r;try{r=await e.pick()}catch(e){return void Ee(e instanceof Error?e.message:String(e))}const o=r?.[0];if(!o)return;if("number"==typeof L&&"number"==typeof o.size&&o.size>1024*L*1024)return void Ee(ge.errorTooLarge(L));if(o.type&&!C(o.type,E))return void Ee(ge.errorWrongType);ye(null),fe(o.uri);const t=m(oe,"selection");t&&p(t),O?.(o)},[L,E,ge,oe,O,Ee]),_e=o(()=>{Ie||(qe.current=null,1!==R.length||we?(R.length>0||we)&&ve(!0):Le(R[0]))},[Ie,R,we,Le]),We=o(()=>{fe(null),ye(null);const e=m(oe,"selection");e&&p(e),A?.()},[oe,A]),$e=t(()=>{const e=R.map(e=>({kind:"source",source:e}));return we&&e.push({kind:"remove"}),e},[R,we]),qe=n(null),Ge=o(e=>{qe.current||(ve(!1),"remove"===e.kind?We():qe.current=e.source)},[We]),Ve=o(()=>{const e=qe.current;qe.current=null,e&&Le(e)},[Le]),He=le??"profile-picker",Ne=ne??(Te?ge.pick:P),Qe=S(c,{style:[B.fill,{width:ze,height:ze,borderRadius:Me,...b,backgroundColor:pe.background}],children:S(f,{name:"user",size:Math.round(.45*ze),color:pe.icon})}),Je=S(c,{style:{width:ze,height:ze,marginBottom:Fe,marginRight:Fe},children:w(l,{onPress:_e,disabled:Ie||!Te,accessibilityRole:Te?"button":"image",accessibilityLabel:Ne,accessibilityHint:Se,accessibilityState:Te?{disabled:Ie,busy:D}:{busy:D},testID:`${He}-button`,style:({pressed:e})=>[{width:ze,height:ze,borderRadius:Me,...b},{opacity:F?.55:e?.85:1}],children:[je||P?S(y,{source:je?{uri:je}:void 0,name:P,size:ze,shape:W,tone:me,backgroundColor:H,color:N,ImageComponent:ee,accessibilityLabel:Ne},je??"initials"):Qe,D?S(c,{style:[B.fill,B.overlay,{borderRadius:Me,...b,backgroundColor:se.colors.background.overlay}],testID:`${He}-loading`,children:S(j,{size:ze>=100?"md":"sm",color:se.colors.onPrimary})}):null,!F&&Te?S(c,{pointerEvents:"none",testID:`${He}-badge`,style:[B.badge,{width:Be,height:Be,borderRadius:Be/2,...b,right:De,bottom:De,backgroundColor:ue.fill,borderColor:ue.ring}],children:h($,{color:ue.icon,size:Math.round(.55*Be),disabled:!1})}):null]})}),Ke="stacked"!==X?w(c,{style:[B.meta,"profile"===X?B.metaCentred:null],children:[Y?S(a,{style:[B.title,"profile"===X?B.textCentred:null,{color:se.colors.text.primary,fontSize:se.typography.fontSize.base,...d(se,"semibold")}],children:Y}):null,Z?S(a,{style:[B.subtitle,"profile"===X?B.textCentred:null,{color:se.colors.text.secondary,fontSize:se.typography.fontSize.sm,...d(se,"normal")}],children:Z}):null,S(x,{text:Se??K,error:Boolean(Se)})]}):S(x,{text:Se??K,error:Boolean(Se)});return w(c,{ref:r,style:ie,testID:le,children:[Q?S(v,{required:J,children:Q}):null,w(c,{style:"inline"===X?[B.row,{columnGap:se.spacing.md}]:["profile"===X?B.columnCentred:B.column,{rowGap:se.spacing.xs}],children:[Je,Ke]}),S(I,{open:ke,onClose:()=>ve(!1),onAfterClose:Ve,title:ge.sheetTitle,options:$e,labelOf:e=>{const r=e;return"remove"===r.kind?ge.remove:r.source.label},getValue:e=>{const r=e;return"remove"===r.kind?"__profile-picker-remove__":r.source.key},disabledOf:()=>!1,destructiveOf:e=>"remove"===e.kind,descriptionOf:e=>{const r=e;return"remove"===r.kind?void 0:r.source.description},iconOf:e=>{const r=e;return"remove"===r.kind?S(f,{name:"trash",size:20,color:se.colors.error}):r.source.icon},isSelected:()=>!1,onSelect:e=>Ge(e)})]})});P.displayName="ProfilePicker";const B=s.create({fill:{alignItems:"center",justifyContent:"center",overflow:"hidden"},overlay:{...s.absoluteFill},badge:{position:"absolute",alignItems:"center",justifyContent:"center",borderWidth:2},row:{flexDirection:"row",alignItems:"center"},column:{alignItems:"flex-start"},columnCentred:{alignItems:"center"},meta:{flexShrink:1},metaCentred:{alignItems:"center"},title:{includeFontPadding:!1},subtitle:{includeFontPadding:!1,marginTop:2},textCentred:{textAlign:"center"}});export{P as ProfilePicker};export default P;
1
+ "use strict";import React,{forwardRef,useCallback,useMemo,useRef,useState}from"react";import{Pressable,StyleSheet,Text,View}from"react-native";import{fontFor,useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/index.js";import{blendOf}from"../../utils/color.js";import{smoothCorners}from"../../utils/corners.js";import{AppIcon}from"../AppIcon/index.js";import{renderSlotIcon}from"../AppIcon/slotIcon.js";import{Avatar,avatarToneColors}from"../Avatar/index.js";import{FieldLabel,FieldMessage}from"../FieldBase/index.js";import{matchesAccept}from"../FilePicker/FilePicker.js";import{OptionSheet}from"../OptionSheet/OptionSheet.js";import{Spinner}from"../Spinner/index.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const DEFAULT_LABELS={pick:"Change profile photo",remove:"Remove photo",sheetTitle:"Change photo",errorTooLarge:e=>`The photo is larger than ${e} MB.`,errorWrongType:"That file is not a supported image."},DEFAULT_ACCEPT=["image/*"],SHEET_ICON_SIZE=20,SOFT_FILL_OPACITY=.14,SIZE_PX={sm:72,md:120,lg:160},clamp=(e,o,r)=>Math.min(r,Math.max(o,e)),toneFor=(e,o)=>{switch(o){case"success":return{base:e.colors.success,on:e.colors.onSuccess};case"warning":return{base:e.colors.warning,on:e.colors.onWarning};case"error":return{base:e.colors.error,on:e.colors.onError};case"info":return{base:e.colors.info,on:e.colors.onInfo};case"neutral":return{base:e.colors.text.secondary,on:e.colors.text.inverse};default:return{base:e.colors.primary,on:e.colors.onPrimary}}},badgeLookFor=(e,o,r,t)=>{const s=toneFor(e,o),n=t?.badgeColor??s.base,l=e.colors.background.primary,i="neutral"===o&&void 0===t?.badgeColor;let a;switch(r){case"soft":a={fill:i?e.colors.background.tertiary:blendOf(n,.14,l,e.colors.background.secondary),ring:l,icon:n};break;case"outline":a={fill:l,ring:i?e.colors.border.primary:n,icon:n};break;default:a={fill:n,ring:l,icon:s.on}}return t?.badgeIconColor?{...a,icon:t.badgeIconColor}:a},resolveRadius=(e,o)=>"circle"===e?o/2:"rounded"===e?Math.max(6,Math.round(.22*o)):0,REMOVE_VALUE="__profile-picker-remove__",ProfilePicker=forwardRef((e,o)=>{const{value:r,name:t,sources:s,onPick:n,onRemove:l,loading:i=!1,disabled:a=!1,accept:c=DEFAULT_ACCEPT,maxSizeMB:u,size:d="md",shape:m="circle",badgeIcon:p="camera",tone:b,variant:g,avatarTone:f,avatarBackgroundColor:h,avatarColor:y,label:x,required:k=!1,helperText:C,error:v,layout:S="stacked",title:_,subtitle:j,ImageComponent:I,labels:T,haptic:P,onError:w,accessibilityLabel:A,style:E,testID:F}=e,L=useTheme(),M=L.components.profilePicker,R=b??M?.defaultTone??"primary",O=g??M?.defaultVariant??"solid",V=useMemo(()=>badgeLookFor(L,R,O,M),[L,R,O,M]),z=f??M?.defaultAvatarTone,B=useMemo(()=>{const e=z?avatarToneColors(L,z):null;return{background:h??e?.background??L.colors.background.tertiary,icon:y??e?.color??L.colors.text.tertiary}},[L,z,h,y]),D=useMemo(()=>({...DEFAULT_LABELS,...T}),[T]),[H,U]=useState(null),[W,$]=useState(null),[Z,q]=useState(!1),[G,N]=useState(r);r!==G&&(N(r),U(null));const X=i||a,Q=H??r??null,Y=v??W??void 0,J=!X&&(null!==H||Boolean(r)&&Boolean(l)),K=s.length>0||J,ee="number"==typeof d?d:SIZE_PX[d],oe=resolveRadius(m,ee),re=oe*(1-Math.SQRT1_2),te=clamp(Math.round(.28*ee),24,44),se=re-te/2,ne=Math.max(0,-se),le=useCallback(e=>{$(e),w?.(e),!1!==P&&triggerHaptic("notificationError")},[w,P]),ie=useCallback(async e=>{let o;try{o=await e.pick()}catch(e){return void le(e instanceof Error?e.message:String(e))}const r=o?.[0];if(!r)return;if("number"==typeof u&&"number"==typeof r.size&&r.size>1024*u*1024)return void le(D.errorTooLarge(u));if(r.type&&!matchesAccept(r.type,c))return void le(D.errorWrongType);$(null),U(r.uri);const t=resolveHaptic(P,"selection");t&&triggerHaptic(t),n?.(r)},[u,c,D,P,n,le]),ae=useCallback(()=>{X||(de.current=null,1!==s.length||J?(s.length>0||J)&&q(!0):ie(s[0]))},[X,s,J,ie]),ce=useCallback(()=>{U(null),$(null);const e=resolveHaptic(P,"selection");e&&triggerHaptic(e),l?.()},[P,l]),ue=useMemo(()=>{const e=s.map(e=>({kind:"source",source:e}));return J&&e.push({kind:"remove"}),e},[s,J]),de=useRef(null),me=useCallback(e=>{de.current||(q(!1),"remove"===e.kind?ce():de.current=e.source)},[ce]),pe=useCallback(()=>{const e=de.current;de.current=null,e&&ie(e)},[ie]),be=F??"profile-picker",ge=A??(K?D.pick:t),fe=_jsx(View,{style:[styles.fill,{width:ee,height:ee,borderRadius:oe,...smoothCorners,backgroundColor:B.background}],children:_jsx(AppIcon,{name:"user",size:Math.round(.45*ee),color:B.icon})}),he=_jsx(View,{style:{width:ee,height:ee,marginBottom:ne,marginRight:ne},children:_jsxs(Pressable,{onPress:ae,disabled:X||!K,accessibilityRole:K?"button":"image",accessibilityLabel:ge,accessibilityHint:Y,accessibilityState:K?{disabled:X,busy:i}:{busy:i},testID:`${be}-button`,style:({pressed:e})=>[{width:ee,height:ee,borderRadius:oe,...smoothCorners},{opacity:a?.55:e?.85:1}],children:[Q||t?_jsx(Avatar,{source:Q?{uri:Q}:void 0,name:t,size:ee,shape:m,tone:z,backgroundColor:h,color:y,ImageComponent:I,accessibilityLabel:ge},Q??"initials"):fe,i?_jsx(View,{style:[styles.fill,styles.overlay,{borderRadius:oe,...smoothCorners,backgroundColor:L.colors.background.overlay}],testID:`${be}-loading`,children:_jsx(Spinner,{size:ee>=100?"md":"sm",color:L.colors.onPrimary})}):null,!a&&K?_jsx(View,{pointerEvents:"none",testID:`${be}-badge`,style:[styles.badge,{width:te,height:te,borderRadius:te/2,...smoothCorners,right:se,bottom:se,backgroundColor:V.fill,borderColor:V.ring}],children:renderSlotIcon(p,{color:V.icon,size:Math.round(.55*te),disabled:!1})}):null]})}),ye="stacked"!==S?_jsxs(View,{style:[styles.meta,"profile"===S?styles.metaCentred:null],children:[_?_jsx(Text,{style:[styles.title,"profile"===S?styles.textCentred:null,{color:L.colors.text.primary,fontSize:L.typography.fontSize.base,...fontFor(L,"semibold")}],children:_}):null,j?_jsx(Text,{style:[styles.subtitle,"profile"===S?styles.textCentred:null,{color:L.colors.text.secondary,fontSize:L.typography.fontSize.sm,...fontFor(L,"normal")}],children:j}):null,_jsx(FieldMessage,{text:Y??C,error:Boolean(Y)})]}):_jsx(FieldMessage,{text:Y??C,error:Boolean(Y)});return _jsxs(View,{ref:o,style:E,testID:F,children:[x?_jsx(FieldLabel,{required:k,children:x}):null,_jsxs(View,{style:"inline"===S?[styles.row,{columnGap:L.spacing.md}]:["profile"===S?styles.columnCentred:styles.column,{rowGap:L.spacing.xs}],children:[he,ye]}),_jsx(OptionSheet,{open:Z,onClose:()=>q(!1),onAfterClose:pe,title:D.sheetTitle,options:ue,labelOf:e=>{const o=e;return"remove"===o.kind?D.remove:o.source.label},getValue:e=>{const o=e;return"remove"===o.kind?REMOVE_VALUE:o.source.key},disabledOf:()=>!1,destructiveOf:e=>"remove"===e.kind,descriptionOf:e=>{const o=e;return"remove"===o.kind?void 0:o.source.description},iconOf:e=>{const o=e;return"remove"===o.kind?_jsx(AppIcon,{name:"trash",size:20,color:L.colors.error}):o.source.icon},isSelected:()=>!1,onSelect:e=>me(e)})]})});ProfilePicker.displayName="ProfilePicker";const styles=StyleSheet.create({fill:{alignItems:"center",justifyContent:"center",overflow:"hidden"},overlay:{...StyleSheet.absoluteFill},badge:{position:"absolute",alignItems:"center",justifyContent:"center",borderWidth:2},row:{flexDirection:"row",alignItems:"center"},column:{alignItems:"flex-start"},columnCentred:{alignItems:"center"},meta:{flexShrink:1},metaCentred:{alignItems:"center"},title:{includeFontPadding:!1},subtitle:{includeFontPadding:!1,marginTop:2},textCentred:{textAlign:"center"}});export{ProfilePicker};export default ProfilePicker;
@@ -1 +1 @@
1
- export{default,ProfilePicker}from"./ProfilePicker.js";
1
+ "use strict";export{default,ProfilePicker}from"./ProfilePicker.js";
@@ -1 +1 @@
1
- import{forwardRef as e,useEffect as t,useMemo as r,useRef as o}from"react";import{Animated as i,Easing as n,StyleSheet as a,Text as s,View as l}from"react-native";import{createAnimatedValue as c,fontFor as u,Gradient as d,setNativeValue as m,useTheme as p}from"../../theme/index.js";import{smoothCorners as g}from"../../utils/corners.js";import{jsx as y,jsxs as h}from"react/jsx-runtime";const toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},clampProgress=e=>"number"!=typeof e||Number.isNaN(e)||e<0?0:e>1?1:e,b=e((e,b)=>{const f=p(),{progress:w,label:x,showPercent:v=!1,indeterminate:R,height:B=6,radius:k,tone:D="primary",trackColor:C,barColor:j,gradient:N,segments:L,animated:S=!0,style:V,containerStyle:A,barStyle:z,accessibilityLabel:I,testID:F}=e,M=R??"number"!=typeof w,P=clampProgress(w),E=o(c(P)).current,G=o(c(0)).current,O=o(c(0)).current,W=o(0),X=f.components.progressBar?.determinateAnimationDuration??400,$=f.components.progressBar?.indeterminateLoopDuration??1500,q=f.components.progressBar?.indeterminateWidth??"30%",H=r(()=>buildStyles(f),[f]),J=k??f.radius.full,K=C??f.colors.surface.disabled,Q=j??toneColor(f,D),T=r(()=>N?"string"==typeof N?f.gradients[N]??null:N:null,[N,f.gradients]),U=Array.isArray(L)&&L.length>0;t(()=>{M||(S?i.timing(E,{toValue:P,duration:X,easing:n.bezier(...f.motion.easing.standard),useNativeDriver:!1}).start():E.setValue(P))},[S,P,X,E,M,f]),t(()=>{if(!M)return;m(G,0);const e=i.loop(i.timing(G,{toValue:1,duration:$,easing:n.inOut(n.ease),useNativeDriver:!0}));return e.start(),()=>{e.stop()}},[M,G,$]);const Y=E.interpolate({inputRange:[0,1],outputRange:["0%","100%"]}),Z=G.interpolate({inputRange:[0,1],outputRange:[-1,1]}),_=v&&!M&&!U,ee=null!=x||_,te=y(l,{ref:b,accessibilityRole:"progressbar",accessibilityLabel:I??("string"==typeof x?x:void 0),accessibilityValue:M?{text:"Loading"}:{min:0,max:100,now:Math.round(100*P)},testID:F,onLayout:e=>{const t=e.nativeEvent.layout.width;W.current=t,m(O,t)},style:[H.track,{height:B,borderRadius:J,...g,backgroundColor:K},V,A],children:U?y(l,{style:[H.segments,{height:B}],children:(L??[]).map((e,t)=>y(l,{style:{width:100*clampProgress(e.value)+"%",height:B,backgroundColor:e.color??toneColor(f,e.tone??"primary")}},t))}):y(i.View,M?{style:[H.indeterminateBar,{height:B,borderRadius:J,...g,backgroundColor:Q,width:q,transform:[{translateX:i.multiply(Z,O)}]},z]}:{style:[H.determinateBar,{height:B,borderRadius:J,...g,backgroundColor:T?"transparent":Q,width:Y,overflow:T?"hidden":void 0},z],children:T?y(d,{gradient:T,style:a.absoluteFill}):null})});if(!ee)return te;const re={fontSize:f.typography.fontSize.sm,...u(f,"medium")};return h(l,{style:H.wrapper,children:[h(l,{style:[H.labelRow,{marginBottom:f.spacing.xs}],children:["string"==typeof x||"number"==typeof x?y(s,{style:[H.label,re,{color:f.colors.text.primary}],children:x}):y(l,{style:H.label,children:x}),_?y(s,{accessible:!1,importantForAccessibility:"no",style:[re,{color:f.colors.text.secondary}],children:`${Math.round(100*P)}%`}):null]}),te]})});b.displayName="ProgressBar";const buildStyles=e=>a.create({wrapper:{width:"100%"},labelRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",columnGap:8},label:{flexShrink:1},track:{width:"100%",overflow:"hidden"},determinateBar:{position:"absolute",left:0,top:0},indeterminateBar:{position:"absolute",left:0,top:0},segments:{flexDirection:"row",width:"100%"}});export{b as ProgressBar};export default b;
1
+ "use strict";import{forwardRef,useEffect,useMemo,useRef}from"react";import{Animated,Easing,StyleSheet,Text,View}from"react-native";import{createAnimatedValue,fontFor,Gradient,setNativeValue,useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},clampProgress=e=>"number"!=typeof e||Number.isNaN(e)||e<0?0:e>1?1:e,ProgressBar=forwardRef((e,t)=>{const r=useTheme(),{progress:s,label:o,showPercent:a=!1,indeterminate:i,height:n=6,radius:l,tone:u="primary",trackColor:c,barColor:d,gradient:m,segments:p,animated:g=!0,style:h,containerStyle:f,barStyle:y,accessibilityLabel:b,testID:w}=e,x=i??"number"!=typeof s,V=clampProgress(s),j=useRef(createAnimatedValue(V)).current,R=useRef(createAnimatedValue(0)).current,v=useRef(createAnimatedValue(0)).current,A=useRef(0),C=r.components.progressBar?.determinateAnimationDuration??400,B=r.components.progressBar?.indeterminateLoopDuration??1500,S=r.components.progressBar?.indeterminateWidth??"30%",_=useMemo(()=>buildStyles(r),[r]),N=l??r.radius.full,P=c??r.colors.surface.disabled,k=d??toneColor(r,u),D=useMemo(()=>m?"string"==typeof m?r.gradients[m]??null:m:null,[m,r.gradients]),E=Array.isArray(p)&&p.length>0;useEffect(()=>{x||(g?Animated.timing(j,{toValue:V,duration:C,easing:Easing.bezier(...r.motion.easing.standard),useNativeDriver:!1}).start():j.setValue(V))},[g,V,C,j,x,r]),useEffect(()=>{if(!x)return;setNativeValue(R,0);const e=Animated.loop(Animated.timing(R,{toValue:1,duration:B,easing:Easing.inOut(Easing.ease),useNativeDriver:!0}));return e.start(),()=>{e.stop()}},[x,R,B]);const L=j.interpolate({inputRange:[0,1],outputRange:["0%","100%"]}),M=R.interpolate({inputRange:[0,1],outputRange:[-1,1]}),T=a&&!x&&!E,F=null!=o||T,z=_jsx(View,{ref:t,accessibilityRole:"progressbar",accessibilityLabel:b??("string"==typeof o?o:void 0),accessibilityValue:x?{text:"Loading"}:{min:0,max:100,now:Math.round(100*V)},testID:w,onLayout:e=>{const t=e.nativeEvent.layout.width;A.current=t,setNativeValue(v,t)},style:[_.track,{height:n,borderRadius:N,...smoothCorners,backgroundColor:P},h,f],children:E?_jsx(View,{style:[_.segments,{height:n}],children:(p??[]).map((e,t)=>_jsx(View,{style:{width:100*clampProgress(e.value)+"%",height:n,backgroundColor:e.color??toneColor(r,e.tone??"primary")}},t))}):_jsx(Animated.View,x?{style:[_.indeterminateBar,{height:n,borderRadius:N,...smoothCorners,backgroundColor:k,width:S,transform:[{translateX:Animated.multiply(M,v)}]},y]}:{style:[_.determinateBar,{height:n,borderRadius:N,...smoothCorners,backgroundColor:D?"transparent":k,width:L,overflow:D?"hidden":void 0},y],children:D?_jsx(Gradient,{gradient:D,style:StyleSheet.absoluteFill}):null})});if(!F)return z;const G={fontSize:r.typography.fontSize.sm,...fontFor(r,"medium")};return _jsxs(View,{style:_.wrapper,children:[_jsxs(View,{style:[_.labelRow,{marginBottom:r.spacing.xs}],children:["string"==typeof o||"number"==typeof o?_jsx(Text,{style:[_.label,G,{color:r.colors.text.primary}],children:o}):_jsx(View,{style:_.label,children:o}),T?_jsx(Text,{accessible:!1,importantForAccessibility:"no",style:[G,{color:r.colors.text.secondary}],children:`${Math.round(100*V)}%`}):null]}),z]})});ProgressBar.displayName="ProgressBar";const buildStyles=e=>StyleSheet.create({wrapper:{width:"100%"},labelRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",columnGap:8},label:{flexShrink:1},track:{width:"100%",overflow:"hidden"},determinateBar:{position:"absolute",left:0,top:0},indeterminateBar:{position:"absolute",left:0,top:0},segments:{flexDirection:"row",width:"100%"}});export{ProgressBar};export default ProgressBar;
@@ -1 +1 @@
1
- export{default,ProgressBar}from"./ProgressBar.js";
1
+ "use strict";export{default,ProgressBar}from"./ProgressBar.js";
@@ -1 +1 @@
1
- import{forwardRef as t,useEffect as r,useMemo as e,useRef as o}from"react";import{Animated as s,Easing as n,StyleSheet as i,View as a}from"react-native";import c,{Circle as l}from"react-native-svg";import{useReducedMotion as u}from"../../hooks/index.js";import{createAnimatedValue as m,useTheme as p}from"../../theme/index.js";import{jsx as d,jsxs as g}from"react/jsx-runtime";const h=s.createAnimatedComponent(l),f=[1/3,2/3],y=1e-4,b=t((t,i)=>{const{progress:b,size:x=48,strokeWidth:k,tone:v="primary",trackColor:w,ringColor:R,colorByProgress:j=!1,animated:D=!0,rounded:$=!0,children:C,accessibilityLabel:I,style:M,testID:N}=t,W=p(),L=W.components.progressRing,P=u(),V="number"!=typeof(z=b)||Number.isNaN(z)?0:Math.min(1,Math.max(0,z));var z;const B=k??L?.strokeWidth??4,A=L?.animationDuration??600,E=w??L?.trackColor??W.colors.surface.disabled,[O,S]=L?.colorStops??f,q=Math.max(0,(x-B)/2),F=2*Math.PI*q,G=o(m(V)).current;r(()=>{if(!D||P)return void G.setValue(V);const t=s.timing(G,{toValue:V,duration:A,easing:n.bezier(...W.motion.easing.standard),useNativeDriver:!1});return t.start(),()=>t.stop()},[D,V,A,G,P,W.motion.easing.standard]);const H=G.interpolate({inputRange:[0,1],outputRange:[F,0]}),J=G.interpolate({inputRange:[0,.001,1],outputRange:[0,1,1]}),K=e(()=>G.interpolate({inputRange:[0,O-y,O,S-y,S,1],outputRange:[W.colors.error,W.colors.error,W.colors.warning,W.colors.warning,W.colors.success,W.colors.success]}),[G,O,S,W.colors.error,W.colors.warning,W.colors.success]),Q=R??(j?K:((t,r)=>{switch(r){case"success":return t.colors.success;case"warning":return t.colors.warning;case"error":return t.colors.error;default:return t.colors.primary}})(W,v)),T=e(()=>buildStyles(),[]),U=x/2;return g(a,{ref:i,accessible:null==C,accessibilityRole:"progressbar",accessibilityLabel:I,accessibilityValue:{min:0,max:100,now:Math.round(100*V)},testID:N,style:[T.root,{width:x,height:x},M],children:[g(c,{width:x,height:x,viewBox:`0 0 ${x} ${x}`,children:[d(l,{cx:U,cy:U,r:q,stroke:E,strokeWidth:B,fill:"none"}),d(h,{cx:U,cy:U,r:q,stroke:Q,strokeWidth:B,strokeLinecap:$?"round":"butt",strokeDasharray:`${F} ${F}`,strokeDashoffset:H,strokeOpacity:J,fill:"none",transform:`rotate(-90 ${U} ${U})`,testID:N?`${N}-fill`:void 0})]}),null!=C?d(a,{style:T.content,pointerEvents:"box-none",children:C}):null]})});b.displayName="ProgressRing";const buildStyles=()=>i.create({root:{alignItems:"center",justifyContent:"center"},content:{position:"absolute",top:0,right:0,bottom:0,left:0,alignItems:"center",justifyContent:"center"}});export{b as ProgressRing};export default b;
1
+ "use strict";import{forwardRef,useEffect,useMemo,useRef}from"react";import{Animated,Easing,StyleSheet,View}from"react-native";import Svg,{Circle}from"react-native-svg";import{useReducedMotion}from"../../hooks/index.js";import{createAnimatedValue,useTheme}from"../../theme/index.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const AnimatedCircle=Animated.createAnimatedComponent(Circle),toneColor=(e,r)=>{switch(r){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},clampProgress=e=>"number"!=typeof e||Number.isNaN(e)?0:Math.min(1,Math.max(0,e)),DEFAULT_STROKE_WIDTH=4,DEFAULT_DURATION=600,DEFAULT_COLOR_STOPS=[1/3,2/3],STOP_EDGE=1e-4,ProgressRing=forwardRef((e,r)=>{const{progress:t,size:o=48,strokeWidth:s,tone:i="primary",trackColor:n,ringColor:a,colorByProgress:c=!1,animated:l=!0,rounded:u=!0,children:m,accessibilityLabel:d,style:g,testID:p}=e,f=useTheme(),h=f.components.progressRing,R=useReducedMotion(),y=clampProgress(t),x=s??h?.strokeWidth??4,b=h?.animationDuration??600,w=n??h?.trackColor??f.colors.surface.disabled,[C,S]=h?.colorStops??DEFAULT_COLOR_STOPS,_=Math.max(0,(o-x)/2),j=2*Math.PI*_,D=useRef(createAnimatedValue(y)).current;useEffect(()=>{if(!l||R)return void D.setValue(y);const e=Animated.timing(D,{toValue:y,duration:b,easing:Easing.bezier(...f.motion.easing.standard),useNativeDriver:!1});return e.start(),()=>e.stop()},[l,y,b,D,R,f.motion.easing.standard]);const k=D.interpolate({inputRange:[0,1],outputRange:[j,0]}),A=D.interpolate({inputRange:[0,.001,1],outputRange:[0,1,1]}),E=useMemo(()=>D.interpolate({inputRange:[0,C-1e-4,C,S-1e-4,S,1],outputRange:[f.colors.error,f.colors.error,f.colors.warning,f.colors.warning,f.colors.success,f.colors.success]}),[D,C,S,f.colors.error,f.colors.warning,f.colors.success]),P=a??(c?E:toneColor(f,i)),T=useMemo(()=>buildStyles(),[]),v=o/2;return _jsxs(View,{ref:r,accessible:null==m,accessibilityRole:"progressbar",accessibilityLabel:d,accessibilityValue:{min:0,max:100,now:Math.round(100*y)},testID:p,style:[T.root,{width:o,height:o},g],children:[_jsxs(Svg,{width:o,height:o,viewBox:`0 0 ${o} ${o}`,children:[_jsx(Circle,{cx:v,cy:v,r:_,stroke:w,strokeWidth:x,fill:"none"}),_jsx(AnimatedCircle,{cx:v,cy:v,r:_,stroke:P,strokeWidth:x,strokeLinecap:u?"round":"butt",strokeDasharray:`${j} ${j}`,strokeDashoffset:k,strokeOpacity:A,fill:"none",transform:`rotate(-90 ${v} ${v})`,testID:p?`${p}-fill`:void 0})]}),null!=m?_jsx(View,{style:T.content,pointerEvents:"box-none",children:m}):null]})});ProgressRing.displayName="ProgressRing";const buildStyles=()=>StyleSheet.create({root:{alignItems:"center",justifyContent:"center"},content:{position:"absolute",top:0,right:0,bottom:0,left:0,alignItems:"center",justifyContent:"center"}});export{ProgressRing};export default ProgressRing;
@@ -1 +1 @@
1
- export{default,ProgressRing}from"./ProgressRing.js";
1
+ "use strict";export{default,ProgressRing}from"./ProgressRing.js";
@@ -1 +1 @@
1
- import{createContext as e,forwardRef as o,useContext as t,useMemo as r}from"react";import{Pressable as i,StyleSheet as s}from"react-native";import{useTheme as l}from"../../theme/index.js";import{resolveHaptic as a,triggerHaptic as c}from"../../utils/hapticUtils.js";import{ChoiceText as n,hasChoiceDetail as d}from"../FieldBase/ChoiceText.js";import{RadioDot as p}from"./RadioDot.js";import{jsx as m,jsxs as u}from"react/jsx-runtime";export const RadioGroupContext=e(null);export const useRadioGroup=()=>t(RadioGroupContext);const b=o((e,o)=>{const{value:s,selected:b,onChange:y,disabled:f=!1,label:h,description:x,error:w,size:g="md",tone:S="primary",accessibilityLabel:R,haptic:j,style:C,containerStyle:D,circleStyle:G,dotStyle:v,labelStyle:I,testID:L,..._}=e,T=l(),k=r(()=>buildStyles(T),[T]),z=t(RadioGroupContext);__DEV__&&void 0===s&&console.warn("[@webority/mobile-ui] Radio was rendered without a `value`. Selection compares against it, so the group cannot track which option is chosen.");const E=z?z.selectedValue===s:!!b,H=z&&z.disabled||f,V=((e,o)=>{switch(o){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}})(T,S),B=T.components.radio?.labelGap??10;return u(i,{ref:o,onPress:e=>{if(H)return;const o=a(j,"selection");o&&c(o),z?z.onChange(s):y?.(s)},disabled:H,accessibilityRole:"radio",accessibilityLabel:R??h,accessibilityHint:_.accessibilityHint??x,accessibilityState:{checked:E,disabled:H},testID:L,hitSlop:6,..._,style:({pressed:e})=>[k.row,d(x,w)?k.rowTop:null,{opacity:H?.55:e?.85:1},C,D],children:[m(p,{selected:E,color:V,disabled:H,size:g,style:[!w||E||H?null:{borderColor:T.colors.field.borderError},G],dotStyle:v}),m(n,{label:h,description:x,error:w,disabled:H,labelLines:2,style:{marginLeft:B},labelStyle:I})]})});b.displayName="Radio";const buildStyles=e=>s.create({row:{flexDirection:"row",alignItems:"center"},rowTop:{alignItems:"flex-start"}});export{b as Radio};export default b;
1
+ "use strict";import{createContext,forwardRef,useContext,useMemo}from"react";import{Pressable,StyleSheet}from"react-native";import{useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/hapticUtils.js";import{ChoiceText,hasChoiceDetail}from"../FieldBase/ChoiceText.js";import{RadioDot}from"./RadioDot.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export const RadioGroupContext=createContext(null);export const useRadioGroup=()=>useContext(RadioGroupContext);const toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},Radio=forwardRef((e,t)=>{const{value:o,selected:r,onChange:s,disabled:i=!1,label:a,description:l,error:c,size:n="md",tone:d="primary",accessibilityLabel:p,haptic:u,style:m,containerStyle:b,circleStyle:h,dotStyle:y,labelStyle:x,testID:f,...C}=e,R=useTheme(),w=useMemo(()=>buildStyles(R),[R]),S=useRadioGroup();__DEV__&&void 0===o&&console.warn("[@webority/mobile-ui] Radio was rendered without a `value`. Selection compares against it, so the group cannot track which option is chosen.");const g=S?S.selectedValue===o:!!r,j=S&&S.disabled||i,D=toneColor(R,d),_=R.components.radio?.labelGap??10;return _jsxs(Pressable,{ref:t,onPress:e=>{if(j)return;const t=resolveHaptic(u,"selection");t&&triggerHaptic(t),S?S.onChange(o):s?.(o)},disabled:j,accessibilityRole:"radio",accessibilityLabel:p??a,accessibilityHint:C.accessibilityHint??l,accessibilityState:{checked:g,disabled:j},testID:f,hitSlop:6,...C,style:({pressed:e})=>[w.row,hasChoiceDetail(l,c)?w.rowTop:null,{opacity:j?.55:e?.85:1},m,b],children:[_jsx(RadioDot,{selected:g,color:D,disabled:j,size:n,style:[!c||g||j?null:{borderColor:R.colors.field.borderError},h],dotStyle:y}),_jsx(ChoiceText,{label:a,description:l,error:c,disabled:j,labelLines:2,style:{marginLeft:_},labelStyle:x})]})});Radio.displayName="Radio";const buildStyles=e=>StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},rowTop:{alignItems:"flex-start"}});export{Radio};export default Radio;
@@ -1 +1 @@
1
- import r,{useEffect as o,useMemo as t,useRef as e}from"react";import{Animated as s,StyleSheet as n,View as i}from"react-native";import{createAnimatedValue as a,useTheme as d}from"../../theme/index.js";import{smoothCorners as p}from"../../utils/corners.js";import{jsx as m}from"react/jsx-runtime";const c={sm:{outer:16,inner:8},md:{outer:20,inner:10},lg:{outer:24,inner:12}};export const RadioDot=r=>{const{selected:n,color:l,disabled:u=!1,size:y="md",style:f,dotStyle:g}=r,b=d(),h=t(()=>buildStyles(),[]),R=l??b.colors.primary;let x,j;if("number"==typeof y)x=y,j=Math.round(y/2);else{const r=b.components.radio?.[y];x=r?.outer??c[y].outer,j=r?.inner??c[y].inner}const D=e(a(n?1:0)).current;o(()=>{const r=s.spring(D,{toValue:n?1:0,damping:b.motion.spring.snappy.damping,stiffness:b.motion.spring.snappy.stiffness,mass:b.motion.spring.snappy.mass,useNativeDriver:!0});return r.start(),()=>r.stop()},[n,D,b.motion.spring.snappy]);const w=D.interpolate({inputRange:[0,1],outputRange:[0,1]}),v=u?b.colors.border.primary:n?R:b.colors.border.primary;return m(i,{style:[h.outer,{width:x,height:x,borderWidth:b.colors.border.width,borderRadius:x/2,...p,borderColor:v},f],children:m(s.View,{style:[{width:j,height:j,borderRadius:j/2,...p,backgroundColor:u?b.colors.text.disabled:R,opacity:D,transform:[{scale:w}]},g]})})};RadioDot.displayName="RadioDot";const buildStyles=()=>n.create({outer:{alignItems:"center",justifyContent:"center"}});export default RadioDot;
1
+ "use strict";import React,{useEffect,useMemo,useRef}from"react";import{Animated,StyleSheet,View}from"react-native";import{createAnimatedValue,useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{jsx as _jsx}from"react/jsx-runtime";const sizeMap={sm:{outer:16,inner:8},md:{outer:20,inner:10},lg:{outer:24,inner:12}};export const RadioDot=e=>{const{selected:t,color:o,disabled:r=!1,size:s="md",style:i,dotStyle:n}=e,a=useTheme(),m=useMemo(()=>buildStyles(),[]),d=o??a.colors.primary;let u,p;if("number"==typeof s)u=s,p=Math.round(s/2);else{const e=a.components.radio?.[s];u=e?.outer??sizeMap[s].outer,p=e?.inner??sizeMap[s].inner}const c=useRef(createAnimatedValue(t?1:0)).current;useEffect(()=>{const e=Animated.spring(c,{toValue:t?1:0,damping:a.motion.spring.snappy.damping,stiffness:a.motion.spring.snappy.stiffness,mass:a.motion.spring.snappy.mass,useNativeDriver:!0});return e.start(),()=>e.stop()},[t,c,a.motion.spring.snappy]);const l=c.interpolate({inputRange:[0,1],outputRange:[0,1]}),f=r?a.colors.border.primary:t?d:a.colors.border.primary;return _jsx(View,{style:[m.outer,{width:u,height:u,borderWidth:a.colors.border.width,borderRadius:u/2,...smoothCorners,borderColor:f},i],children:_jsx(Animated.View,{style:[{width:p,height:p,borderRadius:p/2,...smoothCorners,backgroundColor:r?a.colors.text.disabled:d,opacity:c,transform:[{scale:l}]},n]})})};RadioDot.displayName="RadioDot";const buildStyles=()=>StyleSheet.create({outer:{alignItems:"center",justifyContent:"center"}});export default RadioDot;
@@ -1 +1 @@
1
- import e,{useMemo as a}from"react";import{View as i}from"react-native";import{useControllableState as t}from"../../hooks/index.js";import{RadioGroupContext as o}from"./Radio.js";import{jsx as l}from"react/jsx-runtime";const RadioGroup=({value:e,defaultValue:r,onChange:s,children:d,disabled:c=!1,accessibilityLabel:n,style:u,testID:m})=>{const[p,b]=t({value:e,defaultValue:r??void 0,onChange:s}),f=a(()=>({selectedValue:p,onChange:b,disabled:c}),[p,b,c]);return l(o.Provider,{value:f,children:l(i,{accessibilityRole:"radiogroup",accessibilityLabel:n,accessibilityState:{disabled:c},testID:m,style:u,children:d})})};RadioGroup.displayName="RadioGroup";export{RadioGroup};export default RadioGroup;
1
+ "use strict";import React,{useMemo}from"react";import{View}from"react-native";import{useControllableState}from"../../hooks/index.js";import{RadioGroupContext}from"./Radio.js";import{jsx as _jsx}from"react/jsx-runtime";const RadioGroup=({value:e,defaultValue:o,onChange:t,children:a,disabled:i=!1,accessibilityLabel:r,style:s,testID:l})=>{const[d,u]=useControllableState({value:e,defaultValue:o??void 0,onChange:t}),c=useMemo(()=>({selectedValue:d,onChange:u,disabled:i}),[d,u,i]);return _jsx(RadioGroupContext.Provider,{value:c,children:_jsx(View,{accessibilityRole:"radiogroup",accessibilityLabel:r,accessibilityState:{disabled:i},testID:l,style:s,children:a})})};RadioGroup.displayName="RadioGroup";export{RadioGroup};export default RadioGroup;
@@ -1 +1 @@
1
- export{default,Radio,RadioGroupContext,useRadioGroup}from"./Radio.js";export{RadioDot}from"./RadioDot.js";export{RadioGroup}from"./RadioGroup.js";
1
+ "use strict";export{default,Radio,RadioGroupContext,useRadioGroup}from"./Radio.js";export{RadioDot}from"./RadioDot.js";export{RadioGroup}from"./RadioGroup.js";
@@ -1 +1 @@
1
- import e,{forwardRef as t,useCallback as i,useMemo as n,useRef as o}from"react";import{Animated as r,Easing as s,Pressable as l,StyleSheet as a,Text as c,View as m}from"react-native";import{useTheme as d}from"../../theme/index.js";import{resolveHaptic as y,triggerHaptic as p}from"../../utils/hapticUtils.js";import{Skeleton as u}from"../Skeleton/index.js";import{jsx as h,jsxs as f}from"react/jsx-runtime";const g={sm:16,md:24,lg:32},resolveSize=e=>"number"==typeof e?e:g[e],Star=({index:e,filled:t,size:i,filledColor:n,emptyColor:o,scale:s})=>{const l=Math.max(0,Math.min(1,t-e));return f(r.View,{style:[x.starWrap,{width:i,height:i,transform:[{scale:s}]}],children:[h(c,{style:[x.glyph,{color:o,fontSize:i,lineHeight:i}],accessible:!1,children:"☆"}),l>0?h(m,{pointerEvents:"none",style:[x.fillClip,{width:i*l,height:i}],children:h(c,{style:[x.glyph,{color:n,fontSize:i,lineHeight:i}],accessible:!1,children:"★"})}):null]})},b=t((e,t)=>{const{value:a,onChange:u,max:g=5,allowHalf:b=!0,readonly:x=!1,size:v="md",tone:w="warning",label:S,loading:C=!1,haptic:z,accessibilityLabel:j,style:M,containerStyle:D,starContainerStyle:N,testID:A}=e,P=d(),R=n(()=>buildStyles(P),[P]),k=!x&&"function"==typeof u,E=b?.5:1,I=resolveSize(v),V=((e,t)=>"primary"===t?e.colors.primary:e.colors.warning)(P,w),L=P.colors.border.primary,H=o(I),$=i(e=>{H.current=e.nativeEvent.layout.width},[]),B=o(new Map),F=n(()=>{const e=B.current,t=[];for(let i=0;i<g;i+=1){let n=e.get(i);n||(n=new r.Value(1),e.set(i,n)),t.push(n)}for(const t of Array.from(e.keys()))t>=g&&e.delete(t);return t},[g]),W=P.components.rating?.pulseOnPress??!1,q=P.components.rating?.pulseScale??1.2,O=i(e=>{const t=F[e];t&&r.sequence([r.timing(t,{toValue:q,duration:P.motion.duration.fast,easing:s.bezier(...P.motion.easing.standard),useNativeDriver:!0}),r.spring(t,{toValue:1,damping:P.motion.spring.bouncy.damping,stiffness:P.motion.spring.bouncy.stiffness,mass:P.motion.spring.bouncy.mass,useNativeDriver:!0})]).start()},[P.motion,q,F]),U=i((e,t)=>{if(!k||!u)return;const i=((e,t,i)=>{const n=Math.max(0,Math.min(t,e)),o=Math.round(n/i)*i;return Number(o.toFixed(2))})(e,g,E),n=y(z,"selection");n&&p(n),W&&"number"==typeof t&&O(t),u(i)},[k,u,g,E,O,z,W]),X=i(e=>t=>{if(!k)return;const i=H.current||I,n=t.nativeEvent.locationX??i;let o;o=b&&n<i/2?e+.5:e+1,U(o,e)},[k,I,b,U]),G=i(e=>{k&&("increment"===e.nativeEvent.actionName?U(a+E):"decrement"===e.nativeEvent.actionName&&U(a-E))},[k,a,E,U]),J=`${a} of ${g} stars`,K=j??S??J,Q=[];for(let e=0;e<g;e+=1){const t=F[e];if(!t)continue;const i=h(Star,{index:e,filled:a,size:I,filledColor:V,emptyColor:L,scale:t},e);Q.push(k?h(l,{onPress:X(e),onLayout:0===e?$:void 0,hitSlop:4,accessible:!1,style:R.starPress,children:i},e):h(m,{onLayout:0===e?$:void 0,style:R.starPress,children:i},e))}const T=f(m,{style:[R.wrapper,M,D],ref:t,testID:A,children:[S?h(c,{style:[R.label,{color:P.colors.text.secondary,fontSize:P.typography.fontSize.sm}],children:S}):null,h(m,{style:[R.row,N],accessible:!0,accessibilityRole:k?"adjustable":"text",accessibilityLabel:K,accessibilityValue:k?{min:0,max:g,now:a,text:J}:void 0,accessibilityActions:k?[{name:"increment"},{name:"decrement"}]:void 0,onAccessibilityAction:k?G:void 0,children:Q})]});return C?h(RatingSkeleton,{...e}):T});b.displayName="Rating";const RatingSkeleton=({max:e=5,size:t="md",label:i,containerStyle:n,starContainerStyle:o,style:r})=>{const s=resolveSize(t),l=Math.max(1,e);return f(m,{style:[{alignItems:"flex-start"},n,r],accessibilityRole:"progressbar",accessibilityState:{busy:!0},children:[void 0!==i?h(u,{shape:"text",width:80,height:14,style:{marginBottom:6}}):null,h(m,{style:[{flexDirection:"row"},o],children:Array.from({length:l}).map((e,t)=>h(u,{width:s,height:s,radius:Math.round(.25*s),style:t<l-1?{marginRight:4}:void 0},`sk-star-${t}`))})]})};RatingSkeleton.displayName="RatingSkeleton",b.Skeleton=RatingSkeleton;const x=a.create({starWrap:{position:"relative",alignItems:"flex-start",justifyContent:"center"},glyph:{textAlign:"left",includeFontPadding:!1},fillClip:{position:"absolute",top:0,left:0,overflow:"hidden"}}),buildStyles=e=>a.create({wrapper:{flexDirection:"column"},row:{flexDirection:"row",alignItems:"center"},starPress:{marginRight:4},label:{marginBottom:6}});export{b as Rating};export default b;
1
+ "use strict";import React,{forwardRef,useCallback,useMemo,useRef}from"react";import{Animated,Easing,Pressable,StyleSheet,Text,View}from"react-native";import{useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/hapticUtils.js";import{Skeleton}from"../Skeleton/index.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const sizePxMap={sm:16,md:24,lg:32},resolveSize=e=>"number"==typeof e?e:sizePxMap[e],toneColorFor=(e,t)=>"primary"===t?e.colors.primary:e.colors.warning,clampToStep=(e,t,i)=>{const s=Math.max(0,Math.min(t,e)),n=Math.round(s/i)*i;return Number(n.toFixed(2))},Star=({index:e,filled:t,size:i,filledColor:s,emptyColor:n,scale:a})=>{const o=Math.max(0,Math.min(1,t-e));return _jsxs(Animated.View,{style:[starStyles.starWrap,{width:i,height:i,transform:[{scale:a}]}],children:[_jsx(Text,{style:[starStyles.glyph,{color:n,fontSize:i,lineHeight:i}],accessible:!1,children:"☆"}),o>0?_jsx(View,{pointerEvents:"none",style:[starStyles.fillClip,{width:i*o,height:i}],children:_jsx(Text,{style:[starStyles.glyph,{color:s,fontSize:i,lineHeight:i}],accessible:!1,children:"★"})}):null]})},Rating=forwardRef((e,t)=>{const{value:i,onChange:s,max:n=5,allowHalf:a=!0,readonly:o=!1,size:l="md",tone:r="warning",label:c,loading:m=!1,haptic:d,accessibilityLabel:u,style:y,containerStyle:p,starContainerStyle:g,testID:f}=e,h=useTheme(),x=useMemo(()=>buildStyles(h),[h]),S=!o&&"function"==typeof s,b=a?.5:1,v=resolveSize(l),w=toneColorFor(h,r),j=h.colors.border.primary,R=useRef(v),k=useCallback(e=>{R.current=e.nativeEvent.layout.width},[]),C=useRef(new Map),_=useMemo(()=>{const e=C.current,t=[];for(let i=0;i<n;i+=1){let s=e.get(i);s||(s=new Animated.Value(1),e.set(i,s)),t.push(s)}for(const t of Array.from(e.keys()))t>=n&&e.delete(t);return t},[n]),z=h.components.rating?.pulseOnPress??!1,M=h.components.rating?.pulseScale??1.2,A=useCallback(e=>{const t=_[e];t&&Animated.sequence([Animated.timing(t,{toValue:M,duration:h.motion.duration.fast,easing:Easing.bezier(...h.motion.easing.standard),useNativeDriver:!0}),Animated.spring(t,{toValue:1,damping:h.motion.spring.bouncy.damping,stiffness:h.motion.spring.bouncy.stiffness,mass:h.motion.spring.bouncy.mass,useNativeDriver:!0})]).start()},[h.motion,M,_]),V=useCallback((e,t)=>{if(!S||!s)return;const i=clampToStep(e,n,b),a=resolveHaptic(d,"selection");a&&triggerHaptic(a),z&&"number"==typeof t&&A(t),s(i)},[S,s,n,b,A,d,z]),P=useCallback(e=>t=>{if(!S)return;const i=R.current||v,s=t.nativeEvent.locationX??i;let n;n=a&&s<i/2?e+.5:e+1,V(n,e)},[S,v,a,V]),T=useCallback(e=>{S&&("increment"===e.nativeEvent.actionName?V(i+b):"decrement"===e.nativeEvent.actionName&&V(i-b))},[S,i,b,V]),D=`${i} of ${n} stars`,E=u??c??D,H=[];for(let e=0;e<n;e+=1){const t=_[e];if(!t)continue;const s=_jsx(Star,{index:e,filled:i,size:v,filledColor:w,emptyColor:j,scale:t},e);H.push(S?_jsx(Pressable,{onPress:P(e),onLayout:0===e?k:void 0,hitSlop:4,accessible:!1,style:x.starPress,children:s},e):_jsx(View,{onLayout:0===e?k:void 0,style:x.starPress,children:s},e))}const N=_jsxs(View,{style:[x.wrapper,y,p],ref:t,testID:f,children:[c?_jsx(Text,{style:[x.label,{color:h.colors.text.secondary,fontSize:h.typography.fontSize.sm}],children:c}):null,_jsx(View,{style:[x.row,g],accessible:!0,accessibilityRole:S?"adjustable":"text",accessibilityLabel:E,accessibilityValue:S?{min:0,max:n,now:i,text:D}:void 0,accessibilityActions:S?[{name:"increment"},{name:"decrement"}]:void 0,onAccessibilityAction:S?T:void 0,children:H})]});return m?_jsx(RatingSkeleton,{...e}):N});Rating.displayName="Rating";const RatingSkeleton=({max:e=5,size:t="md",label:i,containerStyle:s,starContainerStyle:n,style:a})=>{const o=resolveSize(t),l=Math.max(1,e);return _jsxs(View,{style:[{alignItems:"flex-start"},s,a],accessibilityRole:"progressbar",accessibilityState:{busy:!0},children:[void 0!==i?_jsx(Skeleton,{shape:"text",width:80,height:14,style:{marginBottom:6}}):null,_jsx(View,{style:[{flexDirection:"row"},n],children:Array.from({length:l}).map((e,t)=>_jsx(Skeleton,{width:o,height:o,radius:Math.round(.25*o),style:t<l-1?{marginRight:4}:void 0},`sk-star-${t}`))})]})};RatingSkeleton.displayName="RatingSkeleton",Rating.Skeleton=RatingSkeleton;const starStyles=StyleSheet.create({starWrap:{position:"relative",alignItems:"flex-start",justifyContent:"center"},glyph:{textAlign:"left",includeFontPadding:!1},fillClip:{position:"absolute",top:0,left:0,overflow:"hidden"}}),buildStyles=e=>StyleSheet.create({wrapper:{flexDirection:"column"},row:{flexDirection:"row",alignItems:"center"},starPress:{marginRight:4},label:{marginBottom:6}});export{Rating};export default Rating;
@@ -1 +1 @@
1
- export{default,Rating}from"./Rating.js";
1
+ "use strict";export{default,Rating}from"./Rating.js";
@@ -1 +1 @@
1
- import e,{useCallback as t,useMemo as r,useRef as o}from"react";import{StyleSheet as n,Text as i,View as s}from"react-native";import{fontFor as l,useTheme as a}from"../../theme/index.js";import{resolveHaptic as c,triggerHaptic as m}from"../../utils/index.js";import{AppIcon as p}from"../AppIcon/index.js";import{Button as d}from"../Button/index.js";import{IconButton as h}from"../IconButton/index.js";import{jsx as u,jsxs as g}from"react/jsx-runtime";let f=0;const nextRowId=()=>(f+=1,`row-${f}`);export const Repeater=({value:e,onChange:n,createRow:l,renderRow:f,addLabel:x="Add another",rowLabel:y,renderRowHeader:w,onRemove:v,minRows:b=0,maxRows:R,removable:j=!0,emptyText:z,disabled:I=!1,haptic:L,style:$,testID:D})=>{const S=a(),H=r(()=>buildStyles(S),[S]),A=o([]);if(A.current.length<e.length)for(;A.current.length<e.length;)A.current.push(nextRowId());else A.current.length>e.length&&(A.current.length=e.length);const B="number"==typeof R&&e.length>=R,C=j&&e.length>b,P=t(e=>{const t=c(L,e);t&&m(t)},[L]),T=t(()=>{I||B||(n([...e,l()]),P("impactLight"))},[B,l,I,P,n,e]),W=t((t,r)=>{n(e.map((e,o)=>o===t?r:e))},[n,e]),k=t(t=>{!I&&C&&(A.current=A.current.filter((e,r)=>r!==t),v?.(t,e[t]),n(e.filter((e,r)=>r!==t)),P("notificationWarning"))},[C,I,P,n,v,e]);return g(s,{style:[{gap:S.spacing.md},$],testID:D,children:[0===e.length&&z?u(i,{style:[H.empty,{color:S.colors.text.tertiary,fontSize:S.typography.fontSize.sm}],children:z}):null,e.map((e,t)=>{const r={item:e,index:t,update:e=>W(t,e),remove:()=>k(t),canRemove:C};return g(s,{style:{gap:S.spacing.xs},children:[w?w(r):y||C&&!I?g(s,{style:H.rowHeader,children:[y?u(i,{style:[H.rowLabel,{color:S.colors.text.tertiary,fontSize:S.typography.fontSize.xs}],children:y(t)}):u(s,{}),C&&!I?u(h,{icon:({color:e,size:t})=>u(p,{name:"x",size:t,color:e}),onPress:()=>k(t),accessibilityLabel:`Remove ${y?y(t):`row ${t+1}`}`,size:"sm",tone:"error",variant:"ghost",haptic:L,testID:D?`${D}-remove-${t}`:void 0}):null]}):null,f(r)]},A.current[t])}),B||I?null:u(d,{title:x,onPress:T,variant:"outline",size:"sm",haptic:L,testID:D?`${D}-add`:void 0})]})};const buildStyles=e=>n.create({rowHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",minHeight:24},rowLabel:{...l(e,"semibold"),fontWeight:"600",letterSpacing:.5,textTransform:"uppercase"},empty:{...l(e,"normal")}});export default Repeater;
1
+ "use strict";import React,{useCallback,useMemo,useRef}from"react";import{StyleSheet,Text,View}from"react-native";import{fontFor,useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/index.js";import{AppIcon}from"../AppIcon/index.js";import{Button}from"../Button/index.js";import{IconButton}from"../IconButton/index.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";let rowIdCounter=0;const nextRowId=()=>(rowIdCounter+=1,`row-${rowIdCounter}`);export const Repeater=({value:e,onChange:t,createRow:r,renderRow:o,addLabel:n="Add another",rowLabel:s,renderRowHeader:i,onRemove:l,minRows:a=0,maxRows:c,removable:m=!0,emptyText:u,disabled:p=!1,haptic:d,style:x,testID:h})=>{const g=useTheme(),f=useMemo(()=>buildStyles(g),[g]),w=useRef([]);if(w.current.length<e.length)for(;w.current.length<e.length;)w.current.push(nextRowId());else w.current.length>e.length&&(w.current.length=e.length);const y="number"==typeof c&&e.length>=c,j=m&&e.length>a,b=useCallback(e=>{const t=resolveHaptic(d,e);t&&triggerHaptic(t)},[d]),I=useCallback(()=>{p||y||(t([...e,r()]),b("impactLight"))},[y,r,p,b,t,e]),R=useCallback((r,o)=>{t(e.map((e,t)=>t===r?o:e))},[t,e]),v=useCallback(r=>{!p&&j&&(w.current=w.current.filter((e,t)=>t!==r),l?.(r,e[r]),t(e.filter((e,t)=>t!==r)),b("notificationWarning"))},[j,p,b,t,l,e]);return _jsxs(View,{style:[{gap:g.spacing.md},x],testID:h,children:[0===e.length&&u?_jsx(Text,{style:[f.empty,{color:g.colors.text.tertiary,fontSize:g.typography.fontSize.sm}],children:u}):null,e.map((e,t)=>{const r={item:e,index:t,update:e=>R(t,e),remove:()=>v(t),canRemove:j};return _jsxs(View,{style:{gap:g.spacing.xs},children:[i?i(r):s||j&&!p?_jsxs(View,{style:f.rowHeader,children:[s?_jsx(Text,{style:[f.rowLabel,{color:g.colors.text.tertiary,fontSize:g.typography.fontSize.xs}],children:s(t)}):_jsx(View,{}),j&&!p?_jsx(IconButton,{icon:({color:e,size:t})=>_jsx(AppIcon,{name:"x",size:t,color:e}),onPress:()=>v(t),accessibilityLabel:`Remove ${s?s(t):`row ${t+1}`}`,size:"sm",tone:"error",variant:"ghost",haptic:d,testID:h?`${h}-remove-${t}`:void 0}):null]}):null,o(r)]},w.current[t])}),y||p?null:_jsx(Button,{title:n,onPress:I,variant:"outline",size:"sm",haptic:d,testID:h?`${h}-add`:void 0})]})};const buildStyles=e=>StyleSheet.create({rowHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",minHeight:24},rowLabel:{...fontFor(e,"semibold"),fontWeight:"600",letterSpacing:.5,textTransform:"uppercase"},empty:{...fontFor(e,"normal")}});export default Repeater;
@@ -1 +1 @@
1
- export{default,Repeater}from"./Repeater.js";
1
+ "use strict";export{default,Repeater}from"./Repeater.js";
@@ -1 +1 @@
1
- import t,{forwardRef as e,useCallback as o,useMemo as i,useState as l}from"react";import{Pressable as r,StyleSheet as n,Text as a,TextInput as s,View as d}from"react-native";import{fontFor as c,useTheme as h}from"../../theme/index.js";import{resolveHaptic as p,triggerHaptic as g}from"../../utils/index.js";import{smoothCorners as b}from"../../utils/corners.js";import{Skeleton as u}from"../Skeleton/index.js";import{applyMarkdownAction as m,normalizeSelection as y}from"./markdownActions.js";import{jsx as x,jsxs as f}from"react/jsx-runtime";const k={bold:{glyph:"B",label:"Bold"},italic:{glyph:"I",label:"Italic"},strikethrough:{glyph:"S",label:"Strikethrough"},code:{glyph:"</>",label:"Inline code"},link:{glyph:"link",label:"Link"},heading1:{glyph:"H1",label:"Heading 1"},heading2:{glyph:"H2",label:"Heading 2"},bulletList:{glyph:"•",label:"Bulleted list"},numberedList:{glyph:"1.",label:"Numbered list"},quote:{glyph:">",label:"Quote"}},S=["bold","italic","strikethrough","code","link","heading1","heading2","bulletList","numberedList","quote"],I=160;export const RichTextEditor=e((t,e)=>{const{value:r,onChangeText:n,placeholder:a,actions:c=S,disabled:b=!1,loading:u=!1,minHeight:k=I,autoFocus:C=!1,accessibilityLabel:H,haptic:D,style:L,toolbarStyle:w,inputStyle:T,testID:j}=t,v=h(),B=i(()=>buildStyles(v),[v]),R=r??"",[z,E]=l({start:0,end:0}),[W,F]=l(!1),[N,A]=l(null),P=o(t=>{E(t.nativeEvent.selection),A(null)},[]),V=o(t=>{A(null),n?.(t)},[n]),$=o(t=>{if(b)return;const e=p(D,"selection");e&&g(e);const o=m({text:R,selection:y(z,R.length)},t);E(o.selection),A(o.selection),n?.(o.text)},[b,D,n,z,R]);return u?x(RichTextEditorSkeleton,{actionCount:c.length,minHeight:k,style:L,testID:j}):f(d,{testID:j,style:[B.container,{borderColor:W?v.colors.border.focus:v.colors.border.primary,opacity:b?.55:1},L],children:[x(d,{style:[B.toolbar,w],children:c.map(t=>x(ToolbarButton,{action:t,disabled:b,onPress:$,styles:B,theme:v,testID:j?`${j}-${t}`:void 0},t))}),x(s,{ref:e,value:R,onChangeText:V,onSelectionChange:P,onFocus:()=>F(!0),onBlur:()=>F(!1),selection:N??void 0,editable:!b,autoFocus:C,multiline:!0,textAlignVertical:"top",placeholder:a,placeholderTextColor:v.colors.text.tertiary,accessibilityLabel:H,style:[B.input,{minHeight:k},T],testID:j?`${j}-input`:void 0})]})});RichTextEditor.displayName="RichTextEditor";const ToolbarButton=({action:t,disabled:e,onPress:o,styles:i,theme:l,testID:n})=>{const s=k[t],d={color:e?l.colors.text.disabled:l.colors.text.primary};return"bold"===t&&(d.fontWeight=l.typography.fontWeight.bold),"italic"===t&&(d.fontStyle="italic"),"strikethrough"===t&&(d.textDecorationLine="line-through"),x(r,{onPress:()=>o(t),disabled:e,accessibilityRole:"button",accessibilityLabel:s.label,accessibilityState:{disabled:e},hitSlop:4,testID:n,style:({pressed:t})=>[i.button,{backgroundColor:t?l.colors.surface.pressed:l.colors.background.secondary}],children:x(a,{allowFontScaling:!1,style:[i.buttonLabel,d],children:s.glyph})})};ToolbarButton.displayName="RichTextEditorToolbarButton";const RichTextEditorSkeleton=({actionCount:t,minHeight:e,style:o,testID:l})=>{const r=h(),n=i(()=>buildStyles(r),[r]),a=Array.from({length:Math.max(1,t)},(t,e)=>e);return f(d,{testID:l,style:[n.container,o],children:[x(d,{style:n.toolbar,children:a.map(t=>x(u,{width:34,height:30,radius:"sm"},t))}),f(d,{style:[n.skeletonBody,{minHeight:e}],children:[x(u,{shape:"text",width:"94%",height:14}),x(u,{shape:"text",width:"100%",height:14}),x(u,{shape:"text",width:"72%",height:14})]})]})};RichTextEditorSkeleton.displayName="RichTextEditorSkeleton";const buildStyles=t=>n.create({container:{borderWidth:t.colors.border.width,borderColor:t.colors.border.primary,borderRadius:t.radius.md,...b,backgroundColor:t.colors.background.primary,overflow:"hidden"},toolbar:{flexDirection:"row",flexWrap:"wrap",alignItems:"center",gap:t.spacing.xs,padding:t.spacing.xs,borderBottomWidth:n.hairlineWidth,borderBottomColor:t.colors.border.secondary,backgroundColor:t.colors.background.secondary},button:{minWidth:34,height:30,paddingHorizontal:t.spacing.xs,borderRadius:t.radius.sm,...b,alignItems:"center",justifyContent:"center"},buttonLabel:{...c(t,"medium"),fontSize:t.typography.fontSize.sm},input:{...c(t,"normal"),color:t.colors.text.primary,fontSize:t.typography.fontSize.base,lineHeight:1.5*t.typography.fontSize.base,paddingHorizontal:t.spacing.md,paddingVertical:t.spacing.sm},skeletonBody:{paddingHorizontal:t.spacing.md,paddingVertical:t.spacing.sm,gap:t.spacing.sm}});export default RichTextEditor;
1
+ "use strict";import React,{forwardRef,useCallback,useMemo,useState}from"react";import{Pressable,StyleSheet,Text,TextInput,View}from"react-native";import{fontFor,useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/index.js";import{smoothCorners}from"../../utils/corners.js";import{Skeleton}from"../Skeleton/index.js";import{applyMarkdownAction,normalizeSelection}from"./markdownActions.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const ACTION_META={bold:{glyph:"B",label:"Bold"},italic:{glyph:"I",label:"Italic"},strikethrough:{glyph:"S",label:"Strikethrough"},code:{glyph:"</>",label:"Inline code"},link:{glyph:"link",label:"Link"},heading1:{glyph:"H1",label:"Heading 1"},heading2:{glyph:"H2",label:"Heading 2"},bulletList:{glyph:"•",label:"Bulleted list"},numberedList:{glyph:"1.",label:"Numbered list"},quote:{glyph:">",label:"Quote"}},DEFAULT_ACTIONS=["bold","italic","strikethrough","code","link","heading1","heading2","bulletList","numberedList","quote"],DEFAULT_MIN_HEIGHT=160;export const RichTextEditor=forwardRef((e,t)=>{const{value:o,onChangeText:i,placeholder:l,actions:r=DEFAULT_ACTIONS,disabled:s=!1,loading:n=!1,minHeight:a=DEFAULT_MIN_HEIGHT,autoFocus:c=!1,accessibilityLabel:d,haptic:h,style:u,toolbarStyle:p,inputStyle:b,testID:g}=e,m=useTheme(),y=useMemo(()=>buildStyles(m),[m]),x=o??"",[S,T]=useState({start:0,end:0}),[f,k]=useState(!1),[j,C]=useState(null),I=useCallback(e=>{T(e.nativeEvent.selection),C(null)},[]),_=useCallback(e=>{C(null),i?.(e)},[i]),H=useCallback(e=>{if(s)return;const t=resolveHaptic(h,"selection");t&&triggerHaptic(t);const o=applyMarkdownAction({text:x,selection:normalizeSelection(S,x.length)},e);T(o.selection),C(o.selection),i?.(o.text)},[s,h,i,S,x]);return n?_jsx(RichTextEditorSkeleton,{actionCount:r.length,minHeight:a,style:u,testID:g}):_jsxs(View,{testID:g,style:[y.container,{borderColor:f?m.colors.border.focus:m.colors.border.primary,opacity:s?.55:1},u],children:[_jsx(View,{style:[y.toolbar,p],children:r.map(e=>_jsx(ToolbarButton,{action:e,disabled:s,onPress:H,styles:y,theme:m,testID:g?`${g}-${e}`:void 0},e))}),_jsx(TextInput,{ref:t,value:x,onChangeText:_,onSelectionChange:I,onFocus:()=>k(!0),onBlur:()=>k(!1),selection:j??void 0,editable:!s,autoFocus:c,multiline:!0,textAlignVertical:"top",placeholder:l,placeholderTextColor:m.colors.text.tertiary,accessibilityLabel:d,style:[y.input,{minHeight:a},b],testID:g?`${g}-input`:void 0})]})});RichTextEditor.displayName="RichTextEditor";const ToolbarButton=({action:e,disabled:t,onPress:o,styles:i,theme:l,testID:r})=>{const s=ACTION_META[e],n={color:t?l.colors.text.disabled:l.colors.text.primary};return"bold"===e&&(n.fontWeight=l.typography.fontWeight.bold),"italic"===e&&(n.fontStyle="italic"),"strikethrough"===e&&(n.textDecorationLine="line-through"),_jsx(Pressable,{onPress:()=>o(e),disabled:t,accessibilityRole:"button",accessibilityLabel:s.label,accessibilityState:{disabled:t},hitSlop:4,testID:r,style:({pressed:e})=>[i.button,{backgroundColor:e?l.colors.surface.pressed:l.colors.background.secondary}],children:_jsx(Text,{allowFontScaling:!1,style:[i.buttonLabel,n],children:s.glyph})})};ToolbarButton.displayName="RichTextEditorToolbarButton";const RichTextEditorSkeleton=({actionCount:e,minHeight:t,style:o,testID:i})=>{const l=useTheme(),r=useMemo(()=>buildStyles(l),[l]),s=Array.from({length:Math.max(1,e)},(e,t)=>t);return _jsxs(View,{testID:i,style:[r.container,o],children:[_jsx(View,{style:r.toolbar,children:s.map(e=>_jsx(Skeleton,{width:34,height:30,radius:"sm"},e))}),_jsxs(View,{style:[r.skeletonBody,{minHeight:t}],children:[_jsx(Skeleton,{shape:"text",width:"94%",height:14}),_jsx(Skeleton,{shape:"text",width:"100%",height:14}),_jsx(Skeleton,{shape:"text",width:"72%",height:14})]})]})};RichTextEditorSkeleton.displayName="RichTextEditorSkeleton";const buildStyles=e=>StyleSheet.create({container:{borderWidth:e.colors.border.width,borderColor:e.colors.border.primary,borderRadius:e.radius.md,...smoothCorners,backgroundColor:e.colors.background.primary,overflow:"hidden"},toolbar:{flexDirection:"row",flexWrap:"wrap",alignItems:"center",gap:e.spacing.xs,padding:e.spacing.xs,borderBottomWidth:StyleSheet.hairlineWidth,borderBottomColor:e.colors.border.secondary,backgroundColor:e.colors.background.secondary},button:{minWidth:34,height:30,paddingHorizontal:e.spacing.xs,borderRadius:e.radius.sm,...smoothCorners,alignItems:"center",justifyContent:"center"},buttonLabel:{...fontFor(e,"medium"),fontSize:e.typography.fontSize.sm},input:{...fontFor(e,"normal"),color:e.colors.text.primary,fontSize:e.typography.fontSize.base,lineHeight:1.5*e.typography.fontSize.base,paddingHorizontal:e.spacing.md,paddingVertical:e.spacing.sm},skeletonBody:{paddingHorizontal:e.spacing.md,paddingVertical:e.spacing.sm,gap:e.spacing.sm}});export default RichTextEditor;
@@ -1 +1 @@
1
- export{applyMarkdownAction}from"./markdownActions.js";export{RichTextEditor}from"./RichTextEditor.js";
1
+ "use strict";export{applyMarkdownAction}from"./markdownActions.js";export{RichTextEditor}from"./RichTextEditor.js";
@@ -1 +1 @@
1
- const t={bold:"**",italic:"*",strikethrough:"~~",code:"`"},e=/^\[([^\]]*)\]\(([^)\s]*)\)$/,s={heading1:{has:t=>/^#\s/.test(t),prefix:()=>"# "},heading2:{has:t=>/^##\s/.test(t),prefix:()=>"## "},bulletList:{has:t=>/^[-*+]\s/.test(t),prefix:()=>"- "},numberedList:{has:t=>/^\d+[.)]\s/.test(t),prefix:t=>`${t+1}. `},quote:{has:t=>/^>\s?/.test(t),prefix:()=>"> "}},n=/^(?:#{1,6}\s+|[-*+]\s+|\d+[.)]\s+|>\s?)/,clamp=(t,e)=>!Number.isFinite(t)||t<0?0:Math.min(Math.trunc(t),e);export const normalizeSelection=(t,e)=>{const s=clamp(t.start,e),n=clamp(t.end,e);return{start:Math.min(s,n),end:Math.max(s,n)}};const caret=t=>({start:t,end:t});export const applyMarkdownAction=(i,l)=>{const r=i.text??"",c=normalizeSelection(i.selection,r.length);return(t=>t in s)(l)?((t,e,i)=>{const l=s[i],r=t.split("\n"),c=[];let a=0;for(const t of r)c.push(a),a+=t.length+1;const lineIndexAt=t=>{let e=0;for(let s=0;s<r.length;s+=1)c[s]<=t&&(e=s);return e},o=lineIndexAt(e.start),h=lineIndexAt(e.end),d=r.slice(o,h+1),x=d.every(t=>l.has(t)),u=d.map((t,e)=>x?t.replace(n,""):l.prefix(e)+t.replace(n,"")),g=u[0].length-d[0].length,p=u.reduce((t,e,s)=>t+(e.length-d[s].length),0),f=[...r.slice(0,o),...u,...r.slice(h+1)].join("\n");return{text:f,selection:normalizeSelection({start:Math.max(c[o],e.start+g),end:e.end+p},f.length)}})(r,c,l):"link"===l?((t,s)=>{const{start:n,end:i}=s,l=t.slice(n,i),r=e.exec(l);if(r){const e=r[1];return{text:t.slice(0,n)+e+t.slice(i),selection:{start:n,end:n+e.length}}}const c=`[${l}](url)`,a=t.slice(0,n)+c+t.slice(i);if(n===i)return{text:a,selection:caret(n+1)};const o=n+l.length+3;return{text:a,selection:{start:o,end:o+3}}})(r,c):((t,e,s)=>{const{start:n,end:i}=e,l=t.slice(n,i),r=s.length,c="*"===s;if(l.length>=2*r&&l.startsWith(s)&&l.endsWith(s)&&!(c&&l.startsWith("**")&&l.endsWith("**"))){const e=l.slice(r,l.length-r);return{text:t.slice(0,n)+e+t.slice(i),selection:{start:n,end:n+e.length}}}const a=t.slice(Math.max(0,n-r),n),o=t.slice(i,i+r);return n>=r&&a===s&&o===s&&(!c||"**"!==t.slice(Math.max(0,n-2),n))?{text:t.slice(0,n-r)+l+t.slice(i+r),selection:{start:n-r,end:i-r}}:{text:t.slice(0,n)+s+l+s+t.slice(i),selection:n===i?caret(n+r):{start:n+r,end:i+r}}})(r,c,t[l])};
1
+ "use strict";const INLINE_MARKERS={bold:"**",italic:"*",strikethrough:"~~",code:"`"},WHOLE_LINK=/^\[([^\]]*)\]\(([^)\s]*)\)$/,LINK_URL_PLACEHOLDER="url",BLOCK_RULES={heading1:{has:t=>/^#\s/.test(t),prefix:()=>"# "},heading2:{has:t=>/^##\s/.test(t),prefix:()=>"## "},bulletList:{has:t=>/^[-*+]\s/.test(t),prefix:()=>"- "},numberedList:{has:t=>/^\d+[.)]\s/.test(t),prefix:t=>`${t+1}. `},quote:{has:t=>/^>\s?/.test(t),prefix:()=>"> "}},ANY_BLOCK_PREFIX=/^(?:#{1,6}\s+|[-*+]\s+|\d+[.)]\s+|>\s?)/,isBlockAction=t=>t in BLOCK_RULES,clamp=(t,e)=>!Number.isFinite(t)||t<0?0:Math.min(Math.trunc(t),e);export const normalizeSelection=(t,e)=>{const s=clamp(t.start,e),n=clamp(t.end,e);return{start:Math.min(s,n),end:Math.max(s,n)}};const caret=t=>({start:t,end:t}),applyInlineMarker=(t,e,s)=>{const{start:n,end:l}=e,i=t.slice(n,l),r=s.length,c="*"===s;if(i.length>=2*r&&i.startsWith(s)&&i.endsWith(s)&&!(c&&i.startsWith("**")&&i.endsWith("**"))){const e=i.slice(r,i.length-r);return{text:t.slice(0,n)+e+t.slice(l),selection:{start:n,end:n+e.length}}}const a=t.slice(Math.max(0,n-r),n),o=t.slice(l,l+r);if(n>=r&&a===s&&o===s&&!(c&&"**"===t.slice(Math.max(0,n-2),n)))return{text:t.slice(0,n-r)+i+t.slice(l+r),selection:{start:n-r,end:l-r}};return{text:t.slice(0,n)+s+i+s+t.slice(l),selection:n===l?caret(n+r):{start:n+r,end:l+r}}},applyLink=(t,e)=>{const{start:s,end:n}=e,l=t.slice(s,n),i=WHOLE_LINK.exec(l);if(i){const e=i[1];return{text:t.slice(0,s)+e+t.slice(n),selection:{start:s,end:s+e.length}}}const r=`[${l}](url)`,c=t.slice(0,s)+r+t.slice(n);if(s===n)return{text:c,selection:caret(s+1)};const a=s+l.length+3;return{text:c,selection:{start:a,end:a+3}}},applyBlockPrefix=(t,e,s)=>{const n=BLOCK_RULES[s],l=t.split("\n"),i=[];let r=0;for(const t of l)i.push(r),r+=t.length+1;const lineIndexAt=t=>{let e=0;for(let s=0;s<l.length;s+=1)i[s]<=t&&(e=s);return e},c=lineIndexAt(e.start),a=lineIndexAt(e.end),o=l.slice(c,a+1),h=o.every(t=>n.has(t)),p=o.map((t,e)=>h?t.replace(ANY_BLOCK_PREFIX,""):n.prefix(e)+t.replace(ANY_BLOCK_PREFIX,"")),d=p[0].length-o[0].length,x=p.reduce((t,e,s)=>t+(e.length-o[s].length),0),L=[...l.slice(0,c),...p,...l.slice(a+1)].join("\n");return{text:L,selection:normalizeSelection({start:Math.max(i[c],e.start+d),end:e.end+x},L.length)}};export const applyMarkdownAction=(t,e)=>{const s=t.text??"",n=normalizeSelection(t.selection,s.length);return isBlockAction(e)?applyBlockPrefix(s,n,e):"link"===e?applyLink(s,n):applyInlineMarker(s,n,INLINE_MARKERS[e])};
@@ -1 +1 @@
1
- import{forwardRef as e,useCallback as o,useEffect as i,useMemo as t,useRef as l,useState as r}from"react";import{Pressable as s,StyleSheet as a,TextInput as n,View as c}from"react-native";import{useDebounce as d}from"../../hooks/useDebounce.js";import{useTheme as p}from"../../theme/index.js";import{resolveHaptic as u,triggerHaptic as f}from"../../utils/hapticUtils.js";import{mergeRefs as m}from"../../utils/mergeRefs.js";import{defaultIcons as b}from"../AppIcon/defaultIcons.js";import{renderSlotIcon as h}from"../AppIcon/slotIcon.js";import{FieldBase as g,FieldLabel as y,resolveFieldSize as v,resolveFieldTextStyle as x,resolveVariantColors as z}from"../FieldBase/FieldBase.js";import{useFloatingLabel as S}from"../FieldBase/useFloatingLabel.js";import{jsx as j,jsxs as F}from"react/jsx-runtime";const B=e((e,a)=>{const{value:B,onChangeText:I,onSubmit:C,placeholder:R="Search…",autoFocus:L=!1,disabled:w=!1,onClear:H,leftIcon:T,debounceMs:D,size:k="md",variant:N,borderRadius:P,label:A,labelMode:M="top",labelStyle:O,haptic:V,style:W,inputStyle:E,accessibilityLabel:K,testID:U,...q}=e,G=p(),J=N??G.components.searchBar?.defaultVariant??G.components.field?.defaultVariant??"filled",Q="underline"===J,X=v(G,k),Y={...X,...G.components.searchBar?.[k]??{}},Z=x(G,{disabled:w}),$=l(null),_=t(()=>m($,a),[a]),ee=o(()=>{w||$.current?.focus()},[w]),oe=t(()=>buildStyles(G),[G]),ie="string"==typeof B?B:"",[te,le]=r(!1),[re,se]=r(ie),ae=d(re,D??0);i(()=>{void 0!==D&&ie!==re&&se(ie)},[ie,D]);const ne=l(ie);i(()=>{void 0!==D&&ae!==ne.current&&(ne.current=ae,I(ae))},[ae,D,I]);const ce=o(e=>{void 0===D?I(e):se(e)},[D,I]),de=o(()=>{const e=u(V,"selection");e&&f(e),void 0!==D&&(se(""),ne.current=""),I(""),H?.()},[V,D,I,H]),pe=o(()=>{C?.(void 0!==D?re:ie)},[C,D,re,ie]),ue=void 0!==D?re:ie,fe=ue.length>0,me={size:Y.iconSize,color:w?G.colors.text.disabled:G.colors.text.tertiary,disabled:w},be=T?h(T,me):(G.icons?.search??b.search)(me),he=Boolean(A)&&"float"===M,ge=S({label:A,enabled:he,floated:te||fe,variant:J,sizeTokens:{...X,...Y},leadingOffset:Y.iconSize+G.spacing.md,trailingOffset:fe?Y.iconSize+G.spacing.md:0,paddingLeft:Q?0:Y.paddingHorizontal,color:G.colors.field.label,style:O}),ye=fe&&!w?j(s,{onPress:de,hitSlop:8,accessibilityRole:"button",accessibilityLabel:"Clear search",children:(G.icons?.close??b.close)({size:Y.iconSize,color:G.colors.text.secondary})}):null;return F(c,{style:W,testID:U,children:[A&&!he?j(y,{size:k,style:O,children:A}):null,j(c,{style:oe.root,children:F(c,{style:oe.fieldWrap,children:[j(g,{size:k,variant:J,focused:te,disabled:w,filled:fe,minHeight:Y.minHeight,paddingHorizontal:Q?0:Y.paddingHorizontal,borderRadius:P??Y.borderRadius,leading:be,trailing:ye,topNotch:ge.topNotch,onPress:ee,pressFeedback:!1,accessibilityRole:"search",accessibilityLabel:K??R,children:j(n,{ref:_,style:[oe.input,{fontSize:Y.fontSize,color:Z.color,...Z.weightStyle},E],value:ue,onChangeText:ce,onSubmitEditing:pe,onFocus:()=>le(!0),onBlur:()=>le(!1),placeholder:!he||te||fe?R:void 0,placeholderTextColor:Z.placeholderColor,autoFocus:L,editable:!w,returnKeyType:"search",selectionColor:z(G,J).borderFocusedRepresentative,accessibilityLabel:K??R,accessibilityState:{disabled:w},...q})}),ge.node]})})]})});B.displayName="SearchBar";const buildStyles=e=>a.create({root:{flexDirection:"row",alignItems:"center",width:"100%",position:"relative",overflow:"visible"},fieldWrap:{flex:1,position:"relative",overflow:"visible"},input:{flex:1,padding:0,margin:0,includeFontPadding:!1}});export{B as SearchBar};export default B;
1
+ "use strict";import{forwardRef,useCallback,useEffect,useMemo,useRef,useState}from"react";import{Pressable,StyleSheet,TextInput,View}from"react-native";import{useDebounce}from"../../hooks/useDebounce.js";import{useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/hapticUtils.js";import{mergeRefs}from"../../utils/mergeRefs.js";import{defaultIcons}from"../AppIcon/defaultIcons.js";import{renderSlotIcon}from"../AppIcon/slotIcon.js";import{FieldBase,FieldLabel,resolveFieldSize,resolveFieldTextStyle,resolveVariantColors}from"../FieldBase/FieldBase.js";import{useFloatingLabel}from"../FieldBase/useFloatingLabel.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const SearchBar=forwardRef((e,o)=>{const{value:l,onChangeText:s,onSubmit:i,placeholder:t="Search…",autoFocus:r=!1,disabled:a=!1,onClear:n,leftIcon:c,debounceMs:d,size:u="md",variant:f,borderRadius:p,label:b,labelMode:m="top",labelStyle:h,haptic:S,style:g,inputStyle:y,accessibilityLabel:v,testID:x,...j}=e,F=useTheme(),z=f??F.components.searchBar?.defaultVariant??F.components.field?.defaultVariant??"filled",I="underline"===z,B=resolveFieldSize(F,u),C={...B,...F.components.searchBar?.[u]??{}},R=resolveFieldTextStyle(F,{disabled:a}),w=useRef(null),T=useMemo(()=>mergeRefs(w,o),[o]),L=useCallback(()=>{a||w.current?.focus()},[a]),H=useMemo(()=>buildStyles(F),[F]),_="string"==typeof l?l:"",[k,V]=useState(!1),[D,M]=useState(_),P=useDebounce(D,d??0);useEffect(()=>{void 0!==d&&_!==D&&M(_)},[_,d]);const E=useRef(_);useEffect(()=>{void 0!==d&&P!==E.current&&(E.current=P,s(P))},[P,d,s]);const N=useCallback(e=>{void 0===d?s(e):M(e)},[d,s]),A=useCallback(()=>{const e=resolveHaptic(S,"selection");e&&triggerHaptic(e),void 0!==d&&(M(""),E.current=""),s(""),n?.()},[S,d,s,n]),O=useCallback(()=>{i?.(void 0!==d?D:_)},[i,d,D,_]),W=void 0!==d?D:_,K=W.length>0,U={size:C.iconSize,color:a?F.colors.text.disabled:F.colors.text.tertiary,disabled:a},q=c?renderSlotIcon(c,U):(F.icons?.search??defaultIcons.search)(U),G=Boolean(b)&&"float"===m,J=useFloatingLabel({label:b,enabled:G,floated:k||K,variant:z,sizeTokens:{...B,...C},leadingOffset:C.iconSize+F.spacing.md,trailingOffset:K?C.iconSize+F.spacing.md:0,paddingLeft:I?0:C.paddingHorizontal,color:F.colors.field.label,style:h}),Q=K&&!a?_jsx(Pressable,{onPress:A,hitSlop:8,accessibilityRole:"button",accessibilityLabel:"Clear search",children:(F.icons?.close??defaultIcons.close)({size:C.iconSize,color:F.colors.text.secondary})}):null;return _jsxs(View,{style:g,testID:x,children:[b&&!G?_jsx(FieldLabel,{size:u,style:h,children:b}):null,_jsx(View,{style:H.root,children:_jsxs(View,{style:H.fieldWrap,children:[_jsx(FieldBase,{size:u,variant:z,focused:k,disabled:a,filled:K,minHeight:C.minHeight,paddingHorizontal:I?0:C.paddingHorizontal,borderRadius:p??C.borderRadius,leading:q,trailing:Q,topNotch:J.topNotch,onPress:L,pressFeedback:!1,accessibilityRole:"search",accessibilityLabel:v??t,children:_jsx(TextInput,{ref:T,style:[H.input,{fontSize:C.fontSize,color:R.color,...R.weightStyle},y],value:W,onChangeText:N,onSubmitEditing:O,onFocus:()=>V(!0),onBlur:()=>V(!1),placeholder:!G||k||K?t:void 0,placeholderTextColor:R.placeholderColor,autoFocus:r,editable:!a,returnKeyType:"search",selectionColor:resolveVariantColors(F,z).borderFocusedRepresentative,accessibilityLabel:v??t,accessibilityState:{disabled:a},...j})}),J.node]})})]})});SearchBar.displayName="SearchBar";const buildStyles=e=>StyleSheet.create({root:{flexDirection:"row",alignItems:"center",width:"100%",position:"relative",overflow:"visible"},fieldWrap:{flex:1,position:"relative",overflow:"visible"},input:{flex:1,padding:0,margin:0,includeFontPadding:!1}});export{SearchBar};export default SearchBar;
@@ -1 +1 @@
1
- export{default,SearchBar}from"./SearchBar.js";
1
+ "use strict";export{default,SearchBar}from"./SearchBar.js";