@webority/mobile-ui 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/lib/commonjs/components/Accordion/Accordion.js +1 -1
  2. package/lib/commonjs/components/AnimatePresence/AnimatePresence.js +1 -1
  3. package/lib/commonjs/components/AppBar/AppBar.js +1 -1
  4. package/lib/commonjs/components/AppIcon/AppIcon.js +1 -1
  5. package/lib/commonjs/components/AsyncBlock/AsyncBlock.js +1 -1
  6. package/lib/commonjs/components/Autocomplete/Autocomplete.js +1 -1
  7. package/lib/commonjs/components/Avatar/Avatar.js +1 -1
  8. package/lib/commonjs/components/Badge/Badge.js +1 -1
  9. package/lib/commonjs/components/Banner/Banner.js +1 -1
  10. package/lib/commonjs/components/BottomNavigation/BottomNavigation.js +1 -1
  11. package/lib/commonjs/components/BottomSheet/BottomSheet.js +1 -1
  12. package/lib/commonjs/components/Box/Box.js +1 -1
  13. package/lib/commonjs/components/Button/Button.js +1 -1
  14. package/lib/commonjs/components/Calendar/Calendar.js +1 -0
  15. package/lib/commonjs/components/Calendar/CalendarDay.js +1 -0
  16. package/lib/commonjs/components/Calendar/calendarDates.js +1 -0
  17. package/lib/commonjs/components/Calendar/calendarStyles.js +1 -0
  18. package/lib/commonjs/components/Calendar/index.js +1 -0
  19. package/lib/commonjs/components/Card/Card.js +1 -1
  20. package/lib/commonjs/components/Carousel/Carousel.js +1 -1
  21. package/lib/commonjs/components/Checkbox/Checkbox.js +1 -1
  22. package/lib/commonjs/components/Chip/Chip.js +1 -1
  23. package/lib/commonjs/components/ChoiceGroup/ChoiceGroup.js +1 -1
  24. package/lib/commonjs/components/Confetti/Confetti.js +1 -1
  25. package/lib/commonjs/components/DatePicker/DatePicker.js +1 -1
  26. package/lib/commonjs/components/DateRangePicker/DateRangePicker.js +1 -1
  27. package/lib/commonjs/components/Descriptions/Descriptions.js +1 -1
  28. package/lib/commonjs/components/Dialog/Dialog.js +1 -1
  29. package/lib/commonjs/components/Drawer/Drawer.js +1 -1
  30. package/lib/commonjs/components/EmptyState/EmptyState.js +1 -1
  31. package/lib/commonjs/components/ErrorBoundary/ErrorBoundary.js +1 -1
  32. package/lib/commonjs/components/ErrorBoundary/withErrorBoundary.js +1 -1
  33. package/lib/commonjs/components/FieldBase/Chevron.js +1 -1
  34. package/lib/commonjs/components/FieldBase/FieldBase.js +1 -1
  35. package/lib/commonjs/components/FilePicker/FilePicker.js +1 -1
  36. package/lib/commonjs/components/FloatingActionButton/FloatingActionButton.js +1 -1
  37. package/lib/commonjs/components/ForceUpdateDialog/ForceUpdateDialog.js +1 -1
  38. package/lib/commonjs/components/FormField/FormField.js +1 -1
  39. package/lib/commonjs/components/IconButton/IconButton.js +1 -1
  40. package/lib/commonjs/components/ImageGallery/ImageGallery.js +1 -1
  41. package/lib/commonjs/components/InlineSelect/InlineSelect.js +1 -1
  42. package/lib/commonjs/components/Input/Input.js +1 -1
  43. package/lib/commonjs/components/KeyboardToolbar/KeyboardToolbar.js +1 -1
  44. package/lib/commonjs/components/ListItem/ListItem.js +1 -1
  45. package/lib/commonjs/components/LoaderOverlay/LoaderOverlay.js +1 -1
  46. package/lib/commonjs/components/Markdown/Markdown.js +1 -1
  47. package/lib/commonjs/components/Modal/Modal.js +1 -1
  48. package/lib/commonjs/components/NumberInput/NumberInput.js +1 -1
  49. package/lib/commonjs/components/OTPInput/OTPInput.js +1 -1
  50. package/lib/commonjs/components/OptionSheet/OptionSheet.js +1 -1
  51. package/lib/commonjs/components/PhoneNumberInput/PhoneNumberInput.js +1 -1
  52. package/lib/commonjs/components/ProfilePicker/ProfilePicker.js +1 -1
  53. package/lib/commonjs/components/Radio/Radio.js +1 -1
  54. package/lib/commonjs/components/Radio/RadioDot.js +1 -1
  55. package/lib/commonjs/components/Radio/RadioGroup.js +1 -1
  56. package/lib/commonjs/components/Rating/Rating.js +1 -1
  57. package/lib/commonjs/components/Repeater/Repeater.js +1 -1
  58. package/lib/commonjs/components/RichTextEditor/RichTextEditor.js +1 -1
  59. package/lib/commonjs/components/SearchBar/SearchBar.js +1 -1
  60. package/lib/commonjs/components/SectionHeader/SectionHeader.js +1 -1
  61. package/lib/commonjs/components/SegmentedControl/SegmentedControl.js +1 -1
  62. package/lib/commonjs/components/Select/Select.js +1 -1
  63. package/lib/commonjs/components/Skeleton/Skeleton.js +1 -1
  64. package/lib/commonjs/components/Skeleton/SkeletonClock.js +1 -1
  65. package/lib/commonjs/components/Skeleton/SkeletonContent.js +1 -1
  66. package/lib/commonjs/components/Skeleton/SkeletonProvider.js +1 -1
  67. package/lib/commonjs/components/Skeleton/SkeletonSkip.js +1 -1
  68. package/lib/commonjs/components/SlideToConfirm/SlideToConfirm.js +1 -1
  69. package/lib/commonjs/components/Slider/Slider.js +1 -1
  70. package/lib/commonjs/components/SliderField/SliderField.js +1 -1
  71. package/lib/commonjs/components/Spinner/Spinner.js +1 -1
  72. package/lib/commonjs/components/StatusBadge/StatusBadge.js +1 -1
  73. package/lib/commonjs/components/Stepper/Stepper.js +1 -1
  74. package/lib/commonjs/components/Swipeable/Swipeable.js +1 -1
  75. package/lib/commonjs/components/Switch/Switch.js +1 -1
  76. package/lib/commonjs/components/Tabs/Tabs.js +1 -1
  77. package/lib/commonjs/components/Text/Text.js +1 -1
  78. package/lib/commonjs/components/TimePicker/TimePicker.js +1 -1
  79. package/lib/commonjs/components/Timeline/Timeline.js +1 -1
  80. package/lib/commonjs/components/Toast/Toast.js +1 -1
  81. package/lib/commonjs/components/Toast/ToastProvider.js +1 -1
  82. package/lib/commonjs/components/ZoomableImage/ZoomableImage.js +1 -1
  83. package/lib/commonjs/components/index.js +1 -1
  84. package/lib/commonjs/form/FormContext.js +1 -1
  85. package/lib/commonjs/network/NetworkStatusBanner.js +1 -1
  86. package/lib/commonjs/theme/ThemeContext.js +1 -1
  87. package/lib/commonjs/theme/merge.js +1 -1
  88. package/lib/commonjs/theme/textStyle.js +1 -1
  89. package/lib/commonjs/theme/tokens.js +1 -1
  90. package/lib/commonjs/theme/toneInk.js +1 -0
  91. package/lib/commonjs/utils/ariaState.js +1 -0
  92. package/lib/module/components/Accordion/Accordion.js +1 -1
  93. package/lib/module/components/AnimatePresence/AnimatePresence.js +1 -1
  94. package/lib/module/components/AppBar/AppBar.js +1 -1
  95. package/lib/module/components/AppIcon/AppIcon.js +1 -1
  96. package/lib/module/components/AsyncBlock/AsyncBlock.js +1 -1
  97. package/lib/module/components/Autocomplete/Autocomplete.js +1 -1
  98. package/lib/module/components/Avatar/Avatar.js +1 -1
  99. package/lib/module/components/Badge/Badge.js +1 -1
  100. package/lib/module/components/Banner/Banner.js +1 -1
  101. package/lib/module/components/BottomNavigation/BottomNavigation.js +1 -1
  102. package/lib/module/components/BottomSheet/BottomSheet.js +1 -1
  103. package/lib/module/components/Box/Box.js +1 -1
  104. package/lib/module/components/Button/Button.js +1 -1
  105. package/lib/module/components/Calendar/Calendar.js +1 -0
  106. package/lib/module/components/Calendar/CalendarDay.js +1 -0
  107. package/lib/module/components/Calendar/calendarDates.js +1 -0
  108. package/lib/module/components/Calendar/calendarStyles.js +1 -0
  109. package/lib/module/components/Calendar/index.js +1 -0
  110. package/lib/module/components/Card/Card.js +1 -1
  111. package/lib/module/components/Carousel/Carousel.js +1 -1
  112. package/lib/module/components/Checkbox/Checkbox.js +1 -1
  113. package/lib/module/components/Chip/Chip.js +1 -1
  114. package/lib/module/components/ChoiceGroup/ChoiceGroup.js +1 -1
  115. package/lib/module/components/Confetti/Confetti.js +1 -1
  116. package/lib/module/components/DatePicker/DatePicker.js +1 -1
  117. package/lib/module/components/DateRangePicker/DateRangePicker.js +1 -1
  118. package/lib/module/components/Descriptions/Descriptions.js +1 -1
  119. package/lib/module/components/Dialog/Dialog.js +1 -1
  120. package/lib/module/components/Drawer/Drawer.js +1 -1
  121. package/lib/module/components/EmptyState/EmptyState.js +1 -1
  122. package/lib/module/components/ErrorBoundary/ErrorBoundary.js +1 -1
  123. package/lib/module/components/ErrorBoundary/withErrorBoundary.js +1 -1
  124. package/lib/module/components/FieldBase/Chevron.js +1 -1
  125. package/lib/module/components/FieldBase/FieldBase.js +1 -1
  126. package/lib/module/components/FilePicker/FilePicker.js +1 -1
  127. package/lib/module/components/FloatingActionButton/FloatingActionButton.js +1 -1
  128. package/lib/module/components/ForceUpdateDialog/ForceUpdateDialog.js +1 -1
  129. package/lib/module/components/FormField/FormField.js +1 -1
  130. package/lib/module/components/IconButton/IconButton.js +1 -1
  131. package/lib/module/components/ImageGallery/ImageGallery.js +1 -1
  132. package/lib/module/components/InlineSelect/InlineSelect.js +1 -1
  133. package/lib/module/components/Input/Input.js +1 -1
  134. package/lib/module/components/KeyboardToolbar/KeyboardToolbar.js +1 -1
  135. package/lib/module/components/ListItem/ListItem.js +1 -1
  136. package/lib/module/components/LoaderOverlay/LoaderOverlay.js +1 -1
  137. package/lib/module/components/Markdown/Markdown.js +1 -1
  138. package/lib/module/components/Modal/Modal.js +1 -1
  139. package/lib/module/components/NumberInput/NumberInput.js +1 -1
  140. package/lib/module/components/OTPInput/OTPInput.js +1 -1
  141. package/lib/module/components/OptionSheet/OptionSheet.js +1 -1
  142. package/lib/module/components/PhoneNumberInput/PhoneNumberInput.js +1 -1
  143. package/lib/module/components/ProfilePicker/ProfilePicker.js +1 -1
  144. package/lib/module/components/Radio/Radio.js +1 -1
  145. package/lib/module/components/Radio/RadioDot.js +1 -1
  146. package/lib/module/components/Radio/RadioGroup.js +1 -1
  147. package/lib/module/components/Rating/Rating.js +1 -1
  148. package/lib/module/components/Repeater/Repeater.js +1 -1
  149. package/lib/module/components/RichTextEditor/RichTextEditor.js +1 -1
  150. package/lib/module/components/SearchBar/SearchBar.js +1 -1
  151. package/lib/module/components/SectionHeader/SectionHeader.js +1 -1
  152. package/lib/module/components/SegmentedControl/SegmentedControl.js +1 -1
  153. package/lib/module/components/Select/Select.js +1 -1
  154. package/lib/module/components/Skeleton/Skeleton.js +1 -1
  155. package/lib/module/components/Skeleton/SkeletonClock.js +1 -1
  156. package/lib/module/components/Skeleton/SkeletonContent.js +1 -1
  157. package/lib/module/components/Skeleton/SkeletonProvider.js +1 -1
  158. package/lib/module/components/Skeleton/SkeletonSkip.js +1 -1
  159. package/lib/module/components/SlideToConfirm/SlideToConfirm.js +1 -1
  160. package/lib/module/components/Slider/Slider.js +1 -1
  161. package/lib/module/components/SliderField/SliderField.js +1 -1
  162. package/lib/module/components/Spinner/Spinner.js +1 -1
  163. package/lib/module/components/StatusBadge/StatusBadge.js +1 -1
  164. package/lib/module/components/Stepper/Stepper.js +1 -1
  165. package/lib/module/components/Swipeable/Swipeable.js +1 -1
  166. package/lib/module/components/Switch/Switch.js +1 -1
  167. package/lib/module/components/Tabs/Tabs.js +1 -1
  168. package/lib/module/components/Text/Text.js +1 -1
  169. package/lib/module/components/TimePicker/TimePicker.js +1 -1
  170. package/lib/module/components/Timeline/Timeline.js +1 -1
  171. package/lib/module/components/Toast/Toast.js +1 -1
  172. package/lib/module/components/Toast/ToastProvider.js +1 -1
  173. package/lib/module/components/ZoomableImage/ZoomableImage.js +1 -1
  174. package/lib/module/components/index.js +1 -1
  175. package/lib/module/form/FormContext.js +1 -1
  176. package/lib/module/network/NetworkStatusBanner.js +1 -1
  177. package/lib/module/theme/ThemeContext.js +1 -1
  178. package/lib/module/theme/merge.js +1 -1
  179. package/lib/module/theme/textStyle.js +1 -1
  180. package/lib/module/theme/tokens.js +1 -1
  181. package/lib/module/theme/toneInk.js +1 -0
  182. package/lib/module/utils/ariaState.js +1 -0
  183. package/lib/typescript/commonjs/components/Accordion/Accordion.d.ts +1 -1
  184. package/lib/typescript/commonjs/components/AnimatePresence/AnimatePresence.d.ts +1 -1
  185. package/lib/typescript/commonjs/components/AppBar/AppBar.d.ts +1 -1
  186. package/lib/typescript/commonjs/components/AppIcon/AppIcon.d.ts +1 -1
  187. package/lib/typescript/commonjs/components/AsyncBlock/AsyncBlock.d.ts +1 -1
  188. package/lib/typescript/commonjs/components/Avatar/Avatar.d.ts +2 -2
  189. package/lib/typescript/commonjs/components/Badge/Badge.d.ts +1 -1
  190. package/lib/typescript/commonjs/components/Banner/Banner.d.ts +1 -1
  191. package/lib/typescript/commonjs/components/BottomNavigation/BottomNavigation.d.ts +6 -0
  192. package/lib/typescript/commonjs/components/BottomSheet/BottomSheet.d.ts +1 -1
  193. package/lib/typescript/commonjs/components/Box/Box.d.ts +1 -1
  194. package/lib/typescript/commonjs/components/Calendar/Calendar.d.ts +70 -0
  195. package/lib/typescript/commonjs/components/Calendar/CalendarDay.d.ts +30 -0
  196. package/lib/typescript/commonjs/components/Calendar/calendarDates.d.ts +24 -0
  197. package/lib/typescript/commonjs/components/Calendar/calendarStyles.d.ts +125 -0
  198. package/lib/typescript/commonjs/components/Calendar/index.d.ts +4 -0
  199. package/lib/typescript/commonjs/components/Carousel/Carousel.d.ts +1 -1
  200. package/lib/typescript/commonjs/components/Chip/Chip.d.ts +1 -1
  201. package/lib/typescript/commonjs/components/ChoiceGroup/ChoiceGroup.d.ts +11 -1
  202. package/lib/typescript/commonjs/components/Confetti/Confetti.d.ts +1 -1
  203. package/lib/typescript/commonjs/components/DatePicker/DatePicker.d.ts +1 -1
  204. package/lib/typescript/commonjs/components/DateRangePicker/DateRangePicker.d.ts +7 -1
  205. package/lib/typescript/commonjs/components/Descriptions/Descriptions.d.ts +1 -1
  206. package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts +1 -1
  207. package/lib/typescript/commonjs/components/Drawer/Drawer.d.ts +1 -1
  208. package/lib/typescript/commonjs/components/EmptyState/EmptyState.d.ts +1 -1
  209. package/lib/typescript/commonjs/components/ErrorBoundary/withErrorBoundary.d.ts +1 -1
  210. package/lib/typescript/commonjs/components/FieldBase/Chevron.d.ts +1 -1
  211. package/lib/typescript/commonjs/components/FilePicker/FilePicker.d.ts +1 -1
  212. package/lib/typescript/commonjs/components/ForceUpdateDialog/ForceUpdateDialog.d.ts +1 -1
  213. package/lib/typescript/commonjs/components/InlineSelect/InlineSelect.d.ts +1 -1
  214. package/lib/typescript/commonjs/components/ListItem/ListItem.d.ts +24 -0
  215. package/lib/typescript/commonjs/components/ListItem/index.d.ts +1 -1
  216. package/lib/typescript/commonjs/components/LoaderOverlay/LoaderOverlay.d.ts +1 -1
  217. package/lib/typescript/commonjs/components/Markdown/Markdown.d.ts +1 -1
  218. package/lib/typescript/commonjs/components/Modal/Modal.d.ts +1 -1
  219. package/lib/typescript/commonjs/components/ProfilePicker/ProfilePicker.d.ts +1 -1
  220. package/lib/typescript/commonjs/components/Radio/RadioDot.d.ts +1 -1
  221. package/lib/typescript/commonjs/components/Radio/RadioGroup.d.ts +1 -1
  222. package/lib/typescript/commonjs/components/Rating/Rating.d.ts +1 -1
  223. package/lib/typescript/commonjs/components/Repeater/Repeater.d.ts +1 -1
  224. package/lib/typescript/commonjs/components/RichTextEditor/RichTextEditor.d.ts +1 -1
  225. package/lib/typescript/commonjs/components/SectionHeader/SectionHeader.d.ts +1 -1
  226. package/lib/typescript/commonjs/components/SegmentedControl/SegmentedControl.d.ts +7 -0
  227. package/lib/typescript/commonjs/components/Skeleton/Skeleton.d.ts +1 -1
  228. package/lib/typescript/commonjs/components/Skeleton/SkeletonClock.d.ts +1 -1
  229. package/lib/typescript/commonjs/components/Skeleton/SkeletonProvider.d.ts +1 -1
  230. package/lib/typescript/commonjs/components/Skeleton/SkeletonSkip.d.ts +1 -1
  231. package/lib/typescript/commonjs/components/Spinner/Spinner.d.ts +1 -1
  232. package/lib/typescript/commonjs/components/StatusBadge/StatusBadge.d.ts +1 -1
  233. package/lib/typescript/commonjs/components/Stepper/Stepper.d.ts +1 -1
  234. package/lib/typescript/commonjs/components/Swipeable/Swipeable.d.ts +1 -1
  235. package/lib/typescript/commonjs/components/Text/Text.d.ts +1 -1
  236. package/lib/typescript/commonjs/components/TimePicker/TimePicker.d.ts +1 -1
  237. package/lib/typescript/commonjs/components/Timeline/Timeline.d.ts +1 -1
  238. package/lib/typescript/commonjs/components/Toast/Toast.d.ts +1 -1
  239. package/lib/typescript/commonjs/components/Toast/ToastProvider.d.ts +1 -1
  240. package/lib/typescript/commonjs/components/ZoomableImage/ZoomableImage.d.ts +1 -1
  241. package/lib/typescript/commonjs/components/index.d.ts +3 -1
  242. package/lib/typescript/commonjs/form/FormContext.d.ts +1 -1
  243. package/lib/typescript/commonjs/network/NetworkStatusBanner.d.ts +1 -1
  244. package/lib/typescript/commonjs/theme/ThemeContext.d.ts +1 -1
  245. package/lib/typescript/commonjs/theme/textStyle.d.ts +4 -1
  246. package/lib/typescript/commonjs/theme/toneInk.d.ts +38 -0
  247. package/lib/typescript/commonjs/theme/types.d.ts +37 -4
  248. package/lib/typescript/commonjs/utils/ariaState.d.ts +10 -0
  249. package/lib/typescript/module/components/Accordion/Accordion.d.ts +1 -1
  250. package/lib/typescript/module/components/AnimatePresence/AnimatePresence.d.ts +1 -1
  251. package/lib/typescript/module/components/AppBar/AppBar.d.ts +1 -1
  252. package/lib/typescript/module/components/AppIcon/AppIcon.d.ts +1 -1
  253. package/lib/typescript/module/components/AsyncBlock/AsyncBlock.d.ts +1 -1
  254. package/lib/typescript/module/components/Avatar/Avatar.d.ts +2 -2
  255. package/lib/typescript/module/components/Badge/Badge.d.ts +1 -1
  256. package/lib/typescript/module/components/Banner/Banner.d.ts +1 -1
  257. package/lib/typescript/module/components/BottomNavigation/BottomNavigation.d.ts +6 -0
  258. package/lib/typescript/module/components/BottomSheet/BottomSheet.d.ts +1 -1
  259. package/lib/typescript/module/components/Box/Box.d.ts +1 -1
  260. package/lib/typescript/module/components/Calendar/Calendar.d.ts +70 -0
  261. package/lib/typescript/module/components/Calendar/CalendarDay.d.ts +30 -0
  262. package/lib/typescript/module/components/Calendar/calendarDates.d.ts +24 -0
  263. package/lib/typescript/module/components/Calendar/calendarStyles.d.ts +125 -0
  264. package/lib/typescript/module/components/Calendar/index.d.ts +4 -0
  265. package/lib/typescript/module/components/Carousel/Carousel.d.ts +1 -1
  266. package/lib/typescript/module/components/Chip/Chip.d.ts +1 -1
  267. package/lib/typescript/module/components/ChoiceGroup/ChoiceGroup.d.ts +11 -1
  268. package/lib/typescript/module/components/Confetti/Confetti.d.ts +1 -1
  269. package/lib/typescript/module/components/DatePicker/DatePicker.d.ts +1 -1
  270. package/lib/typescript/module/components/DateRangePicker/DateRangePicker.d.ts +7 -1
  271. package/lib/typescript/module/components/Descriptions/Descriptions.d.ts +1 -1
  272. package/lib/typescript/module/components/Dialog/Dialog.d.ts +1 -1
  273. package/lib/typescript/module/components/Drawer/Drawer.d.ts +1 -1
  274. package/lib/typescript/module/components/EmptyState/EmptyState.d.ts +1 -1
  275. package/lib/typescript/module/components/ErrorBoundary/withErrorBoundary.d.ts +1 -1
  276. package/lib/typescript/module/components/FieldBase/Chevron.d.ts +1 -1
  277. package/lib/typescript/module/components/FilePicker/FilePicker.d.ts +1 -1
  278. package/lib/typescript/module/components/ForceUpdateDialog/ForceUpdateDialog.d.ts +1 -1
  279. package/lib/typescript/module/components/InlineSelect/InlineSelect.d.ts +1 -1
  280. package/lib/typescript/module/components/ListItem/ListItem.d.ts +24 -0
  281. package/lib/typescript/module/components/ListItem/index.d.ts +1 -1
  282. package/lib/typescript/module/components/LoaderOverlay/LoaderOverlay.d.ts +1 -1
  283. package/lib/typescript/module/components/Markdown/Markdown.d.ts +1 -1
  284. package/lib/typescript/module/components/Modal/Modal.d.ts +1 -1
  285. package/lib/typescript/module/components/ProfilePicker/ProfilePicker.d.ts +1 -1
  286. package/lib/typescript/module/components/Radio/RadioDot.d.ts +1 -1
  287. package/lib/typescript/module/components/Radio/RadioGroup.d.ts +1 -1
  288. package/lib/typescript/module/components/Rating/Rating.d.ts +1 -1
  289. package/lib/typescript/module/components/Repeater/Repeater.d.ts +1 -1
  290. package/lib/typescript/module/components/RichTextEditor/RichTextEditor.d.ts +1 -1
  291. package/lib/typescript/module/components/SectionHeader/SectionHeader.d.ts +1 -1
  292. package/lib/typescript/module/components/SegmentedControl/SegmentedControl.d.ts +7 -0
  293. package/lib/typescript/module/components/Skeleton/Skeleton.d.ts +1 -1
  294. package/lib/typescript/module/components/Skeleton/SkeletonClock.d.ts +1 -1
  295. package/lib/typescript/module/components/Skeleton/SkeletonProvider.d.ts +1 -1
  296. package/lib/typescript/module/components/Skeleton/SkeletonSkip.d.ts +1 -1
  297. package/lib/typescript/module/components/Spinner/Spinner.d.ts +1 -1
  298. package/lib/typescript/module/components/StatusBadge/StatusBadge.d.ts +1 -1
  299. package/lib/typescript/module/components/Stepper/Stepper.d.ts +1 -1
  300. package/lib/typescript/module/components/Swipeable/Swipeable.d.ts +1 -1
  301. package/lib/typescript/module/components/Text/Text.d.ts +1 -1
  302. package/lib/typescript/module/components/TimePicker/TimePicker.d.ts +1 -1
  303. package/lib/typescript/module/components/Timeline/Timeline.d.ts +1 -1
  304. package/lib/typescript/module/components/Toast/Toast.d.ts +1 -1
  305. package/lib/typescript/module/components/Toast/ToastProvider.d.ts +1 -1
  306. package/lib/typescript/module/components/ZoomableImage/ZoomableImage.d.ts +1 -1
  307. package/lib/typescript/module/components/index.d.ts +3 -1
  308. package/lib/typescript/module/form/FormContext.d.ts +1 -1
  309. package/lib/typescript/module/network/NetworkStatusBanner.d.ts +1 -1
  310. package/lib/typescript/module/theme/ThemeContext.d.ts +1 -1
  311. package/lib/typescript/module/theme/textStyle.d.ts +4 -1
  312. package/lib/typescript/module/theme/toneInk.d.ts +38 -0
  313. package/lib/typescript/module/theme/types.d.ts +37 -4
  314. package/lib/typescript/module/utils/ariaState.d.ts +10 -0
  315. package/package.json +2 -2
@@ -1 +1 @@
1
- "use strict";import React,{forwardRef,useEffect,useMemo,useRef}from"react";import{Animated,Pressable,StyleSheet,Text,View}from"react-native";import{useSafeAreaInsets}from"react-native-safe-area-context";import{createAnimatedValue,useTheme}from"../../theme/index.js";import{triggerHaptic}from"../../utils/index.js";import{smoothCorners}from"../../utils/corners.js";import{supportsBoxShadow,toBoxShadow}from"../../utils/shadows.js";import{renderSlotIcon}from"../AppIcon/index.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const DEFAULT_ICON_SIZE=18,ICON_WRAP_AIR=4,PILL_AIR=8,DEFAULT_PILL_MAX_WIDTH=64,TILE_MAX_WIDTH=96,DEFAULT_PILL_INSET=16,DEFAULT_UNDERLINE_HEIGHT=3,DEFAULT_FLOATING_MARGIN=16,DEFAULT_FLOATING_RADIUS=28,DEFAULT_BUBBLE_SIZE=48,DEFAULT_BUBBLE_LIFT=14,DEFAULT_CENTER_SIZE=48,DEFAULT_CENTER_ICON_SIZE=24,CENTER_KEY="__webority_center_action__",TAB_PADDING_VERTICAL=6,BAR_PADDING_HORIZONTAL=4,BAR_PADDING_TOP=6,BAR_PADDING_TOP_BUBBLE=8,FLOATING_BAR_PADDING_VERTICAL=6,FLOATING_BAR_PADDING_HORIZONTAL=8,EXPANDED_FLEX=1.5,SOLID_INACTIVE_OPACITY=.7,TILE_INSET=2,TILE_LABEL_GAP=2,formatBadge=e=>null==e||!1===e?null:!0===e||"·"===e?{text:"",isDot:!0}:"number"==typeof e?e<=0?null:{text:e>99?"99+":String(e),isDot:!1}:"string"==typeof e?0===e.length?null:{text:e,isDot:!1}:null,badgeAccessibilitySuffix=e=>null==e||!1===e?"":"number"==typeof e?e>0?`, ${e} unread`:"":!0===e||"·"===e?", new updates":"string"==typeof e&&e.length>0?`, ${e}`:"",BottomNavigation=forwardRef((e,t)=>{const{tabs:i,centerAction:o,activeTab:n,onChange:r,haptic:a="selection",showLabels:l=!0,variant:s="pill",indicatorPosition:d="bottom",radius:c,indicatorRadius:u="auto",elevation:h,iconSize:p,marginHorizontal:g,marginVertical:m,paddingHorizontal:b,paddingVertical:y,border:f,style:x,indicatorStyle:_,labelStyle:A,testID:I}=e,R=useTheme(),E=useSafeAreaInsets(),T=useMemo(()=>buildStyles(R),[R]),S=R.components.bottomNavigation,w=p??S?.iconSize??18,L=S?.pillHeight??w+4+8,D=S?.pillMaxWidth??64,C=S?.pillInset??16,v=S?.floatingMargin??16,j=S?.floatingRadius??28,B=S?.bubbleSize??48,N=S?.bubbleLift??14,V="tile"===s,P="floating"===s||V,k="bubble"===s,H="expand"===s,M="solid"===s,z="pill"===s||P||M,F=Math.max(0,i.findIndex(e=>e.key===n)),[W,O]=React.useState(0),[U,G]=React.useState(0),$=o?Math.ceil(i.length/2):i.length,X=i.length+(o?1:0),[Z,Y]=React.useState({width:0,height:0}),K=o?.size??48,q=void 0!==o?.gap,J=Math.max(0,o?.gap??0),Q=q?(Z.width||K)+2*J:0,ee=q?i.length>0?Math.max(0,W-Q)/i.length:0:X>0?W/X:0,te=q?Q:ee,ie=useRef(createAnimatedValue(F)).current,oe=useRef({}),ne=useRef({});i.forEach(e=>{oe.current[e.key]||(oe.current[e.key]=new Animated.Value(1)),ne.current[e.key]||(ne.current[e.key]=createAnimatedValue(e.key===n?1:0))});const re=ee>0?V?Math.min(ee-4,96):Math.min(ee-C,D):0,ae=ee>0?(ee-re)/2:0,le=ee>0?(ee-B)/2:0,hasLabel=e=>l&&!1!==e.showLabel&&e.label.trim().length>0,se=i[F],de=se&&!hasLabel(se)&&U>0?U/2:6+(w+4)/2,ce=de-N-B/2,ue=Math.max(0,U-4),he=V?2:de-L/2,pe=useRef(F);useEffect(()=>{if(pe.current===F)return;pe.current=F;const e=Animated.spring(ie,{toValue:F,tension:120,friction:14,useNativeDriver:!0});return e.start(),()=>e.stop()},[F,ie]);const ge=Math.max(1,i.length-1),me=useMemo(()=>{const e=[],t=[];for(let i=0;i<=ge;i++)e.push(i),t.push(i<$?i*ee:i*ee+te);return ie.interpolate({inputRange:e,outputRange:t})},[ie,ge,$,ee,te]),be=i.map(e=>e.key).join(" "),ye=k||H;useEffect(()=>{const e=be.split(" ").flatMap(e=>{const t=e===n?1:0,i=ne.current[e];return i?ye?[Animated.spring(i,{toValue:t,tension:140,friction:13,useNativeDriver:!1})]:(i.setValue(t),[]):[]});if(0===e.length)return;const t=Animated.parallel(e);return t.start(),()=>t.stop()},[n,be,ye]);const popIcon=e=>{Animated.sequence([Animated.timing(e,{toValue:1.15,duration:120,useNativeDriver:!0}),Animated.spring(e,{toValue:1,tension:200,friction:8,useNativeDriver:!0})]).start()},fe=useRef(new Animated.Value(1)).current,{colors:xe}=R,_e=M?xe.primary:xe.background.elevated,Ae=M?xe.onPrimary:xe.primary,Ie=M?xe.onPrimary:V?xe.text.primary:xe.text.tertiary,Re=M?xe.onPrimary:xe.primaryMuted,Ee=M?xe.primary:k?xe.onPrimary:Ae,Te=g??v,Se=m??(P?v:0),we=Se>0,Le=y??(P?6:k?8:6),De=b??(P?8:4),Ce=we?Le:Math.max(Le,E.bottom),ve=we?Math.max(Se,E.bottom):0,je="full"===c,Be=P?U+2*Le+2*StyleSheet.hairlineWidth:U+Le+Ce,Ne=je?U>0?Be/2:R.radius.full:c??S?.borderRadius??(V?R.radius.full:P?j:0),Ve=void 0!==c||void 0!==S?.borderRadius,activeBgRadius=(e,t)=>"number"==typeof u?Math.max(0,Math.min(u,e/2)):"auto"===u&&Ve?Math.min(Ne,e/2):t,Pe="underline"===s?Math.max(De,je&&0===U?0:Ne):De,ke=h??"none",He=R.shadows[ke],Me="none"===ke?null:supportsBoxShadow()?{boxShadow:toBoxShadow(He)}:He,ze=f?StyleSheet.hairlineWidth:0,Fe=M?xe.primary:xe.border.primary,We=o?.lift??0,Oe=Le+ze,Ue=o&&U>0?Math.max(0,(Z.height||K)/2+We-U/2-Oe):0,Ge=o?_jsx(View,{style:[T.centerCell,q?{flex:0,marginHorizontal:J}:null],pointerEvents:"box-none",children:_jsx(Pressable,{onPress:()=>{if(!o)return;const e=o.haptic??a;!1!==e&&triggerHaptic(e),popIcon(fe),o.onPress()},onLayout:e=>{const{width:t,height:i}=e.nativeEvent.layout;Y(e=>e.width===t&&e.height===i?e:{width:t,height:i})},accessibilityRole:"button",accessibilityLabel:o.label,hitSlop:{top:6,bottom:6,left:6,right:6},style:({pressed:e})=>[{top:-We},e?{opacity:.85}:null],testID:o.testID??(I?`${I}-center`:void 0),children:o.content?_jsx(Animated.View,{style:{transform:[{scale:fe}]},children:o.content}):_jsx(View,{style:[T.centerCircle,{width:K,height:K,borderRadius:K/2,...smoothCorners,backgroundColor:o.color??xe.primary}],children:_jsx(Animated.View,{style:{transform:[{scale:fe}]},children:renderSlotIcon(o.icon??"add",{color:o.iconColor??xe.onPrimary,size:o.iconSize??24,disabled:!1})})})})},CENTER_KEY):null,$e=_jsxs(View,{style:T.tabRow,onLayout:e=>{const{width:t,height:i}=e.nativeEvent.layout;O(t),G(i)},children:[z&&re>0&&(!V||ue>0)?_jsx(Animated.View,{pointerEvents:"none",style:[T.pill,{width:re,height:V?ue:L,left:ae,top:he,backgroundColor:Re,borderRadius:V?activeBgRadius(ue,ue/2):activeBgRadius(L,R.radius.full),...smoothCorners,transform:[{translateX:me}]},_]}):null,k&&ee>0?_jsx(Animated.View,{pointerEvents:"none",style:[T.bubble,R.shadows.md,{width:B,height:B,borderRadius:B/2,...smoothCorners,left:le,top:ce,backgroundColor:xe.primary,borderColor:xe.background.elevated,transform:[{translateX:me}]},_]}):null,(Xe=i.map(e=>{const t=e.key===n,i=t?Ae:Ie,o=t?Ee:Ie,l="string"==typeof e.icon?{name:e.icon,variant:"bold"}:e.icon,s=t?e.activeIcon??l:e.icon,d=oe.current[e.key],c=ne.current[e.key],u=formatBadge(e.badge??null),h=badgeAccessibilitySuffix(e.badge??null),p=M&&!t?.7:1,g=k&&t||M?xe.primary:xe.background.elevated,m=hasLabel(e),b=m&&(!H||t),y=_jsxs(Animated.View,{style:[T.iconWrap,{width:w+4,height:w+4,opacity:p,transform:[{scale:d}]}],children:[renderSlotIcon(s,{color:o,size:w,focused:t,disabled:!1}),u?_jsx(View,{style:[u.isDot?T.badgeDot:T.badgePill,{backgroundColor:xe.error,borderColor:g}],children:u.isDot?null:_jsx(Text,{style:[T.badgeText,{color:xe.onError}],numberOfLines:1,children:u.text})}):null]}),f=k?_jsx(Animated.View,{style:{top:c.interpolate({inputRange:[0,1],outputRange:[0,-N]})},children:y}):y,x=b?_jsx(Animated.Text,{numberOfLines:1,style:[T.label,H?T.labelInline:null,{color:i,opacity:H?c:p,fontWeight:t?R.typography.fontWeight.semibold:R.typography.fontWeight.normal},A],children:e.label}):null,E=_jsx(Pressable,{onPress:()=>(e=>{e.key!==n&&!1!==a&&triggerHaptic(a);const t=oe.current[e.key];t&&popIcon(t),r(e.key)})(e),accessibilityRole:"tab",accessibilityState:{selected:t},accessibilityLabel:`${e.label}${h}`,accessibilityHint:`Switches to ${e.label}`,hitSlop:{top:6,bottom:6,left:6,right:6},style:({pressed:e})=>[T.tab,V?T.tabTile:null,e?{opacity:.85}:null],testID:I?`${I}-tab-${e.key}`:void 0,children:H?_jsxs(View,{style:[T.expandPill,{height:L,paddingHorizontal:t&&m?R.spacing.md:Math.max(0,(L-(w+4))/2)}],children:[_jsx(View,{pointerEvents:"none",style:[T.expandFill,{borderRadius:activeBgRadius(L,L/2),...smoothCorners,backgroundColor:t?xe.primaryMuted:"transparent"},t?_:null]}),f,x]}):_jsxs(_Fragment,{children:[f,x]})},e.key);return H?_jsx(Animated.View,{style:{flex:c.interpolate({inputRange:[0,1],outputRange:[1,m?1.5:1]})},children:E},e.key):E}),Ge?[...Xe.slice(0,$),Ge,...Xe.slice($)]:Xe),"underline"===s&&ee>0?_jsx(Animated.View,{pointerEvents:"none",style:[T.underline,"top"===d?T.underlineTop:T.underlineBottom,"top"===d?{top:-Le}:{bottom:-Le},{width:ee,height:S?.underlineHeight??3,backgroundColor:xe.primary,transform:[{translateX:me}]},_]}):null]});var Xe;return _jsx(View,{ref:t,testID:I,accessibilityRole:"tablist",style:[T.outer,{paddingHorizontal:Te,paddingTop:Math.max(Se,Ue),paddingBottom:ve},x],children:_jsx(View,{style:[P?T.floatingBar:T.dockedBar,Me,{backgroundColor:_e,borderColor:Fe,borderRadius:Ne,...smoothCorners},P?{borderWidth:ze,paddingHorizontal:De,paddingVertical:Le}:{borderTopWidth:ze,borderBottomWidth:ze,borderLeftWidth:ze,borderRightWidth:ze,paddingHorizontal:Pe,paddingTop:Le,paddingBottom:Ce}],children:$e})})});BottomNavigation.displayName="BottomNavigation";const buildStyles=e=>StyleSheet.create({outer:{backgroundColor:"transparent"},dockedBar:{paddingHorizontal:4},floatingBar:{paddingVertical:6,paddingHorizontal:8},tabRow:{flexDirection:"row",alignItems:"stretch",position:"relative"},tab:{flex:1,minHeight:44,alignItems:"center",justifyContent:"center",paddingVertical:6,gap:4},tabTile:{paddingVertical:8,gap:2},centerCell:{flex:1,minHeight:44,alignItems:"center",justifyContent:"center"},centerCircle:{alignItems:"center",justifyContent:"center"},iconWrap:{alignItems:"center",justifyContent:"center",position:"relative"},label:{fontSize:e.typography.fontSize.xs,lineHeight:e.typography.fontSize.xs*e.typography.lineHeight.tight,textAlign:"center",includeFontPadding:!1},labelInline:{fontSize:e.typography.fontSize.sm,lineHeight:e.typography.fontSize.sm*e.typography.lineHeight.tight,flexShrink:1,includeFontPadding:!1},expandPill:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:e.spacing.xs},expandFill:{position:"absolute",top:0,right:0,bottom:0,left:0,overflow:"hidden"},pill:{position:"absolute",left:0},bubble:{position:"absolute",left:0,borderWidth:3},underline:{position:"absolute",left:0,height:3},underlineBottom:{borderTopLeftRadius:2,borderTopRightRadius:2,...smoothCorners},underlineTop:{borderBottomLeftRadius:2,borderBottomRightRadius:2,...smoothCorners},badgePill:{position:"absolute",top:-4,right:-8,minWidth:18,height:18,borderRadius:9,...smoothCorners,paddingHorizontal:4,paddingVertical:2,alignItems:"center",justifyContent:"center",borderWidth:1.5},badgeDot:{position:"absolute",top:-2,right:-2,width:10,height:10,borderRadius:5,...smoothCorners,borderWidth:1.5},badgeText:{fontSize:10,fontWeight:"700",lineHeight:12,textAlign:"center",includeFontPadding:!1}});export{BottomNavigation};export default BottomNavigation;
1
+ "use strict";import React,{forwardRef,useEffect,useMemo,useRef}from"react";import{Animated,Pressable,StyleSheet,Text,View}from"react-native";import{useSafeAreaInsets}from"react-native-safe-area-context";import{createAnimatedValue,useTheme}from"../../theme/index.js";import{triggerHaptic}from"../../utils/index.js";import{smoothCorners}from"../../utils/corners.js";import{supportsBoxShadow,toBoxShadow}from"../../utils/shadows.js";import{renderSlotIcon}from"../AppIcon/index.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const DEFAULT_ICON_SIZE=18,DEFAULT_LABEL_MAX_FONT_SCALE=1.2,ICON_WRAP_AIR=4,PILL_AIR=8,DEFAULT_PILL_MAX_WIDTH=64,TILE_MAX_WIDTH=96,DEFAULT_PILL_INSET=16,DEFAULT_UNDERLINE_HEIGHT=3,DEFAULT_FLOATING_MARGIN=16,DEFAULT_FLOATING_RADIUS=28,DEFAULT_BUBBLE_SIZE=48,DEFAULT_BUBBLE_LIFT=14,DEFAULT_CENTER_SIZE=48,DEFAULT_CENTER_ICON_SIZE=24,CENTER_KEY="__webority_center_action__",TAB_PADDING_VERTICAL=6,BAR_PADDING_HORIZONTAL=4,BAR_PADDING_TOP=6,BAR_PADDING_TOP_BUBBLE=8,FLOATING_BAR_PADDING_VERTICAL=6,FLOATING_BAR_PADDING_HORIZONTAL=8,EXPANDED_FLEX=1.5,SOLID_INACTIVE_OPACITY=.7,TILE_INSET=2,TILE_LABEL_GAP=2,formatBadge=e=>null==e||!1===e?null:!0===e||"·"===e?{text:"",isDot:!0}:"number"==typeof e?e<=0?null:{text:e>99?"99+":String(e),isDot:!1}:"string"==typeof e?0===e.length?null:{text:e,isDot:!1}:null,badgeAccessibilitySuffix=e=>null==e||!1===e?"":"number"==typeof e?e>0?`, ${e} unread`:"":!0===e||"·"===e?", new updates":"string"==typeof e&&e.length>0?`, ${e}`:"",BottomNavigation=forwardRef((e,t)=>{const{tabs:i,centerAction:o,activeTab:n,onChange:r,haptic:a="selection",showLabels:l=!0,variant:s="pill",indicatorPosition:d="bottom",radius:c,indicatorRadius:u="auto",elevation:h,iconSize:p,marginHorizontal:g,marginVertical:m,paddingHorizontal:b,paddingVertical:y,border:f,style:x,indicatorStyle:_,labelStyle:A,labelMaxFontScale:I,testID:R}=e,E=useTheme(),S=useSafeAreaInsets(),T=useMemo(()=>buildStyles(E),[E]),L=E.components.bottomNavigation,w=p??L?.iconSize??18,D=L?.pillHeight??w+4+8,C=L?.pillMaxWidth??64,v=L?.pillInset??16,B=L?.floatingMargin??16,j=L?.floatingRadius??28,N=L?.bubbleSize??48,V=L?.bubbleLift??14,P="tile"===s,M="floating"===s||P,k="bubble"===s,F="expand"===s,H="solid"===s,z="pill"===s||M||H,W=Math.max(0,i.findIndex(e=>e.key===n)),[O,U]=React.useState(0),[G,X]=React.useState(0),$=o?Math.ceil(i.length/2):i.length,Z=i.length+(o?1:0),[Y,K]=React.useState({width:0,height:0}),q=o?.size??48,J=void 0!==o?.gap,Q=Math.max(0,o?.gap??0),ee=J?(Y.width||q)+2*Q:0,te=J?i.length>0?Math.max(0,O-ee)/i.length:0:Z>0?O/Z:0,ie=J?ee:te,oe=useRef(createAnimatedValue(W)).current,ne=useRef({}),re=useRef({});i.forEach(e=>{ne.current[e.key]||(ne.current[e.key]=new Animated.Value(1)),re.current[e.key]||(re.current[e.key]=createAnimatedValue(e.key===n?1:0))});const ae=te>0?P?Math.min(te-4,96):Math.min(te-v,C):0,le=te>0?(te-ae)/2:0,se=te>0?(te-N)/2:0,hasLabel=e=>l&&!1!==e.showLabel&&e.label.trim().length>0,de=i[W],ce=de&&!hasLabel(de)&&G>0?G/2:6+(w+4)/2,ue=ce-V-N/2,he=Math.max(0,G-4),pe=P?2:ce-D/2,ge=useRef(W);useEffect(()=>{if(ge.current===W)return;ge.current=W;const e=Animated.spring(oe,{toValue:W,tension:120,friction:14,useNativeDriver:!0});return e.start(),()=>e.stop()},[W,oe]);const me=Math.max(1,i.length-1),be=useMemo(()=>{const e=[],t=[];for(let i=0;i<=me;i++)e.push(i),t.push(i<$?i*te:i*te+ie);return oe.interpolate({inputRange:e,outputRange:t})},[oe,me,$,te,ie]),ye=i.map(e=>e.key).join(" "),fe=k||F;useEffect(()=>{const e=ye.split(" ").flatMap(e=>{const t=e===n?1:0,i=re.current[e];return i?fe?[Animated.spring(i,{toValue:t,tension:140,friction:13,useNativeDriver:!1})]:(i.setValue(t),[]):[]});if(0===e.length)return;const t=Animated.parallel(e);return t.start(),()=>t.stop()},[n,ye,fe]);const popIcon=e=>{Animated.sequence([Animated.timing(e,{toValue:1.15,duration:120,useNativeDriver:!0}),Animated.spring(e,{toValue:1,tension:200,friction:8,useNativeDriver:!0})]).start()},xe=useRef(new Animated.Value(1)).current,{colors:_e}=E,Ae=H?_e.primary:_e.background.elevated,Ie=H?_e.onPrimary:_e.primary,Re=H?_e.onPrimary:P?_e.text.primary:_e.text.tertiary,Ee=H?_e.onPrimary:_e.primaryMuted,Se=H?_e.primary:k?_e.onPrimary:Ie,Te=g??B,Le=m??(M?B:0),we=Le>0,De=y??(M?6:k?8:6),Ce=b??(M?8:4),ve=we?De:Math.max(De,S.bottom),Be=we?Math.max(Le,S.bottom):0,je="full"===c,Ne=M?G+2*De+2*StyleSheet.hairlineWidth:G+De+ve,Ve=je?G>0?Ne/2:E.radius.full:c??L?.borderRadius??(P?E.radius.full:M?j:0),Pe=void 0!==c||void 0!==L?.borderRadius,activeBgRadius=(e,t)=>"number"==typeof u?Math.max(0,Math.min(u,e/2)):"auto"===u&&Pe?Math.min(Ve,e/2):t,Me="underline"===s?Math.max(Ce,je&&0===G?0:Ve):Ce,ke=h??"none",Fe=E.shadows[ke],He="none"===ke?null:supportsBoxShadow()?{boxShadow:toBoxShadow(Fe)}:Fe,ze=f?StyleSheet.hairlineWidth:0,We=H?_e.primary:_e.border.primary,Oe=o?.lift??0,Ue=De+ze,Ge=o&&G>0?Math.max(0,(Y.height||q)/2+Oe-G/2-Ue):0,Xe=o?_jsx(View,{style:[T.centerCell,J?{flex:0,marginHorizontal:Q}:null],pointerEvents:"box-none",children:_jsx(Pressable,{onPress:()=>{if(!o)return;const e=o.haptic??a;!1!==e&&triggerHaptic(e),popIcon(xe),o.onPress()},onLayout:e=>{const{width:t,height:i}=e.nativeEvent.layout;K(e=>e.width===t&&e.height===i?e:{width:t,height:i})},accessibilityRole:"button",accessibilityLabel:o.label,hitSlop:{top:6,bottom:6,left:6,right:6},style:({pressed:e})=>[{top:-Oe},e?{opacity:.85}:null],testID:o.testID??(R?`${R}-center`:void 0),children:o.content?_jsx(Animated.View,{style:{transform:[{scale:xe}]},children:o.content}):_jsx(View,{style:[T.centerCircle,{width:q,height:q,borderRadius:q/2,...smoothCorners,backgroundColor:o.color??_e.primary}],children:_jsx(Animated.View,{style:{transform:[{scale:xe}]},children:renderSlotIcon(o.icon??"add",{color:o.iconColor??_e.onPrimary,size:o.iconSize??24,disabled:!1})})})})},CENTER_KEY):null,$e=_jsxs(View,{style:T.tabRow,onLayout:e=>{const{width:t,height:i}=e.nativeEvent.layout;U(t),X(i)},children:[z&&ae>0&&(!P||he>0)?_jsx(Animated.View,{pointerEvents:"none",style:[T.pill,{width:ae,height:P?he:D,left:le,top:pe,backgroundColor:Ee,borderRadius:P?activeBgRadius(he,he/2):activeBgRadius(D,E.radius.full),...smoothCorners,transform:[{translateX:be}]},_]}):null,k&&te>0?_jsx(Animated.View,{pointerEvents:"none",style:[T.bubble,E.shadows.md,{width:N,height:N,borderRadius:N/2,...smoothCorners,left:se,top:ue,backgroundColor:_e.primary,borderColor:_e.background.elevated,transform:[{translateX:be}]},_]}):null,(Ze=i.map(e=>{const t=e.key===n,i=t?Ie:Re,o=t?Se:Re,l="string"==typeof e.icon?{name:e.icon,variant:"bold"}:e.icon,s=t?e.activeIcon??l:e.icon,d=ne.current[e.key],c=re.current[e.key],u=formatBadge(e.badge??null),h=badgeAccessibilitySuffix(e.badge??null),p=H&&!t?.7:1,g=k&&t||H?_e.primary:_e.background.elevated,m=hasLabel(e),b=m&&(!F||t),y=_jsxs(Animated.View,{style:[T.iconWrap,{width:w+4,height:w+4,opacity:p,transform:[{scale:d}]}],children:[renderSlotIcon(s,{color:o,size:w,focused:t,disabled:!1}),u?_jsx(View,{style:[u.isDot?T.badgeDot:T.badgePill,{backgroundColor:_e.error,borderColor:g}],children:u.isDot?null:_jsx(Text,{style:[T.badgeText,{color:_e.onError}],numberOfLines:1,children:u.text})}):null]}),f=k?_jsx(Animated.View,{style:{top:c.interpolate({inputRange:[0,1],outputRange:[0,-V]})},children:y}):y,x=b?_jsx(Animated.Text,{numberOfLines:1,maxFontSizeMultiplier:I??E.maxFontSizeMultiplier??1.2,style:[T.label,F?T.labelInline:null,{color:i,opacity:F?c:p,fontWeight:t?E.typography.fontWeight.semibold:E.typography.fontWeight.normal},A],children:e.label}):null,S=_jsx(Pressable,{onPress:()=>(e=>{e.key!==n&&!1!==a&&triggerHaptic(a);const t=ne.current[e.key];t&&popIcon(t),r(e.key)})(e),accessibilityRole:"tab",accessibilityState:{selected:t},"aria-selected":t,accessibilityLabel:`${e.label}${h}`,accessibilityHint:`Switches to ${e.label}`,hitSlop:{top:6,bottom:6,left:6,right:6},style:({pressed:e})=>[T.tab,P?T.tabTile:null,e?{opacity:.85}:null],testID:R?`${R}-tab-${e.key}`:void 0,children:F?_jsxs(View,{style:[T.expandPill,{height:D,paddingHorizontal:t&&m?E.spacing.md:Math.max(0,(D-(w+4))/2)}],children:[_jsx(View,{pointerEvents:"none",style:[T.expandFill,{borderRadius:activeBgRadius(D,D/2),...smoothCorners,backgroundColor:t?_e.primaryMuted:"transparent"},t?_:null]}),f,x]}):_jsxs(_Fragment,{children:[f,x]})},e.key);return F?_jsx(Animated.View,{style:{flex:c.interpolate({inputRange:[0,1],outputRange:[1,m?1.5:1]})},children:S},e.key):S}),Xe?[...Ze.slice(0,$),Xe,...Ze.slice($)]:Ze),"underline"===s&&te>0?_jsx(Animated.View,{pointerEvents:"none",style:[T.underline,"top"===d?T.underlineTop:T.underlineBottom,"top"===d?{top:-De}:{bottom:-De},{width:te,height:L?.underlineHeight??3,backgroundColor:_e.primary,transform:[{translateX:be}]},_]}):null]});var Ze;return _jsx(View,{ref:t,testID:R,accessibilityRole:"tablist",style:[T.outer,{paddingHorizontal:Te,paddingTop:Math.max(Le,Ge),paddingBottom:Be},x],children:_jsx(View,{style:[M?T.floatingBar:T.dockedBar,He,{backgroundColor:Ae,borderColor:We,borderRadius:Ve,...smoothCorners},M?{borderWidth:ze,paddingHorizontal:Ce,paddingVertical:De}:{borderTopWidth:ze,borderBottomWidth:ze,borderLeftWidth:ze,borderRightWidth:ze,paddingHorizontal:Me,paddingTop:De,paddingBottom:ve}],children:$e})})});BottomNavigation.displayName="BottomNavigation";const buildStyles=e=>StyleSheet.create({outer:{backgroundColor:"transparent"},dockedBar:{paddingHorizontal:4},floatingBar:{paddingVertical:6,paddingHorizontal:8},tabRow:{flexDirection:"row",alignItems:"stretch",position:"relative"},tab:{flex:1,minHeight:44,alignItems:"center",justifyContent:"center",paddingVertical:6,gap:4},tabTile:{paddingVertical:8,gap:2},centerCell:{flex:1,minHeight:44,alignItems:"center",justifyContent:"center"},centerCircle:{alignItems:"center",justifyContent:"center"},iconWrap:{alignItems:"center",justifyContent:"center",position:"relative"},label:{fontSize:e.typography.fontSize.xs,lineHeight:e.typography.fontSize.xs*e.typography.lineHeight.tight,textAlign:"center",includeFontPadding:!1},labelInline:{fontSize:e.typography.fontSize.sm,lineHeight:e.typography.fontSize.sm*e.typography.lineHeight.tight,flexShrink:1,includeFontPadding:!1},expandPill:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:e.spacing.xs},expandFill:{position:"absolute",top:0,right:0,bottom:0,left:0,overflow:"hidden"},pill:{position:"absolute",left:0},bubble:{position:"absolute",left:0,borderWidth:3},underline:{position:"absolute",left:0,height:3},underlineBottom:{borderTopLeftRadius:2,borderTopRightRadius:2,...smoothCorners},underlineTop:{borderBottomLeftRadius:2,borderBottomRightRadius:2,...smoothCorners},badgePill:{position:"absolute",top:-4,right:-8,minWidth:18,height:18,borderRadius:9,...smoothCorners,paddingHorizontal:4,paddingVertical:2,alignItems:"center",justifyContent:"center",borderWidth:1.5},badgeDot:{position:"absolute",top:-2,right:-2,width:10,height:10,borderRadius:5,...smoothCorners,borderWidth:1.5},badgeText:{fontSize:10,fontWeight:"700",lineHeight:12,textAlign:"center",includeFontPadding:!1}});export{BottomNavigation};export default BottomNavigation;
@@ -1 +1 @@
1
- "use strict";import React,{createContext,forwardRef,useCallback,useContext,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Dimensions,Modal,Platform,ScrollView,StyleSheet,useWindowDimensions,View}from"react-native";import{Gesture,GestureDetector,GestureHandlerRootView}from"react-native-gesture-handler";import{useReanimatedKeyboardAnimation}from"react-native-keyboard-controller";import Animated,{Easing,runOnJS,useAnimatedStyle,useDerivedValue,useSharedValue,withSpring,withTiming}from"react-native-reanimated";import{SafeAreaProvider,useSafeAreaInsets}from"react-native-safe-area-context";import{useTheme}from"../../theme/index.js";import{triggerHaptic}from"../../utils/index.js";import{smoothCorners}from"../../utils/corners.js";import{ToastHost}from"../Toast/ToastProvider.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const TABLET_MIN_SHORT_SIDE=600,DIALOG_MAX_WIDTH=560,BottomSheetContext=createContext(null);export const useBottomSheet=()=>{const e=useContext(BottomSheetContext);if(!e)throw new Error("useBottomSheet must be used inside a <BottomSheet>.");return e};const SPRING_CONFIG={damping:20,stiffness:240,mass:1},CLOSE_VELOCITY_THRESHOLD=1e3,DRAG_ACTIVATION_OFFSET=10,BottomSheet=forwardRef((e,t)=>{const{snapPoints:o,index:s,onChange:n,onAnimate:a,onAfterClose:r,enablePanDownToClose:i=!0,enableBackdropPress:l=!0,scrollable:u=!1,scrollRef:c,onScroll:d,onContentSizeChange:h,onScrollLayout:m,scrollEventThrottle:f,keyboardBehavior:b="shift",mode:S="modal",presentation:g="sheet",handleIndicatorStyle:p,containerStyle:v,header:y,footer:w,headerStyle:x,footerStyle:C,children:k,accessibilityLabel:_,accessibilityViewIsModal:I,testID:R}=e,j=useTheme(),T=useSafeAreaInsets(),[M,O]=useState(()=>Dimensions.get("window").height),[V,D]=useState(()=>Dimensions.get("window").width),A=useCallback(e=>{const{height:t,width:o}=e.nativeEvent.layout;t>0&&O(e=>e===t?e:t),o>0&&D(e=>e===o?e:o)},[]),H=useWindowDimensions(),B="dialog"===g||"auto"===g&&Math.min(H.width,H.height)>=600,E=Math.min(560,V-2*j.spacing.xl),[P,G]=useState({top:T.top,bottom:T.bottom}),L="modal"===S?P.top:T.top,N="modal"===S?P.bottom:T.bottom,J=o.includes("content"),[F,z]=useMeasuredHeight(),[Y,$]=useMeasuredHeight(),[W,K,X]=useMeasuredHeight(),[q,U]=useMeasuredHeight(),Q=B?j.spacing.md:F,Z=J?Math.min(Q+(null!=y?Y:0)+W+(null!=w?q:0)+N,M-L):0,ee=useCallback((e,t)=>{J&&X(t),h?.(e,t)},[J,h,X]),te=useMemo(()=>resolveSnapPoints(o,M,Z),[o,M,Z]),oe=M,se=te[te.length-1]??0,ne=useSharedValue(oe),ae=useSharedValue(oe),re=useSharedValue(-1),[ie,le]=useState(-1),ue=useRef(!1),[ce,de]=useState(!1),[he,me]=useState(!1),fe=useRef(!1),be=useRef(r);be.current=r;const[Se,ge]=useState(!1),pe=useCallback(e=>{if(e<0||e>=te.length)return oe;const t=te[e];return B?(M-t)/2:M-t},[te,M,oe,B]),ve=useCallback(e=>{ie!==e&&(le(e),re.value=e,n?.(e))},[ie,re,n]),ye=useCallback(()=>{ue.current=!1,re.value<0&&(fe.current=!0,"modal"===S?(de(!1),"ios"!==Platform.OS&&me(!1)):ge(!1))},[S,re]),we=useCallback(()=>{fe.current&&me(!1)},[]);useEffect(()=>{("modal"===S?!he:!Se)&&fe.current&&(fe.current=!1,be.current?.())},[S,he,Se]);const xe=useCallback((e,t,o)=>{ue.current=!0,a?.(t,o),ne.value=withSpring(e,SPRING_CONFIG,e=>{"worklet";e&&runOnJS(ye)()})},[a,ne,ye]),Ce=useCallback(e=>{const t="number"==typeof e?clamp(e,0,te.length-1):ie>=0?ie:0,o=re.value,s=pe(t);fe.current=!1,"modal"===S?(me(!0),de(!0)):ge(!0),o<0&&(ne.value=oe),ve(t),xe(s,o,t)},[xe,oe,ie,re,S,te.length,ve,ne,pe]),ke=useCallback(()=>{if(0===te.length)return;const e=re.value,t=pe(0);ve(0),xe(t,e,0)},[xe,re,te.length,ve,pe]),_e=useCallback(()=>{const e=re.value;ve(-1),ue.current=!0,a?.(e,-1),ne.value=withTiming(oe,{duration:j.motion.duration.fast,easing:Easing.bezier(...j.motion.easing.accelerate)},e=>{"worklet";e&&runOnJS(ye)()})},[oe,re,ye,a,ve,ne,j.motion.duration.fast,j.motion.easing.accelerate]);useImperativeHandle(t,()=>({expand:Ce,collapse:ke,close:_e}),[Ce,ke,_e]),useEffect(()=>{"number"==typeof s&&s!==ie&&(-1===s?_e():Ce(s))},[s]);const Ie=useRef({hostHeight:M,contentSnap:Z});useEffect(()=>{const e=Ie.current;e.hostHeight===M&&e.contentSnap===Z||(Ie.current={hostHeight:M,contentSnap:Z},e.hostHeight===M&&re.value<0||(ne.value=withSpring(pe(re.value),SPRING_CONFIG)))},[M,Z]);const Re=M-se,je=useMemo(()=>te.map(e=>M-e),[te,M]),Te=useCallback((e,t)=>{const o=re.value;if(-1===e)return triggerHaptic("selection"),ve(-1),ue.current=!0,a?.(o,-1),void(ne.value=withTiming(oe,{duration:j.motion.duration.fast,easing:Easing.bezier(...j.motion.easing.accelerate)},e=>{"worklet";e&&runOnJS(ye)()}));ve(e),xe(t,o,e)},[xe,oe,re,ye,a,ve,ne,j.motion.duration.fast,j.motion.easing.accelerate]),Me=useMemo(()=>Gesture.Native().withTestId(R?`${R}-content-gesture`:"bottom-sheet-content-gesture"),[R]),Oe=useMemo(()=>{const e=je,t=oe,o=Re,s=i;return Gesture.Pan().withTestId(R?`${R}-pan-gesture`:"bottom-sheet-pan-gesture").activeOffsetY([-10,10]).failOffsetX([-15,15]).onStart(()=>{"worklet";ae.value=ne.value}).onUpdate(e=>{"worklet";const t=ae.value+e.translationY;ne.value=t<o?o+.25*(t-o):t}).onEnd(o=>{"worklet";const n=ne.value;if(o.velocityY>1e3)return s?void runOnJS(Te)(-1,t):void runOnJS(Te)(0,e[0]);let a=0,r=Math.abs(n-e[0]);for(let t=1;t<e.length;t++){const o=Math.abs(n-e[t]);o<r&&(r=o,a=t)}const i=e[0];s&&n-i>80?runOnJS(Te)(-1,t):runOnJS(Te)(a,e[a])})},[oe,ae,i,Te,Re,je,R,ne]),{height:Ve}=useReanimatedKeyboardAnimation(),De="shift"===b,Ae=useDerivedValue(()=>De?Ve.value:0),He=te[ie>=0?ie:0]??se,Be=j.spacing.md,Ee=useAnimatedStyle(()=>{if(B){const e=Ae.value,t=M+e-He-Be,o=e<0&&ne.value>t?t:ne.value;return{top:o<L?L:o}}const e=ne.value+Ae.value,t=Ae.value<0?L:Re;return{top:e<t?t:e}}),Pe=useAnimatedStyle(()=>{const e=Ae.value;if(B){const t=M+e-He-Be,o=e<0&&ne.value>t?t:ne.value,s=M+e-Be-(o<L?L:o);return{height:s<0?0:s>He?He:s}}const t=e<0?L:Re,o=ne.value+e,s=M+e-(o<t?t:o);return{height:s<0?0:s>se?se:s}}),Ge=ie>=0,Le=useMemo(()=>buildStyles(j),[j]),Ne=useCallback(()=>{l&&(triggerHaptic("selection"),_e())},[l,_e]),Je=useMemo(()=>Gesture.Tap().withTestId(R?`${R}-backdrop-gesture`:"bottom-sheet-backdrop-gesture").maxDuration(250).onEnd((e,t)=>{"worklet";t&&runOnJS(Ne)()}),[Ne,R]),Fe=useMemo(()=>({snapIndex:ie,snapPoints:te,expand:Ce,collapse:ke,close:_e}),[ie,te,Ce,ke,_e]);if("inline"===S&&!Se)return null;if("modal"===S&&!he)return null;const ze=_jsxs(View,{collapsable:!1,style:["modal"===S?Le.backdropModal:Le.backdropInline,{backgroundColor:j.colors.background.overlay}],onLayout:A,testID:R,accessibilityViewIsModal:I??Ge,children:[_jsx(GestureDetector,{gesture:Je,children:_jsx(Animated.View,{style:StyleSheet.absoluteFill,accessibilityRole:"button",accessibilityLabel:"Close bottom sheet"})}),_jsx(Animated.View,{accessibilityRole:"alert",accessibilityLabel:_,accessibilityViewIsModal:I??Ge,style:[Le.sheet,{height:se,backgroundColor:j.colors.background.elevated,borderTopLeftRadius:j.radius["2xl"],borderTopRightRadius:j.radius["2xl"],...smoothCorners,...j.shadows.xl},B?{height:He,left:(V-E)/2,right:void 0,width:E,borderBottomLeftRadius:j.radius["2xl"],borderBottomRightRadius:j.radius["2xl"]}:null,v,Ee],children:_jsxs(SheetBody,{style:[Le.body,Pe],keyboardOffset:Ae,children:[B?_jsx(View,{style:{height:j.spacing.md}}):_jsx(GestureDetector,{gesture:Oe,children:_jsx(View,{style:Le.handleRow,onLayout:J?z:void 0,accessible:!0,accessibilityLabel:"Drag handle",accessibilityHint:"Drag up or down to resize the sheet, or swipe down to close it",testID:R?`${R}-handle`:"bottom-sheet-handle",children:_jsx(View,{style:[Le.handle,{backgroundColor:j.components.bottomSheet?.handleColor??j.colors.border.primary},p]})})}),null!=y&&_jsx(View,{style:[Le.header,x],onLayout:J?$:void 0,children:y}),u?_jsx(GestureDetector,{gesture:Me,children:_jsx(ScrollView,{ref:c,style:Le.scrollContent,onScroll:d,onContentSizeChange:ee,onLayout:m,scrollEventThrottle:f,keyboardShouldPersistTaps:"always",keyboardDismissMode:"none",children:k})}):_jsx(View,{style:Le.content,children:J?_jsx(View,{onLayout:K,children:k}):k}),null!=w&&_jsx(View,{style:[Le.footer,C],onLayout:J?U:void 0,children:w})]})})]}),Ye=_jsx(BottomSheetContext.Provider,{value:Fe,children:ze});return"modal"===S?_jsx(Modal,{transparent:!0,visible:ce,onRequestClose:_e,onDismiss:"ios"===Platform.OS?we:void 0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",supportedOrientations:["portrait","landscape"],children:_jsxs(SafeAreaProvider,{style:Le.modalRoot,children:[_jsx(InsetsProbe,{onChange:G}),"android"===Platform.OS?_jsx(GestureHandlerRootView,{style:Le.modalRoot,children:Ye}):Ye,_jsx(ToastHost,{})]})}):Ye}),InsetsProbe=({onChange:e})=>{const{top:t,bottom:o}=useSafeAreaInsets();return useEffect(()=>{e(e=>e.top===t&&e.bottom===o?e:{top:t,bottom:o})},[t,o,e]),null},SheetBody=({style:e,keyboardOffset:t,children:o})=>{const s=useSafeAreaInsets().bottom,n=useAnimatedStyle(()=>{const e=s+t.value;return{paddingBottom:e>0?e:0}});return _jsx(Animated.View,{style:[e,n],children:o})};BottomSheet.displayName="BottomSheet";const useMeasuredHeight=()=>{const[e,t]=useState(0),o=useCallback(e=>{t(t=>t===e?t:e)},[]);return[e,useCallback(e=>o(e.nativeEvent.layout.height),[o]),o]},resolveSnapPoints=(e,t,o)=>[...e.map(e=>{if("number"==typeof e)return e;if("content"===e)return o;const s=parseFloat(e);return Number.isNaN(s)?0:s/100*t})].sort((e,t)=>e-t),clamp=(e,t,o)=>Math.min(Math.max(e,t),o),buildStyles=e=>StyleSheet.create({backdropModal:{flex:1},backdropInline:{...StyleSheet.absoluteFill},sheet:{position:"absolute",left:0,right:0,overflow:"hidden"},body:{overflow:"hidden"},handleRow:{alignItems:"center",justifyContent:"center",alignSelf:"stretch",paddingTop:12,paddingBottom:24},header:{},footer:{},handle:{width:36,height:4,borderRadius:2,...smoothCorners},content:{flex:1,overflow:"hidden"},scrollContent:{flex:1},modalRoot:{flex:1}});export{BottomSheet};export default BottomSheet;
1
+ "use strict";import{createContext,forwardRef,useCallback,useContext,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Dimensions,Modal,Platform,ScrollView,StyleSheet,useWindowDimensions,View}from"react-native";import{Gesture,GestureDetector,GestureHandlerRootView}from"react-native-gesture-handler";import{useReanimatedKeyboardAnimation}from"react-native-keyboard-controller";import Animated,{Easing,runOnJS,useAnimatedStyle,useDerivedValue,useSharedValue,withSpring,withTiming}from"react-native-reanimated";import{SafeAreaProvider,useSafeAreaInsets}from"react-native-safe-area-context";import{useTheme}from"../../theme/index.js";import{triggerHaptic}from"../../utils/index.js";import{smoothCorners}from"../../utils/corners.js";import{ToastHost}from"../Toast/ToastProvider.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const TABLET_MIN_SHORT_SIDE=600,DIALOG_MAX_WIDTH=560,BottomSheetContext=createContext(null);export const useBottomSheet=()=>{const e=useContext(BottomSheetContext);if(!e)throw new Error("useBottomSheet must be used inside a <BottomSheet>.");return e};const SPRING_CONFIG={damping:20,stiffness:240,mass:1},CLOSE_VELOCITY_THRESHOLD=1e3,DRAG_ACTIVATION_OFFSET=10,BottomSheet=forwardRef((e,t)=>{const{snapPoints:o,index:s,onChange:n,onAnimate:a,onAfterClose:r,enablePanDownToClose:i=!0,enableBackdropPress:l=!0,scrollable:u=!1,scrollRef:c,onScroll:d,onContentSizeChange:h,onScrollLayout:m,scrollEventThrottle:f,keyboardBehavior:b="shift",mode:S="modal",presentation:g="sheet",handleIndicatorStyle:p,containerStyle:v,header:y,footer:w,headerStyle:x,footerStyle:C,children:k,accessibilityLabel:_,accessibilityViewIsModal:I,testID:R}=e,j=useTheme(),T=useSafeAreaInsets(),[M,O]=useState(()=>Dimensions.get("window").height),[V,D]=useState(()=>Dimensions.get("window").width),A=useCallback(e=>{const{height:t,width:o}=e.nativeEvent.layout;t>0&&O(e=>e===t?e:t),o>0&&D(e=>e===o?e:o)},[]),H=useWindowDimensions(),B="dialog"===g||"auto"===g&&Math.min(H.width,H.height)>=600,E=Math.min(560,V-2*j.spacing.xl),[P,G]=useState({top:T.top,bottom:T.bottom}),L="modal"===S?P.top:T.top,N="modal"===S?P.bottom:T.bottom,J=o.includes("content"),[F,z]=useMeasuredHeight(),[Y,$]=useMeasuredHeight(),[W,K,X]=useMeasuredHeight(),[q,U]=useMeasuredHeight(),Q=B?j.spacing.md:F,Z=J?Math.min(Q+(null!=y?Y:0)+W+(null!=w?q:0)+N,M-L):0,ee=useCallback((e,t)=>{J&&X(t),h?.(e,t)},[J,h,X]),te=useMemo(()=>resolveSnapPoints(o,M,Z),[o,M,Z]),oe=M,se=te[te.length-1]??0,ne=useSharedValue(oe),ae=useSharedValue(oe),re=useSharedValue(-1),[ie,le]=useState(-1),ue=useRef(!1),[ce,de]=useState(!1),[he,me]=useState(!1),fe=useRef(!1),be=useRef(r);be.current=r;const[Se,ge]=useState(!1),pe=useCallback(e=>{if(e<0||e>=te.length)return oe;const t=te[e];return B?(M-t)/2:M-t},[te,M,oe,B]),ve=useCallback(e=>{ie!==e&&(le(e),re.value=e,n?.(e))},[ie,re,n]),ye=useCallback(()=>{ue.current=!1,re.value<0&&(fe.current=!0,"modal"===S?(de(!1),"ios"!==Platform.OS&&me(!1)):ge(!1))},[S,re]),we=useCallback(()=>{fe.current&&me(!1)},[]);useEffect(()=>{("modal"===S?!he:!Se)&&fe.current&&(fe.current=!1,be.current?.())},[S,he,Se]);const xe=useCallback((e,t,o)=>{ue.current=!0,a?.(t,o),ne.value=withSpring(e,SPRING_CONFIG,e=>{"worklet";e&&runOnJS(ye)()})},[a,ne,ye]),Ce=useCallback(e=>{const t="number"==typeof e?clamp(e,0,te.length-1):ie>=0?ie:0,o=re.value,s=pe(t);fe.current=!1,"modal"===S?(me(!0),de(!0)):ge(!0),o<0&&(ne.value=oe),ve(t),xe(s,o,t)},[xe,oe,ie,re,S,te.length,ve,ne,pe]),ke=useCallback(()=>{if(0===te.length)return;const e=re.value,t=pe(0);ve(0),xe(t,e,0)},[xe,re,te.length,ve,pe]),_e=useCallback(()=>{const e=re.value;ve(-1),ue.current=!0,a?.(e,-1),ne.value=withTiming(oe,{duration:j.motion.duration.fast,easing:Easing.bezier(...j.motion.easing.accelerate)},e=>{"worklet";e&&runOnJS(ye)()})},[oe,re,ye,a,ve,ne,j.motion.duration.fast,j.motion.easing.accelerate]);useImperativeHandle(t,()=>({expand:Ce,collapse:ke,close:_e}),[Ce,ke,_e]),useEffect(()=>{"number"==typeof s&&s!==ie&&(-1===s?_e():Ce(s))},[s]);const Ie=useRef({hostHeight:M,contentSnap:Z});useEffect(()=>{const e=Ie.current;e.hostHeight===M&&e.contentSnap===Z||(Ie.current={hostHeight:M,contentSnap:Z},e.hostHeight===M&&re.value<0||(ne.value=withSpring(pe(re.value),SPRING_CONFIG)))},[M,Z]);const Re=M-se,je=useMemo(()=>te.map(e=>M-e),[te,M]),Te=useCallback((e,t)=>{const o=re.value;if(-1===e)return triggerHaptic("selection"),ve(-1),ue.current=!0,a?.(o,-1),void(ne.value=withTiming(oe,{duration:j.motion.duration.fast,easing:Easing.bezier(...j.motion.easing.accelerate)},e=>{"worklet";e&&runOnJS(ye)()}));ve(e),xe(t,o,e)},[xe,oe,re,ye,a,ve,ne,j.motion.duration.fast,j.motion.easing.accelerate]),Me=useMemo(()=>Gesture.Native().withTestId(R?`${R}-content-gesture`:"bottom-sheet-content-gesture"),[R]),Oe=useMemo(()=>{const e=je,t=oe,o=Re,s=i;return Gesture.Pan().withTestId(R?`${R}-pan-gesture`:"bottom-sheet-pan-gesture").activeOffsetY([-10,10]).failOffsetX([-15,15]).onStart(()=>{"worklet";ae.value=ne.value}).onUpdate(e=>{"worklet";const t=ae.value+e.translationY;ne.value=t<o?o+.25*(t-o):t}).onEnd(o=>{"worklet";const n=ne.value;if(o.velocityY>1e3)return s?void runOnJS(Te)(-1,t):void runOnJS(Te)(0,e[0]);let a=0,r=Math.abs(n-e[0]);for(let t=1;t<e.length;t++){const o=Math.abs(n-e[t]);o<r&&(r=o,a=t)}const i=e[0];s&&n-i>80?runOnJS(Te)(-1,t):runOnJS(Te)(a,e[a])})},[oe,ae,i,Te,Re,je,R,ne]),{height:Ve}=useReanimatedKeyboardAnimation(),De="shift"===b,Ae=useDerivedValue(()=>De?Ve.value:0),He=te[ie>=0?ie:0]??se,Be=j.spacing.md,Ee=useAnimatedStyle(()=>{if(B){const e=Ae.value,t=M+e-He-Be,o=e<0&&ne.value>t?t:ne.value;return{top:o<L?L:o}}const e=ne.value+Ae.value,t=Ae.value<0?L:Re;return{top:e<t?t:e}}),Pe=useAnimatedStyle(()=>{const e=Ae.value;if(B){const t=M+e-He-Be,o=e<0&&ne.value>t?t:ne.value,s=M+e-Be-(o<L?L:o);return{height:s<0?0:s>He?He:s}}const t=e<0?L:Re,o=ne.value+e,s=M+e-(o<t?t:o);return{height:s<0?0:s>se?se:s}}),Ge=ie>=0,Le=useMemo(()=>buildStyles(j),[j]),Ne=useCallback(()=>{l&&(triggerHaptic("selection"),_e())},[l,_e]),Je=useMemo(()=>Gesture.Tap().withTestId(R?`${R}-backdrop-gesture`:"bottom-sheet-backdrop-gesture").maxDuration(250).onEnd((e,t)=>{"worklet";t&&runOnJS(Ne)()}),[Ne,R]),Fe=useMemo(()=>({snapIndex:ie,snapPoints:te,expand:Ce,collapse:ke,close:_e}),[ie,te,Ce,ke,_e]);if("inline"===S&&!Se)return null;if("modal"===S&&!he)return null;const ze=_jsxs(View,{collapsable:!1,style:["modal"===S?Le.backdropModal:Le.backdropInline,{backgroundColor:j.colors.background.overlay}],onLayout:A,testID:R,accessibilityViewIsModal:I??Ge,children:[_jsx(GestureDetector,{gesture:Je,children:_jsx(Animated.View,{style:StyleSheet.absoluteFill,accessibilityRole:"button",accessibilityLabel:"Close bottom sheet"})}),_jsx(Animated.View,{accessibilityRole:"alert",accessibilityLabel:_,accessibilityViewIsModal:I??Ge,style:[Le.sheet,{height:se,backgroundColor:j.colors.background.elevated,borderTopLeftRadius:j.radius["2xl"],borderTopRightRadius:j.radius["2xl"],...smoothCorners,...j.shadows.xl},B?{height:He,left:(V-E)/2,right:void 0,width:E,borderBottomLeftRadius:j.radius["2xl"],borderBottomRightRadius:j.radius["2xl"]}:null,v,Ee],children:_jsxs(SheetBody,{style:[Le.body,Pe],keyboardOffset:Ae,children:[B?_jsx(View,{style:{height:j.spacing.md}}):_jsx(GestureDetector,{gesture:Oe,children:_jsx(View,{style:Le.handleRow,onLayout:J?z:void 0,accessible:!0,accessibilityLabel:"Drag handle",accessibilityHint:"Drag up or down to resize the sheet, or swipe down to close it",testID:R?`${R}-handle`:"bottom-sheet-handle",children:_jsx(View,{style:[Le.handle,{backgroundColor:j.components.bottomSheet?.handleColor??j.colors.border.primary},p]})})}),null!=y&&_jsx(View,{style:[Le.header,x],onLayout:J?$:void 0,children:y}),u?_jsx(GestureDetector,{gesture:Me,children:_jsx(ScrollView,{ref:c,style:Le.scrollContent,onScroll:d,onContentSizeChange:ee,onLayout:m,scrollEventThrottle:f,keyboardShouldPersistTaps:"always",keyboardDismissMode:"none",children:k})}):_jsx(View,{style:Le.content,children:J?_jsx(View,{onLayout:K,children:k}):k}),null!=w&&_jsx(View,{style:[Le.footer,C],onLayout:J?U:void 0,children:w})]})})]}),Ye=_jsx(BottomSheetContext.Provider,{value:Fe,children:ze});return"modal"===S?_jsx(Modal,{transparent:!0,visible:ce,onRequestClose:_e,onDismiss:"ios"===Platform.OS?we:void 0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",supportedOrientations:["portrait","landscape"],children:_jsxs(SafeAreaProvider,{style:Le.modalRoot,children:[_jsx(InsetsProbe,{onChange:G}),"android"===Platform.OS?_jsx(GestureHandlerRootView,{style:Le.modalRoot,children:Ye}):Ye,_jsx(ToastHost,{})]})}):Ye}),InsetsProbe=({onChange:e})=>{const{top:t,bottom:o}=useSafeAreaInsets();return useEffect(()=>{e(e=>e.top===t&&e.bottom===o?e:{top:t,bottom:o})},[t,o,e]),null},SheetBody=({style:e,keyboardOffset:t,children:o})=>{const s=useSafeAreaInsets().bottom,n=useAnimatedStyle(()=>{const e=s+t.value;return{paddingBottom:e>0?e:0}});return _jsx(Animated.View,{style:[e,n],children:o})};BottomSheet.displayName="BottomSheet";const useMeasuredHeight=()=>{const[e,t]=useState(0),o=useCallback(e=>{t(t=>t===e?t:e)},[]);return[e,useCallback(e=>o(e.nativeEvent.layout.height),[o]),o]},resolveSnapPoints=(e,t,o)=>[...e.map(e=>{if("number"==typeof e)return e;if("content"===e)return o;const s=parseFloat(e);return Number.isNaN(s)?0:s/100*t})].sort((e,t)=>e-t),clamp=(e,t,o)=>Math.min(Math.max(e,t),o),buildStyles=e=>StyleSheet.create({backdropModal:{flex:1},backdropInline:{...StyleSheet.absoluteFill},sheet:{position:"absolute",left:0,right:0,overflow:"hidden"},body:{overflow:"hidden"},handleRow:{alignItems:"center",justifyContent:"center",alignSelf:"stretch",paddingTop:12,paddingBottom:24},header:{},footer:{},handle:{width:36,height:4,borderRadius:2,...smoothCorners},content:{flex:1,overflow:"hidden"},scrollContent:{flex:1},modalRoot:{flex:1}});export{BottomSheet};export default BottomSheet;
@@ -1 +1 @@
1
- "use strict";import React,{forwardRef}from"react";import{View}from"react-native";import{useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{SquircleFill,useSquircle}from"../SquircleFill/SquircleFill.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const space=(r,e)=>null==e?void 0:r.spacing[e];export const resolveBoxStyle=(r,e)=>{const l={};if(null!=e.p&&(l.padding=space(r,e.p)),null!=e.px&&(l.paddingHorizontal=space(r,e.px)),null!=e.py&&(l.paddingVertical=space(r,e.py)),null!=e.pt&&(l.paddingTop=space(r,e.pt)),null!=e.pr&&(l.paddingRight=space(r,e.pr)),null!=e.pb&&(l.paddingBottom=space(r,e.pb)),null!=e.pl&&(l.paddingLeft=space(r,e.pl)),null!=e.m&&(l.margin=space(r,e.m)),null!=e.mx&&(l.marginHorizontal=space(r,e.mx)),null!=e.my&&(l.marginVertical=space(r,e.my)),null!=e.mt&&(l.marginTop=space(r,e.mt)),null!=e.mr&&(l.marginRight=space(r,e.mr)),null!=e.mb&&(l.marginBottom=space(r,e.mb)),null!=e.ml&&(l.marginLeft=space(r,e.ml)),null!=e.gap&&(l.gap=space(r,e.gap)),null!=e.bg){const o=r.colors.background;l.backgroundColor=o[e.bg]??e.bg}return null!=e.radius&&(l.borderRadius=r.radius[e.radius],l.borderCurve=smoothCorners.borderCurve),e.border&&(l.borderWidth=r.colors.border.width,l.borderColor=r.colors.border.primary),null!=e.flex&&(l.flex=e.flex),null!=e.align&&(l.alignItems=e.align),null!=e.justify&&(l.justifyContent=e.justify),null!=e.direction&&(l.flexDirection=e.direction),e.wrap&&(l.flexWrap="wrap"),l};const Box=forwardRef((r,e)=>{const l=useTheme(),{p:o,px:t,py:a,pt:i,pr:s,pb:n,pl:p,m:c,mx:d,my:u,mt:m,mr:g,mb:x,ml:f,gap:b,bg:y,radius:h,border:w,flex:j,align:S,justify:R,direction:B,wrap:C,style:k,children:v,..._}=r,q=resolveBoxStyle(l,{p:o,px:t,py:a,pt:i,pr:s,pb:n,pl:p,m:c,mx:d,my:u,mt:m,mr:g,mb:x,ml:f,gap:b,bg:y,radius:h,border:w,flex:j,align:S,justify:R,direction:B,wrap:C}),z=useSquircle(null!=h&&(null!=y||Boolean(w)),q.borderRadius,_.onLayout),V=z.active?{...q,backgroundColor:"transparent",borderColor:"transparent"}:q;return _jsxs(View,{ref:e,..._,onLayout:z.onLayout,style:[V,k],children:[z.active&&z.size?_jsx(SquircleFill,{width:z.size.width,height:z.size.height,radius:q.borderRadius,fill:q.backgroundColor??"transparent",stroke:q.borderColor,strokeWidth:q.borderWidth??0,outset:q.borderWidth??0}):null,v]})});Box.displayName="Box";const Stack=forwardRef(({gap:r="md",...e},l)=>_jsx(Box,{ref:l,direction:"column",gap:r,...e}));Stack.displayName="Stack";const Row=forwardRef(({gap:r="sm",align:e="center",...l},o)=>_jsx(Box,{ref:o,direction:"row",gap:r,align:e,...l}));Row.displayName="Row";const Spacer=({size:r,style:e,testID:l})=>{const o=useTheme();if(null!=r){const t=o.spacing[r];return _jsx(View,{testID:l,style:[{width:t,height:t},e]})}return _jsx(View,{testID:l,style:[{flex:1},e]})};Spacer.displayName="Spacer";export{Box,Row,Spacer,Stack};export default Box;
1
+ "use strict";import{forwardRef}from"react";import{View}from"react-native";import{useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{SquircleFill,useSquircle}from"../SquircleFill/SquircleFill.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const space=(r,e)=>null==e?void 0:r.spacing[e];export const resolveBoxStyle=(r,e)=>{const l={};if(null!=e.p&&(l.padding=space(r,e.p)),null!=e.px&&(l.paddingHorizontal=space(r,e.px)),null!=e.py&&(l.paddingVertical=space(r,e.py)),null!=e.pt&&(l.paddingTop=space(r,e.pt)),null!=e.pr&&(l.paddingRight=space(r,e.pr)),null!=e.pb&&(l.paddingBottom=space(r,e.pb)),null!=e.pl&&(l.paddingLeft=space(r,e.pl)),null!=e.m&&(l.margin=space(r,e.m)),null!=e.mx&&(l.marginHorizontal=space(r,e.mx)),null!=e.my&&(l.marginVertical=space(r,e.my)),null!=e.mt&&(l.marginTop=space(r,e.mt)),null!=e.mr&&(l.marginRight=space(r,e.mr)),null!=e.mb&&(l.marginBottom=space(r,e.mb)),null!=e.ml&&(l.marginLeft=space(r,e.ml)),null!=e.gap&&(l.gap=space(r,e.gap)),null!=e.bg){const o=r.colors.background;l.backgroundColor=o[e.bg]??e.bg}return null!=e.radius&&(l.borderRadius=r.radius[e.radius],l.borderCurve=smoothCorners.borderCurve),e.border&&(l.borderWidth=r.colors.border.width,l.borderColor=r.colors.border.primary),null!=e.flex&&(l.flex=e.flex),null!=e.align&&(l.alignItems=e.align),null!=e.justify&&(l.justifyContent=e.justify),null!=e.direction&&(l.flexDirection=e.direction),e.wrap&&(l.flexWrap="wrap"),l};const Box=forwardRef((r,e)=>{const l=useTheme(),{p:o,px:t,py:a,pt:i,pr:s,pb:n,pl:p,m:d,mx:c,my:u,mt:m,mr:g,mb:x,ml:f,gap:b,bg:y,radius:h,border:w,flex:j,align:S,justify:R,direction:B,wrap:C,style:k,children:v,..._}=r,q=resolveBoxStyle(l,{p:o,px:t,py:a,pt:i,pr:s,pb:n,pl:p,m:d,mx:c,my:u,mt:m,mr:g,mb:x,ml:f,gap:b,bg:y,radius:h,border:w,flex:j,align:S,justify:R,direction:B,wrap:C}),z=useSquircle(null!=h&&(null!=y||Boolean(w)),q.borderRadius,_.onLayout),V=z.active?{...q,backgroundColor:"transparent",borderColor:"transparent"}:q;return _jsxs(View,{ref:e,..._,onLayout:z.onLayout,style:[V,k],children:[z.active&&z.size?_jsx(SquircleFill,{width:z.size.width,height:z.size.height,radius:q.borderRadius,fill:q.backgroundColor??"transparent",stroke:q.borderColor,strokeWidth:q.borderWidth??0,outset:q.borderWidth??0}):null,v]})});Box.displayName="Box";const Stack=forwardRef(({gap:r="md",...e},l)=>_jsx(Box,{ref:l,direction:"column",gap:r,...e}));Stack.displayName="Stack";const Row=forwardRef(({gap:r="sm",align:e="center",...l},o)=>_jsx(Box,{ref:o,direction:"row",gap:r,align:e,...l}));Row.displayName="Row";const Spacer=({size:r,style:e,testID:l})=>{const o=useTheme();if(null!=r){const t=o.spacing[r];return _jsx(View,{testID:l,style:[{width:t,height:t},e]})}return _jsx(View,{testID:l,style:[{flex:1},e]})};Spacer.displayName="Spacer";export{Box,Row,Spacer,Stack};export default Box;
@@ -1 +1 @@
1
- "use strict";import React,{forwardRef,useMemo,useRef,useState}from"react";import{Animated,Easing,Pressable,StyleSheet,Text,View}from"react-native";import{useFlickGuard}from"../../hooks/useFlickGuard.js";import{usePressAnimation}from"../../hooks/usePressAnimation.js";import{fontFor,Gradient,useTheme}from"../../theme/index.js";import{createAnimatedValue}from"../../theme/animatedValue.js";import{ACCENT_PRESSED_TINT,tintOf}from"../../utils/color.js";import{smoothCorners}from"../../utils/corners.js";import{triggerHaptic}from"../../utils/hapticUtils.js";import{renderSlotIcon}from"../AppIcon/slotIcon.js";import{Spinner}from"../Spinner/index.js";import{SquircleFill,useSquircle}from"../SquircleFill/SquircleFill.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const Button=forwardRef((e,r)=>{const{title:o,children:t,variant:s="solid",tone:i="primary",size:n="md",loading:l=!1,disabled:a=!1,fullWidth:d=!1,leftIcon:c,rightIcon:u,iconVariant:b,leftIconBadge:g=!1,haptic:p="selection",rounded:m=!1,gradient:f,style:h,textStyle:y,pressAnimation:S,onPress:x,accessibilityLabel:C,accessibilityHint:I,testID:_,onLayout:k,...w}=e;if(__DEV__&&hasTextChild(t))throw new Error('[@webority/mobile-ui] Button was given its label as text children. Pass it as `title` (<Button title="Save" />): text children draw a blank button with no accessible name.');const z=useTheme(),j=!a&&!l,T="link"===s,R=S??(!T&&"scale"),v=usePressAnimation({preset:R||"scale",enabled:!1!==R&&j}),F=useFlickGuard(),V=useMemo(()=>buildStyles(z),[z]),E={...sizeMap[n],...z.components.button?.[n]??{}},A=useMemo(()=>toneFor(z,i),[z,i]),H=useMemo(()=>variantFor(z,s,A,a),[z,s,A,a]),L=useMemo(()=>!f||a||"solid"!==s?null:"string"==typeof f?z.gradients[f]??null:f,[f,a,s,z.gradients]),W=StyleSheet.flatten(h)?.borderRadius,D=T?0:"number"==typeof W?W:m?z.radius.full:E.borderRadius,P=useSquircle(!L&&"link"!==s,D,k),B=useRef(createAnimatedValue(0)).current,[O,N]=useState(0),G=T?e=>N(e.nativeEvent.layout.width):void 0,M=C??o,q="outline"===s||"ghost"===s,U=!q&&!T,K={color:H.textColor,size:E.iconSize,disabled:a},X=g&&!T&&Boolean(c),Y=E.minHeight-2*BADGE_INSET-2*H.borderWidth,J={color:H.badgeInk,size:E.badgeIconSize??E.iconSize,disabled:a},Q=_jsx(View,{style:V.contentRow,children:l?_jsx(Spinner,{variant:"circular",size:"sm",color:H.textColor,accessibilityLabel:"Loading"}):_jsxs(_Fragment,{children:[X?_jsx(View,{testID:"button-icon-badge",style:[V.iconLeft,V.iconBadge,{width:Y,height:Y,borderRadius:Y/2,backgroundColor:H.badgeFill}],children:renderSlotIcon(c,J,b)}):c?_jsx(View,{style:V.iconLeft,children:renderSlotIcon(c,K,b)}):null,o?_jsxs(View,{onLayout:G,children:[_jsx(Text,{style:[V.label,{color:H.textColor,fontSize:E.fontSize,...fontFor(z,"semibold")},y],numberOfLines:1,children:o}),T?_jsx(Animated.View,{pointerEvents:"none",testID:"button-link-underline",style:[V.linkUnderline,{backgroundColor:H.textColor,transform:[{translateX:B.interpolate({inputRange:[0,1],outputRange:[-O/2,0]})},{scaleX:B.interpolate({inputRange:[0,1],outputRange:[0,1]})}]}]}):null]}):t,u?_jsx(View,{style:V.iconRight,children:renderSlotIcon(u,K,b)}):null]})});return _jsx(Animated.View,{style:[v.style,d?V.fullWidth:null],children:_jsx(Pressable,{ref:r,onPress:e=>{j&&!F.isFlick(e)&&(v.press(),!1!==p&&triggerHaptic(p),x?.(e))},onPressIn:e=>{F.onPressIn(e),v.pressIn(),T&&j&&(B.stopAnimation(),B.setValue(0),Animated.timing(B,{toValue:1,duration:z.motion.duration.slower,easing:Easing.bezier(...z.motion.easing.decelerate),useNativeDriver:!0}).start())},onPressOut:()=>{v.pressOut()},disabled:!j,hitSlop:T?LINK_HIT_SLOP:void 0,accessibilityRole:"button",accessibilityLabel:M,accessibilityHint:I,accessibilityState:{disabled:!j,busy:l},testID:_,onLayout:P.onLayout,style:({pressed:e})=>[V.base,{paddingHorizontal:T?0:E.paddingHorizontal,paddingVertical:T?0:X?BADGE_INSET:E.paddingVertical,paddingLeft:X?BADGE_INSET:void 0,minHeight:T?void 0:E.minHeight,borderRadius:D,...smoothCorners,backgroundColor:L||P.active?"transparent":H.backgroundColor,borderWidth:H.borderWidth,borderColor:P.active?"transparent":H.borderColor,opacity:l?.55:1,overflow:P.active||T?"visible":"hidden"},e&&q&&!P.active?{backgroundColor:z.colors.surface.pressed}:null,d?V.fullWidth:null,h],...w,children:({pressed:e})=>_jsxs(_Fragment,{children:[P.active&&P.size?_jsx(SquircleFill,{width:P.size.width,height:P.size.height,radius:D,fill:e&&q?z.colors.surface.pressed:H.backgroundColor,stroke:H.borderColor,strokeWidth:H.borderWidth,outset:H.borderWidth}):null,L?_jsx(Gradient,{gradient:L,style:[StyleSheet.absoluteFill,{borderRadius:D,...smoothCorners}]}):null,e&&U?P.active&&P.size?_jsx(SquircleFill,{width:P.size.width,height:P.size.height,radius:D,fill:H.pressedTint,outset:H.borderWidth,testID:"button-pressed"}):_jsx(View,{pointerEvents:"none",style:[V.pressedOverlay,{borderRadius:D,backgroundColor:H.pressedTint,...smoothCorners}],testID:"button-pressed"}):null,Q]})})})});Button.displayName="Button";const hasTextChild=e=>React.Children.toArray(e).some(e=>"string"==typeof e||"number"==typeof e),sizeMap={xs:{paddingHorizontal:10,paddingVertical:4,minHeight:28,fontSize:12,borderRadius:8,iconSize:14,badgeIconSize:11},sm:{paddingHorizontal:12,paddingVertical:6,minHeight:34,fontSize:14,borderRadius:10,iconSize:16},md:{paddingHorizontal:16,paddingVertical:9,minHeight:42,fontSize:16,borderRadius:12,iconSize:18},lg:{paddingHorizontal:20,paddingVertical:12,minHeight:50,fontSize:18,borderRadius:14,iconSize:20},xl:{paddingHorizontal:24,paddingVertical:14,minHeight:58,fontSize:20,borderRadius:16,iconSize:22}},SOFT_FILL_OPACITY=.14,toneFor=(e,r)=>{switch(r){case"primary":return{base:e.colors.primary,on:e.colors.onPrimary,fg:e.colors.primary,soft:tintOf(e.colors.primary,.14,e.colors.primaryMuted)};case"secondary":return{base:e.colors.secondary,on:e.colors.onSecondary,fg:e.colors.onSecondary,soft:e.colors.secondary};case"success":return{base:e.colors.success,on:e.colors.onSuccess,fg:e.colors.success,soft:tintOf(e.colors.success,.14,e.colors.background.secondary)};case"warning":return{base:e.colors.warning,on:e.colors.onWarning,fg:e.colors.warning,soft:tintOf(e.colors.warning,.14,e.colors.background.secondary)};case"error":return{base:e.colors.error,on:e.colors.onError,fg:e.colors.error,soft:tintOf(e.colors.error,.14,e.colors.background.secondary)};default:return{base:e.colors.background.tertiary,on:e.colors.text.primary,fg:e.colors.text.primary,soft:e.colors.background.secondary}}},BADGE_INSET=4,BUTTON_BORDER_WIDTH=1,LINK_HIT_SLOP={top:8,bottom:8,left:8,right:8},variantFor=(e,r,o,t)=>{const s=t?e.colors.text.disabled:o.fg,i={badgeFill:e.colors.surface.disabled,badgeInk:e.colors.text.disabled},n=t?i:{badgeFill:o.on,badgeInk:o.base},l=t?i:{badgeFill:o.base,badgeInk:o.on};switch(r){case"solid":return{backgroundColor:t?e.colors.surface.disabled:o.base,borderColor:"transparent",borderWidth:1,textColor:t?e.colors.text.disabled:o.on,pressedTint:e.colors.surface.pressed,...n};case"soft":return{backgroundColor:t?e.colors.surface.disabled:o.soft,borderColor:"transparent",borderWidth:1,textColor:s,pressedTint:e.colors.surface.pressed,...l};case"outline":return{backgroundColor:"transparent",borderColor:t?e.colors.border.primary:o.base,borderWidth:1,textColor:s,pressedTint:e.colors.surface.pressed,...l};case"ghost":return{backgroundColor:"transparent",borderColor:"transparent",borderWidth:1,textColor:s,pressedTint:e.colors.surface.pressed,...l};case"link":return{backgroundColor:"transparent",borderColor:"transparent",borderWidth:0,textColor:t?e.colors.text.disabled:e.colors.text.link,pressedTint:e.colors.surface.pressed,...l};case"glass":return{backgroundColor:e.colors.glass.fill,borderColor:e.colors.glass.border,borderWidth:1,textColor:t?e.colors.text.disabled:e.colors.glass.on,pressedTint:ACCENT_PRESSED_TINT,badgeFill:e.colors.glass.badge,badgeInk:t?e.colors.text.disabled:o.base};default:return{backgroundColor:o.base,borderColor:"transparent",borderWidth:1,textColor:o.on,pressedTint:e.colors.surface.pressed,...n}}},buildStyles=e=>StyleSheet.create({pressedOverlay:{position:"absolute",top:0,right:0,bottom:0,left:0},base:{alignItems:"center",justifyContent:"center",flexDirection:"row",overflow:"hidden"},contentRow:{flexDirection:"row",alignItems:"center",justifyContent:"center"},label:{textAlign:"center",includeFontPadding:!1,textAlignVertical:"center"},linkUnderline:{height:1.5,marginTop:1},iconLeft:{marginRight:8},iconBadge:{alignItems:"center",justifyContent:"center"},iconRight:{marginLeft:8},fullWidth:{alignSelf:"stretch"}});export{Button};export default Button;
1
+ "use strict";import React,{forwardRef,useMemo,useRef,useState}from"react";import{Animated,Easing,Pressable,StyleSheet,Text,View}from"react-native";import{useFlickGuard}from"../../hooks/useFlickGuard.js";import{usePressAnimation}from"../../hooks/usePressAnimation.js";import{fontFor,Gradient,useTheme}from"../../theme/index.js";import{createAnimatedValue}from"../../theme/animatedValue.js";import{ariaFromState}from"../../utils/ariaState.js";import{ACCENT_PRESSED_TINT,tintOf}from"../../utils/color.js";import{smoothCorners}from"../../utils/corners.js";import{triggerHaptic}from"../../utils/hapticUtils.js";import{renderSlotIcon}from"../AppIcon/slotIcon.js";import{Spinner}from"../Spinner/index.js";import{SquircleFill,useSquircle}from"../SquircleFill/SquircleFill.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const Button=forwardRef((e,r)=>{const{title:o,children:t,variant:s="solid",tone:i="primary",size:n="md",loading:a=!1,disabled:l=!1,fullWidth:d=!1,leftIcon:c,rightIcon:u,iconVariant:b,leftIconBadge:g=!1,haptic:p="selection",rounded:m=!1,gradient:f,style:h,textStyle:y,pressAnimation:S,onPress:x,accessibilityLabel:C,accessibilityHint:I,accessibilityState:_,testID:k,onLayout:T,...w}=e;if(__DEV__&&hasTextChild(t))throw new Error('[@webority/mobile-ui] Button was given its label as text children. Pass it as `title` (<Button title="Save" />): text children draw a blank button with no accessible name.');const z=useTheme(),j=!l&&!a,R={..._,disabled:!j,busy:a},F="link"===s,v=S??(!F&&"scale"),V=usePressAnimation({preset:v||"scale",enabled:!1!==v&&j}),E=useFlickGuard(),A=useMemo(()=>buildStyles(z),[z]),H={...sizeMap[n],...z.components.button?.[n]??{}},L=useMemo(()=>toneFor(z,i),[z,i]),W=useMemo(()=>variantFor(z,s,L,l),[z,s,L,l]),D=useMemo(()=>!f||l||"solid"!==s?null:"string"==typeof f?z.gradients[f]??null:f,[f,l,s,z.gradients]),P=StyleSheet.flatten(h)?.borderRadius,B=F?0:"number"==typeof P?P:m?z.radius.full:H.borderRadius,O=useSquircle(!D&&"link"!==s,B,T),N=useRef(createAnimatedValue(0)).current,[G,M]=useState(0),q=F?e=>M(e.nativeEvent.layout.width):void 0,U=C??o,K="outline"===s||"ghost"===s,X=!K&&!F,Y={color:W.textColor,size:H.iconSize,disabled:l},J=g&&!F&&Boolean(c),Q=H.minHeight-2*BADGE_INSET-2*W.borderWidth,Z={color:W.badgeInk,size:H.badgeIconSize??H.iconSize,disabled:l},$=_jsx(View,{style:A.contentRow,children:a?_jsx(Spinner,{variant:"circular",size:"sm",color:W.textColor,accessibilityLabel:"Loading"}):_jsxs(_Fragment,{children:[J?_jsx(View,{testID:"button-icon-badge",style:[A.iconLeft,A.iconBadge,{width:Q,height:Q,borderRadius:Q/2,backgroundColor:W.badgeFill}],children:renderSlotIcon(c,Z,b)}):c?_jsx(View,{style:A.iconLeft,children:renderSlotIcon(c,Y,b)}):null,o?_jsxs(View,{onLayout:q,children:[_jsx(Text,{style:[A.label,{color:W.textColor,fontSize:H.fontSize,...fontFor(z,"semibold")},y],numberOfLines:1,children:o}),F?_jsx(Animated.View,{pointerEvents:"none",testID:"button-link-underline",style:[A.linkUnderline,{backgroundColor:W.textColor,transform:[{translateX:N.interpolate({inputRange:[0,1],outputRange:[-G/2,0]})},{scaleX:N.interpolate({inputRange:[0,1],outputRange:[0,1]})}]}]}):null]}):t,u?_jsx(View,{style:A.iconRight,children:renderSlotIcon(u,Y,b)}):null]})});return _jsx(Animated.View,{style:[V.style,d?A.fullWidth:null],children:_jsx(Pressable,{ref:r,onPress:e=>{j&&!E.isFlick(e)&&(V.press(),!1!==p&&triggerHaptic(p),x?.(e))},onPressIn:e=>{E.onPressIn(e),V.pressIn(),F&&j&&(N.stopAnimation(),N.setValue(0),Animated.timing(N,{toValue:1,duration:z.motion.duration.slower,easing:Easing.bezier(...z.motion.easing.decelerate),useNativeDriver:!0}).start())},onPressOut:()=>{V.pressOut()},disabled:!j,hitSlop:F?LINK_HIT_SLOP:void 0,accessibilityRole:"button",accessibilityLabel:U,accessibilityHint:I,accessibilityState:R,...ariaFromState(R),testID:k,onLayout:O.onLayout,style:({pressed:e})=>[A.base,{paddingHorizontal:F?0:H.paddingHorizontal,paddingVertical:F?0:J?BADGE_INSET:H.paddingVertical,paddingLeft:J?BADGE_INSET:void 0,minHeight:F?void 0:H.minHeight,borderRadius:B,...smoothCorners,backgroundColor:D||O.active?"transparent":W.backgroundColor,borderWidth:W.borderWidth,borderColor:O.active?"transparent":W.borderColor,opacity:a?.55:1,overflow:O.active||F?"visible":"hidden"},e&&K&&!O.active?{backgroundColor:z.colors.surface.pressed}:null,d?A.fullWidth:null,h],...w,"aria-disabled":!j,"aria-busy":a,children:({pressed:e})=>_jsxs(_Fragment,{children:[O.active&&O.size?_jsx(SquircleFill,{width:O.size.width,height:O.size.height,radius:B,fill:e&&K?z.colors.surface.pressed:W.backgroundColor,stroke:W.borderColor,strokeWidth:W.borderWidth,outset:W.borderWidth}):null,D?_jsx(Gradient,{gradient:D,style:[StyleSheet.absoluteFill,{borderRadius:B,...smoothCorners}]}):null,e&&X?O.active&&O.size?_jsx(SquircleFill,{width:O.size.width,height:O.size.height,radius:B,fill:W.pressedTint,outset:W.borderWidth,testID:"button-pressed"}):_jsx(View,{pointerEvents:"none",style:[A.pressedOverlay,{borderRadius:B,backgroundColor:W.pressedTint,...smoothCorners}],testID:"button-pressed"}):null,$]})})})});Button.displayName="Button";const hasTextChild=e=>React.Children.toArray(e).some(e=>"string"==typeof e||"number"==typeof e),sizeMap={xs:{paddingHorizontal:10,paddingVertical:4,minHeight:28,fontSize:12,borderRadius:8,iconSize:14,badgeIconSize:11},sm:{paddingHorizontal:12,paddingVertical:6,minHeight:34,fontSize:14,borderRadius:10,iconSize:16},md:{paddingHorizontal:16,paddingVertical:9,minHeight:42,fontSize:16,borderRadius:12,iconSize:18},lg:{paddingHorizontal:20,paddingVertical:12,minHeight:50,fontSize:18,borderRadius:14,iconSize:20},xl:{paddingHorizontal:24,paddingVertical:14,minHeight:58,fontSize:20,borderRadius:16,iconSize:22}},SOFT_FILL_OPACITY=.14,toneFor=(e,r)=>{switch(r){case"primary":return{base:e.colors.primary,on:e.colors.onPrimary,fg:e.colors.toneText.primary,soft:tintOf(e.colors.primary,.14,e.colors.primaryMuted)};case"secondary":return{base:e.colors.secondary,on:e.colors.onSecondary,fg:e.colors.onSecondary,soft:e.colors.secondary};case"success":return{base:e.colors.success,on:e.colors.onSuccess,fg:e.colors.toneText.success,soft:tintOf(e.colors.success,.14,e.colors.background.secondary)};case"warning":return{base:e.colors.warning,on:e.colors.onWarning,fg:e.colors.toneText.warning,soft:tintOf(e.colors.warning,.14,e.colors.background.secondary)};case"error":return{base:e.colors.error,on:e.colors.onError,fg:e.colors.toneText.error,soft:tintOf(e.colors.error,.14,e.colors.background.secondary)};default:return{base:e.colors.background.tertiary,on:e.colors.text.primary,fg:e.colors.text.primary,soft:e.colors.background.secondary}}},BADGE_INSET=4,BUTTON_BORDER_WIDTH=1,LINK_HIT_SLOP={top:8,bottom:8,left:8,right:8},variantFor=(e,r,o,t)=>{const s=t?e.colors.text.disabled:o.fg,i={badgeFill:e.colors.surface.disabled,badgeInk:e.colors.text.disabled},n=t?i:{badgeFill:o.on,badgeInk:o.base},a=t?i:{badgeFill:o.base,badgeInk:o.on};switch(r){case"solid":return{backgroundColor:t?e.colors.surface.disabled:o.base,borderColor:"transparent",borderWidth:1,textColor:t?e.colors.text.disabled:o.on,pressedTint:e.colors.surface.pressed,...n};case"soft":return{backgroundColor:t?e.colors.surface.disabled:o.soft,borderColor:"transparent",borderWidth:1,textColor:s,pressedTint:e.colors.surface.pressed,...a};case"outline":return{backgroundColor:"transparent",borderColor:t?e.colors.border.primary:o.base,borderWidth:1,textColor:s,pressedTint:e.colors.surface.pressed,...a};case"ghost":return{backgroundColor:"transparent",borderColor:"transparent",borderWidth:1,textColor:s,pressedTint:e.colors.surface.pressed,...a};case"link":return{backgroundColor:"transparent",borderColor:"transparent",borderWidth:0,textColor:t?e.colors.text.disabled:e.colors.text.link,pressedTint:e.colors.surface.pressed,...a};case"glass":return{backgroundColor:e.colors.glass.fill,borderColor:e.colors.glass.border,borderWidth:1,textColor:t?e.colors.text.disabled:e.colors.glass.on,pressedTint:ACCENT_PRESSED_TINT,badgeFill:e.colors.glass.badge,badgeInk:t?e.colors.text.disabled:o.base};default:return{backgroundColor:o.base,borderColor:"transparent",borderWidth:1,textColor:o.on,pressedTint:e.colors.surface.pressed,...n}}},buildStyles=e=>StyleSheet.create({pressedOverlay:{position:"absolute",top:0,right:0,bottom:0,left:0},base:{alignItems:"center",justifyContent:"center",flexDirection:"row",overflow:"hidden"},contentRow:{flexDirection:"row",alignItems:"center",justifyContent:"center"},label:{textAlign:"center",includeFontPadding:!1,textAlignVertical:"center"},linkUnderline:{height:1.5,marginTop:1},iconLeft:{marginRight:8},iconBadge:{alignItems:"center",justifyContent:"center"},iconRight:{marginLeft:8},fullWidth:{alignSelf:"stretch"}});export{Button};export default Button;
@@ -0,0 +1 @@
1
+ "use strict";import{forwardRef,useCallback,useEffect,useLayoutEffect,useMemo,useRef}from"react";import{AccessibilityInfo,Animated,Easing,Pressable,Text,View}from"react-native";import{useControllableState}from"../../hooks/index.js";import{createAnimatedValue,useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/index.js";import{CalendarDay}from"./CalendarDay.js";import{addMonths,buildMonthMatrix,GRID_CELLS,startOfDay,startOfMonth,toIso,weekdayLabels}from"./calendarDates.js";import{buildCalendarStyles,MIN_CELL_SIZE,NAV_BUTTON_SIZE}from"./calendarStyles.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const DEFAULT_TONE={holiday:"error",event:"primary",pending:"warning"},MAX_DOTS=3,DAY_TEXT_MAX_SCALE=1.5,toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;case"info":return e.colors.info;case"primary":return e.colors.primary;default:return e.colors.text.secondary}},toneInk=(e,t)=>"neutral"===t?e.colors.text.secondary:e.colors.toneText[t],Calendar=forwardRef((e,t)=>{const{mode:a="single",value:s,onChange:n,month:i,onMonthChange:r,minDate:o,maxDate:l,disabledDates:d,weekStartsOn:u=0,locale:c="en-IN",markedDates:m,strikeMarkedInRange:h=!1,cellSize:y,haptic:p,accessibilityLabel:g,style:f,headerLabelStyle:b,navButtonStyle:x,testID:M}=e,D=useTheme(),T=useMemo(()=>buildCalendarStyles(D),[D]),[w,S]=useControllableState({value:i?startOfMonth(i):void 0,defaultValue:startOfMonth(s?.start??new Date),onChange:r}),_=12*w.getFullYear()+w.getMonth(),k=s?.start?startOfDay(s.start):null,v="range"===a&&s?.end?startOfDay(s.end):null,C=k?.getTime()??null,I=v?.getTime()??null,L=toIso(new Date),E=o?startOfDay(o).getTime():null,j=l?startOfDay(l).getTime():null,A=useMemo(()=>new Set((d??[]).map(e=>toIso(e))),[d]),R=useCallback(e=>null!==E&&e.getTime()<E||null!==j&&e.getTime()>j||A.has(toIso(e)),[E,j,A]),V=useMemo(()=>{const e=new Map;for(const t of m??[]){const a=toIso(t.date);let s=e.get(a);s||(s={dots:[],holiday:!1,spoken:[]},e.set(a,s));const n=t.tone??DEFAULT_TONE[t.kind],i=toneColor(D,n);s.dots.length<3&&s.dots.push({key:`${t.kind}-${s.dots.length}`,color:i}),"holiday"===t.kind&&(s.holiday=!0,s.holidayInk??=toneInk(D,n)),t.label&&s.spoken.push(t.label),s.spoken.push(t.kind)}return e},[m,D]),N=useMemo(()=>buildMonthMatrix(new Date(Math.floor(_/12),_%12,1),u),[_,u]),O=useMemo(()=>weekdayLabels(c,u),[c,u]),F=useMemo(()=>new Intl.DateTimeFormat(c,{month:"long",year:"numeric"}),[c]),P=useMemo(()=>new Intl.DateTimeFormat(c,{weekday:"short",day:"numeric",month:"long"}),[c]),B=F.format(w),z=null===E||startOfMonth(new Date(E)).getTime()<w.getTime(),H=null===j||startOfMonth(new Date(j)).getTime()>w.getTime(),Z=useRef(createAnimatedValue(0)).current,X=useRef(createAnimatedValue(1)).current,U=useRef(null);useEffect(()=>()=>U.current?.stop(),[]);const $=useCallback(e=>{!1!==p&&triggerHaptic("impactLight");const t=D.components.dateRangePicker,a=t?.monthSlideDistance??32,s=t?.monthSlideOutDuration??D.motion.duration.fast,n=t?.monthSlideInDuration??D.motion.duration.fast;U.current?.stop(),U.current=Animated.sequence([Animated.parallel([Animated.timing(Z,{toValue:-e*a,duration:s,easing:Easing.out(Easing.quad),useNativeDriver:!0}),Animated.timing(X,{toValue:0,duration:s,useNativeDriver:!0})]),Animated.timing(Z,{toValue:e*a,duration:0,useNativeDriver:!0}),Animated.parallel([Animated.timing(Z,{toValue:0,duration:n,easing:Easing.out(Easing.cubic),useNativeDriver:!0}),Animated.timing(X,{toValue:1,duration:n,useNativeDriver:!0})])]),U.current.start();const i=addMonths(w,e);S(i),AccessibilityInfo.announceForAccessibility(F.format(i))},[p,w,X,F,Z,S,D]),q=useCallback(()=>$(-1),[$]),G=useCallback(()=>$(1),[$]),pressDay=e=>{if(R(e.date))return;const t=resolveHaptic(p,"selection");t&&triggerHaptic(t);const s=e.date;"single"===a||!k||v||s.getTime()<k.getTime()?n({start:s}):n({start:k,end:s}),e.inMonth||S(startOfMonth(s))},Y=useRef(pressDay);useLayoutEffect(()=>{Y.current=pressDay});const W=useCallback(e=>Y.current(e),[]),J=void 0===y?void 0:Math.max(y,MIN_CELL_SIZE),K=useMemo(()=>void 0===J?{flex:1}:{width:J},[J]),Q=useMemo(()=>void 0===J?{flex:1,aspectRatio:1,minHeight:MIN_CELL_SIZE}:{width:J,height:J},[J]),ee=D.components.dateRangePicker?.navButtonSize??NAV_BUTTON_SIZE,te=Math.max(D.spacing.sm,(MIN_CELL_SIZE-ee)/2),ae=Math.min(D.maxFontSizeMultiplier??1.5,1.5),se=[];for(let e=0;e<GRID_CELLS;e+=7)se.push(N.slice(e,e+7));return _jsxs(View,{ref:t,style:[T.root,f],testID:M,children:[_jsxs(View,{style:T.headerRow,children:[_jsx(Pressable,{onPress:q,disabled:!z,style:({pressed:e})=>[T.navBtn,e&&T.navBtnPressed,!z&&T.navBtnDisabled,x],accessibilityRole:"button",accessibilityLabel:"Previous month",accessibilityState:{disabled:!z},"aria-disabled":!z,hitSlop:te,children:_jsx(Text,{style:T.navText,maxFontSizeMultiplier:ae,children:"‹"})}),_jsx(Animated.View,{style:[T.headerLabelWrap,{opacity:X,transform:[{translateX:Z}]},b],children:_jsx(Text,{style:T.headerLabel,accessibilityRole:"header",accessibilityLabel:g?`${g}, ${B}`:void 0,maxFontSizeMultiplier:D.maxFontSizeMultiplier,children:B})}),_jsx(Pressable,{onPress:G,disabled:!H,style:({pressed:e})=>[T.navBtn,e&&T.navBtnPressed,!H&&T.navBtnDisabled,x],accessibilityRole:"button",accessibilityLabel:"Next month",accessibilityState:{disabled:!H},"aria-disabled":!H,hitSlop:te,children:_jsx(Text,{style:T.navText,maxFontSizeMultiplier:ae,children:"›"})})]}),_jsx(View,{style:T.weekdayRow,accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",children:O.map(({weekday:e,label:t})=>_jsx(View,{style:[T.weekdayCell,K],children:_jsx(Text,{style:T.weekdayText,maxFontSizeMultiplier:ae,children:t})},e))}),_jsx(Animated.View,{style:{opacity:X,transform:[{translateX:Z}]},children:se.map(e=>_jsx(View,{style:T.gridRow,children:e.map(e=>{const t=e.date.getTime(),s=null!==C&&t===C,n=null!==I&&t===I,i=null!==C&&null!==I&&t>=C&&t<=I,r=i&&!s&&!n,o=e.iso===L,l=V.get(e.iso),d=h&&i&&!0===l?.holiday,u=[P.format(e.date),...l?.spoken??[]];return o&&u.push("today"),"range"===a&&(s&&n?u.push("start and end of your range"):s?u.push("start of your range"):n?u.push("end of your range"):r&&u.push("in your range")),d&&u.push("not counted"),_jsx(CalendarDay,{cell:e,accessibilityLabel:u.join(", "),disabled:R(e.date),edge:s||n,mid:r,barLeft:i&&(n||r)&&!(s&&n),barRight:i&&(s||r)&&!(s&&n),today:o,struck:d,dots:l?.dots,inkColor:l?.holidayInk,cellStyle:Q,styles:T,maxFontSizeMultiplier:ae,onPressDay:W},e.iso)})},e[0].iso))})]})});Calendar.displayName="Calendar";export{Calendar};export default Calendar;
@@ -0,0 +1 @@
1
+ "use strict";import{memo}from"react";import{Pressable,Text,View}from"react-native";import{useTheme}from"../../theme/index.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const DISABLED_OPACITY=.3,OUTSIDE_MONTH_OPACITY=.4,TODAY_RING_WIDTH=1.5,CalendarDayBase=({cell:e,accessibilityLabel:t,disabled:l,edge:s,mid:r,barLeft:i,barRight:a,today:n,struck:o,dots:d,inkColor:y,cellStyle:c,styles:m,maxFontSizeMultiplier:x,onPressDay:b})=>{const u=useTheme(),{colors:p}=u,_=s?p.onPrimary:e.inMonth?l?p.text.disabled:y??p.text.primary:p.text.tertiary,h=n&&!s;return _jsxs(Pressable,{disabled:l,onPress:()=>b(e),accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{selected:s,disabled:l},"aria-selected":s,"aria-disabled":l,style:[m.dayCell,c],children:[i?_jsx(View,{pointerEvents:"none",style:[m.barLeft,m.rangeFill]}):null,a?_jsx(View,{pointerEvents:"none",style:[m.barRight,m.rangeFill]}):null,_jsxs(View,{style:[m.dayInner,s?m.dayEdge:r?m.rangeFill:null,r?m.dayMid:null,h?{borderColor:p.primary,borderWidth:1.5}:null,{opacity:l?.3:e.inMonth?1:.4}],children:[_jsx(Text,{style:[m.dayText,{color:_},o?m.dayStruck:null],maxFontSizeMultiplier:x,children:e.date.getDate()}),d&&d.length>0?_jsx(View,{pointerEvents:"none",style:m.dots,children:d.map(e=>_jsx(View,{style:[m.dot,{backgroundColor:s?p.onPrimary:e.color}]},e.key))}):null]})]})};export const CalendarDay=memo(CalendarDayBase);
@@ -0,0 +1 @@
1
+ "use strict";const DAY_MS=864e5;export const GRID_CELLS=42;export const startOfDay=t=>new Date(t.getFullYear(),t.getMonth(),t.getDate());export const startOfMonth=t=>new Date(t.getFullYear(),t.getMonth(),1);export const addMonths=(t,e)=>new Date(t.getFullYear(),t.getMonth()+e,1);export const isSameDay=(t,e)=>t.getFullYear()===e.getFullYear()&&t.getMonth()===e.getMonth()&&t.getDate()===e.getDate();export const toIso=t=>`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}`;export const daysBetween=(t,e)=>Math.round((startOfDay(e).getTime()-startOfDay(t).getTime())/DAY_MS);export const buildMonthMatrix=(t,e)=>{const o=t.getFullYear(),a=t.getMonth(),n=(new Date(o,a,1).getDay()-e+7)%7,r=[];for(let t=0;t<42;t+=1){const e=new Date(o,a,1-n+t);r.push({date:e,iso:toIso(e),inMonth:e.getMonth()===a})}return r};export const weekdayLabels=(t,e)=>{const o=new Intl.DateTimeFormat(t,{weekday:"short"}),a=[];for(let t=0;t<7;t+=1){const n=(e+t)%7;a.push({weekday:n,label:o.format(new Date(1970,0,4+n))})}return a};
@@ -0,0 +1 @@
1
+ "use strict";import{StyleSheet}from"react-native";import{fontFor}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";export const MIN_CELL_SIZE=44;export const NAV_BUTTON_SIZE=36;const DOT_SIZE=5;export const buildCalendarStyles=e=>{const t=e.components.dateRangePicker,o=t?.navButtonSize??36;return StyleSheet.create({root:{alignSelf:"stretch"},headerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:e.spacing.md},navBtn:{width:o,height:o,borderRadius:e.radius.full,...smoothCorners,alignItems:"center",justifyContent:"center",backgroundColor:e.colors.background.secondary},navBtnPressed:{backgroundColor:e.colors.surface.pressed},navBtnDisabled:{opacity:.4},navText:{fontSize:t?.navTextFontSize??22,lineHeight:t?.navTextLineHeight??24,color:e.colors.text.primary,...fontFor(e,"semibold")},headerLabelWrap:{flex:1,alignItems:"center"},headerLabel:{fontSize:e.typography.fontSize.base,color:e.colors.text.primary,...fontFor(e,"semibold")},weekdayRow:{flexDirection:"row",justifyContent:"center",marginBottom:e.spacing.xs},weekdayCell:{alignItems:"center",paddingVertical:e.spacing.xs},weekdayText:{fontSize:e.typography.fontSize.xs,color:e.colors.text.tertiary,letterSpacing:e.typography.letterSpacing.wide,...fontFor(e,"medium")},gridRow:{flexDirection:"row",justifyContent:"center"},dayCell:{alignItems:"center",justifyContent:"center",padding:0},barLeft:{position:"absolute",left:0,right:"50%",top:"5%",bottom:"5%"},barRight:{position:"absolute",left:"50%",right:0,top:"5%",bottom:"5%"},rangeFill:{backgroundColor:e.colors.primaryMuted},dayInner:{width:"90%",height:"90%",alignItems:"center",justifyContent:"center",borderRadius:e.radius.full,...smoothCorners},dayEdge:{backgroundColor:e.colors.primary},dayMid:{borderRadius:e.radius.none},dayText:{fontSize:e.typography.fontSize.sm,...fontFor(e,"medium")},dayStruck:{textDecorationLine:"line-through"},dots:{position:"absolute",bottom:e.spacing.xs,flexDirection:"row",gap:e.spacing.xxs},dot:{width:5,height:5,borderRadius:e.radius.full,...smoothCorners}})};
@@ -0,0 +1 @@
1
+ "use strict";export{Calendar,default}from"./Calendar.js";
@@ -1 +1 @@
1
- "use strict";import React,{forwardRef,useMemo}from"react";import{Animated,Image,Pressable,StyleSheet,View}from"react-native";import{useControllableState}from"../../hooks/useControllableState.js";import{usePressAnimation}from"../../hooks/usePressAnimation.js";import{Gradient,useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{resolveHaptic,triggerHaptic}from"../../utils/hapticUtils.js";import{supportsBoxShadow,toBoxShadow}from"../../utils/shadows.js";import{squircleHostRadius}from"../../utils/squircle.js";import{AppIcon}from"../AppIcon/AppIcon.js";import{Skeleton,SkeletonText}from"../Skeleton/index.js";import{SquircleFill,useSquircle}from"../SquircleFill/SquircleFill.js";import{Text}from"../Text/index.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const paddingMap={none:"none",sm:"sm",md:"lg",lg:"xl",xl:"2xl"},Card=forwardRef((e,t)=>{const{children:o,variant:i="elevated",elevation:r="sm",radius:s="lg",padding:l="md",interactive:a=!1,bg:n,header:d,title:c,lead:u,action:h,headerActions:p,collapsible:m=!1,collapsed:g,defaultCollapsed:b=!1,onCollapsedChange:y,collapsedSummary:x,onRemove:S,removeLabel:f="Remove",separatorHeight:v=StyleSheet.hairlineWidth,footer:j,imageSource:C,imageHeight:_=160,imageAspectRatio:w,imageOverlay:k,loading:R=!1,gradient:A,onPress:T,haptic:B,accessibilityLabel:H,accessibilityHint:I,accessibilityRole:P,style:V,containerStyle:L,headerStyle:F,bodyStyle:z,footerStyle:q,borderRadius:M,testID:W,onLayout:D,...O}=e,N=useTheme(),E=a||"function"==typeof T,{scale:G,pressIn:$,pressOut:U}=usePressAnimation({enabled:E}),J=useMemo(()=>buildStyles(N),[N]),K=Boolean(C),Q=N.spacing[paddingMap[l]],X=useMemo(()=>A?"string"==typeof A?N.gradients[A]??null:A:null,[A,N.gradients]),Y="flat"===i,Z=Y?0:M??N.radius[s],ee=resolveBackground(N,n),[te,oe]=useControllableState({value:g,defaultValue:b,onChange:y}),ie=m&&te,re=hasBuiltInHeaderContent(e),se=Boolean(d)||re,le=useSquircle(!K&&!X&&!Y,Z,D),ae=StyleSheet.flatten([V,L])??{},ne=ae.backgroundColor,de=ae.borderColor,ce=ne??ee??("filled"===i?N.colors.background.secondary:N.colors.background.elevated),ue="outlined"===i?N.colors.border.width:0,he=de??N.colors.border.primary,pe="elevated"===i&&supportsBoxShadow()?toBoxShadow(N.shadows[r]):void 0,me=le.active&&"elevated"===i&&!pe,ge=le.active&&!me?{backgroundColor:"transparent",borderColor:"transparent"}:null,be=useMemo(()=>{const e={borderRadius:me&&le.size?squircleHostRadius(le.size.width,le.size.height,Z):Z,...smoothCorners,padding:K?0:Q,overflow:le.active?"visible":"hidden"};switch(i){case"flat":return{...e,backgroundColor:ee??N.colors.background.elevated,borderBottomWidth:v,borderBottomColor:N.colors.border.primary};case"outlined":return{...e,backgroundColor:le.active?"transparent":ee??N.colors.background.elevated,borderWidth:N.colors.border.width,borderColor:le.active?"transparent":N.colors.border.primary};case"filled":return{...e,backgroundColor:le.active?"transparent":ee??N.colors.background.secondary};default:return{...e,backgroundColor:ee??N.colors.background.elevated,...pe?{boxShadow:pe}:N.shadows[r]}}},[N,i,r,Z,K,Q,le.active,le.size,pe,me,ee,v]),ye=useMemo(()=>({..."number"==typeof w?{width:"100%",aspectRatio:w}:{width:"100%",height:_},borderTopLeftRadius:Z,borderTopRightRadius:Z,borderBottomLeftRadius:0,borderBottomRightRadius:0,...smoothCorners}),[Z,w,_]),xe="string"==typeof c?c:"",Se=_jsxs(_Fragment,{children:[_jsxs(View,{style:J.titleColumn,children:["string"==typeof c?_jsx(Text,{variant:"title",accessibilityRole:"header",children:c}):c,u?_jsx(Text,{variant:"bodySmall",style:J.lead,children:u}):null,ie&&x?_jsx(Text,{variant:"caption",style:J.lead,children:x}):null]}),isCardTextAction(h)?_jsx(CardTextActionButton,{action:h,haptic:B}):h?_jsx(View,{style:J.actionNode,children:h}):null,p,m?_jsx(CardIconAction,{icon:ie?"chevron-down":"chevron-up",label:`${ie?"Show":"Hide"} ${xe}`.trim(),expanded:!ie,onPress:()=>oe(!ie),haptic:B}):null,S?_jsx(CardIconAction,{icon:"trash",label:f,onPress:S,color:N.colors.error,haptic:B}):null]}),fe=_jsxs(_Fragment,{children:[se?_jsx(View,{style:[J.header,!d&&J.headerRow,ie&&J.headerFolded,F],children:d??Se}):null,ie?null:_jsx(View,{style:[se||j?J.body:null,z],children:o}),j&&!ie?_jsx(View,{style:[J.footer,q],children:j}):null]}),ve=K?_jsxs(_Fragment,{children:[_jsxs(View,{style:J.imageWrapper,children:[_jsx(Image,{source:C,resizeMode:"cover",style:ye,accessibilityLabel:"",accessible:!1}),k?_jsx(View,{pointerEvents:"box-none",style:J.imageOverlay,children:k}):null]}),_jsx(View,{style:{padding:Q},children:fe})]}):fe,je=X?_jsxs(_Fragment,{children:[_jsx(Gradient,{gradient:X,style:StyleSheet.absoluteFill}),ve]}):le.active&&le.size?_jsxs(_Fragment,{children:[_jsx(SquircleFill,{width:le.size.width,height:le.size.height,radius:Z,fill:ce,stroke:ue?he:void 0,strokeWidth:ue,outset:ue}),ve]}):ve;let Ce;if(E){const handlePress=e=>{const t=resolveHaptic(B,"selection");t&&triggerHaptic(t),T?.(e)};Ce=_jsx(Animated.View,{style:[{transform:[{scale:G}]}],children:_jsx(Pressable,{ref:t,onPress:handlePress,onPressIn:$,onPressOut:U,android_ripple:{color:N.colors.surface.pressed,borderless:!1},accessibilityRole:P??"button",accessibilityLabel:H,accessibilityHint:I,testID:W,onLayout:le.onLayout,style:[be,V,L,ge],...O,children:je})})}else Ce=_jsx(View,{ref:t,accessibilityLabel:H,accessibilityHint:I,accessibilityRole:P,testID:W,onLayout:le.onLayout,style:[be,V,L,ge],children:je});return R?_jsx(CardSkeleton,{...e}):Ce});Card.displayName="Card";const CardSkeleton=({variant:e="elevated",elevation:t,radius:o="lg",padding:i="md",bg:r,header:s,footer:l,imageSource:a,imageHeight:n=160,imageAspectRatio:d,borderRadius:c,containerStyle:u,headerStyle:h,bodyStyle:p,footerStyle:m,style:g,...b})=>{const y=useTheme(),x=paddingMap[i],S=y.spacing[x],f="flat"===e?0:c??y.radius[o],v=void 0!==s||hasBuiltInHeaderContent(b),j=resolveBackground(y,r)??y.colors.background.elevated,C="outlined"===e?1:0,_="outlined"===e?y.colors.border.primary:void 0;return _jsxs(View,{style:[{backgroundColor:j,borderRadius:f,...smoothCorners,borderWidth:C,borderColor:_,overflow:"hidden"},u,g],accessibilityRole:"progressbar",accessibilityState:{busy:!0},children:[void 0!==a?_jsx(Skeleton,{width:"100%",height:d?void 0:n,style:d?{aspectRatio:d,width:"100%"}:void 0}):null,v?_jsx(View,{style:[{padding:S,paddingBottom:y.spacing.sm},h],children:_jsx(Skeleton,{shape:"text",width:"60%",height:18})}):null,_jsx(View,{style:[{padding:S},p],children:_jsx(SkeletonText,{lines:3,fontSize:14,lastLineWidth:"55%"})}),void 0!==l?_jsx(View,{style:[{padding:S,paddingTop:y.spacing.sm,flexDirection:"row"},m],children:_jsx(Skeleton,{width:88,height:32,shape:"rounded"})}):null]})};CardSkeleton.displayName="CardSkeleton",Card.Skeleton=CardSkeleton;const hasBuiltInHeaderContent=e=>Boolean(e.title||e.lead||e.action||e.headerActions||e.collapsible||e.onRemove),isCardTextAction=e=>"object"==typeof e&&null!==e&&!React.isValidElement(e)&&"label"in e&&"onPress"in e,HIT_TARGET=44,CardIconAction=({icon:e,label:t,onPress:o,expanded:i,color:r,haptic:s})=>{const l=useTheme();return _jsx(Pressable,{accessibilityRole:"button",accessibilityLabel:t,accessibilityState:void 0===i?void 0:{expanded:i},onPress:()=>{const e=resolveHaptic(s,"selection");e&&triggerHaptic(e),o()},style:iconActionStyle,children:_jsx(AppIcon,{name:e,size:20,color:r??l.colors.text.primary})})},CardTextActionButton=({action:e,haptic:t})=>{const o=useTheme();return _jsx(Pressable,{accessibilityRole:"button",accessibilityLabel:e.accessibilityLabel??e.label,onPress:()=>{const o=resolveHaptic(t,"selection");o&&triggerHaptic(o),e.onPress()},style:textActionStyle,children:_jsx(Text,{variant:"label",weight:"semibold",color:o.colors.primary,children:e.label})})},iconActionStyle={width:44,height:44,alignItems:"center",justifyContent:"center"},textActionStyle={minWidth:44,minHeight:44,alignItems:"center",justifyContent:"center"},resolveBackground=(e,t)=>{if(null==t)return;return e.colors.background[t]??t},buildStyles=e=>StyleSheet.create({header:{marginBottom:e.spacing.md},headerRow:{flexDirection:"row",alignItems:"center",gap:e.spacing.sm},headerFolded:{marginBottom:0},titleColumn:{flex:1},lead:{marginTop:e.spacing.xs},actionNode:{flexShrink:0},body:{flexShrink:1},footer:{marginTop:e.spacing.md},imageWrapper:{position:"relative"},imageOverlay:{...StyleSheet.absoluteFill}});export{Card};export default Card;
1
+ "use strict";import React,{forwardRef,useMemo}from"react";import{Animated,Image,Pressable,StyleSheet,View}from"react-native";import{useControllableState}from"../../hooks/useControllableState.js";import{usePressAnimation}from"../../hooks/usePressAnimation.js";import{Gradient,useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{resolveHaptic,triggerHaptic}from"../../utils/hapticUtils.js";import{supportsBoxShadow,toBoxShadow}from"../../utils/shadows.js";import{squircleHostRadius}from"../../utils/squircle.js";import{AppIcon}from"../AppIcon/AppIcon.js";import{Skeleton,SkeletonText}from"../Skeleton/index.js";import{SquircleFill,useSquircle}from"../SquircleFill/SquircleFill.js";import{Text}from"../Text/index.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const paddingMap={none:"none",sm:"sm",md:"lg",lg:"xl",xl:"2xl"},Card=forwardRef((e,t)=>{const{children:o,variant:i="elevated",elevation:r="sm",radius:s="lg",padding:l="md",interactive:a=!1,bg:n,header:d,title:c,lead:u,action:h,headerActions:p,collapsible:m=!1,collapsed:b,defaultCollapsed:g=!1,onCollapsedChange:y,collapsedSummary:x,onRemove:S,removeLabel:f="Remove",separatorHeight:v=StyleSheet.hairlineWidth,footer:j,imageSource:C,imageHeight:_=160,imageAspectRatio:w,imageOverlay:k,loading:R=!1,gradient:T,onPress:A,haptic:B,accessibilityLabel:H,accessibilityHint:I,accessibilityRole:L,style:P,containerStyle:V,headerStyle:F,bodyStyle:z,footerStyle:q,borderRadius:M,testID:W,onLayout:D,...O}=e,N=useTheme(),E=a||"function"==typeof A,{scale:G,pressIn:$,pressOut:U}=usePressAnimation({enabled:E}),J=useMemo(()=>buildStyles(N),[N]),K=Boolean(C),Q=N.spacing[paddingMap[l]],X=useMemo(()=>T?"string"==typeof T?N.gradients[T]??null:T:null,[T,N.gradients]),Y="flat"===i,Z=Y?0:M??N.radius[s],ee=resolveBackground(N,n),[te,oe]=useControllableState({value:b,defaultValue:g,onChange:y}),ie=m&&te,re=hasBuiltInHeaderContent(e),se=Boolean(d)||re,le=useSquircle(!K&&!X&&!Y,Z,D),ae=StyleSheet.flatten([P,V])??{},ne=ae.backgroundColor,de=ae.borderColor,ce=ne??ee??("filled"===i?N.colors.background.secondary:N.colors.background.elevated),ue="outlined"===i?N.colors.border.width:0,he=de??N.colors.border.primary,pe="elevated"===i&&supportsBoxShadow()?toBoxShadow(N.shadows[r]):void 0,me=le.active&&"elevated"===i&&!pe,be=le.active&&!me?{backgroundColor:"transparent",borderColor:"transparent"}:null,ge=useMemo(()=>{const e={borderRadius:me&&le.size?squircleHostRadius(le.size.width,le.size.height,Z):Z,...smoothCorners,padding:K?0:Q,overflow:le.active?"visible":"hidden"};switch(i){case"flat":return{...e,backgroundColor:ee??N.colors.background.elevated,borderBottomWidth:v,borderBottomColor:N.colors.border.primary};case"outlined":return{...e,backgroundColor:le.active?"transparent":ee??N.colors.background.elevated,borderWidth:N.colors.border.width,borderColor:le.active?"transparent":N.colors.border.primary};case"filled":return{...e,backgroundColor:le.active?"transparent":ee??N.colors.background.secondary};default:return{...e,backgroundColor:ee??N.colors.background.elevated,...pe?{boxShadow:pe}:N.shadows[r]}}},[N,i,r,Z,K,Q,le.active,le.size,pe,me,ee,v]),ye=useMemo(()=>({..."number"==typeof w?{width:"100%",aspectRatio:w}:{width:"100%",height:_},borderTopLeftRadius:Z,borderTopRightRadius:Z,borderBottomLeftRadius:0,borderBottomRightRadius:0,...smoothCorners}),[Z,w,_]),xe="string"==typeof c?c:"",Se=_jsxs(_Fragment,{children:[_jsxs(View,{style:J.titleColumn,children:["string"==typeof c?_jsx(Text,{variant:"title",accessibilityRole:"header",children:c}):c,u?_jsx(Text,{variant:"bodySmall",style:J.lead,children:u}):null,ie&&x?_jsx(Text,{variant:"caption",style:J.lead,children:x}):null]}),isCardTextAction(h)?_jsx(CardTextActionButton,{action:h,haptic:B}):h?_jsx(View,{style:J.actionNode,children:h}):null,p,m?_jsx(CardIconAction,{icon:ie?"chevron-down":"chevron-up",label:`${ie?"Show":"Hide"} ${xe}`.trim(),expanded:!ie,onPress:()=>oe(!ie),haptic:B}):null,S?_jsx(CardIconAction,{icon:"trash",label:f,onPress:S,color:N.colors.toneText.error,haptic:B}):null]}),fe=_jsxs(_Fragment,{children:[se?_jsx(View,{style:[J.header,!d&&J.headerRow,ie&&J.headerFolded,F],children:d??Se}):null,ie?null:_jsx(View,{style:[se||j?J.body:null,z],children:o}),j&&!ie?_jsx(View,{style:[J.footer,q],children:j}):null]}),ve=K?_jsxs(_Fragment,{children:[_jsxs(View,{style:J.imageWrapper,children:[_jsx(Image,{source:C,resizeMode:"cover",style:ye,accessibilityLabel:"",accessible:!1}),k?_jsx(View,{pointerEvents:"box-none",style:J.imageOverlay,children:k}):null]}),_jsx(View,{style:{padding:Q},children:fe})]}):fe,je=X?_jsxs(_Fragment,{children:[_jsx(Gradient,{gradient:X,style:StyleSheet.absoluteFill}),ve]}):le.active&&le.size?_jsxs(_Fragment,{children:[_jsx(SquircleFill,{width:le.size.width,height:le.size.height,radius:Z,fill:ce,stroke:ue?he:void 0,strokeWidth:ue,outset:ue}),ve]}):ve;let Ce;if(E){const handlePress=e=>{const t=resolveHaptic(B,"selection");t&&triggerHaptic(t),A?.(e)};Ce=_jsx(Animated.View,{style:[{transform:[{scale:G}]}],children:_jsx(Pressable,{ref:t,onPress:handlePress,onPressIn:$,onPressOut:U,android_ripple:{color:N.colors.surface.pressed,borderless:!1},accessibilityRole:L??"button",accessibilityLabel:H,accessibilityHint:I,testID:W,onLayout:le.onLayout,style:[ge,P,V,be],...O,children:je})})}else Ce=_jsx(View,{ref:t,accessibilityLabel:H,accessibilityHint:I,accessibilityRole:L,testID:W,onLayout:le.onLayout,style:[ge,P,V,be],...O,children:je});return R?_jsx(CardSkeleton,{...e}):Ce});Card.displayName="Card";const CardSkeleton=({variant:e="elevated",elevation:t,radius:o="lg",padding:i="md",bg:r,header:s,footer:l,imageSource:a,imageHeight:n=160,imageAspectRatio:d,borderRadius:c,containerStyle:u,headerStyle:h,bodyStyle:p,footerStyle:m,style:b,...g})=>{const y=useTheme(),x=paddingMap[i],S=y.spacing[x],f="flat"===e?0:c??y.radius[o],v=void 0!==s||hasBuiltInHeaderContent(g),j=resolveBackground(y,r)??y.colors.background.elevated,C="outlined"===e?1:0,_="outlined"===e?y.colors.border.primary:void 0;return _jsxs(View,{style:[{backgroundColor:j,borderRadius:f,...smoothCorners,borderWidth:C,borderColor:_,overflow:"hidden"},u,b],accessibilityRole:"progressbar",accessibilityLabel:"Loading",accessibilityState:{busy:!0},"aria-busy":!0,children:[void 0!==a?_jsx(Skeleton,{width:"100%",height:d?void 0:n,style:d?{aspectRatio:d,width:"100%"}:void 0}):null,v?_jsx(View,{style:[{padding:S,paddingBottom:y.spacing.sm},h],children:_jsx(Skeleton,{shape:"text",width:"60%",height:18})}):null,_jsx(View,{style:[{padding:S},p],children:_jsx(SkeletonText,{lines:3,fontSize:14,lastLineWidth:"55%"})}),void 0!==l?_jsx(View,{style:[{padding:S,paddingTop:y.spacing.sm,flexDirection:"row"},m],children:_jsx(Skeleton,{width:88,height:32,shape:"rounded"})}):null]})};CardSkeleton.displayName="CardSkeleton",Card.Skeleton=CardSkeleton;const hasBuiltInHeaderContent=e=>Boolean(e.title||e.lead||e.action||e.headerActions||e.collapsible||e.onRemove),isCardTextAction=e=>"object"==typeof e&&null!==e&&!React.isValidElement(e)&&"label"in e&&"onPress"in e,HIT_TARGET=44,CardIconAction=({icon:e,label:t,onPress:o,expanded:i,color:r,haptic:s})=>{const l=useTheme();return _jsx(Pressable,{accessibilityRole:"button",accessibilityLabel:t,accessibilityState:void 0===i?void 0:{expanded:i},"aria-expanded":i,onPress:()=>{const e=resolveHaptic(s,"selection");e&&triggerHaptic(e),o()},style:iconActionStyle,children:_jsx(AppIcon,{name:e,size:20,color:r??l.colors.text.primary})})},CardTextActionButton=({action:e,haptic:t})=>{const o=useTheme();return _jsx(Pressable,{accessibilityRole:"button",accessibilityLabel:e.accessibilityLabel??e.label,onPress:()=>{const o=resolveHaptic(t,"selection");o&&triggerHaptic(o),e.onPress()},style:textActionStyle,children:_jsx(Text,{variant:"label",weight:"semibold",color:o.colors.primary,children:e.label})})},iconActionStyle={width:44,height:44,alignItems:"center",justifyContent:"center"},textActionStyle={minWidth:44,minHeight:44,alignItems:"center",justifyContent:"center"},resolveBackground=(e,t)=>{if(null==t)return;return e.colors.background[t]??t},buildStyles=e=>StyleSheet.create({header:{marginBottom:e.spacing.md},headerRow:{flexDirection:"row",alignItems:"center",gap:e.spacing.sm},headerFolded:{marginBottom:0},titleColumn:{flex:1},lead:{marginTop:e.spacing.xs},actionNode:{flexShrink:0},body:{flexShrink:1},footer:{marginTop:e.spacing.md},imageWrapper:{position:"relative"},imageOverlay:{...StyleSheet.absoluteFill}});export{Card};export default Card;
@@ -1 +1 @@
1
- "use strict";import React,{forwardRef,useCallback,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Animated,Dimensions,FlatList,Image,Pressable,ScrollView,StyleSheet,Text,View}from"react-native";import{createAnimatedValue,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{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const CarouselInner=forwardRef((e,t)=>{const{data:n,renderItem:r,keyExtractor:i,index:a,defaultIndex:l=0,onIndexChange:s,autoPlay:o=!1,autoPlayInterval:c=4e3,loop:u=!1,showPagination:m=!0,paginationStyle:d="dots",itemWidth:h="screen",spacing:g=0,containerStyle:y,accessibilityLabel:p,testID:b,showThumbnails:f=!1,haptic:x,renderThumbnail:S,loading:w=!1}=e,C=useTheme(),j="number"==typeof a,k=u||o,[v,I]=useState(()=>Dimensions.get("window").width),T="screen"===h?v:h,R=T+g,_=useRef(null),V=useRef(createAnimatedValue(0)).current,A=clamp(j?a:l,0,Math.max(0,n.length-1)),[E,H]=useState(A),z=useRef(null),M=useRef(null),D=useRef(!1),P=useRef(E);P.current=E;const W=useCallback(e=>{const t=clamp(e,0,Math.max(0,n.length-1));H(e=>e===t?e:(s?.(t),t))},[n.length,s]),L=useCallback((e,t=!0)=>{if(0===n.length)return;const r=clamp(e,0,n.length-1);_.current?.scrollToOffset({offset:r*R,animated:t}),W(r)},[n.length,R,W]),$=useCallback(()=>{if(0===n.length)return;const e=P.current+1;e>=n.length?k&&L(0,!1):L(e,!0)},[n.length,k,L]),N=useCallback(()=>{if(0===n.length)return;const e=P.current-1;e<0?k&&L(n.length-1,!1):L(e,!0)},[n.length,k,L]);useImperativeHandle(t,()=>({scrollTo:L,next:$,prev:N}),[L,$,N]),useEffect(()=>{j&&a!==E&&L(a,!0)},[a]);const F=useCallback(()=>{z.current&&(clearInterval(z.current),z.current=null)},[]),O=useCallback(()=>{!o||n.length<=1||(F(),z.current=setInterval(()=>{if(D.current)return;const e=P.current+1;e>=n.length?L(0,!1):L(e,!0)},c))},[o,c,n.length,L,F]);useEffect(()=>(O(),()=>{F(),M.current&&clearTimeout(M.current)}),[O,F]);const X=m&&n.length>1&&"numbers"!==d,B=useMemo(()=>Animated.event([{nativeEvent:{contentOffset:{x:V}}}],{useNativeDriver:!1}),[V]),G=useCallback(e=>{if(R<=0)return;const t=e.nativeEvent.contentOffset.x,n=Math.round(t/R);W(n)},[R,W]),q=useCallback(()=>{D.current=!0,F(),M.current&&(clearTimeout(M.current),M.current=null)},[F]),J=useCallback(()=>{D.current=!1,o&&(M.current&&clearTimeout(M.current),M.current=setTimeout(()=>{O()},1e3))},[o,O]),K=useCallback(e=>{switch(e.nativeEvent.actionName){case"increment":$();break;case"decrement":N()}},[$,N]),Q=useMemo(()=>buildStyles(C),[C]),U=useCallback(({item:e,index:t})=>_jsx(View,{style:{width:T,marginRight:t===n.length-1?0:g},accessibilityElementsHidden:t!==E,importantForAccessibility:t===E?"yes":"no-hide-descendants",children:r(e,t)}),[r,T,g,n.length,E]),Y=useCallback((e,t)=>String(t),[]),Z=useCallback((e,t)=>({length:R,offset:R*t,index:t}),[R]);return w?_jsx(CarouselSkeleton,{...e,containerWidth:v}):_jsxs(View,{style:[Q.container,y],onLayout:e=>I(e.nativeEvent.layout.width),accessibilityRole:"adjustable",accessibilityLabel:p??"Carousel",accessibilityValue:{min:0,max:Math.max(0,n.length-1),now:E,text:`Slide ${E+1} of ${n.length}`},accessibilityActions:[{name:"increment"},{name:"decrement"}],onAccessibilityAction:K,testID:b,children:[_jsx(FlatList,{ref:_,data:n,keyExtractor:i??Y,renderItem:U,horizontal:!0,pagingEnabled:"screen"===h&&0===g,snapToInterval:R,snapToAlignment:"start",decelerationRate:"fast",showsHorizontalScrollIndicator:!1,onScroll:X?B:void 0,scrollEventThrottle:X?16:void 0,onMomentumScrollEnd:G,onScrollBeginDrag:q,onScrollEndDrag:J,getItemLayout:Z,initialScrollIndex:A,bounces:!1}),m&&n.length>1?_jsx(Pagination,{count:n.length,currentIndex:E,scrollX:V,slideStride:R,variant:d,theme:C}):null,f&&n.length>0?_jsx(ThumbnailStrip,{data:n,currentIndex:E,renderThumbnail:S,onSelect:e=>{const t=resolveHaptic(x,"selection");t&&triggerHaptic(t),L(e,!0)},theme:C}):null]})});CarouselInner.displayName="Carousel";const CarouselSkeleton=({itemWidth:e="screen",showPagination:t=!0,paginationStyle:n="dots",containerStyle:r,containerWidth:i})=>{const a="screen"===e?i||320:e;return _jsxs(View,{style:[carouselSkeletonStyles.container,r],children:[_jsx(Skeleton,{width:a,height:160,radius:"md"}),t?_jsx(View,{style:[carouselSkeletonStyles.paginationRow,{marginTop:12}],children:Array.from({length:3}).map((e,t)=>_jsx(Skeleton,"numbers"===n?{width:24,height:16,radius:"sm",style:{marginHorizontal:4}}:"bars"===n?{width:20,height:4,radius:2,style:{marginHorizontal:3}}:{shape:"circle",width:8,height:8,style:{marginHorizontal:4}},`sk-pg-${t}`))}):null]})};CarouselSkeleton.displayName="CarouselSkeleton";const carouselSkeletonStyles=StyleSheet.create({container:{alignItems:"center"},paginationRow:{flexDirection:"row",justifyContent:"center"}}),Carousel=CarouselInner;Carousel.Skeleton=CarouselSkeleton;const Pagination=({count:e,currentIndex:t,scrollX:n,slideStride:r,variant:i,theme:a})=>{if("numbers"===i)return _jsx(View,{style:paginationStyles.numbersWrap,children:_jsx(Text,{style:[paginationStyles.numbersText,{color:a.colors.text.secondary,fontSize:a.typography.fontSize.sm,fontWeight:a.typography.fontWeight.medium}],accessibilityLabel:`Slide ${t+1} of ${e}`,children:`${t+1} / ${e}`})});const l=Array.from({length:e},(e,t)=>t),s="bars"===i,o=s?24:6,c=s?36:16,u=s?3:6;return _jsx(View,{style:paginationStyles.dotRow,accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",children:l.map(e=>{const i=[(e-1)*r,e*r,(e+1)*r],l=n.interpolate({inputRange:i,outputRange:[o,c,o],extrapolate:"clamp"}),s=n.interpolate({inputRange:i,outputRange:[.5,1,.5],extrapolate:"clamp"});return _jsx(Animated.View,{style:[{width:l,height:u,marginHorizontal:4,borderRadius:u/2,...smoothCorners,backgroundColor:e===t?a.colors.primary:a.colors.border.primary,opacity:s}]},e)})})},ThumbnailStrip=({data:e,currentIndex:t,renderThumbnail:n,onSelect:r,theme:i})=>_jsx(ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,contentContainerStyle:thumbStyles.row,accessibilityRole:"tablist",children:e.map((e,a)=>_jsx(ThumbnailItem,{item:e,index:a,isActive:a===t,renderThumbnail:n,onPress:()=>r(a),theme:i},a))}),ThumbnailItem=({item:e,index:t,isActive:n,renderThumbnail:r,onPress:i,theme:a})=>{const l=useRef(createAnimatedValue(n?1.1:1)).current;useEffect(()=>{const e=Animated.spring(l,{toValue:n?1.1:1,useNativeDriver:!0,friction:6,tension:80});return e.start(),()=>e.stop()},[n,l]);const s=useMemo(()=>r?r(e,t):e&&"object"==typeof e&&"uri"in e&&"string"==typeof e.uri?_jsx(Image,{source:{uri:e.uri},style:thumbStyles.image,resizeMode:"cover"}):_jsx(View,{style:[thumbStyles.placeholder,{backgroundColor:a.colors.background.secondary}],children:_jsx(Text,{style:{color:a.colors.text.secondary,fontSize:a.typography.fontSize.xs,fontWeight:a.typography.fontWeight.semibold},children:t+1})}),[e,t,r,a]);return _jsx(Pressable,{onPress:i,accessibilityRole:"tab",accessibilityState:{selected:n},accessibilityLabel:`Go to slide ${t+1}`,children:_jsx(Animated.View,{style:[thumbStyles.thumb,{borderColor:n?a.colors.primary:"transparent",transform:[{scale:l}]}],children:s})})},thumbStyles=StyleSheet.create({row:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,paddingVertical:8},thumb:{width:40,height:40,marginHorizontal:4,borderRadius:6,...smoothCorners,borderWidth:2,overflow:"hidden"},image:{width:"100%",height:"100%"},placeholder:{flex:1,alignItems:"center",justifyContent:"center"}}),clamp=(e,t,n)=>Math.min(Math.max(e,t),n),buildStyles=e=>StyleSheet.create({container:{width:"100%"}}),paginationStyles=StyleSheet.create({dotRow:{flexDirection:"row",alignItems:"center",justifyContent:"center",paddingVertical:12},numbersWrap:{alignItems:"center",justifyContent:"center",paddingVertical:12},numbersText:{textAlign:"center"}});export{Carousel};export default Carousel;
1
+ "use strict";import{forwardRef,useCallback,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Animated,Dimensions,FlatList,Image,Pressable,ScrollView,StyleSheet,Text,View}from"react-native";import{createAnimatedValue,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{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const CarouselInner=forwardRef((e,t)=>{const{data:n,renderItem:r,keyExtractor:i,index:a,defaultIndex:l=0,onIndexChange:s,autoPlay:o=!1,autoPlayInterval:c=4e3,loop:u=!1,showPagination:m=!0,paginationStyle:d="dots",itemWidth:h="screen",spacing:g=0,containerStyle:y,accessibilityLabel:p,testID:b,showThumbnails:f=!1,haptic:x,renderThumbnail:S,loading:w=!1}=e,C=useTheme(),j="number"==typeof a,k=u||o,[v,I]=useState(()=>Dimensions.get("window").width),T="screen"===h?v:h,R=T+g,_=useRef(null),V=useRef(createAnimatedValue(0)).current,A=clamp(j?a:l,0,Math.max(0,n.length-1)),[E,H]=useState(A),z=useRef(null),M=useRef(null),D=useRef(!1),P=useRef(E);P.current=E;const W=useCallback(e=>{const t=clamp(e,0,Math.max(0,n.length-1));H(e=>e===t?e:(s?.(t),t))},[n.length,s]),L=useCallback((e,t=!0)=>{if(0===n.length)return;const r=clamp(e,0,n.length-1);_.current?.scrollToOffset({offset:r*R,animated:t}),W(r)},[n.length,R,W]),$=useCallback(()=>{if(0===n.length)return;const e=P.current+1;e>=n.length?k&&L(0,!1):L(e,!0)},[n.length,k,L]),N=useCallback(()=>{if(0===n.length)return;const e=P.current-1;e<0?k&&L(n.length-1,!1):L(e,!0)},[n.length,k,L]);useImperativeHandle(t,()=>({scrollTo:L,next:$,prev:N}),[L,$,N]),useEffect(()=>{j&&a!==E&&L(a,!0)},[a]);const F=useCallback(()=>{z.current&&(clearInterval(z.current),z.current=null)},[]),O=useCallback(()=>{!o||n.length<=1||(F(),z.current=setInterval(()=>{if(D.current)return;const e=P.current+1;e>=n.length?L(0,!1):L(e,!0)},c))},[o,c,n.length,L,F]);useEffect(()=>(O(),()=>{F(),M.current&&clearTimeout(M.current)}),[O,F]);const X=m&&n.length>1&&"numbers"!==d,B=useMemo(()=>Animated.event([{nativeEvent:{contentOffset:{x:V}}}],{useNativeDriver:!1}),[V]),G=useCallback(e=>{if(R<=0)return;const t=e.nativeEvent.contentOffset.x,n=Math.round(t/R);W(n)},[R,W]),q=useCallback(()=>{D.current=!0,F(),M.current&&(clearTimeout(M.current),M.current=null)},[F]),J=useCallback(()=>{D.current=!1,o&&(M.current&&clearTimeout(M.current),M.current=setTimeout(()=>{O()},1e3))},[o,O]),K=useCallback(e=>{switch(e.nativeEvent.actionName){case"increment":$();break;case"decrement":N()}},[$,N]),Q=useMemo(()=>buildStyles(C),[C]),U=useCallback(({item:e,index:t})=>_jsx(View,{style:{width:T,marginRight:t===n.length-1?0:g},accessibilityElementsHidden:t!==E,importantForAccessibility:t===E?"yes":"no-hide-descendants",children:r(e,t)}),[r,T,g,n.length,E]),Y=useCallback((e,t)=>String(t),[]),Z=useCallback((e,t)=>({length:R,offset:R*t,index:t}),[R]);return w?_jsx(CarouselSkeleton,{...e,containerWidth:v}):_jsxs(View,{style:[Q.container,y],onLayout:e=>I(e.nativeEvent.layout.width),accessibilityRole:"adjustable",accessibilityLabel:p??"Carousel",accessibilityValue:{min:0,max:Math.max(0,n.length-1),now:E,text:`Slide ${E+1} of ${n.length}`},accessibilityActions:[{name:"increment"},{name:"decrement"}],onAccessibilityAction:K,testID:b,children:[_jsx(FlatList,{ref:_,data:n,keyExtractor:i??Y,renderItem:U,horizontal:!0,pagingEnabled:"screen"===h&&0===g,snapToInterval:R,snapToAlignment:"start",decelerationRate:"fast",showsHorizontalScrollIndicator:!1,onScroll:X?B:void 0,scrollEventThrottle:X?16:void 0,onMomentumScrollEnd:G,onScrollBeginDrag:q,onScrollEndDrag:J,getItemLayout:Z,initialScrollIndex:A,bounces:!1}),m&&n.length>1?_jsx(Pagination,{count:n.length,currentIndex:E,scrollX:V,slideStride:R,variant:d,theme:C}):null,f&&n.length>0?_jsx(ThumbnailStrip,{data:n,currentIndex:E,renderThumbnail:S,onSelect:e=>{const t=resolveHaptic(x,"selection");t&&triggerHaptic(t),L(e,!0)},theme:C}):null]})});CarouselInner.displayName="Carousel";const CarouselSkeleton=({itemWidth:e="screen",showPagination:t=!0,paginationStyle:n="dots",containerStyle:r,containerWidth:i})=>{const a="screen"===e?i||320:e;return _jsxs(View,{style:[carouselSkeletonStyles.container,r],children:[_jsx(Skeleton,{width:a,height:160,radius:"md"}),t?_jsx(View,{style:[carouselSkeletonStyles.paginationRow,{marginTop:12}],children:Array.from({length:3}).map((e,t)=>_jsx(Skeleton,"numbers"===n?{width:24,height:16,radius:"sm",style:{marginHorizontal:4}}:"bars"===n?{width:20,height:4,radius:2,style:{marginHorizontal:3}}:{shape:"circle",width:8,height:8,style:{marginHorizontal:4}},`sk-pg-${t}`))}):null]})};CarouselSkeleton.displayName="CarouselSkeleton";const carouselSkeletonStyles=StyleSheet.create({container:{alignItems:"center"},paginationRow:{flexDirection:"row",justifyContent:"center"}}),Carousel=CarouselInner;Carousel.Skeleton=CarouselSkeleton;const Pagination=({count:e,currentIndex:t,scrollX:n,slideStride:r,variant:i,theme:a})=>{if("numbers"===i)return _jsx(View,{style:paginationStyles.numbersWrap,children:_jsx(Text,{style:[paginationStyles.numbersText,{color:a.colors.text.secondary,fontSize:a.typography.fontSize.sm,fontWeight:a.typography.fontWeight.medium}],accessibilityLabel:`Slide ${t+1} of ${e}`,children:`${t+1} / ${e}`})});const l=Array.from({length:e},(e,t)=>t),s="bars"===i,o=s?24:6,c=s?36:16,u=s?3:6;return _jsx(View,{style:paginationStyles.dotRow,accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",children:l.map(e=>{const i=[(e-1)*r,e*r,(e+1)*r],l=n.interpolate({inputRange:i,outputRange:[o,c,o],extrapolate:"clamp"}),s=n.interpolate({inputRange:i,outputRange:[.5,1,.5],extrapolate:"clamp"});return _jsx(Animated.View,{style:[{width:l,height:u,marginHorizontal:4,borderRadius:u/2,...smoothCorners,backgroundColor:e===t?a.colors.primary:a.colors.border.primary,opacity:s}]},e)})})},ThumbnailStrip=({data:e,currentIndex:t,renderThumbnail:n,onSelect:r,theme:i})=>_jsx(ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,contentContainerStyle:thumbStyles.row,accessibilityRole:"tablist",children:e.map((e,a)=>_jsx(ThumbnailItem,{item:e,index:a,isActive:a===t,renderThumbnail:n,onPress:()=>r(a),theme:i},a))}),ThumbnailItem=({item:e,index:t,isActive:n,renderThumbnail:r,onPress:i,theme:a})=>{const l=useRef(createAnimatedValue(n?1.1:1)).current;useEffect(()=>{const e=Animated.spring(l,{toValue:n?1.1:1,useNativeDriver:!0,friction:6,tension:80});return e.start(),()=>e.stop()},[n,l]);const s=useMemo(()=>r?r(e,t):e&&"object"==typeof e&&"uri"in e&&"string"==typeof e.uri?_jsx(Image,{source:{uri:e.uri},style:thumbStyles.image,resizeMode:"cover"}):_jsx(View,{style:[thumbStyles.placeholder,{backgroundColor:a.colors.background.secondary}],children:_jsx(Text,{style:{color:a.colors.text.secondary,fontSize:a.typography.fontSize.xs,fontWeight:a.typography.fontWeight.semibold},children:t+1})}),[e,t,r,a]);return _jsx(Pressable,{onPress:i,accessibilityRole:"tab",accessibilityState:{selected:n},"aria-selected":n,accessibilityLabel:`Go to slide ${t+1}`,children:_jsx(Animated.View,{style:[thumbStyles.thumb,{borderColor:n?a.colors.primary:"transparent",transform:[{scale:l}]}],children:s})})},thumbStyles=StyleSheet.create({row:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,paddingVertical:8},thumb:{width:40,height:40,marginHorizontal:4,borderRadius:6,...smoothCorners,borderWidth:2,overflow:"hidden"},image:{width:"100%",height:"100%"},placeholder:{flex:1,alignItems:"center",justifyContent:"center"}}),clamp=(e,t,n)=>Math.min(Math.max(e,t),n),buildStyles=e=>StyleSheet.create({container:{width:"100%"}}),paginationStyles=StyleSheet.create({dotRow:{flexDirection:"row",alignItems:"center",justifyContent:"center",paddingVertical:12},numbersWrap:{alignItems:"center",justifyContent:"center",paddingVertical:12},numbersText:{textAlign:"center"}});export{Carousel};export default Carousel;
@@ -1 +1 @@
1
- "use strict";import{forwardRef,useEffect,useMemo,useRef}from"react";import{Animated,Pressable,StyleSheet,View}from"react-native";import Svg,{Path}from"react-native-svg";import{useControllableState}from"../../hooks/index.js";import{createAnimatedValue,useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{resolveHaptic,triggerHaptic}from"../../utils/hapticUtils.js";import{ChoiceText,hasChoiceDetail}from"../FieldBase/ChoiceText.js";import{fieldTextAsString,hasFieldText}from"../FieldBase/FieldBase.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const sizeMap={sm:16,md:20,lg:24},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}},toneOnColor=(e,r)=>{switch(r){case"success":return e.colors.onSuccess;case"warning":return e.colors.onWarning;case"error":return e.colors.onError;default:return e.colors.onPrimary}},Checkbox=forwardRef((e,r)=>{const{checked:t,defaultChecked:s,onChange:o,indeterminate:i=!1,disabled:n=!1,label:a,description:l,error:c,help:d,labelLines:h,size:p="md",tone:m="primary",accessibilityLabel:u,haptic:x,style:b,boxStyle:f,indeterminateBarStyle:g,containerStyle:y,labelStyle:w,testID:C,...S}=e,[j,k]=useControllableState({value:t,defaultValue:s??!1,onChange:o}),T=useTheme(),v=useMemo(()=>buildStyles(T),[T]),R=T.components.checkbox?.[p]?.boxSize??sizeMap[p],_=T.colors.border.width,L=T.components.checkbox?.labelGap??10,V=toneColor(T,m),M=j||i,A=useRef(createAnimatedValue(M?1:0)).current;useEffect(()=>{const e=Animated.spring(A,{toValue:M?1:0,damping:T.motion.spring.snappy.damping,stiffness:T.motion.spring.snappy.stiffness,mass:T.motion.spring.snappy.mass,useNativeDriver:!0});return e.start(),()=>e.stop()},[M,A,T.motion.spring.snappy]);const D=A.interpolate({inputRange:[0,1],outputRange:[0,1]}),F=u??fieldTextAsString(a),I=M?V:n?T.colors.border.primary:hasFieldText(c)?T.colors.field.borderError:T.colors.border.primary,P=M?V:n?T.colors.surface.disabled:"transparent",H=n&&!M?T.colors.text.disabled:toneOnColor(T,m),B=Math.round(.72*R),W=Math.round(.55*R),z=Math.max(2,Math.round(.12*R)),E=_jsxs(Pressable,{ref:r,onPress:e=>{if(n)return;const r=resolveHaptic(x,"selection");r&&triggerHaptic(r),k(!j),S.onPressOut?.(e)},disabled:n,accessibilityRole:"checkbox",accessibilityLabel:F,accessibilityHint:S.accessibilityHint??fieldTextAsString(l),accessibilityState:{checked:i?"mixed":j,disabled:n},testID:C,hitSlop:6,...S,style:({pressed:e})=>[v.row,hasChoiceDetail(l,c)?v.rowTop:null,hasFieldText(d)?v.rowShrink:null,{opacity:n?.55:e?.85:1},y,b],children:[_jsx(View,{style:[v.box,{width:R,height:R,borderWidth:_,borderRadius:T.radius.xs,...smoothCorners,borderColor:I,backgroundColor:P},f],children:_jsx(Animated.View,{style:[v.glyphWrap,{opacity:A,transform:[{scale:D}]}],children:i?_jsx(View,{style:[{width:W,height:z,borderRadius:z/2,...smoothCorners,backgroundColor:H},g]}):_jsx(Svg,{width:B,height:B,viewBox:"0 0 24 24",children:_jsx(Path,{d:"M5 12.5l4.5 4.5L19 7.5",stroke:H,strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})})})}),_jsx(ChoiceText,{label:a,description:l,error:c,disabled:n,labelLines:h||void 0,descriptionLines:h||void 0,style:{marginLeft:L},labelStyle:w})]});return hasFieldText(d)?_jsxs(View,{style:[v.helpRow,hasChoiceDetail(l,c)?v.rowTop:null],children:[E,_jsx(View,{style:[v.help,{marginLeft:T.spacing.xs}],children:d})]}):E});Checkbox.displayName="Checkbox";const buildStyles=e=>StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},rowTop:{alignItems:"flex-start"},rowShrink:{flexShrink:1},helpRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0},box:{alignItems:"center",justifyContent:"center"},glyphWrap:{alignItems:"center",justifyContent:"center"}});export{Checkbox};export default Checkbox;
1
+ "use strict";import{forwardRef,useEffect,useMemo,useRef}from"react";import{Animated,Pressable,StyleSheet,View}from"react-native";import Svg,{Path}from"react-native-svg";import{useControllableState}from"../../hooks/index.js";import{createAnimatedValue,useTheme}from"../../theme/index.js";import{smoothCorners}from"../../utils/corners.js";import{resolveHaptic,triggerHaptic}from"../../utils/hapticUtils.js";import{ChoiceText,hasChoiceDetail}from"../FieldBase/ChoiceText.js";import{fieldTextAsString,hasFieldText}from"../FieldBase/FieldBase.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const sizeMap={sm:16,md:20,lg:24},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}},toneOnColor=(e,r)=>{switch(r){case"success":return e.colors.onSuccess;case"warning":return e.colors.onWarning;case"error":return e.colors.onError;default:return e.colors.onPrimary}},Checkbox=forwardRef((e,r)=>{const{checked:t,defaultChecked:s,onChange:o,indeterminate:i=!1,disabled:a=!1,label:n,description:l,error:c,help:d,labelLines:h,size:p="md",tone:m="primary",accessibilityLabel:u,haptic:x,style:b,boxStyle:f,indeterminateBarStyle:g,containerStyle:y,labelStyle:w,testID:C,...S}=e,[j,k]=useControllableState({value:t,defaultValue:s??!1,onChange:o}),T=useTheme(),v=useMemo(()=>buildStyles(T),[T]),R=T.components.checkbox?.[p]?.boxSize??sizeMap[p],_=T.colors.border.width,L=T.components.checkbox?.labelGap??10,V=toneColor(T,m),M=j||i,A=useRef(createAnimatedValue(M?1:0)).current;useEffect(()=>{const e=Animated.spring(A,{toValue:M?1:0,damping:T.motion.spring.snappy.damping,stiffness:T.motion.spring.snappy.stiffness,mass:T.motion.spring.snappy.mass,useNativeDriver:!0});return e.start(),()=>e.stop()},[M,A,T.motion.spring.snappy]);const D=A.interpolate({inputRange:[0,1],outputRange:[0,1]}),F=u??fieldTextAsString(n),I=M?V:a?T.colors.border.primary:hasFieldText(c)?T.colors.field.borderError:T.colors.border.primary,P=M?V:a?T.colors.surface.disabled:"transparent",H=a&&!M?T.colors.text.disabled:toneOnColor(T,m),B=Math.round(.72*R),W=Math.round(.55*R),z=Math.max(2,Math.round(.12*R)),E=_jsxs(Pressable,{ref:r,onPress:e=>{if(a)return;const r=resolveHaptic(x,"selection");r&&triggerHaptic(r),k(!j),S.onPressOut?.(e)},disabled:a,accessibilityRole:"checkbox",accessibilityLabel:F,accessibilityHint:S.accessibilityHint??fieldTextAsString(l),accessibilityState:{checked:i?"mixed":j,disabled:a},"aria-checked":i?"mixed":j,"aria-disabled":a,testID:C,hitSlop:6,...S,style:({pressed:e})=>[v.row,hasChoiceDetail(l,c)?v.rowTop:null,hasFieldText(d)?v.rowShrink:null,{opacity:a?.55:e?.85:1},y,b],children:[_jsx(View,{style:[v.box,{width:R,height:R,borderWidth:_,borderRadius:T.radius.xs,...smoothCorners,borderColor:I,backgroundColor:P},f],children:_jsx(Animated.View,{style:[v.glyphWrap,{opacity:A,transform:[{scale:D}]}],children:i?_jsx(View,{style:[{width:W,height:z,borderRadius:z/2,...smoothCorners,backgroundColor:H},g]}):_jsx(Svg,{width:B,height:B,viewBox:"0 0 24 24",children:_jsx(Path,{d:"M5 12.5l4.5 4.5L19 7.5",stroke:H,strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})})})}),_jsx(ChoiceText,{label:n,description:l,error:c,disabled:a,labelLines:h||void 0,descriptionLines:h||void 0,style:{marginLeft:L},labelStyle:w})]});return hasFieldText(d)?_jsxs(View,{style:[v.helpRow,hasChoiceDetail(l,c)?v.rowTop:null],children:[E,_jsx(View,{style:[v.help,{marginLeft:T.spacing.xs}],children:d})]}):E});Checkbox.displayName="Checkbox";const buildStyles=e=>StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},rowTop:{alignItems:"flex-start"},rowShrink:{flexShrink:1},helpRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0},box:{alignItems:"center",justifyContent:"center"},glyphWrap:{alignItems:"center",justifyContent:"center"}});export{Checkbox};export default Checkbox;
@@ -1 +1 @@
1
- "use strict";import React,{forwardRef,useMemo}from"react";import{Animated,Pressable,StyleSheet,Text,View}from"react-native";import{usePressAnimation}from"../../hooks/usePressAnimation.js";import{fontFor,useTheme}from"../../theme/index.js";import{tintOf}from"../../utils/color.js";import{smoothCorners}from"../../utils/corners.js";import{resolveHaptic,triggerHaptic}from"../../utils/hapticUtils.js";import{renderSlotIcon}from"../AppIcon/slotIcon.js";import{Skeleton}from"../Skeleton/index.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const toneFor=(e,r)=>{switch(r){case"primary":return{base:e.colors.primaryMuted,on:e.colors.primary,border:e.colors.primary,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedBorder:e.colors.primary};case"success":return{base:e.colors.background.tertiary,on:e.colors.success,border:e.colors.success,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedBorder:e.colors.primary};case"warning":return{base:e.colors.background.tertiary,on:e.colors.warning,border:e.colors.warning,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedBorder:e.colors.primary};case"error":return{base:e.colors.background.tertiary,on:e.colors.error,border:e.colors.error,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedBorder:e.colors.primary};case"info":return{base:e.colors.background.tertiary,on:e.colors.info,border:e.colors.info,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedBorder:e.colors.primary};default:return{base:e.colors.background.tertiary,on:e.colors.text.primary,border:e.colors.border.primary,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedBorder:e.colors.primary}}},SOFT_FILL_OPACITY=.14,SOFT_SELECTED_FILL_OPACITY=.24,sizeMap={sm:{paddingH:10,paddingV:4,fontSize:12,minHeight:26,closeSize:16,closeFont:12,gap:6,iconSize:14},md:{paddingH:12,paddingV:6,fontSize:13,minHeight:32,closeSize:18,closeFont:13,gap:8,iconSize:16}},Chip=forwardRef((e,r)=>{const{label:o,selected:s=!1,selectionMode:t="single",onPress:i,onClose:l,leftIcon:n,iconVariant:c,variant:a="filled",tone:d="neutral",size:p="md",disabled:m=!1,loading:g=!1,accessibilityLabel:b,haptic:u,style:y,textStyle:f,containerStyle:h,closeButtonStyle:S,closeIconStyle:z,testID:x}=e,C=useTheme(),j=!!i&&!m,{scale:H,pressIn:M,pressOut:k}=usePressAnimation({enabled:j}),w=useMemo(()=>toneFor(C,d),[C,d]),I=C.components.chip?.[p],_={paddingH:I?.paddingHorizontal??sizeMap[p].paddingH,paddingV:I?.paddingVertical??sizeMap[p].paddingV,fontSize:I?.fontSize??sizeMap[p].fontSize,minHeight:I?.minHeight??sizeMap[p].minHeight,closeSize:I?.closeSize??sizeMap[p].closeSize,closeFont:I?.closeFontSize??sizeMap[p].closeFont,gap:I?.gap??sizeMap[p].gap,iconSize:I?.iconSize??sizeMap[p].iconSize},F="filled"===a,O="soft"===a,B=(()=>{if(O){const e=s?w.selectedOn:w.on;return tintOf(e,s?.24:.14,s?w.selectedBg:w.base)}return s?F?w.selectedBg:"transparent":F?w.base:"transparent"})(),P=O?"transparent":s?w.selectedBorder:F?"transparent":w.border,V=m?C.colors.text.disabled:s?w.selectedOn:w.on,L=F||O?0:C.colors.border.width,handlePress=()=>{if(!j)return;const e=resolveHaptic(u,"selection");e&&triggerHaptic(e),i?.()},R=b??o,T=_jsxs(View,{style:styles.row,children:[n?_jsx(View,{style:{marginRight:_.gap},children:renderSlotIcon(n,{color:V,size:_.iconSize,disabled:m},c)}):null,_jsx(Text,{style:[styles.label,{color:V,fontSize:_.fontSize,...fontFor(C,"medium")},f],numberOfLines:1,children:o??" "}),l?_jsx(Pressable,{onPress:()=>{m||(!1!==u&&triggerHaptic("impactLight"),l?.())},disabled:m,accessibilityRole:"button",accessibilityLabel:`Remove ${o}`,accessibilityState:{disabled:m},hitSlop:6,style:({pressed:e})=>[styles.close,{width:_.closeSize,height:_.closeSize,borderRadius:_.closeSize/2,...smoothCorners,marginLeft:_.gap,backgroundColor:e?C.colors.surface.pressed:C.colors.surface.hovered},S],children:_jsx(Text,{style:[{color:V,fontSize:_.closeFont,...fontFor(C,"bold"),lineHeight:_.closeFont+2},z],allowFontScaling:!1,children:"×"})}):null]}),A={paddingHorizontal:_.paddingH,paddingVertical:_.paddingV,minHeight:_.minHeight,borderRadius:C.radius.full,...smoothCorners,backgroundColor:B,borderWidth:L,borderColor:P,opacity:m?.55:1};let v;return v=j?_jsx(Animated.View,{style:{transform:[{scale:H}],alignSelf:"flex-start"},children:_jsx(Pressable,{ref:r,onPress:handlePress,onPressIn:M,onPressOut:k,disabled:!j,accessibilityRole:"multiple"===t?"checkbox":"button",accessibilityLabel:R,accessibilityState:"multiple"===t?{checked:s,disabled:m}:{selected:s,disabled:m},android_ripple:{color:C.colors.surface.pressed,borderless:!1},testID:x,style:({pressed:e})=>[styles.base,A,e&&"outlined"===a?{backgroundColor:C.colors.surface.pressed}:null,h,y],children:T})}):_jsx(View,{ref:r,style:[styles.base,A,h,y],accessible:!0,accessibilityRole:"text",accessibilityLabel:R,accessibilityState:{selected:s,disabled:m},testID:x,children:T}),g?_jsx(ChipSkeleton,{...e}):v});Chip.displayName="Chip";const ChipSkeleton=({label:e,size:r="md",leftIcon:o,onClose:s,style:t,containerStyle:i})=>{const l=sizeMap[r],n=Math.max(40,Math.min(120,7*(e??"").length)),c=l.minHeight,a=c/2,d=n+2*l.paddingH+(void 0!==o?l.gap+14:0)+(void 0!==s?l.gap+l.closeSize:0);return _jsx(Skeleton,{width:d,height:c,radius:a,style:[{alignSelf:"flex-start"},i,t]})};ChipSkeleton.displayName="ChipSkeleton",Chip.Skeleton=ChipSkeleton;const styles=StyleSheet.create({base:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",justifyContent:"center"},row:{flexDirection:"row",alignItems:"center"},label:{textAlign:"center"},close:{alignItems:"center",justifyContent:"center"}});export{Chip};export default Chip;
1
+ "use strict";import{forwardRef,useMemo}from"react";import{Animated,Pressable,StyleSheet,Text,View}from"react-native";import{usePressAnimation}from"../../hooks/usePressAnimation.js";import{fontFor,useTheme}from"../../theme/index.js";import{tintOf}from"../../utils/color.js";import{smoothCorners}from"../../utils/corners.js";import{resolveHaptic,triggerHaptic}from"../../utils/hapticUtils.js";import{renderSlotIcon}from"../AppIcon/slotIcon.js";import{Skeleton}from"../Skeleton/index.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const toneFor=(e,r)=>{switch(r){case"primary":return{base:e.colors.primaryMuted,on:e.colors.primary,ink:e.colors.toneText.primary,border:e.colors.primary,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"success":return{base:e.colors.background.tertiary,on:e.colors.success,ink:e.colors.toneText.success,border:e.colors.success,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"warning":return{base:e.colors.background.tertiary,on:e.colors.warning,ink:e.colors.toneText.warning,border:e.colors.warning,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"error":return{base:e.colors.background.tertiary,on:e.colors.error,ink:e.colors.toneText.error,border:e.colors.error,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"info":return{base:e.colors.background.tertiary,on:e.colors.info,ink:e.colors.toneText.info,border:e.colors.info,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};default:return{base:e.colors.background.tertiary,on:e.colors.text.primary,ink:e.colors.text.primary,border:e.colors.border.primary,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary}}},SOFT_FILL_OPACITY=.14,SOFT_SELECTED_FILL_OPACITY=.24,sizeMap={sm:{paddingH:10,paddingV:4,fontSize:12,minHeight:26,closeSize:16,closeFont:12,gap:6,iconSize:14},md:{paddingH:12,paddingV:6,fontSize:13,minHeight:32,closeSize:18,closeFont:13,gap:8,iconSize:16}},Chip=forwardRef((e,r)=>{const{label:o,selected:s=!1,selectionMode:t="single",onPress:i,onClose:l,leftIcon:n,iconVariant:c,variant:a="filled",tone:d="neutral",size:p="md",disabled:m=!1,loading:y=!1,accessibilityLabel:g,haptic:b,style:u,textStyle:f,containerStyle:h,closeButtonStyle:S,closeIconStyle:x,testID:z}=e,k=useTheme(),I=!!i&&!m,{scale:C,pressIn:j,pressOut:H}=usePressAnimation({enabled:I}),M=useMemo(()=>toneFor(k,d),[k,d]),T=k.components.chip?.[p],w={paddingH:T?.paddingHorizontal??sizeMap[p].paddingH,paddingV:T?.paddingVertical??sizeMap[p].paddingV,fontSize:T?.fontSize??sizeMap[p].fontSize,minHeight:T?.minHeight??sizeMap[p].minHeight,closeSize:T?.closeSize??sizeMap[p].closeSize,closeFont:T?.closeFontSize??sizeMap[p].closeFont,gap:T?.gap??sizeMap[p].gap,iconSize:T?.iconSize??sizeMap[p].iconSize},_="filled"===a,F="soft"===a,B=(()=>{if(F){const e=s?M.selectedOn:M.on;return tintOf(e,s?.24:.14,s?M.selectedBg:M.base)}return s?_?M.selectedBg:"transparent":_?M.base:"transparent"})(),O=F?"transparent":s?M.selectedBorder:_?"transparent":M.border,P=m?k.colors.text.disabled:s?F?k.colors.text.primary:M.selectedInk:M.ink,V=_||F?0:k.colors.border.width,handlePress=()=>{if(!I)return;const e=resolveHaptic(b,"selection");e&&triggerHaptic(e),i?.()},L=g??o,v=_jsxs(View,{style:styles.row,children:[n?_jsx(View,{style:{marginRight:w.gap},children:renderSlotIcon(n,{color:P,size:w.iconSize,disabled:m},c)}):null,_jsx(Text,{style:[styles.label,{color:P,fontSize:w.fontSize,...fontFor(k,"medium")},f],numberOfLines:1,children:o??" "}),l?_jsx(Pressable,{onPress:()=>{m||(!1!==b&&triggerHaptic("impactLight"),l?.())},disabled:m,accessibilityRole:"button",accessibilityLabel:`Remove ${o}`,accessibilityState:{disabled:m},"aria-disabled":m,hitSlop:6,style:({pressed:e})=>[styles.close,{width:w.closeSize,height:w.closeSize,borderRadius:w.closeSize/2,...smoothCorners,marginLeft:w.gap,backgroundColor:e?k.colors.surface.pressed:k.colors.surface.hovered},S],children:_jsx(Text,{style:[{color:P,fontSize:w.closeFont,...fontFor(k,"bold"),lineHeight:w.closeFont+2},x],allowFontScaling:!1,children:"×"})}):null]}),A={paddingHorizontal:w.paddingH,paddingVertical:w.paddingV,minHeight:w.minHeight,borderRadius:k.radius.full,...smoothCorners,backgroundColor:B,borderWidth:V,borderColor:O,opacity:m?.55:1};let R;return R=I?_jsx(Animated.View,{style:{transform:[{scale:C}],alignSelf:"flex-start"},children:_jsx(Pressable,{ref:r,onPress:handlePress,onPressIn:j,onPressOut:H,disabled:!I,accessibilityRole:"multiple"===t?"checkbox":"button",accessibilityLabel:L,accessibilityState:"multiple"===t?{checked:s,disabled:m}:{selected:s,disabled:m},"aria-checked":"multiple"===t?s:void 0,"aria-selected":"multiple"===t?void 0:s,"aria-disabled":m,android_ripple:{color:k.colors.surface.pressed,borderless:!1},testID:z,style:({pressed:e})=>[styles.base,A,e&&"outlined"===a?{backgroundColor:k.colors.surface.pressed}:null,h,u],children:v})}):_jsx(View,{ref:r,style:[styles.base,A,h,u],accessible:!0,accessibilityRole:"text",accessibilityLabel:L,accessibilityState:{selected:s,disabled:m},"aria-selected":s,"aria-disabled":m,testID:z,children:v}),y?_jsx(ChipSkeleton,{...e}):R});Chip.displayName="Chip";const ChipSkeleton=({label:e,size:r="md",leftIcon:o,onClose:s,style:t,containerStyle:i})=>{const l=sizeMap[r],n=Math.max(40,Math.min(120,7*(e??"").length)),c=l.minHeight,a=c/2,d=n+2*l.paddingH+(void 0!==o?l.gap+14:0)+(void 0!==s?l.gap+l.closeSize:0);return _jsx(Skeleton,{width:d,height:c,radius:a,style:[{alignSelf:"flex-start"},i,t]})};ChipSkeleton.displayName="ChipSkeleton",Chip.Skeleton=ChipSkeleton;const styles=StyleSheet.create({base:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",justifyContent:"center"},row:{flexDirection:"row",alignItems:"center"},label:{textAlign:"center"},close:{alignItems:"center",justifyContent:"center"}});export{Chip};export default Chip;
@@ -1 +1 @@
1
- "use strict";import React,{forwardRef,useCallback,useMemo}from"react";import{Pressable,StyleSheet,Text,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{tintOf}from"../../utils/color.js";import{smoothCorners}from"../../utils/corners.js";import{renderSlotIcon}from"../AppIcon/slotIcon.js";import{RadioDot}from"../Radio/RadioDot.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const sizeTokens={sm:{paddingHorizontal:10,chipPaddingHorizontal:12,paddingVertical:6,fontSize:13,minHeight:32,iconSize:14},md:{paddingHorizontal:12,chipPaddingHorizontal:16,paddingVertical:8,fontSize:15,minHeight:40,iconSize:16},lg:{paddingHorizontal:16,chipPaddingHorizontal:20,paddingVertical:11,fontSize:16,minHeight:48,iconSize:18}},ChoiceGroup=forwardRef((e,i)=>{const{options:o,getOptionLabel:r,getOptionValue:t,getOptionDisabled:l,getOptionDescription:n,getOptionIcon:s,getOptionColor:a,renderOption:c,variant:d="card",indicatorPosition:p="trailing",direction:u="row",gap:m,wrap:g=!1,fullWidth:b,disabled:h=!1,size:f="md",haptic:x,accessibilityLabel:y,style:z,optionStyle:S,testID:C}=e,j=useTheme(),H=useMemo(()=>buildStyles(j),[j]),w=sizeTokens[f],V=useCallback(e=>r?r(e):e.label??"",[r]),k=useCallback(e=>t?t(e):e.value,[t]),_=useCallback(e=>l?l(e):!0===e.disabled,[l]),O=useCallback(e=>n?n(e):e.description,[n]),v=useCallback(e=>s?s(e):e.icon,[s]),D=useCallback(e=>a?a(e):e.color,[a]),R="multiple"===e.selectionMode,{min:T,max:L}=e,[P,F]=useControllableState({value:e.value,defaultValue:e.defaultValue??(R?[]:void 0),onChange:e.onChange}),G=Array.isArray(P)?P:[],I=useCallback(e=>{const i=k(e);if(R){const e=G.includes(i);if(e&&null!=T&&G.length<=T)return;if(!e&&null!=L&&G.length>=L)return;const o=resolveHaptic(x,"selection");return o&&triggerHaptic(o),void F(e?G.filter(e=>e!==i):[...G,i])}const o=resolveHaptic(x,"selection");o&&triggerHaptic(o),F(i)},[x,R,T,L,G,F,k]),W=b??("card"===d&&"row"===u&&!g),A=j.components.choiceGroup?.selectedFillOpacity??.12,M=j.components.choiceGroup?.borderRadius??j.radius.md,surfaceFor=(e,i,o)=>i?{borderColor:j.colors.border.primary,backgroundColor:j.colors.surface.disabled}:{borderColor:e?o:j.colors.border.primary,backgroundColor:e?tintOf(o,A,j.colors.surface.selected):j.colors.background.primary},renderIcon=(e,i,o,r)=>{const t=v(e);if(null==t)return null;return renderSlotIcon("string"==typeof t&&i?{name:t,variant:"bold"}:t,{color:o,size:w.iconSize,disabled:r})},renderChip=e=>{const{option:i,selected:o,disabled:r,color:t}=e,l=r?j.colors.text.disabled:o?t:j.colors.text.primary,n=renderIcon(i,o,l,r);return _jsxs(View,{style:[H.chip,{minHeight:w.minHeight,paddingHorizontal:w.chipPaddingHorizontal,paddingVertical:w.paddingVertical,borderRadius:j.radius.full,...smoothCorners,borderWidth:j.colors.border.width,...surfaceFor(o,r,t),columnGap:j.spacing.xs}],children:[n?_jsx(View,{children:n}):null,_jsx(Text,{style:[H.cardLabel,{color:l,fontSize:w.fontSize,...fontFor(j,"medium")}],numberOfLines:1,children:V(i)})]})},renderDefaultCard=e=>{const{option:i,selected:o,disabled:r,color:t}=e,l=D(i),n=r?j.colors.text.disabled:l??j.colors.text.primary,s=O(i),a=renderIcon(i,o,n,r),c=_jsx(RadioDot,{selected:o,color:t,disabled:r,size:f});return _jsxs(View,{style:[H.card,{minHeight:w.minHeight,paddingHorizontal:w.paddingHorizontal,paddingVertical:w.paddingVertical,borderRadius:M,...smoothCorners,borderWidth:j.colors.border.width,...surfaceFor(o,r,t),columnGap:j.spacing.sm}],children:["leading"===p?c:null,a?_jsx(View,{children:a}):null,_jsxs(View,{style:H.cardTextWrap,children:[_jsx(Text,{style:[H.cardLabel,{color:n,fontSize:w.fontSize,...fontFor(j,"medium")}],numberOfLines:1,children:V(i)}),s?_jsx(Text,{style:[H.cardDescription,{color:j.colors.text.tertiary,fontSize:j.typography.fontSize.xs}],numberOfLines:2,children:s}):null]}),"trailing"===p?c:null]})};return _jsx(View,{ref:i,accessibilityRole:R?void 0:"radiogroup",accessibilityLabel:y,accessibilityState:{disabled:h},testID:C,style:[{flexDirection:u,gap:m??j.spacing.sm,flexWrap:g?"wrap":"nowrap"},z],children:o.map((e,i)=>{const o=k(e),r=R?G.includes(o):P===o,t=R&&null!=L&&!r&&G.length>=L,l=h||t||_(e),n=D(e)??j.colors.primary;return _jsx(Pressable,{onPress:()=>{l||I(e)},disabled:l,accessibilityRole:R?"checkbox":"radio",accessibilityLabel:V(e),accessibilityState:{checked:r,disabled:l},style:[W?H.stretchOption:null,{opacity:l&&c?.55:1},S],children:({pressed:o})=>{const t={option:e,index:i,selected:r,pressed:o&&!l,disabled:l,color:n};return _jsx(_Fragment,{children:c?c(t):"chip"===d?renderChip(t):renderDefaultCard(t)})}},String(o))})})});ChoiceGroup.displayName="ChoiceGroup";const buildStyles=e=>StyleSheet.create({stretchOption:{flex:1},card:{flexDirection:"row",alignItems:"center"},chip:{flexDirection:"row",alignItems:"center",justifyContent:"center"},cardTextWrap:{flex:1},cardLabel:{includeFontPadding:!1},cardDescription:{includeFontPadding:!1,marginTop:2}});export{ChoiceGroup};export default ChoiceGroup;
1
+ "use strict";import{forwardRef,useCallback,useMemo}from"react";import{Pressable,StyleSheet,Text,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{tintOf}from"../../utils/color.js";import{smoothCorners}from"../../utils/corners.js";import{renderSlotIcon}from"../AppIcon/slotIcon.js";import{RadioDot}from"../Radio/RadioDot.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const sizeTokens={sm:{paddingHorizontal:10,chipPaddingHorizontal:12,paddingVertical:6,fontSize:13,minHeight:32,iconSize:14},md:{paddingHorizontal:12,chipPaddingHorizontal:16,paddingVertical:8,fontSize:15,minHeight:40,iconSize:16},lg:{paddingHorizontal:16,chipPaddingHorizontal:20,paddingVertical:11,fontSize:16,minHeight:48,iconSize:18}},ChoiceGroup=forwardRef((e,i)=>{const{options:o,getOptionLabel:r,getOptionValue:t,getOptionDisabled:l,getOptionDescription:n,getOptionIcon:a,getOptionColor:s,renderOption:c,variant:d="card",indicatorPosition:p="trailing",direction:u="row",gap:m,wrap:b=!1,fullWidth:g,disabled:h=!1,size:f="md",labelLines:x=1,descriptionLines:y=2,haptic:z,accessibilityLabel:S,style:C,optionStyle:j,testID:H}=e,w=useTheme(),k=useMemo(()=>buildStyles(w),[w]),V=sizeTokens[f],_=useCallback(e=>r?r(e):e.label??"",[r]),O=useCallback(e=>t?t(e):e.value,[t]),v=useCallback(e=>l?l(e):!0===e.disabled,[l]),D=useCallback(e=>n?n(e):e.description,[n]),L=useCallback(e=>a?a(e):e.icon,[a]),R=useCallback(e=>s?s(e):e.color,[s]),T="multiple"===e.selectionMode,{min:P,max:F}=e,[G,I]=useControllableState({value:e.value,defaultValue:e.defaultValue??(T?[]:void 0),onChange:e.onChange}),M=Array.isArray(G)?G:[],W=useCallback(e=>{const i=O(e);if(T){const e=M.includes(i);if(e&&null!=P&&M.length<=P)return;if(!e&&null!=F&&M.length>=F)return;const o=resolveHaptic(z,"selection");return o&&triggerHaptic(o),void I(e?M.filter(e=>e!==i):[...M,i])}const o=resolveHaptic(z,"selection");o&&triggerHaptic(o),I(i)},[z,T,P,F,M,I,O]),A=g??("card"===d&&"row"===u&&!b),$=w.components.choiceGroup?.selectedFillOpacity??.12,N=w.components.choiceGroup?.borderRadius??w.radius.md,surfaceFor=(e,i,o)=>i?{borderColor:w.colors.border.primary,backgroundColor:w.colors.surface.disabled}:{borderColor:e?o:w.colors.border.primary,backgroundColor:e?tintOf(o,$,w.colors.surface.selected):w.colors.background.primary},renderIcon=(e,i,o,r)=>{const t=L(e);if(null==t)return null;return renderSlotIcon("string"==typeof t&&i?{name:t,variant:"bold"}:t,{color:o,size:V.iconSize,disabled:r})},renderChip=e=>{const{option:i,selected:o,disabled:r,color:t}=e,l=r?w.colors.text.disabled:o?t:w.colors.text.primary,n=renderIcon(i,o,l,r);return _jsxs(View,{style:[k.chip,{minHeight:V.minHeight,paddingHorizontal:V.chipPaddingHorizontal,paddingVertical:V.paddingVertical,borderRadius:w.radius.full,...smoothCorners,borderWidth:w.colors.border.width,...surfaceFor(o,r,t),columnGap:w.spacing.xs}],children:[n?_jsx(View,{children:n}):null,_jsx(Text,{style:[k.cardLabel,{color:l,fontSize:V.fontSize,...fontFor(w,"medium")}],numberOfLines:x,ellipsizeMode:"tail",children:_(i)})]})},renderDefaultCard=e=>{const{option:i,selected:o,disabled:r,color:t}=e,l=R(i),n=r?w.colors.text.disabled:l??w.colors.text.primary,a=D(i),s=renderIcon(i,o,n,r),c=_jsx(RadioDot,{selected:o,color:t,disabled:r,size:f});return _jsxs(View,{style:[k.card,{minHeight:V.minHeight,paddingHorizontal:V.paddingHorizontal,paddingVertical:V.paddingVertical,borderRadius:N,...smoothCorners,borderWidth:w.colors.border.width,...surfaceFor(o,r,t),columnGap:w.spacing.sm}],children:["leading"===p?c:null,s?_jsx(View,{children:s}):null,_jsxs(View,{style:k.cardTextWrap,children:[_jsx(Text,{style:[k.cardLabel,{color:n,fontSize:V.fontSize,...fontFor(w,"medium")}],numberOfLines:x,ellipsizeMode:"tail",children:_(i)}),a?_jsx(Text,{style:[k.cardDescription,{color:o?w.colors.text.secondary:w.colors.text.tertiary,fontSize:w.typography.fontSize.xs}],numberOfLines:y,ellipsizeMode:"tail",children:a}):null]}),"trailing"===p?c:null]})};return _jsx(View,{ref:i,accessibilityRole:T?void 0:"radiogroup",accessibilityLabel:S,accessibilityState:{disabled:h},"aria-disabled":h,testID:H,style:[{flexDirection:u,gap:m??w.spacing.sm,flexWrap:b?"wrap":"nowrap"},C],children:o.map((e,i)=>{const o=O(e),r=T?M.includes(o):G===o,t=T&&null!=F&&!r&&M.length>=F,l=h||t||v(e),n=R(e)??w.colors.primary,a=c||"card"!==d?void 0:D(e);return _jsx(Pressable,{onPress:()=>{l||W(e)},disabled:l,accessibilityRole:T?"checkbox":"radio",accessibilityLabel:a?`${_(e)}, ${a}`:_(e),accessibilityState:{checked:r,disabled:l},"aria-checked":r,"aria-disabled":l,style:[A?k.stretchOption:null,{opacity:l&&c?.55:1},j],children:({pressed:o})=>{const t={option:e,index:i,selected:r,pressed:o&&!l,disabled:l,color:n};return _jsx(_Fragment,{children:c?c(t):"chip"===d?renderChip(t):renderDefaultCard(t)})}},String(o))})})});ChoiceGroup.displayName="ChoiceGroup";const buildStyles=e=>StyleSheet.create({stretchOption:{flex:1},card:{flexDirection:"row",alignItems:"center"},chip:{flexDirection:"row",alignItems:"center",justifyContent:"center"},cardTextWrap:{flex:1},cardLabel:{includeFontPadding:!1},cardDescription:{includeFontPadding:!1,marginTop:2}});export{ChoiceGroup};export default ChoiceGroup;
@@ -1 +1 @@
1
- "use strict";import React,{forwardRef,useCallback,useEffect,useImperativeHandle,useMemo,useState}from"react";import{StyleSheet,useWindowDimensions,View}from"react-native";import Animated,{cancelAnimation,Easing,runOnJS,useAnimatedStyle,useSharedValue,withRepeat,withTiming}from"react-native-reanimated";import Svg,{Path,Polygon}from"react-native-svg";import{useReducedMotion}from"../../hooks/index.js";import{useTheme}from"../../theme/index.js";import{jsx as _jsx}from"react/jsx-runtime";const TAU=2*Math.PI,DEG=Math.PI/180,SPEED_FACTOR={slow:1.6,normal:1,fast:.6};export const DEFAULT_PHYSICS={velocity:1,drag:1,fallSpeed:1,spread:0};const PRESET_SHAPES={pop:["strip","strip","strip","square","circle","triangle","star","streamer"],rain:["strip","strip","strip","circle","square"],fireworks:["circle","circle","star","star","triangle","strip"]},rand=(e,a)=>e+Math.random()*(a-e),pick=e=>e[Math.floor(Math.random()*e.length)]??e[0],commonPiece=(e,a)=>({color:e.colors[a%e.colors.length]??e.colors[0],size:e.baseSize*rand(.6,1.4),shape:pick(e.shapes),rotations:rand(1,5),rotateDir:Math.random()<.5?1:-1,flutterFreq:rand(2,5)}),popPiece=(e,a)=>{const r=e.physics.spread>0?e.physics.spread/2:100,t=(-90+rand(-r,r))*DEG,s=rand(1.8,4.2)*e.physics.velocity;return{...commonPiece(e,a),x0Frac:e.originXFrac,y0Frac:e.originYFrac,vxFrac:Math.cos(t)*s*.7,vyFrac:Math.sin(t)*s,drag:rand(5.5,7.5)*e.physics.drag,terminalFrac:rand(.22,.44)*e.physics.fallSpeed,delay:rand(0,.05),swayAmp:rand(4,16),swayFreq:rand(1,3)}},rainPiece=(e,a)=>({...commonPiece(e,a),x0Frac:Math.random(),y0Frac:-.05,vxFrac:rand(-.12,.12)*e.physics.velocity,vyFrac:rand(.05,.25)*e.physics.velocity,drag:rand(2.5,4)*e.physics.drag,terminalFrac:rand(.95,1.35)*e.physics.fallSpeed,delay:rand(0,.35),swayAmp:rand(10,30),swayFreq:rand(1,3)}),FIREWORK_BURSTS=4,buildFireworks=(e,a)=>{const r=Math.max(1,Math.round(e/4)),t=a.physics.spread>0?a.physics.spread/2:180,s=[];for(let i=0;i<4&&s.length<e;i+=1){const o=rand(.18,.82),n=rand(.18,.52),c=i/4*.5+rand(0,.06);for(let i=0;i<r&&s.length<e;i+=1){const e=rand(-t,t)*DEG,r=rand(1.4,3.4)*a.physics.velocity;s.push({...commonPiece(a,s.length),x0Frac:o,y0Frac:n,vxFrac:Math.cos(e)*r*.7,vyFrac:Math.sin(e)*r,drag:rand(6.5,8.5)*a.physics.drag,terminalFrac:rand(.18,.38)*a.physics.fallSpeed,delay:c,swayAmp:rand(3,12),swayFreq:rand(1,3)})}}return s};export const buildPieces=(e,a,r)=>{if("fireworks"===a)return buildFireworks(e,r);const t="rain"===a?rainPiece:popPiece;return Array.from({length:e},(e,a)=>t(r,a))};const SHAPE_BOX={strip:{w:1,h:.45},square:{w:1,h:1},circle:{w:1,h:1},triangle:{w:1,h:1},star:{w:1.2,h:1.2},streamer:{w:3,h:1.2}},TRIANGLE_POINTS="50,4 96,96 4,96",STAR_POINTS="50,2 61,36 97,36 68,58 79,94 50,72 21,94 32,58 3,36 39,36",STREAMER_PATH="M2,50 C20,6 44,94 62,50 S92,6 98,50",ShapeBody=({shape:e,color:a})=>"triangle"===e||"star"===e?_jsx(Svg,{width:"100%",height:"100%",viewBox:"0 0 100 100",children:_jsx(Polygon,{points:"star"===e?STAR_POINTS:TRIANGLE_POINTS,fill:a})}):"streamer"===e?_jsx(Svg,{width:"100%",height:"100%",viewBox:"0 0 100 100",preserveAspectRatio:"none",children:_jsx(Path,{d:STREAMER_PATH,stroke:a,strokeWidth:22,strokeLinecap:"round",fill:"none"})}):null,ConfettiPiece=({piece:e,progress:a,width:r,height:t,fadeOut:s})=>{const i=useAnimatedStyle(()=>{const i=1-e.delay,o=i<=0?0:Math.min(1,Math.max(0,(a.value-e.delay)/i)),n=(1-Math.exp(-e.drag*o))/e.drag,c=e.x0Frac*r+e.vxFrac*r*n,l=e.y0Frac*t+e.terminalFrac*t*o+(e.vyFrac-e.terminalFrac)*t*n,h=Math.sin(o*e.swayFreq*TAU)*e.swayAmp,d=e.rotateDir*e.rotations*360*o,p=.35+.65*Math.abs(Math.cos(o*e.flutterFreq*TAU));return{opacity:s?Math.max(0,1-Math.max(0,o-.75)/.25):1,transform:[{translateX:c+h},{translateY:l},{rotate:`${d}deg`},{scaleY:p}]}}),o=SHAPE_BOX[e.shape],n="triangle"===e.shape||"star"===e.shape||"streamer"===e.shape;return _jsx(Animated.View,{style:[{position:"absolute",width:e.size*o.w,height:e.size*o.h,borderRadius:"circle"===e.shape?e.size*o.h/2:1,backgroundColor:n?"transparent":e.color},i],children:_jsx(ShapeBody,{shape:e.shape,color:e.color})})},Confetti=forwardRef(({count:e=80,colors:a,preset:r="pop",shapes:t,speed:s="normal",physics:i,origin:o,duration:n=2800,fadeOut:c=!0,autoStart:l=!1,recycle:h=!1,size:d=10,onComplete:p,style:m,testID:u},y)=>{const g=useTheme(),S=useReducedMotion(),w=useWindowDimensions(),[f,F]=useState({width:w.width,height:w.height}),[x,P]=useState(!1),[A,v]=useState([]),E=useMemo(()=>a??[g.colors.primary,g.colors.secondary,g.colors.success,g.colors.warning,g.colors.error,g.colors.info],[a,g.colors]),M=useSharedValue(0),T=n*SPEED_FACTOR[s],R=useCallback(()=>{P(!1),p?.()},[p]),_=useCallback(()=>{if(S)return void p?.();cancelAnimation(M),M.value=0,v(buildPieces(e,r,{colors:E,baseSize:d,originXFrac:o?o.x/Math.max(1,f.width):.5,originYFrac:o?o.y/Math.max(1,f.height):.5,physics:{...DEFAULT_PHYSICS,...i},shapes:t??PRESET_SHAPES[r]})),P(!0);const a=withTiming(1,{duration:T,easing:Easing.linear},e=>{"worklet";e&&!h&&runOnJS(R)()});M.value=h?withRepeat(a,-1,!1):a},[S,M,T,h,R,p,e,E,r,t,i,d,o,f.width,f.height]),C=useCallback(()=>{cancelAnimation(M),P(!1)},[M]);useImperativeHandle(y,()=>({start:_,stop:C}),[_,C]),useEffect(()=>(l&&_(),()=>cancelAnimation(M)),[]);const k=useCallback(e=>{const{width:a,height:r}=e.nativeEvent.layout;a>0&&r>0&&F({width:a,height:r})},[]);return _jsx(View,{style:[StyleSheet.absoluteFill,m],pointerEvents:"none",onLayout:k,testID:u,children:x?A.map((e,a)=>_jsx(ConfettiPiece,{piece:e,progress:M,width:f.width,height:f.height,fadeOut:c},a)):null})});Confetti.displayName="Confetti";export{Confetti};export default Confetti;
1
+ "use strict";import{forwardRef,useCallback,useEffect,useImperativeHandle,useMemo,useState}from"react";import{StyleSheet,useWindowDimensions,View}from"react-native";import Animated,{cancelAnimation,Easing,runOnJS,useAnimatedStyle,useSharedValue,withRepeat,withTiming}from"react-native-reanimated";import Svg,{Path,Polygon}from"react-native-svg";import{useReducedMotion}from"../../hooks/index.js";import{useTheme}from"../../theme/index.js";import{jsx as _jsx}from"react/jsx-runtime";const TAU=2*Math.PI,DEG=Math.PI/180,SPEED_FACTOR={slow:1.6,normal:1,fast:.6};export const DEFAULT_PHYSICS={velocity:1,drag:1,fallSpeed:1,spread:0};const PRESET_SHAPES={pop:["strip","strip","strip","square","circle","triangle","star","streamer"],rain:["strip","strip","strip","circle","square"],fireworks:["circle","circle","star","star","triangle","strip"]},rand=(e,r)=>e+Math.random()*(r-e),pick=e=>e[Math.floor(Math.random()*e.length)]??e[0],commonPiece=(e,r)=>({color:e.colors[r%e.colors.length]??e.colors[0],size:e.baseSize*rand(.6,1.4),shape:pick(e.shapes),rotations:rand(1,5),rotateDir:Math.random()<.5?1:-1,flutterFreq:rand(2,5)}),popPiece=(e,r)=>{const a=e.physics.spread>0?e.physics.spread/2:100,t=(-90+rand(-a,a))*DEG,s=rand(1.8,4.2)*e.physics.velocity;return{...commonPiece(e,r),x0Frac:e.originXFrac,y0Frac:e.originYFrac,vxFrac:Math.cos(t)*s*.7,vyFrac:Math.sin(t)*s,drag:rand(5.5,7.5)*e.physics.drag,terminalFrac:rand(.22,.44)*e.physics.fallSpeed,delay:rand(0,.05),swayAmp:rand(4,16),swayFreq:rand(1,3)}},rainPiece=(e,r)=>({...commonPiece(e,r),x0Frac:Math.random(),y0Frac:-.05,vxFrac:rand(-.12,.12)*e.physics.velocity,vyFrac:rand(.05,.25)*e.physics.velocity,drag:rand(2.5,4)*e.physics.drag,terminalFrac:rand(.95,1.35)*e.physics.fallSpeed,delay:rand(0,.35),swayAmp:rand(10,30),swayFreq:rand(1,3)}),FIREWORK_BURSTS=4,buildFireworks=(e,r)=>{const a=Math.max(1,Math.round(e/4)),t=r.physics.spread>0?r.physics.spread/2:180,s=[];for(let i=0;i<4&&s.length<e;i+=1){const o=rand(.18,.82),n=rand(.18,.52),c=i/4*.5+rand(0,.06);for(let i=0;i<a&&s.length<e;i+=1){const e=rand(-t,t)*DEG,a=rand(1.4,3.4)*r.physics.velocity;s.push({...commonPiece(r,s.length),x0Frac:o,y0Frac:n,vxFrac:Math.cos(e)*a*.7,vyFrac:Math.sin(e)*a,drag:rand(6.5,8.5)*r.physics.drag,terminalFrac:rand(.18,.38)*r.physics.fallSpeed,delay:c,swayAmp:rand(3,12),swayFreq:rand(1,3)})}}return s};export const buildPieces=(e,r,a)=>{if("fireworks"===r)return buildFireworks(e,a);const t="rain"===r?rainPiece:popPiece;return Array.from({length:e},(e,r)=>t(a,r))};const SHAPE_BOX={strip:{w:1,h:.45},square:{w:1,h:1},circle:{w:1,h:1},triangle:{w:1,h:1},star:{w:1.2,h:1.2},streamer:{w:3,h:1.2}},TRIANGLE_POINTS="50,4 96,96 4,96",STAR_POINTS="50,2 61,36 97,36 68,58 79,94 50,72 21,94 32,58 3,36 39,36",STREAMER_PATH="M2,50 C20,6 44,94 62,50 S92,6 98,50",ShapeBody=({shape:e,color:r})=>"triangle"===e||"star"===e?_jsx(Svg,{width:"100%",height:"100%",viewBox:"0 0 100 100",children:_jsx(Polygon,{points:"star"===e?STAR_POINTS:TRIANGLE_POINTS,fill:r})}):"streamer"===e?_jsx(Svg,{width:"100%",height:"100%",viewBox:"0 0 100 100",preserveAspectRatio:"none",children:_jsx(Path,{d:STREAMER_PATH,stroke:r,strokeWidth:22,strokeLinecap:"round",fill:"none"})}):null,ConfettiPiece=({piece:e,progress:r,width:a,height:t,fadeOut:s})=>{const i=useAnimatedStyle(()=>{const i=1-e.delay,o=i<=0?0:Math.min(1,Math.max(0,(r.value-e.delay)/i)),n=(1-Math.exp(-e.drag*o))/e.drag,c=e.x0Frac*a+e.vxFrac*a*n,l=e.y0Frac*t+e.terminalFrac*t*o+(e.vyFrac-e.terminalFrac)*t*n,h=Math.sin(o*e.swayFreq*TAU)*e.swayAmp,d=e.rotateDir*e.rotations*360*o,p=.35+.65*Math.abs(Math.cos(o*e.flutterFreq*TAU));return{opacity:s?Math.max(0,1-Math.max(0,o-.75)/.25):1,transform:[{translateX:c+h},{translateY:l},{rotate:`${d}deg`},{scaleY:p}]}}),o=SHAPE_BOX[e.shape],n="triangle"===e.shape||"star"===e.shape||"streamer"===e.shape;return _jsx(Animated.View,{style:[{position:"absolute",width:e.size*o.w,height:e.size*o.h,borderRadius:"circle"===e.shape?e.size*o.h/2:1,backgroundColor:n?"transparent":e.color},i],children:_jsx(ShapeBody,{shape:e.shape,color:e.color})})},Confetti=forwardRef(({count:e=80,colors:r,preset:a="pop",shapes:t,speed:s="normal",physics:i,origin:o,duration:n=2800,fadeOut:c=!0,autoStart:l=!1,recycle:h=!1,size:d=10,onComplete:p,style:m,testID:u},y)=>{const g=useTheme(),S=useReducedMotion(),w=useWindowDimensions(),[f,F]=useState({width:w.width,height:w.height}),[x,P]=useState(!1),[A,v]=useState([]),E=useMemo(()=>r??[g.colors.primary,g.colors.secondary,g.colors.success,g.colors.warning,g.colors.error,g.colors.info],[r,g.colors]),M=useSharedValue(0),T=n*SPEED_FACTOR[s],_=useCallback(()=>{P(!1),p?.()},[p]),R=useCallback(()=>{if(S)return void p?.();cancelAnimation(M),M.value=0,v(buildPieces(e,a,{colors:E,baseSize:d,originXFrac:o?o.x/Math.max(1,f.width):.5,originYFrac:o?o.y/Math.max(1,f.height):.5,physics:{...DEFAULT_PHYSICS,...i},shapes:t??PRESET_SHAPES[a]})),P(!0);const r=withTiming(1,{duration:T,easing:Easing.linear},e=>{"worklet";e&&!h&&runOnJS(_)()});M.value=h?withRepeat(r,-1,!1):r},[S,M,T,h,_,p,e,E,a,t,i,d,o,f.width,f.height]),C=useCallback(()=>{cancelAnimation(M),P(!1)},[M]);useImperativeHandle(y,()=>({start:R,stop:C}),[R,C]),useEffect(()=>(l&&R(),()=>cancelAnimation(M)),[]);const k=useCallback(e=>{const{width:r,height:a}=e.nativeEvent.layout;r>0&&a>0&&F({width:r,height:a})},[]);return _jsx(View,{style:[StyleSheet.absoluteFill,m],pointerEvents:"none",onLayout:k,testID:u,children:x?A.map((e,r)=>_jsx(ConfettiPiece,{piece:e,progress:M,width:f.width,height:f.height,fadeOut:c},r)):null})});Confetti.displayName="Confetti";export{Confetti};export default Confetti;
@@ -1 +1 @@
1
- "use strict";import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{AccessibilityInfo,Animated,Easing,Modal,Pressable,StyleSheet,Text,View}from"react-native";import{GestureDetector,GestureHandlerRootView}from"react-native-gesture-handler";import{useSafeAreaInsets}from"react-native-safe-area-context";import{useDragToDismiss}from"../../hooks/useDragToDismiss.js";import{createAnimatedValue,setNativeValue,useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/index.js";import{smoothCorners}from"../../utils/corners.js";import{defaultIcons}from"../AppIcon/defaultIcons.js";import{PickerTrigger}from"../PickerTrigger/index.js";import{ToastHost}from"../Toast/ToastProvider.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const GRID_SIZE=12,DECADE_SPAN=10,startOfDay=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),isSameDay=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate(),toIso=e=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`,addMonths=(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),buildMonthMatrix=(e,t)=>{const a=e.getFullYear(),r=e.getMonth(),i=(new Date(a,r,1).getDay()-t+7)%7,o=[];for(let e=0;e<42;e+=1){const t=new Date(a,r,1-i+e);o.push({date:t,inMonth:t.getMonth()===r,iso:toIso(t)})}return o},weekdayLabels=(e,t)=>{const a=new Intl.DateTimeFormat(e,{weekday:"short"}),r=[];for(let e=0;e<7;e+=1){const i=new Date(1970,0,4+(t+e)%7);r.push(a.format(i))}return r},formatMonthYear=(e,t)=>new Intl.DateTimeFormat(t,{month:"long",year:"numeric"}).format(e),formatLongDate=(e,t)=>new Intl.DateTimeFormat(t,{weekday:"long",year:"numeric",month:"long",day:"numeric"}).format(e),decadeStartFor=e=>10*Math.floor(e/10),buildYearCells=e=>{const t=e-4;return Array.from({length:12},(e,a)=>t+a)},buildDecadeCells=e=>{const t=decadeStartFor(e)-40;return Array.from({length:12},(e,a)=>t+10*a)},DatePicker=e=>{const{value:t,onChange:a,onClose:r,minDate:i,maxDate:o,disabledDates:s,mode:n="modal",locale:l="en-IN",weekStartsOn:c=0,title:d="Select Date",confirmLabel:u="Confirm",cancelLabel:g="Cancel",style:m,containerStyle:y,headerLabelStyle:p,navButtonStyle:h,footerButtonStyle:f,haptic:b,testID:x,label:D,placeholder:w,helperText:v,error:C,required:S,disabled:j,size:k,variant:P,clearable:T,onClear:V,formatValue:R,triggerStyle:_}=e,A=void 0!==e.visible,[I,M]=useState(!1),F=A?e.visible:I,L=A?x:x?`${x}-calendar`:void 0,B=useTheme(),Y=useSafeAreaInsets(),z=useMemo(()=>buildStyles(B),[B]),[H,N]=useState(()=>startOfDay(new Date));useEffect(()=>{F&&N(startOfDay(new Date))},[F]);const $=t?startOfDay(t):H,[W,E]=useState($),[O,G]=useState(t?startOfDay(t):null),[q,X]=useState("days"),Z=useRef(createAnimatedValue(0)).current,J=useRef(createAnimatedValue(0)).current,K=useRef(createAnimatedValue(0)).current,Q=useRef(0),U=useRef(createAnimatedValue(0)).current,ee=useRef(createAnimatedValue(1)).current,te=useRef(createAnimatedValue(1)).current,ae=useRef(createAnimatedValue(1)).current,re=useRef(createAnimatedValue(1)).current,ie=useRef(createAnimatedValue(1)).current;useEffect(()=>{if(t){const e=startOfDay(t);G(e),E(e)}else G(null)},[t]),useEffect(()=>{if("modal"===n&&F){Z.setValue(0),setNativeValue(J,0),setNativeValue(K,0);const e=Animated.parallel([Animated.timing(Z,{toValue:1,duration:B.motion.duration.normal,easing:Easing.out(Easing.cubic),useNativeDriver:!1}),Animated.spring(J,{toValue:1,damping:B.motion.spring.gentle.damping,stiffness:B.motion.spring.gentle.stiffness,mass:B.motion.spring.gentle.mass,useNativeDriver:!0})]);return e.start(),()=>e.stop()}},[F,n,Z,J,K,B.motion]);const oe=useMemo(()=>{const e=new Set;return s?.forEach(t=>e.add(toIso(startOfDay(t)))),e},[s]),se=useMemo(()=>i?startOfDay(i):null,[i]),ne=useMemo(()=>o?startOfDay(o):null,[o]),le=useCallback(e=>!!(se&&e.getTime()<se.getTime())||(!!(ne&&e.getTime()>ne.getTime())||!!oe.has(toIso(e))),[se,ne,oe]),ce=useMemo(()=>buildMonthMatrix(W,c),[W,c]),de=useMemo(()=>buildYearCells(W.getFullYear()),[W]),ue=useMemo(()=>buildDecadeCells(W.getFullYear()),[W]),ge=useMemo(()=>weekdayLabels(l,c),[l,c]),me=useMemo(()=>{if("days"===q)return formatMonthYear(W,l);if("years"===q){return`${de[0]} - ${de[de.length-1]}`}return`${ue[0]} - ${ue[ue.length-1]+9}`},[W,ue,l,q,de]),ye=useCallback(e=>!!(se&&e<se.getFullYear())||!!(ne&&e>ne.getFullYear()),[se,ne]),pe=useCallback(e=>!!(se&&e+10-1<se.getFullYear())||!!(ne&&e>ne.getFullYear()),[se,ne]),he=useCallback(e=>{!1!==b&&triggerHaptic("impactLight");const t=e>0?1:-1,a=B.components.datePicker?.monthSlideDistance??32,r=B.components.datePicker?.monthSlideOutDuration??B.motion.duration.fast??140,i=B.components.datePicker?.monthSlideInDuration??B.motion.duration.fast??160;Animated.sequence([Animated.parallel([Animated.timing(U,{toValue:-t*a,duration:r,easing:Easing.out(Easing.quad),useNativeDriver:!0}),Animated.timing(ee,{toValue:0,duration:r,useNativeDriver:!0})]),Animated.timing(U,{toValue:t*a,duration:0,useNativeDriver:!0}),Animated.parallel([Animated.timing(U,{toValue:0,duration:i,easing:Easing.out(Easing.cubic),useNativeDriver:!0}),Animated.timing(ee,{toValue:1,duration:i,useNativeDriver:!0})])]).start();const o=addMonths(W,e);E(o),AccessibilityInfo.announceForAccessibility(formatMonthYear(o,l))},[W,b,l,ee,U,B.components.datePicker,B.motion.duration.fast]),fe=useCallback(()=>{"days"!==q?(!1!==b&&triggerHaptic("impactLight"),E("years"===q?e=>new Date(e.getFullYear()-12,e.getMonth(),1):e=>new Date(e.getFullYear()-120,e.getMonth(),1))):he(-1)},[he,q,b]),be=useCallback(()=>{"days"!==q?(!1!==b&&triggerHaptic("impactLight"),E("years"===q?e=>new Date(e.getFullYear()+12,e.getMonth(),1):e=>new Date(e.getFullYear()+120,e.getMonth(),1))):he(1)},[he,q,b]),xe=useCallback(()=>{const e=B.components.datePicker?.viewTransitionDuration??B.motion.duration.normal??200;setNativeValue(ae,0),setNativeValue(re,.9),Animated.parallel([Animated.timing(ae,{toValue:1,duration:e,easing:Easing.out(Easing.cubic),useNativeDriver:!0}),Animated.timing(re,{toValue:1,duration:e,easing:Easing.out(Easing.cubic),useNativeDriver:!0})]).start()},[ae,re,B.components.datePicker,B.motion.duration.normal]),De=useCallback(()=>{const e=resolveHaptic(b,"selection");e&&triggerHaptic(e);const t=B.components.datePicker?.headerPressDuration??80,a=B.components.datePicker?.headerReleaseDuration??100;Animated.sequence([Animated.timing(ie,{toValue:.96,duration:t,useNativeDriver:!0}),Animated.timing(ie,{toValue:1,duration:a,useNativeDriver:!0})]).start(),X(e=>"days"===e?"years":"years"===e?"decades":"years"),xe()},[xe,ie,b,B.components.datePicker]),we=useCallback(e=>{const t=resolveHaptic(b,"selection");t&&triggerHaptic(t),E(t=>new Date(e,t.getMonth(),1)),X("days"),xe()},[xe,b]),ve=useCallback(e=>{const t=resolveHaptic(b,"selection");t&&triggerHaptic(t),E(t=>new Date(e+4,t.getMonth(),1)),X("years"),xe()},[xe,b]),Ce=useCallback(e=>{if(le(e.date))return;const t=resolveHaptic(b,"selection");t&&triggerHaptic(t),G(e.date),e.inMonth||E(new Date(e.date.getFullYear(),e.date.getMonth(),1)),setNativeValue(te,.7),Animated.spring(te,{toValue:1,damping:B.motion.spring.bouncy.damping,stiffness:B.motion.spring.bouncy.stiffness,mass:B.motion.spring.bouncy.mass,useNativeDriver:!0}).start()},[le,te,B.motion.spring.bouncy,b]),Se=useCallback(()=>{A||M(!1),r?.()},[A,r]),je=useCallback(()=>{"modal"===n?Animated.parallel([Animated.timing(Z,{toValue:0,duration:B.motion.duration.fast,easing:Easing.bezier(...B.motion.easing.accelerate),useNativeDriver:!1}),Animated.timing(J,{toValue:0,duration:B.motion.duration.fast,easing:Easing.bezier(...B.motion.easing.accelerate),useNativeDriver:!0})]).start(()=>{Se()}):Se()},[Z,n,Se,J,B.motion.duration.fast,B.motion.easing.accelerate]),{handleGesture:ke}=useDragToDismiss({drag:K,travel:()=>Q.current||320,onDismiss:je}),Pe=useCallback(()=>{!1!==b&&triggerHaptic("selection"),je()},[je,b]),Te=useCallback(()=>{O&&(!1!==b&&triggerHaptic("notificationSuccess"),a?.(O),je())},[je,a,O,b]),Ve=J.interpolate({inputRange:[0,1],outputRange:[320,0]}),Re=_jsx(View,{style:z.titleRow,children:_jsx(Text,{style:z.title,accessibilityRole:"header",children:d})}),_e=_jsxs(View,{style:[z.card,m,y],accessibilityRole:"modal"===n?void 0:"none",accessible:!1,testID:L,children:["modal"===n?_jsx(GestureDetector,{gesture:ke,children:_jsxs(View,{style:z.grabArea,children:[_jsx(View,{style:z.handle}),Re]})}):Re,_jsxs(View,{style:z.headerRow,children:[_jsx(Pressable,{onPress:fe,style:({pressed:e})=>[z.navBtn,e&&z.navBtnPressed,h],accessibilityRole:"button",accessibilityLabel:"days"===q?"Previous month":"years"===q?"Previous years":"Previous decades",hitSlop:8,children:_jsx(Text,{style:z.navText,children:"‹"})}),_jsx(Pressable,{onPress:De,style:[z.headerLabelWrap,p],accessibilityRole:"button",accessibilityLabel:"days"===q?`${me}, switch to year selection`:"years"===q?`${me}, switch to decade selection`:`${me}, switch to year selection`,hitSlop:8,children:_jsxs(Animated.View,{style:[z.headerLabelInner,{transform:[{scale:ie}],opacity:"days"===q?ee:1}],children:[_jsx(Animated.Text,{style:[z.headerLabel,{transform:[{translateX:"days"===q?U:0}]}],accessibilityLiveRegion:"polite",children:me}),_jsx(View,{style:z.headerCaret,children:(B.icons?.chevronDown??defaultIcons.chevronDown)({size:B.typography.fontSize.sm,color:B.colors.text.secondary})})]})}),_jsx(Pressable,{onPress:be,style:({pressed:e})=>[z.navBtn,e&&z.navBtnPressed,h],accessibilityRole:"button",accessibilityLabel:"days"===q?"Next month":"years"===q?"Next years":"Next decades",hitSlop:8,children:_jsx(Text,{style:z.navText,children:"›"})})]}),"days"===q?_jsxs(_Fragment,{children:[_jsx(View,{style:z.weekdayRow,children:ge.map((e,t)=>_jsx(View,{style:z.weekdayCell,children:_jsx(Text,{style:z.weekdayText,children:e})},`${e}-${t}`))}),_jsx(Animated.View,{style:[z.grid,{opacity:ee,transform:[{translateX:U}]}],children:Array.from({length:6}).map((e,t)=>_jsx(View,{style:z.gridRow,children:ce.slice(7*t,7*t+7).map(e=>{const t=le(e.date),a=!!O&&isSameDay(e.date,O),r=isSameDay(e.date,H),i=a?B.colors.primary:"transparent",o=r&&!a?B.colors.primary:"transparent",s=a?B.colors.onPrimary:e.inMonth?t?B.colors.text.disabled:B.colors.text.primary:B.colors.text.tertiary,n=t?.3:e.inMonth?1:.4;return _jsx(Pressable,{disabled:t,onPress:()=>Ce(e),accessibilityRole:"button",accessibilityLabel:formatLongDate(e.date,l),accessibilityState:{selected:a,disabled:t},style:z.dayCell,children:_jsx(Animated.View,{style:[z.dayInner,{backgroundColor:i,borderColor:o,borderWidth:r&&!a?1.5:0,opacity:n},a?{transform:[{scale:te}]}:null],children:_jsx(Text,{style:[z.dayText,{color:s}],children:e.date.getDate()})})},e.iso)})},`r-${t}`))})]}):_jsx(Animated.View,"years"===q?{style:[z.yearGrid,{opacity:ae,transform:[{scale:re}]}],children:Array.from({length:3}).map((e,t)=>_jsx(View,{style:z.gridRow,children:de.slice(4*t,4*t+4).map(e=>{const t=ye(e),a=!!O&&O.getFullYear()===e,r=H.getFullYear()===e,i=a?B.colors.primary:"transparent",o=r&&!a?B.colors.primary:"transparent",s=a?B.colors.onPrimary:t?B.colors.text.disabled:B.colors.text.primary,n=t?.3:1;return _jsx(Pressable,{disabled:t,onPress:()=>we(e),accessibilityRole:"button",accessibilityLabel:`Year ${e}`,accessibilityState:{selected:a,disabled:t},style:z.yearCell,children:_jsx(View,{style:[z.yearInner,{backgroundColor:i,borderColor:o,borderWidth:r&&!a?1.5:0,opacity:n}],children:_jsx(Text,{style:[z.yearText,{color:s}],children:e})})},`year-${e}`)})},`yr-${t}`))}:{style:[z.yearGrid,{opacity:ae,transform:[{scale:re}]}],children:Array.from({length:3}).map((e,t)=>_jsx(View,{style:z.gridRow,children:ue.slice(4*t,4*t+4).map(e=>{const t=e+10-1,a=pe(e),r=!!O&&decadeStartFor(O.getFullYear())===e,i=decadeStartFor(H.getFullYear())===e,o=r?B.colors.primary:"transparent",s=i&&!r?B.colors.primary:"transparent",n=r?B.colors.onPrimary:a?B.colors.text.disabled:B.colors.text.primary,l=a?.3:1;return _jsx(Pressable,{disabled:a,onPress:()=>ve(e),accessibilityRole:"button",accessibilityLabel:`Decade ${e} to ${t}`,accessibilityState:{selected:r,disabled:a},style:z.yearCell,children:_jsxs(View,{style:[z.yearInner,{backgroundColor:o,borderColor:s,borderWidth:i&&!r?1.5:0,opacity:l}],children:[_jsx(Text,{style:[z.yearText,{color:n}],children:`${e}s`}),_jsx(Text,{style:[z.decadeRangeText,{color:r?B.colors.onPrimary:B.colors.text.tertiary}],children:`${e}-${t}`})]})},`decade-${e}`)})},`dec-${t}`))}),_jsxs(View,{style:z.footer,children:[_jsx(Pressable,{onPress:Pe,style:({pressed:e})=>[z.footerBtn,z.footerCancel,e&&z.footerBtnPressed,f],accessibilityRole:"button",accessibilityLabel:g,children:_jsx(Text,{style:[z.footerBtnText,{color:B.colors.text.secondary}],children:g})}),_jsx(Pressable,{onPress:Te,disabled:!O,style:({pressed:e})=>[z.footerBtn,z.footerConfirm,{backgroundColor:B.colors.primary,opacity:O?1:.5},e&&{backgroundColor:B.colors.primaryHover},f],accessibilityRole:"button",accessibilityLabel:u,accessibilityState:{disabled:!O},children:_jsx(Text,{style:[z.footerBtnText,{color:B.colors.onPrimary}],children:u})})]})]}),Ae=t?(R??(e=>e.toLocaleDateString()))(t):void 0,Ie=!A;if("inline"===n)return F||Ie?Ie?_jsxs(_Fragment,{children:[_jsx(PickerTrigger,{label:D,value:Ae,placeholder:w,helperText:v,error:C,required:S,disabled:j,size:k,variant:P,clearable:T,onClear:V,onPress:()=>M(!0),triggerStyle:_,testID:x}),F?_e:null]}):_e:null;const Me=_jsx(Modal,{visible:F,transparent:!0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",onRequestClose:je,children:_jsxs(GestureHandlerRootView,{collapsable:!1,style:[z.backdrop,{backgroundColor:B.colors.background.overlay}],children:[_jsx(Pressable,{style:StyleSheet.absoluteFill,onPress:je,accessibilityLabel:"Dismiss"}),_jsx(Animated.View,{style:[z.sheetWrap,{paddingBottom:Math.max(Y.bottom,B.spacing.lg),opacity:J,transform:[{translateY:Animated.add(Ve,K)}]}],onLayout:e=>{Q.current=e.nativeEvent.layout.height},accessibilityViewIsModal:!0,accessibilityRole:"none",children:_e}),_jsx(ToastHost,{})]})});return Ie?_jsxs(_Fragment,{children:[_jsx(PickerTrigger,{label:D,value:Ae,placeholder:w,helperText:v,error:C,required:S,disabled:j,size:k,variant:P,clearable:T,onClear:V,onPress:()=>M(!0),triggerStyle:_,testID:x}),Me]}):Me},buildStyles=e=>{const t=e.shadows.lg;return StyleSheet.create({backdrop:{...StyleSheet.absoluteFill},sheetWrap:{position:"absolute",left:0,right:0,bottom:0,paddingHorizontal:e.spacing.md,paddingBottom:e.spacing.lg},card:{backgroundColor:e.colors.background.elevated,borderRadius:e.radius.xl,...smoothCorners,padding:e.spacing.lg,shadowColor:t.shadowColor,shadowOffset:t.shadowOffset,shadowOpacity:t.shadowOpacity,shadowRadius:t.shadowRadius,elevation:t.elevation},grabArea:{marginTop:-e.spacing.lg,paddingTop:e.spacing.sm},handle:{alignSelf:"center",width:36,height:4,borderRadius:e.radius.full,...smoothCorners,backgroundColor:e.colors.border.secondary,marginBottom:e.spacing.sm},titleRow:{marginBottom:e.spacing.sm},title:{fontSize:e.typography.fontSize.lg,fontWeight:e.typography.fontWeight.semibold,color:e.colors.text.primary},headerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:e.spacing.md},navBtn:{width:e.components.datePicker?.navButtonSize??36,height:e.components.datePicker?.navButtonSize??36,borderRadius:e.radius.full,...smoothCorners,alignItems:"center",justifyContent:"center",backgroundColor:e.colors.background.secondary},navBtnPressed:{backgroundColor:e.colors.surface.pressed},navText:{fontSize:e.components.datePicker?.navTextFontSize??22,lineHeight:e.components.datePicker?.navTextLineHeight??24,color:e.colors.text.primary,fontWeight:e.typography.fontWeight.semibold},headerLabelWrap:{flex:1,alignItems:"center"},headerLabelInner:{flexDirection:"row",alignItems:"center",justifyContent:"center"},headerLabel:{fontSize:e.typography.fontSize.base,fontWeight:e.typography.fontWeight.semibold,color:e.colors.text.primary},headerCaret:{marginLeft:e.spacing.xs,alignItems:"center",justifyContent:"center"},weekdayRow:{flexDirection:"row",marginBottom:e.spacing.xs},weekdayCell:{flex:1,alignItems:"center",paddingVertical:e.spacing.xs},weekdayText:{fontSize:e.typography.fontSize.xs,fontWeight:e.typography.fontWeight.medium,color:e.colors.text.tertiary,letterSpacing:e.typography.letterSpacing.wide},grid:{},gridRow:{flexDirection:"row"},dayCell:{flex:1,aspectRatio:1,alignItems:"center",justifyContent:"center",padding:e.components.datePicker?.dayCellPadding??2},dayInner:{width:"100%",height:"100%",borderRadius:e.components.datePicker?.dayInnerBorderRadius??e.radius.full,...smoothCorners,alignItems:"center",justifyContent:"center"},dayText:{fontSize:e.typography.fontSize.sm,fontWeight:e.typography.fontWeight.medium},yearGrid:{},yearCell:{flex:1,aspectRatio:1.6,alignItems:"center",justifyContent:"center",padding:e.components.datePicker?.yearCellPadding??4},yearInner:{width:"100%",height:"100%",borderRadius:e.components.datePicker?.yearInnerBorderRadius??e.radius.lg,...smoothCorners,alignItems:"center",justifyContent:"center"},yearText:{fontSize:e.typography.fontSize.base,fontWeight:e.typography.fontWeight.semibold},decadeRangeText:{fontSize:e.typography.fontSize.xs,fontWeight:e.typography.fontWeight.medium,marginTop:e.components.datePicker?.decadeRangeMarginTop??2},footer:{flexDirection:"row",justifyContent:"flex-end",alignItems:"center",marginTop:e.spacing.lg,gap:e.spacing.sm},footerBtn:{paddingHorizontal:e.spacing.lg,paddingVertical:e.spacing.sm,borderRadius:e.radius.md,...smoothCorners,minHeight:e.components.datePicker?.footerButtonMinHeight??40,alignItems:"center",justifyContent:"center"},footerCancel:{backgroundColor:"transparent"},footerConfirm:{},footerBtnPressed:{opacity:.85},footerBtnText:{fontSize:e.typography.fontSize.sm,fontWeight:e.typography.fontWeight.semibold}})};export{DatePicker};export default DatePicker;
1
+ "use strict";import{useCallback,useEffect,useMemo,useRef,useState}from"react";import{AccessibilityInfo,Animated,Easing,Modal,Pressable,StyleSheet,Text,View}from"react-native";import{GestureDetector,GestureHandlerRootView}from"react-native-gesture-handler";import{useSafeAreaInsets}from"react-native-safe-area-context";import{useDragToDismiss}from"../../hooks/useDragToDismiss.js";import{createAnimatedValue,setNativeValue,useTheme}from"../../theme/index.js";import{resolveHaptic,triggerHaptic}from"../../utils/index.js";import{smoothCorners}from"../../utils/corners.js";import{defaultIcons}from"../AppIcon/defaultIcons.js";import{PickerTrigger}from"../PickerTrigger/index.js";import{ToastHost}from"../Toast/ToastProvider.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const GRID_SIZE=12,DECADE_SPAN=10,startOfDay=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),isSameDay=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate(),toIso=e=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`,addMonths=(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),buildMonthMatrix=(e,t)=>{const a=e.getFullYear(),r=e.getMonth(),i=(new Date(a,r,1).getDay()-t+7)%7,s=[];for(let e=0;e<42;e+=1){const t=new Date(a,r,1-i+e);s.push({date:t,inMonth:t.getMonth()===r,iso:toIso(t)})}return s},weekdayLabels=(e,t)=>{const a=new Intl.DateTimeFormat(e,{weekday:"short"}),r=[];for(let e=0;e<7;e+=1){const i=new Date(1970,0,4+(t+e)%7);r.push(a.format(i))}return r},formatMonthYear=(e,t)=>new Intl.DateTimeFormat(t,{month:"long",year:"numeric"}).format(e),formatLongDate=(e,t)=>new Intl.DateTimeFormat(t,{weekday:"long",year:"numeric",month:"long",day:"numeric"}).format(e),decadeStartFor=e=>10*Math.floor(e/10),buildYearCells=e=>{const t=e-4;return Array.from({length:12},(e,a)=>t+a)},buildDecadeCells=e=>{const t=decadeStartFor(e)-40;return Array.from({length:12},(e,a)=>t+10*a)},DatePicker=e=>{const{value:t,onChange:a,onClose:r,minDate:i,maxDate:s,disabledDates:o,mode:n="modal",locale:l="en-IN",weekStartsOn:c=0,title:d="Select Date",confirmLabel:u="Confirm",cancelLabel:g="Cancel",style:m,containerStyle:y,headerLabelStyle:p,navButtonStyle:h,footerButtonStyle:f,haptic:b,testID:x,label:D,placeholder:w,helperText:v,error:C,required:S,disabled:j,size:k,variant:P,clearable:T,onClear:V,formatValue:_,triggerStyle:R}=e,A=void 0!==e.visible,[I,M]=useState(!1),F=A?e.visible:I,L=A?x:x?`${x}-calendar`:void 0,B=useTheme(),Y=useSafeAreaInsets(),z=useMemo(()=>buildStyles(B),[B]),[H,N]=useState(()=>startOfDay(new Date));useEffect(()=>{F&&N(startOfDay(new Date))},[F]);const $=t?startOfDay(t):H,[W,E]=useState($),[O,G]=useState(t?startOfDay(t):null),[q,X]=useState("days"),Z=useRef(createAnimatedValue(0)).current,J=useRef(createAnimatedValue(0)).current,K=useRef(createAnimatedValue(0)).current,Q=useRef(0),U=useRef(createAnimatedValue(0)).current,ee=useRef(createAnimatedValue(1)).current,te=useRef(createAnimatedValue(1)).current,ae=useRef(createAnimatedValue(1)).current,re=useRef(createAnimatedValue(1)).current,ie=useRef(createAnimatedValue(1)).current;useEffect(()=>{if(t){const e=startOfDay(t);G(e),E(e)}else G(null)},[t]),useEffect(()=>{if("modal"===n&&F){Z.setValue(0),setNativeValue(J,0),setNativeValue(K,0);const e=Animated.parallel([Animated.timing(Z,{toValue:1,duration:B.motion.duration.normal,easing:Easing.out(Easing.cubic),useNativeDriver:!1}),Animated.spring(J,{toValue:1,damping:B.motion.spring.gentle.damping,stiffness:B.motion.spring.gentle.stiffness,mass:B.motion.spring.gentle.mass,useNativeDriver:!0})]);return e.start(),()=>e.stop()}},[F,n,Z,J,K,B.motion]);const se=useMemo(()=>{const e=new Set;return o?.forEach(t=>e.add(toIso(startOfDay(t)))),e},[o]),oe=useMemo(()=>i?startOfDay(i):null,[i]),ne=useMemo(()=>s?startOfDay(s):null,[s]),le=useCallback(e=>!!(oe&&e.getTime()<oe.getTime())||(!!(ne&&e.getTime()>ne.getTime())||!!se.has(toIso(e))),[oe,ne,se]),ce=useMemo(()=>buildMonthMatrix(W,c),[W,c]),de=useMemo(()=>buildYearCells(W.getFullYear()),[W]),ue=useMemo(()=>buildDecadeCells(W.getFullYear()),[W]),ge=useMemo(()=>weekdayLabels(l,c),[l,c]),me=useMemo(()=>{if("days"===q)return formatMonthYear(W,l);if("years"===q){return`${de[0]} - ${de[de.length-1]}`}return`${ue[0]} - ${ue[ue.length-1]+9}`},[W,ue,l,q,de]),ye=useCallback(e=>!!(oe&&e<oe.getFullYear())||!!(ne&&e>ne.getFullYear()),[oe,ne]),pe=useCallback(e=>!!(oe&&e+10-1<oe.getFullYear())||!!(ne&&e>ne.getFullYear()),[oe,ne]),he=useCallback(e=>{!1!==b&&triggerHaptic("impactLight");const t=e>0?1:-1,a=B.components.datePicker?.monthSlideDistance??32,r=B.components.datePicker?.monthSlideOutDuration??B.motion.duration.fast??140,i=B.components.datePicker?.monthSlideInDuration??B.motion.duration.fast??160;Animated.sequence([Animated.parallel([Animated.timing(U,{toValue:-t*a,duration:r,easing:Easing.out(Easing.quad),useNativeDriver:!0}),Animated.timing(ee,{toValue:0,duration:r,useNativeDriver:!0})]),Animated.timing(U,{toValue:t*a,duration:0,useNativeDriver:!0}),Animated.parallel([Animated.timing(U,{toValue:0,duration:i,easing:Easing.out(Easing.cubic),useNativeDriver:!0}),Animated.timing(ee,{toValue:1,duration:i,useNativeDriver:!0})])]).start();const s=addMonths(W,e);E(s),AccessibilityInfo.announceForAccessibility(formatMonthYear(s,l))},[W,b,l,ee,U,B.components.datePicker,B.motion.duration.fast]),fe=useCallback(()=>{"days"!==q?(!1!==b&&triggerHaptic("impactLight"),E("years"===q?e=>new Date(e.getFullYear()-12,e.getMonth(),1):e=>new Date(e.getFullYear()-120,e.getMonth(),1))):he(-1)},[he,q,b]),be=useCallback(()=>{"days"!==q?(!1!==b&&triggerHaptic("impactLight"),E("years"===q?e=>new Date(e.getFullYear()+12,e.getMonth(),1):e=>new Date(e.getFullYear()+120,e.getMonth(),1))):he(1)},[he,q,b]),xe=useCallback(()=>{const e=B.components.datePicker?.viewTransitionDuration??B.motion.duration.normal??200;setNativeValue(ae,0),setNativeValue(re,.9),Animated.parallel([Animated.timing(ae,{toValue:1,duration:e,easing:Easing.out(Easing.cubic),useNativeDriver:!0}),Animated.timing(re,{toValue:1,duration:e,easing:Easing.out(Easing.cubic),useNativeDriver:!0})]).start()},[ae,re,B.components.datePicker,B.motion.duration.normal]),De=useCallback(()=>{const e=resolveHaptic(b,"selection");e&&triggerHaptic(e);const t=B.components.datePicker?.headerPressDuration??80,a=B.components.datePicker?.headerReleaseDuration??100;Animated.sequence([Animated.timing(ie,{toValue:.96,duration:t,useNativeDriver:!0}),Animated.timing(ie,{toValue:1,duration:a,useNativeDriver:!0})]).start(),X(e=>"days"===e?"years":"years"===e?"decades":"years"),xe()},[xe,ie,b,B.components.datePicker]),we=useCallback(e=>{const t=resolveHaptic(b,"selection");t&&triggerHaptic(t),E(t=>new Date(e,t.getMonth(),1)),X("days"),xe()},[xe,b]),ve=useCallback(e=>{const t=resolveHaptic(b,"selection");t&&triggerHaptic(t),E(t=>new Date(e+4,t.getMonth(),1)),X("years"),xe()},[xe,b]),Ce=useCallback(e=>{if(le(e.date))return;const t=resolveHaptic(b,"selection");t&&triggerHaptic(t),G(e.date),e.inMonth||E(new Date(e.date.getFullYear(),e.date.getMonth(),1)),setNativeValue(te,.7),Animated.spring(te,{toValue:1,damping:B.motion.spring.bouncy.damping,stiffness:B.motion.spring.bouncy.stiffness,mass:B.motion.spring.bouncy.mass,useNativeDriver:!0}).start()},[le,te,B.motion.spring.bouncy,b]),Se=useCallback(()=>{A||M(!1),r?.()},[A,r]),je=useCallback(()=>{"modal"===n?Animated.parallel([Animated.timing(Z,{toValue:0,duration:B.motion.duration.fast,easing:Easing.bezier(...B.motion.easing.accelerate),useNativeDriver:!1}),Animated.timing(J,{toValue:0,duration:B.motion.duration.fast,easing:Easing.bezier(...B.motion.easing.accelerate),useNativeDriver:!0})]).start(()=>{Se()}):Se()},[Z,n,Se,J,B.motion.duration.fast,B.motion.easing.accelerate]),{handleGesture:ke}=useDragToDismiss({drag:K,travel:()=>Q.current||320,onDismiss:je}),Pe=useCallback(()=>{!1!==b&&triggerHaptic("selection"),je()},[je,b]),Te=useCallback(()=>{O&&(!1!==b&&triggerHaptic("notificationSuccess"),a?.(O),je())},[je,a,O,b]),Ve=J.interpolate({inputRange:[0,1],outputRange:[320,0]}),_e=_jsx(View,{style:z.titleRow,children:_jsx(Text,{style:z.title,accessibilityRole:"header",children:d})}),Re=_jsxs(View,{style:[z.card,m,y],accessibilityRole:"modal"===n?void 0:"none",accessible:!1,testID:L,children:["modal"===n?_jsx(GestureDetector,{gesture:ke,children:_jsxs(View,{style:z.grabArea,children:[_jsx(View,{style:z.handle}),_e]})}):_e,_jsxs(View,{style:z.headerRow,children:[_jsx(Pressable,{onPress:fe,style:({pressed:e})=>[z.navBtn,e&&z.navBtnPressed,h],accessibilityRole:"button",accessibilityLabel:"days"===q?"Previous month":"years"===q?"Previous years":"Previous decades",hitSlop:8,children:_jsx(Text,{style:z.navText,children:"‹"})}),_jsx(Pressable,{onPress:De,style:[z.headerLabelWrap,p],accessibilityRole:"button",accessibilityLabel:"days"===q?`${me}, switch to year selection`:"years"===q?`${me}, switch to decade selection`:`${me}, switch to year selection`,hitSlop:8,children:_jsxs(Animated.View,{style:[z.headerLabelInner,{transform:[{scale:ie}],opacity:"days"===q?ee:1}],children:[_jsx(Animated.Text,{style:[z.headerLabel,{transform:[{translateX:"days"===q?U:0}]}],accessibilityLiveRegion:"polite",children:me}),_jsx(View,{style:z.headerCaret,children:(B.icons?.chevronDown??defaultIcons.chevronDown)({size:B.typography.fontSize.sm,color:B.colors.text.secondary})})]})}),_jsx(Pressable,{onPress:be,style:({pressed:e})=>[z.navBtn,e&&z.navBtnPressed,h],accessibilityRole:"button",accessibilityLabel:"days"===q?"Next month":"years"===q?"Next years":"Next decades",hitSlop:8,children:_jsx(Text,{style:z.navText,children:"›"})})]}),"days"===q?_jsxs(_Fragment,{children:[_jsx(View,{style:z.weekdayRow,children:ge.map((e,t)=>_jsx(View,{style:z.weekdayCell,children:_jsx(Text,{style:z.weekdayText,children:e})},`${e}-${t}`))}),_jsx(Animated.View,{style:[z.grid,{opacity:ee,transform:[{translateX:U}]}],children:Array.from({length:6}).map((e,t)=>_jsx(View,{style:z.gridRow,children:ce.slice(7*t,7*t+7).map(e=>{const t=le(e.date),a=!!O&&isSameDay(e.date,O),r=isSameDay(e.date,H),i=a?B.colors.primary:"transparent",s=r&&!a?B.colors.primary:"transparent",o=a?B.colors.onPrimary:e.inMonth?t?B.colors.text.disabled:B.colors.text.primary:B.colors.text.tertiary,n=t?.3:e.inMonth?1:.4;return _jsx(Pressable,{disabled:t,onPress:()=>Ce(e),accessibilityRole:"button",accessibilityLabel:formatLongDate(e.date,l),accessibilityState:{selected:a,disabled:t},"aria-selected":a,"aria-disabled":t,style:z.dayCell,children:_jsx(Animated.View,{style:[z.dayInner,{backgroundColor:i,borderColor:s,borderWidth:r&&!a?1.5:0,opacity:n},a?{transform:[{scale:te}]}:null],children:_jsx(Text,{style:[z.dayText,{color:o}],children:e.date.getDate()})})},e.iso)})},`r-${t}`))})]}):_jsx(Animated.View,"years"===q?{style:[z.yearGrid,{opacity:ae,transform:[{scale:re}]}],children:Array.from({length:3}).map((e,t)=>_jsx(View,{style:z.gridRow,children:de.slice(4*t,4*t+4).map(e=>{const t=ye(e),a=!!O&&O.getFullYear()===e,r=H.getFullYear()===e,i=a?B.colors.primary:"transparent",s=r&&!a?B.colors.primary:"transparent",o=a?B.colors.onPrimary:t?B.colors.text.disabled:B.colors.text.primary,n=t?.3:1;return _jsx(Pressable,{disabled:t,onPress:()=>we(e),accessibilityRole:"button",accessibilityLabel:`Year ${e}`,accessibilityState:{selected:a,disabled:t},"aria-selected":a,"aria-disabled":t,style:z.yearCell,children:_jsx(View,{style:[z.yearInner,{backgroundColor:i,borderColor:s,borderWidth:r&&!a?1.5:0,opacity:n}],children:_jsx(Text,{style:[z.yearText,{color:o}],children:e})})},`year-${e}`)})},`yr-${t}`))}:{style:[z.yearGrid,{opacity:ae,transform:[{scale:re}]}],children:Array.from({length:3}).map((e,t)=>_jsx(View,{style:z.gridRow,children:ue.slice(4*t,4*t+4).map(e=>{const t=e+10-1,a=pe(e),r=!!O&&decadeStartFor(O.getFullYear())===e,i=decadeStartFor(H.getFullYear())===e,s=r?B.colors.primary:"transparent",o=i&&!r?B.colors.primary:"transparent",n=r?B.colors.onPrimary:a?B.colors.text.disabled:B.colors.text.primary,l=a?.3:1;return _jsx(Pressable,{disabled:a,onPress:()=>ve(e),accessibilityRole:"button",accessibilityLabel:`Decade ${e} to ${t}`,accessibilityState:{selected:r,disabled:a},"aria-selected":r,"aria-disabled":a,style:z.yearCell,children:_jsxs(View,{style:[z.yearInner,{backgroundColor:s,borderColor:o,borderWidth:i&&!r?1.5:0,opacity:l}],children:[_jsx(Text,{style:[z.yearText,{color:n}],children:`${e}s`}),_jsx(Text,{style:[z.decadeRangeText,{color:r?B.colors.onPrimary:B.colors.text.tertiary}],children:`${e}-${t}`})]})},`decade-${e}`)})},`dec-${t}`))}),_jsxs(View,{style:z.footer,children:[_jsx(Pressable,{onPress:Pe,style:({pressed:e})=>[z.footerBtn,z.footerCancel,e&&z.footerBtnPressed,f],accessibilityRole:"button",accessibilityLabel:g,children:_jsx(Text,{style:[z.footerBtnText,{color:B.colors.text.secondary}],children:g})}),_jsx(Pressable,{onPress:Te,disabled:!O,style:({pressed:e})=>[z.footerBtn,z.footerConfirm,{backgroundColor:B.colors.primary,opacity:O?1:.5},e&&{backgroundColor:B.colors.primaryHover},f],accessibilityRole:"button",accessibilityLabel:u,accessibilityState:{disabled:!O},"aria-disabled":!O,children:_jsx(Text,{style:[z.footerBtnText,{color:B.colors.onPrimary}],children:u})})]})]}),Ae=t?(_??(e=>e.toLocaleDateString()))(t):void 0,Ie=!A;if("inline"===n)return F||Ie?Ie?_jsxs(_Fragment,{children:[_jsx(PickerTrigger,{label:D,value:Ae,placeholder:w,helperText:v,error:C,required:S,disabled:j,size:k,variant:P,clearable:T,onClear:V,onPress:()=>M(!0),triggerStyle:R,testID:x}),F?Re:null]}):Re:null;const Me=_jsx(Modal,{visible:F,transparent:!0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",onRequestClose:je,children:_jsxs(GestureHandlerRootView,{collapsable:!1,style:[z.backdrop,{backgroundColor:B.colors.background.overlay}],children:[_jsx(Pressable,{style:StyleSheet.absoluteFill,onPress:je,accessibilityLabel:"Dismiss"}),_jsx(Animated.View,{style:[z.sheetWrap,{paddingBottom:Math.max(Y.bottom,B.spacing.lg),opacity:J,transform:[{translateY:Animated.add(Ve,K)}]}],onLayout:e=>{Q.current=e.nativeEvent.layout.height},accessibilityViewIsModal:!0,accessibilityRole:"none",children:Re}),_jsx(ToastHost,{})]})});return Ie?_jsxs(_Fragment,{children:[_jsx(PickerTrigger,{label:D,value:Ae,placeholder:w,helperText:v,error:C,required:S,disabled:j,size:k,variant:P,clearable:T,onClear:V,onPress:()=>M(!0),triggerStyle:R,testID:x}),Me]}):Me},buildStyles=e=>{const t=e.shadows.lg;return StyleSheet.create({backdrop:{...StyleSheet.absoluteFill},sheetWrap:{position:"absolute",left:0,right:0,bottom:0,paddingHorizontal:e.spacing.md,paddingBottom:e.spacing.lg},card:{backgroundColor:e.colors.background.elevated,borderRadius:e.radius.xl,...smoothCorners,padding:e.spacing.lg,shadowColor:t.shadowColor,shadowOffset:t.shadowOffset,shadowOpacity:t.shadowOpacity,shadowRadius:t.shadowRadius,elevation:t.elevation},grabArea:{marginTop:-e.spacing.lg,paddingTop:e.spacing.sm},handle:{alignSelf:"center",width:36,height:4,borderRadius:e.radius.full,...smoothCorners,backgroundColor:e.colors.border.secondary,marginBottom:e.spacing.sm},titleRow:{marginBottom:e.spacing.sm},title:{fontSize:e.typography.fontSize.lg,fontWeight:e.typography.fontWeight.semibold,color:e.colors.text.primary},headerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:e.spacing.md},navBtn:{width:e.components.datePicker?.navButtonSize??36,height:e.components.datePicker?.navButtonSize??36,borderRadius:e.radius.full,...smoothCorners,alignItems:"center",justifyContent:"center",backgroundColor:e.colors.background.secondary},navBtnPressed:{backgroundColor:e.colors.surface.pressed},navText:{fontSize:e.components.datePicker?.navTextFontSize??22,lineHeight:e.components.datePicker?.navTextLineHeight??24,color:e.colors.text.primary,fontWeight:e.typography.fontWeight.semibold},headerLabelWrap:{flex:1,alignItems:"center"},headerLabelInner:{flexDirection:"row",alignItems:"center",justifyContent:"center"},headerLabel:{fontSize:e.typography.fontSize.base,fontWeight:e.typography.fontWeight.semibold,color:e.colors.text.primary},headerCaret:{marginLeft:e.spacing.xs,alignItems:"center",justifyContent:"center"},weekdayRow:{flexDirection:"row",marginBottom:e.spacing.xs},weekdayCell:{flex:1,alignItems:"center",paddingVertical:e.spacing.xs},weekdayText:{fontSize:e.typography.fontSize.xs,fontWeight:e.typography.fontWeight.medium,color:e.colors.text.tertiary,letterSpacing:e.typography.letterSpacing.wide},grid:{},gridRow:{flexDirection:"row"},dayCell:{flex:1,aspectRatio:1,alignItems:"center",justifyContent:"center",padding:e.components.datePicker?.dayCellPadding??2},dayInner:{width:"100%",height:"100%",borderRadius:e.components.datePicker?.dayInnerBorderRadius??e.radius.full,...smoothCorners,alignItems:"center",justifyContent:"center"},dayText:{fontSize:e.typography.fontSize.sm,fontWeight:e.typography.fontWeight.medium},yearGrid:{},yearCell:{flex:1,aspectRatio:1.6,alignItems:"center",justifyContent:"center",padding:e.components.datePicker?.yearCellPadding??4},yearInner:{width:"100%",height:"100%",borderRadius:e.components.datePicker?.yearInnerBorderRadius??e.radius.lg,...smoothCorners,alignItems:"center",justifyContent:"center"},yearText:{fontSize:e.typography.fontSize.base,fontWeight:e.typography.fontWeight.semibold},decadeRangeText:{fontSize:e.typography.fontSize.xs,fontWeight:e.typography.fontWeight.medium,marginTop:e.components.datePicker?.decadeRangeMarginTop??2},footer:{flexDirection:"row",justifyContent:"flex-end",alignItems:"center",marginTop:e.spacing.lg,gap:e.spacing.sm},footerBtn:{paddingHorizontal:e.spacing.lg,paddingVertical:e.spacing.sm,borderRadius:e.radius.md,...smoothCorners,minHeight:e.components.datePicker?.footerButtonMinHeight??40,alignItems:"center",justifyContent:"center"},footerCancel:{backgroundColor:"transparent"},footerConfirm:{},footerBtnPressed:{opacity:.85},footerBtnText:{fontSize:e.typography.fontSize.sm,fontWeight:e.typography.fontWeight.semibold}})};export{DatePicker};export default DatePicker;