@dxos/react-ui 0.8.4-main.c85a9c8dae → 0.8.4-main.d05539e30a

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 (325) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-A5QCIG5R.mjs +24 -0
  4. package/dist/lib/browser/chunk-A5QCIG5R.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-2FKSMWNY.mjs → chunk-LY5XDQR5.mjs} +84 -12
  6. package/dist/lib/browser/chunk-LY5XDQR5.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +1559 -1062
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/testing/index.mjs +44 -20
  11. package/dist/lib/browser/testing/index.mjs.map +4 -4
  12. package/dist/lib/browser/translations.mjs +9 -0
  13. package/dist/lib/browser/translations.mjs.map +7 -0
  14. package/dist/lib/node-esm/{chunk-ZNBLTSHI.mjs → chunk-NGKLIKP3.mjs} +84 -12
  15. package/dist/lib/node-esm/chunk-NGKLIKP3.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-XCFLA74M.mjs +26 -0
  17. package/dist/lib/node-esm/chunk-XCFLA74M.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +1559 -1062
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/testing/index.mjs +44 -20
  22. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  23. package/dist/lib/node-esm/translations.mjs +10 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  30. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/Button/Button.d.ts +2 -2
  32. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  33. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  34. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  35. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  36. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  37. package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
  38. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  40. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  41. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  42. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  43. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  44. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  45. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/Card/Card.d.ts +68 -65
  47. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  48. package/dist/types/src/components/Card/Card.stories.d.ts +2 -2
  49. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  50. package/dist/types/src/components/Carousel/Carousel.d.ts +106 -0
  51. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  52. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  53. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  54. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  55. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  56. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  57. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  58. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  59. package/dist/types/src/components/Dialog/AlertDialog.d.ts +42 -31
  60. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  61. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  62. package/dist/types/src/components/Dialog/Dialog.d.ts +47 -30
  63. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  64. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
  65. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  66. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  67. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  68. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
  70. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  71. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  72. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  73. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  74. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  75. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  76. package/dist/types/src/components/Focus/index.d.ts +2 -0
  77. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  78. package/dist/types/src/components/Icon/Icon.d.ts +4 -0
  79. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  80. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  81. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  82. package/dist/types/src/components/Image/Image.d.ts +2 -1
  83. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  84. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  85. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  86. package/dist/types/src/components/Input/Input.d.ts +14 -17
  87. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  88. package/dist/types/src/components/Input/Input.stories.d.ts +3 -3
  89. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  91. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  92. package/dist/types/src/components/List/List.d.ts +5 -3
  93. package/dist/types/src/components/List/List.d.ts.map +1 -1
  94. package/dist/types/src/components/List/List.stories.d.ts +3 -1
  95. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  97. package/dist/types/src/components/List/Tree.d.ts +2 -2
  98. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  99. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  100. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  101. package/dist/types/src/components/List/Treegrid.d.ts +5 -9
  102. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  103. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  104. package/dist/types/src/components/Main/Main.d.ts +7 -3
  105. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  106. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  108. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +46 -0
  109. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  110. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  111. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  113. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  114. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  115. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
  117. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  118. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  119. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Message/Message.d.ts +1 -1
  121. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  122. package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
  123. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/Popover/Popover.d.ts +38 -22
  125. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  126. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -11
  128. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  129. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +21 -10
  130. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +42 -13
  132. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  133. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
  134. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  136. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  137. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  139. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  140. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  141. package/dist/types/src/components/Splitter/Splitter.d.ts +19 -21
  142. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  143. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/Status/Status.d.ts +3 -4
  145. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  146. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +1 -1
  149. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  150. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
  151. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -1
  152. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +54 -55
  153. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  154. package/dist/types/src/components/ThemeProvider/index.d.ts +1 -1
  155. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  156. package/dist/types/src/components/Toast/Toast.d.ts +16 -16
  157. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  158. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/Toolbar/Toolbar.d.ts +10 -20
  160. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  161. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  162. package/dist/types/src/components/Tooltip/Tooltip.d.ts +16 -16
  163. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  164. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  165. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/index.d.ts +3 -0
  167. package/dist/types/src/components/index.d.ts.map +1 -1
  168. package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
  169. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  170. package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
  171. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  172. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  173. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  174. package/dist/types/src/hooks/index.d.ts +1 -0
  175. package/dist/types/src/hooks/index.d.ts.map +1 -1
  176. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  177. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  178. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  179. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  180. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  181. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  182. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  183. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  184. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  185. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  186. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  187. package/dist/types/src/primitives/Column/Column.d.ts +20 -19
  188. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -1
  189. package/dist/types/src/primitives/Column/Column.stories.d.ts +19 -0
  190. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -1
  191. package/dist/types/src/primitives/Container/Container.d.ts +7 -0
  192. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  193. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  194. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  195. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  196. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  197. package/dist/types/src/primitives/Flex/Flex.d.ts +8 -5
  198. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  199. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  200. package/dist/types/src/primitives/Grid/Grid.d.ts +6 -5
  201. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  202. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  203. package/dist/types/src/primitives/Panel/Panel.d.ts +23 -22
  204. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -1
  205. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -1
  206. package/dist/types/src/primitives/index.d.ts +1 -0
  207. package/dist/types/src/primitives/index.d.ts.map +1 -1
  208. package/dist/types/src/testing/Loading.d.ts +9 -0
  209. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  210. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  211. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  212. package/dist/types/src/testing/decorators/withTheme.d.ts +1 -1
  213. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  214. package/dist/types/src/testing/index.d.ts +1 -0
  215. package/dist/types/src/testing/index.d.ts.map +1 -1
  216. package/dist/types/src/translations.d.ts +8 -3
  217. package/dist/types/src/translations.d.ts.map +1 -1
  218. package/dist/types/src/util/usePx.d.ts.map +1 -1
  219. package/dist/types/tsconfig.tsbuildinfo +1 -1
  220. package/package.json +29 -26
  221. package/src/components/Avatars/Avatar.stories.tsx +2 -3
  222. package/src/components/Avatars/Avatar.tsx +1 -2
  223. package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
  224. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
  225. package/src/components/Button/Button.stories.tsx +0 -1
  226. package/src/components/Button/Button.tsx +5 -13
  227. package/src/components/Button/IconButton.stories.tsx +6 -4
  228. package/src/components/Button/IconButton.tsx +3 -4
  229. package/src/components/Button/Toggle.stories.tsx +0 -1
  230. package/src/components/Button/Toggle.tsx +4 -4
  231. package/src/components/Button/ToggleGroup.stories.tsx +0 -1
  232. package/src/components/Button/ToggleGroup.tsx +12 -16
  233. package/src/components/Card/Card.stories.tsx +15 -15
  234. package/src/components/Card/Card.tsx +294 -132
  235. package/src/components/Carousel/Carousel.tsx +379 -0
  236. package/src/components/Carousel/index.ts +5 -0
  237. package/src/components/Clipboard/CopyButton.tsx +5 -6
  238. package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
  239. package/src/components/Dialog/AlertDialog.tsx +67 -126
  240. package/src/components/Dialog/Dialog.stories.tsx +64 -9
  241. package/src/components/Dialog/Dialog.tsx +84 -88
  242. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
  243. package/src/components/ErrorFallback/ErrorStack.tsx +36 -2
  244. package/src/components/Focus/AUDIT.md +43 -0
  245. package/src/components/Focus/Focus.stories.tsx +230 -0
  246. package/src/components/Focus/Focus.tsx +201 -0
  247. package/src/components/Focus/index.ts +5 -0
  248. package/src/components/Icon/Icon.stories.tsx +43 -13
  249. package/src/components/Icon/Icon.tsx +14 -3
  250. package/src/components/Image/Image.stories.tsx +3 -3
  251. package/src/components/Image/Image.tsx +31 -8
  252. package/src/components/Input/Input.stories.tsx +3 -4
  253. package/src/components/Input/Input.tsx +7 -7
  254. package/src/components/Link/Link.stories.tsx +0 -1
  255. package/src/components/Link/Link.tsx +10 -2
  256. package/src/components/List/List.stories.tsx +3 -4
  257. package/src/components/List/List.tsx +7 -6
  258. package/src/components/List/ListDropIndicator.tsx +0 -1
  259. package/src/components/List/Tree.stories.tsx +2 -3
  260. package/src/components/List/Tree.tsx +0 -1
  261. package/src/components/List/TreeDropIndicator.tsx +1 -1
  262. package/src/components/List/Treegrid.stories.tsx +26 -27
  263. package/src/components/List/Treegrid.tsx +14 -14
  264. package/src/components/Main/Main.stories.tsx +0 -1
  265. package/src/components/Main/Main.tsx +1 -2
  266. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  267. package/src/components/MediaPlayer/MediaPlayer.tsx +153 -0
  268. package/src/components/MediaPlayer/index.ts +5 -0
  269. package/src/components/Menu/ContextMenu.stories.tsx +0 -1
  270. package/src/components/Menu/DropdownMenu.stories.tsx +0 -1
  271. package/src/components/Menu/DropdownMenu.tsx +48 -42
  272. package/src/components/Message/Message.stories.tsx +7 -8
  273. package/src/components/Message/Message.tsx +23 -10
  274. package/src/components/Popover/Popover.stories.tsx +4 -5
  275. package/src/components/Popover/Popover.tsx +42 -42
  276. package/src/components/ScrollArea/ScrollArea.stories.tsx +89 -30
  277. package/src/components/ScrollArea/ScrollArea.tsx +41 -25
  278. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +20 -18
  279. package/src/components/ScrollContainer/ScrollContainer.tsx +199 -92
  280. package/src/components/Select/Select.stories.tsx +5 -6
  281. package/src/components/Separator/Separator.tsx +4 -7
  282. package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
  283. package/src/components/Splitter/Splitter.stories.tsx +29 -29
  284. package/src/components/Splitter/Splitter.tsx +35 -46
  285. package/src/components/Status/Status.stories.tsx +0 -1
  286. package/src/components/Status/Status.tsx +8 -5
  287. package/src/components/Tag/Tag.stories.tsx +0 -1
  288. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +0 -1
  289. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -4
  290. package/src/components/ThemeProvider/index.ts +1 -1
  291. package/src/components/Toast/Toast.stories.tsx +0 -1
  292. package/src/components/Toast/Toast.tsx +16 -31
  293. package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
  294. package/src/components/Toolbar/Toolbar.tsx +36 -48
  295. package/src/components/Tooltip/Tooltip.stories.tsx +7 -8
  296. package/src/components/Tooltip/Tooltip.tsx +29 -29
  297. package/src/components/index.ts +3 -0
  298. package/src/exemplars/generics.stories.tsx +7 -15
  299. package/src/exemplars/slot.stories.tsx +64 -68
  300. package/src/exemplars/tabster.stories.tsx +1 -1
  301. package/src/exemplars/virtualizer.stories.tsx +4 -5
  302. package/src/hooks/index.ts +1 -0
  303. package/src/hooks/useDensityContext.ts +2 -2
  304. package/src/playground/Custom.stories.tsx +6 -9
  305. package/src/primitives/Column/AUDIT.md +148 -0
  306. package/src/primitives/Column/Column.stories.tsx +128 -19
  307. package/src/primitives/Column/Column.tsx +89 -80
  308. package/src/primitives/Container/Container.stories.tsx +29 -0
  309. package/src/primitives/Container/Container.tsx +19 -0
  310. package/src/primitives/Container/index.ts +5 -0
  311. package/src/primitives/Flex/Flex.stories.tsx +0 -1
  312. package/src/primitives/Flex/Flex.tsx +20 -20
  313. package/src/primitives/Grid/Grid.stories.tsx +0 -1
  314. package/src/primitives/Grid/Grid.tsx +23 -36
  315. package/src/primitives/Panel/Panel.stories.tsx +9 -8
  316. package/src/primitives/Panel/Panel.tsx +43 -60
  317. package/src/primitives/index.ts +1 -0
  318. package/src/testing/Loading.tsx +47 -0
  319. package/src/testing/decorators/withLayout.tsx +7 -17
  320. package/src/testing/decorators/withTheme.tsx +10 -7
  321. package/src/testing/index.ts +2 -0
  322. package/src/translations.ts +8 -3
  323. package/src/util/usePx.ts +1 -0
  324. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
package/LICENSE CHANGED
@@ -1,8 +1,105 @@
1
- MIT License
2
- Copyright (c) 2022 DXOS
1
+ # Functional Source License, Version 1.1, ALv2 Future License
3
2
 
4
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
3
+ ## Abbreviation
5
4
 
6
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
5
+ FSL-1.1-Apache-2.0
7
6
 
8
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
7
+ ## Notice
8
+
9
+ Copyright 2026 DXOS
10
+
11
+ ## Terms and Conditions
12
+
13
+ ### Licensor ("We")
14
+
15
+ The party offering the Software under these Terms and Conditions.
16
+
17
+ ### The Software
18
+
19
+ The "Software" is each version of the software that we make available under
20
+ these Terms and Conditions, as indicated by our inclusion of these Terms and
21
+ Conditions with the Software.
22
+
23
+ ### License Grant
24
+
25
+ Subject to your compliance with this License Grant and the Patents,
26
+ Redistribution and Trademark clauses below, we hereby grant you the right to
27
+ use, copy, modify, create derivative works, publicly perform, publicly display
28
+ and redistribute the Software for any Permitted Purpose identified below.
29
+
30
+ ### Permitted Purpose
31
+
32
+ A Permitted Purpose is any purpose other than a Competing Use. A Competing Use
33
+ means making the Software available to others in a commercial product or
34
+ service that:
35
+
36
+ 1. substitutes for the Software;
37
+
38
+ 2. substitutes for any other product or service we offer using the Software
39
+ that exists as of the date we make the Software available; or
40
+
41
+ 3. offers the same or substantially similar functionality as the Software.
42
+
43
+ Permitted Purposes specifically include using the Software:
44
+
45
+ 1. for your internal use and access;
46
+
47
+ 2. for non-commercial education;
48
+
49
+ 3. for non-commercial research; and
50
+
51
+ 4. in connection with professional services that you provide to a licensee
52
+ using the Software in accordance with these Terms and Conditions.
53
+
54
+ ### Patents
55
+
56
+ To the extent your use for a Permitted Purpose would necessarily infringe our
57
+ patents, the license grant above includes a license under our patents. If you
58
+ make a claim against any party that the Software infringes or contributes to
59
+ the infringement of any patent, then your patent license to the Software ends
60
+ immediately.
61
+
62
+ ### Redistribution
63
+
64
+ The Terms and Conditions apply to all copies, modifications and derivatives of
65
+ the Software.
66
+
67
+ If you redistribute any copies, modifications or derivatives of the Software,
68
+ you must include a copy of or a link to these Terms and Conditions and not
69
+ remove any copyright notices provided in or with the Software.
70
+
71
+ ### Disclaimer
72
+
73
+ THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR
74
+ IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR
75
+ PURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT.
76
+
77
+ IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE
78
+ SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
79
+ EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.
80
+
81
+ ### Trademarks
82
+
83
+ Except for displaying the License Details and identifying us as the origin of
84
+ the Software, you have no right under these Terms and Conditions to use our
85
+ trademarks, trade names, service marks or product names.
86
+
87
+ ## Grant of Future License
88
+
89
+ We hereby irrevocably grant you an additional license to use the Software under
90
+ the Apache License, Version 2.0 that is effective on the second anniversary of
91
+ the date we make the Software available. On or after that date, you may use the
92
+ Software under the Apache License, Version 2.0, in which case the following
93
+ will apply:
94
+
95
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
96
+ this file except in compliance with the License.
97
+
98
+ You may obtain a copy of the License at
99
+
100
+ http://www.apache.org/licenses/LICENSE-2.0
101
+
102
+ Unless required by applicable law or agreed to in writing, software distributed
103
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
104
+ CONDITIONS OF ANY KIND, either express or implied. See the License for the
105
+ specific language governing permissions and limitations under the License.
package/README.md CHANGED
@@ -22,4 +22,4 @@ pnpm i @dxos/react-ui
22
22
 
23
23
  Your ideas, issues, and code are most welcome. Please take a look at our [community code of conduct](https://github.com/dxos/dxos/blob/main/CODE_OF_CONDUCT.md), the [issue guide](https://github.com/dxos/dxos/blob/main/CONTRIBUTING.md#submitting-issues), and the [PR contribution guide](https://github.com/dxos/dxos/blob/main/CONTRIBUTING.md#submitting-prs).
24
24
 
25
- License: [MIT](./LICENSE) Copyright 2022 © DXOS
25
+ License: [FSL-1.1-Apache-2.0](./LICENSE) Copyright 2022 © DXOS
@@ -0,0 +1,24 @@
1
+ // src/translations.ts
2
+ var translationKey = "@dxos/react-ui";
3
+ var translations = [
4
+ {
5
+ "en-US": {
6
+ [translationKey]: {
7
+ "toolbar-menu.label": "Action menu",
8
+ "toolbar-drag-handle.label": "Drag to rearrange",
9
+ "toolbar-close.label": "Close",
10
+ "carousel-viewport.label": "Carousel",
11
+ "carousel-prev.label": "Previous slide",
12
+ "carousel-next.label": "Next slide",
13
+ "carousel-indicators.label": "Carousel slides",
14
+ "carousel-go-to.label": "Go to slide {{index}}"
15
+ }
16
+ }
17
+ }
18
+ ];
19
+
20
+ export {
21
+ translationKey,
22
+ translations
23
+ };
24
+ //# sourceMappingURL=chunk-A5QCIG5R.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = '@dxos/react-ui';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {\n 'toolbar-menu.label': 'Action menu',\n 'toolbar-drag-handle.label': 'Drag to rearrange',\n 'toolbar-close.label': 'Close',\n 'carousel-viewport.label': 'Carousel',\n 'carousel-prev.label': 'Previous slide',\n 'carousel-next.label': 'Next slide',\n 'carousel-indicators.label': 'Carousel slides',\n 'carousel-go-to.label': 'Go to slide {{index}}',\n },\n },\n },\n] as const satisfies Resource[];\n"],
5
+ "mappings": ";AAMO,IAAMA,iBAAiB;AAEvB,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACD,cAAAA,GAAiB;QAChB,sBAAsB;QACtB,6BAA6B;QAC7B,uBAAuB;QACvB,2BAA2B;QAC3B,uBAAuB;QACvB,uBAAuB;QACvB,6BAA6B;QAC7B,wBAAwB;MAC1B;IACF;EACF;;",
6
+ "names": ["translationKey", "translations"]
7
+ }
@@ -124,7 +124,7 @@ var hasIosKeyboard = () => {
124
124
 
125
125
  // src/components/ThemeProvider/ThemeProvider.tsx
126
126
  var ThemeContext = /* @__PURE__ */ createContext4(void 0);
127
- var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx = (_path, _styleProps, ..._options) => void 0, themeMode = "dark", rootDensity = "fine", ...rest }) => {
127
+ var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx = (_path, _styleProps, ..._options) => void 0, themeMode = "dark", rootDensity = "fine", noCache, platform }) => {
128
128
  useEffect2(() => {
129
129
  if (document.defaultView) {
130
130
  const kb = createKeyborg(document.defaultView);
@@ -138,12 +138,14 @@ var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx
138
138
  themeMode,
139
139
  hasIosKeyboard: hasIosKeyboard(),
140
140
  safeAreaPadding,
141
- ...rest
141
+ noCache,
142
+ platform
142
143
  }), [
143
144
  tx,
144
145
  themeMode,
145
146
  safeAreaPadding,
146
- rest
147
+ noCache,
148
+ platform
147
149
  ]);
148
150
  return /* @__PURE__ */ React4.createElement(ThemeContext.Provider, {
149
151
  value: contextValue
@@ -199,14 +201,14 @@ var TooltipProvider = (props) => {
199
201
  }, []);
200
202
  const popperScope = usePopperScope(__scopeTooltip);
201
203
  const [trigger, setTrigger] = useState3(null);
202
- const [content, setContent] = useState3("");
204
+ const [content, setContent] = useState3(null);
203
205
  const [side, setSide] = useState3(void 0);
204
206
  const triggerRef = useRef(trigger);
205
- const handleTriggerChange = useCallback2((nextTrigger) => {
207
+ const handleTriggerChange = useCallback2((nextTrigger, nextContent, nextSide) => {
206
208
  setTrigger(nextTrigger);
207
209
  triggerRef.current = nextTrigger;
208
- setContent(nextTrigger?.getAttribute("data-tooltip-content") ?? "");
209
- setSide(nextTrigger?.getAttribute("data-tooltip-side") ?? void 0);
210
+ setContent(nextContent ?? null);
211
+ setSide(nextSide);
210
212
  }, []);
211
213
  const contentId = useId();
212
214
  const openTimerRef = useRef(0);
@@ -354,8 +356,6 @@ var TooltipTrigger = /* @__PURE__ */ forwardRef((props, forwardedRef) => {
354
356
  // commonly anchors and the anchor `type` attribute signifies MIME type.
355
357
  "aria-describedby": context.open ? context.contentId : void 0,
356
358
  "data-state": context.stateAttribute,
357
- "data-tooltip-content": content,
358
- "data-tooltip-side": side,
359
359
  ...triggerProps,
360
360
  ref: composedRefs,
361
361
  onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {
@@ -367,7 +367,7 @@ var TooltipTrigger = /* @__PURE__ */ forwardRef((props, forwardedRef) => {
367
367
  if (event.defaultPrevented) {
368
368
  return;
369
369
  }
370
- context.onTriggerChange(ref.current);
370
+ context.onTriggerChange(ref.current, content, side);
371
371
  context.onTriggerEnter();
372
372
  hasPointerMoveOpenedRef.current = true;
373
373
  }
@@ -747,6 +747,76 @@ var Tooltip = {
747
747
  Trigger: TooltipTrigger
748
748
  };
749
749
 
750
+ // src/components/ErrorFallback/ErrorStack.tsx
751
+ import ErrorStackParser from "error-stack-parser";
752
+ import React6 from "react";
753
+ import { mx } from "@dxos/ui-theme";
754
+ var parseCaptureOwnerStack = (stack) => {
755
+ if (stack == null || stack.length === 0) {
756
+ return null;
757
+ }
758
+ const err = new Error();
759
+ err.stack = stack;
760
+ try {
761
+ return ErrorStackParser.parse(err);
762
+ } catch {
763
+ err.stack = `Error
764
+ ${stack}`;
765
+ try {
766
+ return ErrorStackParser.parse(err);
767
+ } catch {
768
+ return null;
769
+ }
770
+ }
771
+ };
772
+ var ErrorStack = ({ error, frames: framesProp }) => {
773
+ const frames = framesProp ?? (error ? ErrorStackParser.parse(error) : []);
774
+ if (frames.length === 0) {
775
+ return null;
776
+ }
777
+ return /* @__PURE__ */ React6.createElement("div", {
778
+ className: "font-mono text-sm"
779
+ }, frames.map((frame, i) => {
780
+ const isLast = i === frames.length - 1;
781
+ const local = frame.fileName ? parseLocalFrame(frame.fileName, frame.lineNumber, frame.columnNumber) : void 0;
782
+ const name = frame.functionName ?? "<anonymous>";
783
+ return /* @__PURE__ */ React6.createElement("div", {
784
+ key: i,
785
+ className: mx("grid grid-cols-[16px_1fr_auto_auto] items-stretch gap-x-2", local && "cursor-pointer hover:bg-hover-surface")
786
+ }, /* @__PURE__ */ React6.createElement("div", {
787
+ className: "relative"
788
+ }, /* @__PURE__ */ React6.createElement("div", {
789
+ className: mx("absolute left-1/2 -translate-x-1/2 w-px bg-neutral-500", isLast ? "top-0 h-1/2" : "inset-y-0")
790
+ }), /* @__PURE__ */ React6.createElement("div", {
791
+ className: "absolute top-1/2 -translate-y-1/2 left-1/2 right-0 h-px bg-neutral-500"
792
+ })), local ? /* @__PURE__ */ React6.createElement("a", {
793
+ href: local.href,
794
+ className: "truncate self-center"
795
+ }, name) : /* @__PURE__ */ React6.createElement("span", {
796
+ className: "text-subdued truncate self-center"
797
+ }, name), /* @__PURE__ */ React6.createElement("span", {
798
+ className: "text-xs text-subdued truncate self-center"
799
+ }, local?.fileName ?? ""), /* @__PURE__ */ React6.createElement("span", {
800
+ className: "text-xs text-subdued text-right self-center"
801
+ }, local ? `${frame.lineNumber}:${frame.columnNumber}` : ""));
802
+ }));
803
+ };
804
+ var parseLocalFrame = (fileUrl, line, col) => {
805
+ try {
806
+ const { pathname } = new URL(fileUrl);
807
+ if (!pathname.startsWith("/@fs/")) {
808
+ return void 0;
809
+ }
810
+ const localPath = pathname.slice(4);
811
+ return {
812
+ href: `vscode://file/${localPath}:${line ?? 1}:${col ?? 1}`,
813
+ fileName: pathname.split("/").pop() ?? localPath
814
+ };
815
+ } catch {
816
+ return void 0;
817
+ }
818
+ };
819
+
750
820
  // src/hooks/useElevationContext.ts
751
821
  var useElevationContext = (propsElevation) => {
752
822
  const { elevation } = useContext3(ElevationContext);
@@ -769,6 +839,8 @@ export {
769
839
  ThemeProvider,
770
840
  createTooltipScope,
771
841
  useTooltipContext,
772
- Tooltip
842
+ Tooltip,
843
+ parseCaptureOwnerStack,
844
+ ErrorStack
773
845
  };
774
- //# sourceMappingURL=chunk-2FKSMWNY.mjs.map
846
+ //# sourceMappingURL=chunk-LY5XDQR5.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DensityProvider/DensityProvider.tsx", "../../../src/components/ElevationProvider/ElevationProvider.tsx", "../../../src/hooks/useElevationContext.ts", "../../../src/components/ThemeProvider/ThemeProvider.tsx", "../../../src/hooks/useThemeContext.ts", "../../../src/hooks/useSafeArea.ts", "../../../src/components/ThemeProvider/TranslationsProvider.tsx", "../../../src/util/hasIosKeyboard.ts", "../../../src/components/Tooltip/Tooltip.tsx", "../../../src/components/ErrorFallback/ErrorStack.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext } from 'react';\n\nimport { type Density } from '@dxos/ui-types';\n\nexport interface DensityContextValue {\n density?: Density;\n}\n\nexport type DensityProviderProps = PropsWithChildren<{\n density?: Density;\n}>;\n\nexport const DensityContext = createContext<DensityContextValue>({ density: 'fine' });\n\nexport const DensityProvider = ({ density, children }: DensityProviderProps) => (\n <DensityContext.Provider value={{ density }}>{children}</DensityContext.Provider>\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext } from 'react';\n\nimport { type Elevation } from '@dxos/ui-types';\n\nexport interface ElevationContextValue {\n elevation?: Elevation;\n}\n\nexport type ElevationProviderProps = PropsWithChildren<{\n elevation?: Elevation;\n}>;\n\nexport const ElevationContext = createContext<ElevationContextValue>({ elevation: 'base' });\n\nexport const ElevationProvider = ({ elevation, children }: ElevationProviderProps) => (\n <ElevationContext.Provider value={{ elevation }}>{children}</ElevationContext.Provider>\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { type Elevation } from '@dxos/ui-types';\n\nimport { ElevationContext } from '../components';\n\nexport const useElevationContext = (propsElevation?: Elevation) => {\n const { elevation } = useContext(ElevationContext);\n return propsElevation ?? elevation;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { createKeyborg } from 'keyborg';\nimport React, { type PropsWithChildren, createContext, useEffect, useMemo } from 'react';\n\nimport { type Density, type Elevation, type ThemeFunction, type ThemeMode } from '@dxos/ui-types';\n\nimport { type SafeAreaPadding, useSafeArea } from '../../hooks';\nimport { hasIosKeyboard } from '../../util';\nimport { DensityProvider } from '../DensityProvider';\nimport { ElevationProvider } from '../ElevationProvider';\nimport { TranslationsProvider, type TranslationsProviderProps } from './TranslationsProvider';\n\nexport type ThemeContextValue = {\n tx: ThemeFunction<any>;\n themeMode: ThemeMode;\n hasIosKeyboard: boolean;\n safeAreaPadding?: SafeAreaPadding;\n noCache?: boolean;\n platform?: 'mobile' | 'desktop';\n};\n\n/**\n * @internal\n */\nexport const ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nexport type ThemeProviderProps = Omit<TranslationsProviderProps, 'children'> &\n Partial<Omit<ThemeContextValue, 'safeAreaPadding'>> &\n PropsWithChildren<{\n rootDensity?: Density;\n rootElevation?: Elevation;\n }>;\n\nexport const ThemeProvider = ({\n children,\n fallback = null,\n resourceExtensions,\n appNs,\n tx = (_path, _styleProps, ..._options) => undefined,\n themeMode = 'dark',\n rootDensity = 'fine',\n noCache,\n platform,\n}: ThemeProviderProps) => {\n useEffect(() => {\n if (document.defaultView) {\n const kb = createKeyborg(document.defaultView);\n kb.subscribe(handleInputModalityChange);\n return () => kb.unsubscribe(handleInputModalityChange);\n }\n }, []);\n\n const safeAreaPadding = useSafeArea();\n // Destructure all props explicitly so useMemo deps are stable primitives, not a new `rest` object every render.\n const contextValue = useMemo(\n () => ({ tx, themeMode, hasIosKeyboard: hasIosKeyboard(), safeAreaPadding, noCache, platform }),\n [tx, themeMode, safeAreaPadding, noCache, platform],\n );\n\n return (\n <ThemeContext.Provider value={contextValue}>\n <TranslationsProvider\n {...{\n fallback,\n resourceExtensions,\n appNs,\n }}\n >\n <ElevationProvider elevation='base'>\n <DensityProvider density={rootDensity}>{children}</DensityProvider>\n </ElevationProvider>\n </TranslationsProvider>\n </ThemeContext.Provider>\n );\n};\n\nconst handleInputModalityChange = (isUsingKeyboard: boolean) => {\n if (isUsingKeyboard) {\n document.body.setAttribute('data-w-keyboard', 'true');\n } else {\n document.body.removeAttribute('data-w-keyboard');\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { ThemeContext } from '../components';\n\nexport const useThemeContext = () => useContext(ThemeContext) ?? raise(new Error('Missing ThemeContext'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useState } from 'react';\n\nimport { useViewportResize } from '@dxos/react-hooks';\n\nexport type SafeAreaPadding = Record<'top' | 'right' | 'bottom' | 'left', number>;\n\nexport const initialSafeArea = { top: NaN, right: NaN, bottom: NaN, left: NaN };\n\nexport const useSafeArea = (): SafeAreaPadding => {\n const [padding, setPadding] = useState<SafeAreaPadding>(initialSafeArea);\n const handleResize = useCallback(() => {\n setPadding({\n top: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-top')),\n right: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-right')),\n bottom: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-bottom')),\n left: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-left')),\n });\n }, []);\n\n useViewportResize(handleResize);\n return padding;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type Locale, enUS as dtLocaleEnUs } from 'date-fns/locale';\nimport i18Next, { type Resource } from 'i18next';\nimport React, { type ReactNode, Suspense, createContext, useContext, useEffect, useState } from 'react';\nimport { initReactI18next, useTranslation as useI18NextTranslation } from 'react-i18next';\n\nconst initialLng = 'en-US';\nconst initialNs = 'dxos-common';\nconst initialDtLocale = dtLocaleEnUs;\n\nexport const resources = {\n [initialLng]: {\n [initialNs]: {\n 'loading translations': 'Loading translations…',\n },\n },\n} as const satisfies Resource;\n\nvoid i18Next.use(initReactI18next).init({\n resources,\n lng: initialLng,\n defaultNS: initialNs,\n interpolation: {\n escapeValue: false,\n },\n});\n\nexport interface TranslationsProviderProps {\n children?: ReactNode;\n // TODO(wittjosiah): Rename to `placeholder` to match ClientProvider?\n // Placeholder => loading, fallback => error.\n fallback?: ReactNode;\n resourceExtensions?: Resource[];\n appNs?: string;\n dtLocale?: Locale;\n}\n\nexport const TranslationsContext = createContext({\n appNs: initialNs,\n dtLocale: initialDtLocale,\n});\n\nexport const useTranslation = (...args: Parameters<typeof useI18NextTranslation>) => {\n const result = useI18NextTranslation(...args);\n const { dtLocale } = useContext(TranslationsContext);\n return { ...result, dtLocale };\n};\n\nexport const TranslationsProvider = ({\n fallback,\n resourceExtensions,\n children,\n appNs,\n dtLocale,\n}: TranslationsProviderProps) => {\n const [loaded, setLoaded] = useState(false);\n useEffect(() => {\n setLoaded(false);\n if (resourceExtensions && resourceExtensions.length) {\n resourceExtensions.forEach((resource) => {\n Object.keys(resource).forEach((language) => {\n Object.keys(resource[language]).forEach((ns) => {\n i18Next.addResourceBundle(language, ns, resource[language][ns]);\n });\n });\n });\n }\n\n setLoaded(true);\n }, [resourceExtensions]);\n\n // TODO(thure): This is not ideal, but i18next was causing `Suspense` to not render the fallback even when the child was asking for namespaces yet to be added.\n // TODO(burdon): Fallbacks should only appear after a short delay, and if the displayed then be visible for 500mx to avoid startup flickering.\n return (\n <TranslationsContext.Provider value={{ appNs: appNs ?? initialNs, dtLocale: dtLocale ?? initialDtLocale }}>\n <Suspense fallback={fallback}>{loaded ? children : fallback}</Suspense>\n </TranslationsContext.Provider>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const hasIosKeyboard = () => {\n // TODO(thure): UA sniffing is never good, however I haven’t found a better way to query for whether the on-screen keyboard will appear on `focus` outside of a click handler.\n return !!navigator.userAgent.match(/iP(ad|od|hone).+Safari/);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// This is based upon `@radix-ui/react-tooltip` fetched 17 March 2025 at https://github.com/radix-ui/primitives at commit 6e75e11.\n// TODO(burdon): Replace with https://ui.shadcn.com/docs/components/radix/tooltip\n\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport type { Scope } from '@radix-ui/react-context';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { type PopperAnchorProps, createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slottable } from '@radix-ui/react-slot';\nimport { type TooltipProps } from '@radix-ui/react-tooltip';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';\nimport React, {\n type ComponentPropsWithoutRef,\n type ComponentRef,\n type FC,\n type ReactNode,\n type RefObject,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useElevationContext, useThemeContext } from '../../hooks';\n\ntype TooltipScopedProps<P = {}> = P & { __scopeTooltip?: Scope };\nconst [createTooltipContext, createTooltipScope] = createContextScope('Tooltip', [createPopperScope]);\nconst usePopperScope = createPopperScope();\n\n//\n// Tooltip\n//\n\nconst DEFAULT_DELAY_DURATION = 700;\nconst TOOLTIP_OPEN = 'tooltip.open';\nconst TOOLTIP_NAME = 'Tooltip';\n\ntype TooltipContextValue = {\n contentId: string;\n open: boolean;\n stateAttribute: 'closed' | 'delayed-open' | 'instant-open';\n trigger: TooltipTriggerElement | null;\n onTriggerChange(trigger: TooltipTriggerElement | null, content?: ReactNode, side?: TooltipSide): void;\n onTriggerEnter(): void;\n onTriggerLeave(): void;\n onOpen(): void;\n onClose(): void;\n onPointerInTransitChange(inTransit: boolean): void;\n isPointerInTransitRef: RefObject<boolean>;\n disableHoverableContent: boolean;\n};\n\nconst [TooltipContextProvider, useTooltipContext] = createTooltipContext<TooltipContextValue>(TOOLTIP_NAME);\n\ntype TooltipProviderProps = {\n children?: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * The duration from when the pointer enters the trigger until the tooltip gets opened. This will\n * override the prop with the same name passed to Provider.\n * @defaultValue 700\n */\n delayDuration?: number;\n /**\n * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n * @defaultValue false\n */\n disableHoverableContent?: boolean;\n /**\n * How much time a user has to enter another trigger without incurring a delay again.\n * @defaultValue 300\n */\n skipDelayDuration?: number;\n};\n\nconst TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<TooltipProviderProps>) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disableHoverableContent = false,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n } = props;\n const isOpenDelayedRef = useRef(true);\n const isPointerInTransitRef = useRef(false);\n const skipDelayTimerRef = useRef(0);\n\n useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = useState<HTMLButtonElement | null>(null);\n const [content, setContent] = useState<ReactNode>(null);\n const [side, setSide] = useState<TooltipSide | undefined>(undefined);\n const triggerRef = useRef<HTMLButtonElement | null>(trigger);\n const handleTriggerChange = useCallback(\n (nextTrigger: HTMLButtonElement | null, nextContent?: ReactNode, nextSide?: TooltipSide) => {\n setTrigger(nextTrigger);\n triggerRef.current = nextTrigger;\n setContent(nextContent ?? null);\n setSide(nextSide);\n },\n [],\n );\n const contentId = useId();\n const openTimerRef = useRef(0);\n const wasOpenDelayedRef = useRef(false);\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n window.clearTimeout(skipDelayTimerRef.current);\n isOpenDelayedRef.current = false;\n // as `onChange` is called within a lifecycle method we\n // avoid dispatching via `dispatchDiscreteCustomEvent`.\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(() => (isOpenDelayedRef.current = true), skipDelayDuration);\n }\n onOpenChange?.(open);\n },\n [skipDelayDuration, onOpenChange],\n );\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: handleOpenChange,\n });\n const stateAttribute = useMemo(() => {\n return open ? (wasOpenDelayedRef.current ? 'delayed-open' : 'instant-open') : 'closed';\n }, [open]);\n\n const handleOpen = useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n\n const handleClose = useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n\n const handleDelayedOpen = useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n\n useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n\n const { tx } = useThemeContext();\n const elevation = useElevationContext();\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <TooltipContextProvider\n scope={__scopeTooltip}\n contentId={contentId}\n open={open}\n stateAttribute={stateAttribute}\n trigger={trigger}\n onTriggerChange={handleTriggerChange}\n onTriggerEnter={useCallback(() => {\n if (isOpenDelayedRef.current) {\n handleDelayedOpen();\n } else {\n handleOpen();\n }\n }, [isOpenDelayedRef, handleDelayedOpen, handleOpen])}\n onTriggerLeave={useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent])}\n onOpen={handleOpen}\n onClose={handleClose}\n disableHoverableContent={disableHoverableContent}\n isPointerInTransitRef={isPointerInTransitRef}\n onPointerInTransitChange={useCallback((inTransit: boolean) => {\n isPointerInTransitRef.current = inTransit;\n }, [])}\n >\n <TooltipContent side={side} className={tx('tooltip.content', { elevation })}>\n {content}\n <TooltipArrow className={tx('tooltip.arrow')} />\n </TooltipContent>\n <TooltipVirtualTrigger virtualRef={triggerRef as RefObject<HTMLButtonElement>} />\n {children}\n </TooltipContextProvider>\n </PopperPrimitive.Root>\n );\n};\n\nTooltipProvider.displayName = TOOLTIP_NAME;\n\n//\n// TooltipVirtualTrigger\n//\n\nconst TooltipVirtualTrigger = ({\n virtualRef,\n __scopeTooltip,\n}: TooltipScopedProps<Pick<PopperAnchorProps, 'virtualRef'>>) => {\n const popperScope = usePopperScope(__scopeTooltip);\n return <PopperPrimitive.Anchor asChild {...popperScope} virtualRef={virtualRef} />;\n};\n\n//\n// TooltipTrigger\n//\n\nconst TRIGGER_NAME = 'TooltipTrigger';\n\ntype TooltipTriggerElement = ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\ntype TooltipTriggerProps = Omit<PrimitiveButtonProps, 'content'> &\n Pick<TooltipProps, 'delayDuration'> & {\n content?: ReactNode;\n side?: TooltipSide;\n onInteract?: (event: SyntheticEvent) => void;\n };\n\nconst TooltipTrigger = forwardRef<TooltipTriggerElement, TooltipTriggerProps>(\n (props: TooltipScopedProps<TooltipTriggerProps>, forwardedRef) => {\n const {\n __scopeTooltip,\n onInteract,\n // TODO(thure): Pass `delayDuration` into the context.\n delayDuration: _delayDuration,\n side,\n content,\n ...triggerProps\n } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const ref = useRef<TooltipTriggerElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = useRef(false);\n const hasPointerMoveOpenedRef = useRef(false);\n const handlePointerUp = useCallback(() => (isPointerDownRef.current = false), []);\n\n useEffect(() => {\n return () => document.removeEventListener('pointerup', handlePointerUp);\n }, [handlePointerUp]);\n\n return (\n <Primitive.button\n // We purposefully avoid adding `type=button` here because tooltip triggers are also\n // commonly anchors and the anchor `type` attribute signifies MIME type.\n aria-describedby={context.open ? context.contentId : undefined}\n data-state={context.stateAttribute}\n {...triggerProps}\n ref={composedRefs}\n onPointerMove={composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === 'touch') {\n return;\n }\n if (!hasPointerMoveOpenedRef.current && !context.isPointerInTransitRef.current) {\n onInteract?.(event);\n if (event.defaultPrevented) {\n return;\n }\n context.onTriggerChange(ref.current, content, side);\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n })}\n onPointerLeave={composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n })}\n onPointerDown={composeEventHandlers(props.onPointerDown, () => {\n if (context.open) {\n context.onClose();\n }\n isPointerDownRef.current = true;\n document.addEventListener('pointerup', handlePointerUp, { once: true });\n })}\n onFocus={props.onFocus}\n onBlur={composeEventHandlers(props.onBlur, context.onClose)}\n onClick={composeEventHandlers(props.onClick, context.onClose)}\n />\n );\n },\n);\n\nTooltipTrigger.displayName = TRIGGER_NAME;\n\n//\n// TooltipPortal\n//\n\nconst PORTAL_NAME = 'TooltipPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createTooltipContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = ComponentPropsWithoutRef<typeof PortalPrimitive>;\ntype TooltipPortalProps = {\n children?: ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n};\n\nconst TooltipPortal: FC<TooltipPortalProps> = (props: TooltipScopedProps<TooltipPortalProps>) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return (\n <PortalProvider scope={__scopeTooltip} forceMount={forceMount}>\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {children}\n </PortalPrimitive>\n </Presence>\n </PortalProvider>\n );\n};\n\nTooltipPortal.displayName = PORTAL_NAME;\n\n//\n// TooltipContent\n//\n\nconst CONTENT_NAME = 'TooltipContent';\n\ntype TooltipContentElement = TooltipContentImplElement;\ntype TooltipContentProps = TooltipContentImplProps & {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n};\n\nconst TooltipContent = forwardRef<TooltipContentElement, TooltipContentProps>(\n (props: TooltipScopedProps<TooltipContentProps>, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = 'top', ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n\n return (\n <Presence present={forceMount || context.open}>\n {context.disableHoverableContent ? (\n <TooltipContentImpl side={side} {...contentProps} ref={forwardedRef} />\n ) : (\n <TooltipContentHoverable side={side} {...contentProps} ref={forwardedRef} />\n )}\n </Presence>\n );\n },\n);\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\n\ntype TooltipContentHoverableElement = TooltipContentImplElement;\ntype TooltipContentHoverableProps = TooltipContentImplProps;\n\nconst TooltipContentHoverable = forwardRef<TooltipContentHoverableElement, TooltipContentHoverableProps>(\n (props: TooltipScopedProps<TooltipContentHoverableProps>, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = useRef<TooltipContentHoverableElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = useState<Polygon | null>(null);\n\n const { trigger, onClose } = context;\n const content = ref.current;\n\n const { onPointerInTransitChange } = context;\n\n const handleRemoveGraceArea = useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n\n const handleCreateGraceArea = useCallback(\n (event: PointerEvent, hoverTarget: HTMLElement) => {\n const currentTarget = event.currentTarget as HTMLElement;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange],\n );\n\n useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n\n useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event: PointerEvent) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event: PointerEvent) => handleCreateGraceArea(event, trigger);\n\n trigger.addEventListener('pointerleave', handleTriggerLeave);\n content.addEventListener('pointerleave', handleContentLeave);\n return () => {\n trigger.removeEventListener('pointerleave', handleTriggerLeave);\n content.removeEventListener('pointerleave', handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n\n useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event: PointerEvent) => {\n const target = event.target as HTMLElement;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener('pointermove', handleTrackPointerGrace);\n return () => document.removeEventListener('pointermove', handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n\n return <TooltipContentImpl {...props} ref={composedRefs} />;\n },\n);\n\nconst [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, {\n isInside: false,\n});\n\ntype TooltipContentImplElement = ComponentRef<typeof PopperPrimitive.Content>;\ntype DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype PopperContentProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ntype TooltipContentImplProps = Omit<PopperContentProps, 'onPlaced'> & {\n /**\n * A more descriptive label for accessibility purpose\n */\n 'aria-label'?: string;\n\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `Tooltip`.\n * Can be prevented.\n */\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n};\n\nconst TooltipContentImpl = forwardRef<TooltipContentImplElement, TooltipContentImplProps>(\n (props: TooltipScopedProps<TooltipContentImplProps>, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n 'aria-label': ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n\n // Close this tooltip if another one opens\n useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n\n // Close the tooltip if the trigger is scrolled\n useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event: Event) => {\n const target = event.target as HTMLElement;\n if (target?.contains(context.trigger)) {\n onClose();\n }\n };\n window.addEventListener('scroll', handleScroll, { capture: true });\n return () => window.removeEventListener('scroll', handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n\n return (\n <DismissableLayer\n asChild\n disableOutsidePointerEvents={false}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n onFocusOutside={(event) => event.preventDefault()}\n onDismiss={onClose}\n >\n <PopperPrimitive.Content\n data-state={context.stateAttribute}\n {...popperScope}\n {...contentProps}\n ref={forwardedRef}\n style={{\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-tooltip-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-tooltip-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-tooltip-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-tooltip-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-tooltip-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n >\n <Slottable>{children}</Slottable>\n <VisuallyHiddenContentContextProvider scope={__scopeTooltip} isInside={true}>\n <VisuallyHiddenPrimitive.Root id={context.contentId} role='tooltip'>\n {ariaLabel || children}\n </VisuallyHiddenPrimitive.Root>\n </VisuallyHiddenContentContextProvider>\n </PopperPrimitive.Content>\n </DismissableLayer>\n );\n },\n);\n\nTooltipContent.displayName = CONTENT_NAME;\n\n//\n// TooltipArrow\n//\n\nconst ARROW_NAME = 'TooltipArrow';\n\ntype TooltipArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ntype TooltipArrowProps = PopperArrowProps;\n\nconst TooltipArrow = forwardRef<TooltipArrowElement, TooltipArrowProps>(\n (props: TooltipScopedProps<TooltipArrowProps>, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(ARROW_NAME, __scopeTooltip);\n // if the arrow is inside the `VisuallyHidden`, we don't want to render it all to\n // prevent issues in positioning the arrow due to the duplicate\n return visuallyHiddenContentContext.isInside ? null : (\n <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n );\n },\n);\n\nTooltipArrow.displayName = ARROW_NAME;\n\ntype TooltipSide = NonNullable<TooltipContentProps['side']>;\n\nconst getExitSideFromRect = (point: Point, rect: DOMRect): TooltipSide => {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return 'left';\n case right:\n return 'right';\n case top:\n return 'top';\n case bottom:\n return 'bottom';\n default:\n throw new Error('unreachable');\n }\n};\n\nconst getPaddedExitPoints = (exitPoint: Point, exitSide: TooltipSide, padding = 5) => {\n const paddedExitPoints: Point[] = [];\n switch (exitSide) {\n case 'top':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding },\n );\n break;\n case 'bottom':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n );\n break;\n case 'left':\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding },\n );\n break;\n case 'right':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n );\n break;\n }\n return paddedExitPoints;\n};\n\nconst getPointsFromRect = (rect: DOMRect) => {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n ];\n};\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nconst isPointInPolygon = (point: Point, polygon: Polygon) => {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n // prettier-ignore\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) {\n inside = !inside;\n }\n }\n\n return inside;\n};\n\n// Returns a new array of points representing the convex hull of the given set of points.\n// https://www.nayuki.io/page/convex-hull-algorithm\nconst getHull = <P extends Point>(points: Readonly<Array<P>>): Array<P> => {\n const newPoints: Array<P> = points.slice();\n newPoints.sort((a: Point, b: Point) => {\n if (a.x < b.x) {\n return -1;\n } else if (a.x > b.x) {\n return +1;\n } else if (a.y < b.y) {\n return -1;\n } else if (a.y > b.y) {\n return +1;\n } else {\n return 0;\n }\n });\n return getHullPresorted(newPoints);\n};\n\n// Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time.\nconst getHullPresorted = <P extends Point>(points: Readonly<Array<P>>): Array<P> => {\n if (points.length <= 1) {\n return points.slice();\n }\n\n const upperHull: Array<P> = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) {\n upperHull.pop();\n } else {\n break;\n }\n }\n upperHull.push(p);\n }\n upperHull.pop();\n\n const lowerHull: Array<P> = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) {\n lowerHull.pop();\n } else {\n break;\n }\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n\n if (\n upperHull.length === 1 &&\n lowerHull.length === 1 &&\n upperHull[0].x === lowerHull[0].x &&\n upperHull[0].y === lowerHull[0].y\n ) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n};\n\n//\n// Tooltip\n//\n\nexport const Tooltip = {\n Provider: TooltipProvider,\n Trigger: TooltipTrigger,\n};\n\nexport { createTooltipScope, useTooltipContext };\n\nexport type { TooltipProviderProps, TooltipTriggerProps, TooltipScopedProps, TooltipSide };\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport ErrorStackParser from 'error-stack-parser';\nimport React from 'react';\n\nimport { mx } from '@dxos/ui-theme';\n\ntype LocalFrame = { href: string; fileName: string };\n\nexport type ParsedStackFrame = ReturnType<typeof ErrorStackParser.parse>[number];\n\nexport type ErrorStackProps = {\n /** When set, these frames are shown instead of parsing `error`. */\n frames?: ParsedStackFrame[];\n /** Used when `frames` is omitted. */\n error?: Error;\n};\n\n/**\n * Parses `captureOwnerStack()` output (React dev) into frames for {@link ErrorStack}.\n * Prefixes a synthetic Error line when needed so `error-stack-parser` can read V8-style stacks.\n */\nexport const parseCaptureOwnerStack = (stack: string | null): ParsedStackFrame[] | null => {\n if (stack == null || stack.length === 0) {\n return null;\n }\n const err = new Error();\n err.stack = stack;\n try {\n return ErrorStackParser.parse(err);\n } catch {\n err.stack = `Error\\n${stack}`;\n try {\n return ErrorStackParser.parse(err);\n } catch {\n return null;\n }\n }\n};\n\n/**\n * Renders a parsed error stack trace with tree connector symbols and clickable vscode:// links for local frames.\n */\nexport const ErrorStack = ({ error, frames: framesProp }: ErrorStackProps) => {\n const frames = framesProp ?? (error ? ErrorStackParser.parse(error) : []);\n if (frames.length === 0) {\n return null;\n }\n\n return (\n <div className='font-mono text-sm'>\n {frames.map((frame, i) => {\n const isLast = i === frames.length - 1;\n const local = frame.fileName\n ? parseLocalFrame(frame.fileName, frame.lineNumber, frame.columnNumber)\n : undefined;\n const name = frame.functionName ?? '<anonymous>';\n return (\n <div\n key={i}\n className={mx(\n 'grid grid-cols-[16px_1fr_auto_auto] items-stretch gap-x-2',\n local && 'cursor-pointer hover:bg-hover-surface',\n )}\n >\n {/* Tree connector: vertical line full-height + horizontal branch at midpoint */}\n <div className='relative'>\n <div\n className={mx(\n 'absolute left-1/2 -translate-x-1/2 w-px bg-neutral-500',\n isLast ? 'top-0 h-1/2' : 'inset-y-0',\n )}\n />\n <div className='absolute top-1/2 -translate-y-1/2 left-1/2 right-0 h-px bg-neutral-500' />\n </div>\n {local ? (\n <a href={local.href} className='truncate self-center'>\n {name}\n </a>\n ) : (\n <span className='text-subdued truncate self-center'>{name}</span>\n )}\n <span className='text-xs text-subdued truncate self-center'>{local?.fileName ?? ''}</span>\n <span className='text-xs text-subdued text-right self-center'>\n {local ? `${frame.lineNumber}:${frame.columnNumber}` : ''}\n </span>\n </div>\n );\n })}\n </div>\n );\n};\n\n/**\n * Parses a Vite `/@fs/` URL into a `vscode://` deep link and short filename.\n * Returns undefined if the URL cannot be resolved to a local file.\n */\nconst parseLocalFrame = (fileUrl: string, line?: number, col?: number): LocalFrame | undefined => {\n try {\n const { pathname } = new URL(fileUrl);\n if (!pathname.startsWith('/@fs/')) {\n return undefined;\n }\n const localPath = pathname.slice(4); // /@fs/Users/... → /Users/...\n return {\n href: `vscode://file/${localPath}:${line ?? 1}:${col ?? 1}`,\n fileName: pathname.split('/').pop() ?? localPath,\n };\n } catch {\n return undefined;\n }\n};\n"],
5
+ "mappings": ";AAIA,OAAOA,SAAiCC,qBAAqB;AAYtD,IAAMC,iBAAiBD,8BAAmC;EAAEE,SAAS;AAAO,CAAA;AAE5E,IAAMC,kBAAkB,CAAC,EAAED,SAASE,SAAQ,MACjD,sBAAA,cAACH,eAAeI,UAAQ;EAACC,OAAO;IAAEJ;EAAQ;GAAIE,QAAAA;;;ACfhD,OAAOG,UAAiCC,iBAAAA,sBAAqB;AAYtD,IAAMC,mBAAmBD,gBAAAA,eAAqC;EAAEE,WAAW;AAAO,CAAA;AAElF,IAAMC,oBAAoB,CAAC,EAAED,WAAWE,SAAQ,MACrD,gBAAAL,OAAA,cAACE,iBAAiBI,UAAQ;EAACC,OAAO;IAAEJ;EAAU;GAAIE,QAAAA;;;ACfpD,SAASG,cAAAA,mBAAkB;;;ACA3B,SAASC,qBAAqB;AAC9B,OAAOC,UAAiCC,iBAAAA,gBAAeC,aAAAA,YAAWC,eAAe;;;ACDjF,SAASC,kBAAkB;AAE3B,SAASC,aAAa;AAIf,IAAMC,kBAAkB,MAAMC,WAAWC,YAAAA,KAAiBC,MAAM,IAAIC,MAAM,sBAAA,CAAA;;;ACNjF,SAASC,aAAaC,gBAAgB;AAEtC,SAASC,yBAAyB;AAI3B,IAAMC,kBAAkB;EAAEC,KAAKC;EAAKC,OAAOD;EAAKE,QAAQF;EAAKG,MAAMH;AAAI;AAEvE,IAAMI,cAAc,MAAA;AACzB,QAAM,CAACC,SAASC,UAAAA,IAAcV,SAA0BE,eAAAA;AACxD,QAAMS,eAAeZ,YAAY,MAAA;AAC/BW,eAAW;MACTP,KAAKS,WAAWC,iBAAiBC,SAASC,eAAe,EAAEC,iBAAiB,iBAAA,CAAA;MAC5EX,OAAOO,WAAWC,iBAAiBC,SAASC,eAAe,EAAEC,iBAAiB,mBAAA,CAAA;MAC9EV,QAAQM,WAAWC,iBAAiBC,SAASC,eAAe,EAAEC,iBAAiB,oBAAA,CAAA;MAC/ET,MAAMK,WAAWC,iBAAiBC,SAASC,eAAe,EAAEC,iBAAiB,kBAAA,CAAA;IAC/E,CAAA;EACF,GAAG,CAAA,CAAE;AAELf,oBAAkBU,YAAAA;AAClB,SAAOF;AACT;;;ACrBA,SAAsBQ,QAAQC,oBAAoB;AAClD,OAAOC,aAAgC;AACvC,OAAOC,UAAyBC,UAAUC,iBAAAA,gBAAeC,cAAAA,aAAYC,WAAWC,YAAAA,iBAAgB;AAChG,SAASC,kBAAkBC,kBAAkBC,6BAA6B;AAE1E,IAAMC,aAAa;AACnB,IAAMC,YAAY;AAClB,IAAMC,kBAAkBb;AAEjB,IAAMc,YAAY;EACvB,CAACH,UAAAA,GAAa;IACZ,CAACC,SAAAA,GAAY;MACX,wBAAwB;IAC1B;EACF;AACF;AAEA,KAAKX,QAAQc,IAAIP,gBAAAA,EAAkBQ,KAAK;EACtCF;EACAG,KAAKN;EACLO,WAAWN;EACXO,eAAe;IACbC,aAAa;EACf;AACF,CAAA;AAYO,IAAMC,sBAAsBjB,gBAAAA,eAAc;EAC/CkB,OAAOV;EACPW,UAAUV;AACZ,CAAA;AAEO,IAAMJ,iBAAiB,IAAIe,SAAAA;AAChC,QAAMC,SAASf,sBAAAA,GAAyBc,IAAAA;AACxC,QAAM,EAAED,SAAQ,IAAKlB,YAAWgB,mBAAAA;AAChC,SAAO;IAAE,GAAGI;IAAQF;EAAS;AAC/B;AAEO,IAAMG,uBAAuB,CAAC,EACnCC,UACAC,oBACAC,UACAP,OACAC,SAAQ,MACkB;AAC1B,QAAM,CAACO,QAAQC,SAAAA,IAAaxB,UAAS,KAAA;AACrCD,YAAU,MAAA;AACRyB,cAAU,KAAA;AACV,QAAIH,sBAAsBA,mBAAmBI,QAAQ;AACnDJ,yBAAmBK,QAAQ,CAACC,aAAAA;AAC1BC,eAAOC,KAAKF,QAAAA,EAAUD,QAAQ,CAACI,aAAAA;AAC7BF,iBAAOC,KAAKF,SAASG,QAAAA,CAAS,EAAEJ,QAAQ,CAACK,OAAAA;AACvCrC,oBAAQsC,kBAAkBF,UAAUC,IAAIJ,SAASG,QAAAA,EAAUC,EAAAA,CAAG;UAChE,CAAA;QACF,CAAA;MACF,CAAA;IACF;AAEAP,cAAU,IAAA;EACZ,GAAG;IAACH;GAAmB;AAIvB,SACE,gBAAA1B,OAAA,cAACmB,oBAAoBmB,UAAQ;IAACC,OAAO;MAAEnB,OAAOA,SAASV;MAAWW,UAAUA,YAAYV;IAAgB;KACtG,gBAAAX,OAAA,cAACC,UAAAA;IAASwB;KAAqBG,SAASD,WAAWF,QAAAA,CAAAA;AAGzD;;;AC7EO,IAAMe,iBAAiB,MAAA;AAE5B,SAAO,CAAC,CAACC,UAAUC,UAAUC,MAAM,wBAAA;AACrC;;;AJoBO,IAAMC,eAAeC,gBAAAA,eAA6CC,MAAAA;AASlE,IAAMC,gBAAgB,CAAC,EAC5BC,UACAC,WAAW,MACXC,oBACAC,OACAC,KAAK,CAACC,OAAOC,gBAAgBC,aAAaT,QAC1CU,YAAY,QACZC,cAAc,QACdC,SACAC,SAAQ,MACW;AACnBC,EAAAA,WAAU,MAAA;AACR,QAAIC,SAASC,aAAa;AACxB,YAAMC,KAAKC,cAAcH,SAASC,WAAW;AAC7CC,SAAGE,UAAUC,yBAAAA;AACb,aAAO,MAAMH,GAAGI,YAAYD,yBAAAA;IAC9B;EACF,GAAG,CAAA,CAAE;AAEL,QAAME,kBAAkBC,YAAAA;AAExB,QAAMC,eAAeC,QACnB,OAAO;IAAEnB;IAAII;IAAWgB,gBAAgBA,eAAAA;IAAkBJ;IAAiBV;IAASC;EAAS,IAC7F;IAACP;IAAII;IAAWY;IAAiBV;IAASC;GAAS;AAGrD,SACE,gBAAAc,OAAA,cAAC7B,aAAa8B,UAAQ;IAACC,OAAOL;KAC5B,gBAAAG,OAAA,cAACG,sBACK;IACF3B;IACAC;IACAC;EACF,GAEA,gBAAAsB,OAAA,cAACI,mBAAAA;IAAkBC,WAAU;KAC3B,gBAAAL,OAAA,cAACM,iBAAAA;IAAgBC,SAASvB;KAAcT,QAAAA,CAAAA,CAAAA,CAAAA;AAKlD;AAEA,IAAMkB,4BAA4B,CAACe,oBAAAA;AACjC,MAAIA,iBAAiB;AACnBpB,aAASqB,KAAKC,aAAa,mBAAmB,MAAA;EAChD,OAAO;AACLtB,aAASqB,KAAKE,gBAAgB,iBAAA;EAChC;AACF;;;AK9EA,SAASC,4BAA4B;AACrC,SAASC,uBAAuB;AAChC,SAASC,0BAA0B;AAEnC,SAASC,wBAAwB;AACjC,SAASC,aAAa;AACtB,YAAYC,qBAAqB;AACjC,SAAiCC,yBAAyB;AAC1D,SAASC,UAAUC,uBAAuB;AAC1C,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAE1B,SAASC,4BAA4B;AACrC,YAAYC,6BAA6B;AACzC,OAAOC,UAOLC,YACAC,eAAAA,cACAC,aAAAA,YACAC,WAAAA,UACAC,QACAC,YAAAA,iBACK;AAKP,IAAM,CAACC,sBAAsBC,kBAAAA,IAAsBC,mBAAmB,WAAW;EAACC;CAAkB;AACpG,IAAMC,iBAAiBD,kBAAAA;AAMvB,IAAME,yBAAyB;AAC/B,IAAMC,eAAe;AACrB,IAAMC,eAAe;AAiBrB,IAAM,CAACC,wBAAwBC,iBAAAA,IAAqBT,qBAA0CO,YAAAA;AAyB9F,IAAMG,kBAA4C,CAACC,UAAAA;AACjD,QAAM,EACJC,gBACAC,UACAC,MAAMC,UACNC,cAAc,OACdC,cACAC,0BAA0B,OAC1BC,gBAAgBd,wBAChBe,oBAAoB,IAAG,IACrBT;AACJ,QAAMU,mBAAmBC,OAAO,IAAA;AAChC,QAAMC,wBAAwBD,OAAO,KAAA;AACrC,QAAME,oBAAoBF,OAAO,CAAA;AAEjCG,EAAAA,WAAU,MAAA;AACR,UAAMC,iBAAiBF,kBAAkBG;AACzC,WAAO,MAAMC,OAAOC,aAAaH,cAAAA;EACnC,GAAG,CAAA,CAAE;AAEL,QAAMI,cAAc1B,eAAeQ,cAAAA;AACnC,QAAM,CAACmB,SAASC,UAAAA,IAAcC,UAAmC,IAAA;AACjE,QAAM,CAACC,SAASC,UAAAA,IAAcF,UAAoB,IAAA;AAClD,QAAM,CAACG,MAAMC,OAAAA,IAAWJ,UAAkCK,MAAAA;AAC1D,QAAMC,aAAajB,OAAiCS,OAAAA;AACpD,QAAMS,sBAAsBC,aAC1B,CAACC,aAAuCC,aAAyBC,aAAAA;AAC/DZ,eAAWU,WAAAA;AACXH,eAAWZ,UAAUe;AACrBP,eAAWQ,eAAe,IAAA;AAC1BN,YAAQO,QAAAA;EACV,GACA,CAAA,CAAE;AAEJ,QAAMC,YAAYC,MAAAA;AAClB,QAAMC,eAAezB,OAAO,CAAA;AAC5B,QAAM0B,oBAAoB1B,OAAO,KAAA;AACjC,QAAM2B,mBAAmBR,aACvB,CAAC3B,UAAAA;AACC,QAAIA,OAAM;AACRc,aAAOC,aAAaL,kBAAkBG,OAAO;AAC7CN,uBAAiBM,UAAU;AAG3BuB,eAASC,cAAc,IAAIC,YAAY9C,YAAAA,CAAAA;IACzC,OAAO;AACLsB,aAAOC,aAAaL,kBAAkBG,OAAO;AAC7CH,wBAAkBG,UAAUC,OAAOyB,WAAW,MAAOhC,iBAAiBM,UAAU,MAAOP,iBAAAA;IACzF;AACAH,mBAAeH,KAAAA;EACjB,GACA;IAACM;IAAmBH;GAAa;AAEnC,QAAM,CAACH,OAAO,OAAOwC,OAAAA,IAAWC,qBAAqB;IACnDC,MAAMzC;IACN0C,aAAazC;IACb0C,UAAUT;EACZ,CAAA;AACA,QAAMU,iBAAiBC,SAAQ,MAAA;AAC7B,WAAO9C,OAAQkC,kBAAkBrB,UAAU,iBAAiB,iBAAkB;EAChF,GAAG;IAACb;GAAK;AAET,QAAM+C,aAAapB,aAAY,MAAA;AAC7Bb,WAAOC,aAAakB,aAAapB,OAAO;AACxCoB,iBAAapB,UAAU;AACvBqB,sBAAkBrB,UAAU;AAC5B2B,YAAQ,IAAA;EACV,GAAG;IAACA;GAAQ;AAEZ,QAAMQ,cAAcrB,aAAY,MAAA;AAC9Bb,WAAOC,aAAakB,aAAapB,OAAO;AACxCoB,iBAAapB,UAAU;AACvB2B,YAAQ,KAAA;EACV,GAAG;IAACA;GAAQ;AAEZ,QAAMS,oBAAoBtB,aAAY,MAAA;AACpCb,WAAOC,aAAakB,aAAapB,OAAO;AACxCoB,iBAAapB,UAAUC,OAAOyB,WAAW,MAAA;AACvCL,wBAAkBrB,UAAU;AAC5B2B,cAAQ,IAAA;AACRP,mBAAapB,UAAU;IACzB,GAAGR,aAAAA;EACL,GAAG;IAACA;IAAemC;GAAQ;AAE3B7B,EAAAA,WAAU,MAAA;AACR,WAAO,MAAA;AACL,UAAIsB,aAAapB,SAAS;AACxBC,eAAOC,aAAakB,aAAapB,OAAO;AACxCoB,qBAAapB,UAAU;MACzB;IACF;EACF,GAAG,CAAA,CAAE;AAEL,QAAM,EAAEqC,GAAE,IAAKC,gBAAAA;AACf,QAAMC,YAAYC,oBAAAA;AAElB,SACE,gBAAAC,OAAA,cAAiBC,sBAASvC,aACxB,gBAAAsC,OAAA,cAAC5D,wBAAAA;IACC8D,OAAO1D;IACPiC;IACA/B;IACA6C;IACA5B;IACAwC,iBAAiB/B;IACjBgC,gBAAgB/B,aAAY,MAAA;AAC1B,UAAIpB,iBAAiBM,SAAS;AAC5BoC,0BAAAA;MACF,OAAO;AACLF,mBAAAA;MACF;IACF,GAAG;MAACxC;MAAkB0C;MAAmBF;KAAW;IACpDY,gBAAgBhC,aAAY,MAAA;AAC1B,UAAIvB,yBAAyB;AAC3B4C,oBAAAA;MACF,OAAO;AAELlC,eAAOC,aAAakB,aAAapB,OAAO;AACxCoB,qBAAapB,UAAU;MACzB;IACF,GAAG;MAACmC;MAAa5C;KAAwB;IACzCwD,QAAQb;IACRc,SAASb;IACT5C;IACAK;IACAqD,0BAA0BnC,aAAY,CAACoC,cAAAA;AACrCtD,4BAAsBI,UAAUkD;IAClC,GAAG,CAAA,CAAE;KAEL,gBAAAT,OAAA,cAACU,gBAAAA;IAAe1C;IAAY2C,WAAWf,GAAG,mBAAmB;MAAEE;IAAU,CAAA;KACtEhC,SACD,gBAAAkC,OAAA,cAACY,cAAAA;IAAaD,WAAWf,GAAG,eAAA;OAE9B,gBAAAI,OAAA,cAACa,uBAAAA;IAAsBC,YAAY3C;MAClC1B,QAAAA,CAAAA;AAIT;AAEAH,gBAAgByE,cAAc5E;AAM9B,IAAM0E,wBAAwB,CAAC,EAC7BC,YACAtE,eAAc,MAC4C;AAC1D,QAAMkB,cAAc1B,eAAeQ,cAAAA;AACnC,SAAO,gBAAAwD,OAAA,cAAiBgB,wBAAM;IAACC,SAAAA;IAAS,GAAGvD;IAAaoD;;AAC1D;AAMA,IAAMI,eAAe;AAWrB,IAAMC,iBAAiBC,2BACrB,CAAC7E,OAAgD8E,iBAAAA;AAC/C,QAAM;IACJ7E;IACA8E;;IAEAvE,eAAewE;IACfvD;IACAF;IACA,GAAG0D;EAAAA,IACDjF;AACJ,QAAMkF,UAAUpF,kBAAkB6E,cAAc1E,cAAAA;AAChD,QAAMkF,MAAMxE,OAA8B,IAAA;AAC1C,QAAMyE,eAAeC,gBAAgBP,cAAcK,GAAAA;AACnD,QAAMG,mBAAmB3E,OAAO,KAAA;AAChC,QAAM4E,0BAA0B5E,OAAO,KAAA;AACvC,QAAM6E,kBAAkB1D,aAAY,MAAOwD,iBAAiBtE,UAAU,OAAQ,CAAA,CAAE;AAEhFF,EAAAA,WAAU,MAAA;AACR,WAAO,MAAMyB,SAASkD,oBAAoB,aAAaD,eAAAA;EACzD,GAAG;IAACA;GAAgB;AAEpB,SACE,gBAAA/B,OAAA,cAACiC,UAAUC,QAAM;;;IAGfC,oBAAkBV,QAAQ/E,OAAO+E,QAAQhD,YAAYP;IACrDkE,cAAYX,QAAQlC;IACnB,GAAGiC;IACJE,KAAKC;IACLU,eAAeC,qBAAqB/F,MAAM8F,eAAe,CAACE,UAAAA;AACxD,UAAIA,MAAMC,gBAAgB,SAAS;AACjC;MACF;AACA,UAAI,CAACV,wBAAwBvE,WAAW,CAACkE,QAAQtE,sBAAsBI,SAAS;AAC9E+D,qBAAaiB,KAAAA;AACb,YAAIA,MAAME,kBAAkB;AAC1B;QACF;AACAhB,gBAAQtB,gBAAgBuB,IAAInE,SAASO,SAASE,IAAAA;AAC9CyD,gBAAQrB,eAAc;AACtB0B,gCAAwBvE,UAAU;MACpC;IACF,CAAA;IACAmF,gBAAgBJ,qBAAqB/F,MAAMmG,gBAAgB,MAAA;AACzDjB,cAAQpB,eAAc;AACtByB,8BAAwBvE,UAAU;IACpC,CAAA;IACAoF,eAAeL,qBAAqB/F,MAAMoG,eAAe,MAAA;AACvD,UAAIlB,QAAQ/E,MAAM;AAChB+E,gBAAQlB,QAAO;MACjB;AACAsB,uBAAiBtE,UAAU;AAC3BuB,eAAS8D,iBAAiB,aAAab,iBAAiB;QAAEc,MAAM;MAAK,CAAA;IACvE,CAAA;IACAC,SAASvG,MAAMuG;IACfC,QAAQT,qBAAqB/F,MAAMwG,QAAQtB,QAAQlB,OAAO;IAC1DyC,SAASV,qBAAqB/F,MAAMyG,SAASvB,QAAQlB,OAAO;;AAGlE,CAAA;AAGFY,eAAeJ,cAAcG;AAM7B,IAAM+B,cAAc;AAGpB,IAAM,CAACC,gBAAgBC,gBAAAA,IAAoBvH,qBAAyCqH,aAAa;EAC/FG,YAAYlF;AACd,CAAA;AAgBA,IAAMmF,gBAAwC,CAAC9G,UAAAA;AAC7C,QAAM,EAAEC,gBAAgB4G,YAAY3G,UAAU6G,UAAS,IAAK/G;AAC5D,QAAMkF,UAAUpF,kBAAkB4G,aAAazG,cAAAA;AAC/C,SACE,gBAAAwD,OAAA,cAACkD,gBAAAA;IAAehD,OAAO1D;IAAgB4G;KACrC,gBAAApD,OAAA,cAACuD,UAAAA;IAASC,SAASJ,cAAc3B,QAAQ/E;KACvC,gBAAAsD,OAAA,cAACyD,iBAAAA;IAAgBxC,SAAAA;IAAQqC;KACtB7G,QAAAA,CAAAA,CAAAA;AAKX;AAEA4G,cAActC,cAAckC;AAM5B,IAAMS,eAAe;AAWrB,IAAMhD,iBAAiBU,2BACrB,CAAC7E,OAAgD8E,iBAAAA;AAC/C,QAAMsC,gBAAgBR,iBAAiBO,cAAcnH,MAAMC,cAAc;AACzE,QAAM,EAAE4G,aAAaO,cAAcP,YAAYpF,OAAO,OAAO,GAAG4F,aAAAA,IAAiBrH;AACjF,QAAMkF,UAAUpF,kBAAkBqH,cAAcnH,MAAMC,cAAc;AAEpE,SACE,gBAAAwD,OAAA,cAACuD,UAAAA;IAASC,SAASJ,cAAc3B,QAAQ/E;KACtC+E,QAAQ3E,0BACP,gBAAAkD,OAAA,cAAC6D,oBAAAA;IAAmB7F;IAAa,GAAG4F;IAAclC,KAAKL;OAEvD,gBAAArB,OAAA,cAAC8D,yBAAAA;IAAwB9F;IAAa,GAAG4F;IAAclC,KAAKL;;AAIpE,CAAA;AASF,IAAMyC,0BAA0B1C,2BAC9B,CAAC7E,OAAyD8E,iBAAAA;AACxD,QAAMI,UAAUpF,kBAAkBqH,cAAcnH,MAAMC,cAAc;AACpE,QAAMkF,MAAMxE,OAAuC,IAAA;AACnD,QAAMyE,eAAeC,gBAAgBP,cAAcK,GAAAA;AACnD,QAAM,CAACqC,kBAAkBC,mBAAAA,IAAuBnG,UAAyB,IAAA;AAEzE,QAAM,EAAEF,SAAS4C,QAAO,IAAKkB;AAC7B,QAAM3D,UAAU4D,IAAInE;AAEpB,QAAM,EAAEiD,yBAAwB,IAAKiB;AAErC,QAAMwC,wBAAwB5F,aAAY,MAAA;AACxC2F,wBAAoB,IAAA;AACpBxD,6BAAyB,KAAA;EAC3B,GAAG;IAACA;GAAyB;AAE7B,QAAM0D,wBAAwB7F,aAC5B,CAACkE,OAAqB4B,gBAAAA;AACpB,UAAMC,gBAAgB7B,MAAM6B;AAC5B,UAAMC,YAAY;MAAEC,GAAG/B,MAAMgC;MAASC,GAAGjC,MAAMkC;IAAQ;AACvD,UAAMC,WAAWC,oBAAoBN,WAAWD,cAAcQ,sBAAqB,CAAA;AACnF,UAAMC,mBAAmBC,oBAAoBT,WAAWK,QAAAA;AACxD,UAAMK,oBAAoBC,kBAAkBb,YAAYS,sBAAqB,CAAA;AAC7E,UAAMK,YAAYC,QAAQ;SAAIL;SAAqBE;KAAkB;AACrEf,wBAAoBiB,SAAAA;AACpBzE,6BAAyB,IAAA;EAC3B,GACA;IAACA;GAAyB;AAG5BnD,EAAAA,WAAU,MAAA;AACR,WAAO,MAAM4G,sBAAAA;EACf,GAAG;IAACA;GAAsB;AAE1B5G,EAAAA,WAAU,MAAA;AACR,QAAIM,WAAWG,SAAS;AACtB,YAAMqH,qBAAqB,CAAC5C,UAAwB2B,sBAAsB3B,OAAOzE,OAAAA;AACjF,YAAMsH,qBAAqB,CAAC7C,UAAwB2B,sBAAsB3B,OAAO5E,OAAAA;AAEjFA,cAAQiF,iBAAiB,gBAAgBuC,kBAAAA;AACzCrH,cAAQ8E,iBAAiB,gBAAgBwC,kBAAAA;AACzC,aAAO,MAAA;AACLzH,gBAAQqE,oBAAoB,gBAAgBmD,kBAAAA;AAC5CrH,gBAAQkE,oBAAoB,gBAAgBoD,kBAAAA;MAC9C;IACF;EACF,GAAG;IAACzH;IAASG;IAASoG;IAAuBD;GAAsB;AAEnE5G,EAAAA,WAAU,MAAA;AACR,QAAI0G,kBAAkB;AACpB,YAAMsB,0BAA0B,CAAC9C,UAAAA;AAC/B,cAAM+C,SAAS/C,MAAM+C;AACrB,cAAMC,kBAAkB;UAAEjB,GAAG/B,MAAMgC;UAASC,GAAGjC,MAAMkC;QAAQ;AAC7D,cAAMe,mBAAmB7H,SAAS8H,SAASH,MAAAA,KAAWxH,SAAS2H,SAASH,MAAAA;AACxE,cAAMI,4BAA4B,CAACC,iBAAiBJ,iBAAiBxB,gBAAAA;AAErE,YAAIyB,kBAAkB;AACpBvB,gCAAAA;QACF,WAAWyB,2BAA2B;AACpCzB,gCAAAA;AACA1D,kBAAAA;QACF;MACF;AACAzB,eAAS8D,iBAAiB,eAAeyC,uBAAAA;AACzC,aAAO,MAAMvG,SAASkD,oBAAoB,eAAeqD,uBAAAA;IAC3D;EACF,GAAG;IAAC1H;IAASG;IAASiG;IAAkBxD;IAAS0D;GAAsB;AAEvE,SAAO,gBAAAjE,OAAA,cAAC6D,oBAAAA;IAAoB,GAAGtH;IAAOmF,KAAKC;;AAC7C,CAAA;AAGF,IAAM,CAACiE,sCAAsCC,+BAAAA,IAAmCjK,qBAAqBO,cAAc;EACjH2J,UAAU;AACZ,CAAA;AAuBA,IAAMjC,qBAAqBzC,2BACzB,CAAC7E,OAAoD8E,iBAAAA;AACnD,QAAM,EACJ7E,gBACAC,UACA,cAAcsJ,WACdC,iBACAC,sBACA,GAAGrC,aAAAA,IACDrH;AACJ,QAAMkF,UAAUpF,kBAAkBqH,cAAclH,cAAAA;AAChD,QAAMkB,cAAc1B,eAAeQ,cAAAA;AACnC,QAAM,EAAE+D,QAAO,IAAKkB;AAGpBpE,EAAAA,WAAU,MAAA;AACRyB,aAAS8D,iBAAiB1G,cAAcqE,OAAAA;AACxC,WAAO,MAAMzB,SAASkD,oBAAoB9F,cAAcqE,OAAAA;EAC1D,GAAG;IAACA;GAAQ;AAGZlD,EAAAA,WAAU,MAAA;AACR,QAAIoE,QAAQ9D,SAAS;AACnB,YAAMuI,eAAe,CAAC3D,UAAAA;AACpB,cAAM+C,SAAS/C,MAAM+C;AACrB,YAAIA,QAAQG,SAAShE,QAAQ9D,OAAO,GAAG;AACrC4C,kBAAAA;QACF;MACF;AACA/C,aAAOoF,iBAAiB,UAAUsD,cAAc;QAAEC,SAAS;MAAK,CAAA;AAChE,aAAO,MAAM3I,OAAOwE,oBAAoB,UAAUkE,cAAc;QAAEC,SAAS;MAAK,CAAA;IAClF;EACF,GAAG;IAAC1E,QAAQ9D;IAAS4C;GAAQ;AAE7B,SACE,gBAAAP,OAAA,cAACoG,kBAAAA;IACCnF,SAAAA;IACAoF,6BAA6B;IAC7BL;IACAC;IACAK,gBAAgB,CAAC/D,UAAUA,MAAMgE,eAAc;IAC/CC,WAAWjG;KAEX,gBAAAP,OAAA,cAAiByG,yBAAO;IACtBrE,cAAYX,QAAQlC;IACnB,GAAG7B;IACH,GAAGkG;IACJlC,KAAKL;IACLqF,OAAO;MACL,GAAG9C,aAAa8C;;MAEhB,GAAG;QACD,4CAA4C;QAC5C,2CAA2C;QAC3C,4CAA4C;QAC5C,iCAAiC;QACjC,kCAAkC;MACpC;IACF;KAEA,gBAAA1G,OAAA,cAAC2G,WAAAA,MAAWlK,QAAAA,GACZ,gBAAAuD,OAAA,cAAC4F,sCAAAA;IAAqC1F,OAAO1D;IAAgBsJ,UAAU;KACrE,gBAAA9F,OAAA,cAAyBC,8BAAI;IAAC2G,IAAInF,QAAQhD;IAAWoI,MAAK;KACvDd,aAAatJ,QAAAA,CAAAA,CAAAA,CAAAA;AAM1B,CAAA;AAGFiE,eAAeK,cAAc2C;AAM7B,IAAMoD,aAAa;AAMnB,IAAMlG,eAAeQ,2BACnB,CAAC7E,OAA8C8E,iBAAAA;AAC7C,QAAM,EAAE7E,gBAAgB,GAAGuK,WAAAA,IAAexK;AAC1C,QAAMmB,cAAc1B,eAAeQ,cAAAA;AACnC,QAAMwK,+BAA+BnB,gCAAgCiB,YAAYtK,cAAAA;AAGjF,SAAOwK,6BAA6BlB,WAAW,OAC7C,gBAAA9F,OAAA,cAAiBiH,uBAAK;IAAE,GAAGvJ;IAAc,GAAGqJ;IAAYrF,KAAKL;;AAEjE,CAAA;AAGFT,aAAaG,cAAc+F;AAI3B,IAAMnC,sBAAsB,CAACuC,OAAcC,SAAAA;AACzC,QAAMC,MAAMC,KAAKC,IAAIH,KAAKC,MAAMF,MAAM1C,CAAC;AACvC,QAAM+C,SAASF,KAAKC,IAAIH,KAAKI,SAASL,MAAM1C,CAAC;AAC7C,QAAMgD,QAAQH,KAAKC,IAAIH,KAAKK,QAAQN,MAAM5C,CAAC;AAC3C,QAAMmD,OAAOJ,KAAKC,IAAIH,KAAKM,OAAOP,MAAM5C,CAAC;AAEzC,UAAQ+C,KAAKK,IAAIN,KAAKG,QAAQC,OAAOC,IAAAA,GAAAA;IACnC,KAAKA;AACH,aAAO;IACT,KAAKD;AACH,aAAO;IACT,KAAKJ;AACH,aAAO;IACT,KAAKG;AACH,aAAO;IACT;AACE,YAAM,IAAII,MAAM,aAAA;EACpB;AACF;AAEA,IAAM7C,sBAAsB,CAACT,WAAkBK,UAAuBkD,UAAU,MAAC;AAC/E,QAAM/C,mBAA4B,CAAA;AAClC,UAAQH,UAAAA;IACN,KAAK;AACHG,uBAAiBgD,KACf;QAAEvD,GAAGD,UAAUC,IAAIsD;QAASpD,GAAGH,UAAUG,IAAIoD;MAAQ,GACrD;QAAEtD,GAAGD,UAAUC,IAAIsD;QAASpD,GAAGH,UAAUG,IAAIoD;MAAQ,CAAA;AAEvD;IACF,KAAK;AACH/C,uBAAiBgD,KACf;QAAEvD,GAAGD,UAAUC,IAAIsD;QAASpD,GAAGH,UAAUG,IAAIoD;MAAQ,GACrD;QAAEtD,GAAGD,UAAUC,IAAIsD;QAASpD,GAAGH,UAAUG,IAAIoD;MAAQ,CAAA;AAEvD;IACF,KAAK;AACH/C,uBAAiBgD,KACf;QAAEvD,GAAGD,UAAUC,IAAIsD;QAASpD,GAAGH,UAAUG,IAAIoD;MAAQ,GACrD;QAAEtD,GAAGD,UAAUC,IAAIsD;QAASpD,GAAGH,UAAUG,IAAIoD;MAAQ,CAAA;AAEvD;IACF,KAAK;AACH/C,uBAAiBgD,KACf;QAAEvD,GAAGD,UAAUC,IAAIsD;QAASpD,GAAGH,UAAUG,IAAIoD;MAAQ,GACrD;QAAEtD,GAAGD,UAAUC,IAAIsD;QAASpD,GAAGH,UAAUG,IAAIoD;MAAQ,CAAA;AAEvD;EACJ;AACA,SAAO/C;AACT;AAEA,IAAMG,oBAAoB,CAACmC,SAAAA;AACzB,QAAM,EAAEC,KAAKI,OAAOD,QAAQE,KAAI,IAAKN;AACrC,SAAO;IACL;MAAE7C,GAAGmD;MAAMjD,GAAG4C;IAAI;IAClB;MAAE9C,GAAGkD;MAAOhD,GAAG4C;IAAI;IACnB;MAAE9C,GAAGkD;MAAOhD,GAAG+C;IAAO;IACtB;MAAEjD,GAAGmD;MAAMjD,GAAG+C;IAAO;;AAEzB;AAIA,IAAM5B,mBAAmB,CAACuB,OAAcY,YAAAA;AACtC,QAAM,EAAExD,GAAGE,EAAC,IAAK0C;AACjB,MAAIa,SAAS;AACb,WAASC,IAAI,GAAGC,IAAIH,QAAQI,SAAS,GAAGF,IAAIF,QAAQI,QAAQD,IAAID,KAAK;AACnE,UAAMG,KAAKL,QAAQE,CAAAA,EAAG1D;AACtB,UAAM8D,KAAKN,QAAQE,CAAAA,EAAGxD;AACtB,UAAM6D,KAAKP,QAAQG,CAAAA,EAAG3D;AACtB,UAAMgE,KAAKR,QAAQG,CAAAA,EAAGzD;AAGtB,UAAM+D,YAAcH,KAAK5D,MAAQ8D,KAAK9D,KAAQF,KAAK+D,KAAKF,OAAO3D,IAAI4D,OAAOE,KAAKF,MAAMD;AACrF,QAAII,WAAW;AACbR,eAAS,CAACA;IACZ;EACF;AAEA,SAAOA;AACT;AAIA,IAAM7C,UAAU,CAAkBsD,WAAAA;AAChC,QAAMC,YAAsBD,OAAOE,MAAK;AACxCD,YAAUE,KAAK,CAACC,GAAUC,MAAAA;AACxB,QAAID,EAAEtE,IAAIuE,EAAEvE,GAAG;AACb,aAAO;IACT,WAAWsE,EAAEtE,IAAIuE,EAAEvE,GAAG;AACpB,aAAO;IACT,WAAWsE,EAAEpE,IAAIqE,EAAErE,GAAG;AACpB,aAAO;IACT,WAAWoE,EAAEpE,IAAIqE,EAAErE,GAAG;AACpB,aAAO;IACT,OAAO;AACL,aAAO;IACT;EACF,CAAA;AACA,SAAOsE,iBAAiBL,SAAAA;AAC1B;AAGA,IAAMK,mBAAmB,CAAkBN,WAAAA;AACzC,MAAIA,OAAON,UAAU,GAAG;AACtB,WAAOM,OAAOE,MAAK;EACrB;AAEA,QAAMK,YAAsB,CAAA;AAC5B,WAASf,IAAI,GAAGA,IAAIQ,OAAON,QAAQF,KAAK;AACtC,UAAMgB,IAAIR,OAAOR,CAAAA;AACjB,WAAOe,UAAUb,UAAU,GAAG;AAC5B,YAAMe,IAAIF,UAAUA,UAAUb,SAAS,CAAA;AACvC,YAAMgB,IAAIH,UAAUA,UAAUb,SAAS,CAAA;AACvC,WAAKe,EAAE3E,IAAI4E,EAAE5E,MAAM0E,EAAExE,IAAI0E,EAAE1E,OAAOyE,EAAEzE,IAAI0E,EAAE1E,MAAMwE,EAAE1E,IAAI4E,EAAE5E,IAAI;AAC1DyE,kBAAUI,IAAG;MACf,OAAO;AACL;MACF;IACF;AACAJ,cAAUlB,KAAKmB,CAAAA;EACjB;AACAD,YAAUI,IAAG;AAEb,QAAMC,YAAsB,CAAA;AAC5B,WAASpB,IAAIQ,OAAON,SAAS,GAAGF,KAAK,GAAGA,KAAK;AAC3C,UAAMgB,IAAIR,OAAOR,CAAAA;AACjB,WAAOoB,UAAUlB,UAAU,GAAG;AAC5B,YAAMe,IAAIG,UAAUA,UAAUlB,SAAS,CAAA;AACvC,YAAMgB,IAAIE,UAAUA,UAAUlB,SAAS,CAAA;AACvC,WAAKe,EAAE3E,IAAI4E,EAAE5E,MAAM0E,EAAExE,IAAI0E,EAAE1E,OAAOyE,EAAEzE,IAAI0E,EAAE1E,MAAMwE,EAAE1E,IAAI4E,EAAE5E,IAAI;AAC1D8E,kBAAUD,IAAG;MACf,OAAO;AACL;MACF;IACF;AACAC,cAAUvB,KAAKmB,CAAAA;EACjB;AACAI,YAAUD,IAAG;AAEb,MACEJ,UAAUb,WAAW,KACrBkB,UAAUlB,WAAW,KACrBa,UAAU,CAAA,EAAGzE,MAAM8E,UAAU,CAAA,EAAG9E,KAChCyE,UAAU,CAAA,EAAGvE,MAAM4E,UAAU,CAAA,EAAG5E,GAChC;AACA,WAAOuE;EACT,OAAO;AACL,WAAOA,UAAUM,OAAOD,SAAAA;EAC1B;AACF;AAMO,IAAME,UAAU;EACrBC,UAAUjN;EACVkN,SAASrI;AACX;;;ACvvBA,OAAOsI,sBAAsB;AAC7B,OAAOC,YAAW;AAElB,SAASC,UAAU;AAiBZ,IAAMC,yBAAyB,CAACC,UAAAA;AACrC,MAAIA,SAAS,QAAQA,MAAMC,WAAW,GAAG;AACvC,WAAO;EACT;AACA,QAAMC,MAAM,IAAIC,MAAAA;AAChBD,MAAIF,QAAQA;AACZ,MAAI;AACF,WAAOJ,iBAAiBQ,MAAMF,GAAAA;EAChC,QAAQ;AACNA,QAAIF,QAAQ;EAAUA,KAAAA;AACtB,QAAI;AACF,aAAOJ,iBAAiBQ,MAAMF,GAAAA;IAChC,QAAQ;AACN,aAAO;IACT;EACF;AACF;AAKO,IAAMG,aAAa,CAAC,EAAEC,OAAOC,QAAQC,WAAU,MAAmB;AACvE,QAAMD,SAASC,eAAeF,QAAQV,iBAAiBQ,MAAME,KAAAA,IAAS,CAAA;AACtE,MAAIC,OAAON,WAAW,GAAG;AACvB,WAAO;EACT;AAEA,SACE,gBAAAJ,OAAA,cAACY,OAAAA;IAAIC,WAAU;KACZH,OAAOI,IAAI,CAACC,OAAOC,MAAAA;AAClB,UAAMC,SAASD,MAAMN,OAAON,SAAS;AACrC,UAAMc,QAAQH,MAAMI,WAChBC,gBAAgBL,MAAMI,UAAUJ,MAAMM,YAAYN,MAAMO,YAAY,IACpEC;AACJ,UAAMC,OAAOT,MAAMU,gBAAgB;AACnC,WACE,gBAAAzB,OAAA,cAACY,OAAAA;MACCc,KAAKV;MACLH,WAAWZ,GACT,6DACAiB,SAAS,uCAAA;OAIX,gBAAAlB,OAAA,cAACY,OAAAA;MAAIC,WAAU;OACb,gBAAAb,OAAA,cAACY,OAAAA;MACCC,WAAWZ,GACT,0DACAgB,SAAS,gBAAgB,WAAA;QAG7B,gBAAAjB,OAAA,cAACY,OAAAA;MAAIC,WAAU;SAEhBK,QACC,gBAAAlB,OAAA,cAAC2B,KAAAA;MAAEC,MAAMV,MAAMU;MAAMf,WAAU;OAC5BW,IAAAA,IAGH,gBAAAxB,OAAA,cAAC6B,QAAAA;MAAKhB,WAAU;OAAqCW,IAAAA,GAEvD,gBAAAxB,OAAA,cAAC6B,QAAAA;MAAKhB,WAAU;OAA6CK,OAAOC,YAAY,EAAA,GAChF,gBAAAnB,OAAA,cAAC6B,QAAAA;MAAKhB,WAAU;OACbK,QAAQ,GAAGH,MAAMM,UAAU,IAAIN,MAAMO,YAAY,KAAK,EAAA,CAAA;EAI/D,CAAA,CAAA;AAGN;AAMA,IAAMF,kBAAkB,CAACU,SAAiBC,MAAeC,QAAAA;AACvD,MAAI;AACF,UAAM,EAAEC,SAAQ,IAAK,IAAIC,IAAIJ,OAAAA;AAC7B,QAAI,CAACG,SAASE,WAAW,OAAA,GAAU;AACjC,aAAOZ;IACT;AACA,UAAMa,YAAYH,SAASI,MAAM,CAAA;AACjC,WAAO;MACLT,MAAM,iBAAiBQ,SAAAA,IAAaL,QAAQ,CAAA,IAAKC,OAAO,CAAA;MACxDb,UAAUc,SAASK,MAAM,GAAA,EAAKC,IAAG,KAAMH;IACzC;EACF,QAAQ;AACN,WAAOb;EACT;AACF;;;APvGO,IAAMiB,sBAAsB,CAACC,mBAAAA;AAClC,QAAM,EAAEC,UAAS,IAAKC,YAAWC,gBAAAA;AACjC,SAAOH,kBAAkBC;AAC3B;",
6
+ "names": ["React", "createContext", "DensityContext", "density", "DensityProvider", "children", "Provider", "value", "React", "createContext", "ElevationContext", "elevation", "ElevationProvider", "children", "Provider", "value", "useContext", "createKeyborg", "React", "createContext", "useEffect", "useMemo", "useContext", "raise", "useThemeContext", "useContext", "ThemeContext", "raise", "Error", "useCallback", "useState", "useViewportResize", "initialSafeArea", "top", "NaN", "right", "bottom", "left", "useSafeArea", "padding", "setPadding", "handleResize", "parseFloat", "getComputedStyle", "document", "documentElement", "getPropertyValue", "enUS", "dtLocaleEnUs", "i18Next", "React", "Suspense", "createContext", "useContext", "useEffect", "useState", "initReactI18next", "useTranslation", "useI18NextTranslation", "initialLng", "initialNs", "initialDtLocale", "resources", "use", "init", "lng", "defaultNS", "interpolation", "escapeValue", "TranslationsContext", "appNs", "dtLocale", "args", "result", "TranslationsProvider", "fallback", "resourceExtensions", "children", "loaded", "setLoaded", "length", "forEach", "resource", "Object", "keys", "language", "ns", "addResourceBundle", "Provider", "value", "hasIosKeyboard", "navigator", "userAgent", "match", "ThemeContext", "createContext", "undefined", "ThemeProvider", "children", "fallback", "resourceExtensions", "appNs", "tx", "_path", "_styleProps", "_options", "themeMode", "rootDensity", "noCache", "platform", "useEffect", "document", "defaultView", "kb", "createKeyborg", "subscribe", "handleInputModalityChange", "unsubscribe", "safeAreaPadding", "useSafeArea", "contextValue", "useMemo", "hasIosKeyboard", "React", "Provider", "value", "TranslationsProvider", "ElevationProvider", "elevation", "DensityProvider", "density", "isUsingKeyboard", "body", "setAttribute", "removeAttribute", "composeEventHandlers", "useComposedRefs", "createContextScope", "DismissableLayer", "useId", "PopperPrimitive", "createPopperScope", "Portal", "PortalPrimitive", "Presence", "Primitive", "Slottable", "useControllableState", "VisuallyHiddenPrimitive", "React", "forwardRef", "useCallback", "useEffect", "useMemo", "useRef", "useState", "createTooltipContext", "createTooltipScope", "createContextScope", "createPopperScope", "usePopperScope", "DEFAULT_DELAY_DURATION", "TOOLTIP_OPEN", "TOOLTIP_NAME", "TooltipContextProvider", "useTooltipContext", "TooltipProvider", "props", "__scopeTooltip", "children", "open", "openProp", "defaultOpen", "onOpenChange", "disableHoverableContent", "delayDuration", "skipDelayDuration", "isOpenDelayedRef", "useRef", "isPointerInTransitRef", "skipDelayTimerRef", "useEffect", "skipDelayTimer", "current", "window", "clearTimeout", "popperScope", "trigger", "setTrigger", "useState", "content", "setContent", "side", "setSide", "undefined", "triggerRef", "handleTriggerChange", "useCallback", "nextTrigger", "nextContent", "nextSide", "contentId", "useId", "openTimerRef", "wasOpenDelayedRef", "handleOpenChange", "document", "dispatchEvent", "CustomEvent", "setTimeout", "setOpen", "useControllableState", "prop", "defaultProp", "onChange", "stateAttribute", "useMemo", "handleOpen", "handleClose", "handleDelayedOpen", "tx", "useThemeContext", "elevation", "useElevationContext", "React", "Root", "scope", "onTriggerChange", "onTriggerEnter", "onTriggerLeave", "onOpen", "onClose", "onPointerInTransitChange", "inTransit", "TooltipContent", "className", "TooltipArrow", "TooltipVirtualTrigger", "virtualRef", "displayName", "Anchor", "asChild", "TRIGGER_NAME", "TooltipTrigger", "forwardRef", "forwardedRef", "onInteract", "_delayDuration", "triggerProps", "context", "ref", "composedRefs", "useComposedRefs", "isPointerDownRef", "hasPointerMoveOpenedRef", "handlePointerUp", "removeEventListener", "Primitive", "button", "aria-describedby", "data-state", "onPointerMove", "composeEventHandlers", "event", "pointerType", "defaultPrevented", "onPointerLeave", "onPointerDown", "addEventListener", "once", "onFocus", "onBlur", "onClick", "PORTAL_NAME", "PortalProvider", "usePortalContext", "forceMount", "TooltipPortal", "container", "Presence", "present", "PortalPrimitive", "CONTENT_NAME", "portalContext", "contentProps", "TooltipContentImpl", "TooltipContentHoverable", "pointerGraceArea", "setPointerGraceArea", "handleRemoveGraceArea", "handleCreateGraceArea", "hoverTarget", "currentTarget", "exitPoint", "x", "clientX", "y", "clientY", "exitSide", "getExitSideFromRect", "getBoundingClientRect", "paddedExitPoints", "getPaddedExitPoints", "hoverTargetPoints", "getPointsFromRect", "graceArea", "getHull", "handleTriggerLeave", "handleContentLeave", "handleTrackPointerGrace", "target", "pointerPosition", "hasEnteredTarget", "contains", "isPointerOutsideGraceArea", "isPointInPolygon", "VisuallyHiddenContentContextProvider", "useVisuallyHiddenContentContext", "isInside", "ariaLabel", "onEscapeKeyDown", "onPointerDownOutside", "handleScroll", "capture", "DismissableLayer", "disableOutsidePointerEvents", "onFocusOutside", "preventDefault", "onDismiss", "Content", "style", "Slottable", "id", "role", "ARROW_NAME", "arrowProps", "visuallyHiddenContentContext", "Arrow", "point", "rect", "top", "Math", "abs", "bottom", "right", "left", "min", "Error", "padding", "push", "polygon", "inside", "i", "j", "length", "xi", "yi", "xj", "yj", "intersect", "points", "newPoints", "slice", "sort", "a", "b", "getHullPresorted", "upperHull", "p", "q", "r", "pop", "lowerHull", "concat", "Tooltip", "Provider", "Trigger", "ErrorStackParser", "React", "mx", "parseCaptureOwnerStack", "stack", "length", "err", "Error", "parse", "ErrorStack", "error", "frames", "framesProp", "div", "className", "map", "frame", "i", "isLast", "local", "fileName", "parseLocalFrame", "lineNumber", "columnNumber", "undefined", "name", "functionName", "key", "a", "href", "span", "fileUrl", "line", "col", "pathname", "URL", "startsWith", "localPath", "slice", "split", "pop", "useElevationContext", "propsElevation", "elevation", "useContext", "ElevationContext"]
7
+ }