@buoy-gg/shared-ui 7.0.36 → 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 (284) 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/index.js +57 -6
  12. package/lib/commonjs/license/AccountSetup.js +56 -0
  13. package/lib/commonjs/license/AccountSetup.web.js +81 -0
  14. package/lib/commonjs/license/FeatureGate.js +10 -43
  15. package/lib/commonjs/license/FreeAccountPrompt.js +35 -12
  16. package/lib/commonjs/license/index.js +0 -6
  17. package/lib/commonjs/license/licenseModule.js +56 -36
  18. package/lib/commonjs/license/tierLimits.js +12 -63
  19. package/lib/commonjs/storage/devToolsStorageKeys.js +8 -1
  20. package/lib/commonjs/stores/BaseEventStore.js +21 -5
  21. package/lib/commonjs/stores/createToolStore.js +21 -3
  22. package/lib/commonjs/stores/floatingToolStore.js +71 -0
  23. package/lib/commonjs/stores/floatingToolStore.test.js +112 -0
  24. package/lib/commonjs/sync/toolActionRegistry.js +85 -2
  25. package/lib/commonjs/ui/backgrounds/README.md +52 -0
  26. package/lib/commonjs/ui/backgrounds/ToolBackground.js +4 -2
  27. package/lib/commonjs/ui/backgrounds/index.js +8 -1
  28. package/lib/commonjs/ui/backgrounds/registry.js +8 -0
  29. package/lib/commonjs/ui/backgrounds/variants/wormhole/motion.js +48 -0
  30. package/lib/commonjs/ui/backgrounds/variants/wormhole/textures.js +3 -0
  31. package/lib/commonjs/ui/backgrounds/variants/wormhole.js +133 -0
  32. package/lib/commonjs/ui/components/ClipboardHintBanner.js +5 -6
  33. package/lib/commonjs/ui/components/CompactRow.js +94 -74
  34. package/lib/commonjs/ui/components/DraggableHeader.js +16 -1
  35. package/lib/commonjs/ui/components/HeaderSearchButton.js +17 -4
  36. package/lib/commonjs/ui/floating/FloatingTool.js +1010 -0
  37. package/lib/commonjs/ui/floating/FloatingTool.web.js +591 -0
  38. package/lib/commonjs/ui/floating/FloatingToolHost.js +32 -0
  39. package/lib/commonjs/ui/floating/FloatingToolHost.web.js +28 -0
  40. package/lib/commonjs/ui/floating/index.js +105 -0
  41. package/lib/commonjs/ui/floating/index.web.js +105 -0
  42. package/lib/commonjs/ui/floating/onboardingConstants.js +70 -0
  43. package/lib/commonjs/ui/floating/onboardingConstants.web.js +34 -0
  44. package/lib/commonjs/ui/gameUI/constants/gameUIColors.js +3 -1
  45. package/lib/commonjs/ui/index.js +118 -2
  46. package/lib/commonjs/ui/night/nightTheme.js +10 -0
  47. package/lib/commonjs/ui/night/primitives.js +22 -5
  48. package/lib/commonjs/ui/otto/OttoSceneView.js +69 -0
  49. package/lib/commonjs/ui/otto/index.js +22 -0
  50. package/lib/commonjs/ui/otto/ottoEngine.js +10 -7
  51. package/lib/commonjs/ui/otto/ottoScenes.js +949 -0
  52. package/lib/commonjs/utils/minimalSuperJSON.js +13 -3
  53. package/lib/module/JsModal.js +16 -1
  54. package/lib/module/JsModal.web.js +16 -1
  55. package/lib/module/dataViewer/CyberpunkInput.js +6 -1
  56. package/lib/module/dataViewer/LiveExplorer.js +28 -16
  57. package/lib/module/hooks/safe-area-impl.js +1 -1
  58. package/lib/module/icons/ReactQueryIcon.js +9 -161
  59. package/lib/module/icons/SentryBugIcon.js +9 -171
  60. package/lib/module/index.js +4 -1
  61. package/lib/module/license/AccountSetup.js +52 -0
  62. package/lib/module/license/AccountSetup.web.js +77 -0
  63. package/lib/module/license/FeatureGate.js +10 -43
  64. package/lib/module/license/FreeAccountPrompt.js +35 -12
  65. package/lib/module/license/index.js +1 -1
  66. package/lib/module/license/licenseModule.js +50 -35
  67. package/lib/module/license/tierLimits.js +13 -63
  68. package/lib/module/storage/devToolsStorageKeys.js +8 -1
  69. package/lib/module/stores/BaseEventStore.js +21 -5
  70. package/lib/module/stores/createToolStore.js +21 -3
  71. package/lib/module/stores/floatingToolStore.js +61 -0
  72. package/lib/module/stores/floatingToolStore.test.js +111 -0
  73. package/lib/module/sync/toolActionRegistry.js +84 -2
  74. package/lib/module/ui/backgrounds/README.md +52 -0
  75. package/lib/module/ui/backgrounds/ToolBackground.js +4 -2
  76. package/lib/module/ui/backgrounds/index.js +2 -1
  77. package/lib/module/ui/backgrounds/registry.js +8 -0
  78. package/lib/module/ui/backgrounds/variants/wormhole/motion.js +44 -0
  79. package/lib/module/ui/backgrounds/variants/wormhole/textures.js +3 -0
  80. package/lib/module/ui/backgrounds/variants/wormhole.js +129 -0
  81. package/lib/module/ui/components/ClipboardHintBanner.js +5 -6
  82. package/lib/module/ui/components/CompactRow.js +94 -74
  83. package/lib/module/ui/components/DraggableHeader.js +16 -1
  84. package/lib/module/ui/components/HeaderSearchButton.js +17 -4
  85. package/lib/module/ui/floating/FloatingTool.js +1003 -0
  86. package/lib/module/ui/floating/FloatingTool.web.js +590 -0
  87. package/lib/module/ui/floating/FloatingToolHost.js +29 -0
  88. package/lib/module/ui/floating/FloatingToolHost.web.js +25 -0
  89. package/lib/module/ui/floating/index.js +6 -0
  90. package/lib/module/ui/floating/index.web.js +6 -0
  91. package/lib/module/ui/floating/onboardingConstants.js +64 -0
  92. package/lib/module/ui/floating/onboardingConstants.web.js +27 -0
  93. package/lib/module/ui/gameUI/constants/gameUIColors.js +3 -1
  94. package/lib/module/ui/index.js +5 -1
  95. package/lib/module/ui/night/nightTheme.js +10 -0
  96. package/lib/module/ui/night/primitives.js +22 -5
  97. package/lib/module/ui/otto/OttoSceneView.js +64 -0
  98. package/lib/module/ui/otto/index.js +3 -1
  99. package/lib/module/ui/otto/ottoEngine.js +10 -7
  100. package/lib/module/ui/otto/ottoScenes.js +942 -0
  101. package/lib/module/utils/minimalSuperJSON.js +13 -3
  102. package/lib/typescript/commonjs/JsModal.d.ts +43 -2
  103. package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
  104. package/lib/typescript/commonjs/JsModal.web.d.ts +5 -2
  105. package/lib/typescript/commonjs/JsModal.web.d.ts.map +1 -1
  106. package/lib/typescript/commonjs/dataViewer/CyberpunkInput.d.ts.map +1 -1
  107. package/lib/typescript/commonjs/dataViewer/LiveExplorer.d.ts.map +1 -1
  108. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  109. package/lib/typescript/commonjs/icons/ReactQueryIcon.d.ts +1 -2
  110. package/lib/typescript/commonjs/icons/ReactQueryIcon.d.ts.map +1 -1
  111. package/lib/typescript/commonjs/icons/SentryBugIcon.d.ts +1 -2
  112. package/lib/typescript/commonjs/icons/SentryBugIcon.d.ts.map +1 -1
  113. package/lib/typescript/commonjs/index.d.ts +4 -1
  114. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  115. package/lib/typescript/commonjs/license/AccountSetup.d.ts +4 -0
  116. package/lib/typescript/commonjs/license/AccountSetup.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/license/AccountSetup.web.d.ts +2 -0
  118. package/lib/typescript/commonjs/license/AccountSetup.web.d.ts.map +1 -0
  119. package/lib/typescript/commonjs/license/FeatureGate.d.ts +3 -19
  120. package/lib/typescript/commonjs/license/FeatureGate.d.ts.map +1 -1
  121. package/lib/typescript/commonjs/license/FreeAccountPrompt.d.ts +8 -11
  122. package/lib/typescript/commonjs/license/FreeAccountPrompt.d.ts.map +1 -1
  123. package/lib/typescript/commonjs/license/index.d.ts +1 -1
  124. package/lib/typescript/commonjs/license/index.d.ts.map +1 -1
  125. package/lib/typescript/commonjs/license/licenseModule.d.ts +18 -31
  126. package/lib/typescript/commonjs/license/licenseModule.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/license/tierLimits.d.ts +9 -52
  128. package/lib/typescript/commonjs/license/tierLimits.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +6 -0
  130. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/stores/BaseEventStore.d.ts.map +1 -1
  132. package/lib/typescript/commonjs/stores/createToolStore.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/stores/floatingToolStore.d.ts +27 -0
  134. package/lib/typescript/commonjs/stores/floatingToolStore.d.ts.map +1 -0
  135. package/lib/typescript/commonjs/stores/floatingToolStore.test.d.ts +2 -0
  136. package/lib/typescript/commonjs/stores/floatingToolStore.test.d.ts.map +1 -0
  137. package/lib/typescript/commonjs/sync/toolActionRegistry.d.ts +4 -32
  138. package/lib/typescript/commonjs/sync/toolActionRegistry.d.ts.map +1 -1
  139. package/lib/typescript/commonjs/ui/backgrounds/ToolBackground.d.ts +7 -1
  140. package/lib/typescript/commonjs/ui/backgrounds/ToolBackground.d.ts.map +1 -1
  141. package/lib/typescript/commonjs/ui/backgrounds/index.d.ts +2 -1
  142. package/lib/typescript/commonjs/ui/backgrounds/index.d.ts.map +1 -1
  143. package/lib/typescript/commonjs/ui/backgrounds/registry.d.ts.map +1 -1
  144. package/lib/typescript/commonjs/ui/backgrounds/types.d.ts +11 -1
  145. package/lib/typescript/commonjs/ui/backgrounds/types.d.ts.map +1 -1
  146. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/motion.d.ts +24 -0
  147. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/motion.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/textures.d.ts +13 -0
  149. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/textures.d.ts.map +1 -0
  150. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole.d.ts +3 -0
  151. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole.d.ts.map +1 -0
  152. package/lib/typescript/commonjs/ui/components/ClipboardHintBanner.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/ui/components/CompactRow.d.ts +8 -1
  154. package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +1 -1
  155. package/lib/typescript/commonjs/ui/components/DraggableHeader.d.ts +4 -1
  156. package/lib/typescript/commonjs/ui/components/DraggableHeader.d.ts.map +1 -1
  157. package/lib/typescript/commonjs/ui/components/HeaderSearchButton.d.ts +7 -1
  158. package/lib/typescript/commonjs/ui/components/HeaderSearchButton.d.ts.map +1 -1
  159. package/lib/typescript/commonjs/ui/floating/FloatingTool.d.ts +79 -0
  160. package/lib/typescript/commonjs/ui/floating/FloatingTool.d.ts.map +1 -0
  161. package/lib/typescript/commonjs/ui/floating/FloatingTool.web.d.ts +64 -0
  162. package/lib/typescript/commonjs/ui/floating/FloatingTool.web.d.ts.map +1 -0
  163. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.d.ts +3 -0
  164. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.d.ts.map +1 -0
  165. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.web.d.ts +3 -0
  166. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.web.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/ui/floating/index.d.ts +7 -0
  168. package/lib/typescript/commonjs/ui/floating/index.d.ts.map +1 -0
  169. package/lib/typescript/commonjs/ui/floating/index.web.d.ts +7 -0
  170. package/lib/typescript/commonjs/ui/floating/index.web.d.ts.map +1 -0
  171. package/lib/typescript/commonjs/ui/floating/onboardingConstants.d.ts +30 -0
  172. package/lib/typescript/commonjs/ui/floating/onboardingConstants.d.ts.map +1 -0
  173. package/lib/typescript/commonjs/ui/floating/onboardingConstants.web.d.ts +13 -0
  174. package/lib/typescript/commonjs/ui/floating/onboardingConstants.web.d.ts.map +1 -0
  175. package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts +2 -0
  176. package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts.map +1 -1
  177. package/lib/typescript/commonjs/ui/index.d.ts +6 -0
  178. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/ui/night/nightTheme.d.ts +10 -0
  180. package/lib/typescript/commonjs/ui/night/nightTheme.d.ts.map +1 -1
  181. package/lib/typescript/commonjs/ui/night/primitives.d.ts +10 -3
  182. package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +1 -1
  183. package/lib/typescript/commonjs/ui/otto/OttoSceneView.d.ts +30 -0
  184. package/lib/typescript/commonjs/ui/otto/OttoSceneView.d.ts.map +1 -0
  185. package/lib/typescript/commonjs/ui/otto/index.d.ts +2 -0
  186. package/lib/typescript/commonjs/ui/otto/index.d.ts.map +1 -1
  187. package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts +1 -1
  188. package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts.map +1 -1
  189. package/lib/typescript/commonjs/ui/otto/ottoScenes.d.ts +75 -0
  190. package/lib/typescript/commonjs/ui/otto/ottoScenes.d.ts.map +1 -0
  191. package/lib/typescript/commonjs/utils/minimalSuperJSON.d.ts.map +1 -1
  192. package/lib/typescript/module/JsModal.d.ts +43 -2
  193. package/lib/typescript/module/JsModal.d.ts.map +1 -1
  194. package/lib/typescript/module/JsModal.web.d.ts +5 -2
  195. package/lib/typescript/module/JsModal.web.d.ts.map +1 -1
  196. package/lib/typescript/module/dataViewer/CyberpunkInput.d.ts.map +1 -1
  197. package/lib/typescript/module/dataViewer/LiveExplorer.d.ts.map +1 -1
  198. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  199. package/lib/typescript/module/icons/ReactQueryIcon.d.ts +1 -2
  200. package/lib/typescript/module/icons/ReactQueryIcon.d.ts.map +1 -1
  201. package/lib/typescript/module/icons/SentryBugIcon.d.ts +1 -2
  202. package/lib/typescript/module/icons/SentryBugIcon.d.ts.map +1 -1
  203. package/lib/typescript/module/index.d.ts +4 -1
  204. package/lib/typescript/module/index.d.ts.map +1 -1
  205. package/lib/typescript/module/license/AccountSetup.d.ts +4 -0
  206. package/lib/typescript/module/license/AccountSetup.d.ts.map +1 -0
  207. package/lib/typescript/module/license/AccountSetup.web.d.ts +2 -0
  208. package/lib/typescript/module/license/AccountSetup.web.d.ts.map +1 -0
  209. package/lib/typescript/module/license/FeatureGate.d.ts +3 -19
  210. package/lib/typescript/module/license/FeatureGate.d.ts.map +1 -1
  211. package/lib/typescript/module/license/FreeAccountPrompt.d.ts +8 -11
  212. package/lib/typescript/module/license/FreeAccountPrompt.d.ts.map +1 -1
  213. package/lib/typescript/module/license/index.d.ts +1 -1
  214. package/lib/typescript/module/license/index.d.ts.map +1 -1
  215. package/lib/typescript/module/license/licenseModule.d.ts +18 -31
  216. package/lib/typescript/module/license/licenseModule.d.ts.map +1 -1
  217. package/lib/typescript/module/license/tierLimits.d.ts +9 -52
  218. package/lib/typescript/module/license/tierLimits.d.ts.map +1 -1
  219. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +6 -0
  220. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +1 -1
  221. package/lib/typescript/module/stores/BaseEventStore.d.ts.map +1 -1
  222. package/lib/typescript/module/stores/createToolStore.d.ts.map +1 -1
  223. package/lib/typescript/module/stores/floatingToolStore.d.ts +27 -0
  224. package/lib/typescript/module/stores/floatingToolStore.d.ts.map +1 -0
  225. package/lib/typescript/module/stores/floatingToolStore.test.d.ts +2 -0
  226. package/lib/typescript/module/stores/floatingToolStore.test.d.ts.map +1 -0
  227. package/lib/typescript/module/sync/toolActionRegistry.d.ts +4 -32
  228. package/lib/typescript/module/sync/toolActionRegistry.d.ts.map +1 -1
  229. package/lib/typescript/module/ui/backgrounds/ToolBackground.d.ts +7 -1
  230. package/lib/typescript/module/ui/backgrounds/ToolBackground.d.ts.map +1 -1
  231. package/lib/typescript/module/ui/backgrounds/index.d.ts +2 -1
  232. package/lib/typescript/module/ui/backgrounds/index.d.ts.map +1 -1
  233. package/lib/typescript/module/ui/backgrounds/registry.d.ts.map +1 -1
  234. package/lib/typescript/module/ui/backgrounds/types.d.ts +11 -1
  235. package/lib/typescript/module/ui/backgrounds/types.d.ts.map +1 -1
  236. package/lib/typescript/module/ui/backgrounds/variants/wormhole/motion.d.ts +24 -0
  237. package/lib/typescript/module/ui/backgrounds/variants/wormhole/motion.d.ts.map +1 -0
  238. package/lib/typescript/module/ui/backgrounds/variants/wormhole/textures.d.ts +13 -0
  239. package/lib/typescript/module/ui/backgrounds/variants/wormhole/textures.d.ts.map +1 -0
  240. package/lib/typescript/module/ui/backgrounds/variants/wormhole.d.ts +3 -0
  241. package/lib/typescript/module/ui/backgrounds/variants/wormhole.d.ts.map +1 -0
  242. package/lib/typescript/module/ui/components/ClipboardHintBanner.d.ts.map +1 -1
  243. package/lib/typescript/module/ui/components/CompactRow.d.ts +8 -1
  244. package/lib/typescript/module/ui/components/CompactRow.d.ts.map +1 -1
  245. package/lib/typescript/module/ui/components/DraggableHeader.d.ts +4 -1
  246. package/lib/typescript/module/ui/components/DraggableHeader.d.ts.map +1 -1
  247. package/lib/typescript/module/ui/components/HeaderSearchButton.d.ts +7 -1
  248. package/lib/typescript/module/ui/components/HeaderSearchButton.d.ts.map +1 -1
  249. package/lib/typescript/module/ui/floating/FloatingTool.d.ts +79 -0
  250. package/lib/typescript/module/ui/floating/FloatingTool.d.ts.map +1 -0
  251. package/lib/typescript/module/ui/floating/FloatingTool.web.d.ts +64 -0
  252. package/lib/typescript/module/ui/floating/FloatingTool.web.d.ts.map +1 -0
  253. package/lib/typescript/module/ui/floating/FloatingToolHost.d.ts +3 -0
  254. package/lib/typescript/module/ui/floating/FloatingToolHost.d.ts.map +1 -0
  255. package/lib/typescript/module/ui/floating/FloatingToolHost.web.d.ts +3 -0
  256. package/lib/typescript/module/ui/floating/FloatingToolHost.web.d.ts.map +1 -0
  257. package/lib/typescript/module/ui/floating/index.d.ts +7 -0
  258. package/lib/typescript/module/ui/floating/index.d.ts.map +1 -0
  259. package/lib/typescript/module/ui/floating/index.web.d.ts +7 -0
  260. package/lib/typescript/module/ui/floating/index.web.d.ts.map +1 -0
  261. package/lib/typescript/module/ui/floating/onboardingConstants.d.ts +30 -0
  262. package/lib/typescript/module/ui/floating/onboardingConstants.d.ts.map +1 -0
  263. package/lib/typescript/module/ui/floating/onboardingConstants.web.d.ts +13 -0
  264. package/lib/typescript/module/ui/floating/onboardingConstants.web.d.ts.map +1 -0
  265. package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts +2 -0
  266. package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts.map +1 -1
  267. package/lib/typescript/module/ui/index.d.ts +6 -0
  268. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  269. package/lib/typescript/module/ui/night/nightTheme.d.ts +10 -0
  270. package/lib/typescript/module/ui/night/nightTheme.d.ts.map +1 -1
  271. package/lib/typescript/module/ui/night/primitives.d.ts +10 -3
  272. package/lib/typescript/module/ui/night/primitives.d.ts.map +1 -1
  273. package/lib/typescript/module/ui/otto/OttoSceneView.d.ts +30 -0
  274. package/lib/typescript/module/ui/otto/OttoSceneView.d.ts.map +1 -0
  275. package/lib/typescript/module/ui/otto/index.d.ts +2 -0
  276. package/lib/typescript/module/ui/otto/index.d.ts.map +1 -1
  277. package/lib/typescript/module/ui/otto/ottoEngine.d.ts +1 -1
  278. package/lib/typescript/module/ui/otto/ottoEngine.d.ts.map +1 -1
  279. package/lib/typescript/module/ui/otto/ottoScenes.d.ts +75 -0
  280. package/lib/typescript/module/ui/otto/ottoScenes.d.ts.map +1 -0
  281. package/lib/typescript/module/utils/minimalSuperJSON.d.ts.map +1 -1
  282. package/package.json +25 -5
  283. package/scripts/generate-wormhole-textures.cjs +261 -0
  284. package/scripts/test-wormhole-motion.cjs +59 -0
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ARROW_BOTTOM_OFFSET", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _onboardingConstants.ARROW_BOTTOM_OFFSET;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ARROW_HEIGHT", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _onboardingConstants.ARROW_HEIGHT;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "FloatingTool", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _FloatingTool.FloatingTool;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "FloatingToolDivider", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _FloatingTool.Divider;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "FloatingToolHost", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _FloatingToolHost.FloatingToolHost;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "FloatingToolUserStatus", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _FloatingTool.UserStatus;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "SPACING_GAP", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _onboardingConstants.SPACING_GAP;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "calculateTargetPosition", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _onboardingConstants.calculateTargetPosition;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "calculateTooltipPosition", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _onboardingConstants.calculateTooltipPosition;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "dismissFloatingTool", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _floatingToolStore.dismissFloatingTool;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "getBubbleAnchorPosition", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _FloatingTool.getBubbleAnchorPosition;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "getFloatingTools", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _floatingToolStore.getFloatingTools;
76
+ }
77
+ });
78
+ Object.defineProperty(exports, "getScreenCenterY", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _onboardingConstants.getScreenCenterY;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, "openFloatingTool", {
85
+ enumerable: true,
86
+ get: function () {
87
+ return _floatingToolStore.openFloatingTool;
88
+ }
89
+ });
90
+ Object.defineProperty(exports, "registerPersistentFloatingTool", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _floatingToolStore.registerPersistentFloatingTool;
94
+ }
95
+ });
96
+ Object.defineProperty(exports, "subscribeFloatingTools", {
97
+ enumerable: true,
98
+ get: function () {
99
+ return _floatingToolStore.subscribeFloatingTools;
100
+ }
101
+ });
102
+ var _FloatingTool = require("./FloatingTool");
103
+ var _FloatingToolHost = require("./FloatingToolHost");
104
+ var _floatingToolStore = require("../../stores/floatingToolStore.js");
105
+ var _onboardingConstants = require("./onboardingConstants");
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ARROW_BOTTOM_OFFSET", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _onboardingConstantsWeb.ARROW_BOTTOM_OFFSET;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ARROW_HEIGHT", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _onboardingConstantsWeb.ARROW_HEIGHT;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "FloatingTool", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _FloatingToolWeb.FloatingTool;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "FloatingToolDivider", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _FloatingToolWeb.Divider;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "FloatingToolHost", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _FloatingToolHostWeb.FloatingToolHost;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "FloatingToolUserStatus", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _FloatingToolWeb.UserStatus;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "SPACING_GAP", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _onboardingConstantsWeb.SPACING_GAP;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "calculateTargetPosition", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _onboardingConstantsWeb.calculateTargetPosition;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "calculateTooltipPosition", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _onboardingConstantsWeb.calculateTooltipPosition;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "dismissFloatingTool", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _floatingToolStore.dismissFloatingTool;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "getBubbleAnchorPosition", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _FloatingToolWeb.getBubbleAnchorPosition;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "getFloatingTools", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _floatingToolStore.getFloatingTools;
76
+ }
77
+ });
78
+ Object.defineProperty(exports, "getScreenCenterY", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _onboardingConstantsWeb.getScreenCenterY;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, "openFloatingTool", {
85
+ enumerable: true,
86
+ get: function () {
87
+ return _floatingToolStore.openFloatingTool;
88
+ }
89
+ });
90
+ Object.defineProperty(exports, "registerPersistentFloatingTool", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _floatingToolStore.registerPersistentFloatingTool;
94
+ }
95
+ });
96
+ Object.defineProperty(exports, "subscribeFloatingTools", {
97
+ enumerable: true,
98
+ get: function () {
99
+ return _floatingToolStore.subscribeFloatingTools;
100
+ }
101
+ });
102
+ var _FloatingToolWeb = require("./FloatingTool.web.js");
103
+ var _FloatingToolHostWeb = require("./FloatingToolHost.web.js");
104
+ var _floatingToolStore = require("../../stores/floatingToolStore.js");
105
+ var _onboardingConstantsWeb = require("./onboardingConstants.web.js");
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SPACING_GAP = exports.ARROW_HEIGHT = exports.ARROW_BOTTOM_OFFSET = void 0;
7
+ exports.calculateTargetPosition = calculateTargetPosition;
8
+ exports.calculateTooltipPosition = calculateTooltipPosition;
9
+ exports.getScreenCenterY = getScreenCenterY;
10
+ var _reactNative = require("react-native");
11
+ /**
12
+ * Shared constants for onboarding tooltip positioning
13
+ * These ensure the floating menu aligns perfectly under the tooltip arrow
14
+ * All positions are calculated dynamically based on screen size
15
+ */
16
+
17
+ // Arrow dimensions (relative positioning)
18
+ const ARROW_BOTTOM_OFFSET = exports.ARROW_BOTTOM_OFFSET = -40; // Arrow extends below tooltip
19
+ const ARROW_HEIGHT = exports.ARROW_HEIGHT = 20; // borderTopWidth of arrow
20
+ const SPACING_GAP = exports.SPACING_GAP = 10; // Gap between arrow tip and target element
21
+
22
+ /**
23
+ * Calculate the center Y position of the screen
24
+ * This is used to vertically center the onboarding UI
25
+ *
26
+ * @returns Y coordinate at the center of the screen
27
+ */
28
+ function getScreenCenterY() {
29
+ const {
30
+ height: screenHeight
31
+ } = _reactNative.Dimensions.get("window");
32
+ return screenHeight / 2;
33
+ }
34
+
35
+ /**
36
+ * Calculate the tooltip position to center it vertically on screen
37
+ * Uses flexbox-style centering - tooltip will center itself with its actual size
38
+ *
39
+ * @returns Distance from screen bottom for tooltip positioning
40
+ */
41
+ function calculateTooltipPosition() {
42
+ // Position from center - tooltip will be centered with transform or flex
43
+ // We return a value that's slightly above center to account for the arrow below
44
+ const centerY = getScreenCenterY();
45
+
46
+ // Approximate offset to center the tooltip+arrow combo
47
+ // This is a reasonable estimate that works for most tooltip sizes
48
+ const estimatedHalfHeight = 130; // ~half of (tooltip + arrow)
49
+
50
+ return centerY - estimatedHalfHeight;
51
+ }
52
+
53
+ /**
54
+ * Calculate the position where a target element should be placed
55
+ * to align directly under the tooltip arrow
56
+ *
57
+ * @returns Distance from screen bottom where element should be positioned
58
+ */
59
+ function calculateTargetPosition() {
60
+ const tooltipBottom = calculateTooltipPosition();
61
+
62
+ // Arrow tip position = tooltip bottom + arrow offset (arrow extends below, so negative)
63
+ const arrowTipFromBottom = tooltipBottom + ARROW_BOTTOM_OFFSET;
64
+
65
+ // Subtract arrow height to get to the actual tip
66
+ const actualArrowTip = arrowTipFromBottom - ARROW_HEIGHT;
67
+
68
+ // Subtract spacing gap to position element below arrow
69
+ return actualArrowTip - SPACING_GAP;
70
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SPACING_GAP = exports.ARROW_HEIGHT = exports.ARROW_BOTTOM_OFFSET = void 0;
7
+ exports.calculateTargetPosition = calculateTargetPosition;
8
+ exports.calculateTooltipPosition = calculateTooltipPosition;
9
+ exports.getScreenCenterY = getScreenCenterY;
10
+ /**
11
+ * Web twin of onboardingConstants.ts — same math, window.innerHeight instead
12
+ * of RN Dimensions.
13
+ */
14
+ const ARROW_BOTTOM_OFFSET = exports.ARROW_BOTTOM_OFFSET = -40; // Arrow extends below tooltip
15
+ const ARROW_HEIGHT = exports.ARROW_HEIGHT = 20; // borderTopWidth of arrow
16
+ const SPACING_GAP = exports.SPACING_GAP = 10; // Gap between arrow tip and target element
17
+
18
+ function getScreenCenterY() {
19
+ return window.innerHeight / 2;
20
+ }
21
+
22
+ /** Distance from screen bottom for tooltip positioning (centered-ish). */
23
+ function calculateTooltipPosition() {
24
+ const estimatedHalfHeight = 130; // ~half of (tooltip + arrow)
25
+ return getScreenCenterY() - estimatedHalfHeight;
26
+ }
27
+
28
+ /** Distance from screen bottom where the bubble should sit (under the arrow). */
29
+ function calculateTargetPosition() {
30
+ const tooltipBottom = calculateTooltipPosition();
31
+ const arrowTipFromBottom = tooltipBottom + ARROW_BOTTOM_OFFSET;
32
+ const actualArrowTip = arrowTipFromBottom - ARROW_HEIGHT;
33
+ return actualArrowTip - SPACING_GAP;
34
+ }
@@ -218,5 +218,7 @@ const dialColors = exports.dialColors = {
218
218
  dialGradient3: "rgba(255, 255, 255, 0.06)",
219
219
  dialBorder: "rgba(255, 255, 255, 0.12)",
220
220
  dialShadow: "#000000",
221
- dialGridLine: "rgba(255, 255, 255, 0.08)"
221
+ dialGridLine: "rgba(255, 255, 255, 0.08)",
222
+ hubFill: "rgba(5, 5, 5, 0.34)",
223
+ hubHalo: "rgba(5, 5, 5, 0.12)"
222
224
  };
@@ -9,8 +9,36 @@ var _exportNames = {
9
9
  CyberpunkSectionButton: true,
10
10
  EVENT_LIST_PRESET: true,
11
11
  LOG_LIST_PRESET: true,
12
- CLIP_OFFSCREEN_CELLS: true
12
+ CLIP_OFFSCREEN_CELLS: true,
13
+ FloatingTool: true,
14
+ getBubbleAnchorPosition: true,
15
+ FloatingToolDivider: true,
16
+ FloatingToolUserStatus: true,
17
+ ARROW_BOTTOM_OFFSET: true,
18
+ ARROW_HEIGHT: true,
19
+ SPACING_GAP: true,
20
+ getScreenCenterY: true,
21
+ calculateTooltipPosition: true,
22
+ calculateTargetPosition: true,
23
+ FloatingToolHost: true,
24
+ openFloatingTool: true,
25
+ dismissFloatingTool: true,
26
+ registerPersistentFloatingTool: true,
27
+ getFloatingTools: true,
28
+ subscribeFloatingTools: true
13
29
  };
30
+ Object.defineProperty(exports, "ARROW_BOTTOM_OFFSET", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _onboardingConstants.ARROW_BOTTOM_OFFSET;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "ARROW_HEIGHT", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _onboardingConstants.ARROW_HEIGHT;
40
+ }
41
+ });
14
42
  Object.defineProperty(exports, "CLIP_OFFSCREEN_CELLS", {
15
43
  enumerable: true,
16
44
  get: function () {
@@ -29,18 +57,102 @@ Object.defineProperty(exports, "EVENT_LIST_PRESET", {
29
57
  return _listPresets.EVENT_LIST_PRESET;
30
58
  }
31
59
  });
60
+ Object.defineProperty(exports, "FloatingTool", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _FloatingTool.FloatingTool;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "FloatingToolDivider", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _FloatingTool.Divider;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "FloatingToolHost", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _FloatingToolHost.FloatingToolHost;
76
+ }
77
+ });
78
+ Object.defineProperty(exports, "FloatingToolUserStatus", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _FloatingTool.UserStatus;
82
+ }
83
+ });
32
84
  Object.defineProperty(exports, "LOG_LIST_PRESET", {
33
85
  enumerable: true,
34
86
  get: function () {
35
87
  return _listPresets.LOG_LIST_PRESET;
36
88
  }
37
89
  });
90
+ Object.defineProperty(exports, "SPACING_GAP", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _onboardingConstants.SPACING_GAP;
94
+ }
95
+ });
96
+ Object.defineProperty(exports, "calculateTargetPosition", {
97
+ enumerable: true,
98
+ get: function () {
99
+ return _onboardingConstants.calculateTargetPosition;
100
+ }
101
+ });
102
+ Object.defineProperty(exports, "calculateTooltipPosition", {
103
+ enumerable: true,
104
+ get: function () {
105
+ return _onboardingConstants.calculateTooltipPosition;
106
+ }
107
+ });
108
+ Object.defineProperty(exports, "dismissFloatingTool", {
109
+ enumerable: true,
110
+ get: function () {
111
+ return _floatingToolStore.dismissFloatingTool;
112
+ }
113
+ });
114
+ Object.defineProperty(exports, "getBubbleAnchorPosition", {
115
+ enumerable: true,
116
+ get: function () {
117
+ return _FloatingTool.getBubbleAnchorPosition;
118
+ }
119
+ });
120
+ Object.defineProperty(exports, "getFloatingTools", {
121
+ enumerable: true,
122
+ get: function () {
123
+ return _floatingToolStore.getFloatingTools;
124
+ }
125
+ });
126
+ Object.defineProperty(exports, "getScreenCenterY", {
127
+ enumerable: true,
128
+ get: function () {
129
+ return _onboardingConstants.getScreenCenterY;
130
+ }
131
+ });
38
132
  Object.defineProperty(exports, "monoFont", {
39
133
  enumerable: true,
40
134
  get: function () {
41
135
  return _fonts.monoFont;
42
136
  }
43
137
  });
138
+ Object.defineProperty(exports, "openFloatingTool", {
139
+ enumerable: true,
140
+ get: function () {
141
+ return _floatingToolStore.openFloatingTool;
142
+ }
143
+ });
144
+ Object.defineProperty(exports, "registerPersistentFloatingTool", {
145
+ enumerable: true,
146
+ get: function () {
147
+ return _floatingToolStore.registerPersistentFloatingTool;
148
+ }
149
+ });
150
+ Object.defineProperty(exports, "subscribeFloatingTools", {
151
+ enumerable: true,
152
+ get: function () {
153
+ return _floatingToolStore.subscribeFloatingTools;
154
+ }
155
+ });
44
156
  Object.defineProperty(exports, "toolTheme", {
45
157
  enumerable: true,
46
158
  get: function () {
@@ -98,4 +210,8 @@ Object.keys(_index4).forEach(function (key) {
98
210
  }
99
211
  });
100
212
  });
101
- var _listPresets = require("./listPresets.js");
213
+ var _listPresets = require("./listPresets.js");
214
+ var _FloatingTool = require("./floating/FloatingTool");
215
+ var _onboardingConstants = require("./floating/onboardingConstants");
216
+ var _FloatingToolHost = require("./floating/FloatingToolHost");
217
+ var _floatingToolStore = require("../stores/floatingToolStore.js");
@@ -39,6 +39,16 @@ const night = exports.night = {
39
39
  border: "#1A1A1C",
40
40
  /** Hairline between rows inside a card. */
41
41
  separator: "rgba(255, 255, 255, 0.08)",
42
+ /**
43
+ * Glass variants of the surfaces above, for screens that sit on a living
44
+ * ToolBackground and want it to leak through (the dial settings). Same
45
+ * family as the dial hub's `hubFill` — black at a fraction, never a tint —
46
+ * with a white-alpha lift for rows and a white-alpha hairline so no dark
47
+ * ring appears when the field behind is bright.
48
+ */
49
+ glass: "rgba(5, 5, 5, 0.50)",
50
+ glassElevated: "rgba(255, 255, 255, 0.06)",
51
+ glassBorder: "rgba(255, 255, 255, 0.07)",
42
52
  /** Neutral fills, lightest → strongest. */
43
53
  fill: "rgba(255, 255, 255, 0.06)",
44
54
  fillSecondary: "rgba(255, 255, 255, 0.08)",
@@ -61,14 +61,19 @@ function NightFootnote({
61
61
  });
62
62
  }
63
63
 
64
- /** A card: `#0C0C0C`, radius 14, hairline border. `padded` = interior 14. */
64
+ /**
65
+ * A card: `#0C0C0C`, radius 14, hairline border. `padded` = interior 14.
66
+ * `glass` swaps the opaque fill for `night.color.glass` so the ToolBackground
67
+ * behind the sheet shows through the card.
68
+ */
65
69
  function NightCard({
66
70
  children,
67
71
  padded,
72
+ glass,
68
73
  style
69
74
  }) {
70
75
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
71
- style: [styles.card, padded ? styles.cardPadded : null, style],
76
+ style: [styles.card, glass ? styles.cardGlass : null, padded ? styles.cardPadded : null, style],
72
77
  children: children
73
78
  });
74
79
  }
@@ -222,11 +227,12 @@ function NightSegmented({
222
227
  tabs,
223
228
  activeKey,
224
229
  onChange,
225
- size = "md"
230
+ size = "md",
231
+ glass
226
232
  }) {
227
233
  const small = size === "sm";
228
234
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
229
- style: styles.segmentTrack,
235
+ style: [styles.segmentTrack, glass ? styles.segmentTrackGlass : null],
230
236
  children: tabs.map(tab => {
231
237
  const active = tab.key === activeKey;
232
238
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
@@ -237,7 +243,7 @@ function NightSegmented({
237
243
  },
238
244
  accessibilityLabel: tab.label,
239
245
  onPress: () => onChange(tab.key),
240
- style: [styles.segment, small ? styles.segmentSm : null, active ? styles.segmentActive : null],
246
+ style: [styles.segment, small ? styles.segmentSm : null, active ? glass ? styles.segmentActiveGlass : styles.segmentActive : null],
241
247
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
242
248
  style: [styles.segmentText, small ? styles.segmentTextSm : null, active ? styles.segmentTextActive : null],
243
249
  children: tab.label
@@ -301,6 +307,10 @@ const styles = _reactNative.StyleSheet.create({
301
307
  borderColor: _nightTheme.night.color.border,
302
308
  overflow: "hidden"
303
309
  },
310
+ cardGlass: {
311
+ backgroundColor: _nightTheme.night.color.glass,
312
+ borderColor: _nightTheme.night.color.glassBorder
313
+ },
304
314
  cardPadded: {
305
315
  padding: _nightTheme.night.cardPad,
306
316
  gap: 10
@@ -416,9 +426,16 @@ const styles = _reactNative.StyleSheet.create({
416
426
  justifyContent: "center",
417
427
  borderRadius: _nightTheme.night.radius.segment
418
428
  },
429
+ segmentTrackGlass: {
430
+ backgroundColor: _nightTheme.night.color.glass,
431
+ borderColor: _nightTheme.night.color.glassBorder
432
+ },
419
433
  segmentActive: {
420
434
  backgroundColor: _nightTheme.night.color.surfaceElevated
421
435
  },
436
+ segmentActiveGlass: {
437
+ backgroundColor: _nightTheme.night.color.glassElevated
438
+ },
422
439
  segmentText: {
423
440
  fontSize: _nightTheme.night.font.caption,
424
441
  fontWeight: "500",
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OTTO_SCENE_CROP_H = void 0;
7
+ exports.OttoSceneFrame = OttoSceneFrame;
8
+ exports.OttoSceneStill = OttoSceneStill;
9
+ var _reactNative = require("react-native");
10
+ var _ottoScenes = require("./ottoScenes.js");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ /**
13
+ * Otto × tool scenes in React Native (core APIs only, so it also runs through
14
+ * react-native-web).
15
+ *
16
+ * <OttoSceneFrame scene={…} t={tick} pixelSize={4} /> one frame, caller's clock
17
+ * <OttoSceneStill scene={…} pixelSize={2} /> frame 0, no clock
18
+ *
19
+ * A frame is ~150–250 run Views, so this is a still/hero renderer: drive `t`
20
+ * from a shared clock on a review page, not per list row. `crop` trims the
21
+ * canvas to the rows that carry pixels (the bottom rows are spare headroom).
22
+ */
23
+
24
+ /** Rows 0–20 carry the art; 21–23 are headroom for hops. */
25
+ const OTTO_SCENE_CROP_H = exports.OTTO_SCENE_CROP_H = 21;
26
+ function OttoSceneFrame({
27
+ scene,
28
+ t = 0,
29
+ pixelSize,
30
+ crop = true,
31
+ style
32
+ }) {
33
+ const rows = crop ? OTTO_SCENE_CROP_H : _ottoScenes.OTTO_SCENE_H;
34
+ const runs = (0, _ottoScenes.ottoSceneRuns)((0, _ottoScenes.renderOttoScene)(scene, t)).filter(r => r.y < rows);
35
+ const spans = [];
36
+ let rowY = -1;
37
+ let rowIndex = 0;
38
+ for (const r of runs) {
39
+ if (r.y !== rowY) {
40
+ rowY = r.y;
41
+ rowIndex = 0;
42
+ }
43
+ spans.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
44
+ style: {
45
+ position: "absolute",
46
+ left: r.x * pixelSize,
47
+ top: r.y * pixelSize,
48
+ width: r.w * pixelSize,
49
+ height: pixelSize,
50
+ backgroundColor: r.color
51
+ }
52
+ }, `${r.y}:${rowIndex++}`));
53
+ }
54
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
55
+ pointerEvents: "none",
56
+ style: [{
57
+ width: _ottoScenes.OTTO_SCENE_W * pixelSize,
58
+ height: rows * pixelSize
59
+ }, style],
60
+ children: spans
61
+ });
62
+ }
63
+ /** Frame 0 of a scene — safe anywhere a still image would be. */
64
+ function OttoSceneStill(props) {
65
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(OttoSceneFrame, {
66
+ ...props,
67
+ t: 0
68
+ });
69
+ }
@@ -35,4 +35,26 @@ Object.keys(_OttoSprite).forEach(function (key) {
35
35
  return _OttoSprite[key];
36
36
  }
37
37
  });
38
+ });
39
+ var _ottoScenes = require("./ottoScenes.js");
40
+ Object.keys(_ottoScenes).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _ottoScenes[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _ottoScenes[key];
47
+ }
48
+ });
49
+ });
50
+ var _OttoSceneView = require("./OttoSceneView.js");
51
+ Object.keys(_OttoSceneView).forEach(function (key) {
52
+ if (key === "default" || key === "__esModule") return;
53
+ if (key in exports && exports[key] === _OttoSceneView[key]) return;
54
+ Object.defineProperty(exports, key, {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _OttoSceneView[key];
58
+ }
59
+ });
38
60
  });
@@ -68,6 +68,13 @@ const BASE = {
68
68
  legs: [0, 0, 0]
69
69
  };
70
70
 
71
+ /**
72
+ * A keyboard, rows 10–12 from x=3: light top edge, a row of white key caps
73
+ * on grey, grey base. Three rows, so the body stays readable at 16px — a
74
+ * laptop screen at this size is a dark blob. See `typing`.
75
+ */
76
+ const TYPING_KEYBOARD = ["nnnnnnnnnn", "lmlmlmlmlm", "mmmmmmmmmm"];
77
+
71
78
  // Keys that count as "body" for the keyline pass. Props (n/m/l/p/1) get none.
72
79
  const BODY_KEYS = "gsdhaArRk";
73
80
  function walk(t) {
@@ -301,13 +308,9 @@ const OTTO_STATES = exports.OTTO_STATES = {
301
308
  }),
302
309
  typing: t => {
303
310
  const e = [];
304
- rect(3, 8, 12, 8, "n", e);
305
- rect(3, 11, 12, 11, "n", e);
306
- rect(3, 9, 3, 10, "n", e);
307
- rect(12, 9, 12, 10, "n", e);
308
- rect(4, 9, 11, 10, "1", e);
309
- rect(7, 9, 8, 10, "g", e);
310
- rect(2, 12, 13, 12, "m", e);
311
+ TYPING_KEYBOARD.forEach((row, dy) => {
312
+ for (let dx = 0; dx < row.length; dx++) e.push([3 + dx, 10 + dy, row[dx]]);
313
+ });
311
314
  const tap = t % 2;
312
315
  e.push([2, 10 + tap, "g"], [13, 11 - tap, "g"]);
313
316
  return {