@multiplatform.one/components 6.6.0 → 7.0.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 (997) hide show
  1. package/dist/cjs/Accordion/index.cjs +213 -70
  2. package/dist/cjs/Accordion/index.native.js +254 -75
  3. package/dist/cjs/Accordion/index.native.js.map +1 -1
  4. package/dist/cjs/Alert/index.cjs +204 -56
  5. package/dist/cjs/Alert/index.native.js +211 -60
  6. package/dist/cjs/Alert/index.native.js.map +1 -1
  7. package/dist/cjs/AnimateHeight/index.cjs +166 -0
  8. package/dist/cjs/AnimateHeight/index.native.js +176 -0
  9. package/dist/cjs/AnimateHeight/index.native.js.map +1 -0
  10. package/dist/cjs/Avatar/getInitials.cjs +34 -0
  11. package/dist/cjs/Avatar/getInitials.native.js +34 -0
  12. package/dist/cjs/Avatar/getInitials.native.js.map +1 -1
  13. package/dist/cjs/Avatar/index.cjs +246 -62
  14. package/dist/cjs/Avatar/index.native.js +252 -68
  15. package/dist/cjs/Avatar/index.native.js.map +1 -1
  16. package/dist/cjs/Badge/index.cjs +109 -75
  17. package/dist/cjs/Badge/index.native.js +110 -76
  18. package/dist/cjs/Badge/index.native.js.map +1 -1
  19. package/dist/cjs/Button.cjs +41 -0
  20. package/dist/cjs/Button.native.js +45 -0
  21. package/dist/cjs/Button.native.js.map +1 -0
  22. package/dist/cjs/Carousel/index.cjs +184 -105
  23. package/dist/cjs/Carousel/index.native.js +212 -107
  24. package/dist/cjs/Carousel/index.native.js.map +1 -1
  25. package/dist/cjs/Chip/index.cjs +360 -5
  26. package/dist/cjs/Chip/index.native.js +374 -5
  27. package/dist/cjs/Chip/index.native.js.map +1 -1
  28. package/dist/cjs/DotIndicator/index.cjs +129 -13
  29. package/dist/cjs/DotIndicator/index.native.js +133 -13
  30. package/dist/cjs/DotIndicator/index.native.js.map +1 -1
  31. package/dist/cjs/DropdownMenu/index.cjs +110 -44
  32. package/dist/cjs/DropdownMenu/index.native.js +113 -46
  33. package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
  34. package/dist/cjs/ErrorBoundary/index.cjs +2 -2
  35. package/dist/cjs/ErrorBoundary/index.native.js +2 -2
  36. package/dist/cjs/ErrorBoundary/index.native.js.map +1 -1
  37. package/dist/cjs/Pagination.cjs +40 -11
  38. package/dist/cjs/Pagination.native.js +44 -11
  39. package/dist/cjs/Pagination.native.js.map +1 -1
  40. package/dist/cjs/ProgressSteps/index.cjs +163 -107
  41. package/dist/cjs/ProgressSteps/index.native.js +171 -115
  42. package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
  43. package/dist/cjs/Quote/index.cjs +58 -39
  44. package/dist/cjs/Quote/index.native.js +69 -45
  45. package/dist/cjs/Quote/index.native.js.map +1 -1
  46. package/dist/cjs/SheetModal/index.cjs +141 -4
  47. package/dist/cjs/SheetModal/index.native.js +42 -29
  48. package/dist/cjs/SheetModal/index.native.js.map +1 -1
  49. package/dist/cjs/Skeleton/index.cjs +216 -4
  50. package/dist/cjs/Skeleton/index.native.js +223 -4
  51. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  52. package/dist/cjs/SkipLink/index.cjs +91 -57
  53. package/dist/cjs/SkipLink/index.native.js +92 -66
  54. package/dist/cjs/SkipLink/index.native.js.map +1 -1
  55. package/dist/cjs/Tabs/index.cjs +136 -95
  56. package/dist/cjs/Tabs/index.native.js +161 -108
  57. package/dist/cjs/Tabs/index.native.js.map +1 -1
  58. package/dist/cjs/Toast/index.cjs +229 -67
  59. package/dist/cjs/Toast/index.native.js +232 -67
  60. package/dist/cjs/Toast/index.native.js.map +1 -1
  61. package/dist/cjs/Toast/store.cjs +83 -10
  62. package/dist/cjs/Toast/store.native.js +108 -10
  63. package/dist/cjs/Toast/store.native.js.map +1 -1
  64. package/dist/cjs/Tooltip/index.cjs +159 -42
  65. package/dist/cjs/Tooltip/index.native.js +195 -43
  66. package/dist/cjs/Tooltip/index.native.js.map +1 -1
  67. package/dist/cjs/Video/PlayerChrome.cjs +403 -0
  68. package/dist/cjs/Video/PlayerChrome.native.js +436 -0
  69. package/dist/cjs/Video/PlayerChrome.native.js.map +1 -0
  70. package/dist/cjs/Video/VideoFrame.cjs +14 -5
  71. package/dist/cjs/Video/VideoFrame.native.js +16 -5
  72. package/dist/cjs/Video/VideoFrame.native.js.map +1 -1
  73. package/dist/cjs/Video/index.cjs +227 -11
  74. package/dist/cjs/Video/index.native.js +28 -13
  75. package/dist/cjs/Video/index.native.js.map +1 -1
  76. package/dist/cjs/Wheel/index.cjs +144 -93
  77. package/dist/cjs/Wheel/index.native.js +149 -96
  78. package/dist/cjs/Wheel/index.native.js.map +1 -1
  79. package/dist/cjs/actions/DestructiveAction.cjs +2 -2
  80. package/dist/cjs/actions/DestructiveAction.native.js +2 -2
  81. package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
  82. package/dist/cjs/charts/BarChart.cjs +9 -5
  83. package/dist/cjs/charts/BarChart.native.js +9 -5
  84. package/dist/cjs/charts/BarChart.native.js.map +1 -1
  85. package/dist/cjs/charts/LineChart.cjs +2 -2
  86. package/dist/cjs/charts/LineChart.native.js +2 -2
  87. package/dist/cjs/charts/LineChart.native.js.map +1 -1
  88. package/dist/cjs/charts/PieChart.cjs +2 -2
  89. package/dist/cjs/charts/PieChart.native.js +2 -2
  90. package/dist/cjs/charts/PieChart.native.js.map +1 -1
  91. package/dist/cjs/charts/Sparkline.cjs +2 -2
  92. package/dist/cjs/charts/Sparkline.native.js +2 -2
  93. package/dist/cjs/charts/Sparkline.native.js.map +1 -1
  94. package/dist/cjs/charts/index.cjs +4 -0
  95. package/dist/cjs/charts/index.native.js +4 -0
  96. package/dist/cjs/charts/index.native.js.map +1 -1
  97. package/dist/cjs/code/CodeBlock/index.cjs +34 -7
  98. package/dist/cjs/code/CodeBlock/index.native.js +36 -9
  99. package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
  100. package/dist/cjs/feedback/ConfirmDialog.cjs +92 -5
  101. package/dist/cjs/feedback/ConfirmDialog.native.js +123 -5
  102. package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
  103. package/dist/cjs/feedback/NotifyHost.cjs +2 -2
  104. package/dist/cjs/feedback/NotifyHost.native.js +2 -2
  105. package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
  106. package/dist/cjs/icons/themed.cjs +4 -1
  107. package/dist/cjs/icons/themed.native.js +4 -1
  108. package/dist/cjs/icons/themed.native.js.map +1 -1
  109. package/dist/cjs/images/Image/ImageFrame.cjs +242 -0
  110. package/dist/cjs/images/Image/ImageFrame.native.js +248 -0
  111. package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -0
  112. package/dist/cjs/images/Image/index.cjs +93 -40
  113. package/dist/cjs/images/Image/index.native.js +146 -108
  114. package/dist/cjs/images/Image/index.native.js.map +1 -1
  115. package/dist/cjs/images/Image/shared.cjs +106 -0
  116. package/dist/cjs/images/Image/shared.native.js +109 -0
  117. package/dist/cjs/images/Image/shared.native.js.map +1 -0
  118. package/dist/cjs/index.cjs +7 -0
  119. package/dist/cjs/index.native.js +7 -0
  120. package/dist/cjs/index.native.js.map +1 -1
  121. package/dist/cjs/knobImmuneExports.cjs +95 -0
  122. package/dist/cjs/knobImmuneExports.native.js +98 -0
  123. package/dist/cjs/knobImmuneExports.native.js.map +1 -0
  124. package/dist/cjs/layouts/AsyncBoundary.cjs +163 -36
  125. package/dist/cjs/layouts/AsyncBoundary.native.js +166 -37
  126. package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
  127. package/dist/cjs/layouts/EmptyState.cjs +157 -0
  128. package/dist/cjs/layouts/EmptyState.native.js +165 -0
  129. package/dist/cjs/layouts/EmptyState.native.js.map +1 -0
  130. package/dist/cjs/layouts/PageTemplates.cjs +13 -5
  131. package/dist/cjs/layouts/PageTemplates.native.js +13 -5
  132. package/dist/cjs/layouts/PageTemplates.native.js.map +1 -1
  133. package/dist/cjs/layouts/PaneScaffold.cjs +273 -13
  134. package/dist/cjs/layouts/PaneScaffold.native.js +294 -13
  135. package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
  136. package/dist/cjs/layouts/ViewSwitcher.cjs +65 -23
  137. package/dist/cjs/layouts/ViewSwitcher.native.js +78 -30
  138. package/dist/cjs/layouts/ViewSwitcher.native.js.map +1 -1
  139. package/dist/cjs/layouts/attachments.cjs +350 -185
  140. package/dist/cjs/layouts/attachments.native.js +370 -186
  141. package/dist/cjs/layouts/attachments.native.js.map +1 -1
  142. package/dist/cjs/layouts/breadcrumbs.cjs +161 -62
  143. package/dist/cjs/layouts/breadcrumbs.native.js +184 -65
  144. package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
  145. package/dist/cjs/layouts/page.cjs +71 -111
  146. package/dist/cjs/layouts/page.native.js +82 -130
  147. package/dist/cjs/layouts/page.native.js.map +1 -1
  148. package/dist/cjs/layouts/pageHeadingScope.cjs +8 -2
  149. package/dist/cjs/layouts/pageHeadingScope.native.js +10 -2
  150. package/dist/cjs/layouts/pageHeadingScope.native.js.map +1 -1
  151. package/dist/cjs/layouts/sidebar.cjs +150 -66
  152. package/dist/cjs/layouts/sidebar.native.js +118 -47
  153. package/dist/cjs/layouts/sidebar.native.js.map +1 -1
  154. package/dist/cjs/layouts/tags.cjs +321 -138
  155. package/dist/cjs/layouts/tags.native.js +355 -158
  156. package/dist/cjs/layouts/tags.native.js.map +1 -1
  157. package/dist/cjs/layouts/timeline.cjs +129 -56
  158. package/dist/cjs/layouts/timeline.native.js +179 -55
  159. package/dist/cjs/layouts/timeline.native.js.map +1 -1
  160. package/dist/cjs/layouts/toolbar.cjs +56 -20
  161. package/dist/cjs/layouts/toolbar.native.js +62 -25
  162. package/dist/cjs/layouts/toolbar.native.js.map +1 -1
  163. package/dist/cjs/shared/i18n.cjs +46 -0
  164. package/dist/cjs/shared/i18n.native.js +52 -0
  165. package/dist/cjs/shared/i18n.native.js.map +1 -0
  166. package/dist/cjs/shared/textRidesText.cjs +57 -0
  167. package/dist/cjs/shared/textRidesText.native.js +81 -0
  168. package/dist/cjs/shared/textRidesText.native.js.map +1 -0
  169. package/dist/cjs/shared/useReturnFocusOnClose.cjs +7 -1
  170. package/dist/cjs/shared/useReturnFocusOnClose.native.js +7 -1
  171. package/dist/cjs/shared/useReturnFocusOnClose.native.js.map +1 -1
  172. package/dist/cjs/surfaces.cjs +93 -16
  173. package/dist/cjs/surfaces.native.js +95 -16
  174. package/dist/cjs/surfaces.native.js.map +1 -1
  175. package/dist/cjs/tamagui.cjs +38 -39
  176. package/dist/cjs/tamagui.native.js +37 -38
  177. package/dist/cjs/tamagui.native.js.map +1 -1
  178. package/dist/cjs/views/Calendar.cjs +101 -64
  179. package/dist/cjs/views/Calendar.native.js +105 -70
  180. package/dist/cjs/views/Calendar.native.js.map +1 -1
  181. package/dist/cjs/views/Dashboard.cjs +399 -107
  182. package/dist/cjs/views/Dashboard.native.js +408 -110
  183. package/dist/cjs/views/Dashboard.native.js.map +1 -1
  184. package/dist/cjs/views/Gantt.cjs +256 -59
  185. package/dist/cjs/views/Gantt.native.js +264 -39
  186. package/dist/cjs/views/Gantt.native.js.map +1 -1
  187. package/dist/cjs/views/ImageGrid.cjs +138 -73
  188. package/dist/cjs/views/ImageGrid.native.js +155 -71
  189. package/dist/cjs/views/ImageGrid.native.js.map +1 -1
  190. package/dist/cjs/views/Kanban.cjs +53 -31
  191. package/dist/cjs/views/Kanban.native.js +55 -41
  192. package/dist/cjs/views/Kanban.native.js.map +1 -1
  193. package/dist/cjs/views/List.cjs +280 -93
  194. package/dist/cjs/views/List.native.js +280 -101
  195. package/dist/cjs/views/List.native.js.map +1 -1
  196. package/dist/cjs/views/ReportBuilder.cjs +539 -172
  197. package/dist/cjs/views/ReportBuilder.native.js +592 -169
  198. package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
  199. package/dist/cjs/views/TreeView.cjs +142 -52
  200. package/dist/cjs/views/TreeView.native.js +170 -55
  201. package/dist/cjs/views/TreeView.native.js.map +1 -1
  202. package/dist/esm/Accordion/index.mjs +216 -73
  203. package/dist/esm/Accordion/index.mjs.map +1 -1
  204. package/dist/esm/Accordion/index.native.js +257 -78
  205. package/dist/esm/Accordion/index.native.js.map +1 -1
  206. package/dist/esm/Alert/index.mjs +206 -58
  207. package/dist/esm/Alert/index.mjs.map +1 -1
  208. package/dist/esm/Alert/index.native.js +213 -62
  209. package/dist/esm/Alert/index.native.js.map +1 -1
  210. package/dist/esm/AnimateHeight/index.mjs +140 -0
  211. package/dist/esm/AnimateHeight/index.mjs.map +1 -0
  212. package/dist/esm/AnimateHeight/index.native.js +147 -0
  213. package/dist/esm/AnimateHeight/index.native.js.map +1 -0
  214. package/dist/esm/Avatar/getInitials.mjs +32 -1
  215. package/dist/esm/Avatar/getInitials.mjs.map +1 -1
  216. package/dist/esm/Avatar/getInitials.native.js +32 -1
  217. package/dist/esm/Avatar/getInitials.native.js.map +1 -1
  218. package/dist/esm/Avatar/index.mjs +249 -68
  219. package/dist/esm/Avatar/index.mjs.map +1 -1
  220. package/dist/esm/Avatar/index.native.js +255 -74
  221. package/dist/esm/Avatar/index.native.js.map +1 -1
  222. package/dist/esm/Badge/index.mjs +110 -76
  223. package/dist/esm/Badge/index.mjs.map +1 -1
  224. package/dist/esm/Badge/index.native.js +111 -77
  225. package/dist/esm/Badge/index.native.js.map +1 -1
  226. package/dist/esm/Button.mjs +16 -0
  227. package/dist/esm/Button.mjs.map +1 -0
  228. package/dist/esm/Button.native.js +17 -0
  229. package/dist/esm/Button.native.js.map +1 -0
  230. package/dist/esm/Carousel/index.mjs +185 -106
  231. package/dist/esm/Carousel/index.mjs.map +1 -1
  232. package/dist/esm/Carousel/index.native.js +213 -108
  233. package/dist/esm/Carousel/index.native.js.map +1 -1
  234. package/dist/esm/Chip/index.mjs +356 -2
  235. package/dist/esm/Chip/index.mjs.map +1 -1
  236. package/dist/esm/Chip/index.native.js +370 -2
  237. package/dist/esm/Chip/index.native.js.map +1 -1
  238. package/dist/esm/DotIndicator/index.mjs +130 -14
  239. package/dist/esm/DotIndicator/index.mjs.map +1 -1
  240. package/dist/esm/DotIndicator/index.native.js +134 -14
  241. package/dist/esm/DotIndicator/index.native.js.map +1 -1
  242. package/dist/esm/DropdownMenu/index.mjs +112 -46
  243. package/dist/esm/DropdownMenu/index.mjs.map +1 -1
  244. package/dist/esm/DropdownMenu/index.native.js +115 -48
  245. package/dist/esm/DropdownMenu/index.native.js.map +1 -1
  246. package/dist/esm/ErrorBoundary/index.mjs +1 -1
  247. package/dist/esm/ErrorBoundary/index.native.js +1 -1
  248. package/dist/esm/Pagination.mjs +41 -12
  249. package/dist/esm/Pagination.mjs.map +1 -1
  250. package/dist/esm/Pagination.native.js +45 -12
  251. package/dist/esm/Pagination.native.js.map +1 -1
  252. package/dist/esm/ProgressSteps/index.mjs +165 -109
  253. package/dist/esm/ProgressSteps/index.mjs.map +1 -1
  254. package/dist/esm/ProgressSteps/index.native.js +173 -117
  255. package/dist/esm/ProgressSteps/index.native.js.map +1 -1
  256. package/dist/esm/Quote/index.mjs +59 -40
  257. package/dist/esm/Quote/index.mjs.map +1 -1
  258. package/dist/esm/Quote/index.native.js +70 -46
  259. package/dist/esm/Quote/index.native.js.map +1 -1
  260. package/dist/esm/SheetModal/index.mjs +144 -7
  261. package/dist/esm/SheetModal/index.mjs.map +1 -1
  262. package/dist/esm/SheetModal/index.native.js +41 -28
  263. package/dist/esm/SheetModal/index.native.js.map +1 -1
  264. package/dist/esm/Skeleton/index.mjs +213 -2
  265. package/dist/esm/Skeleton/index.mjs.map +1 -1
  266. package/dist/esm/Skeleton/index.native.js +220 -2
  267. package/dist/esm/Skeleton/index.native.js.map +1 -1
  268. package/dist/esm/SkipLink/index.mjs +93 -59
  269. package/dist/esm/SkipLink/index.mjs.map +1 -1
  270. package/dist/esm/SkipLink/index.native.js +94 -68
  271. package/dist/esm/SkipLink/index.native.js.map +1 -1
  272. package/dist/esm/Tabs/index.mjs +137 -96
  273. package/dist/esm/Tabs/index.mjs.map +1 -1
  274. package/dist/esm/Tabs/index.native.js +162 -109
  275. package/dist/esm/Tabs/index.native.js.map +1 -1
  276. package/dist/esm/Toast/index.mjs +227 -68
  277. package/dist/esm/Toast/index.mjs.map +1 -1
  278. package/dist/esm/Toast/index.native.js +230 -68
  279. package/dist/esm/Toast/index.native.js.map +1 -1
  280. package/dist/esm/Toast/store.mjs +75 -11
  281. package/dist/esm/Toast/store.mjs.map +1 -1
  282. package/dist/esm/Toast/store.native.js +100 -11
  283. package/dist/esm/Toast/store.native.js.map +1 -1
  284. package/dist/esm/Tooltip/index.mjs +147 -42
  285. package/dist/esm/Tooltip/index.mjs.map +1 -1
  286. package/dist/esm/Tooltip/index.native.js +184 -44
  287. package/dist/esm/Tooltip/index.native.js.map +1 -1
  288. package/dist/esm/Video/PlayerChrome.mjs +377 -0
  289. package/dist/esm/Video/PlayerChrome.mjs.map +1 -0
  290. package/dist/esm/Video/PlayerChrome.native.js +407 -0
  291. package/dist/esm/Video/PlayerChrome.native.js.map +1 -0
  292. package/dist/esm/Video/VideoFrame.mjs +14 -5
  293. package/dist/esm/Video/VideoFrame.mjs.map +1 -1
  294. package/dist/esm/Video/VideoFrame.native.js +16 -5
  295. package/dist/esm/Video/VideoFrame.native.js.map +1 -1
  296. package/dist/esm/Video/index.mjs +227 -11
  297. package/dist/esm/Video/index.mjs.map +1 -1
  298. package/dist/esm/Video/index.native.js +28 -13
  299. package/dist/esm/Video/index.native.js.map +1 -1
  300. package/dist/esm/Wheel/index.mjs +143 -92
  301. package/dist/esm/Wheel/index.mjs.map +1 -1
  302. package/dist/esm/Wheel/index.native.js +148 -95
  303. package/dist/esm/Wheel/index.native.js.map +1 -1
  304. package/dist/esm/actions/DestructiveAction.mjs +1 -1
  305. package/dist/esm/actions/DestructiveAction.native.js +1 -1
  306. package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
  307. package/dist/esm/charts/BarChart.mjs +8 -4
  308. package/dist/esm/charts/BarChart.mjs.map +1 -1
  309. package/dist/esm/charts/BarChart.native.js +8 -4
  310. package/dist/esm/charts/BarChart.native.js.map +1 -1
  311. package/dist/esm/charts/LineChart.mjs +1 -1
  312. package/dist/esm/charts/LineChart.native.js +1 -1
  313. package/dist/esm/charts/PieChart.mjs +1 -1
  314. package/dist/esm/charts/PieChart.native.js +1 -1
  315. package/dist/esm/charts/PieChart.native.js.map +1 -1
  316. package/dist/esm/charts/Sparkline.mjs +1 -1
  317. package/dist/esm/charts/Sparkline.native.js +1 -1
  318. package/dist/esm/charts/index.mjs +2 -1
  319. package/dist/esm/charts/index.mjs.map +1 -1
  320. package/dist/esm/charts/index.native.js +2 -1
  321. package/dist/esm/charts/index.native.js.map +1 -1
  322. package/dist/esm/code/CodeBlock/index.mjs +34 -7
  323. package/dist/esm/code/CodeBlock/index.mjs.map +1 -1
  324. package/dist/esm/code/CodeBlock/index.native.js +36 -9
  325. package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
  326. package/dist/esm/feedback/ConfirmDialog.mjs +93 -6
  327. package/dist/esm/feedback/ConfirmDialog.mjs.map +1 -1
  328. package/dist/esm/feedback/ConfirmDialog.native.js +124 -6
  329. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  330. package/dist/esm/feedback/NotifyHost.mjs +1 -1
  331. package/dist/esm/feedback/NotifyHost.native.js +1 -1
  332. package/dist/esm/icons/themed.mjs +5 -2
  333. package/dist/esm/icons/themed.mjs.map +1 -1
  334. package/dist/esm/icons/themed.native.js +5 -2
  335. package/dist/esm/icons/themed.native.js.map +1 -1
  336. package/dist/esm/images/Image/ImageFrame.mjs +216 -0
  337. package/dist/esm/images/Image/ImageFrame.mjs.map +1 -0
  338. package/dist/esm/images/Image/ImageFrame.native.js +219 -0
  339. package/dist/esm/images/Image/ImageFrame.native.js.map +1 -0
  340. package/dist/esm/images/Image/index.mjs +94 -41
  341. package/dist/esm/images/Image/index.mjs.map +1 -1
  342. package/dist/esm/images/Image/index.native.js +148 -110
  343. package/dist/esm/images/Image/index.native.js.map +1 -1
  344. package/dist/esm/images/Image/shared.mjs +76 -0
  345. package/dist/esm/images/Image/shared.mjs.map +1 -0
  346. package/dist/esm/images/Image/shared.native.js +76 -0
  347. package/dist/esm/images/Image/shared.native.js.map +1 -0
  348. package/dist/esm/index.mjs +4 -1
  349. package/dist/esm/index.mjs.map +1 -1
  350. package/dist/esm/index.native.js +4 -1
  351. package/dist/esm/index.native.js.map +1 -1
  352. package/dist/esm/knobImmuneExports.mjs +70 -0
  353. package/dist/esm/knobImmuneExports.mjs.map +1 -0
  354. package/dist/esm/knobImmuneExports.native.js +70 -0
  355. package/dist/esm/knobImmuneExports.native.js.map +1 -0
  356. package/dist/esm/layouts/AsyncBoundary.mjs +165 -38
  357. package/dist/esm/layouts/AsyncBoundary.mjs.map +1 -1
  358. package/dist/esm/layouts/AsyncBoundary.native.js +168 -39
  359. package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
  360. package/dist/esm/layouts/EmptyState.mjs +132 -0
  361. package/dist/esm/layouts/EmptyState.mjs.map +1 -0
  362. package/dist/esm/layouts/EmptyState.native.js +137 -0
  363. package/dist/esm/layouts/EmptyState.native.js.map +1 -0
  364. package/dist/esm/layouts/PageTemplates.mjs +13 -5
  365. package/dist/esm/layouts/PageTemplates.mjs.map +1 -1
  366. package/dist/esm/layouts/PageTemplates.native.js +13 -5
  367. package/dist/esm/layouts/PageTemplates.native.js.map +1 -1
  368. package/dist/esm/layouts/PaneScaffold.mjs +277 -17
  369. package/dist/esm/layouts/PaneScaffold.mjs.map +1 -1
  370. package/dist/esm/layouts/PaneScaffold.native.js +298 -17
  371. package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
  372. package/dist/esm/layouts/ViewSwitcher.mjs +66 -24
  373. package/dist/esm/layouts/ViewSwitcher.mjs.map +1 -1
  374. package/dist/esm/layouts/ViewSwitcher.native.js +79 -31
  375. package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
  376. package/dist/esm/layouts/attachments.mjs +351 -175
  377. package/dist/esm/layouts/attachments.mjs.map +1 -1
  378. package/dist/esm/layouts/attachments.native.js +371 -187
  379. package/dist/esm/layouts/attachments.native.js.map +1 -1
  380. package/dist/esm/layouts/breadcrumbs.mjs +163 -53
  381. package/dist/esm/layouts/breadcrumbs.mjs.map +1 -1
  382. package/dist/esm/layouts/breadcrumbs.native.js +187 -68
  383. package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
  384. package/dist/esm/layouts/page.mjs +72 -112
  385. package/dist/esm/layouts/page.mjs.map +1 -1
  386. package/dist/esm/layouts/page.native.js +83 -131
  387. package/dist/esm/layouts/page.native.js.map +1 -1
  388. package/dist/esm/layouts/pageHeadingScope.mjs +8 -3
  389. package/dist/esm/layouts/pageHeadingScope.mjs.map +1 -1
  390. package/dist/esm/layouts/pageHeadingScope.native.js +10 -3
  391. package/dist/esm/layouts/pageHeadingScope.native.js.map +1 -1
  392. package/dist/esm/layouts/sidebar.mjs +152 -68
  393. package/dist/esm/layouts/sidebar.mjs.map +1 -1
  394. package/dist/esm/layouts/sidebar.native.js +120 -49
  395. package/dist/esm/layouts/sidebar.native.js.map +1 -1
  396. package/dist/esm/layouts/tags.mjs +323 -140
  397. package/dist/esm/layouts/tags.mjs.map +1 -1
  398. package/dist/esm/layouts/tags.native.js +357 -160
  399. package/dist/esm/layouts/tags.native.js.map +1 -1
  400. package/dist/esm/layouts/timeline.mjs +129 -45
  401. package/dist/esm/layouts/timeline.mjs.map +1 -1
  402. package/dist/esm/layouts/timeline.native.js +179 -55
  403. package/dist/esm/layouts/timeline.native.js.map +1 -1
  404. package/dist/esm/layouts/toolbar.mjs +57 -21
  405. package/dist/esm/layouts/toolbar.mjs.map +1 -1
  406. package/dist/esm/layouts/toolbar.native.js +63 -26
  407. package/dist/esm/layouts/toolbar.native.js.map +1 -1
  408. package/dist/esm/shared/i18n.mjs +10 -0
  409. package/dist/esm/shared/i18n.mjs.map +1 -0
  410. package/dist/esm/shared/i18n.native.js +13 -0
  411. package/dist/esm/shared/i18n.native.js.map +1 -0
  412. package/dist/esm/shared/textRidesText.mjs +31 -0
  413. package/dist/esm/shared/textRidesText.mjs.map +1 -0
  414. package/dist/esm/shared/textRidesText.native.js +52 -0
  415. package/dist/esm/shared/textRidesText.native.js.map +1 -0
  416. package/dist/esm/shared/useReturnFocusOnClose.mjs +7 -1
  417. package/dist/esm/shared/useReturnFocusOnClose.mjs.map +1 -1
  418. package/dist/esm/shared/useReturnFocusOnClose.native.js +7 -1
  419. package/dist/esm/shared/useReturnFocusOnClose.native.js.map +1 -1
  420. package/dist/esm/surfaces.mjs +94 -17
  421. package/dist/esm/surfaces.mjs.map +1 -1
  422. package/dist/esm/surfaces.native.js +96 -17
  423. package/dist/esm/surfaces.native.js.map +1 -1
  424. package/dist/esm/tamagui.mjs +2 -3
  425. package/dist/esm/tamagui.mjs.map +1 -1
  426. package/dist/esm/tamagui.native.js +2 -3
  427. package/dist/esm/tamagui.native.js.map +1 -1
  428. package/dist/esm/views/Calendar.mjs +101 -64
  429. package/dist/esm/views/Calendar.mjs.map +1 -1
  430. package/dist/esm/views/Calendar.native.js +105 -70
  431. package/dist/esm/views/Calendar.native.js.map +1 -1
  432. package/dist/esm/views/Dashboard.mjs +396 -107
  433. package/dist/esm/views/Dashboard.mjs.map +1 -1
  434. package/dist/esm/views/Dashboard.native.js +405 -110
  435. package/dist/esm/views/Dashboard.native.js.map +1 -1
  436. package/dist/esm/views/Gantt.mjs +256 -59
  437. package/dist/esm/views/Gantt.mjs.map +1 -1
  438. package/dist/esm/views/Gantt.native.js +264 -39
  439. package/dist/esm/views/Gantt.native.js.map +1 -1
  440. package/dist/esm/views/ImageGrid.mjs +138 -73
  441. package/dist/esm/views/ImageGrid.mjs.map +1 -1
  442. package/dist/esm/views/ImageGrid.native.js +155 -71
  443. package/dist/esm/views/ImageGrid.native.js.map +1 -1
  444. package/dist/esm/views/Kanban.mjs +52 -30
  445. package/dist/esm/views/Kanban.mjs.map +1 -1
  446. package/dist/esm/views/Kanban.native.js +54 -40
  447. package/dist/esm/views/Kanban.native.js.map +1 -1
  448. package/dist/esm/views/List.mjs +268 -95
  449. package/dist/esm/views/List.mjs.map +1 -1
  450. package/dist/esm/views/List.native.js +280 -104
  451. package/dist/esm/views/List.native.js.map +1 -1
  452. package/dist/esm/views/ReportBuilder.mjs +533 -166
  453. package/dist/esm/views/ReportBuilder.mjs.map +1 -1
  454. package/dist/esm/views/ReportBuilder.native.js +585 -162
  455. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  456. package/dist/esm/views/TreeView.mjs +142 -52
  457. package/dist/esm/views/TreeView.mjs.map +1 -1
  458. package/dist/esm/views/TreeView.native.js +170 -55
  459. package/dist/esm/views/TreeView.native.js.map +1 -1
  460. package/dist/jsx/Accordion/index.mjs +216 -73
  461. package/dist/jsx/Accordion/index.mjs.map +1 -1
  462. package/dist/jsx/Accordion/index.native.js +254 -75
  463. package/dist/jsx/Accordion/index.native.js.map +1 -1
  464. package/dist/jsx/Alert/index.mjs +206 -58
  465. package/dist/jsx/Alert/index.mjs.map +1 -1
  466. package/dist/jsx/Alert/index.native.js +211 -60
  467. package/dist/jsx/Alert/index.native.js.map +1 -1
  468. package/dist/jsx/AnimateHeight/index.mjs +140 -0
  469. package/dist/jsx/AnimateHeight/index.mjs.map +1 -0
  470. package/dist/jsx/AnimateHeight/index.native.js +176 -0
  471. package/dist/jsx/AnimateHeight/index.native.js.map +1 -0
  472. package/dist/jsx/Avatar/getInitials.mjs +32 -1
  473. package/dist/jsx/Avatar/getInitials.mjs.map +1 -1
  474. package/dist/jsx/Avatar/getInitials.native.js +34 -0
  475. package/dist/jsx/Avatar/getInitials.native.js.map +1 -1
  476. package/dist/jsx/Avatar/index.mjs +249 -68
  477. package/dist/jsx/Avatar/index.mjs.map +1 -1
  478. package/dist/jsx/Avatar/index.native.js +252 -68
  479. package/dist/jsx/Avatar/index.native.js.map +1 -1
  480. package/dist/jsx/Badge/index.mjs +110 -76
  481. package/dist/jsx/Badge/index.mjs.map +1 -1
  482. package/dist/jsx/Badge/index.native.js +110 -76
  483. package/dist/jsx/Badge/index.native.js.map +1 -1
  484. package/dist/jsx/Button.mjs +16 -0
  485. package/dist/jsx/Button.mjs.map +1 -0
  486. package/dist/jsx/Button.native.js +45 -0
  487. package/dist/jsx/Button.native.js.map +1 -0
  488. package/dist/jsx/Carousel/index.mjs +185 -106
  489. package/dist/jsx/Carousel/index.mjs.map +1 -1
  490. package/dist/jsx/Carousel/index.native.js +212 -107
  491. package/dist/jsx/Carousel/index.native.js.map +1 -1
  492. package/dist/jsx/Chip/index.mjs +356 -2
  493. package/dist/jsx/Chip/index.mjs.map +1 -1
  494. package/dist/jsx/Chip/index.native.js +374 -5
  495. package/dist/jsx/Chip/index.native.js.map +1 -1
  496. package/dist/jsx/DotIndicator/index.mjs +130 -14
  497. package/dist/jsx/DotIndicator/index.mjs.map +1 -1
  498. package/dist/jsx/DotIndicator/index.native.js +133 -13
  499. package/dist/jsx/DotIndicator/index.native.js.map +1 -1
  500. package/dist/jsx/DropdownMenu/index.mjs +112 -46
  501. package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
  502. package/dist/jsx/DropdownMenu/index.native.js +113 -46
  503. package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
  504. package/dist/jsx/ErrorBoundary/index.mjs +1 -1
  505. package/dist/jsx/ErrorBoundary/index.native.js +2 -2
  506. package/dist/jsx/ErrorBoundary/index.native.js.map +1 -1
  507. package/dist/jsx/Pagination.mjs +41 -12
  508. package/dist/jsx/Pagination.mjs.map +1 -1
  509. package/dist/jsx/Pagination.native.js +44 -11
  510. package/dist/jsx/Pagination.native.js.map +1 -1
  511. package/dist/jsx/ProgressSteps/index.mjs +165 -109
  512. package/dist/jsx/ProgressSteps/index.mjs.map +1 -1
  513. package/dist/jsx/ProgressSteps/index.native.js +171 -115
  514. package/dist/jsx/ProgressSteps/index.native.js.map +1 -1
  515. package/dist/jsx/Quote/index.mjs +59 -40
  516. package/dist/jsx/Quote/index.mjs.map +1 -1
  517. package/dist/jsx/Quote/index.native.js +69 -45
  518. package/dist/jsx/Quote/index.native.js.map +1 -1
  519. package/dist/jsx/SheetModal/index.mjs +144 -7
  520. package/dist/jsx/SheetModal/index.mjs.map +1 -1
  521. package/dist/jsx/SheetModal/index.native.js +42 -29
  522. package/dist/jsx/SheetModal/index.native.js.map +1 -1
  523. package/dist/jsx/Skeleton/index.mjs +213 -2
  524. package/dist/jsx/Skeleton/index.mjs.map +1 -1
  525. package/dist/jsx/Skeleton/index.native.js +223 -4
  526. package/dist/jsx/Skeleton/index.native.js.map +1 -1
  527. package/dist/jsx/SkipLink/index.mjs +93 -59
  528. package/dist/jsx/SkipLink/index.mjs.map +1 -1
  529. package/dist/jsx/SkipLink/index.native.js +92 -66
  530. package/dist/jsx/SkipLink/index.native.js.map +1 -1
  531. package/dist/jsx/Tabs/index.mjs +137 -96
  532. package/dist/jsx/Tabs/index.mjs.map +1 -1
  533. package/dist/jsx/Tabs/index.native.js +161 -108
  534. package/dist/jsx/Tabs/index.native.js.map +1 -1
  535. package/dist/jsx/Toast/index.mjs +227 -68
  536. package/dist/jsx/Toast/index.mjs.map +1 -1
  537. package/dist/jsx/Toast/index.native.js +232 -67
  538. package/dist/jsx/Toast/index.native.js.map +1 -1
  539. package/dist/jsx/Toast/store.mjs +75 -11
  540. package/dist/jsx/Toast/store.mjs.map +1 -1
  541. package/dist/jsx/Toast/store.native.js +108 -10
  542. package/dist/jsx/Toast/store.native.js.map +1 -1
  543. package/dist/jsx/Tooltip/index.mjs +147 -42
  544. package/dist/jsx/Tooltip/index.mjs.map +1 -1
  545. package/dist/jsx/Tooltip/index.native.js +195 -43
  546. package/dist/jsx/Tooltip/index.native.js.map +1 -1
  547. package/dist/jsx/Video/PlayerChrome.mjs +377 -0
  548. package/dist/jsx/Video/PlayerChrome.mjs.map +1 -0
  549. package/dist/jsx/Video/PlayerChrome.native.js +436 -0
  550. package/dist/jsx/Video/PlayerChrome.native.js.map +1 -0
  551. package/dist/jsx/Video/VideoFrame.mjs +14 -5
  552. package/dist/jsx/Video/VideoFrame.mjs.map +1 -1
  553. package/dist/jsx/Video/VideoFrame.native.js +16 -5
  554. package/dist/jsx/Video/VideoFrame.native.js.map +1 -1
  555. package/dist/jsx/Video/index.mjs +227 -11
  556. package/dist/jsx/Video/index.mjs.map +1 -1
  557. package/dist/jsx/Video/index.native.js +28 -13
  558. package/dist/jsx/Video/index.native.js.map +1 -1
  559. package/dist/jsx/Wheel/index.mjs +143 -92
  560. package/dist/jsx/Wheel/index.mjs.map +1 -1
  561. package/dist/jsx/Wheel/index.native.js +149 -96
  562. package/dist/jsx/Wheel/index.native.js.map +1 -1
  563. package/dist/jsx/actions/DestructiveAction.mjs +1 -1
  564. package/dist/jsx/actions/DestructiveAction.native.js +2 -2
  565. package/dist/jsx/actions/DestructiveAction.native.js.map +1 -1
  566. package/dist/jsx/charts/BarChart.mjs +8 -4
  567. package/dist/jsx/charts/BarChart.mjs.map +1 -1
  568. package/dist/jsx/charts/BarChart.native.js +9 -5
  569. package/dist/jsx/charts/BarChart.native.js.map +1 -1
  570. package/dist/jsx/charts/LineChart.mjs +1 -1
  571. package/dist/jsx/charts/LineChart.native.js +2 -2
  572. package/dist/jsx/charts/LineChart.native.js.map +1 -1
  573. package/dist/jsx/charts/PieChart.mjs +1 -1
  574. package/dist/jsx/charts/PieChart.native.js +2 -2
  575. package/dist/jsx/charts/PieChart.native.js.map +1 -1
  576. package/dist/jsx/charts/Sparkline.mjs +1 -1
  577. package/dist/jsx/charts/Sparkline.native.js +2 -2
  578. package/dist/jsx/charts/Sparkline.native.js.map +1 -1
  579. package/dist/jsx/charts/index.mjs +2 -1
  580. package/dist/jsx/charts/index.mjs.map +1 -1
  581. package/dist/jsx/charts/index.native.js +4 -0
  582. package/dist/jsx/charts/index.native.js.map +1 -1
  583. package/dist/jsx/code/CodeBlock/index.mjs +34 -7
  584. package/dist/jsx/code/CodeBlock/index.mjs.map +1 -1
  585. package/dist/jsx/code/CodeBlock/index.native.js +36 -9
  586. package/dist/jsx/code/CodeBlock/index.native.js.map +1 -1
  587. package/dist/jsx/feedback/ConfirmDialog.mjs +93 -6
  588. package/dist/jsx/feedback/ConfirmDialog.mjs.map +1 -1
  589. package/dist/jsx/feedback/ConfirmDialog.native.js +123 -5
  590. package/dist/jsx/feedback/ConfirmDialog.native.js.map +1 -1
  591. package/dist/jsx/feedback/NotifyHost.mjs +1 -1
  592. package/dist/jsx/feedback/NotifyHost.native.js +2 -2
  593. package/dist/jsx/feedback/NotifyHost.native.js.map +1 -1
  594. package/dist/jsx/icons/themed.mjs +5 -2
  595. package/dist/jsx/icons/themed.mjs.map +1 -1
  596. package/dist/jsx/icons/themed.native.js +4 -1
  597. package/dist/jsx/icons/themed.native.js.map +1 -1
  598. package/dist/jsx/images/Image/ImageFrame.mjs +216 -0
  599. package/dist/jsx/images/Image/ImageFrame.mjs.map +1 -0
  600. package/dist/jsx/images/Image/ImageFrame.native.js +248 -0
  601. package/dist/jsx/images/Image/ImageFrame.native.js.map +1 -0
  602. package/dist/jsx/images/Image/index.mjs +94 -41
  603. package/dist/jsx/images/Image/index.mjs.map +1 -1
  604. package/dist/jsx/images/Image/index.native.js +146 -108
  605. package/dist/jsx/images/Image/index.native.js.map +1 -1
  606. package/dist/jsx/images/Image/shared.mjs +76 -0
  607. package/dist/jsx/images/Image/shared.mjs.map +1 -0
  608. package/dist/jsx/images/Image/shared.native.js +109 -0
  609. package/dist/jsx/images/Image/shared.native.js.map +1 -0
  610. package/dist/jsx/index.js +4 -1
  611. package/dist/jsx/index.js.map +1 -1
  612. package/dist/jsx/index.mjs +4 -1
  613. package/dist/jsx/index.mjs.map +1 -1
  614. package/dist/jsx/index.native.js +7 -0
  615. package/dist/jsx/index.native.js.map +1 -1
  616. package/dist/jsx/knobImmuneExports.mjs +70 -0
  617. package/dist/jsx/knobImmuneExports.mjs.map +1 -0
  618. package/dist/jsx/knobImmuneExports.native.js +98 -0
  619. package/dist/jsx/knobImmuneExports.native.js.map +1 -0
  620. package/dist/jsx/layouts/AsyncBoundary.mjs +165 -38
  621. package/dist/jsx/layouts/AsyncBoundary.mjs.map +1 -1
  622. package/dist/jsx/layouts/AsyncBoundary.native.js +166 -37
  623. package/dist/jsx/layouts/AsyncBoundary.native.js.map +1 -1
  624. package/dist/jsx/layouts/EmptyState.mjs +132 -0
  625. package/dist/jsx/layouts/EmptyState.mjs.map +1 -0
  626. package/dist/jsx/layouts/EmptyState.native.js +165 -0
  627. package/dist/jsx/layouts/EmptyState.native.js.map +1 -0
  628. package/dist/jsx/layouts/PageTemplates.mjs +13 -5
  629. package/dist/jsx/layouts/PageTemplates.mjs.map +1 -1
  630. package/dist/jsx/layouts/PageTemplates.native.js +13 -5
  631. package/dist/jsx/layouts/PageTemplates.native.js.map +1 -1
  632. package/dist/jsx/layouts/PaneScaffold.mjs +277 -17
  633. package/dist/jsx/layouts/PaneScaffold.mjs.map +1 -1
  634. package/dist/jsx/layouts/PaneScaffold.native.js +294 -13
  635. package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
  636. package/dist/jsx/layouts/ViewSwitcher.mjs +66 -24
  637. package/dist/jsx/layouts/ViewSwitcher.mjs.map +1 -1
  638. package/dist/jsx/layouts/ViewSwitcher.native.js +78 -30
  639. package/dist/jsx/layouts/ViewSwitcher.native.js.map +1 -1
  640. package/dist/jsx/layouts/attachments.mjs +351 -175
  641. package/dist/jsx/layouts/attachments.mjs.map +1 -1
  642. package/dist/jsx/layouts/attachments.native.js +370 -186
  643. package/dist/jsx/layouts/attachments.native.js.map +1 -1
  644. package/dist/jsx/layouts/breadcrumbs.mjs +163 -53
  645. package/dist/jsx/layouts/breadcrumbs.mjs.map +1 -1
  646. package/dist/jsx/layouts/breadcrumbs.native.js +184 -65
  647. package/dist/jsx/layouts/breadcrumbs.native.js.map +1 -1
  648. package/dist/jsx/layouts/page.mjs +72 -112
  649. package/dist/jsx/layouts/page.mjs.map +1 -1
  650. package/dist/jsx/layouts/page.native.js +82 -130
  651. package/dist/jsx/layouts/page.native.js.map +1 -1
  652. package/dist/jsx/layouts/pageHeadingScope.mjs +8 -3
  653. package/dist/jsx/layouts/pageHeadingScope.mjs.map +1 -1
  654. package/dist/jsx/layouts/pageHeadingScope.native.js +10 -2
  655. package/dist/jsx/layouts/pageHeadingScope.native.js.map +1 -1
  656. package/dist/jsx/layouts/sidebar.mjs +152 -68
  657. package/dist/jsx/layouts/sidebar.mjs.map +1 -1
  658. package/dist/jsx/layouts/sidebar.native.js +118 -47
  659. package/dist/jsx/layouts/sidebar.native.js.map +1 -1
  660. package/dist/jsx/layouts/tags.mjs +323 -140
  661. package/dist/jsx/layouts/tags.mjs.map +1 -1
  662. package/dist/jsx/layouts/tags.native.js +355 -158
  663. package/dist/jsx/layouts/tags.native.js.map +1 -1
  664. package/dist/jsx/layouts/timeline.mjs +129 -45
  665. package/dist/jsx/layouts/timeline.mjs.map +1 -1
  666. package/dist/jsx/layouts/timeline.native.js +179 -55
  667. package/dist/jsx/layouts/timeline.native.js.map +1 -1
  668. package/dist/jsx/layouts/toolbar.mjs +57 -21
  669. package/dist/jsx/layouts/toolbar.mjs.map +1 -1
  670. package/dist/jsx/layouts/toolbar.native.js +62 -25
  671. package/dist/jsx/layouts/toolbar.native.js.map +1 -1
  672. package/dist/jsx/shared/i18n.mjs +10 -0
  673. package/dist/jsx/shared/i18n.mjs.map +1 -0
  674. package/dist/jsx/shared/i18n.native.js +52 -0
  675. package/dist/jsx/shared/i18n.native.js.map +1 -0
  676. package/dist/jsx/shared/textRidesText.mjs +31 -0
  677. package/dist/jsx/shared/textRidesText.mjs.map +1 -0
  678. package/dist/jsx/shared/textRidesText.native.js +81 -0
  679. package/dist/jsx/shared/textRidesText.native.js.map +1 -0
  680. package/dist/jsx/shared/useReturnFocusOnClose.mjs +7 -1
  681. package/dist/jsx/shared/useReturnFocusOnClose.mjs.map +1 -1
  682. package/dist/jsx/shared/useReturnFocusOnClose.native.js +7 -1
  683. package/dist/jsx/shared/useReturnFocusOnClose.native.js.map +1 -1
  684. package/dist/jsx/surfaces.mjs +94 -17
  685. package/dist/jsx/surfaces.mjs.map +1 -1
  686. package/dist/jsx/surfaces.native.js +95 -16
  687. package/dist/jsx/surfaces.native.js.map +1 -1
  688. package/dist/jsx/tamagui.mjs +2 -3
  689. package/dist/jsx/tamagui.mjs.map +1 -1
  690. package/dist/jsx/tamagui.native.js +37 -38
  691. package/dist/jsx/tamagui.native.js.map +1 -1
  692. package/dist/jsx/views/Calendar.mjs +101 -64
  693. package/dist/jsx/views/Calendar.mjs.map +1 -1
  694. package/dist/jsx/views/Calendar.native.js +105 -70
  695. package/dist/jsx/views/Calendar.native.js.map +1 -1
  696. package/dist/jsx/views/Dashboard.mjs +396 -107
  697. package/dist/jsx/views/Dashboard.mjs.map +1 -1
  698. package/dist/jsx/views/Dashboard.native.js +408 -110
  699. package/dist/jsx/views/Dashboard.native.js.map +1 -1
  700. package/dist/jsx/views/Gantt.mjs +256 -59
  701. package/dist/jsx/views/Gantt.mjs.map +1 -1
  702. package/dist/jsx/views/Gantt.native.js +264 -39
  703. package/dist/jsx/views/Gantt.native.js.map +1 -1
  704. package/dist/jsx/views/ImageGrid.mjs +138 -73
  705. package/dist/jsx/views/ImageGrid.mjs.map +1 -1
  706. package/dist/jsx/views/ImageGrid.native.js +155 -71
  707. package/dist/jsx/views/ImageGrid.native.js.map +1 -1
  708. package/dist/jsx/views/Kanban.mjs +52 -30
  709. package/dist/jsx/views/Kanban.mjs.map +1 -1
  710. package/dist/jsx/views/Kanban.native.js +55 -41
  711. package/dist/jsx/views/Kanban.native.js.map +1 -1
  712. package/dist/jsx/views/List.mjs +268 -95
  713. package/dist/jsx/views/List.mjs.map +1 -1
  714. package/dist/jsx/views/List.native.js +280 -101
  715. package/dist/jsx/views/List.native.js.map +1 -1
  716. package/dist/jsx/views/ReportBuilder.mjs +533 -166
  717. package/dist/jsx/views/ReportBuilder.mjs.map +1 -1
  718. package/dist/jsx/views/ReportBuilder.native.js +592 -169
  719. package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
  720. package/dist/jsx/views/TreeView.mjs +142 -52
  721. package/dist/jsx/views/TreeView.mjs.map +1 -1
  722. package/dist/jsx/views/TreeView.native.js +170 -55
  723. package/dist/jsx/views/TreeView.native.js.map +1 -1
  724. package/package.json +19 -19
  725. package/src/Accordion/Accordion.lc50.spec.tsx +69 -0
  726. package/src/Accordion/Accordion.spec.tsx +36 -0
  727. package/src/Accordion/Accordion.stories.tsx +82 -36
  728. package/src/Accordion/index.tsx +296 -75
  729. package/src/Alert/Alert.spec.tsx +137 -1
  730. package/src/Alert/Alert.stories.tsx +10 -11
  731. package/src/Alert/index.tsx +244 -62
  732. package/src/AnimateHeight/AnimateHeight.spec.tsx +152 -0
  733. package/src/AnimateHeight/index.tsx +237 -0
  734. package/src/Avatar/Avatar.spec.tsx +73 -2
  735. package/src/Avatar/Avatar.stories.tsx +106 -4
  736. package/src/Avatar/getInitials.ts +29 -0
  737. package/src/Avatar/index.tsx +323 -105
  738. package/src/Badge/Badge.spec.tsx +83 -0
  739. package/src/Badge/Badge.stories.tsx +15 -1
  740. package/src/Badge/index.tsx +138 -84
  741. package/src/Button.spec.tsx +181 -0
  742. package/src/Button.stories.tsx +92 -0
  743. package/src/Button.tsx +43 -0
  744. package/src/Carousel/Carousel.spec.tsx +152 -0
  745. package/src/Carousel/index.tsx +239 -102
  746. package/src/Chip/Chip.spec.tsx +141 -0
  747. package/src/Chip/Chip.stories.tsx +163 -10
  748. package/src/Chip/index.tsx +452 -11
  749. package/src/DialogContent.stories.tsx +8 -6
  750. package/src/DotIndicator/DotIndicator.stories.tsx +18 -0
  751. package/src/DotIndicator/dotIndicator.spec.tsx +57 -2
  752. package/src/DotIndicator/index.tsx +159 -24
  753. package/src/DropdownMenu/DropdownMenu.spec.tsx +172 -0
  754. package/src/DropdownMenu/DropdownMenu.stories.tsx +35 -0
  755. package/src/DropdownMenu/index.tsx +172 -46
  756. package/src/ErrorBoundary/index.tsx +1 -1
  757. package/src/Pagination.api.spec.tsx +41 -0
  758. package/src/Pagination.tsx +49 -8
  759. package/src/PopoverContent.stories.tsx +4 -2
  760. package/src/ProgressSteps/ProgressSteps.spec.tsx +48 -1
  761. package/src/ProgressSteps/ProgressSteps.stories.tsx +48 -0
  762. package/src/ProgressSteps/index.tsx +224 -133
  763. package/src/Quote/Quote.lc50.spec.tsx +53 -0
  764. package/src/Quote/Quote.spec.tsx +9 -2
  765. package/src/Quote/Quote.stories.tsx +1 -1
  766. package/src/Quote/index.tsx +77 -60
  767. package/src/SheetModal/index.native.tsx +41 -39
  768. package/src/SheetModal/index.tsx +149 -18
  769. package/src/Skeleton/Skeleton.stories.tsx +109 -93
  770. package/src/Skeleton/SkeletonText.stories.tsx +11 -0
  771. package/src/Skeleton/index.tsx +257 -8
  772. package/src/SkipLink/SkipLink.spec.tsx +35 -0
  773. package/src/SkipLink/SkipLink.stories.tsx +1 -1
  774. package/src/SkipLink/index.tsx +120 -71
  775. package/src/Tabs/Tabs.spec.tsx +65 -0
  776. package/src/Tabs/Tabs.stories.tsx +32 -0
  777. package/src/Tabs/index.tsx +188 -133
  778. package/src/Toast/Toast.spec.tsx +208 -8
  779. package/src/Toast/Toast.stories.tsx +97 -16
  780. package/src/Toast/index.tsx +322 -78
  781. package/src/Toast/store.ts +150 -16
  782. package/src/Tooltip/Tooltip.lc50.spec.tsx +52 -0
  783. package/src/Tooltip/Tooltip.spec.tsx +99 -0
  784. package/src/Tooltip/Tooltip.stories.tsx +23 -0
  785. package/src/Tooltip/index.tsx +200 -44
  786. package/src/Video/PlayerChrome.tsx +412 -0
  787. package/src/Video/Video.spec.tsx +47 -4
  788. package/src/Video/Video.stories.tsx +2 -1
  789. package/src/Video/VideoFrame.tsx +15 -3
  790. package/src/Video/index.native.tsx +20 -12
  791. package/src/Video/index.tsx +285 -21
  792. package/src/Video/types.ts +7 -1
  793. package/src/Wheel/Wheel.spec.tsx +217 -2
  794. package/src/Wheel/Wheel.stories.tsx +39 -13
  795. package/src/Wheel/index.tsx +205 -134
  796. package/src/actions/DestructiveAction.tsx +1 -1
  797. package/src/charts/BarChart.tsx +14 -3
  798. package/src/charts/LineChart.tsx +1 -1
  799. package/src/charts/PieChart.tsx +1 -1
  800. package/src/charts/Sparkline.tsx +1 -1
  801. package/src/charts/charts.spec.tsx +25 -0
  802. package/src/charts/index.ts +9 -0
  803. package/src/code/CodeBlock/index.tsx +43 -7
  804. package/src/export-surface.spec.tsx +137 -0
  805. package/src/feedback/ConfirmDialog.spec.tsx +36 -0
  806. package/src/feedback/ConfirmDialog.stories.tsx +20 -1
  807. package/src/feedback/ConfirmDialog.tsx +121 -9
  808. package/src/feedback/NotifyHost.tsx +1 -1
  809. package/src/icons/themed.tsx +7 -2
  810. package/src/images/Image/Image.spec.tsx +136 -73
  811. package/src/images/Image/Image.stories.tsx +113 -9
  812. package/src/images/Image/ImageFrame.tsx +288 -0
  813. package/src/images/Image/index.native.tsx +177 -144
  814. package/src/images/Image/index.tsx +103 -51
  815. package/src/images/Image/shared.ts +88 -0
  816. package/src/images/Image/types.ts +32 -1
  817. package/src/index.ts +18 -0
  818. package/src/knobImmuneExports.ts +97 -0
  819. package/src/layouts/AsyncBoundary.spec.tsx +77 -0
  820. package/src/layouts/AsyncBoundary.stories.tsx +33 -1
  821. package/src/layouts/AsyncBoundary.tsx +183 -46
  822. package/src/layouts/Attachments.stories.tsx +28 -14
  823. package/src/layouts/Breadcrumbs.stories.tsx +22 -1
  824. package/src/layouts/EmptyState.stories.tsx +94 -26
  825. package/src/layouts/EmptyState.tsx +169 -0
  826. package/src/layouts/PageHeader.stories.tsx +68 -15
  827. package/src/layouts/PageTemplates.tsx +11 -6
  828. package/src/layouts/PaneScaffold.stories.tsx +132 -37
  829. package/src/layouts/PaneScaffold.tsx +354 -18
  830. package/src/layouts/ScreenToolbar.stories.tsx +36 -11
  831. package/src/layouts/Sidebar.stories.tsx +30 -7
  832. package/src/layouts/Tags.stories.tsx +31 -32
  833. package/src/layouts/Timeline.stories.tsx +2 -2
  834. package/src/layouts/Toolbar.stories.tsx +19 -0
  835. package/src/layouts/ViewSwitcher.stories.tsx +11 -3
  836. package/src/layouts/ViewSwitcher.tsx +101 -48
  837. package/src/layouts/attachments.tsx +394 -186
  838. package/src/layouts/breadcrumbs.tsx +213 -75
  839. package/src/layouts/layouts.spec.tsx +32 -0
  840. package/src/layouts/page.tsx +103 -164
  841. package/src/layouts/pageHeadingScope.tsx +28 -2
  842. package/src/layouts/sidebar.tsx +184 -91
  843. package/src/layouts/tags-trigger.spec.tsx +8 -8
  844. package/src/layouts/tags.tsx +356 -159
  845. package/src/layouts/timeline-comments.spec.tsx +17 -0
  846. package/src/layouts/timeline.tsx +179 -65
  847. package/src/layouts/toolbar.tsx +78 -27
  848. package/src/shared/i18n.ts +26 -0
  849. package/src/shared/textRidesText.ts +57 -0
  850. package/src/shared/useReturnFocusOnClose.ts +7 -1
  851. package/src/surfaces.tsx +83 -22
  852. package/src/tamagui.spec.ts +19 -4
  853. package/src/tamagui.ts +14 -6
  854. package/src/views/Calendar.stories.tsx +2 -1
  855. package/src/views/Calendar.tsx +129 -81
  856. package/src/views/Dashboard.stories.tsx +132 -1
  857. package/src/views/Dashboard.tsx +440 -127
  858. package/src/views/Gantt.stories.tsx +6 -5
  859. package/src/views/Gantt.tsx +330 -61
  860. package/src/views/ImageGrid.stories.tsx +81 -17
  861. package/src/views/ImageGrid.tsx +176 -96
  862. package/src/views/Kanban.native.tsx +73 -42
  863. package/src/views/Kanban.stories.tsx +42 -26
  864. package/src/views/Kanban.tsx +68 -40
  865. package/src/views/List.stories.tsx +107 -29
  866. package/src/views/List.tsx +335 -109
  867. package/src/views/ReportBuilder.stories.tsx +28 -1
  868. package/src/views/ReportBuilder.tsx +647 -275
  869. package/src/views/TreeView.stories.tsx +19 -0
  870. package/src/views/TreeView.tsx +194 -59
  871. package/types/Accordion/index.d.ts +10 -2
  872. package/types/Accordion/index.d.ts.map +1 -1
  873. package/types/Alert/index.d.ts +8 -2
  874. package/types/Alert/index.d.ts.map +1 -1
  875. package/types/AnimateHeight/index.d.ts +48 -0
  876. package/types/AnimateHeight/index.d.ts.map +1 -0
  877. package/types/Avatar/getInitials.d.ts +26 -0
  878. package/types/Avatar/getInitials.d.ts.map +1 -1
  879. package/types/Avatar/index.d.ts +34 -11
  880. package/types/Avatar/index.d.ts.map +1 -1
  881. package/types/Badge/index.d.ts +17 -12
  882. package/types/Badge/index.d.ts.map +1 -1
  883. package/types/Button.d.ts +42 -0
  884. package/types/Button.d.ts.map +1 -0
  885. package/types/Carousel/index.d.ts.map +1 -1
  886. package/types/Chip/index.d.ts +41 -1
  887. package/types/Chip/index.d.ts.map +1 -1
  888. package/types/DotIndicator/index.d.ts +4 -3
  889. package/types/DotIndicator/index.d.ts.map +1 -1
  890. package/types/DropdownMenu/index.d.ts +39 -5
  891. package/types/DropdownMenu/index.d.ts.map +1 -1
  892. package/types/ErrorBoundary/index.d.ts +1 -1
  893. package/types/Pagination.d.ts.map +1 -1
  894. package/types/ProgressSteps/index.d.ts +20 -5
  895. package/types/ProgressSteps/index.d.ts.map +1 -1
  896. package/types/Quote/index.d.ts +4 -3
  897. package/types/Quote/index.d.ts.map +1 -1
  898. package/types/SheetModal/index.d.ts +7 -10
  899. package/types/SheetModal/index.d.ts.map +1 -1
  900. package/types/SheetModal/index.native.d.ts +6 -13
  901. package/types/SheetModal/index.native.d.ts.map +1 -1
  902. package/types/Skeleton/index.d.ts +40 -1
  903. package/types/Skeleton/index.d.ts.map +1 -1
  904. package/types/SkipLink/index.d.ts +5 -6
  905. package/types/SkipLink/index.d.ts.map +1 -1
  906. package/types/Tabs/index.d.ts +12 -10
  907. package/types/Tabs/index.d.ts.map +1 -1
  908. package/types/Toast/index.d.ts +32 -9
  909. package/types/Toast/index.d.ts.map +1 -1
  910. package/types/Toast/store.d.ts +59 -4
  911. package/types/Toast/store.d.ts.map +1 -1
  912. package/types/Tooltip/index.d.ts +50 -5
  913. package/types/Tooltip/index.d.ts.map +1 -1
  914. package/types/Video/PlayerChrome.d.ts +24 -0
  915. package/types/Video/PlayerChrome.d.ts.map +1 -0
  916. package/types/Video/VideoFrame.d.ts.map +1 -1
  917. package/types/Video/index.d.ts +3 -2
  918. package/types/Video/index.d.ts.map +1 -1
  919. package/types/Video/index.native.d.ts +3 -2
  920. package/types/Video/index.native.d.ts.map +1 -1
  921. package/types/Video/types.d.ts +7 -1
  922. package/types/Video/types.d.ts.map +1 -1
  923. package/types/Wheel/index.d.ts +10 -1
  924. package/types/Wheel/index.d.ts.map +1 -1
  925. package/types/charts/BarChart.d.ts +7 -1
  926. package/types/charts/BarChart.d.ts.map +1 -1
  927. package/types/charts/index.d.ts +1 -0
  928. package/types/charts/index.d.ts.map +1 -1
  929. package/types/code/CodeBlock/index.d.ts.map +1 -1
  930. package/types/feedback/ConfirmDialog.d.ts +6 -0
  931. package/types/feedback/ConfirmDialog.d.ts.map +1 -1
  932. package/types/icons/themed.d.ts.map +1 -1
  933. package/types/images/Image/ImageFrame.d.ts +40 -0
  934. package/types/images/Image/ImageFrame.d.ts.map +1 -0
  935. package/types/images/Image/index.d.ts +1 -1
  936. package/types/images/Image/index.d.ts.map +1 -1
  937. package/types/images/Image/index.native.d.ts +1 -1
  938. package/types/images/Image/index.native.d.ts.map +1 -1
  939. package/types/images/Image/shared.d.ts +13 -0
  940. package/types/images/Image/shared.d.ts.map +1 -0
  941. package/types/images/Image/types.d.ts +27 -1
  942. package/types/images/Image/types.d.ts.map +1 -1
  943. package/types/index.d.ts +6 -0
  944. package/types/index.d.ts.map +1 -1
  945. package/types/knobImmuneExports.d.ts +21 -0
  946. package/types/knobImmuneExports.d.ts.map +1 -0
  947. package/types/layouts/AsyncBoundary.d.ts +20 -2
  948. package/types/layouts/AsyncBoundary.d.ts.map +1 -1
  949. package/types/layouts/EmptyState.d.ts +26 -0
  950. package/types/layouts/EmptyState.d.ts.map +1 -0
  951. package/types/layouts/PageTemplates.d.ts +5 -3
  952. package/types/layouts/PageTemplates.d.ts.map +1 -1
  953. package/types/layouts/PaneScaffold.d.ts +27 -5
  954. package/types/layouts/PaneScaffold.d.ts.map +1 -1
  955. package/types/layouts/ViewSwitcher.d.ts +7 -4
  956. package/types/layouts/ViewSwitcher.d.ts.map +1 -1
  957. package/types/layouts/attachments.d.ts +4 -2
  958. package/types/layouts/attachments.d.ts.map +1 -1
  959. package/types/layouts/breadcrumbs.d.ts +13 -5
  960. package/types/layouts/breadcrumbs.d.ts.map +1 -1
  961. package/types/layouts/page.d.ts +16 -27
  962. package/types/layouts/page.d.ts.map +1 -1
  963. package/types/layouts/pageHeadingScope.d.ts +14 -1
  964. package/types/layouts/pageHeadingScope.d.ts.map +1 -1
  965. package/types/layouts/sidebar.d.ts +3 -1
  966. package/types/layouts/sidebar.d.ts.map +1 -1
  967. package/types/layouts/tags.d.ts +4 -1
  968. package/types/layouts/tags.d.ts.map +1 -1
  969. package/types/layouts/timeline.d.ts +7 -5
  970. package/types/layouts/timeline.d.ts.map +1 -1
  971. package/types/layouts/toolbar.d.ts +1 -1
  972. package/types/layouts/toolbar.d.ts.map +1 -1
  973. package/types/shared/i18n.d.ts +14 -0
  974. package/types/shared/i18n.d.ts.map +1 -0
  975. package/types/shared/textRidesText.d.ts +20 -0
  976. package/types/shared/textRidesText.d.ts.map +1 -0
  977. package/types/shared/useReturnFocusOnClose.d.ts.map +1 -1
  978. package/types/surfaces.d.ts +0 -14
  979. package/types/surfaces.d.ts.map +1 -1
  980. package/types/tamagui.d.ts +2 -3
  981. package/types/tamagui.d.ts.map +1 -1
  982. package/types/views/Calendar.d.ts.map +1 -1
  983. package/types/views/Dashboard.d.ts +68 -6
  984. package/types/views/Dashboard.d.ts.map +1 -1
  985. package/types/views/Gantt.d.ts +5 -0
  986. package/types/views/Gantt.d.ts.map +1 -1
  987. package/types/views/ImageGrid.d.ts +4 -0
  988. package/types/views/ImageGrid.d.ts.map +1 -1
  989. package/types/views/Kanban.d.ts.map +1 -1
  990. package/types/views/Kanban.native.d.ts +12 -1
  991. package/types/views/Kanban.native.d.ts.map +1 -1
  992. package/types/views/List.d.ts +45 -6
  993. package/types/views/List.d.ts.map +1 -1
  994. package/types/views/ReportBuilder.d.ts +8 -54
  995. package/types/views/ReportBuilder.d.ts.map +1 -1
  996. package/types/views/TreeView.d.ts +13 -11
  997. package/types/views/TreeView.d.ts.map +1 -1
@@ -1,6 +1,6 @@
1
- import type { ReactNode } from "react";
1
+ import type { CSSProperties, ReactNode } from "react";
2
2
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
- import { useTranslation } from "react-i18next";
3
+ import { useTranslation } from "../shared/i18n";
4
4
  import { useResolvedKnobs } from "@multiplatform.one/theme";
5
5
  import type { GetProps, SizeTokens } from "tamagui";
6
6
  import { View, getTokens, isWeb, styled, Text } from "tamagui";
@@ -12,6 +12,9 @@ export interface WheelItem<T = string | number> {
12
12
  label?: string;
13
13
  }
14
14
 
15
+ /** iOS 14 multi-column highlight joining (CupertinoPicker capStart/capEnd). */
16
+ export type WheelHighlightEdges = "all" | "start" | "end" | "none";
17
+
15
18
  export interface WheelProps<T = string | number> {
16
19
  /** Array of items to display */
17
20
  items: (T | WheelItem<T>)[];
@@ -23,6 +26,8 @@ export interface WheelProps<T = string | number> {
23
26
  visibleItems?: 3 | 5 | 7;
24
27
  /** Height of each item */
25
28
  itemHeight?: number;
29
+ /** Column width in px. Items are absolutely positioned, so this is the painted width. */
30
+ width?: number;
26
31
  /** Custom render function for items */
27
32
  renderItem?: (item: T, index: number, isSelected: boolean) => ReactNode;
28
33
  /** Whether the wheel is disabled */
@@ -34,6 +39,11 @@ export interface WheelProps<T = string | number> {
34
39
  * instead of rubber-banding. Uses virtual rows with modulo item indexing.
35
40
  */
36
41
  loop?: boolean;
42
+ /**
43
+ * How the iOS selection fill rounds and insets. `"all"` is a standalone
44
+ * column; `"start"` / `"end"` / `"none"` join adjacent columns into one band.
45
+ */
46
+ highlightEdges?: WheelHighlightEdges;
37
47
  /** Accessible name for the picker (web renders role="slider"). */
38
48
  "aria-label"?: string;
39
49
  }
@@ -45,6 +55,23 @@ const friction = 0.95; // Apple's PKScrollViewDecelerationFrictionFactor
45
55
  const minVelocity = 0.5; // Minimum velocity before snapping
46
56
  const momentumMultiplier = 0.8; // Velocity multiplier for momentum feel
47
57
  const rubberBandConstant = 0.55; // Apple's rubber-banding constant
58
+ const tapSlopPx = 8;
59
+
60
+ /**
61
+ * Flutter CupertinoPicker / UIPickerView cylinder. diameterRatio 1.07 and
62
+ * squeeze 1.45 are the Cupertino defaults — a shallow drum, not a 70° fan.
63
+ */
64
+ const diameterRatio = 1.07;
65
+ const squeeze = 1.45;
66
+ const perspectivePx = 400;
67
+ const defaultColumnWidth = 88;
68
+
69
+ /** Type scale for wheel numerals — iOS UIPickerView is ~21pt at default size. */
70
+ const wheelFontBySize: Record<"small" | "medium" | "large", SizeTokens> = {
71
+ small: "$6",
72
+ medium: "$8",
73
+ large: "$9",
74
+ };
48
75
 
49
76
  /** Durations for discrete snaps (mirrors theme animationConfig). */
50
77
  const transitionDurationsMs: Record<string, number> = {
@@ -59,9 +86,9 @@ const transitionDurationsMs: Record<string, number> = {
59
86
  };
60
87
 
61
88
  // The interactive wrapper is a raw <div>, so the non-removable focus-visible
62
- // ring (W12 / DG-A11Y-01 contract: 2px solid $outlineColor, offset 2) has to
63
- // come from an injected stylesheet — inline styles cannot express
64
- // :focus-visible. Same one-shot pattern as the forms Spinner motion styles.
89
+ // ring (W12 / DG-A11Y-01 / LC-71: 2px solid $outlineColor) has to come from
90
+ // an injected stylesheet — inline styles cannot express :focus-visible.
91
+ // Inset (−2px): the viewport clips overflow to radius (LC-71 clipping arm).
65
92
  const WHEEL_FOCUS_STYLE_ID = "mp1-wheel-focus";
66
93
  function ensureWheelFocusStyles() {
67
94
  if (!isWeb || typeof document === "undefined") return;
@@ -69,10 +96,19 @@ function ensureWheelFocusStyles() {
69
96
  const style = document.createElement("style");
70
97
  style.id = WHEEL_FOCUS_STYLE_ID;
71
98
  style.textContent =
72
- ".mp1-wheel-wrapper:focus-visible { outline: 2px solid var(--outlineColor, rgba(0,0,0,0.5)); outline-offset: 2px; }";
99
+ ".mp1-wheel-wrapper:focus-visible { outline: 2px solid var(--outlineColor, rgba(0,0,0,0.5)); outline-offset: -2px; }";
73
100
  document.head.appendChild(style);
74
101
  }
75
102
 
103
+ const wheelMaskStyle: CSSProperties | undefined = isWeb
104
+ ? {
105
+ WebkitMaskImage:
106
+ "linear-gradient(to bottom, rgba(0,0,0,0.28) 0%, #000 32%, #000 68%, rgba(0,0,0,0.28) 100%)",
107
+ maskImage:
108
+ "linear-gradient(to bottom, rgba(0,0,0,0.28) 0%, #000 32%, #000 68%, rgba(0,0,0,0.28) 100%)",
109
+ }
110
+ : undefined;
111
+
76
112
  // ── Styled components ─────────────────────────────────────────
77
113
 
78
114
  const WheelContainer = styled(View, {
@@ -80,7 +116,6 @@ const WheelContainer = styled(View, {
80
116
  position: "relative",
81
117
  overflow: "hidden",
82
118
  userSelect: "none",
83
- width: 80, // Default width for wheel column
84
119
  });
85
120
 
86
121
  const WheelItemContainer = styled(View, {
@@ -98,28 +133,9 @@ const SelectionIndicator = styled(View, {
98
133
  position: "absolute",
99
134
  left: 0,
100
135
  right: 0,
101
- borderTopWidth: 1,
102
- borderBottomWidth: 1,
103
- borderColor: "$borderColor",
104
- backgroundColor: "$color3",
105
- opacity: 0.3,
106
136
  pointerEvents: "none",
107
137
  });
108
138
 
109
- const FadeOverlay = styled(View, {
110
- name: "WheelFadeOverlay",
111
- position: "absolute",
112
- left: 0,
113
- right: 0,
114
- pointerEvents: "none",
115
- variants: {
116
- edge: {
117
- top: { top: 0 },
118
- bottom: { bottom: 0 },
119
- },
120
- } as const,
121
- });
122
-
123
139
  // ── Helper functions ──────────────────────────────────────────
124
140
 
125
141
  function normalizeItem<T>(item: T | WheelItem<T>): WheelItem<T> {
@@ -181,43 +197,56 @@ function rubberBand(offset: number, dimension: number): number {
181
197
  return offset < 0 ? -result : result;
182
198
  }
183
199
 
184
- // Calculate 3D transform for wheel effect
200
+ /**
201
+ * Project a row onto the Cupertino cylinder. Angle 0 sits in the selection
202
+ * band; off-center rows recede with rotateX + foreshortening (not opacity —
203
+ * row text stays on the AA $color11 ramp).
204
+ */
185
205
  function getItemTransform(
186
206
  index: number,
187
207
  scrollOffset: number,
188
208
  itemHeight: number,
189
209
  containerHeight: number,
190
210
  ): { translateY: number; rotateX: number; scale: number; opacity: number } {
191
- const centerY = containerHeight / 2;
192
- // Rows are laid out so the row at `scrollOffset / itemHeight` sits under the
193
- // selection indicator (which is centered at `containerHeight / 2`), hence the
194
- // `(containerHeight - itemHeight) / 2` padding shift.
195
- const itemCenterY =
196
- index * itemHeight + itemHeight / 2 - scrollOffset + (containerHeight - itemHeight) / 2;
197
- const distanceFromCenter = itemCenterY - centerY;
198
- const normalizedDistance = distanceFromCenter / (containerHeight / 2);
199
-
200
- // Rotation: items rotate on X-axis as they move away from center
201
- // Max rotation is about 70 degrees at the edges
202
- const rotateX = normalizedDistance * -70;
203
-
204
- // Scale: items get smaller as they rotate away
205
- const scale = 1 - Math.abs(normalizedDistance) * 0.3;
206
-
207
- // Opacity: keep visible rows at full alpha so $color11/$color12 clear WCAG AA
208
- // (≥4.5:1). Depth cue comes from rotateX/scale + edge fades, not text alpha.
209
- const opacity = 1;
210
-
211
- // Y position adjusted for 3D perspective effect
212
- // Items appear to curve back
213
- const curveOffset = Math.abs(normalizedDistance) * normalizedDistance * itemHeight * 0.5;
214
- const translateY = itemCenterY - itemHeight / 2 + curveOffset;
215
-
211
+ const radius = (containerHeight * diameterRatio) / 2;
212
+ const angle = (index * itemHeight - scrollOffset) / squeeze / Math.max(radius, 1);
213
+ const clamped = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, angle));
214
+ const centerTop = (containerHeight - itemHeight) / 2;
215
+ const translateY = centerTop + radius * Math.sin(clamped);
216
+ const rotateX = -(clamped * 180) / Math.PI;
217
+ const scale = Math.max(0.72, Math.min(1, Math.cos(clamped)));
216
218
  return {
217
219
  translateY,
218
- rotateX: Math.max(-85, Math.min(85, rotateX)),
219
- scale: Math.max(0.5, Math.min(1, scale)),
220
- opacity,
220
+ rotateX,
221
+ scale,
222
+ opacity: 1,
223
+ };
224
+ }
225
+
226
+ function tokenPx(token: string | number, scale: "radius" | "space"): number {
227
+ if (typeof token === "number") return token;
228
+ const key = String(token).replace(/^\$/, "");
229
+ const val = (getTokens() as { [k: string]: Record<string, { val?: number }> })[scale]?.[key]?.val;
230
+ if (typeof val === "number") return val;
231
+ return scale === "radius" ? 9 : 8;
232
+ }
233
+
234
+ function highlightBandStyle(
235
+ edges: WheelHighlightEdges,
236
+ radiusToken: string | number,
237
+ pointy: boolean,
238
+ ): CSSProperties {
239
+ const r = pointy ? 0 : tokenPx(radiusToken, "radius");
240
+ const inset = tokenPx("$2", "space");
241
+ const capStart = edges === "all" || edges === "start";
242
+ const capEnd = edges === "all" || edges === "end";
243
+ return {
244
+ borderStartStartRadius: capStart ? r : 0,
245
+ borderStartEndRadius: capEnd ? r : 0,
246
+ borderEndStartRadius: capStart ? r : 0,
247
+ borderEndEndRadius: capEnd ? r : 0,
248
+ marginInlineStart: capStart ? inset : 0,
249
+ marginInlineEnd: capEnd ? inset : 0,
221
250
  };
222
251
  }
223
252
 
@@ -229,22 +258,28 @@ export function Wheel<T = string | number>({
229
258
  onChange,
230
259
  visibleItems = 5,
231
260
  itemHeight: itemHeightProp,
261
+ width: widthProp,
232
262
  renderItem,
233
263
  disabled = false,
234
264
  size: sizeProp,
235
265
  loop = false,
266
+ highlightEdges = "all",
236
267
  "aria-label": ariaLabel,
237
268
  }: WheelProps<T>) {
238
269
  const { t } = useTranslation();
239
270
  const { knobProps } = useResolvedKnobs();
240
- // Row text and row geometry derive from the size knob (spec Wheel:
241
- // rows consume sizeToken, SP-FIXED); explicit props eject.
242
- const size = sizeProp ?? (knobProps.sizeToken as SizeTokens);
243
- const itemHeight = itemHeightProp ?? (getTokens().size as any)?.[knobProps.sizeToken]?.val ?? 40;
271
+ const sizeKnob = (knobProps.size as "small" | "medium" | "large") ?? "medium";
272
+ const size = sizeProp ?? wheelFontBySize[sizeKnob] ?? "$8";
273
+ // Row geometry rides nestedControl (density-aware, 32px at medium — iOS
274
+ // UIPickerView item extent). Explicit itemHeight ejects.
275
+ const itemHeight = itemHeightProp ?? knobProps.nestedControl.px ?? 32;
276
+ const columnWidth = widthProp ?? defaultColumnWidth;
244
277
  ensureWheelFocusStyles();
245
278
  // LC-25: discrete snaps (keyboard / controlled value) tween; drag stays 1:1.
246
- const motionTransition = (knobProps.transition as string | undefined) || "quick";
247
- const snapDurationMs = transitionDurationsMs[motionTransition] ?? 100;
279
+ // knobProps.transition is undefined at animation "none" (which also carries
280
+ // prefers-reduced-motion) snaps must JUMP then, not fall back to a tween.
281
+ const motionTransition = knobProps.transition as string | undefined;
282
+ const snapDurationMs = motionTransition ? (transitionDurationsMs[motionTransition] ?? 100) : 0;
248
283
  const containerRef = useRef<HTMLDivElement>(null);
249
284
  const [scrollOffset, setScrollOffset] = useState(0);
250
285
  const [selectedIndex, setSelectedIndex] = useState(0);
@@ -266,6 +301,8 @@ export function Wheel<T = string | number>({
266
301
  // Drag state
267
302
  const isDraggingRef = useRef(false);
268
303
  const lastYRef = useRef(0);
304
+ const downYRef = useRef(0);
305
+ const dragDistanceRef = useRef(0);
269
306
  const lastTimeRef = useRef(0);
270
307
  const dragVelocitiesRef = useRef<number[]>([]);
271
308
 
@@ -274,6 +311,13 @@ export function Wheel<T = string | number>({
274
311
  const minOffset = 0;
275
312
  const maxOffset = n > 0 ? (n - 1) * itemHeight : 0;
276
313
 
314
+ const liveDataIndex =
315
+ n === 0
316
+ ? 0
317
+ : loopEnabled
318
+ ? modIndex(Math.round(scrollOffset / itemHeight), n)
319
+ : Math.max(0, Math.min(Math.round(scrollOffset / itemHeight), n - 1));
320
+
277
321
  const runSnapComplete = useCallback(
278
322
  (finalOffset: number, dataIndex: number) => {
279
323
  const safeIdx = Math.max(0, Math.min(dataIndex, n - 1));
@@ -400,9 +444,35 @@ export function Wheel<T = string | number>({
400
444
  [n, itemHeight, loopEnabled, animateToOffset],
401
445
  );
402
446
 
403
- // Momentum animation (iOS-style deceleration)
447
+ const hitTestDataIndex = useCallback(
448
+ (tapY: number): number | null => {
449
+ if (n === 0) return null;
450
+ const offset = scrollOffsetRef.current;
451
+ const centerRow = Math.round(offset / itemHeight);
452
+ const rowBuffer = paddingItems + 5;
453
+ let best: { dataIndex: number; dist: number } | null = null;
454
+ for (let vr = centerRow - rowBuffer; vr <= centerRow + rowBuffer; vr++) {
455
+ if (!loopEnabled && (vr < 0 || vr >= n)) continue;
456
+ const dataIndex = loopEnabled ? modIndex(vr, n) : vr;
457
+ const { translateY } = getItemTransform(vr, offset, itemHeight, containerHeight);
458
+ const dist = Math.abs(translateY + itemHeight / 2 - tapY);
459
+ if (!best || dist < best.dist) best = { dataIndex, dist };
460
+ }
461
+ if (best && best.dist <= itemHeight) return best.dataIndex;
462
+ return null;
463
+ },
464
+ [n, itemHeight, paddingItems, loopEnabled, containerHeight],
465
+ );
466
+
467
+ // Momentum animation (iOS-style deceleration). LC-68: at animation "none"
468
+ // / PRM there is no coast — jump to the nearest row (Apple Reduce Motion,
469
+ // GOV.UK scroll-behavior:auto, Material spatial-motion off).
404
470
  const startMomentum = useCallback(
405
471
  (initialVelocity: number) => {
472
+ if (snapDurationMs <= 0) {
473
+ snapToNearestRow(false);
474
+ return;
475
+ }
406
476
  let velocity = initialVelocity * momentumMultiplier;
407
477
  let offset = scrollOffsetRef.current;
408
478
 
@@ -420,12 +490,12 @@ export function Wheel<T = string | number>({
420
490
  }
421
491
  }
422
492
 
493
+ scrollOffsetRef.current = offset;
423
494
  setScrollOffset(offset);
424
495
 
425
496
  if (Math.abs(velocity) > minVelocity) {
426
497
  animationRef.current = requestAnimationFrame(animate);
427
498
  } else {
428
- scrollOffsetRef.current = offset;
429
499
  snapToNearestRow(true);
430
500
  }
431
501
  };
@@ -434,7 +504,7 @@ export function Wheel<T = string | number>({
434
504
  if (animationRef.current) cancelAnimationFrame(animationRef.current);
435
505
  animationRef.current = requestAnimationFrame(animate);
436
506
  },
437
- [loopEnabled, minOffset, maxOffset, containerHeight, itemHeight, snapToNearestRow],
507
+ [loopEnabled, minOffset, maxOffset, containerHeight, snapToNearestRow, snapDurationMs],
438
508
  );
439
509
 
440
510
  // Handle pointer/mouse down
@@ -450,12 +520,14 @@ export function Wheel<T = string | number>({
450
520
 
451
521
  isDraggingRef.current = true;
452
522
  lastYRef.current = e.clientY;
523
+ downYRef.current = e.clientY;
524
+ dragDistanceRef.current = 0;
453
525
  lastTimeRef.current = performance.now();
454
526
  dragVelocitiesRef.current = [];
455
527
 
456
- // Capture pointer for drag outside element
457
528
  if (isWeb && containerRef.current) {
458
529
  containerRef.current.setPointerCapture(e.pointerId);
530
+ containerRef.current.style.cursor = "grabbing";
459
531
  }
460
532
  },
461
533
  [disabled],
@@ -470,6 +542,7 @@ export function Wheel<T = string | number>({
470
542
  const currentTime = performance.now();
471
543
  const deltaY = lastYRef.current - currentY;
472
544
  const deltaTime = currentTime - lastTimeRef.current;
545
+ dragDistanceRef.current += Math.abs(deltaY);
473
546
 
474
547
  // Calculate velocity
475
548
  if (deltaTime > 0) {
@@ -507,9 +580,24 @@ export function Wheel<T = string | number>({
507
580
 
508
581
  isDraggingRef.current = false;
509
582
 
510
- // Release pointer capture
511
583
  if (isWeb && containerRef.current) {
512
- containerRef.current.releasePointerCapture(e.pointerId);
584
+ try {
585
+ containerRef.current.releasePointerCapture(e.pointerId);
586
+ } catch {
587
+ // already released
588
+ }
589
+ containerRef.current.style.cursor = disabled ? "not-allowed" : "grab";
590
+ }
591
+
592
+ // iOS: a tap on a visible row snaps that row to center.
593
+ if (dragDistanceRef.current < tapSlopPx) {
594
+ const rect = containerRef.current?.getBoundingClientRect();
595
+ const tapY = e.clientY - (rect?.top ?? 0);
596
+ const tapped = hitTestDataIndex(tapY);
597
+ if (tapped != null) {
598
+ snapToIndex(tapped, true);
599
+ return;
600
+ }
513
601
  }
514
602
 
515
603
  // Calculate average velocity for momentum
@@ -526,7 +614,7 @@ export function Wheel<T = string | number>({
526
614
  snapToNearestRow(true);
527
615
  }
528
616
  },
529
- [snapToNearestRow, startMomentum],
617
+ [snapToNearestRow, startMomentum, hitTestDataIndex, snapToIndex, disabled],
530
618
  );
531
619
 
532
620
  // Handle mouse wheel
@@ -554,6 +642,7 @@ export function Wheel<T = string | number>({
554
642
  }
555
643
  }
556
644
 
645
+ scrollOffsetRef.current = newOffset;
557
646
  setScrollOffset(newOffset);
558
647
 
559
648
  if (animationRef.current) cancelAnimationFrame(animationRef.current);
@@ -565,7 +654,7 @@ export function Wheel<T = string | number>({
565
654
  }, 100);
566
655
  });
567
656
  },
568
- [disabled, loopEnabled, minOffset, maxOffset, itemHeight, snapToNearestRow],
657
+ [disabled, loopEnabled, minOffset, maxOffset, snapToNearestRow],
569
658
  );
570
659
 
571
660
  // Handle keyboard
@@ -663,42 +752,52 @@ export function Wheel<T = string | number>({
663
752
  const itemColor = (isSelected: boolean) =>
664
753
  disabled ? "$color10" : isSelected ? "$color12" : "$color11";
665
754
 
755
+ const radiusToken = knobProps.borderRadius.borderRadius as string | number;
756
+ const highlightStyle = highlightBandStyle(highlightEdges, radiusToken, Boolean(knobProps.pointy));
757
+ const highlightSmoothClass =
758
+ "className" in knobProps.borderRadius && typeof knobProps.borderRadius.className === "string"
759
+ ? knobProps.borderRadius.className
760
+ : undefined;
761
+
762
+ const renderItemNode = (dataIndex: number, isSelected: boolean) => {
763
+ const item = items[dataIndex];
764
+ const itemValue = getItemValue(item);
765
+ if (renderItem) return renderItem(itemValue, dataIndex, isSelected);
766
+ return (
767
+ <Text
768
+ {...knobProps.body}
769
+ fontSize={size}
770
+ fontWeight={isSelected && !disabled ? "600" : "400"}
771
+ color={itemColor(isSelected)}
772
+ numberOfLines={1}
773
+ ellipsizeMode="tail"
774
+ maxWidth="100%"
775
+ px="$2"
776
+ >
777
+ {getItemLabel(item)}
778
+ </Text>
779
+ );
780
+ };
781
+
666
782
  return (
667
783
  <WheelContainer
668
784
  height={containerHeight}
785
+ width={columnWidth}
786
+ minWidth={columnWidth}
669
787
  {...knobProps.containerRadius}
670
788
  data-testid="wheel"
671
789
  data-disabled={disabled ? true : undefined}
672
790
  aria-disabled={disabled || undefined}
673
791
  opacity={1}
674
792
  >
675
- {/* Selection indicator */}
676
- <SelectionIndicator top={paddingItems * itemHeight} height={itemHeight} />
677
-
678
- {/* Subtle edge cue only — strong fades washed numerals below AA visually */}
679
- <FadeOverlay
680
- edge="top"
681
- height={paddingItems * itemHeight}
682
- {...(isWeb
683
- ? {
684
- style: {
685
- background:
686
- "linear-gradient(to bottom, color-mix(in srgb, var(--background) 18%, transparent) 0%, transparent 100%)",
687
- } as React.CSSProperties,
688
- }
689
- : {})}
690
- />
691
- <FadeOverlay
692
- edge="bottom"
693
- height={paddingItems * itemHeight}
694
- {...(isWeb
695
- ? {
696
- style: {
697
- background:
698
- "linear-gradient(to top, color-mix(in srgb, var(--background) 18%, transparent) 0%, transparent 100%)",
699
- } as React.CSSProperties,
700
- }
701
- : {})}
793
+ {/* iOS 14+ selection fill — LC-71 selected=fill, never hairline borders */}
794
+ <SelectionIndicator
795
+ className={highlightSmoothClass}
796
+ backgroundColor="$color4"
797
+ top={paddingItems * itemHeight}
798
+ height={itemHeight}
799
+ style={highlightStyle}
800
+ data-testid="wheel-selection"
702
801
  />
703
802
 
704
803
  {/* Interactive container */}
@@ -722,12 +821,13 @@ export function Wheel<T = string | number>({
722
821
  width: "100%",
723
822
  height: containerHeight,
724
823
  position: "relative",
725
- perspective: "1000px",
824
+ perspective: `${perspectivePx}px`,
726
825
  perspectiveOrigin: "center center",
727
826
  overflow: "hidden",
728
827
  userSelect: "none",
729
828
  touchAction: "none",
730
829
  cursor: disabled ? "not-allowed" : "grab",
830
+ ...wheelMaskStyle,
731
831
  }}
732
832
  onPointerDown={handlePointerDown as any}
733
833
  onPointerMove={handlePointerMove as any}
@@ -737,9 +837,7 @@ export function Wheel<T = string | number>({
737
837
  data-testid="wheel-wrapper"
738
838
  >
739
839
  {renderRows.map(({ virtualRow, dataIndex }) => {
740
- const item = items[dataIndex];
741
- const isSelected = dataIndex === selectedIndex;
742
- const itemValue = getItemValue(item);
840
+ const isSelected = dataIndex === liveDataIndex;
743
841
  const transform = getItemTransform(
744
842
  virtualRow,
745
843
  scrollOffset,
@@ -749,14 +847,12 @@ export function Wheel<T = string | number>({
749
847
 
750
848
  if (Math.abs(transform.rotateX) > 85) return null;
751
849
 
752
- const rowKey = loopEnabled ? `${dataIndex}-${virtualRow}` : String(itemValue);
753
-
754
850
  return (
755
851
  <div
756
- key={rowKey}
852
+ key={`${dataIndex}-${virtualRow}`}
757
853
  data-testid="wheel-item"
758
854
  data-index={dataIndex}
759
- data-selected={isSelected}
855
+ data-selected={isSelected ? true : undefined}
760
856
  aria-hidden={isSelected ? undefined : true}
761
857
  style={{
762
858
  position: "absolute",
@@ -774,18 +870,7 @@ export function Wheel<T = string | number>({
774
870
  backfaceVisibility: "hidden",
775
871
  }}
776
872
  >
777
- {renderItem ? (
778
- renderItem(itemValue, dataIndex, isSelected)
779
- ) : (
780
- <Text
781
- {...knobProps.body}
782
- fontSize={size}
783
- fontWeight={isSelected && !disabled ? "600" : "400"}
784
- color={itemColor(isSelected)}
785
- >
786
- {getItemLabel(item)}
787
- </Text>
788
- )}
873
+ {renderItemNode(dataIndex, isSelected)}
789
874
  </div>
790
875
  );
791
876
  })}
@@ -805,9 +890,7 @@ export function Wheel<T = string | number>({
805
890
  onPointerCancel={handlePointerUp as any}
806
891
  >
807
892
  {renderRows.map(({ virtualRow, dataIndex }) => {
808
- const item = items[dataIndex];
809
- const isSelected = dataIndex === selectedIndex;
810
- const itemValue = getItemValue(item);
893
+ const isSelected = dataIndex === liveDataIndex;
811
894
  const transform = getItemTransform(
812
895
  virtualRow,
813
896
  scrollOffset,
@@ -817,11 +900,9 @@ export function Wheel<T = string | number>({
817
900
 
818
901
  if (Math.abs(transform.rotateX) > 85) return null;
819
902
 
820
- const rowKey = loopEnabled ? `${dataIndex}-${virtualRow}` : String(itemValue);
821
-
822
903
  return (
823
904
  <View
824
- key={rowKey}
905
+ key={`${dataIndex}-${virtualRow}`}
825
906
  position="absolute"
826
907
  left={0}
827
908
  right={0}
@@ -832,19 +913,9 @@ export function Wheel<T = string | number>({
832
913
  pointerEvents="none"
833
914
  y={transform.translateY}
834
915
  scale={transform.scale}
916
+ rotateX={`${transform.rotateX}deg`}
835
917
  >
836
- {renderItem ? (
837
- renderItem(itemValue, dataIndex, isSelected)
838
- ) : (
839
- <Text
840
- {...knobProps.body}
841
- fontSize={size}
842
- fontWeight={isSelected && !disabled ? "600" : "400"}
843
- color={itemColor(isSelected)}
844
- >
845
- {getItemLabel(item)}
846
- </Text>
847
- )}
918
+ {renderItemNode(dataIndex, isSelected)}
848
919
  </View>
849
920
  );
850
921
  })}
@@ -7,7 +7,7 @@
7
7
 
8
8
  import { Button, formatActionLabel, type ButtonProps } from "@multiplatform.one/forms";
9
9
  import { useCallback, useState, type ReactNode } from "react";
10
- import { useTranslation } from "react-i18next";
10
+ import { useTranslation } from "../shared/i18n";
11
11
  import { Paragraph, YStack } from "tamagui";
12
12
  import { ConfirmDialog } from "../feedback/ConfirmDialog";
13
13
  import { withInterp } from "../shared/t";
@@ -1,4 +1,4 @@
1
- import { useTranslation } from "react-i18next";
1
+ import { useTranslation } from "../shared/i18n";
2
2
  import type { YStackProps } from "tamagui";
3
3
  import { XAxis, YAxis } from "./Axis";
4
4
  import { ChartSurface } from "./ChartSurface";
@@ -42,6 +42,12 @@ export interface BarChartProps
42
42
  title?: string;
43
43
  /** Override the generated accessible summary. */
44
44
  label?: string;
45
+ /**
46
+ * Pin the value axis to this `[min, max]` instead of deriving it from the
47
+ * dataset. Explicit domains are not niced (a 0–255 stat scale stays 0–255,
48
+ * not 0–260) so charts that share a measure stay comparable.
49
+ */
50
+ domain?: [number, number];
45
51
  }
46
52
 
47
53
  /**
@@ -62,6 +68,7 @@ export function BarChart({
62
68
  valueFormatter,
63
69
  title,
64
70
  label,
71
+ domain: domainProp,
65
72
  onDatumPress,
66
73
  onDatumHoverIn,
67
74
  onDatumHoverOut,
@@ -78,10 +85,13 @@ export function BarChart({
78
85
  return (
79
86
  <ChartSurface label={ariaLabel} height={height} width={width} {...stackProps}>
80
87
  {(size) => {
81
- const domain = valueDomain(data.map((datum) => datum.value));
88
+ const domain = domainProp ?? valueDomain(data.map((datum) => datum.value));
89
+ // Explicit domains stay literal (nice: false) so a shared 0–255
90
+ // scale does not drift to 0–260. Auto domains still nice for ticks.
91
+ const nice = domainProp ? false : undefined;
82
92
  // Ticks come from the domain alone, so the margin scale needs no
83
93
  // meaningful range yet — the plot rectangle depends on label widths.
84
- const marginScale = createLinearScale({ domain, range: [0, 1] });
94
+ const marginScale = createLinearScale({ domain, range: [0, 1], nice });
85
95
  const tickValues = getLinearTicks(marginScale, yTicks);
86
96
  const plot = computeCartesianPlot(size, {
87
97
  showXAxis,
@@ -97,6 +107,7 @@ export function BarChart({
97
107
  const yScale = createLinearScale({
98
108
  domain,
99
109
  range: [plot.y + plot.height, plot.y],
110
+ nice,
100
111
  });
101
112
  return (
102
113
  <>
@@ -1,4 +1,4 @@
1
- import { useTranslation } from "react-i18next";
1
+ import { useTranslation } from "../shared/i18n";
2
2
  import type { YStackProps } from "tamagui";
3
3
  import { XAxis, YAxis } from "./Axis";
4
4
  import { ChartSurface } from "./ChartSurface";
@@ -1,5 +1,5 @@
1
1
  import { useResolvedKnobs } from "@multiplatform.one/theme";
2
- import { useTranslation } from "react-i18next";
2
+ import { useTranslation } from "../shared/i18n";
3
3
  import { Text, XStack, YStack, type YStackProps } from "tamagui";
4
4
  import { componentColors } from "../componentColors";
5
5
  import { ChartSurface } from "./ChartSurface";
@@ -1,4 +1,4 @@
1
- import { useTranslation } from "react-i18next";
1
+ import { useTranslation } from "../shared/i18n";
2
2
  import type { YStackProps } from "tamagui";
3
3
  import { ChartSurface } from "./ChartSurface";
4
4
  import { describeChart } from "./accessibility";