@buoy-gg/shared-ui 7.0.36 → 7.0.39

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,949 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OTTO_SCENE_W = exports.OTTO_SCENE_PALETTE = exports.OTTO_SCENE_OTTO = exports.OTTO_SCENE_H = exports.OTTO_SCENE_BY_ID = exports.OTTO_SCENES = void 0;
7
+ exports.ottoSceneBounds = ottoSceneBounds;
8
+ exports.ottoSceneRuns = ottoSceneRuns;
9
+ exports.renderOttoScene = renderOttoScene;
10
+ var _ottoEngine = require("./ottoEngine.js");
11
+ /**
12
+ * Otto × tools — pixel scenes.
13
+ *
14
+ * One scene per dev tool: Otto in an engine pose, holding / leaning on /
15
+ * pointing at a hand-drawn PIXEL prop that stands for the tool. Everything is
16
+ * on the same 1-cell grid as the sprite, so a scene is just a bigger frame:
17
+ *
18
+ * renderOttoScene(scene, t) → W×H grid of palette keys (`.` = transparent)
19
+ * ottoSceneRuns(grid) → coloured horizontal runs for a renderer
20
+ *
21
+ * Props are ASCII art in `OTTO_SCENE_PALETTE` keys. A layer gets a one-cell
22
+ * black keyline around it (`outline`), sits over or under Otto (`over`), and
23
+ * can ride his hands (`follow` = bob with `OTTO_ANCHORS[state]`). Otto's own
24
+ * frame comes straight from `renderOttoFrame`, so the mascot is never
25
+ * redrawn here — only what he is doing with the tool.
26
+ *
27
+ * Pure, no React: the same module renders the website gallery, the export
28
+ * script and any RN still.
29
+ */
30
+
31
+ /** Sprite palette plus prop colours. `.` and space are transparent. */
32
+ const OTTO_SCENE_PALETTE = exports.OTTO_SCENE_PALETTE = {
33
+ ..._ottoEngine.OTTO_PALETTE,
34
+ K: "#000000",
35
+ // prop keyline
36
+ c: "#22D3EE",
37
+ // cyan
38
+ C: "#0E7490",
39
+ // cyan deep
40
+ u: "#7DD3FC",
41
+ // sky (Ask Buoy)
42
+ b: "#3B82F6",
43
+ // blue
44
+ B: "#1E3A8A",
45
+ // blue deep
46
+ y: "#FDE047",
47
+ // yellow
48
+ Y: "#F59E0B",
49
+ // amber
50
+ o: "#FB923C",
51
+ // orange
52
+ v: "#C4B5FD",
53
+ // lavender
54
+ P: "#6D28D9",
55
+ // purple deep
56
+ e: "#FB7185",
57
+ // rose
58
+ E: "#BE123C",
59
+ // rose deep
60
+ i: "#F472B6",
61
+ // pink
62
+ t: "#B07D4F",
63
+ // tan (bear)
64
+ T: "#6B4423",
65
+ // brown deep
66
+ z: "#0B1220",
67
+ // screen navy
68
+ q: "#1F2937",
69
+ // slate
70
+ Q: "#374151",
71
+ // slate light
72
+ f: "#4ADE80",
73
+ // mint (screen text, checks)
74
+ F: "#166534",
75
+ // green deep
76
+ x: "#CBD5E1",
77
+ // steel
78
+ j: "#E7C9A0",
79
+ // light tan (bear muzzle)
80
+ G: "#F6C453",
81
+ // gold (sun)
82
+ D: "#EF5B4E",
83
+ // sunset red
84
+ L: "#5DBB63",
85
+ // leaf
86
+ M: "#3D8B4F" // leaf deep
87
+ };
88
+ const OTTO_SCENE_W = exports.OTTO_SCENE_W = 30;
89
+ const OTTO_SCENE_H = exports.OTTO_SCENE_H = 24;
90
+ /** Default sprite position: feet on row 17, lamp on row 7, prop room on both sides. */
91
+ const OTTO_SCENE_OTTO = exports.OTTO_SCENE_OTTO = {
92
+ x: 2,
93
+ y: 5
94
+ };
95
+ function blank(w, h) {
96
+ return Array.from({
97
+ length: h
98
+ }, () => Array(w).fill("."));
99
+ }
100
+ function filled(c) {
101
+ return !!c && c !== "." && c !== " ";
102
+ }
103
+
104
+ /** Art rows → cells, with the keyline dilation applied inside the layer. */
105
+ function layerCells(layer) {
106
+ const rows = layer.art;
107
+ const cells = [];
108
+ const has = (x, y) => y >= 0 && y < rows.length && filled(rows[y][x]);
109
+ const outline = layer.outline ?? true;
110
+ let maxW = 0;
111
+ for (const r of rows) maxW = Math.max(maxW, r.length);
112
+ for (let y = -1; y <= rows.length; y++) {
113
+ for (let x = -1; x <= maxW; x++) {
114
+ if (has(x, y)) {
115
+ cells.push([x, y, rows[y][x]]);
116
+ } else if (outline && (has(x - 1, y) || has(x + 1, y) || has(x, y - 1) || has(x, y + 1))) {
117
+ cells.push([x, y, "K"]);
118
+ }
119
+ }
120
+ }
121
+ return cells;
122
+ }
123
+ function anchorBob(state, t) {
124
+ const a = _ottoEngine.OTTO_ANCHORS[state];
125
+ if (!a) return 0;
126
+ return a(t).y - a(0).y;
127
+ }
128
+
129
+ /** The dark checker under Otto's feet — the engine's water colours, as a floor. */
130
+ function ground(x, y, t) {
131
+ return ((x - Math.floor(t / 2) + y * 5) % 7 + 7) % 7 < 2 ? "W" : "w";
132
+ }
133
+
134
+ /** One frame of a scene as a `OTTO_SCENE_W × OTTO_SCENE_H` grid of palette keys. */
135
+ function renderOttoScene(scene, t = 0) {
136
+ const W = OTTO_SCENE_W;
137
+ const H = OTTO_SCENE_H;
138
+ const g = blank(W, H);
139
+ const ox = scene.ottoX ?? OTTO_SCENE_OTTO.x;
140
+ const oy = scene.ottoY ?? OTTO_SCENE_OTTO.y;
141
+ const put = (x, y, c) => {
142
+ if (x >= 0 && x < W && y >= 0 && y < H) g[y][x] = c;
143
+ };
144
+
145
+ // Floor: three rows under the feet (sprite rows 13–15), fading out at the ends.
146
+ if (scene.ground !== false) {
147
+ const [gx0, gx1] = scene.ground ?? [ox + 1, ox + _ottoEngine.OTTO_GRID - 2];
148
+ for (let y = 13; y < 16; y++) {
149
+ for (let x = gx0; x <= gx1; x++) {
150
+ const edge = x === gx0 || x === gx1;
151
+ if (y === 15 && (x + y) % 2) continue;
152
+ if (edge && y !== 14) continue;
153
+ put(x, oy + y, ground(x, y, t));
154
+ }
155
+ }
156
+ }
157
+ const bob = anchorBob(scene.state, t);
158
+ const paint = layer => {
159
+ const dy = layer.follow ? bob : 0;
160
+ for (const [x, y, c] of layerCells(layer)) put(layer.x + x, layer.y + y + dy, c);
161
+ };
162
+ for (const layer of scene.layers) if (!layer.over) paint(layer);
163
+ const otto = (0, _ottoEngine.renderOttoFrame)(scene.state, t, {
164
+ water: false,
165
+ keyline: true
166
+ });
167
+ for (let y = 0; y < _ottoEngine.OTTO_GRID; y++) {
168
+ for (let x = 0; x < _ottoEngine.OTTO_GRID; x++) {
169
+ const c = otto[y][x];
170
+ if (c !== ".") put(ox + x, oy + y, c);
171
+ }
172
+ }
173
+ for (const layer of scene.layers) if (layer.over) paint(layer);
174
+ return g;
175
+ }
176
+ /** Run-length encode a scene frame into coloured spans, skipping transparency. */
177
+ function ottoSceneRuns(grid) {
178
+ const runs = [];
179
+ for (let y = 0; y < grid.length; y++) {
180
+ const row = grid[y];
181
+ let x = 0;
182
+ while (x < row.length) {
183
+ const key = row[x];
184
+ let w = 1;
185
+ while (x + w < row.length && row[x + w] === key) w++;
186
+ if (key !== ".") {
187
+ const color = OTTO_SCENE_PALETTE[key];
188
+ if (color) runs.push({
189
+ x,
190
+ y,
191
+ w,
192
+ color
193
+ });
194
+ }
195
+ x += w;
196
+ }
197
+ }
198
+ return runs;
199
+ }
200
+
201
+ /** Tight bounds of the filled cells: `[x0, y0, x1, y1]` inclusive, or null when empty. */
202
+ function ottoSceneBounds(grid) {
203
+ let x0 = Infinity;
204
+ let y0 = Infinity;
205
+ let x1 = -1;
206
+ let y1 = -1;
207
+ for (let y = 0; y < grid.length; y++) {
208
+ for (let x = 0; x < grid[y].length; x++) {
209
+ if (grid[y][x] === ".") continue;
210
+ if (x < x0) x0 = x;
211
+ if (x > x1) x1 = x;
212
+ if (y < y0) y0 = y;
213
+ if (y > y1) y1 = y;
214
+ }
215
+ }
216
+ return x1 < 0 ? null : [x0, y0, x1, y1];
217
+ }
218
+
219
+ // ------------------------------------------------------------------ props --
220
+ //
221
+ // Drawn on the sprite's cell grid, the size of a held object (7–13 cells).
222
+ // The keyline pass draws the outline — never hand-draw `K` except for detail
223
+ // INSIDE a prop (eyes, a keyhole, an exclamation mark).
224
+
225
+ /** A `w×h` box: `fill` inside, `border` on the edge, corners cut when `round`. */
226
+ function box(w, h, fill, border = fill, round = true) {
227
+ const rows = [];
228
+ for (let y = 0; y < h; y++) {
229
+ let r = "";
230
+ for (let x = 0; x < w; x++) {
231
+ const edge = x === 0 || y === 0 || x === w - 1 || y === h - 1;
232
+ const corner = (x === 0 || x === w - 1) && (y === 0 || y === h - 1);
233
+ r += round && corner ? "." : edge ? border : fill;
234
+ }
235
+ rows.push(r);
236
+ }
237
+ return rows;
238
+ }
239
+
240
+ /** Paint `art` onto `base` at (x, y); transparent cells leave the base alone. */
241
+ function stamp(base, art, x, y) {
242
+ const out = base.map(r => r.split(""));
243
+ for (let j = 0; j < art.length; j++) {
244
+ for (let i = 0; i < art[j].length; i++) {
245
+ const c = art[j][i];
246
+ if (!filled(c)) continue;
247
+ const yy = y + j;
248
+ const xx = x + i;
249
+ if (yy < 0 || xx < 0) continue;
250
+ while (out.length <= yy) out.push([]);
251
+ while (out[yy].length <= xx) out[yy].push(".");
252
+ out[yy][xx] = c;
253
+ }
254
+ }
255
+ return out.map(r => r.join(""));
256
+ }
257
+
258
+ /** Four-point sparkle, 3×3. */
259
+ function sparkle(c) {
260
+ return [`.${c}.`, `${c}${c}${c}`, `.${c}.`];
261
+ }
262
+
263
+ /** A big sparkle, 5×5, with a bright centre. */
264
+ function star(c, centre = "l") {
265
+ return [`..${c}..`, `..${c}..`, `${c}${c}${centre}${c}${c}`, `..${c}..`, `..${c}..`];
266
+ }
267
+
268
+ /** A ring of thickness 2 on an odd `d`, in colour `c`, `fill` inside. */
269
+ function ring(d, c, fill = ".") {
270
+ const r = (d - 1) / 2;
271
+ const rows = [];
272
+ for (let y = 0; y < d; y++) {
273
+ let s = "";
274
+ for (let x = 0; x < d; x++) {
275
+ const dd = Math.hypot(x - r, y - r);
276
+ s += dd > r + 0.4 ? "." : dd > r - 1.6 ? c : fill;
277
+ }
278
+ rows.push(s);
279
+ }
280
+ return rows;
281
+ }
282
+ const NETWORK_TILE = stamp(box(13, 13, "z", "C"), ["...ccccc...", ".cc.ccc.cc.", ".c.c...c.c.", "c..c...c..c", "c..c...c..c", "ccccccccccc", "c..c...c..c", "c..c...c..c", ".c.c...c.c.", ".cc.ccc.cc.", "...ccccc..."], 1, 1);
283
+ const STORAGE_KEY = ["..yyy..", ".yYYYy.", ".yYKYy.", ".yYYYy.", "..yYy..", "..yYy..", "..yYyy.", "..yYy..", "..yYyy.", "..yYy..", "..yyy.."];
284
+ const STORAGE_SAFE = stamp(stamp(box(11, 10, "Q", "q", false), ["yyy", "yKy", "yyy", ".y."], 4, 3), ["qq.....qq"], 1, 10);
285
+
286
+ /** A filled disc of diameter `d`, one band colour per row, top to bottom. */
287
+ function disc(d, bands) {
288
+ const r = (d - 1) / 2;
289
+ const rows = [];
290
+ for (let y = 0; y < d; y++) {
291
+ let s = "";
292
+ for (let x = 0; x < d; x++) s += Math.hypot(x - r, y - r) > r + 0.4 ? "." : bands[y] ?? bands[bands.length - 1];
293
+ rows.push(s);
294
+ }
295
+ return rows;
296
+ }
297
+
298
+ /** Shift each row right by `dx(row)` — a lid seen at an angle. */
299
+ function skew(rows, dx) {
300
+ return rows.map((r, i) => ".".repeat(dx(i)) + r);
301
+ }
302
+
303
+ // Query: Otto on the beach — a palm, a sunset over the water, sunglasses and
304
+ // a laptop running React. The disc has no keyline on purpose (it is sky).
305
+ const QUERY_SUNSET = stamp(disc(13, "bppiieoDDbbbb"), [".GG.", "GGGG", "yyyy", ".GG."], 6, 2);
306
+ const QUERY_PALM = ["..LLL.....", ".LLMLL....", "LLM.LL..LL", "LM..LL.LLM", "....LLLLM.", "LLL.LLLM..", "LLMLLLLLLL", "LMM.YYMMLL", "....YY..MM", "...YY.....", "...YY.....", "..YY......", "..YY......", "..YY......"];
307
+ const QUERY_SAND = [".YYYY.....", "GGYYYYYY..", "GYYYYYYYYY", "YYYYYYYYYYY"];
308
+ const QUERY_REACT = ["..cc.cc..", ".c..c..c.", "c.cc.cc.c", "c.c.l.c.c", "c.cc.cc.c", ".c..c..c.", "..cc.cc.."];
309
+ const QUERY_LAPTOP_LID = skew(stamp(["mmmmmmmmmmm", ...Array(7).fill("11111111111")], QUERY_REACT, 1, 1), i => i < 3 ? 2 : i < 6 ? 1 : 0);
310
+ const QUERY_LAPTOP_BASE = ["KmmmmmmmmmmmmmK"];
311
+ const QUERY_SHADES = ["KKKKKKKKK", "..KKK.KKK", "..KKK.KKK"];
312
+ const QUERY_SMILE = ["K..K", ".KK."];
313
+ const QUERY_ARM = ["KK.", "ggK", "KK."];
314
+ const ENV_PANEL = (() => {
315
+ let p = box(13, 11, "z", "q", false);
316
+ for (const [row, knob, col] of [[2, "f", 7], [5, "b", 3], [8, "o", 8]]) {
317
+ p = stamp(p, ["QQQQQQQQQ"], 2, row);
318
+ p = stamp(p, [knob + knob, knob + knob, knob + knob], col, row - 1);
319
+ }
320
+ return p;
321
+ })();
322
+ const REDUX_KNOT = stamp(ring(11, "p", "z"), ["...v...", "..v.v..", ".v...v.", "v..v..v", "v.v.v.v", ".vv.vv."], 2, 2);
323
+ const ZUSTAND_BEAR = ["tt.....tt", "tTt...tTt", ".ttttttt.", "ttttttttt", "tKtttttKt", "ttttttttt", "ttjjjjjtt", "ttjjKjjtt", ".tjjjjjt."];
324
+ const JOTAI_ATOM = ["....ccc....", "...c...c...", "...c...c...", ".ccc...ccc.", "c..c...c..c", "c....y....c", "c..c...c..c", ".ccc...ccc.", "...c...c...", "...c...c...", "....ccc...."];
325
+ const TIME_MACHINE_REWIND = stamp(ring(13, "c", "z"), ["...c..c", "..cc.cc", ".ccc.ccc", "cccc.cccc", ".ccc.ccc", "..cc.cc", "...c..c"], 2, 3);
326
+ const ROUTES_PIN = ["..eee..", ".eeeee.", "eeellee", "eeellee", ".eeeee.", "..eee..", "...e...", "...e..."];
327
+ const HIGHLIGHT_ARROW = ["...y...", "..yyy..", ".yyyyy.", "yyyyyyy", "..yYy..", "..yYy..", "..yYy..", "..yYy.."];
328
+ const DEBUG_BORDER = (() => {
329
+ const w = 13;
330
+ const h = 11;
331
+ const rows = [];
332
+ for (let y = 0; y < h; y++) {
333
+ let r = "";
334
+ for (let x = 0; x < w; x++) {
335
+ const edge = x === 0 || y === 0 || x === w - 1 || y === h - 1;
336
+ const corner = (x < 2 || x > w - 3) && (y < 2 || y > h - 3);
337
+ r += corner ? "i" : edge && (x + y) % 2 === 0 ? "i" : ".";
338
+ }
339
+ rows.push(r);
340
+ }
341
+ return rows;
342
+ })();
343
+ function plane(c) {
344
+ return ["....cccc....".replace(/c/g, c), "..cccccccc..".replace(/c/g, c), "cccccccccccc".replace(/c/g, c), "..cccccccc..".replace(/c/g, c), "....cccc....".replace(/c/g, c)];
345
+ }
346
+ const IMPERSONATE_HAT = ["...qqqqqqqq...", "...qqqqqqqq...", "...qqqaaqqq...", "qqqqqqqqqqqqqq"];
347
+ const IMPERSONATE_GLASSES = ["KKKK.KKKK", "KllKKKllK", "KKKK.KKKK"];
348
+ const IMPERSONATE_STACHE = ["KKK.KKK", ".KK.KK."];
349
+ const IMPERSONATE_CARD = stamp(box(11, 8, "u", "x", false), ["zz.xxx", "zz.xx.", "...xxx"], 2, 2);
350
+ const BENCH_WATCH = stamp(stamp(ring(11, "n", "z"), ["...nnn...", "....n...."].reverse(), 1, -2), ["l", ".r", "..r"], 5, 3);
351
+ const JS_TOP_CHART = stamp(stamp(box(13, 11, "z", "q", false), [".....f.....", "....f.f....", "f..f...f..f", ".ff.....ff."], 1, 2), ["r.rr.r.rrr", "r.rr.rrrrr"], 2, 7);
352
+ const IMAGES_CARD = stamp(stamp(box(13, 9, "u", "l", false), ["..f..", ".fff.", "fffff", "ffFffff", "fFFfFFff"], 3, 3), ["yy", "yy"], 8, 2);
353
+ const ASSETS_CRATE = stamp(box(11, 9, "t", "T", false), ["llll.", "lxxll", "llll.l", "lxxxl", "llll.l", "lxxxl", "lllll"].map(r => r.slice(0, 5)), 3, 1);
354
+ const CONSOLE_MONITOR = stamp(box(13, 10, "z", "Q", false), ["f.", "ff", "f.", "..", "f.ffff", "ff", "f."], 2, 2);
355
+ const CONSOLE_STAND = ["..qq..", "..qq..", "qqqqqq"];
356
+ const CONSOLE_KEYS = ["qqqqqqqq", "qQQQQQQq", "qqqqqqqq"];
357
+ const EVENTS_LINE = (() => {
358
+ let p = ["...bbbbb...yyyyy", "...b.x.b...y.x.y", "...bx..b...yx..y", "...bbbbb...yyyyy", ".....n.......n..", ".....n.......n..", "nnnnnnnnnnnnnnnn"];
359
+ for (const [col, c] of [[0, "y"], [4, "c"], [8, "o"], [12, "p"]]) {
360
+ p = stamp(p, [c + c + c, c + c + c, c + c + c], col, 5);
361
+ }
362
+ return p;
363
+ })();
364
+ const SENTRY_SHIELD = stamp(["nnnnnnnnnnn", "nQQQQQQQQQn", "nQQQQQQQQQn", "nQQQQQQQQQn", "nQQQQQQQQQn", "nQQQQQQQQQn", "nQQQQQQQQQn", "nQQQQQQQQQn", ".nQQQQQQQn.", "..nQQQQQn..", "...nQQQn...", "....nQn....", ".....n....."], ["...r...", "..rrr..", "..rKr..", ".rrKrr.", ".rrrrr.", "rrrKrrr", "rrrrrrr"], 2, 1);
365
+ const SCENARIOS_FLOW = (() => {
366
+ let p = [];
367
+ p = stamp(p, box(7, 4, "z", "f", false), 3, 0);
368
+ p = stamp(p, ["fff"], 5, 1);
369
+ p = stamp(p, ["fff"], 5, 2);
370
+ p = stamp(p, ["n"], 6, 4);
371
+ p = stamp(p, ["nnnnnnnnn"], 2, 5);
372
+ p = stamp(p, ["n"], 2, 6);
373
+ p = stamp(p, ["n"], 10, 6);
374
+ p = stamp(p, box(5, 3, "z", "p", false), 0, 7);
375
+ p = stamp(p, ["ppp"], 1, 8);
376
+ p = stamp(p, box(5, 3, "z", "b", false), 8, 7);
377
+ p = stamp(p, ["bbb"], 9, 8);
378
+ return p;
379
+ })();
380
+ const ASK_BUOY_BUBBLE = stamp(stamp(box(13, 8, "z", "u", false), ["uu.uu.uu"], 3, 3), ["uu", "u."], 2, 8);
381
+ const TV_REMOTE_REMOTE = stamp(box(5, 9, "q", "Q", false), [".e.", "c.c", ".y.", "c.c"], 1, 1);
382
+ const TV_REMOTE_WAVES = ["...ee", "..e..", ".e.ee", ".e.e.", ".e.ee", "..e..", "...ee"];
383
+ const TV_REMOTE_SHADES = ["KKK.KKK", "KKKKKKK"];
384
+ const FOCUS_GLASS = stamp(ring(9, "n", "c"), ["l"], 3, 3);
385
+ const FOCUS_HANDLE = ["..mm", ".mm.", "mm.."];
386
+ function bracket(c, corner) {
387
+ const h = c.repeat(4);
388
+ const v = `${c}...`;
389
+ const rows = [h, v, v, v];
390
+ const flipX = r => r.split("").reverse().join("");
391
+ let out = rows;
392
+ if (corner === "tr" || corner === "br") out = out.map(flipX);
393
+ if (corner === "bl" || corner === "br") out = [...out].reverse();
394
+ return out;
395
+ }
396
+ const CAMERA_BODY = stamp(stamp(stamp(["..QQQQ"], box(13, 9, "q", "Q", false), 0, 1), ring(7, "n", "c"), 3, 2), ["yy"], 9, 3);
397
+
398
+ // ----------------------------------------------------------------- scenes --
399
+ //
400
+ // Otto sits at (2, 5): lamp on row 7, eyes on rows 11–12, palm (present) at
401
+ // (15–17, 12), arm rest (lean) on row 10, feet on row 17, floor on rows 18–20.
402
+
403
+ const OTTO_SCENES = exports.OTTO_SCENES = [{
404
+ id: "network",
405
+ name: "Network",
406
+ color: "#00D4FF",
407
+ line: "The first request, caught.",
408
+ state: "present",
409
+ layers: [{
410
+ art: NETWORK_TILE,
411
+ x: 16,
412
+ y: 1,
413
+ follow: true
414
+ }, {
415
+ art: sparkle("l"),
416
+ x: 27,
417
+ y: 1,
418
+ outline: false,
419
+ follow: true
420
+ }, {
421
+ art: ["l"],
422
+ x: 14,
423
+ y: 1,
424
+ outline: false,
425
+ follow: true
426
+ }]
427
+ }, {
428
+ id: "storage",
429
+ name: "Storage",
430
+ color: "#FFB800",
431
+ line: "Keys in, keys out, nothing lost.",
432
+ state: "present",
433
+ layers: [{
434
+ art: STORAGE_SAFE,
435
+ x: 19,
436
+ y: 7
437
+ }, {
438
+ art: STORAGE_KEY,
439
+ x: 16,
440
+ y: 1,
441
+ follow: true,
442
+ over: true
443
+ }],
444
+ ground: [3, 29]
445
+ }, {
446
+ id: "react-query",
447
+ name: "Query",
448
+ color: "#02CEE2",
449
+ line: "Ask anything, find everything.",
450
+ state: "static",
451
+ ottoX: 6,
452
+ ottoY: 3,
453
+ layers: [{
454
+ art: QUERY_SUNSET,
455
+ x: 11,
456
+ y: 0,
457
+ outline: false
458
+ }, {
459
+ art: QUERY_SAND,
460
+ x: 0,
461
+ y: 13
462
+ }, {
463
+ art: QUERY_PALM,
464
+ x: 0,
465
+ y: 0
466
+ }, {
467
+ art: QUERY_SHADES,
468
+ x: 9,
469
+ y: 8,
470
+ outline: false,
471
+ over: true
472
+ }, {
473
+ art: QUERY_SMILE,
474
+ x: 12,
475
+ y: 11,
476
+ outline: false,
477
+ over: true
478
+ }, {
479
+ art: QUERY_LAPTOP_LID,
480
+ x: 15,
481
+ y: 12,
482
+ over: true
483
+ }, {
484
+ art: QUERY_LAPTOP_BASE,
485
+ x: 13,
486
+ y: 20,
487
+ outline: false,
488
+ over: true
489
+ }, {
490
+ art: QUERY_ARM,
491
+ x: 19,
492
+ y: 10,
493
+ outline: false,
494
+ over: true
495
+ }],
496
+ ground: [2, 27]
497
+ }, {
498
+ id: "env",
499
+ name: "Env",
500
+ color: "#4AFF9F",
501
+ line: "Every variable, checked.",
502
+ state: "lean",
503
+ layers: [{
504
+ art: ENV_PANEL,
505
+ x: 16,
506
+ y: 7
507
+ }],
508
+ ground: [3, 28]
509
+ }, {
510
+ id: "redux",
511
+ name: "Redux",
512
+ color: "#764abc",
513
+ line: "One store, held close.",
514
+ state: "hug",
515
+ layers: [{
516
+ art: REDUX_KNOT,
517
+ x: 6,
518
+ y: 12,
519
+ over: true,
520
+ follow: true
521
+ }, {
522
+ art: ["e.e", "eee", ".e."],
523
+ x: 17,
524
+ y: 4,
525
+ outline: false
526
+ }, {
527
+ art: ["e.e", "eee", ".e."],
528
+ x: 21,
529
+ y: 1,
530
+ outline: false
531
+ }]
532
+ }, {
533
+ id: "zustand",
534
+ name: "Zustand",
535
+ color: "#C08552",
536
+ line: "Small stores, big possibilities.",
537
+ state: "hug",
538
+ layers: [{
539
+ art: ZUSTAND_BEAR,
540
+ x: 6,
541
+ y: 12,
542
+ over: true,
543
+ follow: true
544
+ }, {
545
+ art: ["e.e", "eee", ".e."],
546
+ x: 18,
547
+ y: 3,
548
+ outline: false
549
+ }]
550
+ }, {
551
+ id: "jotai",
552
+ name: "Jotai",
553
+ color: "#6C47FF",
554
+ line: "Atoms, one by one.",
555
+ state: "point",
556
+ layers: [{
557
+ art: JOTAI_ATOM,
558
+ x: 17,
559
+ y: 0,
560
+ follow: true
561
+ }, {
562
+ art: sparkle("y"),
563
+ x: 13,
564
+ y: 2,
565
+ outline: false
566
+ }, {
567
+ art: sparkle("y"),
568
+ x: 27,
569
+ y: 8,
570
+ outline: false
571
+ }]
572
+ }, {
573
+ id: "time-machine",
574
+ name: "Time Machine",
575
+ color: "#06B6D4",
576
+ line: "Any moment, back again.",
577
+ state: "present",
578
+ layers: [{
579
+ art: TIME_MACHINE_REWIND,
580
+ x: 16,
581
+ y: -1,
582
+ follow: true
583
+ }, {
584
+ art: ["ccc", "", ".cccc", "", "ccc"],
585
+ x: 0,
586
+ y: 9,
587
+ outline: false
588
+ }]
589
+ }, {
590
+ id: "routes",
591
+ name: "Routes",
592
+ color: "#FF9F1C",
593
+ line: "Knows where you are going.",
594
+ state: "point",
595
+ layers: [{
596
+ art: ROUTES_PIN,
597
+ x: 20,
598
+ y: 0,
599
+ follow: true
600
+ }, {
601
+ art: ["........ee", ".......e..", ".....ee...", "...ee.....", "ee........"],
602
+ x: 15,
603
+ y: 10,
604
+ outline: false
605
+ }]
606
+ }, {
607
+ id: "highlight-updates",
608
+ name: "Highlight Updates",
609
+ color: "#10B981",
610
+ line: "See every render. Catch what changed.",
611
+ state: "lift",
612
+ layers: [{
613
+ art: HIGHLIGHT_ARROW,
614
+ x: 6,
615
+ y: -1,
616
+ follow: true
617
+ }, {
618
+ art: sparkle("y"),
619
+ x: 1,
620
+ y: 0,
621
+ outline: false
622
+ }, {
623
+ art: sparkle("y"),
624
+ x: 15,
625
+ y: 1,
626
+ outline: false
627
+ }, {
628
+ art: ["l"],
629
+ x: 3,
630
+ y: 4,
631
+ outline: false
632
+ }, {
633
+ art: ["l"],
634
+ x: 14,
635
+ y: 5,
636
+ outline: false
637
+ }]
638
+ }, {
639
+ id: "debug-borders",
640
+ name: "Debug Borders",
641
+ color: "#10B981",
642
+ line: "Every box, outlined.",
643
+ state: "point",
644
+ layers: [{
645
+ art: DEBUG_BORDER,
646
+ x: 17,
647
+ y: 0,
648
+ outline: false,
649
+ follow: true
650
+ }]
651
+ }, {
652
+ id: "image-overlay",
653
+ name: "Overlay",
654
+ color: "#A855F7",
655
+ line: "Design on top, pixel for pixel.",
656
+ state: "present",
657
+ layers: [{
658
+ art: plane("P"),
659
+ x: 16,
660
+ y: 8,
661
+ follow: true
662
+ }, {
663
+ art: plane("b"),
664
+ x: 16,
665
+ y: 5,
666
+ follow: true
667
+ }, {
668
+ art: plane("c"),
669
+ x: 16,
670
+ y: 2,
671
+ follow: true
672
+ }]
673
+ }, {
674
+ id: "impersonate",
675
+ name: "Impersonate",
676
+ color: "#F59E0B",
677
+ line: "Be anyone, safely.",
678
+ state: "present",
679
+ layers: [{
680
+ art: IMPERSONATE_HAT,
681
+ x: 3,
682
+ y: 4,
683
+ over: true
684
+ }, {
685
+ art: IMPERSONATE_GLASSES,
686
+ x: 6,
687
+ y: 10,
688
+ over: true,
689
+ outline: false
690
+ }, {
691
+ art: IMPERSONATE_STACHE,
692
+ x: 7,
693
+ y: 13,
694
+ over: true,
695
+ outline: false
696
+ }, {
697
+ art: IMPERSONATE_CARD,
698
+ x: 17,
699
+ y: 3,
700
+ follow: true
701
+ }]
702
+ }, {
703
+ id: "perf-monitor",
704
+ name: "Bench",
705
+ color: "#F59E0B",
706
+ line: "Frames, counted.",
707
+ state: "present",
708
+ layers: [{
709
+ art: BENCH_WATCH,
710
+ x: 17,
711
+ y: 0,
712
+ follow: true
713
+ }, {
714
+ art: ["ccc", "", ".cccc", "", "ccc"],
715
+ x: 0,
716
+ y: 9,
717
+ outline: false
718
+ }, {
719
+ art: ["KK", "..KK"],
720
+ x: 6,
721
+ y: 9,
722
+ over: true,
723
+ outline: false
724
+ }, {
725
+ art: [".KK", "KK"],
726
+ x: 10,
727
+ y: 9,
728
+ over: true,
729
+ outline: false
730
+ }]
731
+ }, {
732
+ id: "js-top",
733
+ name: "JS Top",
734
+ color: "#F59E0B",
735
+ line: "Who is eating the thread.",
736
+ state: "debugging",
737
+ layers: [{
738
+ art: JS_TOP_CHART,
739
+ x: 18,
740
+ y: 6
741
+ }],
742
+ ground: [3, 29]
743
+ }, {
744
+ id: "images",
745
+ name: "Images",
746
+ color: "#C084FC",
747
+ line: "Every image, weighed.",
748
+ state: "present",
749
+ layers: [{
750
+ art: IMAGES_CARD,
751
+ x: 16,
752
+ y: 2,
753
+ follow: true
754
+ }, {
755
+ art: sparkle("y"),
756
+ x: 26,
757
+ y: 0,
758
+ outline: false
759
+ }, {
760
+ art: sparkle("y"),
761
+ x: 14,
762
+ y: 0,
763
+ outline: false
764
+ }]
765
+ }, {
766
+ id: "assets",
767
+ name: "Assets",
768
+ color: "#2DD4BF",
769
+ line: "What ships, and how big.",
770
+ state: "lean",
771
+ layers: [{
772
+ art: ASSETS_CRATE,
773
+ x: 16,
774
+ y: 9
775
+ }],
776
+ ground: [3, 28]
777
+ }, {
778
+ id: "console",
779
+ name: "Console",
780
+ color: "#10B981",
781
+ line: "Logs, commands, and more.",
782
+ state: "present",
783
+ layers: [{
784
+ art: CONSOLE_MONITOR,
785
+ x: 18,
786
+ y: 1
787
+ }, {
788
+ art: CONSOLE_STAND,
789
+ x: 21,
790
+ y: 11
791
+ }, {
792
+ art: CONSOLE_KEYS,
793
+ x: 15,
794
+ y: 13,
795
+ over: true
796
+ }],
797
+ ground: [3, 28]
798
+ }, {
799
+ id: "events",
800
+ name: "Events",
801
+ color: "#00D4FF",
802
+ line: "Everything in order.",
803
+ state: "present",
804
+ layers: [{
805
+ art: EVENTS_LINE,
806
+ x: 15,
807
+ y: 1,
808
+ follow: true
809
+ }]
810
+ }, {
811
+ id: "sentry",
812
+ name: "Sentry",
813
+ color: "#FF3366",
814
+ line: "Catch issues before they ship.",
815
+ state: "present",
816
+ layers: [{
817
+ art: SENTRY_SHIELD,
818
+ x: 17,
819
+ y: -1,
820
+ follow: true
821
+ }, {
822
+ art: ["KK", "..KK"],
823
+ x: 6,
824
+ y: 9,
825
+ over: true,
826
+ outline: false
827
+ }, {
828
+ art: [".KK", "KK"],
829
+ x: 10,
830
+ y: 9,
831
+ over: true,
832
+ outline: false
833
+ }]
834
+ }, {
835
+ id: "scenarios",
836
+ name: "Scenarios",
837
+ color: "#F43F5E",
838
+ line: "Set the stage, replay it.",
839
+ state: "present",
840
+ layers: [{
841
+ art: SCENARIOS_FLOW,
842
+ x: 16,
843
+ y: 0,
844
+ follow: true
845
+ }]
846
+ }, {
847
+ id: "ask-buoy",
848
+ name: "Ask Buoy",
849
+ color: "#7DD3FC",
850
+ line: "Get answers. Move faster.",
851
+ state: "wave",
852
+ layers: [{
853
+ art: ASK_BUOY_BUBBLE,
854
+ x: 16,
855
+ y: 0
856
+ }, {
857
+ art: sparkle("u"),
858
+ x: 26,
859
+ y: 10,
860
+ outline: false
861
+ }, {
862
+ art: ["u"],
863
+ x: 14,
864
+ y: 3,
865
+ outline: false
866
+ }]
867
+ }, {
868
+ id: "tv-remote",
869
+ name: "TV Remote",
870
+ color: "#FF3366",
871
+ line: "Control the app from here.",
872
+ state: "present",
873
+ layers: [{
874
+ art: TV_REMOTE_SHADES,
875
+ x: 6,
876
+ y: 11,
877
+ over: true,
878
+ outline: false
879
+ }, {
880
+ art: TV_REMOTE_REMOTE,
881
+ x: 16,
882
+ y: 5,
883
+ follow: true,
884
+ over: true
885
+ }, {
886
+ art: TV_REMOTE_WAVES,
887
+ x: 23,
888
+ y: 2,
889
+ outline: false,
890
+ follow: true
891
+ }]
892
+ }, {
893
+ id: "focus-inspector",
894
+ name: "Focus Inspector",
895
+ color: "#4ADE80",
896
+ line: "See what's focused.",
897
+ state: "present",
898
+ layers: [{
899
+ art: bracket("f", "tl"),
900
+ x: 1,
901
+ y: 1,
902
+ outline: false
903
+ }, {
904
+ art: bracket("f", "tr"),
905
+ x: 26,
906
+ y: 1,
907
+ outline: false
908
+ }, {
909
+ art: bracket("f", "bl"),
910
+ x: 1,
911
+ y: 17,
912
+ outline: false
913
+ }, {
914
+ art: bracket("f", "br"),
915
+ x: 26,
916
+ y: 17,
917
+ outline: false
918
+ }, {
919
+ art: FOCUS_GLASS,
920
+ x: 18,
921
+ y: 2,
922
+ follow: true
923
+ }, {
924
+ art: FOCUS_HANDLE,
925
+ x: 15,
926
+ y: 9,
927
+ follow: true
928
+ }]
929
+ }, {
930
+ id: "camera",
931
+ name: "Camera",
932
+ color: "#F472B6",
933
+ line: "A real feed, on the simulator.",
934
+ state: "present",
935
+ layers: [{
936
+ art: CAMERA_BODY,
937
+ x: 16,
938
+ y: 3,
939
+ follow: true
940
+ }, {
941
+ art: star("y"),
942
+ x: 25,
943
+ y: -1,
944
+ outline: false
945
+ }]
946
+ }];
947
+
948
+ /** Scene lookup by tool id. */
949
+ const OTTO_SCENE_BY_ID = exports.OTTO_SCENE_BY_ID = Object.fromEntries(OTTO_SCENES.map(s => [s.id, s]));