@buoy-gg/shared-ui 7.0.35 → 7.0.38

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 (332) hide show
  1. package/README.md +33 -26
  2. package/floating.d.ts +1 -0
  3. package/floating.js +2 -0
  4. package/lib/commonjs/JsModal.js +16 -1
  5. package/lib/commonjs/JsModal.web.js +16 -1
  6. package/lib/commonjs/dataViewer/CyberpunkInput.js +6 -1
  7. package/lib/commonjs/dataViewer/LiveExplorer.js +28 -16
  8. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  9. package/lib/commonjs/icons/ReactQueryIcon.js +9 -161
  10. package/lib/commonjs/icons/SentryBugIcon.js +9 -171
  11. package/lib/commonjs/icons/index.js +7 -0
  12. package/lib/commonjs/index.js +105 -6
  13. package/lib/commonjs/license/AccountSetup.js +56 -0
  14. package/lib/commonjs/license/AccountSetup.web.js +81 -0
  15. package/lib/commonjs/license/FeatureGate.js +10 -43
  16. package/lib/commonjs/license/FreeAccountPrompt.js +35 -12
  17. package/lib/commonjs/license/index.js +0 -6
  18. package/lib/commonjs/license/licenseModule.js +56 -36
  19. package/lib/commonjs/license/tierLimits.js +12 -63
  20. package/lib/commonjs/storage/devToolsStorageKeys.js +8 -1
  21. package/lib/commonjs/stores/BaseEventStore.js +21 -5
  22. package/lib/commonjs/stores/createToolStore.js +21 -3
  23. package/lib/commonjs/stores/floatingToolStore.js +71 -0
  24. package/lib/commonjs/stores/floatingToolStore.test.js +112 -0
  25. package/lib/commonjs/sync/keyedArrays.js +209 -0
  26. package/lib/commonjs/sync/toolActionRegistry.js +85 -2
  27. package/lib/commonjs/sync/toolAttention.test.js +51 -0
  28. package/lib/commonjs/sync/toolUiBridge.js +58 -0
  29. package/lib/commonjs/sync/typedEdit.js +228 -0
  30. package/lib/commonjs/sync/valuePath.js +337 -0
  31. package/lib/commonjs/sync/valueShape.js +161 -0
  32. package/lib/commonjs/ui/backgrounds/README.md +52 -0
  33. package/lib/commonjs/ui/backgrounds/ToolBackground.js +4 -2
  34. package/lib/commonjs/ui/backgrounds/index.js +8 -1
  35. package/lib/commonjs/ui/backgrounds/registry.js +8 -0
  36. package/lib/commonjs/ui/backgrounds/variants/wormhole/motion.js +48 -0
  37. package/lib/commonjs/ui/backgrounds/variants/wormhole/textures.js +3 -0
  38. package/lib/commonjs/ui/backgrounds/variants/wormhole.js +133 -0
  39. package/lib/commonjs/ui/components/ClipboardHintBanner.js +5 -6
  40. package/lib/commonjs/ui/components/CompactRow.js +94 -74
  41. package/lib/commonjs/ui/components/DraggableHeader.js +16 -1
  42. package/lib/commonjs/ui/components/ExpandablePopover.js +38 -6
  43. package/lib/commonjs/ui/components/HeaderSearchButton.js +17 -4
  44. package/lib/commonjs/ui/floating/FloatingTool.js +1010 -0
  45. package/lib/commonjs/ui/floating/FloatingTool.web.js +591 -0
  46. package/lib/commonjs/ui/floating/FloatingToolHost.js +32 -0
  47. package/lib/commonjs/ui/floating/FloatingToolHost.web.js +28 -0
  48. package/lib/commonjs/ui/floating/index.js +105 -0
  49. package/lib/commonjs/ui/floating/index.web.js +105 -0
  50. package/lib/commonjs/ui/floating/onboardingConstants.js +70 -0
  51. package/lib/commonjs/ui/floating/onboardingConstants.web.js +34 -0
  52. package/lib/commonjs/ui/gameUI/constants/gameUIColors.js +3 -1
  53. package/lib/commonjs/ui/index.js +118 -2
  54. package/lib/commonjs/ui/night/nightTheme.js +10 -0
  55. package/lib/commonjs/ui/night/primitives.js +22 -5
  56. package/lib/commonjs/ui/otto/OttoSceneView.js +69 -0
  57. package/lib/commonjs/ui/otto/index.js +22 -0
  58. package/lib/commonjs/ui/otto/ottoEngine.js +10 -7
  59. package/lib/commonjs/ui/otto/ottoScenes.js +949 -0
  60. package/lib/commonjs/utils/minimalSuperJSON.js +13 -3
  61. package/lib/module/JsModal.js +16 -1
  62. package/lib/module/JsModal.web.js +16 -1
  63. package/lib/module/dataViewer/CyberpunkInput.js +6 -1
  64. package/lib/module/dataViewer/LiveExplorer.js +28 -16
  65. package/lib/module/hooks/safe-area-impl.js +1 -1
  66. package/lib/module/icons/ReactQueryIcon.js +9 -161
  67. package/lib/module/icons/SentryBugIcon.js +9 -171
  68. package/lib/module/icons/index.js +3 -1
  69. package/lib/module/index.js +8 -1
  70. package/lib/module/license/AccountSetup.js +52 -0
  71. package/lib/module/license/AccountSetup.web.js +77 -0
  72. package/lib/module/license/FeatureGate.js +10 -43
  73. package/lib/module/license/FreeAccountPrompt.js +35 -12
  74. package/lib/module/license/index.js +1 -1
  75. package/lib/module/license/licenseModule.js +50 -35
  76. package/lib/module/license/tierLimits.js +13 -63
  77. package/lib/module/storage/devToolsStorageKeys.js +8 -1
  78. package/lib/module/stores/BaseEventStore.js +21 -5
  79. package/lib/module/stores/createToolStore.js +21 -3
  80. package/lib/module/stores/floatingToolStore.js +61 -0
  81. package/lib/module/stores/floatingToolStore.test.js +111 -0
  82. package/lib/module/sync/keyedArrays.js +204 -0
  83. package/lib/module/sync/toolActionRegistry.js +84 -2
  84. package/lib/module/sync/toolAttention.test.js +50 -0
  85. package/lib/module/sync/toolUiBridge.js +55 -0
  86. package/lib/module/sync/typedEdit.js +220 -0
  87. package/lib/module/sync/valuePath.js +330 -0
  88. package/lib/module/sync/valueShape.js +153 -0
  89. package/lib/module/ui/backgrounds/README.md +52 -0
  90. package/lib/module/ui/backgrounds/ToolBackground.js +4 -2
  91. package/lib/module/ui/backgrounds/index.js +2 -1
  92. package/lib/module/ui/backgrounds/registry.js +8 -0
  93. package/lib/module/ui/backgrounds/variants/wormhole/motion.js +44 -0
  94. package/lib/module/ui/backgrounds/variants/wormhole/textures.js +3 -0
  95. package/lib/module/ui/backgrounds/variants/wormhole.js +129 -0
  96. package/lib/module/ui/components/ClipboardHintBanner.js +5 -6
  97. package/lib/module/ui/components/CompactRow.js +94 -74
  98. package/lib/module/ui/components/DraggableHeader.js +16 -1
  99. package/lib/module/ui/components/ExpandablePopover.js +38 -6
  100. package/lib/module/ui/components/HeaderSearchButton.js +17 -4
  101. package/lib/module/ui/floating/FloatingTool.js +1003 -0
  102. package/lib/module/ui/floating/FloatingTool.web.js +590 -0
  103. package/lib/module/ui/floating/FloatingToolHost.js +29 -0
  104. package/lib/module/ui/floating/FloatingToolHost.web.js +25 -0
  105. package/lib/module/ui/floating/index.js +6 -0
  106. package/lib/module/ui/floating/index.web.js +6 -0
  107. package/lib/module/ui/floating/onboardingConstants.js +64 -0
  108. package/lib/module/ui/floating/onboardingConstants.web.js +27 -0
  109. package/lib/module/ui/gameUI/constants/gameUIColors.js +3 -1
  110. package/lib/module/ui/index.js +5 -1
  111. package/lib/module/ui/night/nightTheme.js +10 -0
  112. package/lib/module/ui/night/primitives.js +22 -5
  113. package/lib/module/ui/otto/OttoSceneView.js +64 -0
  114. package/lib/module/ui/otto/index.js +3 -1
  115. package/lib/module/ui/otto/ottoEngine.js +10 -7
  116. package/lib/module/ui/otto/ottoScenes.js +942 -0
  117. package/lib/module/utils/minimalSuperJSON.js +13 -3
  118. package/lib/typescript/commonjs/JsModal.d.ts +43 -2
  119. package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
  120. package/lib/typescript/commonjs/JsModal.web.d.ts +5 -2
  121. package/lib/typescript/commonjs/JsModal.web.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/dataViewer/CyberpunkInput.d.ts.map +1 -1
  123. package/lib/typescript/commonjs/dataViewer/LiveExplorer.d.ts.map +1 -1
  124. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  125. package/lib/typescript/commonjs/icons/ReactQueryIcon.d.ts +1 -2
  126. package/lib/typescript/commonjs/icons/ReactQueryIcon.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/icons/SentryBugIcon.d.ts +1 -2
  128. package/lib/typescript/commonjs/icons/SentryBugIcon.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/icons/index.d.ts +1 -1
  130. package/lib/typescript/commonjs/icons/index.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/index.d.ts +8 -1
  132. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/license/AccountSetup.d.ts +4 -0
  134. package/lib/typescript/commonjs/license/AccountSetup.d.ts.map +1 -0
  135. package/lib/typescript/commonjs/license/AccountSetup.web.d.ts +2 -0
  136. package/lib/typescript/commonjs/license/AccountSetup.web.d.ts.map +1 -0
  137. package/lib/typescript/commonjs/license/FeatureGate.d.ts +3 -19
  138. package/lib/typescript/commonjs/license/FeatureGate.d.ts.map +1 -1
  139. package/lib/typescript/commonjs/license/FreeAccountPrompt.d.ts +8 -11
  140. package/lib/typescript/commonjs/license/FreeAccountPrompt.d.ts.map +1 -1
  141. package/lib/typescript/commonjs/license/index.d.ts +1 -1
  142. package/lib/typescript/commonjs/license/index.d.ts.map +1 -1
  143. package/lib/typescript/commonjs/license/licenseModule.d.ts +18 -31
  144. package/lib/typescript/commonjs/license/licenseModule.d.ts.map +1 -1
  145. package/lib/typescript/commonjs/license/tierLimits.d.ts +9 -52
  146. package/lib/typescript/commonjs/license/tierLimits.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +6 -0
  148. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/stores/BaseEventStore.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/stores/createToolStore.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/stores/floatingToolStore.d.ts +27 -0
  152. package/lib/typescript/commonjs/stores/floatingToolStore.d.ts.map +1 -0
  153. package/lib/typescript/commonjs/stores/floatingToolStore.test.d.ts +2 -0
  154. package/lib/typescript/commonjs/stores/floatingToolStore.test.d.ts.map +1 -0
  155. package/lib/typescript/commonjs/sync/keyedArrays.d.ts +35 -0
  156. package/lib/typescript/commonjs/sync/keyedArrays.d.ts.map +1 -0
  157. package/lib/typescript/commonjs/sync/toolActionRegistry.d.ts +4 -32
  158. package/lib/typescript/commonjs/sync/toolActionRegistry.d.ts.map +1 -1
  159. package/lib/typescript/commonjs/sync/toolAttention.test.d.ts +2 -0
  160. package/lib/typescript/commonjs/sync/toolAttention.test.d.ts.map +1 -0
  161. package/lib/typescript/commonjs/sync/toolUiBridge.d.ts +25 -0
  162. package/lib/typescript/commonjs/sync/toolUiBridge.d.ts.map +1 -1
  163. package/lib/typescript/commonjs/sync/typedEdit.d.ts +70 -0
  164. package/lib/typescript/commonjs/sync/typedEdit.d.ts.map +1 -0
  165. package/lib/typescript/commonjs/sync/valuePath.d.ts +52 -0
  166. package/lib/typescript/commonjs/sync/valuePath.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/sync/valueShape.d.ts +77 -0
  168. package/lib/typescript/commonjs/sync/valueShape.d.ts.map +1 -0
  169. package/lib/typescript/commonjs/ui/backgrounds/ToolBackground.d.ts +7 -1
  170. package/lib/typescript/commonjs/ui/backgrounds/ToolBackground.d.ts.map +1 -1
  171. package/lib/typescript/commonjs/ui/backgrounds/index.d.ts +2 -1
  172. package/lib/typescript/commonjs/ui/backgrounds/index.d.ts.map +1 -1
  173. package/lib/typescript/commonjs/ui/backgrounds/registry.d.ts.map +1 -1
  174. package/lib/typescript/commonjs/ui/backgrounds/types.d.ts +11 -1
  175. package/lib/typescript/commonjs/ui/backgrounds/types.d.ts.map +1 -1
  176. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/motion.d.ts +24 -0
  177. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/motion.d.ts.map +1 -0
  178. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/textures.d.ts +13 -0
  179. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/textures.d.ts.map +1 -0
  180. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole.d.ts +3 -0
  181. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole.d.ts.map +1 -0
  182. package/lib/typescript/commonjs/ui/components/ClipboardHintBanner.d.ts.map +1 -1
  183. package/lib/typescript/commonjs/ui/components/CompactRow.d.ts +8 -1
  184. package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +1 -1
  185. package/lib/typescript/commonjs/ui/components/DraggableHeader.d.ts +4 -1
  186. package/lib/typescript/commonjs/ui/components/DraggableHeader.d.ts.map +1 -1
  187. package/lib/typescript/commonjs/ui/components/ExpandablePopover.d.ts +14 -1
  188. package/lib/typescript/commonjs/ui/components/ExpandablePopover.d.ts.map +1 -1
  189. package/lib/typescript/commonjs/ui/components/HeaderSearchButton.d.ts +7 -1
  190. package/lib/typescript/commonjs/ui/components/HeaderSearchButton.d.ts.map +1 -1
  191. package/lib/typescript/commonjs/ui/floating/FloatingTool.d.ts +79 -0
  192. package/lib/typescript/commonjs/ui/floating/FloatingTool.d.ts.map +1 -0
  193. package/lib/typescript/commonjs/ui/floating/FloatingTool.web.d.ts +64 -0
  194. package/lib/typescript/commonjs/ui/floating/FloatingTool.web.d.ts.map +1 -0
  195. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.d.ts +3 -0
  196. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.d.ts.map +1 -0
  197. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.web.d.ts +3 -0
  198. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.web.d.ts.map +1 -0
  199. package/lib/typescript/commonjs/ui/floating/index.d.ts +7 -0
  200. package/lib/typescript/commonjs/ui/floating/index.d.ts.map +1 -0
  201. package/lib/typescript/commonjs/ui/floating/index.web.d.ts +7 -0
  202. package/lib/typescript/commonjs/ui/floating/index.web.d.ts.map +1 -0
  203. package/lib/typescript/commonjs/ui/floating/onboardingConstants.d.ts +30 -0
  204. package/lib/typescript/commonjs/ui/floating/onboardingConstants.d.ts.map +1 -0
  205. package/lib/typescript/commonjs/ui/floating/onboardingConstants.web.d.ts +13 -0
  206. package/lib/typescript/commonjs/ui/floating/onboardingConstants.web.d.ts.map +1 -0
  207. package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts +2 -0
  208. package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts.map +1 -1
  209. package/lib/typescript/commonjs/ui/index.d.ts +6 -0
  210. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  211. package/lib/typescript/commonjs/ui/night/nightTheme.d.ts +10 -0
  212. package/lib/typescript/commonjs/ui/night/nightTheme.d.ts.map +1 -1
  213. package/lib/typescript/commonjs/ui/night/primitives.d.ts +10 -3
  214. package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +1 -1
  215. package/lib/typescript/commonjs/ui/otto/OttoSceneView.d.ts +30 -0
  216. package/lib/typescript/commonjs/ui/otto/OttoSceneView.d.ts.map +1 -0
  217. package/lib/typescript/commonjs/ui/otto/index.d.ts +2 -0
  218. package/lib/typescript/commonjs/ui/otto/index.d.ts.map +1 -1
  219. package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts +1 -1
  220. package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts.map +1 -1
  221. package/lib/typescript/commonjs/ui/otto/ottoScenes.d.ts +75 -0
  222. package/lib/typescript/commonjs/ui/otto/ottoScenes.d.ts.map +1 -0
  223. package/lib/typescript/commonjs/utils/minimalSuperJSON.d.ts.map +1 -1
  224. package/lib/typescript/module/JsModal.d.ts +43 -2
  225. package/lib/typescript/module/JsModal.d.ts.map +1 -1
  226. package/lib/typescript/module/JsModal.web.d.ts +5 -2
  227. package/lib/typescript/module/JsModal.web.d.ts.map +1 -1
  228. package/lib/typescript/module/dataViewer/CyberpunkInput.d.ts.map +1 -1
  229. package/lib/typescript/module/dataViewer/LiveExplorer.d.ts.map +1 -1
  230. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  231. package/lib/typescript/module/icons/ReactQueryIcon.d.ts +1 -2
  232. package/lib/typescript/module/icons/ReactQueryIcon.d.ts.map +1 -1
  233. package/lib/typescript/module/icons/SentryBugIcon.d.ts +1 -2
  234. package/lib/typescript/module/icons/SentryBugIcon.d.ts.map +1 -1
  235. package/lib/typescript/module/icons/index.d.ts +1 -1
  236. package/lib/typescript/module/icons/index.d.ts.map +1 -1
  237. package/lib/typescript/module/index.d.ts +8 -1
  238. package/lib/typescript/module/index.d.ts.map +1 -1
  239. package/lib/typescript/module/license/AccountSetup.d.ts +4 -0
  240. package/lib/typescript/module/license/AccountSetup.d.ts.map +1 -0
  241. package/lib/typescript/module/license/AccountSetup.web.d.ts +2 -0
  242. package/lib/typescript/module/license/AccountSetup.web.d.ts.map +1 -0
  243. package/lib/typescript/module/license/FeatureGate.d.ts +3 -19
  244. package/lib/typescript/module/license/FeatureGate.d.ts.map +1 -1
  245. package/lib/typescript/module/license/FreeAccountPrompt.d.ts +8 -11
  246. package/lib/typescript/module/license/FreeAccountPrompt.d.ts.map +1 -1
  247. package/lib/typescript/module/license/index.d.ts +1 -1
  248. package/lib/typescript/module/license/index.d.ts.map +1 -1
  249. package/lib/typescript/module/license/licenseModule.d.ts +18 -31
  250. package/lib/typescript/module/license/licenseModule.d.ts.map +1 -1
  251. package/lib/typescript/module/license/tierLimits.d.ts +9 -52
  252. package/lib/typescript/module/license/tierLimits.d.ts.map +1 -1
  253. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +6 -0
  254. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +1 -1
  255. package/lib/typescript/module/stores/BaseEventStore.d.ts.map +1 -1
  256. package/lib/typescript/module/stores/createToolStore.d.ts.map +1 -1
  257. package/lib/typescript/module/stores/floatingToolStore.d.ts +27 -0
  258. package/lib/typescript/module/stores/floatingToolStore.d.ts.map +1 -0
  259. package/lib/typescript/module/stores/floatingToolStore.test.d.ts +2 -0
  260. package/lib/typescript/module/stores/floatingToolStore.test.d.ts.map +1 -0
  261. package/lib/typescript/module/sync/keyedArrays.d.ts +35 -0
  262. package/lib/typescript/module/sync/keyedArrays.d.ts.map +1 -0
  263. package/lib/typescript/module/sync/toolActionRegistry.d.ts +4 -32
  264. package/lib/typescript/module/sync/toolActionRegistry.d.ts.map +1 -1
  265. package/lib/typescript/module/sync/toolAttention.test.d.ts +2 -0
  266. package/lib/typescript/module/sync/toolAttention.test.d.ts.map +1 -0
  267. package/lib/typescript/module/sync/toolUiBridge.d.ts +25 -0
  268. package/lib/typescript/module/sync/toolUiBridge.d.ts.map +1 -1
  269. package/lib/typescript/module/sync/typedEdit.d.ts +70 -0
  270. package/lib/typescript/module/sync/typedEdit.d.ts.map +1 -0
  271. package/lib/typescript/module/sync/valuePath.d.ts +52 -0
  272. package/lib/typescript/module/sync/valuePath.d.ts.map +1 -0
  273. package/lib/typescript/module/sync/valueShape.d.ts +77 -0
  274. package/lib/typescript/module/sync/valueShape.d.ts.map +1 -0
  275. package/lib/typescript/module/ui/backgrounds/ToolBackground.d.ts +7 -1
  276. package/lib/typescript/module/ui/backgrounds/ToolBackground.d.ts.map +1 -1
  277. package/lib/typescript/module/ui/backgrounds/index.d.ts +2 -1
  278. package/lib/typescript/module/ui/backgrounds/index.d.ts.map +1 -1
  279. package/lib/typescript/module/ui/backgrounds/registry.d.ts.map +1 -1
  280. package/lib/typescript/module/ui/backgrounds/types.d.ts +11 -1
  281. package/lib/typescript/module/ui/backgrounds/types.d.ts.map +1 -1
  282. package/lib/typescript/module/ui/backgrounds/variants/wormhole/motion.d.ts +24 -0
  283. package/lib/typescript/module/ui/backgrounds/variants/wormhole/motion.d.ts.map +1 -0
  284. package/lib/typescript/module/ui/backgrounds/variants/wormhole/textures.d.ts +13 -0
  285. package/lib/typescript/module/ui/backgrounds/variants/wormhole/textures.d.ts.map +1 -0
  286. package/lib/typescript/module/ui/backgrounds/variants/wormhole.d.ts +3 -0
  287. package/lib/typescript/module/ui/backgrounds/variants/wormhole.d.ts.map +1 -0
  288. package/lib/typescript/module/ui/components/ClipboardHintBanner.d.ts.map +1 -1
  289. package/lib/typescript/module/ui/components/CompactRow.d.ts +8 -1
  290. package/lib/typescript/module/ui/components/CompactRow.d.ts.map +1 -1
  291. package/lib/typescript/module/ui/components/DraggableHeader.d.ts +4 -1
  292. package/lib/typescript/module/ui/components/DraggableHeader.d.ts.map +1 -1
  293. package/lib/typescript/module/ui/components/ExpandablePopover.d.ts +14 -1
  294. package/lib/typescript/module/ui/components/ExpandablePopover.d.ts.map +1 -1
  295. package/lib/typescript/module/ui/components/HeaderSearchButton.d.ts +7 -1
  296. package/lib/typescript/module/ui/components/HeaderSearchButton.d.ts.map +1 -1
  297. package/lib/typescript/module/ui/floating/FloatingTool.d.ts +79 -0
  298. package/lib/typescript/module/ui/floating/FloatingTool.d.ts.map +1 -0
  299. package/lib/typescript/module/ui/floating/FloatingTool.web.d.ts +64 -0
  300. package/lib/typescript/module/ui/floating/FloatingTool.web.d.ts.map +1 -0
  301. package/lib/typescript/module/ui/floating/FloatingToolHost.d.ts +3 -0
  302. package/lib/typescript/module/ui/floating/FloatingToolHost.d.ts.map +1 -0
  303. package/lib/typescript/module/ui/floating/FloatingToolHost.web.d.ts +3 -0
  304. package/lib/typescript/module/ui/floating/FloatingToolHost.web.d.ts.map +1 -0
  305. package/lib/typescript/module/ui/floating/index.d.ts +7 -0
  306. package/lib/typescript/module/ui/floating/index.d.ts.map +1 -0
  307. package/lib/typescript/module/ui/floating/index.web.d.ts +7 -0
  308. package/lib/typescript/module/ui/floating/index.web.d.ts.map +1 -0
  309. package/lib/typescript/module/ui/floating/onboardingConstants.d.ts +30 -0
  310. package/lib/typescript/module/ui/floating/onboardingConstants.d.ts.map +1 -0
  311. package/lib/typescript/module/ui/floating/onboardingConstants.web.d.ts +13 -0
  312. package/lib/typescript/module/ui/floating/onboardingConstants.web.d.ts.map +1 -0
  313. package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts +2 -0
  314. package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts.map +1 -1
  315. package/lib/typescript/module/ui/index.d.ts +6 -0
  316. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  317. package/lib/typescript/module/ui/night/nightTheme.d.ts +10 -0
  318. package/lib/typescript/module/ui/night/nightTheme.d.ts.map +1 -1
  319. package/lib/typescript/module/ui/night/primitives.d.ts +10 -3
  320. package/lib/typescript/module/ui/night/primitives.d.ts.map +1 -1
  321. package/lib/typescript/module/ui/otto/OttoSceneView.d.ts +30 -0
  322. package/lib/typescript/module/ui/otto/OttoSceneView.d.ts.map +1 -0
  323. package/lib/typescript/module/ui/otto/index.d.ts +2 -0
  324. package/lib/typescript/module/ui/otto/index.d.ts.map +1 -1
  325. package/lib/typescript/module/ui/otto/ottoEngine.d.ts +1 -1
  326. package/lib/typescript/module/ui/otto/ottoEngine.d.ts.map +1 -1
  327. package/lib/typescript/module/ui/otto/ottoScenes.d.ts +75 -0
  328. package/lib/typescript/module/ui/otto/ottoScenes.d.ts.map +1 -0
  329. package/lib/typescript/module/utils/minimalSuperJSON.d.ts.map +1 -1
  330. package/package.json +25 -5
  331. package/scripts/generate-wormhole-textures.cjs +261 -0
  332. package/scripts/test-wormhole-motion.cjs +59 -0
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Wormhole = void 0;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _absoluteFill = require("../../../utils/absoluteFill.js");
10
+ var _primitives = require("../primitives.js");
11
+ var _textures = require("./wormhole/textures.js");
12
+ var _motion = require("./wormhole/motion.js");
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ const fill = {
15
+ width: "100%",
16
+ height: "100%"
17
+ };
18
+
19
+ /** Dependency-free mobile preview, textured from the production GLSL wormhole.
20
+ * This is a native-composited approximation, not a live volumetric shader.
21
+ * One Animated clock, no JS frame callbacks, no third-party native renderer.
22
+ *
23
+ * Two copies of a self-similar cloud sheet zoom toward the viewer one period
24
+ * apart; because the sheet is the same picture at ×2 and +21°, the copies are
25
+ * pixel-identical wherever they overlap and their crossfade is invisible (see
26
+ * motion.ts). The destination never zooms: it is a static cut of the same
27
+ * frame, drawn above the sheets. Geometry follows the window; resizing a tool
28
+ * crops rather than stretches it. The eye lands on `focus` (the dial pins it
29
+ * to the hub); the plane is always bigger than any surface, so moving the
30
+ * eye only changes which part of the tunnel is in view.
31
+ */
32
+ /** Where the eye sits when the host doesn't pin it: a little right and above centre. */
33
+ const DEFAULT_FOCUS = {
34
+ x: 0.54,
35
+ y: 0.46
36
+ };
37
+ const Wormhole = exports.Wormhole = /*#__PURE__*/(0, _react.memo)(function Wormhole({
38
+ width,
39
+ height,
40
+ animated,
41
+ focus = DEFAULT_FOCUS
42
+ }) {
43
+ const window = (0, _reactNative.useWindowDimensions)();
44
+ // Default to still until the accessibility preference is known.
45
+ const [reduced, setReduced] = (0, _react.useState)(true);
46
+ (0, _react.useEffect)(() => {
47
+ let live = true;
48
+ let changed = false;
49
+ const subscription = _reactNative.AccessibilityInfo.addEventListener("reduceMotionChanged", value => {
50
+ changed = true;
51
+ setReduced(value);
52
+ });
53
+ void _reactNative.AccessibilityInfo.isReduceMotionEnabled().then(value => {
54
+ if (live && !changed) setReduced(value);
55
+ }).catch(() => {/* Keep the still scene when the preference is unavailable. */});
56
+ return () => {
57
+ live = false;
58
+ subscription.remove();
59
+ };
60
+ }, []);
61
+ const moving = animated && !reduced;
62
+ const clock = (0, _primitives.useLoop)(_motion.WORMHOLE_CYCLE_MS, moving);
63
+ const diameter = Math.ceil(Math.hypot(window.width, window.height) * 1.08);
64
+ const plane = {
65
+ position: "absolute",
66
+ left: width * focus.x - diameter / 2,
67
+ top: height * focus.y - diameter / 2,
68
+ width: diameter,
69
+ height: diameter
70
+ };
71
+ const camera = {
72
+ transform: [{
73
+ rotate: clock.interpolate({
74
+ inputRange: _motion.WORMHOLE_INPUT,
75
+ outputRange: _motion.WORMHOLE_CAMERA_ROTATION
76
+ })
77
+ }]
78
+ };
79
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
80
+ pointerEvents: "none",
81
+ style: [_absoluteFill.absoluteFill, {
82
+ overflow: "hidden",
83
+ backgroundColor: "#030a1c"
84
+ }],
85
+ children: moving ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
86
+ style: [plane, camera],
87
+ children: [_motion.WORMHOLE_SHELLS.map((shell, i) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
88
+ style: [_absoluteFill.absoluteFill, {
89
+ opacity: clock.interpolate({
90
+ inputRange: _motion.WORMHOLE_INPUT,
91
+ outputRange: shell.opacity
92
+ }),
93
+ transform: [{
94
+ scale: clock.interpolate({
95
+ inputRange: _motion.WORMHOLE_INPUT,
96
+ outputRange: shell.scale
97
+ })
98
+ }, {
99
+ rotate: clock.interpolate({
100
+ inputRange: _motion.WORMHOLE_INPUT,
101
+ outputRange: shell.rotate
102
+ })
103
+ }]
104
+ }],
105
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
106
+ source: _textures.WORMHOLE_SHEET,
107
+ resizeMode: "stretch",
108
+ fadeDuration: 0,
109
+ style: fill
110
+ })
111
+ }, i)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
112
+ source: _textures.WORMHOLE_CORE,
113
+ resizeMode: "stretch",
114
+ fadeDuration: 0,
115
+ style: {
116
+ position: "absolute",
117
+ left: diameter / 4,
118
+ top: diameter / 4,
119
+ width: diameter / 2,
120
+ height: diameter / 2
121
+ }
122
+ })]
123
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
124
+ style: [plane, camera],
125
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
126
+ source: _textures.WORMHOLE_STILL,
127
+ resizeMode: "stretch",
128
+ fadeDuration: 0,
129
+ style: fill
130
+ })
131
+ })
132
+ });
133
+ });
@@ -7,6 +7,7 @@ exports.ClipboardHintBanner = void 0;
7
7
  var _react = require("react");
8
8
  var _reactNative = require("react-native");
9
9
  var _index = require("../gameUI/index.js");
10
+ var _lucideIcons = require("../../icons/lucide-icons.js");
10
11
  var _fonts = require("../fonts.js");
11
12
  var _jsxRuntime = require("react/jsx-runtime");
12
13
  /**
@@ -43,9 +44,10 @@ const ClipboardHintBanner = exports.ClipboardHintBanner = /*#__PURE__*/(0, _reac
43
44
  style: styles.inner,
44
45
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
45
46
  style: styles.iconContainer,
46
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
47
- style: styles.iconText,
48
- children: "\uD83D\uDCCB"
47
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_lucideIcons.Copy, {
48
+ size: 22,
49
+ color: _index.gameUIColors.info,
50
+ strokeWidth: 2
49
51
  })
50
52
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
51
53
  style: styles.messageContainer,
@@ -110,9 +112,6 @@ const styles = _reactNative.StyleSheet.create({
110
112
  justifyContent: "center",
111
113
  alignItems: "center"
112
114
  },
113
- iconText: {
114
- fontSize: 24
115
- },
116
115
  messageContainer: {
117
116
  gap: 8
118
117
  },
@@ -32,7 +32,8 @@ function CompactRow({
32
32
  statusSublabelTestID,
33
33
  primaryTestID,
34
34
  secondaryTestID,
35
- accessibilityLabel
35
+ accessibilityLabel,
36
+ trailingAction
36
37
  }) {
37
38
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
38
39
  style: [styles.rowWrapper, isExpanded && styles.rowWrapperExpanded],
@@ -45,83 +46,90 @@ function CompactRow({
45
46
  borderBottomColor: expandedGlowColor || _nightTheme.night.color.accent,
46
47
  shadowColor: expandedGlowColor || _nightTheme.night.color.accent
47
48
  }]],
48
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
49
- onPress: onPress,
50
- activeOpacity: 0.8,
51
- disabled: disabled || !onPress,
52
- testID: testID,
53
- accessibilityLabel: accessibilityLabel
54
- // Label alone is not enough on Fabric: a row that announces text but
55
- // no role reads to VoiceOver as static content, so the fact that it
56
- // opens something is only discoverable by tapping it.
57
- ,
58
- accessibilityRole: onPress ? "button" : undefined,
59
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
60
- style: styles.rowContent,
61
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
62
- style: styles.statusSection,
63
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
64
- style: [styles.statusDot, {
65
- backgroundColor: statusDotColor
66
- }]
49
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
50
+ style: styles.headerRow,
51
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
52
+ style: styles.headerPress,
53
+ onPress: onPress,
54
+ activeOpacity: 0.8,
55
+ disabled: disabled || !onPress,
56
+ testID: testID,
57
+ accessibilityLabel: accessibilityLabel
58
+ // Label alone is not enough on Fabric: a row that announces text but
59
+ // no role reads to VoiceOver as static content, so the fact that it
60
+ // opens something is only discoverable by tapping it.
61
+ ,
62
+ accessibilityRole: onPress ? "button" : undefined,
63
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
64
+ style: styles.rowContent,
65
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
66
+ style: styles.statusSection,
67
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
68
+ style: [styles.statusDot, {
69
+ backgroundColor: statusDotColor
70
+ }]
71
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
72
+ style: styles.statusInfo,
73
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
74
+ style: [styles.statusLabel, {
75
+ color: statusDotColor
76
+ }],
77
+ numberOfLines: 1,
78
+ testID: statusTestID,
79
+ children: statusLabel
80
+ }), statusSublabel ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
81
+ style: styles.observerText,
82
+ numberOfLines: 1,
83
+ testID: statusSublabelTestID,
84
+ children: statusSublabel
85
+ }) : null]
86
+ })]
67
87
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
68
- style: styles.statusInfo,
88
+ style: styles.querySection,
69
89
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
70
- style: [styles.statusLabel, {
71
- color: statusDotColor
72
- }],
73
- numberOfLines: 1,
74
- testID: statusTestID,
75
- children: statusLabel
76
- }), statusSublabel ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
77
- style: styles.observerText,
78
- numberOfLines: 1,
79
- testID: statusSublabelTestID,
80
- children: statusSublabel
90
+ style: styles.queryHash,
91
+ numberOfLines: isExpanded ? undefined : 2,
92
+ testID: primaryTestID,
93
+ children: primaryText
94
+ }), !isExpanded && (secondaryText || secondaryAccessory) ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
95
+ style: styles.secondaryRow,
96
+ children: [secondaryText ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
97
+ style: styles.secondaryText,
98
+ numberOfLines: 1,
99
+ testID: secondaryTestID,
100
+ children: secondaryText
101
+ }) : null, secondaryAccessory]
81
102
  }) : null]
103
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
104
+ style: styles.rightSection,
105
+ children: [(customBadge || badgeText !== undefined || !isExpanded && bottomRightText) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
106
+ style: styles.badgeContainer,
107
+ children: [customBadge ? customBadge : badgeText !== undefined ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
108
+ style: [styles.statusBadge, {
109
+ color: badgeColor || statusDotColor
110
+ }],
111
+ children: badgeText
112
+ }) : null, !isExpanded && bottomRightText ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
113
+ style: styles.bottomRightText,
114
+ numberOfLines: 1,
115
+ children: bottomRightText
116
+ }) : null]
117
+ }), showChevron && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
118
+ style: styles.chevronContainer,
119
+ children: isExpanded ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.ChevronDown, {
120
+ size: 14,
121
+ color: _nightTheme.night.color.textTertiary
122
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.ChevronRight, {
123
+ size: 14,
124
+ color: _nightTheme.night.color.textTertiary
125
+ })
126
+ })]
82
127
  })]
83
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
84
- style: styles.querySection,
85
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
86
- style: styles.queryHash,
87
- numberOfLines: isExpanded ? undefined : 2,
88
- testID: primaryTestID,
89
- children: primaryText
90
- }), !isExpanded && (secondaryText || secondaryAccessory) ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
91
- style: styles.secondaryRow,
92
- children: [secondaryText ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
93
- style: styles.secondaryText,
94
- numberOfLines: 1,
95
- testID: secondaryTestID,
96
- children: secondaryText
97
- }) : null, secondaryAccessory]
98
- }) : null]
99
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
100
- style: styles.rightSection,
101
- children: [(customBadge || badgeText !== undefined || !isExpanded && bottomRightText) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
102
- style: styles.badgeContainer,
103
- children: [customBadge ? customBadge : badgeText !== undefined ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
104
- style: [styles.statusBadge, {
105
- color: badgeColor || statusDotColor
106
- }],
107
- children: badgeText
108
- }) : null, !isExpanded && bottomRightText ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
109
- style: styles.bottomRightText,
110
- numberOfLines: 1,
111
- children: bottomRightText
112
- }) : null]
113
- }), showChevron && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
114
- style: styles.chevronContainer,
115
- children: isExpanded ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.ChevronDown, {
116
- size: 14,
117
- color: _nightTheme.night.color.textTertiary
118
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.ChevronRight, {
119
- size: 14,
120
- color: _nightTheme.night.color.textTertiary
121
- })
122
- })]
123
- })]
124
- })
128
+ })
129
+ }), trailingAction ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
130
+ style: styles.trailingAction,
131
+ children: trailingAction
132
+ }) : null]
125
133
  }), isExpanded && expandedContent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
126
134
  style: styles.expandedContent,
127
135
  children: expandedContent
@@ -189,6 +197,18 @@ const styles = _reactNative.StyleSheet.create({
189
197
  shadowRadius: 20,
190
198
  elevation: 10
191
199
  },
200
+ headerRow: {
201
+ flexDirection: "row",
202
+ alignItems: "center"
203
+ },
204
+ headerPress: {
205
+ flex: 1,
206
+ minWidth: 0
207
+ },
208
+ trailingAction: {
209
+ marginLeft: 8,
210
+ justifyContent: "center"
211
+ },
192
212
  rowContent: {
193
213
  flexDirection: "row",
194
214
  alignItems: "center",
@@ -40,6 +40,9 @@ const DraggableHeader = exports.DraggableHeader = /*#__PURE__*/(0, _react.memo)(
40
40
  },
41
41
  style,
42
42
  enabled = true,
43
+ claimOnMove = true,
44
+ onLayout,
45
+ hitSlop,
43
46
  maxOverflowX = 0,
44
47
  testID,
45
48
  accessibilityLabel
@@ -76,6 +79,7 @@ const DraggableHeader = exports.DraggableHeader = /*#__PURE__*/(0, _react.memo)(
76
79
  elementSize,
77
80
  minPosition,
78
81
  enabled,
82
+ claimOnMove,
79
83
  maxOverflowX
80
84
  });
81
85
  propsRef.current = {
@@ -88,6 +92,7 @@ const DraggableHeader = exports.DraggableHeader = /*#__PURE__*/(0, _react.memo)(
88
92
  elementSize,
89
93
  minPosition,
90
94
  enabled,
95
+ claimOnMove,
91
96
  maxOverflowX
92
97
  };
93
98
  const panResponder = (0, _react.useMemo)(() => {
@@ -99,7 +104,7 @@ const DraggableHeader = exports.DraggableHeader = /*#__PURE__*/(0, _react.memo)(
99
104
  };
100
105
  return _reactNative.PanResponder.create({
101
106
  onStartShouldSetPanResponder: () => propsRef.current.enabled,
102
- onMoveShouldSetPanResponder: (_, g) => propsRef.current.enabled && (Math.abs(g.dx) > 1 || Math.abs(g.dy) > 1),
107
+ onMoveShouldSetPanResponder: (_, g) => propsRef.current.enabled && propsRef.current.claimOnMove && (Math.abs(g.dx) > 1 || Math.abs(g.dy) > 1),
103
108
  onPanResponderTerminationRequest: () => false,
104
109
  onPanResponderGrant: () => {
105
110
  isDraggingRef.current = false;
@@ -192,8 +197,18 @@ const DraggableHeader = exports.DraggableHeader = /*#__PURE__*/(0, _react.memo)(
192
197
  }, [position]);
193
198
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
194
199
  style: style,
200
+ onLayout: onLayout,
201
+ hitSlop: hitSlop,
195
202
  testID: testID,
196
203
  accessibilityLabel: accessibilityLabel,
204
+ accessibilityRole: onTap ? "button" : undefined,
205
+ accessibilityActions: onTap ? [{
206
+ name: "activate",
207
+ label: "Hide or show"
208
+ }] : undefined,
209
+ onAccessibilityAction: event => {
210
+ if (event.nativeEvent.actionName === "activate") propsRef.current.onTap?.();
211
+ },
197
212
  ...panResponder.panHandlers,
198
213
  children: children
199
214
  });
@@ -32,7 +32,8 @@ function CollapsedPeek({
32
32
  height,
33
33
  customContent,
34
34
  label,
35
- testID
35
+ testID,
36
+ attention
36
37
  }) {
37
38
  // When progress=0 (collapsed): peek is visible (opacity=1, scale=1)
38
39
  // When progress=1 (expanded): peek is hidden (opacity=0, scale=0.9)
@@ -52,17 +53,17 @@ function CollapsedPeek({
52
53
  scale
53
54
  }]
54
55
  }],
55
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
56
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
56
57
  onPress: onPress,
57
58
  activeOpacity: 0.8,
58
59
  style: [styles.peekButton, {
59
60
  width,
60
61
  height
61
62
  }],
62
- accessibilityLabel: label || `Expand options`,
63
+ accessibilityLabel: attention?.label ? `${label || "Expand options"} — ${attention.label}` : label || `Expand options`,
63
64
  accessibilityRole: "button",
64
65
  testID: testID,
65
- children: customContent || /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
66
+ children: [customContent || /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
66
67
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_index.ChevronUp, {
67
68
  size: 12,
68
69
  color: _gameUIColors.buoyColors.textMuted,
@@ -71,7 +72,17 @@ function CollapsedPeek({
71
72
  style: styles.peekCount,
72
73
  children: count
73
74
  })]
74
- })
75
+ }), attention ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
76
+ pointerEvents: "none",
77
+ testID: testID ? `${testID}-attention` : undefined,
78
+ style: [styles.peekAttention, {
79
+ backgroundColor: attention.color
80
+ }],
81
+ children: attention.glyph ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
82
+ style: styles.peekAttentionGlyph,
83
+ children: attention.glyph
84
+ }) : null
85
+ }) : null]
75
86
  })
76
87
  });
77
88
  }
@@ -141,6 +152,7 @@ function ExpandablePopover({
141
152
  defaultExpanded = false,
142
153
  collapsedContent,
143
154
  collapsedLabel,
155
+ attention = null,
144
156
  expandedStyle,
145
157
  persistState = false,
146
158
  storageKey,
@@ -270,7 +282,8 @@ function ExpandablePopover({
270
282
  height: peekHeight,
271
283
  customContent: collapsedContent,
272
284
  label: collapsedLabel,
273
- testID: testID
285
+ testID: testID,
286
+ attention: attention
274
287
  })
275
288
  })]
276
289
  });
@@ -281,6 +294,25 @@ function ExpandablePopover({
281
294
  // ============================================================================
282
295
 
283
296
  const styles = _reactNative.StyleSheet.create({
297
+ peekAttention: {
298
+ position: "absolute",
299
+ top: 2,
300
+ right: 2,
301
+ minWidth: 11,
302
+ height: 11,
303
+ borderRadius: 6,
304
+ paddingHorizontal: 2,
305
+ alignItems: "center",
306
+ justifyContent: "center",
307
+ borderWidth: 1.5,
308
+ borderColor: "#0C0C0C"
309
+ },
310
+ peekAttentionGlyph: {
311
+ color: "#000",
312
+ fontSize: 8,
313
+ fontWeight: "800",
314
+ lineHeight: 9
315
+ },
284
316
  container: {
285
317
  overflow: "visible",
286
318
  zIndex: 1000
@@ -7,25 +7,28 @@ exports.HeaderSearchButton = HeaderSearchButton;
7
7
  var _reactNative = require("react-native");
8
8
  var _index = require("../../icons/index.js");
9
9
  var _index2 = require("../gameUI/index.js");
10
+ var _nightTheme = require("../night/nightTheme.js");
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  function HeaderSearchButton({
12
13
  onPress,
13
14
  size = 14,
14
- color = _index2.gameUIColors.secondary,
15
+ color,
15
16
  style,
16
17
  accessibilityLabel = "Search",
17
- testID
18
+ testID,
19
+ variant = "plain"
18
20
  }) {
21
+ const chip = variant === "chip";
19
22
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
20
23
  onPress: onPress,
21
- style: [styles.button, style],
24
+ style: [chip ? styles.chip : styles.button, style],
22
25
  activeOpacity: 0.7,
23
26
  accessibilityRole: "button",
24
27
  accessibilityLabel: accessibilityLabel,
25
28
  testID: testID,
26
29
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.Search, {
27
30
  size: size,
28
- color: color
31
+ color: color ?? (chip ? _nightTheme.night.color.textSecondary : _index2.gameUIColors.secondary)
29
32
  })
30
33
  });
31
34
  }
@@ -33,5 +36,15 @@ const styles = _reactNative.StyleSheet.create({
33
36
  button: {
34
37
  padding: 8,
35
38
  borderRadius: 4
39
+ },
40
+ chip: {
41
+ width: 32,
42
+ height: 32,
43
+ borderRadius: 8,
44
+ backgroundColor: _nightTheme.night.color.buttonSurface,
45
+ borderWidth: 1,
46
+ borderColor: _nightTheme.night.color.border,
47
+ alignItems: "center",
48
+ justifyContent: "center"
36
49
  }
37
50
  });