orn-ui 0.2.10 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/AGENTS.md +66 -51
  2. package/README.md +3 -7
  3. package/lib/commonjs/atoms/Avatar.js +77 -5
  4. package/lib/commonjs/atoms/Avatar.js.map +1 -1
  5. package/lib/commonjs/atoms/Badge.js +17 -8
  6. package/lib/commonjs/atoms/Badge.js.map +1 -1
  7. package/lib/commonjs/atoms/Button.js +108 -39
  8. package/lib/commonjs/atoms/Button.js.map +1 -1
  9. package/lib/commonjs/atoms/Card.js +24 -2
  10. package/lib/commonjs/atoms/Card.js.map +1 -1
  11. package/lib/commonjs/atoms/Checkbox.js +41 -10
  12. package/lib/commonjs/atoms/Checkbox.js.map +1 -1
  13. package/lib/commonjs/atoms/Divider.js +30 -5
  14. package/lib/commonjs/atoms/Divider.js.map +1 -1
  15. package/lib/commonjs/atoms/EmptyState.js +58 -20
  16. package/lib/commonjs/atoms/EmptyState.js.map +1 -1
  17. package/lib/commonjs/atoms/Fab.js +32 -12
  18. package/lib/commonjs/atoms/Fab.js.map +1 -1
  19. package/lib/commonjs/atoms/Gradient.js +102 -36
  20. package/lib/commonjs/atoms/Gradient.js.map +1 -1
  21. package/lib/commonjs/atoms/IconButton.js +25 -4
  22. package/lib/commonjs/atoms/IconButton.js.map +1 -1
  23. package/lib/commonjs/atoms/Image.js +61 -25
  24. package/lib/commonjs/atoms/Image.js.map +1 -1
  25. package/lib/commonjs/atoms/Input.js +105 -17
  26. package/lib/commonjs/atoms/Input.js.map +1 -1
  27. package/lib/commonjs/atoms/KeyValueRow.js +37 -9
  28. package/lib/commonjs/atoms/KeyValueRow.js.map +1 -1
  29. package/lib/commonjs/atoms/PressableScale.js +25 -5
  30. package/lib/commonjs/atoms/PressableScale.js.map +1 -1
  31. package/lib/commonjs/atoms/ShinyText.js +29 -29
  32. package/lib/commonjs/atoms/Skeleton.js +28 -13
  33. package/lib/commonjs/atoms/Skeleton.js.map +1 -1
  34. package/lib/commonjs/atoms/Spinner.js +81 -22
  35. package/lib/commonjs/atoms/Spinner.js.map +1 -1
  36. package/lib/commonjs/atoms/Text.js +56 -5
  37. package/lib/commonjs/atoms/Text.js.map +1 -1
  38. package/lib/commonjs/atoms/Transition.js +46 -43
  39. package/lib/commonjs/atoms/Transition.js.map +1 -1
  40. package/lib/commonjs/atoms/index.js +6 -0
  41. package/lib/commonjs/atoms/index.js.map +1 -1
  42. package/lib/commonjs/atoms/inputValidation.js +56 -0
  43. package/lib/commonjs/atoms/inputValidation.js.map +1 -0
  44. package/lib/commonjs/icons/Icon.js +4 -4
  45. package/lib/commonjs/icons/defaultIcons.js +576 -24
  46. package/lib/commonjs/icons/defaultIcons.js.map +1 -1
  47. package/lib/commonjs/icons/index.js +6 -0
  48. package/lib/commonjs/icons/index.js.map +1 -1
  49. package/lib/commonjs/molecules/AvatarHeader.js +47 -14
  50. package/lib/commonjs/molecules/AvatarHeader.js.map +1 -1
  51. package/lib/commonjs/molecules/FormActions.js +25 -9
  52. package/lib/commonjs/molecules/FormActions.js.map +1 -1
  53. package/lib/commonjs/molecules/InfoRow.js +30 -14
  54. package/lib/commonjs/molecules/InfoRow.js.map +1 -1
  55. package/lib/commonjs/molecules/OptionCard.js +37 -22
  56. package/lib/commonjs/molecules/OptionCard.js.map +1 -1
  57. package/lib/commonjs/molecules/SegmentedControl.js +103 -14
  58. package/lib/commonjs/molecules/SegmentedControl.js.map +1 -1
  59. package/lib/commonjs/molecules/Stepper.js +61 -16
  60. package/lib/commonjs/molecules/Stepper.js.map +1 -1
  61. package/lib/commonjs/molecules/Steps.js +105 -41
  62. package/lib/commonjs/molecules/Steps.js.map +1 -1
  63. package/lib/commonjs/molecules/SymmetricGrid.js +26 -18
  64. package/lib/commonjs/molecules/SymmetricGrid.js.map +1 -1
  65. package/lib/commonjs/organisms/Alert.js +49 -35
  66. package/lib/commonjs/organisms/Alert.js.map +1 -1
  67. package/lib/commonjs/organisms/AlertProvider.js +10 -10
  68. package/lib/commonjs/organisms/BottomSheet.js +137 -85
  69. package/lib/commonjs/organisms/BottomSheet.js.map +1 -1
  70. package/lib/commonjs/organisms/Chart.js +174 -154
  71. package/lib/commonjs/organisms/Chart.js.map +1 -1
  72. package/lib/commonjs/organisms/DateField.js +36 -20
  73. package/lib/commonjs/organisms/DateField.js.map +1 -1
  74. package/lib/commonjs/organisms/DatePicker.js +56 -33
  75. package/lib/commonjs/organisms/DatePicker.js.map +1 -1
  76. package/lib/commonjs/organisms/List.js +62 -34
  77. package/lib/commonjs/organisms/List.js.map +1 -1
  78. package/lib/commonjs/organisms/Modal.js +120 -82
  79. package/lib/commonjs/organisms/Modal.js.map +1 -1
  80. package/lib/commonjs/organisms/NavigationBar.js +63 -24
  81. package/lib/commonjs/organisms/NavigationBar.js.map +1 -1
  82. package/lib/commonjs/organisms/OptionWheel.js +64 -64
  83. package/lib/commonjs/organisms/OptionWheel.js.map +1 -1
  84. package/lib/commonjs/organisms/ReorderableList.js +48 -27
  85. package/lib/commonjs/organisms/ReorderableList.js.map +1 -1
  86. package/lib/commonjs/organisms/Screen.js +68 -35
  87. package/lib/commonjs/organisms/Screen.js.map +1 -1
  88. package/lib/commonjs/organisms/SearchList.js +56 -26
  89. package/lib/commonjs/organisms/SearchList.js.map +1 -1
  90. package/lib/commonjs/organisms/Select.js +45 -24
  91. package/lib/commonjs/organisms/Select.js.map +1 -1
  92. package/lib/commonjs/organisms/Slides.js +36 -23
  93. package/lib/commonjs/organisms/Slides.js.map +1 -1
  94. package/lib/commonjs/organisms/ThemeToggle.js +10 -9
  95. package/lib/commonjs/organisms/ThemeToggle.js.map +1 -1
  96. package/lib/commonjs/organisms/Timeline.js +73 -56
  97. package/lib/commonjs/organisms/Timeline.js.map +1 -1
  98. package/lib/commonjs/organisms/Toast.js +46 -15
  99. package/lib/commonjs/organisms/Toast.js.map +1 -1
  100. package/lib/commonjs/organisms/ToastProvider.js +14 -10
  101. package/lib/commonjs/organisms/ToastProvider.js.map +1 -1
  102. package/lib/commonjs/organisms/Wizard.js +40 -15
  103. package/lib/commonjs/organisms/Wizard.js.map +1 -1
  104. package/lib/commonjs/organisms/chart/frame.js +25 -25
  105. package/lib/commonjs/organisms/chart/frame.js.map +1 -1
  106. package/lib/commonjs/organisms/chart/marks.js +42 -42
  107. package/lib/commonjs/organisms/chart/math.js +84 -85
  108. package/lib/commonjs/organisms/chart/math.js.map +1 -1
  109. package/lib/commonjs/organisms/chart/palette.js +28 -28
  110. package/lib/commonjs/organisms/imperativeBridge.js +5 -5
  111. package/lib/commonjs/organisms/imperativeBridge.js.map +1 -1
  112. package/lib/commonjs/organisms/useSlides.js +53 -21
  113. package/lib/commonjs/organisms/useSlides.js.map +1 -1
  114. package/lib/commonjs/safe-area/SafeAreaUIProvider.js +9 -66
  115. package/lib/commonjs/safe-area/SafeAreaUIProvider.js.map +1 -1
  116. package/lib/commonjs/safe-area/index.js.map +1 -1
  117. package/lib/commonjs/theme/KeyboardAvoidance.js +206 -0
  118. package/lib/commonjs/theme/KeyboardAvoidance.js.map +1 -0
  119. package/lib/commonjs/theme/NativeOverlay.js +263 -0
  120. package/lib/commonjs/theme/NativeOverlay.js.map +1 -0
  121. package/lib/commonjs/theme/UIProvider.js +86 -33
  122. package/lib/commonjs/theme/UIProvider.js.map +1 -1
  123. package/lib/commonjs/theme/colors.js +17 -17
  124. package/lib/commonjs/theme/colors.js.map +1 -1
  125. package/lib/commonjs/theme/createStyles.js +19 -16
  126. package/lib/commonjs/theme/createStyles.js.map +1 -1
  127. package/lib/commonjs/theme/createTheme.js +6 -6
  128. package/lib/commonjs/theme/index.js +6 -0
  129. package/lib/commonjs/theme/index.js.map +1 -1
  130. package/lib/commonjs/theme/insets.js +1 -1
  131. package/lib/commonjs/theme/labels.js +29 -1
  132. package/lib/commonjs/theme/labels.js.map +1 -1
  133. package/lib/commonjs/theme/palettes.js +25 -23
  134. package/lib/commonjs/theme/palettes.js.map +1 -1
  135. package/lib/commonjs/theme/tokens.js +28 -14
  136. package/lib/commonjs/theme/tokens.js.map +1 -1
  137. package/lib/commonjs/theme/useKeyboardField.js +36 -0
  138. package/lib/commonjs/theme/useKeyboardField.js.map +1 -0
  139. package/lib/commonjs/theme/useReduceMotion.js +31 -0
  140. package/lib/commonjs/theme/useReduceMotion.js.map +1 -0
  141. package/lib/module/atoms/Avatar.js +79 -8
  142. package/lib/module/atoms/Avatar.js.map +1 -1
  143. package/lib/module/atoms/Badge.js +17 -8
  144. package/lib/module/atoms/Badge.js.map +1 -1
  145. package/lib/module/atoms/Button.js +110 -41
  146. package/lib/module/atoms/Button.js.map +1 -1
  147. package/lib/module/atoms/Card.js +24 -2
  148. package/lib/module/atoms/Card.js.map +1 -1
  149. package/lib/module/atoms/Checkbox.js +42 -11
  150. package/lib/module/atoms/Checkbox.js.map +1 -1
  151. package/lib/module/atoms/Divider.js +31 -6
  152. package/lib/module/atoms/Divider.js.map +1 -1
  153. package/lib/module/atoms/EmptyState.js +58 -20
  154. package/lib/module/atoms/EmptyState.js.map +1 -1
  155. package/lib/module/atoms/Fab.js +33 -13
  156. package/lib/module/atoms/Fab.js.map +1 -1
  157. package/lib/module/atoms/Gradient.js +103 -37
  158. package/lib/module/atoms/Gradient.js.map +1 -1
  159. package/lib/module/atoms/IconButton.js +25 -4
  160. package/lib/module/atoms/IconButton.js.map +1 -1
  161. package/lib/module/atoms/Image.js +61 -25
  162. package/lib/module/atoms/Image.js.map +1 -1
  163. package/lib/module/atoms/Input.js +108 -20
  164. package/lib/module/atoms/Input.js.map +1 -1
  165. package/lib/module/atoms/KeyValueRow.js +37 -9
  166. package/lib/module/atoms/KeyValueRow.js.map +1 -1
  167. package/lib/module/atoms/PressableScale.js +25 -5
  168. package/lib/module/atoms/PressableScale.js.map +1 -1
  169. package/lib/module/atoms/ShinyText.js +29 -29
  170. package/lib/module/atoms/Skeleton.js +30 -13
  171. package/lib/module/atoms/Skeleton.js.map +1 -1
  172. package/lib/module/atoms/Spinner.js +82 -23
  173. package/lib/module/atoms/Spinner.js.map +1 -1
  174. package/lib/module/atoms/Text.js +56 -5
  175. package/lib/module/atoms/Text.js.map +1 -1
  176. package/lib/module/atoms/Transition.js +41 -42
  177. package/lib/module/atoms/Transition.js.map +1 -1
  178. package/lib/module/atoms/index.js +1 -1
  179. package/lib/module/atoms/index.js.map +1 -1
  180. package/lib/module/atoms/inputValidation.js +52 -0
  181. package/lib/module/atoms/inputValidation.js.map +1 -0
  182. package/lib/module/icons/Icon.js +4 -4
  183. package/lib/module/icons/defaultIcons.js +574 -24
  184. package/lib/module/icons/defaultIcons.js.map +1 -1
  185. package/lib/module/icons/index.js +1 -1
  186. package/lib/module/icons/index.js.map +1 -1
  187. package/lib/module/molecules/AvatarHeader.js +47 -14
  188. package/lib/module/molecules/AvatarHeader.js.map +1 -1
  189. package/lib/module/molecules/FormActions.js +25 -9
  190. package/lib/module/molecules/FormActions.js.map +1 -1
  191. package/lib/module/molecules/InfoRow.js +30 -14
  192. package/lib/module/molecules/InfoRow.js.map +1 -1
  193. package/lib/module/molecules/OptionCard.js +37 -22
  194. package/lib/module/molecules/OptionCard.js.map +1 -1
  195. package/lib/module/molecules/SegmentedControl.js +107 -18
  196. package/lib/module/molecules/SegmentedControl.js.map +1 -1
  197. package/lib/module/molecules/Stepper.js +63 -18
  198. package/lib/module/molecules/Stepper.js.map +1 -1
  199. package/lib/module/molecules/Steps.js +107 -43
  200. package/lib/module/molecules/Steps.js.map +1 -1
  201. package/lib/module/molecules/SymmetricGrid.js +26 -18
  202. package/lib/module/molecules/SymmetricGrid.js.map +1 -1
  203. package/lib/module/organisms/Alert.js +51 -37
  204. package/lib/module/organisms/Alert.js.map +1 -1
  205. package/lib/module/organisms/AlertProvider.js +10 -10
  206. package/lib/module/organisms/BottomSheet.js +142 -88
  207. package/lib/module/organisms/BottomSheet.js.map +1 -1
  208. package/lib/module/organisms/Chart.js +176 -156
  209. package/lib/module/organisms/Chart.js.map +1 -1
  210. package/lib/module/organisms/DateField.js +36 -20
  211. package/lib/module/organisms/DateField.js.map +1 -1
  212. package/lib/module/organisms/DatePicker.js +56 -33
  213. package/lib/module/organisms/DatePicker.js.map +1 -1
  214. package/lib/module/organisms/List.js +62 -34
  215. package/lib/module/organisms/List.js.map +1 -1
  216. package/lib/module/organisms/Modal.js +122 -84
  217. package/lib/module/organisms/Modal.js.map +1 -1
  218. package/lib/module/organisms/NavigationBar.js +64 -25
  219. package/lib/module/organisms/NavigationBar.js.map +1 -1
  220. package/lib/module/organisms/OptionWheel.js +64 -64
  221. package/lib/module/organisms/OptionWheel.js.map +1 -1
  222. package/lib/module/organisms/ReorderableList.js +48 -27
  223. package/lib/module/organisms/ReorderableList.js.map +1 -1
  224. package/lib/module/organisms/Screen.js +70 -37
  225. package/lib/module/organisms/Screen.js.map +1 -1
  226. package/lib/module/organisms/SearchList.js +56 -26
  227. package/lib/module/organisms/SearchList.js.map +1 -1
  228. package/lib/module/organisms/Select.js +46 -25
  229. package/lib/module/organisms/Select.js.map +1 -1
  230. package/lib/module/organisms/Slides.js +37 -24
  231. package/lib/module/organisms/Slides.js.map +1 -1
  232. package/lib/module/organisms/ThemeToggle.js +11 -10
  233. package/lib/module/organisms/ThemeToggle.js.map +1 -1
  234. package/lib/module/organisms/Timeline.js +73 -56
  235. package/lib/module/organisms/Timeline.js.map +1 -1
  236. package/lib/module/organisms/Toast.js +47 -16
  237. package/lib/module/organisms/Toast.js.map +1 -1
  238. package/lib/module/organisms/ToastProvider.js +15 -11
  239. package/lib/module/organisms/ToastProvider.js.map +1 -1
  240. package/lib/module/organisms/Wizard.js +41 -16
  241. package/lib/module/organisms/Wizard.js.map +1 -1
  242. package/lib/module/organisms/chart/frame.js +25 -25
  243. package/lib/module/organisms/chart/frame.js.map +1 -1
  244. package/lib/module/organisms/chart/marks.js +42 -42
  245. package/lib/module/organisms/chart/math.js +84 -85
  246. package/lib/module/organisms/chart/math.js.map +1 -1
  247. package/lib/module/organisms/chart/palette.js +28 -28
  248. package/lib/module/organisms/imperativeBridge.js +5 -5
  249. package/lib/module/organisms/imperativeBridge.js.map +1 -1
  250. package/lib/module/organisms/useSlides.js +53 -21
  251. package/lib/module/organisms/useSlides.js.map +1 -1
  252. package/lib/module/safe-area/SafeAreaUIProvider.js +10 -65
  253. package/lib/module/safe-area/SafeAreaUIProvider.js.map +1 -1
  254. package/lib/module/safe-area/index.js +1 -0
  255. package/lib/module/safe-area/index.js.map +1 -1
  256. package/lib/module/theme/KeyboardAvoidance.js +198 -0
  257. package/lib/module/theme/KeyboardAvoidance.js.map +1 -0
  258. package/lib/module/theme/NativeOverlay.js +257 -0
  259. package/lib/module/theme/NativeOverlay.js.map +1 -0
  260. package/lib/module/theme/UIProvider.js +88 -35
  261. package/lib/module/theme/UIProvider.js.map +1 -1
  262. package/lib/module/theme/colors.js +17 -17
  263. package/lib/module/theme/colors.js.map +1 -1
  264. package/lib/module/theme/createStyles.js +20 -16
  265. package/lib/module/theme/createStyles.js.map +1 -1
  266. package/lib/module/theme/createTheme.js +6 -6
  267. package/lib/module/theme/index.js +1 -1
  268. package/lib/module/theme/index.js.map +1 -1
  269. package/lib/module/theme/insets.js +1 -1
  270. package/lib/module/theme/labels.js +29 -1
  271. package/lib/module/theme/labels.js.map +1 -1
  272. package/lib/module/theme/palettes.js +25 -23
  273. package/lib/module/theme/palettes.js.map +1 -1
  274. package/lib/module/theme/tokens.js +27 -13
  275. package/lib/module/theme/tokens.js.map +1 -1
  276. package/lib/module/theme/useKeyboardField.js +33 -0
  277. package/lib/module/theme/useKeyboardField.js.map +1 -0
  278. package/lib/module/theme/useReduceMotion.js +28 -0
  279. package/lib/module/theme/useReduceMotion.js.map +1 -0
  280. package/lib/typescript/atoms/Avatar.d.ts +35 -5
  281. package/lib/typescript/atoms/Avatar.d.ts.map +1 -1
  282. package/lib/typescript/atoms/Badge.d.ts +14 -3
  283. package/lib/typescript/atoms/Badge.d.ts.map +1 -1
  284. package/lib/typescript/atoms/Button.d.ts +34 -3
  285. package/lib/typescript/atoms/Button.d.ts.map +1 -1
  286. package/lib/typescript/atoms/Card.d.ts +13 -2
  287. package/lib/typescript/atoms/Card.d.ts.map +1 -1
  288. package/lib/typescript/atoms/Checkbox.d.ts +26 -1
  289. package/lib/typescript/atoms/Checkbox.d.ts.map +1 -1
  290. package/lib/typescript/atoms/Divider.d.ts +18 -1
  291. package/lib/typescript/atoms/Divider.d.ts.map +1 -1
  292. package/lib/typescript/atoms/EmptyState.d.ts +30 -3
  293. package/lib/typescript/atoms/EmptyState.d.ts.map +1 -1
  294. package/lib/typescript/atoms/Fab.d.ts +24 -4
  295. package/lib/typescript/atoms/Fab.d.ts.map +1 -1
  296. package/lib/typescript/atoms/Gradient.d.ts +21 -15
  297. package/lib/typescript/atoms/Gradient.d.ts.map +1 -1
  298. package/lib/typescript/atoms/IconButton.d.ts +18 -4
  299. package/lib/typescript/atoms/IconButton.d.ts.map +1 -1
  300. package/lib/typescript/atoms/Image.d.ts +39 -17
  301. package/lib/typescript/atoms/Image.d.ts.map +1 -1
  302. package/lib/typescript/atoms/Input.d.ts +57 -7
  303. package/lib/typescript/atoms/Input.d.ts.map +1 -1
  304. package/lib/typescript/atoms/KeyValueRow.d.ts +16 -4
  305. package/lib/typescript/atoms/KeyValueRow.d.ts.map +1 -1
  306. package/lib/typescript/atoms/PressableScale.d.ts +12 -5
  307. package/lib/typescript/atoms/PressableScale.d.ts.map +1 -1
  308. package/lib/typescript/atoms/ShinyText.d.ts +17 -17
  309. package/lib/typescript/atoms/ShinyText.d.ts.map +1 -1
  310. package/lib/typescript/atoms/Skeleton.d.ts +12 -7
  311. package/lib/typescript/atoms/Skeleton.d.ts.map +1 -1
  312. package/lib/typescript/atoms/Spinner.d.ts +29 -1
  313. package/lib/typescript/atoms/Spinner.d.ts.map +1 -1
  314. package/lib/typescript/atoms/Text.d.ts +46 -0
  315. package/lib/typescript/atoms/Text.d.ts.map +1 -1
  316. package/lib/typescript/atoms/Transition.d.ts +19 -15
  317. package/lib/typescript/atoms/Transition.d.ts.map +1 -1
  318. package/lib/typescript/atoms/index.d.ts +3 -3
  319. package/lib/typescript/atoms/index.d.ts.map +1 -1
  320. package/lib/typescript/atoms/inputValidation.d.ts +29 -0
  321. package/lib/typescript/atoms/inputValidation.d.ts.map +1 -0
  322. package/lib/typescript/icons/Icon.d.ts +4 -4
  323. package/lib/typescript/icons/defaultIcons.d.ts +19 -2
  324. package/lib/typescript/icons/defaultIcons.d.ts.map +1 -1
  325. package/lib/typescript/icons/index.d.ts +2 -2
  326. package/lib/typescript/icons/index.d.ts.map +1 -1
  327. package/lib/typescript/icons/types.d.ts +13 -3
  328. package/lib/typescript/icons/types.d.ts.map +1 -1
  329. package/lib/typescript/molecules/AvatarHeader.d.ts +23 -4
  330. package/lib/typescript/molecules/AvatarHeader.d.ts.map +1 -1
  331. package/lib/typescript/molecules/FormActions.d.ts +21 -4
  332. package/lib/typescript/molecules/FormActions.d.ts.map +1 -1
  333. package/lib/typescript/molecules/InfoRow.d.ts +17 -3
  334. package/lib/typescript/molecules/InfoRow.d.ts.map +1 -1
  335. package/lib/typescript/molecules/OptionCard.d.ts +20 -5
  336. package/lib/typescript/molecules/OptionCard.d.ts.map +1 -1
  337. package/lib/typescript/molecules/SegmentedControl.d.ts +18 -2
  338. package/lib/typescript/molecules/SegmentedControl.d.ts.map +1 -1
  339. package/lib/typescript/molecules/Stepper.d.ts +23 -7
  340. package/lib/typescript/molecules/Stepper.d.ts.map +1 -1
  341. package/lib/typescript/molecules/Steps.d.ts +18 -4
  342. package/lib/typescript/molecules/Steps.d.ts.map +1 -1
  343. package/lib/typescript/molecules/SymmetricGrid.d.ts +15 -5
  344. package/lib/typescript/molecules/SymmetricGrid.d.ts.map +1 -1
  345. package/lib/typescript/organisms/Alert.d.ts +28 -2
  346. package/lib/typescript/organisms/Alert.d.ts.map +1 -1
  347. package/lib/typescript/organisms/AlertProvider.d.ts +10 -10
  348. package/lib/typescript/organisms/AlertProvider.d.ts.map +1 -1
  349. package/lib/typescript/organisms/BottomSheet.d.ts +20 -5
  350. package/lib/typescript/organisms/BottomSheet.d.ts.map +1 -1
  351. package/lib/typescript/organisms/Chart.d.ts +86 -75
  352. package/lib/typescript/organisms/Chart.d.ts.map +1 -1
  353. package/lib/typescript/organisms/DateField.d.ts +17 -3
  354. package/lib/typescript/organisms/DateField.d.ts.map +1 -1
  355. package/lib/typescript/organisms/DatePicker.d.ts +7 -11
  356. package/lib/typescript/organisms/DatePicker.d.ts.map +1 -1
  357. package/lib/typescript/organisms/List.d.ts +30 -3
  358. package/lib/typescript/organisms/List.d.ts.map +1 -1
  359. package/lib/typescript/organisms/Modal.d.ts +30 -3
  360. package/lib/typescript/organisms/Modal.d.ts.map +1 -1
  361. package/lib/typescript/organisms/NavigationBar.d.ts +26 -7
  362. package/lib/typescript/organisms/NavigationBar.d.ts.map +1 -1
  363. package/lib/typescript/organisms/OptionWheel.d.ts +20 -16
  364. package/lib/typescript/organisms/OptionWheel.d.ts.map +1 -1
  365. package/lib/typescript/organisms/ReorderableList.d.ts +20 -11
  366. package/lib/typescript/organisms/ReorderableList.d.ts.map +1 -1
  367. package/lib/typescript/organisms/Screen.d.ts +27 -8
  368. package/lib/typescript/organisms/Screen.d.ts.map +1 -1
  369. package/lib/typescript/organisms/SearchList.d.ts +46 -3
  370. package/lib/typescript/organisms/SearchList.d.ts.map +1 -1
  371. package/lib/typescript/organisms/Select.d.ts +26 -6
  372. package/lib/typescript/organisms/Select.d.ts.map +1 -1
  373. package/lib/typescript/organisms/Slides.d.ts +44 -26
  374. package/lib/typescript/organisms/Slides.d.ts.map +1 -1
  375. package/lib/typescript/organisms/ThemeToggle.d.ts +6 -2
  376. package/lib/typescript/organisms/ThemeToggle.d.ts.map +1 -1
  377. package/lib/typescript/organisms/Timeline.d.ts +26 -9
  378. package/lib/typescript/organisms/Timeline.d.ts.map +1 -1
  379. package/lib/typescript/organisms/Toast.d.ts +19 -4
  380. package/lib/typescript/organisms/Toast.d.ts.map +1 -1
  381. package/lib/typescript/organisms/ToastProvider.d.ts +8 -8
  382. package/lib/typescript/organisms/ToastProvider.d.ts.map +1 -1
  383. package/lib/typescript/organisms/Wizard.d.ts +24 -6
  384. package/lib/typescript/organisms/Wizard.d.ts.map +1 -1
  385. package/lib/typescript/organisms/chart/frame.d.ts +21 -21
  386. package/lib/typescript/organisms/chart/frame.d.ts.map +1 -1
  387. package/lib/typescript/organisms/chart/marks.d.ts +28 -28
  388. package/lib/typescript/organisms/chart/marks.d.ts.map +1 -1
  389. package/lib/typescript/organisms/chart/math.d.ts +69 -70
  390. package/lib/typescript/organisms/chart/math.d.ts.map +1 -1
  391. package/lib/typescript/organisms/chart/palette.d.ts +2 -2
  392. package/lib/typescript/organisms/chart/palette.d.ts.map +1 -1
  393. package/lib/typescript/organisms/imperativeBridge.d.ts +4 -4
  394. package/lib/typescript/organisms/useSlides.d.ts +8 -16
  395. package/lib/typescript/organisms/useSlides.d.ts.map +1 -1
  396. package/lib/typescript/safe-area/SafeAreaUIProvider.d.ts +9 -7
  397. package/lib/typescript/safe-area/SafeAreaUIProvider.d.ts.map +1 -1
  398. package/lib/typescript/safe-area/index.d.ts.map +1 -1
  399. package/lib/typescript/theme/KeyboardAvoidance.d.ts +62 -0
  400. package/lib/typescript/theme/KeyboardAvoidance.d.ts.map +1 -0
  401. package/lib/typescript/theme/NativeOverlay.d.ts +43 -0
  402. package/lib/typescript/theme/NativeOverlay.d.ts.map +1 -0
  403. package/lib/typescript/theme/UIProvider.d.ts +38 -20
  404. package/lib/typescript/theme/UIProvider.d.ts.map +1 -1
  405. package/lib/typescript/theme/colors.d.ts +13 -13
  406. package/lib/typescript/theme/colors.d.ts.map +1 -1
  407. package/lib/typescript/theme/createStyles.d.ts +20 -14
  408. package/lib/typescript/theme/createStyles.d.ts.map +1 -1
  409. package/lib/typescript/theme/createTheme.d.ts +5 -5
  410. package/lib/typescript/theme/index.d.ts +1 -1
  411. package/lib/typescript/theme/index.d.ts.map +1 -1
  412. package/lib/typescript/theme/insets.d.ts +1 -1
  413. package/lib/typescript/theme/insets.d.ts.map +1 -1
  414. package/lib/typescript/theme/labels.d.ts +57 -2
  415. package/lib/typescript/theme/labels.d.ts.map +1 -1
  416. package/lib/typescript/theme/palettes.d.ts +25 -19
  417. package/lib/typescript/theme/palettes.d.ts.map +1 -1
  418. package/lib/typescript/theme/tokens.d.ts +15 -8
  419. package/lib/typescript/theme/tokens.d.ts.map +1 -1
  420. package/lib/typescript/theme/types.d.ts +7 -7
  421. package/lib/typescript/theme/types.d.ts.map +1 -1
  422. package/lib/typescript/theme/useKeyboardField.d.ts +17 -0
  423. package/lib/typescript/theme/useKeyboardField.d.ts.map +1 -0
  424. package/lib/typescript/theme/useReduceMotion.d.ts +7 -0
  425. package/lib/typescript/theme/useReduceMotion.d.ts.map +1 -0
  426. package/llms.txt +4 -4
  427. package/package.json +15 -14
  428. package/registry/alert-provider.json +4 -3
  429. package/registry/alert.json +3 -2
  430. package/registry/avatar-header.json +1 -1
  431. package/registry/avatar.json +3 -2
  432. package/registry/badge.json +1 -1
  433. package/registry/bottom-sheet.json +1 -1
  434. package/registry/button.json +3 -2
  435. package/registry/card.json +1 -1
  436. package/registry/chart.json +5 -5
  437. package/registry/checkbox.json +3 -2
  438. package/registry/core.json +31 -15
  439. package/registry/date-field.json +1 -1
  440. package/registry/date-picker.json +3 -2
  441. package/registry/divider.json +1 -1
  442. package/registry/empty-state.json +4 -2
  443. package/registry/fab.json +3 -2
  444. package/registry/form-actions.json +3 -2
  445. package/registry/gradient.json +1 -1
  446. package/registry/icon-button.json +3 -2
  447. package/registry/image.json +1 -1
  448. package/registry/index.json +79 -61
  449. package/registry/info-row.json +1 -1
  450. package/registry/input.json +5 -1
  451. package/registry/key-value-row.json +1 -1
  452. package/registry/list.json +3 -1
  453. package/registry/manifest.json +3 -1
  454. package/registry/modal.json +1 -1
  455. package/registry/navigation-bar.json +1 -1
  456. package/registry/option-card.json +3 -2
  457. package/registry/option-wheel.json +1 -1
  458. package/registry/pressable-scale.json +3 -2
  459. package/registry/reorderable-list.json +1 -1
  460. package/registry/screen.json +1 -1
  461. package/registry/search-list.json +7 -1
  462. package/registry/segmented-control.json +1 -1
  463. package/registry/select.json +1 -1
  464. package/registry/shiny-text.json +1 -1
  465. package/registry/skeleton.json +3 -2
  466. package/registry/slides.json +2 -2
  467. package/registry/spinner.json +1 -1
  468. package/registry/stepper.json +1 -1
  469. package/registry/steps.json +1 -1
  470. package/registry/symmetric-grid.json +1 -1
  471. package/registry/theme-toggle.json +1 -1
  472. package/registry/timeline.json +1 -1
  473. package/registry/title.json +1 -1
  474. package/registry/toast-provider.json +2 -2
  475. package/registry/toast.json +1 -1
  476. package/registry/transition.json +1 -1
  477. package/registry/wizard.json +1 -1
  478. package/src/atoms/Avatar.tsx +117 -26
  479. package/src/atoms/Badge.tsx +20 -9
  480. package/src/atoms/Button.tsx +102 -30
  481. package/src/atoms/Card.tsx +23 -3
  482. package/src/atoms/Checkbox.tsx +49 -12
  483. package/src/atoms/Divider.tsx +34 -4
  484. package/src/atoms/EmptyState.tsx +63 -16
  485. package/src/atoms/Fab.tsx +56 -9
  486. package/src/atoms/Gradient.tsx +92 -41
  487. package/src/atoms/IconButton.tsx +27 -4
  488. package/src/atoms/Image.tsx +74 -28
  489. package/src/atoms/Input.tsx +129 -19
  490. package/src/atoms/KeyValueRow.tsx +72 -28
  491. package/src/atoms/PressableScale.tsx +31 -7
  492. package/src/atoms/ShinyText.tsx +31 -31
  493. package/src/atoms/Skeleton.tsx +37 -17
  494. package/src/atoms/Spinner.tsx +87 -24
  495. package/src/atoms/Text.tsx +66 -6
  496. package/src/atoms/Transition.tsx +40 -44
  497. package/src/atoms/index.ts +3 -3
  498. package/src/atoms/inputValidation.ts +59 -0
  499. package/src/icons/Icon.tsx +4 -4
  500. package/src/icons/defaultIcons.tsx +445 -22
  501. package/src/icons/index.ts +2 -2
  502. package/src/icons/types.ts +26 -4
  503. package/src/molecules/AvatarHeader.tsx +88 -34
  504. package/src/molecules/FormActions.tsx +36 -6
  505. package/src/molecules/InfoRow.tsx +39 -12
  506. package/src/molecules/OptionCard.tsx +55 -20
  507. package/src/molecules/SegmentedControl.tsx +135 -15
  508. package/src/molecules/Stepper.tsx +73 -19
  509. package/src/molecules/Steps.tsx +121 -39
  510. package/src/molecules/SymmetricGrid.tsx +28 -12
  511. package/src/organisms/Alert.tsx +97 -26
  512. package/src/organisms/AlertProvider.tsx +13 -13
  513. package/src/organisms/BottomSheet.tsx +115 -43
  514. package/src/organisms/Chart.tsx +193 -164
  515. package/src/organisms/DateField.tsx +40 -15
  516. package/src/organisms/DatePicker.tsx +53 -32
  517. package/src/organisms/List.tsx +64 -15
  518. package/src/organisms/Modal.tsx +122 -63
  519. package/src/organisms/NavigationBar.tsx +73 -23
  520. package/src/organisms/OptionWheel.tsx +70 -66
  521. package/src/organisms/ReorderableList.tsx +49 -27
  522. package/src/organisms/Screen.tsx +79 -42
  523. package/src/organisms/SearchList.tsx +84 -20
  524. package/src/organisms/Select.tsx +63 -29
  525. package/src/organisms/Slides.tsx +63 -44
  526. package/src/organisms/ThemeToggle.tsx +15 -6
  527. package/src/organisms/Timeline.tsx +79 -62
  528. package/src/organisms/Toast.tsx +50 -15
  529. package/src/organisms/ToastProvider.tsx +17 -13
  530. package/src/organisms/Wizard.tsx +58 -21
  531. package/src/organisms/chart/frame.tsx +35 -35
  532. package/src/organisms/chart/marks.tsx +53 -53
  533. package/src/organisms/chart/math.ts +93 -94
  534. package/src/organisms/chart/palette.ts +28 -28
  535. package/src/organisms/imperativeBridge.ts +5 -5
  536. package/src/organisms/useSlides.ts +66 -31
  537. package/src/safe-area/SafeAreaUIProvider.tsx +9 -70
  538. package/src/safe-area/index.ts +1 -0
  539. package/src/theme/KeyboardAvoidance.tsx +216 -0
  540. package/src/theme/NativeOverlay.tsx +269 -0
  541. package/src/theme/UIProvider.tsx +109 -46
  542. package/src/theme/colors.ts +21 -21
  543. package/src/theme/createStyles.ts +23 -19
  544. package/src/theme/createTheme.ts +6 -6
  545. package/src/theme/index.ts +1 -1
  546. package/src/theme/insets.ts +1 -1
  547. package/src/theme/labels.ts +85 -2
  548. package/src/theme/palettes.ts +33 -25
  549. package/src/theme/tokens.ts +27 -13
  550. package/src/theme/types.ts +7 -7
  551. package/src/theme/useKeyboardField.ts +33 -0
  552. package/src/theme/useReduceMotion.ts +27 -0
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
 
3
- import React, { memo, useCallback, useMemo, useRef, useState } from 'react';
3
+ import React, { createContext, memo, useCallback, useContext, useMemo, useRef, useState } from 'react';
4
4
  import { Pressable, Text, View } from 'react-native';
5
5
  import { contrast } from '../theme/colors';
6
6
  import { createStyles } from '../theme/createStyles';
7
7
  import { useAllowFontScaling, useLabels, useTheme } from '../theme/UIProvider';
8
+ import { useReduceMotion } from '../theme/useReduceMotion';
8
9
  import { SegmentedControl } from '../molecules/SegmentedControl';
9
10
  import { Bar, Dot, Polyline, Wedge } from './chart/marks';
10
11
  import { AxisLabels, CartesianGrid, Legend, RadarGrid, Tooltip } from './chart/frame';
@@ -12,35 +13,43 @@ import { seriesPalette } from './chart/palette';
12
13
  import { angleOf, arcAt, arcsFor, clamp, exactTicks, extent, fanStrips, formatNumber, growExtent, linearScale, lttbIndices, niceScale, polar, radarAngles, sampleY, smoothPoints, stackRow, toNumber } from './chart/math';
13
14
 
14
15
  /**
15
- * Un filtro de la barra superior. Chart no filtra nada por su cuenta: muestra
16
- * el control y avisa. Quien tiene los datos decide qué significa "últimos 7
17
- * días", y eso no se puede adivinar desde acá.
16
+ * A filter in the top bar. Chart doesn't filter anything on its own: it shows
17
+ * the control and reports. Whoever has the data decides what "last 7 days"
18
+ * means, and that can't be guessed from here.
18
19
  */
19
-
20
- // 'pie' y 'donut' van separados aunque compartan todo: con un solo miembro
21
- // cuyo `type` fuera `'pie' | 'donut'`, TypeScript no saca ese miembro de la
22
- // unión al descartarlo, y el resto del componente deja de estrecharse.
23
20
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
21
+ /** Background the marks paint "holes" with (donut center, point rings). */
22
+ const ChartSurfaceContext = /*#__PURE__*/createContext(undefined);
23
+ function useChartSurface() {
24
+ const theme = useTheme();
25
+ return useContext(ChartSurfaceContext) ?? theme.colors.surfaceRaised;
26
+ }
27
+
28
+ // 'pie' and 'donut' are kept separate even though they share everything: with
29
+ // a single member whose `type` were `'pie' | 'donut'`, TypeScript doesn't drop
30
+ // that member from the union when ruling it out, and the rest of the component
31
+ // stops narrowing.
32
+
24
33
  const DEFAULT_HEIGHT = 220;
25
34
  const DEFAULT_TICKS = 4;
26
- /** Piso del canal de las etiquetas de valor, a la izquierda. */
35
+ /** Floor of the value-label gutter, on the left. */
27
36
  const VALUE_GUTTER = 38;
28
37
  /**
29
- * Ancho estimado de un caracter de etiqueta. React Native no mide texto sin
30
- * renderizarlo, y medir para decidir el layout haría aparecer el chart
31
- * corrido un frame; a `fontSize.xs` un dígito ronda 0.6em, y de más es mejor
32
- * que de menos — sobra aire, no se corta el número.
38
+ * Estimated width of a label character. React Native doesn't measure text
39
+ * without rendering it, and measuring to decide the layout would make the
40
+ * chart show up shifted for a frame; at `fontSize.xs` a digit is around
41
+ * 0.6em, and too much is better than too little — extra room, no clipped number.
33
42
  */
34
43
  const VALUE_CHAR = 6.5;
35
- /** Tope del canal: un eje ancho no puede comerse el plot. */
44
+ /** Gutter cap: a wide axis can't eat the plot. */
36
45
  const VALUE_GUTTER_MAX = 0.3;
37
- /** Canal de las categorías cuando van a la izquierda (barras horizontales). */
46
+ /** Category gutter when they go on the left (horizontal bars). */
38
47
  const CATEGORY_GUTTER = 64;
39
- /** Canal de las etiquetas de abajo. */
48
+ /** Gutter for the bottom labels. */
40
49
  const BOTTOM_GUTTER = 16;
41
- /** Fracción del ancho de banda que ocupan las barras; el resto es aire. */
50
+ /** Fraction of the band width taken by the bars; the rest is room. */
42
51
  const BAND_FILL = 0.7;
43
- /** Aire alrededor del radar para que entren las etiquetas de los ejes. */
52
+ /** Room around the radar so the axis labels fit. */
44
53
  const RADAR_INSET = 26;
45
54
  const DIM_OPACITY = 0.3;
46
55
  const useStyles = createStyles(theme => ({
@@ -82,7 +91,7 @@ const useStyles = createStyles(theme => ({
82
91
  }
83
92
  }));
84
93
 
85
- /** Estado controlado o propio, con el mismo contrato en los dos casos. */
94
+ /** Controlled or own state, with the same contract in both cases. */
86
95
  function useControlled(controlled, fallback) {
87
96
  const [own, setOwn] = useState(fallback);
88
97
  const isControlled = controlled !== undefined;
@@ -90,10 +99,10 @@ function useControlled(controlled, fallback) {
90
99
  }
91
100
 
92
101
  /**
93
- * Resuelve el dominio del eje de valores a partir de lo que pidió el
94
- * consumidor. En 'sticky' la referencia vive en un ref: lo que importa no es
95
- * el dominio de este render sino el más ancho que se haya visto, y guardarlo
96
- * en estado dispararía un render de más por cada tick que ensancha el eje.
102
+ * Resolves the value axis domain from what the consumer asked for. In
103
+ * 'sticky' the reference lives in a ref: what matters isn't this render's
104
+ * domain but the widest one seen so far, and keeping it in state would fire
105
+ * an extra render for every tick that widens the axis.
97
106
  */
98
107
  function useDomain(measured, domain) {
99
108
  const widest = useRef(null);
@@ -107,19 +116,20 @@ function useDomain(measured, domain) {
107
116
 
108
117
  /**
109
118
  * Chart
110
- * Barras (verticales, horizontales, agrupadas, apiladas), línea, área, torta,
111
- * dona y radar en un solo componente, porque lo que cambia entre ellos es la
112
- * marca que se dibuja y no el resto: datos, escala, ejes, leyenda, tooltip,
113
- * selección y filtros son los mismos seis mecanismos en todos.
119
+ * Bars (vertical, horizontal, grouped, stacked), line, area, pie, donut and
120
+ * radar in a single component, because what changes between them is the mark
121
+ * being drawn and not the rest: data, scale, axes, legend, tooltip, selection
122
+ * and filters are the same six mechanisms in all of them.
114
123
  *
115
- * Se dibuja con `View`: React Native no trae lienzo vectorial y la librería no
116
- * puede agregar uno. Las tres primitivas están en `chart/marks.tsx` y la
117
- * geometría entera, sin React, en `chart/math.ts`.
124
+ * It is drawn with `View`: React Native ships no vector canvas and the library
125
+ * can't add one. The three primitives are in `chart/marks.tsx` and the whole
126
+ * geometry, without React, in `chart/math.ts`.
118
127
  *
119
- * Gestalt: destino común — al tocar una categoría, todo lo que no es ella baja
120
- * a {@link DIM_OPACITY} a la vez, así que lo resaltado se lee como un grupo y
121
- * no como una marca suelta. La leyenda usa similitud: el mismo color que la
122
- * serie, y por eso puede apagarla sin que haga falta explicar qué apaga.
128
+ * Gestalt: common fate — when you tap a category, everything that isn't it
129
+ * drops to {@link DIM_OPACITY} at once, so what is highlighted reads as a group
130
+ * and not as a loose mark. The legend uses similarity: the same color as the
131
+ * series, which is why it can turn it off without having to explain what it
132
+ * turns off.
123
133
  */
124
134
  export function Chart(props) {
125
135
  const {
@@ -138,10 +148,11 @@ export function Chart(props) {
138
148
  onSelect,
139
149
  tooltip = true,
140
150
  formatValue = formatNumber,
141
- animate = true,
151
+ animate: animateProp = true,
142
152
  duration,
143
153
  emptyText,
144
154
  accessibilityLabel,
155
+ surfaceColor,
145
156
  style,
146
157
  testID
147
158
  } = props;
@@ -149,6 +160,9 @@ export function Chart(props) {
149
160
  const styles = useStyles();
150
161
  const allowFontScaling = useAllowFontScaling();
151
162
  const uiLabels = useLabels();
163
+ // Reduce Motion: the marks appear in their final shape instead of growing.
164
+ const reduceMotion = useReduceMotion();
165
+ const animate = animateProp && !reduceMotion;
152
166
  const [width, setWidth] = useState(0);
153
167
  const [hidden, setHidden, hiddenIsControlled] = useControlled(hiddenKeys, defaultHiddenKeys ?? []);
154
168
  const [pick, setPick, selectionIsControlled] = useControlled(selected, null);
@@ -157,15 +171,15 @@ export function Chart(props) {
157
171
  const decimate = polyline ? props.decimate : false;
158
172
 
159
173
  /**
160
- * Lo que se dibuja: la ventana de `data`, y de ahí los puntos que caben.
161
- * El diezmado corre sobre la fila entera, elegida con la primera serie
162
- * visible: las series comparten eje x, así que quedarse con índices
163
- * distintos por serie rompería la alineación, la capa de toque y el tooltip.
174
+ * What gets drawn: the window of `data`, and from that the points that fit.
175
+ * Decimation runs over the whole row, chosen with the first visible series:
176
+ * the series share the x axis, so keeping different indexes per series would
177
+ * break the alignment, the touch layer and the tooltip.
164
178
  */
165
179
  const rows = useMemo(() => {
166
180
  const windowed = windowSize && windowSize > 0 ? data.slice(-windowSize) : data;
167
181
  if (!polyline || decimate === false || width === 0) return windowed;
168
- // Un punto cada dos píxeles: más no se ve y sí se paga.
182
+ // One point every two pixels: more can't be seen but still has to be paid for.
169
183
  const target = typeof decimate === 'number' ? decimate : Math.floor(width / 2);
170
184
  if (windowed.length <= target) return windowed;
171
185
  const lead = series.find(item => !hidden.includes(item.key))?.key ?? series[0]?.key;
@@ -176,10 +190,10 @@ export function Chart(props) {
176
190
  const ids = useMemo(() => rows.map((row, index) => selectBy ? selectBy(row, index) : String(index)), [rows, selectBy]);
177
191
 
178
192
  /**
179
- * La selección se guarda por `id` y se resuelve contra las filas de ahora:
180
- * si el dato se corrió, el resaltado lo sigue; si salió de la ventana,
181
- * desaparece. Reusar el índice a ciegas señalaría el dato que quedó en ese
182
- * lugar, que no es el que nadie eligió.
193
+ * The selection is stored by `id` and resolved against the current rows:
194
+ * if the datum shifted, the highlight follows it; if it left the window, it
195
+ * disappears. Blindly reusing the index would point at the datum that ended
196
+ * up in that spot, which isn't the one anyone picked.
183
197
  */
184
198
  const selection = useMemo(() => {
185
199
  if (!pick) return null;
@@ -195,8 +209,8 @@ export function Chart(props) {
195
209
  };
196
210
  }, [pick, ids, rows, labels]);
197
211
 
198
- // En torta las categorías son las filas; en el resto, las columnas. De eso
199
- // dependen el color, la leyenda y qué apaga un toque en ella.
212
+ // In a pie the categories are the rows; in the rest, the columns. The
213
+ // color, the legend and what a tap on it turns off depend on that.
200
214
  const palette = seriesPalette(theme, Math.max(1, isPie ? rows.length : series.length));
201
215
  const entries = useMemo(() => isPie ? labels.map((label, index) => ({
202
216
  key: label,
@@ -216,9 +230,9 @@ export function Chart(props) {
216
230
  }, [hidden, hiddenIsControlled, setHidden, onHiddenKeysChange]);
217
231
 
218
232
  /**
219
- * Los plots avisan qué se tocó —fila y serie— y la selección entera se
220
- * arma acá: es el único lugar que conoce `selectBy`, las etiquetas y las
221
- * filas de verdad, y así los tres no repiten el armado.
233
+ * The plots report what was tapped —row and series— and the whole selection
234
+ * is built here: it is the only place that knows `selectBy`, the labels and
235
+ * the actual rows, so the three don't repeat the building.
222
236
  */
223
237
  const applySelection = useCallback(hit => {
224
238
  const row = hit ? rows[hit.index] : undefined;
@@ -230,9 +244,9 @@ export function Chart(props) {
230
244
  seriesKey: hit.seriesKey,
231
245
  value: toNumber(row[hit.seriesKey]) ?? 0
232
246
  } : null;
233
- // Tocar lo ya elegido lo suelta: sin eso no habría forma de volver al
234
- // chart entero sin tocar afuera, y "afuera" en una pantalla con scroll
235
- // no siempre existe.
247
+ // Tapping what is already selected releases it: without that there would
248
+ // be no way back to the whole chart without tapping outside, and
249
+ // "outside" doesn't always exist on a scrolling screen.
236
250
  const same = next && selection && next.id === selection.id && next.seriesKey === selection.seriesKey;
237
251
  const value = same ? null : next;
238
252
  if (!selectionIsControlled) setPick(value);
@@ -257,77 +271,80 @@ export function Chart(props) {
257
271
  tooltip,
258
272
  testID
259
273
  };
260
- return /*#__PURE__*/_jsxs(View, {
261
- style: [styles.root, style],
262
- testID: testID,
263
- accessible: false,
264
- children: [filters && filters.length > 0 ? /*#__PURE__*/_jsx(View, {
265
- style: styles.filters,
266
- children: filters.map(filter => /*#__PURE__*/_jsx(SegmentedControl, {
267
- options: filter.options,
268
- value: filter.value,
269
- onChange: filter.onChange,
270
- testID: testID && `${testID}-filter-${filter.key}`
271
- }, filter.key))
272
- }) : null, /*#__PURE__*/_jsxs(View, {
273
- style: [styles.plot, {
274
- height
275
- }],
276
- onLayout: onLayout,
277
- accessible: true,
278
- accessibilityRole: "image",
279
- accessibilityLabel: accessibilityLabel,
280
- testID: testID && `${testID}-plot`,
281
- children: [width === 0 || empty ? null : props.type === 'pie' || props.type === 'donut' ? /*#__PURE__*/_jsx(PiePlot, {
282
- ...shared,
283
- donut: props.type === 'donut',
284
- innerRadius: props.innerRadius,
285
- sliceLabels: props.sliceLabels ?? 'percent',
286
- valueKey: series[0]?.key ?? ''
287
- }) : props.type === 'radar' ? /*#__PURE__*/_jsx(RadarPlot, {
288
- ...shared,
289
- domain: props.domain,
290
- levels: props.levels ?? 4,
291
- fill: props.fill ?? true,
292
- thickness: props.thickness ?? 2,
293
- dots: props.dots ?? true
294
- }) : /*#__PURE__*/_jsx(CartesianPlot, {
295
- ...shared,
296
- type: props.type,
297
- orientation: props.type === 'bar' ? props.orientation ?? 'vertical' : 'vertical',
298
- stacked: props.type === 'bar' || props.type === 'area' ? props.stacked ?? false : false,
299
- barRadius: props.type === 'bar' ? props.barRadius ?? theme.tokens.radius.xs : 0,
300
- smooth: props.type !== 'bar' ? props.smooth ?? false : false,
301
- thickness: props.type !== 'bar' ? props.thickness ?? 2 : 0,
302
- dots: props.type === 'line' ? props.dots ?? true : props.type === 'area' ? props.dots ?? false : false,
303
- fillOpacity: props.type === 'area' ? props.fillOpacity ?? 0.22 : 0,
304
- domain: props.domain,
305
- grid: props.grid ?? true,
306
- ticks: props.ticks ?? DEFAULT_TICKS,
307
- xAxis: props.xAxis ?? true,
308
- yAxis: props.yAxis ?? true
309
- }), empty ? /*#__PURE__*/_jsx(View, {
310
- style: styles.empty,
311
- testID: testID && `${testID}-empty`,
312
- children: /*#__PURE__*/_jsx(Text, {
313
- allowFontScaling: allowFontScaling,
314
- style: styles.emptyText,
315
- children: emptyText ?? uiLabels.noResultsTitle
316
- })
274
+ return /*#__PURE__*/_jsx(ChartSurfaceContext.Provider, {
275
+ value: surfaceColor ?? theme.colors.surfaceRaised,
276
+ children: /*#__PURE__*/_jsxs(View, {
277
+ style: [styles.root, style],
278
+ testID: testID,
279
+ accessible: false,
280
+ children: [filters && filters.length > 0 ? /*#__PURE__*/_jsx(View, {
281
+ style: styles.filters,
282
+ children: filters.map(filter => /*#__PURE__*/_jsx(SegmentedControl, {
283
+ options: filter.options,
284
+ value: filter.value,
285
+ onChange: filter.onChange,
286
+ testID: testID && `${testID}-filter-${filter.key}`
287
+ }, filter.key))
288
+ }) : null, /*#__PURE__*/_jsxs(View, {
289
+ style: [styles.plot, {
290
+ height
291
+ }],
292
+ onLayout: onLayout,
293
+ accessible: true,
294
+ accessibilityRole: "image",
295
+ accessibilityLabel: accessibilityLabel,
296
+ testID: testID && `${testID}-plot`,
297
+ children: [width === 0 || empty ? null : props.type === 'pie' || props.type === 'donut' ? /*#__PURE__*/_jsx(PiePlot, {
298
+ ...shared,
299
+ donut: props.type === 'donut',
300
+ innerRadius: props.innerRadius,
301
+ sliceLabels: props.sliceLabels ?? 'percent',
302
+ valueKey: series[0]?.key ?? ''
303
+ }) : props.type === 'radar' ? /*#__PURE__*/_jsx(RadarPlot, {
304
+ ...shared,
305
+ domain: props.domain,
306
+ levels: props.levels ?? 4,
307
+ fill: props.fill ?? true,
308
+ thickness: props.thickness ?? 2,
309
+ dots: props.dots ?? true
310
+ }) : /*#__PURE__*/_jsx(CartesianPlot, {
311
+ ...shared,
312
+ type: props.type,
313
+ orientation: props.type === 'bar' ? props.orientation ?? 'vertical' : 'vertical',
314
+ stacked: props.type === 'bar' || props.type === 'area' ? props.stacked ?? false : false,
315
+ barRadius: props.type === 'bar' ? props.barRadius ?? theme.tokens.radius.xs : 0,
316
+ smooth: props.type !== 'bar' ? props.smooth ?? false : false,
317
+ thickness: props.type !== 'bar' ? props.thickness ?? 2 : 0,
318
+ dots: props.type === 'line' ? props.dots ?? true : props.type === 'area' ? props.dots ?? false : false,
319
+ fillOpacity: props.type === 'area' ? props.fillOpacity ?? 0.22 : 0,
320
+ domain: props.domain,
321
+ grid: props.grid ?? true,
322
+ ticks: props.ticks ?? DEFAULT_TICKS,
323
+ xAxis: props.xAxis ?? true,
324
+ yAxis: props.yAxis ?? true
325
+ }), empty ? /*#__PURE__*/_jsx(View, {
326
+ style: styles.empty,
327
+ testID: testID && `${testID}-empty`,
328
+ children: /*#__PURE__*/_jsx(Text, {
329
+ allowFontScaling: allowFontScaling,
330
+ style: styles.emptyText,
331
+ children: emptyText ?? uiLabels.noResultsTitle
332
+ })
333
+ }) : null]
334
+ }), showLegend ? /*#__PURE__*/_jsx(Legend, {
335
+ items: entries,
336
+ hidden: hidden,
337
+ onToggle: toggleable ? applyHidden : undefined,
338
+ testID: testID && `${testID}-legend`
317
339
  }) : null]
318
- }), showLegend ? /*#__PURE__*/_jsx(Legend, {
319
- items: entries,
320
- hidden: hidden,
321
- onToggle: toggleable ? applyHidden : undefined,
322
- testID: testID && `${testID}-legend`
323
- }) : null]
340
+ })
324
341
  });
325
342
  }
326
343
  Chart.displayName = 'Chart';
327
344
 
328
- // ── lo que comparten los tres plots ────────────────────────────────────────
345
+ // ── what the three plots share ─────────────────────────────────────────────
329
346
 
330
- /** Filas del tooltip para una categoría del eje x. */
347
+ /** Tooltip rows for a category on the x axis. */
331
348
  function tooltipRowsAt(rows, index, visible, format) {
332
349
  const row = rows[index];
333
350
  if (!row) return [];
@@ -342,12 +359,12 @@ function tooltipRowsAt(rows, index, visible, format) {
342
359
  }).filter(item => item !== null);
343
360
  }
344
361
 
345
- // ── barras, línea y área ───────────────────────────────────────────────────
362
+ // ── bars, line and area ────────────────────────────────────────────────────
346
363
 
347
- /** Ancho de una tira del relleno de área, en píxeles. Más fino = más vistas. */
364
+ /** Width of one strip of the area fill, in pixels. Thinner = more views. */
348
365
  const STRIP_WIDTH = 4;
349
366
  const MAX_STRIPS = 140;
350
- /** Aire entre dos barras del mismo grupo. */
367
+ /** Room between two bars of the same group. */
351
368
  const GROUP_GAP = 2;
352
369
  const CartesianPlot = /*#__PURE__*/memo(props => {
353
370
  const {
@@ -378,27 +395,28 @@ const CartesianPlot = /*#__PURE__*/memo(props => {
378
395
  yAxis
379
396
  } = props;
380
397
  const theme = useTheme();
398
+ const surface = useChartSurface();
381
399
  const horizontal = type === 'bar' && orientation === 'horizontal';
382
400
  const keys = useMemo(() => visible.map(entry => entry.key), [visible]);
383
401
  const bottomGutter = xAxis ? BOTTOM_GUTTER : 0;
384
402
 
385
- // La línea puede no tocar el cero (una temperatura, un ranking); una barra
386
- // sí tiene que hacerlo, porque su largo es el que dice el valor.
403
+ // The line may not touch zero (a temperature, a ranking); a bar does have
404
+ // to, because its length is what states the value.
387
405
  const measured = useMemo(() => extent(rows, keys, {
388
406
  stacked,
389
407
  includeZero: type !== 'line'
390
408
  }), [rows, keys, stacked, type]);
391
409
  const [low, high] = useDomain(measured, domain);
392
410
 
393
- // Un dominio a mano se respeta tal cual; uno medido (o 'sticky') se
394
- // redondea, que es lo que hace legible el eje.
411
+ // A hand-set domain is respected as is; a measured one (or 'sticky') is
412
+ // rounded, which is what makes the axis legible.
395
413
  const nice = useMemo(() => Array.isArray(domain) ? exactTicks(low, high, tickCount) : niceScale(low, high, tickCount), [domain, low, high, tickCount]);
396
414
 
397
415
  /**
398
- * El canal sale de la etiqueta más larga, no de una constante: con un
399
- * `formatValue` propio ("$3000", "1.250 ms") un ancho fijo corta el número
400
- * y el eje pasa a decir "$30…". Los ticks no dependen del ancho del plot,
401
- * así que se pueden medir antes de repartirlo.
416
+ * The gutter comes from the longest label, not from a constant: with a
417
+ * custom `formatValue` ("$3000", "1.250 ms") a fixed width clips the number
418
+ * and the axis ends up saying "$30…". The ticks don't depend on the plot's
419
+ * width, so they can be measured before splitting it up.
402
420
  */
403
421
  const leftGutter = useMemo(() => {
404
422
  if (!yAxis) return 0;
@@ -419,7 +437,7 @@ const CartesianPlot = /*#__PURE__*/memo(props => {
419
437
  const baseline = scale.toPixel(clamp(0, scale.nice.min, scale.nice.max));
420
438
  const stacks = useMemo(() => stacked ? rows.map(row => stackRow(row, keys)) : null, [stacked, rows, keys]);
421
439
 
422
- /** Puntos de una serie: `to` es el valor, `from` el piso desde donde se rellena. */
440
+ /** A series' points: `to` is the value, `from` the floor it is filled from. */
423
441
  const pointsFor = useCallback((key, edge) => {
424
442
  const out = [];
425
443
  rows.forEach((row, index) => {
@@ -442,8 +460,8 @@ const CartesianPlot = /*#__PURE__*/memo(props => {
442
460
  return out;
443
461
  }, [rows, stacks, centerOf, scale, baseline]);
444
462
  const pickAt = useCallback((index, event) => {
445
- // Sobre qué serie cayó el dedo: la que tiene su marca más cerca del
446
- // toque en el eje de valores. Con una sola serie es siempre esa.
463
+ // Which series the finger landed on: the one whose mark is closest to
464
+ // the touch on the value axis. With a single series it is always that one.
447
465
  const touch = (horizontal ? event?.nativeEvent?.locationX : event?.nativeEvent?.locationY) ?? 0;
448
466
  let bestKey = keys[0] ?? '';
449
467
  let bestDistance = Infinity;
@@ -551,10 +569,10 @@ const CartesianPlot = /*#__PURE__*/memo(props => {
551
569
  },
552
570
  children: [type === 'area' ?
553
571
  /*#__PURE__*/
554
- // La opacidad va en el grupo, no en cada tira: el medio
555
- // píxel de solape que tapa la costura del antialias se
556
- // compone dos veces y deja una raya vertical cada cuatro
557
- // píxeles. Atenuado el grupo entero, se pinta una sola vez.
572
+ // Opacity goes on the group, not on each strip: the half
573
+ // pixel of overlap that hides the antialias seam is
574
+ // composited twice and leaves a vertical stripe every four
575
+ // pixels. Dimming the whole group, it is painted only once.
558
576
  _jsx(View, {
559
577
  pointerEvents: "none",
560
578
  style: {
@@ -591,7 +609,7 @@ const CartesianPlot = /*#__PURE__*/memo(props => {
591
609
  }), dots ? raw.map((point, index) => /*#__PURE__*/_jsx(Dot, {
592
610
  point: point,
593
611
  color: entry.color,
594
- ringColor: theme.colors.surface,
612
+ ringColor: surface,
595
613
  size: selection?.index === index ? 8 : 6,
596
614
  testID: testID && `${testID}-dot-${entry.key}-${index}`
597
615
  }, index)) : null]
@@ -671,15 +689,15 @@ const CartesianPlot = /*#__PURE__*/memo(props => {
671
689
  });
672
690
  CartesianPlot.displayName = 'CartesianPlot';
673
691
 
674
- // ── torta y dona ───────────────────────────────────────────────────────────
692
+ // ── pie and donut ──────────────────────────────────────────────────────────
675
693
 
676
694
  const DONUT_RADIUS = 0.6;
677
- /** Cuánto sale la porción elegida, en píxeles. */
695
+ /** How far the selected slice pops out, in pixels. */
678
696
  const EXPLODE = 8;
679
- /** Dónde cae la etiqueta, como fracción entre el agujero y el borde. */
697
+ /** Where the label falls, as a fraction between the hole and the edge. */
680
698
  const LABEL_AT = 0.62;
681
699
 
682
- /** Blanco o negro, el que se lea encima del color. Un color raro no rompe: cae en `text`. */
700
+ /** White or black, whichever reads over the color. An odd color doesn't break: it falls back to `text`. */
683
701
  function inkOn(background, theme) {
684
702
  try {
685
703
  return contrast(background, theme.colors.white) >= contrast(background, theme.colors.black) ? theme.colors.white : theme.colors.black;
@@ -706,6 +724,7 @@ const PiePlot = /*#__PURE__*/memo(props => {
706
724
  valueKey
707
725
  } = props;
708
726
  const theme = useTheme();
727
+ const surface = useChartSurface();
709
728
  const styles = useStyles();
710
729
  const allowFontScaling = useAllowFontScaling();
711
730
  const center = {
@@ -715,8 +734,8 @@ const PiePlot = /*#__PURE__*/memo(props => {
715
734
  const radius = Math.max(0, Math.min(width, height) / 2 - 2);
716
735
  const hole = clamp(innerRadius ?? (donut ? DONUT_RADIUS : 0), 0, 0.9) * radius;
717
736
  const arcs = useMemo(() => {
718
- // Una categoría apagada vale 0: sale de la torta y el resto se reparte el
719
- // 100%, que es lo que espera quien la apagó desde la leyenda.
737
+ // A turned-off category is worth 0: it leaves the pie and the rest share
738
+ // the 100%, which is what whoever turned it off from the legend expects.
720
739
  const values = rows.map((row, index) => visible.some(entry => entry.key === labels[index]) ? toNumber(row[valueKey]) ?? 0 : 0);
721
740
  return arcsFor(values);
722
741
  }, [rows, labels, visible, valueKey]);
@@ -726,8 +745,8 @@ const PiePlot = /*#__PURE__*/memo(props => {
726
745
  y: event?.nativeEvent?.locationY ?? 0
727
746
  };
728
747
  const distance = Math.hypot(point.x - center.x, point.y - center.y);
729
- // El agujero de una dona no es parte de ninguna porción, y afuera del
730
- // círculo tampoco: los dos sueltan la selección.
748
+ // A donut's hole isn't part of any slice, and neither is the area
749
+ // outside the circle: both release the selection.
731
750
  if (distance > radius || distance < hole) return onPick(null);
732
751
  const index = arcAt(arcs, angleOf(center, point));
733
752
  if (index === -1) return onPick(null);
@@ -759,11 +778,11 @@ const PiePlot = /*#__PURE__*/memo(props => {
759
778
  width: hole * 2,
760
779
  height: hole * 2,
761
780
  borderRadius: hole,
762
- backgroundColor: theme.colors.surface
781
+ backgroundColor: surface
763
782
  }
764
783
  }) : null, sliceLabels === 'none' ? null : arcs.map(arc => {
765
- // Una porción muy fina no tiene dónde escribir: la etiqueta se
766
- // saldría encima de las vecinas y no se leería ninguna.
784
+ // A very thin slice has nowhere to write: the label would spill
785
+ // over its neighbors and none would be readable.
767
786
  if (arc.sweep < 18) return null;
768
787
  const at = polar(center, hole + (radius - hole) * LABEL_AT, arc.start + arc.sweep / 2);
769
788
  const color = entries[arc.index]?.color ?? theme.colors.primary;
@@ -808,7 +827,7 @@ PiePlot.displayName = 'PiePlot';
808
827
 
809
828
  // ── radar ──────────────────────────────────────────────────────────────────
810
829
 
811
- /** Tiras por lado del polígono cuando se rellena. Más = borde más limpio, más vistas. */
830
+ /** Strips per side of the polygon when it is filled. More = cleaner edge, more views. */
812
831
  const RADAR_STEPS = 5;
813
832
  const RADAR_FILL_OPACITY = 0.18;
814
833
  const RADAR_LABEL_WIDTH = 56;
@@ -831,6 +850,7 @@ const RadarPlot = /*#__PURE__*/memo(props => {
831
850
  dots
832
851
  } = props;
833
852
  const theme = useTheme();
853
+ const surface = useChartSurface();
834
854
  const styles = useStyles();
835
855
  const allowFontScaling = useAllowFontScaling();
836
856
  const center = {
@@ -841,8 +861,8 @@ const RadarPlot = /*#__PURE__*/memo(props => {
841
861
  const angles = useMemo(() => radarAngles(rows.length), [rows.length]);
842
862
  const keys = useMemo(() => visible.map(entry => entry.key), [visible]);
843
863
 
844
- // El radar mide desde el centro, y el centro es 0: un mínimo distinto de
845
- // cero haría que dos valores parecidos se vean lejísimos.
864
+ // The radar measures from the center, and the center is 0: a minimum other
865
+ // than zero would make two similar values look miles apart.
846
866
  const measured = useMemo(() => [0, extent(rows, keys, {
847
867
  includeZero: true
848
868
  })[1]], [rows, keys]);
@@ -887,11 +907,11 @@ const RadarPlot = /*#__PURE__*/memo(props => {
887
907
  },
888
908
  children: [fill ?
889
909
  /*#__PURE__*/
890
- // La opacidad va en el grupo, no en cada tira. Por tira, el
891
- // solape de 0.4° que tapa la costura del antialias se compone
892
- // dos veces y deja un radio más oscuro por corte: el relleno
893
- // termina pareciendo una telaraña. Aplicada al grupo, las tiras
894
- // se pintan opacas entre sí y el conjunto se atenúa una vez.
910
+ // Opacity goes on the group, not on each strip. Per strip, the
911
+ // 0.4° overlap that hides the antialias seam is composited
912
+ // twice and leaves a darker radius at each cut: the fill ends
913
+ // up looking like a spider web. Applied to the group, the strips
914
+ // paint opaque against each other and the whole is dimmed once.
895
915
  _jsx(View, {
896
916
  pointerEvents: "none",
897
917
  style: {
@@ -919,7 +939,7 @@ const RadarPlot = /*#__PURE__*/memo(props => {
919
939
  }), dots ? points.map((point, index) => /*#__PURE__*/_jsx(Dot, {
920
940
  point: point,
921
941
  color: entry.color,
922
- ringColor: theme.colors.surface,
942
+ ringColor: surface,
923
943
  size: selection?.index === index ? 8 : 6
924
944
  }, index)) : null]
925
945
  }, entry.key);