@buoy-gg/shared-ui 7.0.41 → 7.0.43

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 (1206) hide show
  1. package/dataViewer.js +1 -9
  2. package/floating.js +1 -2
  3. package/history.js +1 -7
  4. package/hooks.js +1 -7
  5. package/lib/commonjs/JsModal.js +1 -1766
  6. package/lib/commonjs/JsModal.web.js +1 -1589
  7. package/lib/commonjs/clipboard/autoDetectClipboard.js +1 -67
  8. package/lib/commonjs/clipboard/clipboard-impl.js +1 -128
  9. package/lib/commonjs/clipboard/clipboard-impl.web.js +1 -21
  10. package/lib/commonjs/clipboard/copyToClipboard.js +1 -64
  11. package/lib/commonjs/clipboard/index.js +1 -25
  12. package/lib/commonjs/colors/index.js +1 -49
  13. package/lib/commonjs/context/HintsContext.js +1 -49
  14. package/lib/commonjs/context/index.js +1 -24
  15. package/lib/commonjs/dataViewer/CyberpunkInput.js +1 -388
  16. package/lib/commonjs/dataViewer/DataTreeActionBar.js +1 -390
  17. package/lib/commonjs/dataViewer/DataTreeActionDock.js +1 -226
  18. package/lib/commonjs/dataViewer/DataViewer.js +1 -158
  19. package/lib/commonjs/dataViewer/DiffSummary.js +1 -134
  20. package/lib/commonjs/dataViewer/IndentGuides.js +1 -128
  21. package/lib/commonjs/dataViewer/IndentGuidesOverlay.js +1 -104
  22. package/lib/commonjs/dataViewer/JsonStringNotice.js +1 -59
  23. package/lib/commonjs/dataViewer/LiveExplorer.js +1 -943
  24. package/lib/commonjs/dataViewer/SplitDiffViewer.js +1 -421
  25. package/lib/commonjs/dataViewer/ThemedSplitView.js +1 -642
  26. package/lib/commonjs/dataViewer/TimestampDeltaBar.js +1 -96
  27. package/lib/commonjs/dataViewer/TypeLegend.js +1 -111
  28. package/lib/commonjs/dataViewer/ValueEditModal.js +1 -386
  29. package/lib/commonjs/dataViewer/VirtualizedDataExplorer.js +1 -1270
  30. package/lib/commonjs/dataViewer/diffThemes.js +1 -113
  31. package/lib/commonjs/dataViewer/index.js +1 -320
  32. package/lib/commonjs/dataViewer/jsonOps.js +1 -320
  33. package/lib/commonjs/dataViewer/jsonStringValue.js +1 -94
  34. package/lib/commonjs/dataViewer/lineDiff.js +1 -568
  35. package/lib/commonjs/dataViewer/nestedPath.js +1 -115
  36. package/lib/commonjs/dataViewer/objectDiff.js +1 -304
  37. package/lib/commonjs/dataViewer/timestampDiff.js +1 -146
  38. package/lib/commonjs/dataViewer/tree/TreeDiffViewer.js +1 -915
  39. package/lib/commonjs/dataViewer/treeActions.js +1 -168
  40. package/lib/commonjs/dataViewer/useTreeDraft.js +1 -125
  41. package/lib/commonjs/dataViewer/useTreeEditor.js +1 -105
  42. package/lib/commonjs/env/EnvironmentIndicator.js +1 -129
  43. package/lib/commonjs/env/EnvironmentIndicator.web.js +1 -114
  44. package/lib/commonjs/env/EnvironmentSelector.js +1 -205
  45. package/lib/commonjs/env/EnvironmentSelectorInline.js +1 -299
  46. package/lib/commonjs/env/EnvironmentSelectorInline.web.js +1 -178
  47. package/lib/commonjs/history/HistoryProvider.js +1 -246
  48. package/lib/commonjs/history/components/HistoryEntryRow.js +1 -146
  49. package/lib/commonjs/history/components/HistoryList.js +1 -174
  50. package/lib/commonjs/history/components/index.js +1 -25
  51. package/lib/commonjs/history/index.js +1 -61
  52. package/lib/commonjs/history/types.js +1 -5
  53. package/lib/commonjs/hooks/index.js +1 -77
  54. package/lib/commonjs/hooks/safe-area-impl.js +1 -28
  55. package/lib/commonjs/hooks/useChangeLog.js +1 -55
  56. package/lib/commonjs/hooks/useDeviceInfo.js +1 -524
  57. package/lib/commonjs/hooks/useEventStoreEvents.js +1 -65
  58. package/lib/commonjs/hooks/useFilterManager.js +1 -136
  59. package/lib/commonjs/hooks/usePersistedState.js +1 -106
  60. package/lib/commonjs/hooks/useSafeAreaInsets.js +1 -250
  61. package/lib/commonjs/hooks/useSafeAreaInsets.web.js +1 -41
  62. package/lib/commonjs/icons/BenchmarkIcon.js +1 -109
  63. package/lib/commonjs/icons/EnvLaptopIcon.js +1 -204
  64. package/lib/commonjs/icons/IconBackground.js +1 -279
  65. package/lib/commonjs/icons/ReactQueryIcon.js +1 -17
  66. package/lib/commonjs/icons/RenderCountIcon.js +1 -147
  67. package/lib/commonjs/icons/RouteMapIcon.js +1 -250
  68. package/lib/commonjs/icons/SentryBugIcon.js +1 -19
  69. package/lib/commonjs/icons/StackPulseIcon.js +1 -158
  70. package/lib/commonjs/icons/StorageStackIcon.js +1 -156
  71. package/lib/commonjs/icons/WifiCircuitIcon.js +1 -169
  72. package/lib/commonjs/icons/index.js +1 -840
  73. package/lib/commonjs/icons/lucide-icons-original-full.js +1 -3248
  74. package/lib/commonjs/icons/lucide-icons.js +1 -2476
  75. package/lib/commonjs/icons/primitives/GlobeIcon.js +1 -66
  76. package/lib/commonjs/icons/primitives/icon-primitives.js +1 -169
  77. package/lib/commonjs/icons/primitives/index.js +1 -49
  78. package/lib/commonjs/index.js +1 -1132
  79. package/lib/commonjs/license/AccountSetup.js +1 -35
  80. package/lib/commonjs/license/AccountSetup.web.js +2 -83
  81. package/lib/commonjs/license/AccountSetupContent.js +1 -482
  82. package/lib/commonjs/license/FeatureGate.js +1 -788
  83. package/lib/commonjs/license/FreeAccountPrompt.js +1 -59
  84. package/lib/commonjs/license/LicenseEntryModal.js +2 -387
  85. package/lib/commonjs/license/accountRuntime.js +1 -8
  86. package/lib/commonjs/license/accountRuntime.web.js +1 -9
  87. package/lib/commonjs/license/index.js +1 -106
  88. package/lib/commonjs/license/licenseModule.js +1 -121
  89. package/lib/commonjs/license/openPricing.js +1 -36
  90. package/lib/commonjs/license/tierLimits.js +1 -128
  91. package/lib/commonjs/logger/index-sentry.js +1 -245
  92. package/lib/commonjs/logger/index.js +1 -62
  93. package/lib/commonjs/logger/logDump.js +1 -19
  94. package/lib/commonjs/logger/types.js +1 -38
  95. package/lib/commonjs/settings/components/BubbleSettingsSection.js +1 -384
  96. package/lib/commonjs/settings/index.js +1 -24
  97. package/lib/commonjs/storage/definePersistedSetting.js +1 -67
  98. package/lib/commonjs/storage/devToolsStorageKeys.js +1 -359
  99. package/lib/commonjs/storage/index.js +1 -25
  100. package/lib/commonjs/stores/BaseEventStore.js +1 -343
  101. package/lib/commonjs/stores/ChangeLog.js +1 -197
  102. package/lib/commonjs/stores/createToolStore.js +1 -193
  103. package/lib/commonjs/stores/floatingToolStore.js +1 -71
  104. package/lib/commonjs/stores/floatingToolStore.test.js +1 -112
  105. package/lib/commonjs/stores/ignoredPatternsCore.js +1 -75
  106. package/lib/commonjs/stores/ignoredPatternsStore.js +1 -16
  107. package/lib/commonjs/stores/ignoredPatternsStore.shared.js +1 -205
  108. package/lib/commonjs/stores/ignoredPatternsStore.web.js +1 -16
  109. package/lib/commonjs/stores/index.js +1 -51
  110. package/lib/commonjs/sync/keyedArrays.js +1 -209
  111. package/lib/commonjs/sync/toolActionRegistry.js +1 -249
  112. package/lib/commonjs/sync/toolAttention.test.js +1 -51
  113. package/lib/commonjs/sync/toolSyncAdapter.js +1 -63
  114. package/lib/commonjs/sync/toolUiBridge.js +1 -132
  115. package/lib/commonjs/sync/typedEdit.js +1 -228
  116. package/lib/commonjs/sync/valuePath.js +1 -337
  117. package/lib/commonjs/sync/valueShape.js +1 -161
  118. package/lib/commonjs/sync/wireBudget.js +1 -97
  119. package/lib/commonjs/sync/wireForm.js +1 -172
  120. package/lib/commonjs/tools/defineTool.js +1 -79
  121. package/lib/commonjs/types/types.d.js +1 -1
  122. package/lib/commonjs/types/types.js +1 -37
  123. package/lib/commonjs/ui/backgrounds/BackgroundSwitcher.js +1 -354
  124. package/lib/commonjs/ui/backgrounds/ToolBackground.js +1 -76
  125. package/lib/commonjs/ui/backgrounds/backgroundStore.js +1 -130
  126. package/lib/commonjs/ui/backgrounds/index.js +1 -167
  127. package/lib/commonjs/ui/backgrounds/primitives.js +1 -369
  128. package/lib/commonjs/ui/backgrounds/registry.js +1 -98
  129. package/lib/commonjs/ui/backgrounds/rng.js +1 -93
  130. package/lib/commonjs/ui/backgrounds/skyClock.js +1 -45
  131. package/lib/commonjs/ui/backgrounds/types.js +1 -1
  132. package/lib/commonjs/ui/backgrounds/variants/daylight.js +1 -453
  133. package/lib/commonjs/ui/backgrounds/variants/deepField.js +1 -381
  134. package/lib/commonjs/ui/backgrounds/variants/hyperspace.js +1 -218
  135. package/lib/commonjs/ui/backgrounds/variants/liveSky.js +1 -898
  136. package/lib/commonjs/ui/backgrounds/variants/meteors.js +1 -401
  137. package/lib/commonjs/ui/backgrounds/variants/moonlight.js +1 -472
  138. package/lib/commonjs/ui/backgrounds/variants/underwater.js +1 -757
  139. package/lib/commonjs/ui/backgrounds/variants/wormhole/motion.js +1 -48
  140. package/lib/commonjs/ui/backgrounds/variants/wormhole/textures.js +1 -3
  141. package/lib/commonjs/ui/backgrounds/variants/wormhole.js +1 -136
  142. package/lib/commonjs/ui/components/BackButton.js +1 -47
  143. package/lib/commonjs/ui/components/Badge.js +1 -226
  144. package/lib/commonjs/ui/components/ChangeRow.js +1 -111
  145. package/lib/commonjs/ui/components/ChipStrip.js +1 -94
  146. package/lib/commonjs/ui/components/ClipboardHintBanner.js +1 -149
  147. package/lib/commonjs/ui/components/CollapsibleSection.js +1 -170
  148. package/lib/commonjs/ui/components/CompactFilterChips.js +1 -114
  149. package/lib/commonjs/ui/components/CompactRow.js +1 -295
  150. package/lib/commonjs/ui/components/CopyButton.js +1 -307
  151. package/lib/commonjs/ui/components/DataInspector.js +1 -323
  152. package/lib/commonjs/ui/components/DetailView.js +1 -358
  153. package/lib/commonjs/ui/components/DetailViewToggle.js +1 -130
  154. package/lib/commonjs/ui/components/DevToolsCard.js +1 -126
  155. package/lib/commonjs/ui/components/DraggableHeader.js +1 -215
  156. package/lib/commonjs/ui/components/DynamicFilterView.js +1 -758
  157. package/lib/commonjs/ui/components/EmptyState.js +1 -151
  158. package/lib/commonjs/ui/components/EntityFilterView.js +1 -355
  159. package/lib/commonjs/ui/components/EventHistoryViewer/CompareBar.js +1 -211
  160. package/lib/commonjs/ui/components/EventHistoryViewer/DiffModeTabs.js +1 -99
  161. package/lib/commonjs/ui/components/EventHistoryViewer/EventHistoryViewer.js +1 -184
  162. package/lib/commonjs/ui/components/EventHistoryViewer/EventPickerModal.js +1 -208
  163. package/lib/commonjs/ui/components/EventHistoryViewer/ViewToggleCards.js +1 -137
  164. package/lib/commonjs/ui/components/EventHistoryViewer/index.js +1 -40
  165. package/lib/commonjs/ui/components/EventHistoryViewer/types.js +1 -5
  166. package/lib/commonjs/ui/components/EventListItem.js +1 -247
  167. package/lib/commonjs/ui/components/EventStepperFooter.js +1 -185
  168. package/lib/commonjs/ui/components/ExpandablePopover.js +1 -381
  169. package/lib/commonjs/ui/components/ExpandedInfoRow.js +1 -108
  170. package/lib/commonjs/ui/components/ExportPreview.js +1 -174
  171. package/lib/commonjs/ui/components/FilterComponents.js +1 -291
  172. package/lib/commonjs/ui/components/GripVerticalIcon.js +1 -65
  173. package/lib/commonjs/ui/components/HeaderSearchButton.js +1 -50
  174. package/lib/commonjs/ui/components/InfoRow.js +1 -91
  175. package/lib/commonjs/ui/components/ListItem.js +1 -173
  176. package/lib/commonjs/ui/components/ModalHeader.js +1 -305
  177. package/lib/commonjs/ui/components/ModalHintBanner.js +1 -147
  178. package/lib/commonjs/ui/components/Pill.js +1 -115
  179. package/lib/commonjs/ui/components/PowerToggleButton.js +1 -78
  180. package/lib/commonjs/ui/components/SearchBar.js +1 -165
  181. package/lib/commonjs/ui/components/SectionHeader.js +1 -129
  182. package/lib/commonjs/ui/components/StatsCard.js +1 -198
  183. package/lib/commonjs/ui/components/StatusIndicator.js +1 -231
  184. package/lib/commonjs/ui/components/StorageTypeBadge.js +1 -97
  185. package/lib/commonjs/ui/components/TabSelector.js +1 -102
  186. package/lib/commonjs/ui/components/TimeDisplay.js +1 -142
  187. package/lib/commonjs/ui/components/ToggleRow.js +1 -116
  188. package/lib/commonjs/ui/components/ToolButton.js +1 -93
  189. package/lib/commonjs/ui/components/ToolEmptyState.js +1 -154
  190. package/lib/commonjs/ui/components/ToolFooter.js +1 -205
  191. package/lib/commonjs/ui/components/ValueTypeBadge.js +1 -147
  192. package/lib/commonjs/ui/components/WindowControls.js +1 -387
  193. package/lib/commonjs/ui/components/index.js +1 -507
  194. package/lib/commonjs/ui/components/windowDrag.js +1 -45
  195. package/lib/commonjs/ui/console/CyberpunkButtonOutline.js +1 -261
  196. package/lib/commonjs/ui/console/CyberpunkIconContainer.js +1 -186
  197. package/lib/commonjs/ui/console/CyberpunkSectionButton.js +1 -123
  198. package/lib/commonjs/ui/floating/FloatingTool.js +1 -1010
  199. package/lib/commonjs/ui/floating/FloatingTool.web.js +1 -601
  200. package/lib/commonjs/ui/floating/FloatingToolHost.js +1 -32
  201. package/lib/commonjs/ui/floating/FloatingToolHost.web.js +1 -28
  202. package/lib/commonjs/ui/floating/index.js +1 -105
  203. package/lib/commonjs/ui/floating/index.web.js +1 -105
  204. package/lib/commonjs/ui/floating/onboardingConstants.js +1 -70
  205. package/lib/commonjs/ui/floating/onboardingConstants.web.js +1 -34
  206. package/lib/commonjs/ui/fonts.js +1 -12
  207. package/lib/commonjs/ui/gameUI/components/GameUICollapsibleSection.js +1 -121
  208. package/lib/commonjs/ui/gameUI/components/GameUICompactStats.js +1 -336
  209. package/lib/commonjs/ui/gameUI/components/GameUIIssuesList.js +1 -284
  210. package/lib/commonjs/ui/gameUI/components/GameUIStatusHeader.js +1 -145
  211. package/lib/commonjs/ui/gameUI/constants/gameUIColors.js +1 -224
  212. package/lib/commonjs/ui/gameUI/constants/macOSDesignSystemColors.js +1 -224
  213. package/lib/commonjs/ui/gameUI/hooks/useGameUIAlertState.js +1 -110
  214. package/lib/commonjs/ui/gameUI/index.js +1 -72
  215. package/lib/commonjs/ui/index.js +1 -217
  216. package/lib/commonjs/ui/listPresets.js +1 -43
  217. package/lib/commonjs/ui/night/nightTheme.js +1 -130
  218. package/lib/commonjs/ui/night/primitives.js +1 -524
  219. package/lib/commonjs/ui/otto/OttoSceneView.js +1 -69
  220. package/lib/commonjs/ui/otto/OttoSprite.js +1 -510
  221. package/lib/commonjs/ui/otto/index.js +1 -60
  222. package/lib/commonjs/ui/otto/ottoEngine.js +1 -2737
  223. package/lib/commonjs/ui/otto/ottoScenes.js +1 -949
  224. package/lib/commonjs/ui/otto/ottoSheet.js +1 -191
  225. package/lib/commonjs/ui/toolTheme.js +1 -97
  226. package/lib/commonjs/utils/absoluteFill.js +1 -28
  227. package/lib/commonjs/utils/browserAsyncStorage.js +1 -157
  228. package/lib/commonjs/utils/browserNavigation.js +1 -116
  229. package/lib/commonjs/utils/devServer.js +1 -66
  230. package/lib/commonjs/utils/devServer.web.js +1 -10
  231. package/lib/commonjs/utils/displayValue.js +1 -41
  232. package/lib/commonjs/utils/domRuntime.js +1 -143
  233. package/lib/commonjs/utils/expoRouterModule.js +1 -51
  234. package/lib/commonjs/utils/expoRouterModule.web.js +1 -14
  235. package/lib/commonjs/utils/formatting/dataFormatting.js +1 -102
  236. package/lib/commonjs/utils/formatting/httpFormatting.js +1 -147
  237. package/lib/commonjs/utils/formatting/index.js +1 -27
  238. package/lib/commonjs/utils/getSafeAreaInsets.js +1 -40
  239. package/lib/commonjs/utils/getSafeAreaInsets.web.js +1 -35
  240. package/lib/commonjs/utils/index.js +1 -416
  241. package/lib/commonjs/utils/loadOptionalModule.js +1 -94
  242. package/lib/commonjs/utils/loadToolModule.js +1 -46
  243. package/lib/commonjs/utils/loadToolModule.web.js +1 -12
  244. package/lib/commonjs/utils/minimalSuperJSON.js +1 -347
  245. package/lib/commonjs/utils/modalStorage.js +1 -42
  246. package/lib/commonjs/utils/nativeWeb.js +1 -454
  247. package/lib/commonjs/utils/persistentStorage.js +1 -609
  248. package/lib/commonjs/utils/persistentStorage.web.js +1 -78
  249. package/lib/commonjs/utils/realNow.js +1 -0
  250. package/lib/commonjs/utils/reloadApp.js +1 -105
  251. package/lib/commonjs/utils/reloadPlatform.js +1 -37
  252. package/lib/commonjs/utils/reloadPlatform.web.js +1 -17
  253. package/lib/commonjs/utils/renderCaptureRegistry.js +1 -59
  254. package/lib/commonjs/utils/safeExpoRouter.js +1 -200
  255. package/lib/commonjs/utils/safeExpoRouter.web.js +1 -48
  256. package/lib/commonjs/utils/safeStringify.js +1 -229
  257. package/lib/commonjs/utils/snapshotProviderKit.js +1 -167
  258. package/lib/commonjs/utils/stateSnapshotRegistry.js +1 -71
  259. package/lib/commonjs/utils/stateTools.js +1 -160
  260. package/lib/commonjs/utils/subscribable.js +1 -113
  261. package/lib/commonjs/utils/subscriberCountNotifier.js +1 -72
  262. package/lib/commonjs/utils/time/RelativeTime.js +1 -31
  263. package/lib/commonjs/utils/time/TickContext.js +1 -43
  264. package/lib/commonjs/utils/time/formatRelativeTime.js +1 -34
  265. package/lib/commonjs/utils/time/index.js +1 -39
  266. package/lib/commonjs/utils/time/useRelativeTime.js +1 -36
  267. package/lib/commonjs/utils/toolModules.js +1 -25
  268. package/lib/commonjs/utils/typeHelpers.js +1 -142
  269. package/lib/commonjs/utils/valueFormatting.js +1 -140
  270. package/lib/module/JsModal.js +1 -1762
  271. package/lib/module/JsModal.web.js +1 -1585
  272. package/lib/module/clipboard/autoDetectClipboard.js +1 -45
  273. package/lib/module/clipboard/clipboard-impl.js +1 -121
  274. package/lib/module/clipboard/clipboard-impl.web.js +1 -14
  275. package/lib/module/clipboard/copyToClipboard.js +1 -60
  276. package/lib/module/clipboard/index.js +1 -5
  277. package/lib/module/colors/index.js +1 -21
  278. package/lib/module/context/HintsContext.js +1 -43
  279. package/lib/module/context/index.js +1 -3
  280. package/lib/module/dataViewer/CyberpunkInput.js +1 -384
  281. package/lib/module/dataViewer/DataTreeActionBar.js +1 -385
  282. package/lib/module/dataViewer/DataTreeActionDock.js +1 -222
  283. package/lib/module/dataViewer/DataViewer.js +1 -153
  284. package/lib/module/dataViewer/DiffSummary.js +1 -129
  285. package/lib/module/dataViewer/IndentGuides.js +1 -124
  286. package/lib/module/dataViewer/IndentGuidesOverlay.js +1 -99
  287. package/lib/module/dataViewer/JsonStringNotice.js +1 -54
  288. package/lib/module/dataViewer/LiveExplorer.js +1 -937
  289. package/lib/module/dataViewer/SplitDiffViewer.js +1 -416
  290. package/lib/module/dataViewer/ThemedSplitView.js +1 -637
  291. package/lib/module/dataViewer/TimestampDeltaBar.js +1 -91
  292. package/lib/module/dataViewer/TypeLegend.js +1 -105
  293. package/lib/module/dataViewer/ValueEditModal.js +1 -382
  294. package/lib/module/dataViewer/VirtualizedDataExplorer.js +1 -1265
  295. package/lib/module/dataViewer/diffThemes.js +1 -109
  296. package/lib/module/dataViewer/index.js +1 -57
  297. package/lib/module/dataViewer/jsonOps.js +1 -311
  298. package/lib/module/dataViewer/jsonStringValue.js +1 -89
  299. package/lib/module/dataViewer/lineDiff.js +1 -564
  300. package/lib/module/dataViewer/nestedPath.js +1 -109
  301. package/lib/module/dataViewer/objectDiff.js +1 -297
  302. package/lib/module/dataViewer/timestampDiff.js +1 -139
  303. package/lib/module/dataViewer/tree/TreeDiffViewer.js +1 -909
  304. package/lib/module/dataViewer/treeActions.js +1 -162
  305. package/lib/module/dataViewer/useTreeDraft.js +1 -121
  306. package/lib/module/dataViewer/useTreeEditor.js +1 -101
  307. package/lib/module/env/EnvironmentIndicator.js +1 -125
  308. package/lib/module/env/EnvironmentIndicator.web.js +1 -108
  309. package/lib/module/env/EnvironmentSelector.js +1 -201
  310. package/lib/module/env/EnvironmentSelectorInline.js +1 -295
  311. package/lib/module/env/EnvironmentSelectorInline.web.js +1 -173
  312. package/lib/module/history/HistoryProvider.js +1 -237
  313. package/lib/module/history/components/HistoryEntryRow.js +1 -142
  314. package/lib/module/history/components/HistoryList.js +1 -169
  315. package/lib/module/history/components/index.js +1 -8
  316. package/lib/module/history/index.js +1 -15
  317. package/lib/module/history/types.js +1 -3
  318. package/lib/module/hooks/index.js +1 -9
  319. package/lib/module/hooks/safe-area-impl.js +1 -23
  320. package/lib/module/hooks/useChangeLog.js +1 -50
  321. package/lib/module/hooks/useDeviceInfo.js +1 -519
  322. package/lib/module/hooks/useEventStoreEvents.js +1 -61
  323. package/lib/module/hooks/useFilterManager.js +1 -132
  324. package/lib/module/hooks/usePersistedState.js +1 -102
  325. package/lib/module/hooks/useSafeAreaInsets.js +1 -245
  326. package/lib/module/hooks/useSafeAreaInsets.web.js +1 -30
  327. package/lib/module/icons/BenchmarkIcon.js +1 -104
  328. package/lib/module/icons/EnvLaptopIcon.js +1 -199
  329. package/lib/module/icons/IconBackground.js +1 -274
  330. package/lib/module/icons/ReactQueryIcon.js +1 -12
  331. package/lib/module/icons/RenderCountIcon.js +1 -142
  332. package/lib/module/icons/RouteMapIcon.js +1 -245
  333. package/lib/module/icons/SentryBugIcon.js +1 -14
  334. package/lib/module/icons/StackPulseIcon.js +1 -153
  335. package/lib/module/icons/StorageStackIcon.js +1 -151
  336. package/lib/module/icons/WifiCircuitIcon.js +1 -164
  337. package/lib/module/icons/index.js +1 -63
  338. package/lib/module/icons/lucide-icons-original-full.js +1 -3178
  339. package/lib/module/icons/lucide-icons.js +1 -2420
  340. package/lib/module/icons/primitives/GlobeIcon.js +1 -61
  341. package/lib/module/icons/primitives/icon-primitives.js +1 -161
  342. package/lib/module/icons/primitives/index.js +1 -15
  343. package/lib/module/index.js +1 -111
  344. package/lib/module/license/AccountSetup.js +1 -31
  345. package/lib/module/license/AccountSetup.web.js +3 -80
  346. package/lib/module/license/AccountSetupContent.js +1 -476
  347. package/lib/module/license/FeatureGate.js +1 -778
  348. package/lib/module/license/FreeAccountPrompt.js +1 -50
  349. package/lib/module/license/LicenseEntryModal.js +2 -381
  350. package/lib/module/license/accountRuntime.js +1 -3
  351. package/lib/module/license/accountRuntime.web.js +1 -4
  352. package/lib/module/license/index.js +1 -9
  353. package/lib/module/license/licenseModule.js +1 -109
  354. package/lib/module/license/openPricing.js +1 -31
  355. package/lib/module/license/tierLimits.js +1 -122
  356. package/lib/module/logger/index-sentry.js +1 -230
  357. package/lib/module/logger/index.js +1 -13
  358. package/lib/module/logger/logDump.js +1 -13
  359. package/lib/module/logger/types.js +1 -37
  360. package/lib/module/settings/components/BubbleSettingsSection.js +1 -378
  361. package/lib/module/settings/index.js +1 -3
  362. package/lib/module/storage/definePersistedSetting.js +1 -63
  363. package/lib/module/storage/devToolsStorageKeys.js +1 -352
  364. package/lib/module/storage/index.js +1 -4
  365. package/lib/module/stores/BaseEventStore.js +1 -339
  366. package/lib/module/stores/ChangeLog.js +1 -192
  367. package/lib/module/stores/createToolStore.js +1 -189
  368. package/lib/module/stores/floatingToolStore.js +1 -61
  369. package/lib/module/stores/floatingToolStore.test.js +1 -111
  370. package/lib/module/stores/ignoredPatternsCore.js +1 -69
  371. package/lib/module/stores/ignoredPatternsStore.js +1 -3
  372. package/lib/module/stores/ignoredPatternsStore.shared.js +1 -189
  373. package/lib/module/stores/ignoredPatternsStore.web.js +1 -3
  374. package/lib/module/stores/index.js +1 -10
  375. package/lib/module/sync/keyedArrays.js +1 -204
  376. package/lib/module/sync/toolActionRegistry.js +1 -236
  377. package/lib/module/sync/toolAttention.test.js +1 -50
  378. package/lib/module/sync/toolSyncAdapter.js +1 -58
  379. package/lib/module/sync/toolUiBridge.js +1 -123
  380. package/lib/module/sync/typedEdit.js +1 -220
  381. package/lib/module/sync/valuePath.js +1 -330
  382. package/lib/module/sync/valueShape.js +1 -153
  383. package/lib/module/sync/wireBudget.js +1 -92
  384. package/lib/module/sync/wireForm.js +1 -159
  385. package/lib/module/tools/defineTool.js +1 -74
  386. package/lib/module/types/types.d.js +1 -1
  387. package/lib/module/types/types.js +1 -32
  388. package/lib/module/ui/backgrounds/BackgroundSwitcher.js +1 -350
  389. package/lib/module/ui/backgrounds/ToolBackground.js +1 -72
  390. package/lib/module/ui/backgrounds/backgroundStore.js +1 -125
  391. package/lib/module/ui/backgrounds/index.js +1 -19
  392. package/lib/module/ui/backgrounds/primitives.js +1 -365
  393. package/lib/module/ui/backgrounds/registry.js +1 -91
  394. package/lib/module/ui/backgrounds/rng.js +1 -85
  395. package/lib/module/ui/backgrounds/skyClock.js +1 -39
  396. package/lib/module/ui/backgrounds/types.js +1 -1
  397. package/lib/module/ui/backgrounds/variants/daylight.js +1 -449
  398. package/lib/module/ui/backgrounds/variants/deepField.js +1 -378
  399. package/lib/module/ui/backgrounds/variants/hyperspace.js +1 -214
  400. package/lib/module/ui/backgrounds/variants/liveSky.js +1 -893
  401. package/lib/module/ui/backgrounds/variants/meteors.js +1 -397
  402. package/lib/module/ui/backgrounds/variants/moonlight.js +1 -468
  403. package/lib/module/ui/backgrounds/variants/underwater.js +1 -753
  404. package/lib/module/ui/backgrounds/variants/wormhole/motion.js +1 -44
  405. package/lib/module/ui/backgrounds/variants/wormhole/textures.js +1 -3
  406. package/lib/module/ui/backgrounds/variants/wormhole.js +1 -132
  407. package/lib/module/ui/components/BackButton.js +1 -43
  408. package/lib/module/ui/components/Badge.js +1 -218
  409. package/lib/module/ui/components/ChangeRow.js +1 -106
  410. package/lib/module/ui/components/ChipStrip.js +1 -91
  411. package/lib/module/ui/components/ClipboardHintBanner.js +1 -145
  412. package/lib/module/ui/components/CollapsibleSection.js +1 -166
  413. package/lib/module/ui/components/CompactFilterChips.js +1 -110
  414. package/lib/module/ui/components/CompactRow.js +1 -291
  415. package/lib/module/ui/components/CopyButton.js +1 -303
  416. package/lib/module/ui/components/DataInspector.js +1 -319
  417. package/lib/module/ui/components/DetailView.js +1 -354
  418. package/lib/module/ui/components/DetailViewToggle.js +1 -125
  419. package/lib/module/ui/components/DevToolsCard.js +1 -122
  420. package/lib/module/ui/components/DraggableHeader.js +1 -211
  421. package/lib/module/ui/components/DynamicFilterView.js +1 -754
  422. package/lib/module/ui/components/EmptyState.js +1 -144
  423. package/lib/module/ui/components/EntityFilterView.js +1 -351
  424. package/lib/module/ui/components/EventHistoryViewer/CompareBar.js +1 -206
  425. package/lib/module/ui/components/EventHistoryViewer/DiffModeTabs.js +1 -94
  426. package/lib/module/ui/components/EventHistoryViewer/EventHistoryViewer.js +1 -179
  427. package/lib/module/ui/components/EventHistoryViewer/EventPickerModal.js +1 -203
  428. package/lib/module/ui/components/EventHistoryViewer/ViewToggleCards.js +1 -132
  429. package/lib/module/ui/components/EventHistoryViewer/index.js +1 -19
  430. package/lib/module/ui/components/EventHistoryViewer/types.js +1 -3
  431. package/lib/module/ui/components/EventListItem.js +1 -243
  432. package/lib/module/ui/components/EventStepperFooter.js +1 -180
  433. package/lib/module/ui/components/ExpandablePopover.js +1 -378
  434. package/lib/module/ui/components/ExpandedInfoRow.js +1 -103
  435. package/lib/module/ui/components/ExportPreview.js +1 -169
  436. package/lib/module/ui/components/FilterComponents.js +1 -282
  437. package/lib/module/ui/components/GripVerticalIcon.js +1 -61
  438. package/lib/module/ui/components/HeaderSearchButton.js +1 -46
  439. package/lib/module/ui/components/InfoRow.js +1 -87
  440. package/lib/module/ui/components/ListItem.js +1 -169
  441. package/lib/module/ui/components/ModalHeader.js +1 -297
  442. package/lib/module/ui/components/ModalHintBanner.js +1 -143
  443. package/lib/module/ui/components/Pill.js +1 -111
  444. package/lib/module/ui/components/PowerToggleButton.js +1 -74
  445. package/lib/module/ui/components/SearchBar.js +1 -161
  446. package/lib/module/ui/components/SectionHeader.js +1 -125
  447. package/lib/module/ui/components/StatsCard.js +1 -194
  448. package/lib/module/ui/components/StatusIndicator.js +1 -227
  449. package/lib/module/ui/components/StorageTypeBadge.js +1 -93
  450. package/lib/module/ui/components/TabSelector.js +1 -98
  451. package/lib/module/ui/components/TimeDisplay.js +1 -138
  452. package/lib/module/ui/components/ToggleRow.js +1 -112
  453. package/lib/module/ui/components/ToolButton.js +1 -89
  454. package/lib/module/ui/components/ToolEmptyState.js +1 -149
  455. package/lib/module/ui/components/ToolFooter.js +1 -197
  456. package/lib/module/ui/components/ValueTypeBadge.js +1 -143
  457. package/lib/module/ui/components/WindowControls.js +1 -383
  458. package/lib/module/ui/components/index.js +1 -52
  459. package/lib/module/ui/components/windowDrag.js +1 -41
  460. package/lib/module/ui/console/CyberpunkButtonOutline.js +1 -257
  461. package/lib/module/ui/console/CyberpunkIconContainer.js +1 -182
  462. package/lib/module/ui/console/CyberpunkSectionButton.js +1 -119
  463. package/lib/module/ui/floating/FloatingTool.js +1 -1003
  464. package/lib/module/ui/floating/FloatingTool.web.js +1 -600
  465. package/lib/module/ui/floating/FloatingToolHost.js +1 -29
  466. package/lib/module/ui/floating/FloatingToolHost.web.js +1 -25
  467. package/lib/module/ui/floating/index.js +1 -6
  468. package/lib/module/ui/floating/index.web.js +1 -6
  469. package/lib/module/ui/floating/onboardingConstants.js +1 -64
  470. package/lib/module/ui/floating/onboardingConstants.web.js +1 -27
  471. package/lib/module/ui/fonts.js +1 -8
  472. package/lib/module/ui/gameUI/components/GameUICollapsibleSection.js +1 -117
  473. package/lib/module/ui/gameUI/components/GameUICompactStats.js +1 -332
  474. package/lib/module/ui/gameUI/components/GameUIIssuesList.js +1 -280
  475. package/lib/module/ui/gameUI/components/GameUIStatusHeader.js +1 -141
  476. package/lib/module/ui/gameUI/constants/gameUIColors.js +1 -220
  477. package/lib/module/ui/gameUI/constants/macOSDesignSystemColors.js +1 -219
  478. package/lib/module/ui/gameUI/hooks/useGameUIAlertState.js +1 -105
  479. package/lib/module/ui/gameUI/index.js +1 -19
  480. package/lib/module/ui/index.js +1 -31
  481. package/lib/module/ui/listPresets.js +1 -39
  482. package/lib/module/ui/night/nightTheme.js +1 -126
  483. package/lib/module/ui/night/primitives.js +1 -511
  484. package/lib/module/ui/otto/OttoSceneView.js +1 -64
  485. package/lib/module/ui/otto/OttoSprite.js +1 -496
  486. package/lib/module/ui/otto/index.js +1 -22
  487. package/lib/module/ui/otto/ottoEngine.js +1 -2729
  488. package/lib/module/ui/otto/ottoScenes.js +1 -942
  489. package/lib/module/ui/otto/ottoSheet.js +1 -180
  490. package/lib/module/ui/toolTheme.js +1 -93
  491. package/lib/module/utils/absoluteFill.js +1 -24
  492. package/lib/module/utils/browserAsyncStorage.js +1 -151
  493. package/lib/module/utils/browserNavigation.js +1 -108
  494. package/lib/module/utils/devServer.js +1 -62
  495. package/lib/module/utils/devServer.web.js +1 -6
  496. package/lib/module/utils/displayValue.js +1 -36
  497. package/lib/module/utils/domRuntime.js +1 -134
  498. package/lib/module/utils/expoRouterModule.js +1 -46
  499. package/lib/module/utils/expoRouterModule.web.js +1 -9
  500. package/lib/module/utils/formatting/dataFormatting.js +1 -93
  501. package/lib/module/utils/formatting/httpFormatting.js +1 -142
  502. package/lib/module/utils/formatting/index.js +1 -8
  503. package/lib/module/utils/getSafeAreaInsets.js +1 -36
  504. package/lib/module/utils/getSafeAreaInsets.web.js +1 -31
  505. package/lib/module/utils/index.js +1 -23
  506. package/lib/module/utils/loadOptionalModule.js +1 -89
  507. package/lib/module/utils/loadToolModule.js +1 -42
  508. package/lib/module/utils/loadToolModule.web.js +1 -8
  509. package/lib/module/utils/minimalSuperJSON.js +1 -342
  510. package/lib/module/utils/modalStorage.js +1 -37
  511. package/lib/module/utils/nativeWeb.js +1 -107
  512. package/lib/module/utils/persistentStorage.js +1 -603
  513. package/lib/module/utils/persistentStorage.web.js +1 -72
  514. package/lib/module/utils/realNow.js +1 -0
  515. package/lib/module/utils/reloadApp.js +1 -99
  516. package/lib/module/utils/reloadPlatform.js +1 -31
  517. package/lib/module/utils/reloadPlatform.web.js +1 -11
  518. package/lib/module/utils/renderCaptureRegistry.js +1 -54
  519. package/lib/module/utils/safeExpoRouter.js +1 -189
  520. package/lib/module/utils/safeExpoRouter.web.js +1 -37
  521. package/lib/module/utils/safeStringify.js +1 -225
  522. package/lib/module/utils/snapshotProviderKit.js +1 -156
  523. package/lib/module/utils/stateSnapshotRegistry.js +1 -64
  524. package/lib/module/utils/stateTools.js +1 -154
  525. package/lib/module/utils/subscribable.js +1 -108
  526. package/lib/module/utils/subscriberCountNotifier.js +1 -66
  527. package/lib/module/utils/time/RelativeTime.js +1 -28
  528. package/lib/module/utils/time/TickContext.js +1 -38
  529. package/lib/module/utils/time/formatRelativeTime.js +1 -30
  530. package/lib/module/utils/time/index.js +1 -6
  531. package/lib/module/utils/time/useRelativeTime.js +1 -33
  532. package/lib/module/utils/toolModules.js +1 -19
  533. package/lib/module/utils/typeHelpers.js +1 -130
  534. package/lib/module/utils/valueFormatting.js +1 -131
  535. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  536. package/lib/typescript/commonjs/icons/index.d.ts +1 -0
  537. package/lib/typescript/commonjs/index.d.ts +1 -1
  538. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +8 -0
  539. package/lib/typescript/commonjs/ui/night/primitives.d.ts +9 -3
  540. package/lib/typescript/commonjs/utils/index.d.ts +1 -0
  541. package/lib/typescript/commonjs/utils/realNow.d.ts +11 -0
  542. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  543. package/lib/typescript/module/icons/index.d.ts +1 -0
  544. package/lib/typescript/module/index.d.ts +1 -1
  545. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +8 -0
  546. package/lib/typescript/module/ui/night/primitives.d.ts +9 -3
  547. package/lib/typescript/module/utils/index.d.ts +1 -0
  548. package/lib/typescript/module/utils/realNow.d.ts +11 -0
  549. package/lib/web/asyncStorage.mjs +1 -2
  550. package/lib/web/chunks/chunk-26OV3QDY.mjs +1 -0
  551. package/lib/web/chunks/chunk-3UTMGIUG.mjs +1 -2
  552. package/lib/web/chunks/chunk-53J2FMUD.mjs +1 -2
  553. package/lib/web/chunks/chunk-5KWAGM5V.mjs +1 -0
  554. package/lib/web/chunks/chunk-5NZOQR6Q.mjs +1 -2
  555. package/lib/web/chunks/chunk-7PRKERDN.mjs +1 -0
  556. package/lib/web/chunks/chunk-CE5U3CSQ.mjs +1 -2
  557. package/lib/web/chunks/chunk-D4RXBAOO.mjs +15 -0
  558. package/lib/web/chunks/chunk-ER3T3IDI.mjs +1 -0
  559. package/lib/web/chunks/chunk-GF5C5DVX.mjs +1 -2
  560. package/lib/web/chunks/chunk-K7CGIEFU.mjs +1 -2
  561. package/lib/web/chunks/{chunk-GTYIS7H7.mjs → chunk-L3AFTHWX.mjs} +8 -9
  562. package/lib/web/chunks/chunk-LZ7FZZ7R.mjs +1 -2
  563. package/lib/web/chunks/chunk-PTK5FO6C.mjs +1 -2
  564. package/lib/web/chunks/chunk-TJUBBXXK.mjs +1 -0
  565. package/lib/web/chunks/chunk-UKYVRCMZ.mjs +1 -0
  566. package/lib/web/chunks/chunk-XYUAUO57.mjs +1 -2
  567. package/lib/web/chunks/persistentStorage.web-6OAJAVRK.mjs +1 -0
  568. package/lib/web/colors.mjs +1 -2
  569. package/lib/web/dataViewer.mjs +2 -3
  570. package/lib/web/floating.mjs +1 -2
  571. package/lib/web/history.mjs +1 -2
  572. package/lib/web/hooks.mjs +1 -2
  573. package/lib/web/index.mjs +2 -3
  574. package/lib/web/native.mjs +1 -2
  575. package/lib/web/ui.mjs +1 -2
  576. package/lib/web/utils.mjs +1 -2
  577. package/package.json +9 -15
  578. package/scripts/detect-clipboard.js +5 -121
  579. package/scripts/detect-safe-area.js +3 -127
  580. package/ui.js +1 -7
  581. package/utils.js +1 -7
  582. package/lib/typescript/commonjs/JsModal.d.ts.map +0 -1
  583. package/lib/typescript/commonjs/JsModal.web.d.ts.map +0 -1
  584. package/lib/typescript/commonjs/clipboard/autoDetectClipboard.d.ts.map +0 -1
  585. package/lib/typescript/commonjs/clipboard/clipboard-impl.d.ts.map +0 -1
  586. package/lib/typescript/commonjs/clipboard/clipboard-impl.web.d.ts.map +0 -1
  587. package/lib/typescript/commonjs/clipboard/copyToClipboard.d.ts.map +0 -1
  588. package/lib/typescript/commonjs/clipboard/index.d.ts.map +0 -1
  589. package/lib/typescript/commonjs/colors/index.d.ts.map +0 -1
  590. package/lib/typescript/commonjs/context/HintsContext.d.ts.map +0 -1
  591. package/lib/typescript/commonjs/context/index.d.ts.map +0 -1
  592. package/lib/typescript/commonjs/dataViewer/CyberpunkInput.d.ts.map +0 -1
  593. package/lib/typescript/commonjs/dataViewer/DataTreeActionBar.d.ts.map +0 -1
  594. package/lib/typescript/commonjs/dataViewer/DataTreeActionDock.d.ts.map +0 -1
  595. package/lib/typescript/commonjs/dataViewer/DataViewer.d.ts.map +0 -1
  596. package/lib/typescript/commonjs/dataViewer/DiffSummary.d.ts.map +0 -1
  597. package/lib/typescript/commonjs/dataViewer/IndentGuides.d.ts.map +0 -1
  598. package/lib/typescript/commonjs/dataViewer/IndentGuidesOverlay.d.ts.map +0 -1
  599. package/lib/typescript/commonjs/dataViewer/JsonStringNotice.d.ts.map +0 -1
  600. package/lib/typescript/commonjs/dataViewer/LiveExplorer.d.ts.map +0 -1
  601. package/lib/typescript/commonjs/dataViewer/SplitDiffViewer.d.ts.map +0 -1
  602. package/lib/typescript/commonjs/dataViewer/ThemedSplitView.d.ts.map +0 -1
  603. package/lib/typescript/commonjs/dataViewer/TimestampDeltaBar.d.ts.map +0 -1
  604. package/lib/typescript/commonjs/dataViewer/TypeLegend.d.ts.map +0 -1
  605. package/lib/typescript/commonjs/dataViewer/ValueEditModal.d.ts.map +0 -1
  606. package/lib/typescript/commonjs/dataViewer/VirtualizedDataExplorer.d.ts.map +0 -1
  607. package/lib/typescript/commonjs/dataViewer/diffThemes.d.ts.map +0 -1
  608. package/lib/typescript/commonjs/dataViewer/index.d.ts.map +0 -1
  609. package/lib/typescript/commonjs/dataViewer/jsonOps.d.ts.map +0 -1
  610. package/lib/typescript/commonjs/dataViewer/jsonStringValue.d.ts.map +0 -1
  611. package/lib/typescript/commonjs/dataViewer/lineDiff.d.ts.map +0 -1
  612. package/lib/typescript/commonjs/dataViewer/nestedPath.d.ts.map +0 -1
  613. package/lib/typescript/commonjs/dataViewer/objectDiff.d.ts.map +0 -1
  614. package/lib/typescript/commonjs/dataViewer/timestampDiff.d.ts.map +0 -1
  615. package/lib/typescript/commonjs/dataViewer/tree/TreeDiffViewer.d.ts.map +0 -1
  616. package/lib/typescript/commonjs/dataViewer/treeActions.d.ts.map +0 -1
  617. package/lib/typescript/commonjs/dataViewer/useTreeDraft.d.ts.map +0 -1
  618. package/lib/typescript/commonjs/dataViewer/useTreeEditor.d.ts.map +0 -1
  619. package/lib/typescript/commonjs/env/EnvironmentIndicator.d.ts.map +0 -1
  620. package/lib/typescript/commonjs/env/EnvironmentIndicator.web.d.ts.map +0 -1
  621. package/lib/typescript/commonjs/env/EnvironmentSelector.d.ts.map +0 -1
  622. package/lib/typescript/commonjs/env/EnvironmentSelectorInline.d.ts.map +0 -1
  623. package/lib/typescript/commonjs/env/EnvironmentSelectorInline.web.d.ts.map +0 -1
  624. package/lib/typescript/commonjs/history/HistoryProvider.d.ts.map +0 -1
  625. package/lib/typescript/commonjs/history/components/HistoryEntryRow.d.ts.map +0 -1
  626. package/lib/typescript/commonjs/history/components/HistoryList.d.ts.map +0 -1
  627. package/lib/typescript/commonjs/history/components/index.d.ts.map +0 -1
  628. package/lib/typescript/commonjs/history/index.d.ts.map +0 -1
  629. package/lib/typescript/commonjs/history/types.d.ts.map +0 -1
  630. package/lib/typescript/commonjs/hooks/index.d.ts.map +0 -1
  631. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts.map +0 -1
  632. package/lib/typescript/commonjs/hooks/useChangeLog.d.ts.map +0 -1
  633. package/lib/typescript/commonjs/hooks/useDeviceInfo.d.ts.map +0 -1
  634. package/lib/typescript/commonjs/hooks/useEventStoreEvents.d.ts.map +0 -1
  635. package/lib/typescript/commonjs/hooks/useFilterManager.d.ts.map +0 -1
  636. package/lib/typescript/commonjs/hooks/usePersistedState.d.ts.map +0 -1
  637. package/lib/typescript/commonjs/hooks/useSafeAreaInsets.d.ts.map +0 -1
  638. package/lib/typescript/commonjs/hooks/useSafeAreaInsets.web.d.ts.map +0 -1
  639. package/lib/typescript/commonjs/icons/BenchmarkIcon.d.ts.map +0 -1
  640. package/lib/typescript/commonjs/icons/EnvLaptopIcon.d.ts.map +0 -1
  641. package/lib/typescript/commonjs/icons/IconBackground.d.ts.map +0 -1
  642. package/lib/typescript/commonjs/icons/ReactQueryIcon.d.ts.map +0 -1
  643. package/lib/typescript/commonjs/icons/RenderCountIcon.d.ts.map +0 -1
  644. package/lib/typescript/commonjs/icons/RouteMapIcon.d.ts.map +0 -1
  645. package/lib/typescript/commonjs/icons/SentryBugIcon.d.ts.map +0 -1
  646. package/lib/typescript/commonjs/icons/StackPulseIcon.d.ts.map +0 -1
  647. package/lib/typescript/commonjs/icons/StorageStackIcon.d.ts.map +0 -1
  648. package/lib/typescript/commonjs/icons/WifiCircuitIcon.d.ts.map +0 -1
  649. package/lib/typescript/commonjs/icons/index.d.ts.map +0 -1
  650. package/lib/typescript/commonjs/icons/lucide-icons-original-full.d.ts.map +0 -1
  651. package/lib/typescript/commonjs/icons/lucide-icons.d.ts.map +0 -1
  652. package/lib/typescript/commonjs/icons/primitives/GlobeIcon.d.ts.map +0 -1
  653. package/lib/typescript/commonjs/icons/primitives/icon-primitives.d.ts.map +0 -1
  654. package/lib/typescript/commonjs/icons/primitives/index.d.ts.map +0 -1
  655. package/lib/typescript/commonjs/index.d.ts.map +0 -1
  656. package/lib/typescript/commonjs/license/AccountSetup.d.ts.map +0 -1
  657. package/lib/typescript/commonjs/license/AccountSetup.web.d.ts.map +0 -1
  658. package/lib/typescript/commonjs/license/AccountSetupContent.d.ts.map +0 -1
  659. package/lib/typescript/commonjs/license/FeatureGate.d.ts.map +0 -1
  660. package/lib/typescript/commonjs/license/FreeAccountPrompt.d.ts.map +0 -1
  661. package/lib/typescript/commonjs/license/LicenseEntryModal.d.ts.map +0 -1
  662. package/lib/typescript/commonjs/license/accountRuntime.d.ts.map +0 -1
  663. package/lib/typescript/commonjs/license/accountRuntime.web.d.ts.map +0 -1
  664. package/lib/typescript/commonjs/license/index.d.ts.map +0 -1
  665. package/lib/typescript/commonjs/license/licenseModule.d.ts.map +0 -1
  666. package/lib/typescript/commonjs/license/openPricing.d.ts.map +0 -1
  667. package/lib/typescript/commonjs/license/tierLimits.d.ts.map +0 -1
  668. package/lib/typescript/commonjs/logger/index-sentry.d.ts.map +0 -1
  669. package/lib/typescript/commonjs/logger/index.d.ts.map +0 -1
  670. package/lib/typescript/commonjs/logger/logDump.d.ts.map +0 -1
  671. package/lib/typescript/commonjs/logger/types.d.ts.map +0 -1
  672. package/lib/typescript/commonjs/settings/components/BubbleSettingsSection.d.ts.map +0 -1
  673. package/lib/typescript/commonjs/settings/index.d.ts.map +0 -1
  674. package/lib/typescript/commonjs/storage/definePersistedSetting.d.ts.map +0 -1
  675. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +0 -1
  676. package/lib/typescript/commonjs/storage/index.d.ts.map +0 -1
  677. package/lib/typescript/commonjs/stores/BaseEventStore.d.ts.map +0 -1
  678. package/lib/typescript/commonjs/stores/ChangeLog.d.ts.map +0 -1
  679. package/lib/typescript/commonjs/stores/createToolStore.d.ts.map +0 -1
  680. package/lib/typescript/commonjs/stores/floatingToolStore.d.ts.map +0 -1
  681. package/lib/typescript/commonjs/stores/floatingToolStore.test.d.ts.map +0 -1
  682. package/lib/typescript/commonjs/stores/ignoredPatternsCore.d.ts.map +0 -1
  683. package/lib/typescript/commonjs/stores/ignoredPatternsStore.d.ts.map +0 -1
  684. package/lib/typescript/commonjs/stores/ignoredPatternsStore.shared.d.ts.map +0 -1
  685. package/lib/typescript/commonjs/stores/ignoredPatternsStore.web.d.ts.map +0 -1
  686. package/lib/typescript/commonjs/stores/index.d.ts.map +0 -1
  687. package/lib/typescript/commonjs/sync/keyedArrays.d.ts.map +0 -1
  688. package/lib/typescript/commonjs/sync/toolActionRegistry.d.ts.map +0 -1
  689. package/lib/typescript/commonjs/sync/toolAttention.test.d.ts.map +0 -1
  690. package/lib/typescript/commonjs/sync/toolSyncAdapter.d.ts.map +0 -1
  691. package/lib/typescript/commonjs/sync/toolUiBridge.d.ts.map +0 -1
  692. package/lib/typescript/commonjs/sync/typedEdit.d.ts.map +0 -1
  693. package/lib/typescript/commonjs/sync/valuePath.d.ts.map +0 -1
  694. package/lib/typescript/commonjs/sync/valueShape.d.ts.map +0 -1
  695. package/lib/typescript/commonjs/sync/wireBudget.d.ts.map +0 -1
  696. package/lib/typescript/commonjs/sync/wireForm.d.ts.map +0 -1
  697. package/lib/typescript/commonjs/tools/defineTool.d.ts.map +0 -1
  698. package/lib/typescript/commonjs/types/types.d.ts.map +0 -1
  699. package/lib/typescript/commonjs/ui/backgrounds/BackgroundSwitcher.d.ts.map +0 -1
  700. package/lib/typescript/commonjs/ui/backgrounds/ToolBackground.d.ts.map +0 -1
  701. package/lib/typescript/commonjs/ui/backgrounds/backgroundStore.d.ts.map +0 -1
  702. package/lib/typescript/commonjs/ui/backgrounds/index.d.ts.map +0 -1
  703. package/lib/typescript/commonjs/ui/backgrounds/primitives.d.ts.map +0 -1
  704. package/lib/typescript/commonjs/ui/backgrounds/registry.d.ts.map +0 -1
  705. package/lib/typescript/commonjs/ui/backgrounds/rng.d.ts.map +0 -1
  706. package/lib/typescript/commonjs/ui/backgrounds/skyClock.d.ts.map +0 -1
  707. package/lib/typescript/commonjs/ui/backgrounds/types.d.ts.map +0 -1
  708. package/lib/typescript/commonjs/ui/backgrounds/variants/daylight.d.ts.map +0 -1
  709. package/lib/typescript/commonjs/ui/backgrounds/variants/deepField.d.ts.map +0 -1
  710. package/lib/typescript/commonjs/ui/backgrounds/variants/hyperspace.d.ts.map +0 -1
  711. package/lib/typescript/commonjs/ui/backgrounds/variants/liveSky.d.ts.map +0 -1
  712. package/lib/typescript/commonjs/ui/backgrounds/variants/meteors.d.ts.map +0 -1
  713. package/lib/typescript/commonjs/ui/backgrounds/variants/moonlight.d.ts.map +0 -1
  714. package/lib/typescript/commonjs/ui/backgrounds/variants/underwater.d.ts.map +0 -1
  715. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/motion.d.ts.map +0 -1
  716. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/textures.d.ts.map +0 -1
  717. package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole.d.ts.map +0 -1
  718. package/lib/typescript/commonjs/ui/components/BackButton.d.ts.map +0 -1
  719. package/lib/typescript/commonjs/ui/components/Badge.d.ts.map +0 -1
  720. package/lib/typescript/commonjs/ui/components/ChangeRow.d.ts.map +0 -1
  721. package/lib/typescript/commonjs/ui/components/ChipStrip.d.ts.map +0 -1
  722. package/lib/typescript/commonjs/ui/components/ClipboardHintBanner.d.ts.map +0 -1
  723. package/lib/typescript/commonjs/ui/components/CollapsibleSection.d.ts.map +0 -1
  724. package/lib/typescript/commonjs/ui/components/CompactFilterChips.d.ts.map +0 -1
  725. package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +0 -1
  726. package/lib/typescript/commonjs/ui/components/CopyButton.d.ts.map +0 -1
  727. package/lib/typescript/commonjs/ui/components/DataInspector.d.ts.map +0 -1
  728. package/lib/typescript/commonjs/ui/components/DetailView.d.ts.map +0 -1
  729. package/lib/typescript/commonjs/ui/components/DetailViewToggle.d.ts.map +0 -1
  730. package/lib/typescript/commonjs/ui/components/DevToolsCard.d.ts.map +0 -1
  731. package/lib/typescript/commonjs/ui/components/DraggableHeader.d.ts.map +0 -1
  732. package/lib/typescript/commonjs/ui/components/DynamicFilterView.d.ts.map +0 -1
  733. package/lib/typescript/commonjs/ui/components/EmptyState.d.ts.map +0 -1
  734. package/lib/typescript/commonjs/ui/components/EntityFilterView.d.ts.map +0 -1
  735. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/CompareBar.d.ts.map +0 -1
  736. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/DiffModeTabs.d.ts.map +0 -1
  737. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/EventHistoryViewer.d.ts.map +0 -1
  738. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/EventPickerModal.d.ts.map +0 -1
  739. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/ViewToggleCards.d.ts.map +0 -1
  740. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/index.d.ts.map +0 -1
  741. package/lib/typescript/commonjs/ui/components/EventHistoryViewer/types.d.ts.map +0 -1
  742. package/lib/typescript/commonjs/ui/components/EventListItem.d.ts.map +0 -1
  743. package/lib/typescript/commonjs/ui/components/EventStepperFooter.d.ts.map +0 -1
  744. package/lib/typescript/commonjs/ui/components/ExpandablePopover.d.ts.map +0 -1
  745. package/lib/typescript/commonjs/ui/components/ExpandedInfoRow.d.ts.map +0 -1
  746. package/lib/typescript/commonjs/ui/components/ExportPreview.d.ts.map +0 -1
  747. package/lib/typescript/commonjs/ui/components/FilterComponents.d.ts.map +0 -1
  748. package/lib/typescript/commonjs/ui/components/GripVerticalIcon.d.ts.map +0 -1
  749. package/lib/typescript/commonjs/ui/components/HeaderSearchButton.d.ts.map +0 -1
  750. package/lib/typescript/commonjs/ui/components/InfoRow.d.ts.map +0 -1
  751. package/lib/typescript/commonjs/ui/components/ListItem.d.ts.map +0 -1
  752. package/lib/typescript/commonjs/ui/components/ModalHeader.d.ts.map +0 -1
  753. package/lib/typescript/commonjs/ui/components/ModalHintBanner.d.ts.map +0 -1
  754. package/lib/typescript/commonjs/ui/components/Pill.d.ts.map +0 -1
  755. package/lib/typescript/commonjs/ui/components/PowerToggleButton.d.ts.map +0 -1
  756. package/lib/typescript/commonjs/ui/components/SearchBar.d.ts.map +0 -1
  757. package/lib/typescript/commonjs/ui/components/SectionHeader.d.ts.map +0 -1
  758. package/lib/typescript/commonjs/ui/components/StatsCard.d.ts.map +0 -1
  759. package/lib/typescript/commonjs/ui/components/StatusIndicator.d.ts.map +0 -1
  760. package/lib/typescript/commonjs/ui/components/StorageTypeBadge.d.ts.map +0 -1
  761. package/lib/typescript/commonjs/ui/components/TabSelector.d.ts.map +0 -1
  762. package/lib/typescript/commonjs/ui/components/TimeDisplay.d.ts.map +0 -1
  763. package/lib/typescript/commonjs/ui/components/ToggleRow.d.ts.map +0 -1
  764. package/lib/typescript/commonjs/ui/components/ToolButton.d.ts.map +0 -1
  765. package/lib/typescript/commonjs/ui/components/ToolEmptyState.d.ts.map +0 -1
  766. package/lib/typescript/commonjs/ui/components/ToolFooter.d.ts.map +0 -1
  767. package/lib/typescript/commonjs/ui/components/ValueTypeBadge.d.ts.map +0 -1
  768. package/lib/typescript/commonjs/ui/components/WindowControls.d.ts.map +0 -1
  769. package/lib/typescript/commonjs/ui/components/index.d.ts.map +0 -1
  770. package/lib/typescript/commonjs/ui/components/windowDrag.d.ts.map +0 -1
  771. package/lib/typescript/commonjs/ui/console/CyberpunkButtonOutline.d.ts.map +0 -1
  772. package/lib/typescript/commonjs/ui/console/CyberpunkIconContainer.d.ts.map +0 -1
  773. package/lib/typescript/commonjs/ui/console/CyberpunkSectionButton.d.ts.map +0 -1
  774. package/lib/typescript/commonjs/ui/floating/FloatingTool.d.ts.map +0 -1
  775. package/lib/typescript/commonjs/ui/floating/FloatingTool.web.d.ts.map +0 -1
  776. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.d.ts.map +0 -1
  777. package/lib/typescript/commonjs/ui/floating/FloatingToolHost.web.d.ts.map +0 -1
  778. package/lib/typescript/commonjs/ui/floating/index.d.ts.map +0 -1
  779. package/lib/typescript/commonjs/ui/floating/index.web.d.ts.map +0 -1
  780. package/lib/typescript/commonjs/ui/floating/onboardingConstants.d.ts.map +0 -1
  781. package/lib/typescript/commonjs/ui/floating/onboardingConstants.web.d.ts.map +0 -1
  782. package/lib/typescript/commonjs/ui/fonts.d.ts.map +0 -1
  783. package/lib/typescript/commonjs/ui/gameUI/components/GameUICollapsibleSection.d.ts.map +0 -1
  784. package/lib/typescript/commonjs/ui/gameUI/components/GameUICompactStats.d.ts.map +0 -1
  785. package/lib/typescript/commonjs/ui/gameUI/components/GameUIIssuesList.d.ts.map +0 -1
  786. package/lib/typescript/commonjs/ui/gameUI/components/GameUIStatusHeader.d.ts.map +0 -1
  787. package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts.map +0 -1
  788. package/lib/typescript/commonjs/ui/gameUI/constants/macOSDesignSystemColors.d.ts.map +0 -1
  789. package/lib/typescript/commonjs/ui/gameUI/hooks/useGameUIAlertState.d.ts.map +0 -1
  790. package/lib/typescript/commonjs/ui/gameUI/index.d.ts.map +0 -1
  791. package/lib/typescript/commonjs/ui/index.d.ts.map +0 -1
  792. package/lib/typescript/commonjs/ui/listPresets.d.ts.map +0 -1
  793. package/lib/typescript/commonjs/ui/night/nightTheme.d.ts.map +0 -1
  794. package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +0 -1
  795. package/lib/typescript/commonjs/ui/otto/OttoSceneView.d.ts.map +0 -1
  796. package/lib/typescript/commonjs/ui/otto/OttoSprite.d.ts.map +0 -1
  797. package/lib/typescript/commonjs/ui/otto/index.d.ts.map +0 -1
  798. package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts.map +0 -1
  799. package/lib/typescript/commonjs/ui/otto/ottoScenes.d.ts.map +0 -1
  800. package/lib/typescript/commonjs/ui/otto/ottoSheet.d.ts.map +0 -1
  801. package/lib/typescript/commonjs/ui/toolTheme.d.ts.map +0 -1
  802. package/lib/typescript/commonjs/utils/absoluteFill.d.ts.map +0 -1
  803. package/lib/typescript/commonjs/utils/browserAsyncStorage.d.ts.map +0 -1
  804. package/lib/typescript/commonjs/utils/browserNavigation.d.ts.map +0 -1
  805. package/lib/typescript/commonjs/utils/devServer.d.ts.map +0 -1
  806. package/lib/typescript/commonjs/utils/devServer.web.d.ts.map +0 -1
  807. package/lib/typescript/commonjs/utils/displayValue.d.ts.map +0 -1
  808. package/lib/typescript/commonjs/utils/domRuntime.d.ts.map +0 -1
  809. package/lib/typescript/commonjs/utils/expoRouterModule.d.ts.map +0 -1
  810. package/lib/typescript/commonjs/utils/expoRouterModule.web.d.ts.map +0 -1
  811. package/lib/typescript/commonjs/utils/formatting/dataFormatting.d.ts.map +0 -1
  812. package/lib/typescript/commonjs/utils/formatting/httpFormatting.d.ts.map +0 -1
  813. package/lib/typescript/commonjs/utils/formatting/index.d.ts.map +0 -1
  814. package/lib/typescript/commonjs/utils/getSafeAreaInsets.d.ts.map +0 -1
  815. package/lib/typescript/commonjs/utils/getSafeAreaInsets.web.d.ts.map +0 -1
  816. package/lib/typescript/commonjs/utils/index.d.ts.map +0 -1
  817. package/lib/typescript/commonjs/utils/loadOptionalModule.d.ts.map +0 -1
  818. package/lib/typescript/commonjs/utils/loadToolModule.d.ts.map +0 -1
  819. package/lib/typescript/commonjs/utils/loadToolModule.web.d.ts.map +0 -1
  820. package/lib/typescript/commonjs/utils/minimalSuperJSON.d.ts.map +0 -1
  821. package/lib/typescript/commonjs/utils/modalStorage.d.ts.map +0 -1
  822. package/lib/typescript/commonjs/utils/nativeWeb.d.ts.map +0 -1
  823. package/lib/typescript/commonjs/utils/persistentStorage.d.ts.map +0 -1
  824. package/lib/typescript/commonjs/utils/persistentStorage.web.d.ts.map +0 -1
  825. package/lib/typescript/commonjs/utils/reloadApp.d.ts.map +0 -1
  826. package/lib/typescript/commonjs/utils/reloadPlatform.d.ts.map +0 -1
  827. package/lib/typescript/commonjs/utils/reloadPlatform.web.d.ts.map +0 -1
  828. package/lib/typescript/commonjs/utils/renderCaptureRegistry.d.ts.map +0 -1
  829. package/lib/typescript/commonjs/utils/safeExpoRouter.d.ts.map +0 -1
  830. package/lib/typescript/commonjs/utils/safeExpoRouter.web.d.ts.map +0 -1
  831. package/lib/typescript/commonjs/utils/safeStringify.d.ts.map +0 -1
  832. package/lib/typescript/commonjs/utils/snapshotProviderKit.d.ts.map +0 -1
  833. package/lib/typescript/commonjs/utils/stateSnapshotRegistry.d.ts.map +0 -1
  834. package/lib/typescript/commonjs/utils/stateTools.d.ts.map +0 -1
  835. package/lib/typescript/commonjs/utils/subscribable.d.ts.map +0 -1
  836. package/lib/typescript/commonjs/utils/subscriberCountNotifier.d.ts.map +0 -1
  837. package/lib/typescript/commonjs/utils/time/RelativeTime.d.ts.map +0 -1
  838. package/lib/typescript/commonjs/utils/time/TickContext.d.ts.map +0 -1
  839. package/lib/typescript/commonjs/utils/time/formatRelativeTime.d.ts.map +0 -1
  840. package/lib/typescript/commonjs/utils/time/index.d.ts.map +0 -1
  841. package/lib/typescript/commonjs/utils/time/useRelativeTime.d.ts.map +0 -1
  842. package/lib/typescript/commonjs/utils/toolModules.d.ts.map +0 -1
  843. package/lib/typescript/commonjs/utils/typeHelpers.d.ts.map +0 -1
  844. package/lib/typescript/commonjs/utils/valueFormatting.d.ts.map +0 -1
  845. package/lib/typescript/module/JsModal.d.ts.map +0 -1
  846. package/lib/typescript/module/JsModal.web.d.ts.map +0 -1
  847. package/lib/typescript/module/clipboard/autoDetectClipboard.d.ts.map +0 -1
  848. package/lib/typescript/module/clipboard/clipboard-impl.d.ts.map +0 -1
  849. package/lib/typescript/module/clipboard/clipboard-impl.web.d.ts.map +0 -1
  850. package/lib/typescript/module/clipboard/copyToClipboard.d.ts.map +0 -1
  851. package/lib/typescript/module/clipboard/index.d.ts.map +0 -1
  852. package/lib/typescript/module/colors/index.d.ts.map +0 -1
  853. package/lib/typescript/module/context/HintsContext.d.ts.map +0 -1
  854. package/lib/typescript/module/context/index.d.ts.map +0 -1
  855. package/lib/typescript/module/dataViewer/CyberpunkInput.d.ts.map +0 -1
  856. package/lib/typescript/module/dataViewer/DataTreeActionBar.d.ts.map +0 -1
  857. package/lib/typescript/module/dataViewer/DataTreeActionDock.d.ts.map +0 -1
  858. package/lib/typescript/module/dataViewer/DataViewer.d.ts.map +0 -1
  859. package/lib/typescript/module/dataViewer/DiffSummary.d.ts.map +0 -1
  860. package/lib/typescript/module/dataViewer/IndentGuides.d.ts.map +0 -1
  861. package/lib/typescript/module/dataViewer/IndentGuidesOverlay.d.ts.map +0 -1
  862. package/lib/typescript/module/dataViewer/JsonStringNotice.d.ts.map +0 -1
  863. package/lib/typescript/module/dataViewer/LiveExplorer.d.ts.map +0 -1
  864. package/lib/typescript/module/dataViewer/SplitDiffViewer.d.ts.map +0 -1
  865. package/lib/typescript/module/dataViewer/ThemedSplitView.d.ts.map +0 -1
  866. package/lib/typescript/module/dataViewer/TimestampDeltaBar.d.ts.map +0 -1
  867. package/lib/typescript/module/dataViewer/TypeLegend.d.ts.map +0 -1
  868. package/lib/typescript/module/dataViewer/ValueEditModal.d.ts.map +0 -1
  869. package/lib/typescript/module/dataViewer/VirtualizedDataExplorer.d.ts.map +0 -1
  870. package/lib/typescript/module/dataViewer/diffThemes.d.ts.map +0 -1
  871. package/lib/typescript/module/dataViewer/index.d.ts.map +0 -1
  872. package/lib/typescript/module/dataViewer/jsonOps.d.ts.map +0 -1
  873. package/lib/typescript/module/dataViewer/jsonStringValue.d.ts.map +0 -1
  874. package/lib/typescript/module/dataViewer/lineDiff.d.ts.map +0 -1
  875. package/lib/typescript/module/dataViewer/nestedPath.d.ts.map +0 -1
  876. package/lib/typescript/module/dataViewer/objectDiff.d.ts.map +0 -1
  877. package/lib/typescript/module/dataViewer/timestampDiff.d.ts.map +0 -1
  878. package/lib/typescript/module/dataViewer/tree/TreeDiffViewer.d.ts.map +0 -1
  879. package/lib/typescript/module/dataViewer/treeActions.d.ts.map +0 -1
  880. package/lib/typescript/module/dataViewer/useTreeDraft.d.ts.map +0 -1
  881. package/lib/typescript/module/dataViewer/useTreeEditor.d.ts.map +0 -1
  882. package/lib/typescript/module/env/EnvironmentIndicator.d.ts.map +0 -1
  883. package/lib/typescript/module/env/EnvironmentIndicator.web.d.ts.map +0 -1
  884. package/lib/typescript/module/env/EnvironmentSelector.d.ts.map +0 -1
  885. package/lib/typescript/module/env/EnvironmentSelectorInline.d.ts.map +0 -1
  886. package/lib/typescript/module/env/EnvironmentSelectorInline.web.d.ts.map +0 -1
  887. package/lib/typescript/module/history/HistoryProvider.d.ts.map +0 -1
  888. package/lib/typescript/module/history/components/HistoryEntryRow.d.ts.map +0 -1
  889. package/lib/typescript/module/history/components/HistoryList.d.ts.map +0 -1
  890. package/lib/typescript/module/history/components/index.d.ts.map +0 -1
  891. package/lib/typescript/module/history/index.d.ts.map +0 -1
  892. package/lib/typescript/module/history/types.d.ts.map +0 -1
  893. package/lib/typescript/module/hooks/index.d.ts.map +0 -1
  894. package/lib/typescript/module/hooks/safe-area-impl.d.ts.map +0 -1
  895. package/lib/typescript/module/hooks/useChangeLog.d.ts.map +0 -1
  896. package/lib/typescript/module/hooks/useDeviceInfo.d.ts.map +0 -1
  897. package/lib/typescript/module/hooks/useEventStoreEvents.d.ts.map +0 -1
  898. package/lib/typescript/module/hooks/useFilterManager.d.ts.map +0 -1
  899. package/lib/typescript/module/hooks/usePersistedState.d.ts.map +0 -1
  900. package/lib/typescript/module/hooks/useSafeAreaInsets.d.ts.map +0 -1
  901. package/lib/typescript/module/hooks/useSafeAreaInsets.web.d.ts.map +0 -1
  902. package/lib/typescript/module/icons/BenchmarkIcon.d.ts.map +0 -1
  903. package/lib/typescript/module/icons/EnvLaptopIcon.d.ts.map +0 -1
  904. package/lib/typescript/module/icons/IconBackground.d.ts.map +0 -1
  905. package/lib/typescript/module/icons/ReactQueryIcon.d.ts.map +0 -1
  906. package/lib/typescript/module/icons/RenderCountIcon.d.ts.map +0 -1
  907. package/lib/typescript/module/icons/RouteMapIcon.d.ts.map +0 -1
  908. package/lib/typescript/module/icons/SentryBugIcon.d.ts.map +0 -1
  909. package/lib/typescript/module/icons/StackPulseIcon.d.ts.map +0 -1
  910. package/lib/typescript/module/icons/StorageStackIcon.d.ts.map +0 -1
  911. package/lib/typescript/module/icons/WifiCircuitIcon.d.ts.map +0 -1
  912. package/lib/typescript/module/icons/index.d.ts.map +0 -1
  913. package/lib/typescript/module/icons/lucide-icons-original-full.d.ts.map +0 -1
  914. package/lib/typescript/module/icons/lucide-icons.d.ts.map +0 -1
  915. package/lib/typescript/module/icons/primitives/GlobeIcon.d.ts.map +0 -1
  916. package/lib/typescript/module/icons/primitives/icon-primitives.d.ts.map +0 -1
  917. package/lib/typescript/module/icons/primitives/index.d.ts.map +0 -1
  918. package/lib/typescript/module/index.d.ts.map +0 -1
  919. package/lib/typescript/module/license/AccountSetup.d.ts.map +0 -1
  920. package/lib/typescript/module/license/AccountSetup.web.d.ts.map +0 -1
  921. package/lib/typescript/module/license/AccountSetupContent.d.ts.map +0 -1
  922. package/lib/typescript/module/license/FeatureGate.d.ts.map +0 -1
  923. package/lib/typescript/module/license/FreeAccountPrompt.d.ts.map +0 -1
  924. package/lib/typescript/module/license/LicenseEntryModal.d.ts.map +0 -1
  925. package/lib/typescript/module/license/accountRuntime.d.ts.map +0 -1
  926. package/lib/typescript/module/license/accountRuntime.web.d.ts.map +0 -1
  927. package/lib/typescript/module/license/index.d.ts.map +0 -1
  928. package/lib/typescript/module/license/licenseModule.d.ts.map +0 -1
  929. package/lib/typescript/module/license/openPricing.d.ts.map +0 -1
  930. package/lib/typescript/module/license/tierLimits.d.ts.map +0 -1
  931. package/lib/typescript/module/logger/index-sentry.d.ts.map +0 -1
  932. package/lib/typescript/module/logger/index.d.ts.map +0 -1
  933. package/lib/typescript/module/logger/logDump.d.ts.map +0 -1
  934. package/lib/typescript/module/logger/types.d.ts.map +0 -1
  935. package/lib/typescript/module/settings/components/BubbleSettingsSection.d.ts.map +0 -1
  936. package/lib/typescript/module/settings/index.d.ts.map +0 -1
  937. package/lib/typescript/module/storage/definePersistedSetting.d.ts.map +0 -1
  938. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +0 -1
  939. package/lib/typescript/module/storage/index.d.ts.map +0 -1
  940. package/lib/typescript/module/stores/BaseEventStore.d.ts.map +0 -1
  941. package/lib/typescript/module/stores/ChangeLog.d.ts.map +0 -1
  942. package/lib/typescript/module/stores/createToolStore.d.ts.map +0 -1
  943. package/lib/typescript/module/stores/floatingToolStore.d.ts.map +0 -1
  944. package/lib/typescript/module/stores/floatingToolStore.test.d.ts.map +0 -1
  945. package/lib/typescript/module/stores/ignoredPatternsCore.d.ts.map +0 -1
  946. package/lib/typescript/module/stores/ignoredPatternsStore.d.ts.map +0 -1
  947. package/lib/typescript/module/stores/ignoredPatternsStore.shared.d.ts.map +0 -1
  948. package/lib/typescript/module/stores/ignoredPatternsStore.web.d.ts.map +0 -1
  949. package/lib/typescript/module/stores/index.d.ts.map +0 -1
  950. package/lib/typescript/module/sync/keyedArrays.d.ts.map +0 -1
  951. package/lib/typescript/module/sync/toolActionRegistry.d.ts.map +0 -1
  952. package/lib/typescript/module/sync/toolAttention.test.d.ts.map +0 -1
  953. package/lib/typescript/module/sync/toolSyncAdapter.d.ts.map +0 -1
  954. package/lib/typescript/module/sync/toolUiBridge.d.ts.map +0 -1
  955. package/lib/typescript/module/sync/typedEdit.d.ts.map +0 -1
  956. package/lib/typescript/module/sync/valuePath.d.ts.map +0 -1
  957. package/lib/typescript/module/sync/valueShape.d.ts.map +0 -1
  958. package/lib/typescript/module/sync/wireBudget.d.ts.map +0 -1
  959. package/lib/typescript/module/sync/wireForm.d.ts.map +0 -1
  960. package/lib/typescript/module/tools/defineTool.d.ts.map +0 -1
  961. package/lib/typescript/module/types/types.d.ts.map +0 -1
  962. package/lib/typescript/module/ui/backgrounds/BackgroundSwitcher.d.ts.map +0 -1
  963. package/lib/typescript/module/ui/backgrounds/ToolBackground.d.ts.map +0 -1
  964. package/lib/typescript/module/ui/backgrounds/backgroundStore.d.ts.map +0 -1
  965. package/lib/typescript/module/ui/backgrounds/index.d.ts.map +0 -1
  966. package/lib/typescript/module/ui/backgrounds/primitives.d.ts.map +0 -1
  967. package/lib/typescript/module/ui/backgrounds/registry.d.ts.map +0 -1
  968. package/lib/typescript/module/ui/backgrounds/rng.d.ts.map +0 -1
  969. package/lib/typescript/module/ui/backgrounds/skyClock.d.ts.map +0 -1
  970. package/lib/typescript/module/ui/backgrounds/types.d.ts.map +0 -1
  971. package/lib/typescript/module/ui/backgrounds/variants/daylight.d.ts.map +0 -1
  972. package/lib/typescript/module/ui/backgrounds/variants/deepField.d.ts.map +0 -1
  973. package/lib/typescript/module/ui/backgrounds/variants/hyperspace.d.ts.map +0 -1
  974. package/lib/typescript/module/ui/backgrounds/variants/liveSky.d.ts.map +0 -1
  975. package/lib/typescript/module/ui/backgrounds/variants/meteors.d.ts.map +0 -1
  976. package/lib/typescript/module/ui/backgrounds/variants/moonlight.d.ts.map +0 -1
  977. package/lib/typescript/module/ui/backgrounds/variants/underwater.d.ts.map +0 -1
  978. package/lib/typescript/module/ui/backgrounds/variants/wormhole/motion.d.ts.map +0 -1
  979. package/lib/typescript/module/ui/backgrounds/variants/wormhole/textures.d.ts.map +0 -1
  980. package/lib/typescript/module/ui/backgrounds/variants/wormhole.d.ts.map +0 -1
  981. package/lib/typescript/module/ui/components/BackButton.d.ts.map +0 -1
  982. package/lib/typescript/module/ui/components/Badge.d.ts.map +0 -1
  983. package/lib/typescript/module/ui/components/ChangeRow.d.ts.map +0 -1
  984. package/lib/typescript/module/ui/components/ChipStrip.d.ts.map +0 -1
  985. package/lib/typescript/module/ui/components/ClipboardHintBanner.d.ts.map +0 -1
  986. package/lib/typescript/module/ui/components/CollapsibleSection.d.ts.map +0 -1
  987. package/lib/typescript/module/ui/components/CompactFilterChips.d.ts.map +0 -1
  988. package/lib/typescript/module/ui/components/CompactRow.d.ts.map +0 -1
  989. package/lib/typescript/module/ui/components/CopyButton.d.ts.map +0 -1
  990. package/lib/typescript/module/ui/components/DataInspector.d.ts.map +0 -1
  991. package/lib/typescript/module/ui/components/DetailView.d.ts.map +0 -1
  992. package/lib/typescript/module/ui/components/DetailViewToggle.d.ts.map +0 -1
  993. package/lib/typescript/module/ui/components/DevToolsCard.d.ts.map +0 -1
  994. package/lib/typescript/module/ui/components/DraggableHeader.d.ts.map +0 -1
  995. package/lib/typescript/module/ui/components/DynamicFilterView.d.ts.map +0 -1
  996. package/lib/typescript/module/ui/components/EmptyState.d.ts.map +0 -1
  997. package/lib/typescript/module/ui/components/EntityFilterView.d.ts.map +0 -1
  998. package/lib/typescript/module/ui/components/EventHistoryViewer/CompareBar.d.ts.map +0 -1
  999. package/lib/typescript/module/ui/components/EventHistoryViewer/DiffModeTabs.d.ts.map +0 -1
  1000. package/lib/typescript/module/ui/components/EventHistoryViewer/EventHistoryViewer.d.ts.map +0 -1
  1001. package/lib/typescript/module/ui/components/EventHistoryViewer/EventPickerModal.d.ts.map +0 -1
  1002. package/lib/typescript/module/ui/components/EventHistoryViewer/ViewToggleCards.d.ts.map +0 -1
  1003. package/lib/typescript/module/ui/components/EventHistoryViewer/index.d.ts.map +0 -1
  1004. package/lib/typescript/module/ui/components/EventHistoryViewer/types.d.ts.map +0 -1
  1005. package/lib/typescript/module/ui/components/EventListItem.d.ts.map +0 -1
  1006. package/lib/typescript/module/ui/components/EventStepperFooter.d.ts.map +0 -1
  1007. package/lib/typescript/module/ui/components/ExpandablePopover.d.ts.map +0 -1
  1008. package/lib/typescript/module/ui/components/ExpandedInfoRow.d.ts.map +0 -1
  1009. package/lib/typescript/module/ui/components/ExportPreview.d.ts.map +0 -1
  1010. package/lib/typescript/module/ui/components/FilterComponents.d.ts.map +0 -1
  1011. package/lib/typescript/module/ui/components/GripVerticalIcon.d.ts.map +0 -1
  1012. package/lib/typescript/module/ui/components/HeaderSearchButton.d.ts.map +0 -1
  1013. package/lib/typescript/module/ui/components/InfoRow.d.ts.map +0 -1
  1014. package/lib/typescript/module/ui/components/ListItem.d.ts.map +0 -1
  1015. package/lib/typescript/module/ui/components/ModalHeader.d.ts.map +0 -1
  1016. package/lib/typescript/module/ui/components/ModalHintBanner.d.ts.map +0 -1
  1017. package/lib/typescript/module/ui/components/Pill.d.ts.map +0 -1
  1018. package/lib/typescript/module/ui/components/PowerToggleButton.d.ts.map +0 -1
  1019. package/lib/typescript/module/ui/components/SearchBar.d.ts.map +0 -1
  1020. package/lib/typescript/module/ui/components/SectionHeader.d.ts.map +0 -1
  1021. package/lib/typescript/module/ui/components/StatsCard.d.ts.map +0 -1
  1022. package/lib/typescript/module/ui/components/StatusIndicator.d.ts.map +0 -1
  1023. package/lib/typescript/module/ui/components/StorageTypeBadge.d.ts.map +0 -1
  1024. package/lib/typescript/module/ui/components/TabSelector.d.ts.map +0 -1
  1025. package/lib/typescript/module/ui/components/TimeDisplay.d.ts.map +0 -1
  1026. package/lib/typescript/module/ui/components/ToggleRow.d.ts.map +0 -1
  1027. package/lib/typescript/module/ui/components/ToolButton.d.ts.map +0 -1
  1028. package/lib/typescript/module/ui/components/ToolEmptyState.d.ts.map +0 -1
  1029. package/lib/typescript/module/ui/components/ToolFooter.d.ts.map +0 -1
  1030. package/lib/typescript/module/ui/components/ValueTypeBadge.d.ts.map +0 -1
  1031. package/lib/typescript/module/ui/components/WindowControls.d.ts.map +0 -1
  1032. package/lib/typescript/module/ui/components/index.d.ts.map +0 -1
  1033. package/lib/typescript/module/ui/components/windowDrag.d.ts.map +0 -1
  1034. package/lib/typescript/module/ui/console/CyberpunkButtonOutline.d.ts.map +0 -1
  1035. package/lib/typescript/module/ui/console/CyberpunkIconContainer.d.ts.map +0 -1
  1036. package/lib/typescript/module/ui/console/CyberpunkSectionButton.d.ts.map +0 -1
  1037. package/lib/typescript/module/ui/floating/FloatingTool.d.ts.map +0 -1
  1038. package/lib/typescript/module/ui/floating/FloatingTool.web.d.ts.map +0 -1
  1039. package/lib/typescript/module/ui/floating/FloatingToolHost.d.ts.map +0 -1
  1040. package/lib/typescript/module/ui/floating/FloatingToolHost.web.d.ts.map +0 -1
  1041. package/lib/typescript/module/ui/floating/index.d.ts.map +0 -1
  1042. package/lib/typescript/module/ui/floating/index.web.d.ts.map +0 -1
  1043. package/lib/typescript/module/ui/floating/onboardingConstants.d.ts.map +0 -1
  1044. package/lib/typescript/module/ui/floating/onboardingConstants.web.d.ts.map +0 -1
  1045. package/lib/typescript/module/ui/fonts.d.ts.map +0 -1
  1046. package/lib/typescript/module/ui/gameUI/components/GameUICollapsibleSection.d.ts.map +0 -1
  1047. package/lib/typescript/module/ui/gameUI/components/GameUICompactStats.d.ts.map +0 -1
  1048. package/lib/typescript/module/ui/gameUI/components/GameUIIssuesList.d.ts.map +0 -1
  1049. package/lib/typescript/module/ui/gameUI/components/GameUIStatusHeader.d.ts.map +0 -1
  1050. package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts.map +0 -1
  1051. package/lib/typescript/module/ui/gameUI/constants/macOSDesignSystemColors.d.ts.map +0 -1
  1052. package/lib/typescript/module/ui/gameUI/hooks/useGameUIAlertState.d.ts.map +0 -1
  1053. package/lib/typescript/module/ui/gameUI/index.d.ts.map +0 -1
  1054. package/lib/typescript/module/ui/index.d.ts.map +0 -1
  1055. package/lib/typescript/module/ui/listPresets.d.ts.map +0 -1
  1056. package/lib/typescript/module/ui/night/nightTheme.d.ts.map +0 -1
  1057. package/lib/typescript/module/ui/night/primitives.d.ts.map +0 -1
  1058. package/lib/typescript/module/ui/otto/OttoSceneView.d.ts.map +0 -1
  1059. package/lib/typescript/module/ui/otto/OttoSprite.d.ts.map +0 -1
  1060. package/lib/typescript/module/ui/otto/index.d.ts.map +0 -1
  1061. package/lib/typescript/module/ui/otto/ottoEngine.d.ts.map +0 -1
  1062. package/lib/typescript/module/ui/otto/ottoScenes.d.ts.map +0 -1
  1063. package/lib/typescript/module/ui/otto/ottoSheet.d.ts.map +0 -1
  1064. package/lib/typescript/module/ui/toolTheme.d.ts.map +0 -1
  1065. package/lib/typescript/module/utils/absoluteFill.d.ts.map +0 -1
  1066. package/lib/typescript/module/utils/browserAsyncStorage.d.ts.map +0 -1
  1067. package/lib/typescript/module/utils/browserNavigation.d.ts.map +0 -1
  1068. package/lib/typescript/module/utils/devServer.d.ts.map +0 -1
  1069. package/lib/typescript/module/utils/devServer.web.d.ts.map +0 -1
  1070. package/lib/typescript/module/utils/displayValue.d.ts.map +0 -1
  1071. package/lib/typescript/module/utils/domRuntime.d.ts.map +0 -1
  1072. package/lib/typescript/module/utils/expoRouterModule.d.ts.map +0 -1
  1073. package/lib/typescript/module/utils/expoRouterModule.web.d.ts.map +0 -1
  1074. package/lib/typescript/module/utils/formatting/dataFormatting.d.ts.map +0 -1
  1075. package/lib/typescript/module/utils/formatting/httpFormatting.d.ts.map +0 -1
  1076. package/lib/typescript/module/utils/formatting/index.d.ts.map +0 -1
  1077. package/lib/typescript/module/utils/getSafeAreaInsets.d.ts.map +0 -1
  1078. package/lib/typescript/module/utils/getSafeAreaInsets.web.d.ts.map +0 -1
  1079. package/lib/typescript/module/utils/index.d.ts.map +0 -1
  1080. package/lib/typescript/module/utils/loadOptionalModule.d.ts.map +0 -1
  1081. package/lib/typescript/module/utils/loadToolModule.d.ts.map +0 -1
  1082. package/lib/typescript/module/utils/loadToolModule.web.d.ts.map +0 -1
  1083. package/lib/typescript/module/utils/minimalSuperJSON.d.ts.map +0 -1
  1084. package/lib/typescript/module/utils/modalStorage.d.ts.map +0 -1
  1085. package/lib/typescript/module/utils/nativeWeb.d.ts.map +0 -1
  1086. package/lib/typescript/module/utils/persistentStorage.d.ts.map +0 -1
  1087. package/lib/typescript/module/utils/persistentStorage.web.d.ts.map +0 -1
  1088. package/lib/typescript/module/utils/reloadApp.d.ts.map +0 -1
  1089. package/lib/typescript/module/utils/reloadPlatform.d.ts.map +0 -1
  1090. package/lib/typescript/module/utils/reloadPlatform.web.d.ts.map +0 -1
  1091. package/lib/typescript/module/utils/renderCaptureRegistry.d.ts.map +0 -1
  1092. package/lib/typescript/module/utils/safeExpoRouter.d.ts.map +0 -1
  1093. package/lib/typescript/module/utils/safeExpoRouter.web.d.ts.map +0 -1
  1094. package/lib/typescript/module/utils/safeStringify.d.ts.map +0 -1
  1095. package/lib/typescript/module/utils/snapshotProviderKit.d.ts.map +0 -1
  1096. package/lib/typescript/module/utils/stateSnapshotRegistry.d.ts.map +0 -1
  1097. package/lib/typescript/module/utils/stateTools.d.ts.map +0 -1
  1098. package/lib/typescript/module/utils/subscribable.d.ts.map +0 -1
  1099. package/lib/typescript/module/utils/subscriberCountNotifier.d.ts.map +0 -1
  1100. package/lib/typescript/module/utils/time/RelativeTime.d.ts.map +0 -1
  1101. package/lib/typescript/module/utils/time/TickContext.d.ts.map +0 -1
  1102. package/lib/typescript/module/utils/time/formatRelativeTime.d.ts.map +0 -1
  1103. package/lib/typescript/module/utils/time/index.d.ts.map +0 -1
  1104. package/lib/typescript/module/utils/time/useRelativeTime.d.ts.map +0 -1
  1105. package/lib/typescript/module/utils/toolModules.d.ts.map +0 -1
  1106. package/lib/typescript/module/utils/typeHelpers.d.ts.map +0 -1
  1107. package/lib/typescript/module/utils/valueFormatting.d.ts.map +0 -1
  1108. package/lib/web/chunks/chunk-2MHKRRQW.mjs +0 -8
  1109. package/lib/web/chunks/chunk-2Q3SDPH2.mjs +0 -14
  1110. package/lib/web/chunks/chunk-34YQ42KI.mjs +0 -2
  1111. package/lib/web/chunks/chunk-3NNNCQYP.mjs +0 -14
  1112. package/lib/web/chunks/chunk-46CXXOQB.mjs +0 -2
  1113. package/lib/web/chunks/chunk-475BSDCB.mjs +0 -2
  1114. package/lib/web/chunks/chunk-552W4COI.mjs +0 -2
  1115. package/lib/web/chunks/chunk-56TTTMX4.mjs +0 -6145
  1116. package/lib/web/chunks/chunk-5LOQZINQ.mjs +0 -14
  1117. package/lib/web/chunks/chunk-5NOIO6ZM.mjs +0 -16
  1118. package/lib/web/chunks/chunk-6CCRCSA2.mjs +0 -2
  1119. package/lib/web/chunks/chunk-6Q52HRBL.mjs +0 -2
  1120. package/lib/web/chunks/chunk-6TEDFSNM.mjs +0 -655
  1121. package/lib/web/chunks/chunk-7BMRSMHN.mjs +0 -2
  1122. package/lib/web/chunks/chunk-A2SOFE47.mjs +0 -24
  1123. package/lib/web/chunks/chunk-A7KJCK4R.mjs +0 -14
  1124. package/lib/web/chunks/chunk-AEXGGXS7.mjs +0 -2
  1125. package/lib/web/chunks/chunk-AGD7ZT6O.mjs +0 -15
  1126. package/lib/web/chunks/chunk-AIEOQWNG.mjs +0 -2
  1127. package/lib/web/chunks/chunk-ASTM35HG.mjs +0 -16
  1128. package/lib/web/chunks/chunk-AZBMFPMX.mjs +0 -1421
  1129. package/lib/web/chunks/chunk-B2V2UDCU.mjs +0 -16
  1130. package/lib/web/chunks/chunk-BFGKGTAC.mjs +0 -2
  1131. package/lib/web/chunks/chunk-BHW6AFO6.mjs +0 -2
  1132. package/lib/web/chunks/chunk-BWRW3NJ2.mjs +0 -16
  1133. package/lib/web/chunks/chunk-CBM2IZAK.mjs +0 -2
  1134. package/lib/web/chunks/chunk-CDLCFF44.mjs +0 -2
  1135. package/lib/web/chunks/chunk-CI5CO7FQ.mjs +0 -2
  1136. package/lib/web/chunks/chunk-CIB4U2YK.mjs +0 -2
  1137. package/lib/web/chunks/chunk-CLLTZQGD.mjs +0 -596
  1138. package/lib/web/chunks/chunk-D5HQLRFW.mjs +0 -655
  1139. package/lib/web/chunks/chunk-DZDTNXXK.mjs +0 -2
  1140. package/lib/web/chunks/chunk-FDOZ6YSS.mjs +0 -2
  1141. package/lib/web/chunks/chunk-FMEWNGQO.mjs +0 -2
  1142. package/lib/web/chunks/chunk-G4DH7GMT.mjs +0 -2
  1143. package/lib/web/chunks/chunk-GBUZCZE4.mjs +0 -2
  1144. package/lib/web/chunks/chunk-GLMS5ZLJ.mjs +0 -445
  1145. package/lib/web/chunks/chunk-GNGMIA7V.mjs +0 -2
  1146. package/lib/web/chunks/chunk-HJ36IONA.mjs +0 -15
  1147. package/lib/web/chunks/chunk-HXPTZMAZ.mjs +0 -2
  1148. package/lib/web/chunks/chunk-I27M4JCS.mjs +0 -2
  1149. package/lib/web/chunks/chunk-IVCT27JB.mjs +0 -2
  1150. package/lib/web/chunks/chunk-JG4QSK5B.mjs +0 -2
  1151. package/lib/web/chunks/chunk-JR7BJW6B.mjs +0 -389
  1152. package/lib/web/chunks/chunk-K46ZJUXJ.mjs +0 -90
  1153. package/lib/web/chunks/chunk-K4LXMO4D.mjs +0 -2
  1154. package/lib/web/chunks/chunk-KBTYK5YE.mjs +0 -662
  1155. package/lib/web/chunks/chunk-KHP6CSSM.mjs +0 -2
  1156. package/lib/web/chunks/chunk-KRDRIW7T.mjs +0 -14
  1157. package/lib/web/chunks/chunk-L2DTKDER.mjs +0 -2
  1158. package/lib/web/chunks/chunk-LFDFDGHY.mjs +0 -655
  1159. package/lib/web/chunks/chunk-MAIUUK4E.mjs +0 -2
  1160. package/lib/web/chunks/chunk-MKJKS3IG.mjs +0 -275
  1161. package/lib/web/chunks/chunk-MRQKVLXG.mjs +0 -2
  1162. package/lib/web/chunks/chunk-NK3OISOL.mjs +0 -14
  1163. package/lib/web/chunks/chunk-NLJDDIXW.mjs +0 -2
  1164. package/lib/web/chunks/chunk-OENR3XFI.mjs +0 -11
  1165. package/lib/web/chunks/chunk-OZB3VKZE.mjs +0 -2
  1166. package/lib/web/chunks/chunk-P64PFJT3.mjs +0 -17618
  1167. package/lib/web/chunks/chunk-PACPGYH7.mjs +0 -2
  1168. package/lib/web/chunks/chunk-PART6HOE.mjs +0 -14
  1169. package/lib/web/chunks/chunk-PMRXUQRH.mjs +0 -2
  1170. package/lib/web/chunks/chunk-PZ45TQ55.mjs +0 -14
  1171. package/lib/web/chunks/chunk-Q5LN7GET.mjs +0 -17624
  1172. package/lib/web/chunks/chunk-QCD6T6L4.mjs +0 -297
  1173. package/lib/web/chunks/chunk-QD5EUANU.mjs +0 -2
  1174. package/lib/web/chunks/chunk-QJTECJCO.mjs +0 -2
  1175. package/lib/web/chunks/chunk-QPIZURPZ.mjs +0 -2
  1176. package/lib/web/chunks/chunk-QPY45R5F.mjs +0 -274
  1177. package/lib/web/chunks/chunk-R2SGZIG5.mjs +0 -2
  1178. package/lib/web/chunks/chunk-S3GYQYVJ.mjs +0 -16
  1179. package/lib/web/chunks/chunk-SCCXVTDM.mjs +0 -2
  1180. package/lib/web/chunks/chunk-SHJHD646.mjs +0 -2
  1181. package/lib/web/chunks/chunk-TCRVZ55E.mjs +0 -2
  1182. package/lib/web/chunks/chunk-TJ6ZVV2L.mjs +0 -15
  1183. package/lib/web/chunks/chunk-TPSY4RC3.mjs +0 -14
  1184. package/lib/web/chunks/chunk-U5KNX5O6.mjs +0 -17624
  1185. package/lib/web/chunks/chunk-UCKELQSM.mjs +0 -2
  1186. package/lib/web/chunks/chunk-UGGCYHRH.mjs +0 -15
  1187. package/lib/web/chunks/chunk-UNYQJZET.mjs +0 -16
  1188. package/lib/web/chunks/chunk-VE72SWLV.mjs +0 -15
  1189. package/lib/web/chunks/chunk-VKONO6MI.mjs +0 -2
  1190. package/lib/web/chunks/chunk-W4BGMPJO.mjs +0 -2
  1191. package/lib/web/chunks/chunk-WHNEEKLR.mjs +0 -2
  1192. package/lib/web/chunks/chunk-WLGUP3KY.mjs +0 -16
  1193. package/lib/web/chunks/chunk-WY7D4WBZ.mjs +0 -2
  1194. package/lib/web/chunks/chunk-XRNB2MHO.mjs +0 -107
  1195. package/lib/web/chunks/chunk-XXTIAXQY.mjs +0 -2
  1196. package/lib/web/chunks/chunk-YG6DIKQD.mjs +0 -2
  1197. package/lib/web/chunks/chunk-YIZFMU66.mjs +0 -2
  1198. package/lib/web/chunks/chunk-YOGAPOGC.mjs +0 -2
  1199. package/lib/web/chunks/chunk-Z7373DS5.mjs +0 -2
  1200. package/lib/web/chunks/chunk-Z76GRN66.mjs +0 -17627
  1201. package/lib/web/chunks/persistentStorage.web-4FBAOYJ4.mjs +0 -12
  1202. package/lib/web/chunks/persistentStorage.web-7W3Y6Q24.mjs +0 -12
  1203. package/lib/web/chunks/persistentStorage.web-GOWNFMVT.mjs +0 -2
  1204. package/lib/web/chunks/persistentStorage.web-RF47FXIK.mjs +0 -12
  1205. package/scripts/generate-wormhole-textures.cjs +0 -261
  1206. package/scripts/test-wormhole-motion.cjs +0 -59
@@ -1,2729 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * Otto — Buoy's pixel mascot, ported 1:1 from the Claude Design mockup
5
- * (`Otto.dc.html`, "Turn 6 — Otto, full state set").
6
- *
7
- * Everything here is pure: a pose is a parametric description (body rect,
8
- * lamp, eyes, legs, prop extras) baked onto a 16×16 grid, composed with a
9
- * keyline and water, then painted from the palette. No React, no timers —
10
- * `renderOttoFrame(state, t)` is the whole API, so it can be lifted into a
11
- * package unchanged. `OttoSprite.tsx` is the React Native renderer.
12
- */
13
-
14
- export const OTTO_GRID = 16;
15
-
16
- /** Palette keys → colours. `.` is transparent. */
17
- export const OTTO_PALETTE = {
18
- g: "#20C997",
19
- // body
20
- s: "#1BAB80",
21
- // body shade
22
- d: "#0D9668",
23
- // body deep (lamp base)
24
- h: "#3DD9A8",
25
- // body highlight (top row)
26
- k: "#000000",
27
- // keyline / eyes
28
- a: "#FFA94D",
29
- // lamp lit
30
- A: "#6B4520",
31
- // lamp dim
32
- r: "#FF3B30",
33
- // danger
34
- R: "#5A1712",
35
- // danger dim
36
- p: "#9B70E0",
37
- // purple props
38
- w: "#0A1A16",
39
- // water
40
- W: "#0F2A22",
41
- // water crest
42
- n: "#9BA1A6",
43
- // prop light grey
44
- m: "#636366",
45
- // prop mid grey
46
- l: "#ECEDEE",
47
- // prop white
48
- "1": "#2A2A2E" // prop dark
49
- };
50
-
51
- /** [x, y, paletteKey] */
52
-
53
- const BASE = {
54
- x0: 3,
55
- y0: 4,
56
- w: 10,
57
- h: 7,
58
- eyes: "open",
59
- lamp: "a",
60
- legs: [0, 0, 0]
61
- };
62
-
63
- /**
64
- * A keyboard, rows 10–12 from x=3: light top edge, a row of white key caps
65
- * on grey, grey base. Three rows, so the body stays readable at 16px — a
66
- * laptop screen at this size is a dark blob. See `typing`.
67
- */
68
- const TYPING_KEYBOARD = ["nnnnnnnnnn", "lmlmlmlmlm", "mmmmmmmmmm"];
69
-
70
- // Keys that count as "body" for the keyline pass. Props (n/m/l/p/1) get none.
71
- const BODY_KEYS = "gsdhaArRk";
72
- function walk(t) {
73
- return t % 2 ? [0, 1, 0] : [1, 0, 1];
74
- }
75
- function rect(x0, y0, x1, y1, c, out) {
76
- for (let y = y0; y <= y1; y++) for (let x = x0; x <= x1; x++) out.push([x, y, c]);
77
- return out;
78
- }
79
- function pt([x, y], c) {
80
- return [x, y, c];
81
- }
82
-
83
- /** A 4×5 loop at the top right, clockwise from the top left — spinners orbit it. */
84
- const RING = [[13, 0], [14, 0], [15, 1], [15, 2], [15, 3], [14, 4], [13, 4], [12, 3], [12, 2], [12, 1]];
85
-
86
- /** A 3-wide arrow pointing down, tip at `y + 3`; parts above row 0 are clipped. */
87
- function arrowDown(x, y, c, out) {
88
- out.push([x, y, c], [x, y + 1, c], [x - 1, y + 2, c], [x, y + 2, c], [x + 1, y + 2, c], [x, y + 3, c]);
89
- return out;
90
- }
91
-
92
- /** A 3-wide arrow pointing up, tip at `y`. */
93
- function arrowUp(x, y, c, out) {
94
- out.push([x, y, c], [x - 1, y + 1, c], [x, y + 1, c], [x + 1, y + 1, c], [x, y + 2, c], [x, y + 3, c]);
95
- return out;
96
- }
97
-
98
- /** Morse S-O-S, one tick per unit: dot 1, dash 3, gaps 1/2, word pause 6. */
99
- const SOS = [1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0];
100
-
101
- /** A padlock at the right edge (x 13–15): orange body, grey shackle, keyhole. */
102
- function padlock(open, out) {
103
- rect(13, 4, 15, 6, "a", out);
104
- out.push([14, 5, "k"], [14, 6, "k"]);
105
- if (open) out.push([13, 1, "n"], [14, 1, "n"], [15, 1, "n"], [13, 2, "n"], [13, 3, "n"]);else out.push([13, 2, "n"], [14, 2, "n"], [15, 2, "n"], [13, 3, "n"], [15, 3, "n"]);
106
- return out;
107
- }
108
-
109
- /** Bake a pose onto the grid as palette keys (`.` = empty). */
110
- function draw(p) {
111
- const W = OTTO_GRID;
112
- const H = OTTO_GRID;
113
- const g = Array.from({
114
- length: H
115
- }, () => Array(W).fill("."));
116
- const dx = p.dx || 0;
117
- const put = (x, y, c) => {
118
- x += dx;
119
- if (x >= 0 && x < W && y >= 0 && y < H) g[y][x] = c;
120
- };
121
- const {
122
- x0,
123
- y0,
124
- w,
125
- h
126
- } = p;
127
- const x1 = x0 + w - 1;
128
- const y1 = y0 + h - 1;
129
- for (let y = y0; y <= y1; y++) {
130
- for (let x = x0; x <= x1; x++) {
131
- if ((x === x0 || x === x1) && (y === y0 || y === y1)) continue;
132
- put(x, y, y === y0 ? "h" : y === y1 || x === x1 ? "s" : "g");
133
- }
134
- }
135
- if (p.lamp) {
136
- const cx = x0 + Math.floor(w / 2) - 1;
137
- put(cx, y0 - 2, p.lamp);
138
- put(cx + 1, y0 - 2, p.lamp);
139
- for (let x = cx - 1; x <= cx + 2; x++) put(x, y0 - 1, "d");
140
- }
141
- const ex = p.ex || 0;
142
- const ey = y0 + 2 + (p.ey || 0);
143
- for (const e of [x0 + 2 + ex, x1 - 3 + ex]) {
144
- if (p.eyes === "open") {
145
- put(e, ey, "k");
146
- put(e + 1, ey, "k");
147
- put(e, ey + 1, "k");
148
- put(e + 1, ey + 1, "k");
149
- } else if (p.eyes === "closed") {
150
- put(e, ey + 1, "k");
151
- put(e + 1, ey + 1, "k");
152
- } else if (p.eyes === "happy") {
153
- put(e, ey + 1, "k");
154
- put(e + 1, ey, "k");
155
- put(e + 2, ey + 1, "k");
156
- } else if (p.eyes === "x") {
157
- put(e, ey, "k");
158
- put(e + 2, ey, "k");
159
- put(e + 1, ey + 1, "k");
160
- put(e, ey + 2, "k");
161
- put(e + 2, ey + 2, "k");
162
- } else if (p.eyes === "big") {
163
- for (let yy = 0; yy < 3; yy++) for (let xx = 0; xx < 3; xx++) put(e + xx, ey + yy, "k");
164
- }
165
- }
166
- if (p.legs) {
167
- const start = x0 + Math.floor((w - 8) / 2);
168
- p.legs.forEach((o, i) => {
169
- const lx = start + i * 3;
170
- put(lx, y1 + 1, o ? "s" : "g");
171
- put(lx + 1, y1 + 1, o ? "s" : "g");
172
- if (!o) {
173
- put(lx, y1 + 2, "s");
174
- put(lx + 1, y1 + 2, "s");
175
- }
176
- });
177
- }
178
- (p.extras || []).forEach(([x, y, c]) => put(x, y, c));
179
- return g;
180
- }
181
- function wave(x, y, t) {
182
- return ((x - Math.floor(t / 2) + y * 5) % 7 + 7) % 7 < 2 ? "W" : "w";
183
- }
184
-
185
- /** The water on its own: rows 13–15 as palette keys at tick `t`. Period 7 in floor(t/2). */
186
- export function ottoWaterRows(t) {
187
- const rows = [];
188
- for (let y = 13; y < OTTO_GRID; y++) {
189
- const row = [];
190
- for (let x = 0; x < OTTO_GRID; x++) row.push(wave(x, y, t));
191
- rows.push(row);
192
- }
193
- return rows;
194
- }
195
- const NEIGHBOURS = [[0, 1], [0, -1], [1, 0], [-1, 0]];
196
- /** Keyline around the body, water in the bottom three rows. */
197
- function compose(g, t, o) {
198
- const W = OTTO_GRID;
199
- const H = OTTO_GRID;
200
- const out = g.map(r => r.slice());
201
- for (let y = 0; y < H; y++) {
202
- for (let x = 0; x < W; x++) {
203
- const under = y >= 13;
204
- if (under && o.submerged) {
205
- out[y][x] = o.water ? wave(x, y, t) : ".";
206
- continue;
207
- }
208
- if (g[y][x] !== ".") continue;
209
- const nb = o.keyline && NEIGHBOURS.some(([dy, ddx]) => {
210
- const yy = y + dy;
211
- const xx = x + ddx;
212
- return yy >= 0 && yy < H && xx >= 0 && xx < W && BODY_KEYS.includes(g[yy][xx]);
213
- });
214
- if (nb) out[y][x] = "k";else if (under && o.water) out[y][x] = wave(x, y, t);
215
- }
216
- }
217
- return out;
218
- }
219
- export const OTTO_STATES = {
220
- idle: t => {
221
- const c = t % 48;
222
- const bob = c % 8 >= 4 ? 1 : 0;
223
- const blink = c % 16 === 13 || c === 47;
224
- const ex = c >= 20 && c <= 26 ? -1 : c >= 32 && c <= 38 ? 1 : 0;
225
- return {
226
- ...BASE,
227
- y0: 4 + bob,
228
- eyes: blink ? "closed" : "open",
229
- ex,
230
- legs: walk(Math.floor(t / 2))
231
- };
232
- },
233
- thinking: t => {
234
- const c = t % 10;
235
- const e = [];
236
- if (c >= 1) e.push([13, 5, "n"]);
237
- if (c >= 2) e.push([14, 3, "n"]);
238
- if (c >= 3) {
239
- rect(11, 0, 14, 0, "l", e);
240
- rect(10, 1, 15, 1, "l", e);
241
- rect(11, 2, 14, 2, "l", e);
242
- }
243
- for (let i = 0; i < Math.min(3, Math.max(0, c - 4)); i++) e.push([11 + i * 2, 1, "m"]);
244
- return {
245
- ...BASE,
246
- ex: 1,
247
- ey: -1,
248
- lamp: t % 4 < 2 ? "a" : "A",
249
- extras: e
250
- };
251
- },
252
- happy: t => {
253
- const c = t % 12;
254
- const hop = [0, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0][c];
255
- let p = {
256
- ...BASE,
257
- eyes: "happy",
258
- legs: walk(t),
259
- y0: 4 - hop
260
- };
261
- if (c === 1) p = {
262
- ...p,
263
- x0: 4,
264
- w: 8,
265
- h: 8,
266
- y0: 2
267
- };
268
- if (c === 5 || c === 6) p = {
269
- ...p,
270
- x0: 2,
271
- w: 12,
272
- h: 6,
273
- y0: 5
274
- };
275
- return p;
276
- },
277
- error: t => ({
278
- ...BASE,
279
- lamp: t % 2 ? "r" : "R",
280
- dx: [0, 1, 0, -1][t % 4],
281
- eyes: "closed"
282
- }),
283
- sleep: t => {
284
- const ph = Math.floor(t / 3) % 4;
285
- const z = (x, y) => [[x, y], [x + 1, y], [x + 2, y], [x + 3, y], [x + 2, y + 1], [x + 1, y + 2], [x, y + 3], [x + 1, y + 3], [x + 2, y + 3], [x + 3, y + 3]].map(([a, b]) => [a, b, "n"]);
286
- return {
287
- ...BASE,
288
- y0: 5 + Math.floor(t / 8) % 2,
289
- eyes: "closed",
290
- lamp: "A",
291
- extras: z(12, 6 - ph * 2)
292
- };
293
- },
294
- peek: t => ({
295
- ...BASE,
296
- submerged: true,
297
- y0: 9 + Math.floor(t / 4) % 2,
298
- ex: [-1, 0, 1, 0][Math.floor(t / 6) % 4],
299
- legs: null
300
- }),
301
- typing: t => {
302
- const e = [];
303
- TYPING_KEYBOARD.forEach((row, dy) => {
304
- for (let dx = 0; dx < row.length; dx++) e.push([3 + dx, 10 + dy, row[dx]]);
305
- });
306
- const tap = t % 2;
307
- e.push([2, 10 + tap, "g"], [13, 11 - tap, "g"]);
308
- return {
309
- ...BASE,
310
- eyes: t % 12 === 11 ? "closed" : "open",
311
- legs: null,
312
- extras: e
313
- };
314
- },
315
- debugging: t => {
316
- const gx = Math.floor(t / 4) % 2 ? 0 : -1;
317
- const e = [];
318
- [[10, 3], [11, 3], [12, 3], [9, 4], [13, 4], [9, 5], [13, 5], [9, 6], [13, 6], [10, 7], [11, 7], [12, 7]].forEach(([x, y]) => e.push([x + gx, y, "n"]));
319
- rect(10 + gx, 4, 12 + gx, 4, "l", e);
320
- rect(10 + gx, 5, 12 + gx, 6, "k", e);
321
- e.push([14 + gx, 7, "m"], [15 + gx, 8, "m"]);
322
- return {
323
- ...BASE,
324
- extras: e
325
- };
326
- },
327
- building: t => {
328
- const e = [];
329
- rect(5, 1, 10, 1, "a", e);
330
- rect(4, 2, 11, 2, "a", e);
331
- rect(2, 3, 13, 3, "A", e);
332
- rect(13, 11, 15, 12, "m", e);
333
- if (t % 4 < 2) e.push([13, 6, "g"], [14, 5, "m"], [14, 4, "m"], [13, 2, "n"], [14, 2, "n"], [15, 2, "n"]);else e.push([13, 8, "g"], [14, 9, "m"], [15, 8, "n"], [15, 9, "n"], [15, 10, "n"], [12, 10, "a"]);
334
- return {
335
- ...BASE,
336
- lamp: null,
337
- eyes: t % 10 === 9 ? "closed" : "open",
338
- extras: e
339
- };
340
- },
341
- carrying: t => {
342
- const b = t % 4 < 2 ? 0 : 1;
343
- const e = [];
344
- rect(5, b, 10, b, "n", e);
345
- rect(5, 3 + b, 10, 3 + b, "n", e);
346
- rect(5, 1 + b, 5, 2 + b, "n", e);
347
- rect(10, 1 + b, 10, 2 + b, "n", e);
348
- rect(6, 1 + b, 9, 2 + b, "g", e);
349
- rect(4, 2 + b, 4, 3 + b, "g", e);
350
- rect(11, 2 + b, 11, 3 + b, "g", e);
351
- return {
352
- ...BASE,
353
- y0: 4 + b,
354
- lamp: null,
355
- ey: -1,
356
- legs: walk(t),
357
- extras: e
358
- };
359
- },
360
- pushing: t => {
361
- const e = [];
362
- for (let y = 5; y <= 12; y++) {
363
- for (let x = 11; x <= 15; x++) {
364
- e.push([x, y, y === 5 || y === 12 || x === 11 || x === 15 ? "n" : x === 13 ? "l" : "m"]);
365
- }
366
- }
367
- e.push([10, 7, "g"], [10, 8, "g"]);
368
- return {
369
- ...BASE,
370
- x0: 0,
371
- dx: t % 4 < 2 ? 0 : 1,
372
- ex: 1,
373
- legs: walk(t),
374
- extras: e
375
- };
376
- },
377
- sweeping: t => {
378
- const s = t % 4 < 2 ? 0 : 1;
379
- const e = [];
380
- rect(13, 3, 13, 10, "m", e);
381
- rect(12 + s, 11, 15 + s, 12, "a", e);
382
- e.push([13, 6, "g"]);
383
- if (s) e.push([15, 10, "m"], [11, 12, "m"]);
384
- return {
385
- ...BASE,
386
- ex: 1,
387
- eyes: t % 12 === 11 ? "closed" : "open",
388
- extras: e
389
- };
390
- },
391
- juggling: t => {
392
- const e = [];
393
- [[2, "r"], [7, "a"], [12, "p"]].forEach(([x, c], i) => {
394
- const h = [0, 1, 2, 2, 1, 0][(t + i * 2) % 6];
395
- const y = 2 - h;
396
- rect(x, y, x + 1, y + 1, c, e);
397
- });
398
- e.push([2, 4 + t % 2, "g"], [13, 5 - t % 2, "g"]);
399
- return {
400
- ...BASE,
401
- lamp: null,
402
- ey: -1,
403
- ex: [-1, 0, 1, 0][Math.floor(t / 2) % 4],
404
- extras: e
405
- };
406
- },
407
- wizard: t => {
408
- const e = [];
409
- rect(7, 0, 8, 0, "p", e);
410
- rect(6, 1, 9, 1, "p", e);
411
- rect(5, 2, 10, 2, "p", e);
412
- rect(3, 3, 12, 3, "p", e);
413
- e.push([8, 1, "a"]);
414
- e.push([13, 5, "g"], [14, 4, "m"], [15, 3, "m"]);
415
- const sp = t % 4;
416
- if (sp === 1) e.push([15, 1, "a"]);
417
- if (sp === 2) e.push([14, 1, "a"], [15, 0, "a"], [15, 2, "a"]);
418
- if (sp === 3) e.push([13, 0, "a"]);
419
- return {
420
- ...BASE,
421
- lamp: null,
422
- eyes: t % 12 === 11 ? "closed" : "open",
423
- extras: e
424
- };
425
- },
426
- conducting: t => {
427
- const u = t % 2;
428
- const n = Math.floor(t / 2) % 4;
429
- const e = [[1, 4 + u * 3, "g"], [2, 4 + u * 3, "g"], [13, 7 - u * 3, "g"], [14, 7 - u * 3, "g"], [15, 6 - u * 3, "m"], [2, 3 - n, "n"], [3, 2 - n, "n"]];
430
- return {
431
- ...BASE,
432
- eyes: "happy",
433
- extras: e
434
- };
435
- },
436
- beacon: t => {
437
- const f = t % 6;
438
- const rings = [[], [[5, 3], [10, 3], [5, 2], [10, 2]], [[3, 3], [12, 3], [3, 2], [12, 2], [4, 1], [11, 1], [5, 0], [10, 0]], [[1, 2], [14, 2], [1, 1], [14, 1], [2, 0], [13, 0]], [], []];
439
- return {
440
- ...BASE,
441
- lamp: f < 4 ? "a" : "A",
442
- ey: -1,
443
- extras: rings[f].map(([x, y]) => [x, y, "a"])
444
- };
445
- },
446
- notification: t => {
447
- const c = t % 16;
448
- const hop = [0, 0, 0, 0, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0][c];
449
- const show = c >= 3 && c <= 10;
450
- const e = show ? [...rect(14, 0, 15, 2, "a", []), [14, 4, "a"], [15, 4, "a"]] : [];
451
- return {
452
- ...BASE,
453
- y0: 4 - hop,
454
- lamp: show && c % 2 ? "A" : "a",
455
- legs: hop ? [1, 1, 1] : [0, 0, 0],
456
- extras: e
457
- };
458
- },
459
- disconnected: t => {
460
- const on = t % 4 < 2;
461
- const e = [];
462
- for (let y = 0; y <= 4; y++) {
463
- e.push([12, y, "n"], [14, y, "n"], [13, y, y === 0 || y === 4 ? "n" : on ? "r" : "1"]);
464
- }
465
- return {
466
- ...BASE,
467
- y0: 5,
468
- lamp: "A",
469
- ex: 1,
470
- ey: -1,
471
- extras: e
472
- };
473
- },
474
- dizzy: t => {
475
- const pos = [[1, 2], [4, 0], [11, 0], [14, 2]];
476
- const s = [pos[t % 4], pos[(t + 2) % 4]].map(([x, y]) => [x, y, "a"]);
477
- return {
478
- ...BASE,
479
- eyes: "x",
480
- lamp: "A",
481
- dx: [0, 1, 0, -1][t % 4],
482
- extras: s
483
- };
484
- },
485
- overheated: t => {
486
- const k = [0, 0, 0, 1, 2, 3, 3, 3, 3, 2, 1, 0][t % 12];
487
- const shapes = [{
488
- x0: 3,
489
- y0: 4,
490
- w: 10,
491
- h: 7,
492
- ey: 0,
493
- legs: [0, 0, 0]
494
- }, {
495
- x0: 3,
496
- y0: 6,
497
- w: 10,
498
- h: 5,
499
- ey: 0,
500
- legs: [0, 0, 0]
501
- }, {
502
- x0: 2,
503
- y0: 8,
504
- w: 12,
505
- h: 3,
506
- ey: -1,
507
- legs: null
508
- }, {
509
- x0: 1,
510
- y0: 10,
511
- w: 14,
512
- h: 2,
513
- ey: -2,
514
- legs: null
515
- }];
516
- return {
517
- ...BASE,
518
- ...shapes[k],
519
- eyes: k >= 2 ? "closed" : "open",
520
- lamp: k >= 2 ? "A" : t % 2 ? "a" : "A",
521
- extras: k >= 1 ? [[14, 2 + t % 3, "l"]] : []
522
- };
523
- },
524
- confused: t => {
525
- const c = t % 18;
526
- const e = c >= 4 ? [[12, 0, "n"], [13, 0, "n"], [14, 0, "n"], [14, 1, "n"], [13, 2, "n"], [14, 2, "n"], [13, 4, "n"]] : [];
527
- return {
528
- ...BASE,
529
- ex: [1, 1, 0, -1, -1, 0][Math.floor(c / 3) % 6],
530
- ey: -1,
531
- dx: c >= 9 ? -1 : 0,
532
- extras: e
533
- };
534
- },
535
- stare: t => ({
536
- ...BASE,
537
- eyes: t % 20 === 19 ? "closed" : "big",
538
- ex: [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0][t % 20]
539
- }),
540
- walking: t => {
541
- const c = t % 16;
542
- const pos = c < 8 ? c - 4 : 11 - c;
543
- return {
544
- ...BASE,
545
- dx: pos,
546
- ex: c < 8 ? 1 : -1,
547
- legs: walk(t)
548
- };
549
- },
550
- goingaway: t => ({
551
- ...BASE,
552
- dx: t % 26 - 6,
553
- ex: 1,
554
- legs: walk(t)
555
- }),
556
- eureka: t => {
557
- const c = t % 24;
558
- const e = [];
559
- if (c >= 3 && c < 20) {
560
- const on = c >= 6;
561
- rect(12, 0, 13, 0, on ? "a" : "A", e);
562
- rect(11, 1, 14, 2, on ? "a" : "A", e);
563
- rect(12, 3, 13, 3, "m", e);
564
- rect(12, 4, 13, 4, "n", e);
565
- if (on) e.push([12, 1, "l"]);
566
- if (on && c < 14 && c % 2 === 0) e.push([10, 0, "l"], [15, 0, "l"], [10, 4, "l"], [15, 4, "l"]);
567
- e.push([13, 6, "g"], [14, 5, "g"]);
568
- }
569
- return {
570
- ...BASE,
571
- lamp: c >= 6 && c < 20 ? "a" : "A",
572
- eyes: c >= 8 && c < 20 ? "happy" : c === 22 ? "closed" : "open",
573
- ex: c >= 3 && c < 8 ? 1 : 0,
574
- ey: c >= 3 && c < 8 ? -1 : 0,
575
- y0: c >= 8 && c < 20 && c % 4 < 2 ? 3 : 4,
576
- extras: e
577
- };
578
- },
579
- grooving: t => {
580
- const b = t % 4;
581
- const lean = [0, 1, 0, -1][b];
582
- const e = [];
583
- rect(4, 1, 11, 1, "p", e);
584
- rect(3, 2, 3, 3, "p", e);
585
- rect(12, 2, 12, 3, "p", e);
586
- rect(1, 6, 2, 8, "p", e);
587
- rect(13, 6, 14, 8, "p", e);
588
- e.push([2, 7, "1"], [13, 7, "1"]);
589
- if (b === 1) e.push([0, 3, "a"], [1, 2, "a"], [1, 3, "a"]);
590
- if (b === 3) e.push([15, 3, "a"], [14, 2, "a"], [14, 3, "a"]);
591
- return {
592
- ...BASE,
593
- lamp: null,
594
- dx: lean,
595
- eyes: "happy",
596
- legs: b % 2 ? [1, 0, 1] : [0, 1, 0],
597
- y0: b % 2 ? 4 : 5,
598
- extras: e
599
- };
600
- },
601
- hatmishap: t => {
602
- const c = t % 32;
603
- const e = [];
604
- const drop = c >= 10 && c < 20 ? 2 : c >= 20 && c < 22 ? 1 : 0;
605
- const ox = c >= 10 && c < 20 ? 1 : 0;
606
- const hy = drop;
607
- const hat = (x, y, col) => e.push([x + ox, y + hy, col]);
608
- hat(7, 0, "p");
609
- hat(8, 0, "p");
610
- for (let x = 6; x <= 9; x++) hat(x, 1, "p");
611
- for (let x = 5; x <= 10; x++) hat(x, 2, "p");
612
- for (let x = 3; x <= 12; x++) hat(x, 3, "p");
613
- hat(8, 1, "a");
614
- hat(6, 2, "a");
615
- hat(10, 3, "a");
616
- if (drop === 2) for (let x = 4; x <= 11; x++) hat(x, 4, "p");
617
- if (c >= 14 && c < 22) {
618
- e.push([13, 5, "g"], [14, 4, "g"], [14, 3, "g"]);
619
- if (c % 2) e.push([15, 1, "a"], [14, 0, "l"]);
620
- }
621
- return {
622
- ...BASE,
623
- lamp: null,
624
- eyes: drop === 2 ? "closed" : c >= 22 && c < 24 ? "happy" : "open",
625
- ex: c < 10 ? 1 : 0,
626
- legs: c < 8 ? walk(t) : [0, 0, 0],
627
- dx: c < 8 ? c < 4 ? c - 2 : 5 - c : 0,
628
- extras: e
629
- };
630
- },
631
- lowbattery: t => {
632
- const e = [];
633
- rect(12, 1, 15, 1, "r", e);
634
- rect(12, 6, 15, 6, "r", e);
635
- e.push([12, 2, "r"], [12, 3, "r"], [12, 4, "r"], [12, 5, "r"], [15, 2, "r"], [15, 3, "r"], [15, 4, "r"], [15, 5, "r"], [13, 0, "r"], [14, 0, "r"]);
636
- if (t % 6 < 3) rect(13, 5, 14, 5, "r", e);
637
- const open = t % 24 >= 18 && t % 24 < 21;
638
- return {
639
- ...BASE,
640
- y0: 6,
641
- h: 6,
642
- x0: 2,
643
- w: 12,
644
- lamp: "A",
645
- eyes: open ? "open" : "closed",
646
- ey: open ? 1 : 0,
647
- legs: null,
648
- extras: e
649
- };
650
- },
651
- wake: t => {
652
- const c = t % 30;
653
- if (c < 8) return {
654
- ...BASE,
655
- x0: 2,
656
- w: 12,
657
- y0: 7,
658
- h: 5,
659
- lamp: "A",
660
- eyes: c >= 6 ? "big" : "closed",
661
- ey: 0,
662
- legs: null
663
- };
664
- if (c < 10) return {
665
- ...BASE,
666
- x0: 4,
667
- w: 8,
668
- y0: 0,
669
- h: 9,
670
- lamp: null,
671
- eyes: "big",
672
- ey: 1,
673
- legs: [1, 1, 1]
674
- };
675
- if (c < 12) return {
676
- ...BASE,
677
- y0: 2,
678
- eyes: "big",
679
- lamp: "a",
680
- legs: [1, 1, 1]
681
- };
682
- if (c < 14) return {
683
- ...BASE,
684
- x0: 2,
685
- w: 12,
686
- y0: 5,
687
- h: 6,
688
- eyes: "open",
689
- lamp: "a"
690
- };
691
- return {
692
- ...BASE,
693
- eyes: c === 20 || c === 21 ? "closed" : "open",
694
- legs: [0, 0, 0]
695
- };
696
- },
697
- builder: t => {
698
- const s = [0, 1, 0, -1][Math.floor(t / 2) % 4];
699
- const e = [];
700
- rect(5, 2, 10, 3, "n", e);
701
- e.push([5, 3, "m"], [10, 3, "m"]);
702
- rect(4 + s, 0, 9 + s, 1, "p", e);
703
- e.push([4 + s, 1, "1"]);
704
- if (Math.floor(t / 2) % 4 === 3 && t % 2) e.push([1, 5, "l"], [0, 4, "l"]);
705
- const arms = s ? [[1, 5, "g"], [14, 7, "g"]] : [[1, 6, "g"], [14, 6, "g"]];
706
- return {
707
- ...BASE,
708
- lamp: null,
709
- ex: s,
710
- ey: -1,
711
- legs: walk(t),
712
- extras: [...e, ...arms]
713
- };
714
- },
715
- mini: t => {
716
- const c = t % 32;
717
- const ex = c < 8 ? 0 : c < 16 ? -1 : c < 24 ? 1 : 0;
718
- const ey = c >= 24 && c < 28 ? -1 : 0;
719
- return {
720
- ...BASE,
721
- x0: 4,
722
- w: 8,
723
- y0: 6 + Math.floor(t / 4) % 2,
724
- h: 5,
725
- lamp: "a",
726
- eyes: "big",
727
- ex,
728
- ey,
729
- legs: [Math.floor(t / 2) % 2, 0, (Math.floor(t / 2) + 1) % 2],
730
- extras: [[2, 8 + t % 2, "g"], [13, 8 + (t + 1) % 2, "g"]]
731
- };
732
- },
733
- minityping: t => {
734
- const e = [[2, 8 + t % 2, "g"], [13, 8 + (t + 1) % 2, "g"]];
735
- const dy = t % 6;
736
- e.push([7 + t % 3, 5 - dy, "p"]);
737
- return {
738
- ...BASE,
739
- x0: 4,
740
- w: 8,
741
- y0: 7 - t % 2,
742
- h: 5,
743
- lamp: null,
744
- legs: [0, 0, 0],
745
- extras: e
746
- };
747
- },
748
- happydance: t => {
749
- const c = t % 4;
750
- const e = [[1, 5 + [0, 1, 2, 1][c], "g"], [14, 5 + [2, 1, 0, 1][c], "g"]];
751
- return {
752
- ...BASE,
753
- eyes: c % 2 ? "happy" : "open",
754
- legs: c % 2 ? [1, 0, 1] : [0, 1, 0],
755
- extras: e
756
- };
757
- },
758
- jumping: t => {
759
- const c = t % 8;
760
- const y = [0, 1, -1, -3, -4, -2, 0, 0][c];
761
- const armY = [6, 7, 6, 4, 3, 4, 6, 6][c];
762
- return {
763
- ...BASE,
764
- y0: 4 + y,
765
- eyes: c === 1 ? "closed" : "open",
766
- legs: c >= 2 && c <= 5 ? [1, 1, 1] : [0, 0, 0],
767
- extras: [[1, armY + y, "g"], [14, armY + y, "g"]]
768
- };
769
- },
770
- // ── Loading & progress ──────────────────────────────────────────────────
771
- loading: t => {
772
- // Three dots chase around a ring at the top right; eyes follow the head.
773
- const e = [];
774
- const n = RING.length;
775
- const head = t % n;
776
- e.push(pt(RING[head], "l"), pt(RING[(head + n - 1) % n], "n"), pt(RING[(head + n - 2) % n], "m"));
777
- return {
778
- ...BASE,
779
- ex: 1,
780
- ey: -1,
781
- extras: e
782
- };
783
- },
784
- progress: t => {
785
- // A bar fills across the top, two ticks per pixel; a hop when it lands.
786
- const c = t % 32;
787
- const fill = Math.min(12, Math.floor(c / 2));
788
- const done = c >= 24;
789
- const e = [];
790
- // Lamp colours — a dim track that lights up — so the keyline wraps the whole bar.
791
- rect(2, 0, 13, 1, "A", e);
792
- if (fill > 0) rect(2, 0, 1 + fill, 1, "a", e);
793
- const hop = done && (c === 25 || c === 26) ? 1 : 0;
794
- return {
795
- ...BASE,
796
- y0: 4 - hop,
797
- eyes: done ? "happy" : "open",
798
- ex: done ? 0 : fill < 4 ? -1 : fill < 9 ? 0 : 1,
799
- ey: done ? 0 : -1,
800
- lamp: done && c % 2 ? "A" : "a",
801
- legs: hop ? [1, 1, 1] : [0, 0, 0],
802
- extras: e
803
- };
804
- },
805
- hourglass: t => {
806
- // Sand runs top to bottom, then the glass lifts and flips.
807
- const c = t % 20;
808
- const lift = c >= 16 ? -1 : 0;
809
- const e = [];
810
- const y = 3 + lift;
811
- rect(13, y, 15, y, "n", e);
812
- rect(13, y + 4, 15, y + 4, "n", e);
813
- e.push([13, y + 1, "n"], [15, y + 1, "n"], [14, y + 2, "n"], [13, y + 3, "n"], [15, y + 3, "n"]);
814
- const topFull = c < 8 || c >= 16;
815
- e.push([14, y + 1, topFull ? "a" : "1"], [14, y + 3, topFull ? "1" : "a"]);
816
- if (c >= 4 && c < 12 && c % 2) e.push([14, y + 2, "a"]);
817
- e.push([13, 8 + lift, "g"]);
818
- return {
819
- ...BASE,
820
- ex: 1,
821
- eyes: c === 17 ? "closed" : "open",
822
- extras: e
823
- };
824
- },
825
- waiting: t => {
826
- // Foot taps, checks the wristwatch, dots pile up.
827
- const c = t % 16;
828
- const e = [];
829
- // Wall clock, top left: a ring with one hand ticking round the face.
830
- e.push([1, 0, "n"], [2, 0, "n"], [0, 1, "n"], [3, 1, "n"], [0, 2, "n"], [3, 2, "n"], [1, 3, "n"], [2, 3, "n"]);
831
- rect(1, 1, 2, 2, "l", e);
832
- e.push(pt([[2, 1], [2, 2], [1, 2], [1, 1]][Math.floor(c / 2) % 4], "k"));
833
- const dots = Math.min(3, Math.floor(c / 4));
834
- for (let i = 0; i < dots; i++) e.push([13 + i, 1, "n"]);
835
- const look = c >= 6 && c < 11;
836
- return {
837
- ...BASE,
838
- ex: look ? -1 : 0,
839
- ey: look ? -1 : 0,
840
- legs: [0, 0, c % 2],
841
- extras: e
842
- };
843
- },
844
- syncing: t => {
845
- // Two arcs chase each other around the ring; the lamp pulses in step.
846
- const e = [];
847
- const n = RING.length;
848
- const p = t % n;
849
- for (const off of [0, 1, 2]) {
850
- e.push(pt(RING[(p + off) % n], off === 2 ? "l" : "n"));
851
- e.push(pt(RING[(p + off + 5) % n], off === 2 ? "l" : "n"));
852
- }
853
- return {
854
- ...BASE,
855
- ex: 1,
856
- ey: -1,
857
- lamp: t % 4 < 2 ? "a" : "A",
858
- extras: e
859
- };
860
- },
861
- downloading: t => {
862
- // An arrow drops into a tray; the parcel lands, then the tray clears.
863
- const c = t % 12;
864
- const e = [[13, 5, "n"], [15, 5, "n"], [13, 6, "n"], [14, 6, "n"], [15, 6, "n"]];
865
- if (c < 6) {
866
- const y = Math.floor(c / 2);
867
- arrowDown(14, y, "l", e);
868
- } else if (c === 6) {
869
- rect(13, 6, 15, 6, "l", e);
870
- } else if (c < 10) {
871
- e.push([14, 5, "a"]);
872
- }
873
- return {
874
- ...BASE,
875
- ex: 1,
876
- ey: c < 2 ? -1 : c < 6 ? 0 : 1,
877
- extras: e
878
- };
879
- },
880
- uploading: t => {
881
- // The parcel lifts off the tray and climbs out of frame.
882
- const c = t % 12;
883
- const e = [[13, 5, "n"], [15, 5, "n"], [13, 6, "n"], [14, 6, "n"], [15, 6, "n"]];
884
- if (c < 2) e.push([14, 5, "a"]);else if (c < 10) arrowUp(14, 2 - Math.floor((c - 2) / 2), "l", e);
885
- return {
886
- ...BASE,
887
- ex: 1,
888
- ey: c < 4 ? 1 : c < 8 ? 0 : -1,
889
- extras: e
890
- };
891
- },
892
- connecting: t => {
893
- // Signal bars fill one at a time, then all four blink: connected.
894
- const c = t % 14;
895
- const bars = c < 8 ? Math.floor(c / 2) : c % 2 ? 4 : 0;
896
- const e = [];
897
- for (let i = 0; i < 4; i++) {
898
- const x = 12 + i;
899
- const lit = i < bars;
900
- for (let y = 4 - i; y <= 4; y++) e.push([x, y, lit ? "g" : "1"]);
901
- }
902
- return {
903
- ...BASE,
904
- ex: 1,
905
- ey: -1,
906
- eyes: c >= 8 ? "happy" : "open",
907
- extras: e
908
- };
909
- },
910
- scanning: t => {
911
- // A bright line sweeps down the body with a faint trail.
912
- const c = t % 14;
913
- const e = [];
914
- if (c < 9) {
915
- const y = 4 + c;
916
- if (c > 0) rect(1, y - 1, 14, y - 1, "n", e);
917
- rect(1, y, 14, y, "l", e);
918
- }
919
- return {
920
- ...BASE,
921
- eyes: "big",
922
- legs: [0, 0, 0],
923
- extras: e
924
- };
925
- },
926
- searching: t => {
927
- // Binoculars up, slow sweep left and right.
928
- const e = [];
929
- for (const x of [4, 9]) {
930
- rect(x, 5, x + 2, 5, "n", e);
931
- rect(x, 7, x + 2, 7, "n", e);
932
- e.push([x, 6, "n"], [x + 2, 6, "n"], [x + 1, 6, "k"]);
933
- }
934
- e.push([7, 6, "n"], [8, 6, "n"]);
935
- const s = Math.floor(t / 3) % 4;
936
- const dx = [-1, 0, 1, 0][s];
937
- return {
938
- ...BASE,
939
- dx,
940
- legs: s % 2 ? walk(t) : [0, 0, 0],
941
- extras: e
942
- };
943
- },
944
- // ── Empty & nothing ─────────────────────────────────────────────────────
945
- empty: t => {
946
- // Peers into an open box, finds nothing, looks back at you.
947
- const c = t % 16;
948
- const e = [];
949
- rect(13, 7, 13, 10, "n", e);
950
- rect(15, 7, 15, 10, "n", e);
951
- rect(14, 10, 14, 10, "n", e);
952
- rect(14, 8, 14, 9, "1", e);
953
- const dots = c >= 9 ? Math.min(3, c - 8) : 0;
954
- for (let i = 0; i < dots; i++) e.push([12 + i, 1, "n"]);
955
- const peer = c < 8;
956
- return {
957
- ...BASE,
958
- ex: peer ? 1 : 0,
959
- ey: peer ? 1 : 0,
960
- eyes: c === 8 ? "closed" : "open",
961
- extras: e
962
- };
963
- },
964
- shrug: t => {
965
- // Arms up, looks left, looks right, arms down.
966
- const c = t % 16;
967
- const up = c >= 4 && c < 12;
968
- const e = up ? [[2, 5, "g"], [1, 4, "g"], [13, 5, "g"], [14, 4, "g"]] : [];
969
- return {
970
- ...BASE,
971
- ex: c < 4 ? 0 : c < 8 ? -1 : c < 12 ? 1 : 0,
972
- ey: up ? -1 : 0,
973
- extras: e
974
- };
975
- },
976
- fishing: t => {
977
- // Rod out, bobber bobbing; one tug, one splash, back to waiting.
978
- const c = t % 32;
979
- const e = [[13, 6, "g"], [14, 6, "g"], [14, 5, "m"], [15, 4, "m"]];
980
- const tug = c >= 20 && c < 24;
981
- const pop = c >= 24 && c < 27;
982
- const by = tug ? 14 : pop ? 11 : 12 + Math.floor(c / 4) % 2;
983
- rect(15, 5, 15, by - 1, "n", e);
984
- e.push([15, by, "r"], [15, by + 1, "l"]);
985
- if (pop) e.push([14, 12, "l"], [13, 13, "l"]);
986
- return {
987
- ...BASE,
988
- ex: 1,
989
- eyes: tug ? "big" : c === 15 ? "closed" : "open",
990
- extras: e
991
- };
992
- },
993
- listening: t => {
994
- // Shifted left; a hand cupped at the side, sound arcs arriving from the right.
995
- const c = Math.floor(t / 2) % 4;
996
- const e = [[13, 5, "g"], [14, 5, "g"], [14, 6, "g"]];
997
- const inner = [[15, 4, "n"], [16, 5, "n"], [16, 6, "n"], [15, 7, "n"]];
998
- const outer = [[16, 3, "l"], [17, 4, "l"], [17, 5, "l"], [17, 6, "l"], [17, 7, "l"], [16, 8, "l"]];
999
- if (c === 0 || c === 1) e.push(...inner);
1000
- if (c === 1 || c === 2) e.push(...outer);
1001
- return {
1002
- ...BASE,
1003
- dx: -2,
1004
- eyes: "closed",
1005
- extras: e
1006
- };
1007
- },
1008
- tumbleweed: t => {
1009
- // A tumbleweed rolls past in the foreground; eyes follow it off the edge.
1010
- const c = t % 28;
1011
- const e = [];
1012
- const wx = 15 - c;
1013
- if (c < 20) {
1014
- if (c % 2) e.push([wx, 11, "A"], [wx + 2, 11, "A"], [wx + 1, 12, "A"], [wx, 13, "A"], [wx + 2, 13, "A"]);else e.push([wx + 1, 11, "A"], [wx, 12, "A"], [wx + 2, 12, "A"], [wx + 1, 13, "A"]);
1015
- }
1016
- const ex = c >= 20 ? 0 : wx > 8 ? 1 : wx > 3 ? 0 : -1;
1017
- return {
1018
- ...BASE,
1019
- ex,
1020
- ey: c < 20 ? 1 : 0,
1021
- extras: e
1022
- };
1023
- },
1024
- // ── Errors & trouble ────────────────────────────────────────────────────
1025
- warning: t => {
1026
- // Shifted left; a warning sign held up on the right, lamp blinking.
1027
- const e = [];
1028
- e.push([15, 0, "a"]);
1029
- rect(14, 1, 16, 2, "a", e);
1030
- rect(13, 3, 17, 4, "a", e);
1031
- e.push([15, 1, "k"], [15, 2, "k"], [15, 4, "k"]);
1032
- e.push([13, 5, "g"], [14, 5, "g"]);
1033
- return {
1034
- ...BASE,
1035
- dx: -2,
1036
- eyes: "big",
1037
- ex: 1,
1038
- ey: -1,
1039
- lamp: t % 4 < 2 ? "a" : "A",
1040
- extras: e
1041
- };
1042
- },
1043
- crash: t => {
1044
- // Burst, smoke, then dazed.
1045
- const c = t % 20;
1046
- const e = [];
1047
- if (c < 3) {
1048
- const rays = c % 2 ? [[1, 2], [14, 2], [0, 7], [15, 7], [4, 0], [11, 0], [1, 11], [14, 11]] : [[2, 1], [13, 1], [0, 5], [15, 5], [6, 0], [9, 0], [0, 9], [15, 9]];
1049
- rays.forEach(r => e.push(pt(r, c === 0 ? "l" : "a")));
1050
- } else if (c < 10) {
1051
- const y = 2 - Math.floor((c - 3) / 2);
1052
- if (y >= 0) e.push([2, y, "n"], [13, y, "n"], [1, y + 1, "n"], [14, y + 1, "n"]);
1053
- }
1054
- return {
1055
- ...BASE,
1056
- eyes: "x",
1057
- lamp: c < 3 ? "r" : "R",
1058
- dx: c < 3 ? [0, 1, -1][c] : c >= 10 ? [0, 1, 0, -1][c % 4] : 0,
1059
- legs: c < 10 ? [1, 1, 1] : [0, 0, 0],
1060
- extras: e
1061
- };
1062
- },
1063
- panic: t => {
1064
- // Arms flail, sweat flies, lamp strobes.
1065
- const u = t % 2;
1066
- const e = u ? [[2, 5, "g"], [1, 4, "g"], [13, 5, "g"], [14, 4, "g"], [14, 2, "l"]] : [[2, 7, "g"], [1, 8, "g"], [13, 7, "g"], [14, 8, "g"], [1, 3, "l"]];
1067
- return {
1068
- ...BASE,
1069
- eyes: "big",
1070
- lamp: u ? "r" : "a",
1071
- dx: [0, 1, 0, -1][t % 4],
1072
- legs: walk(t),
1073
- extras: e
1074
- };
1075
- },
1076
- sos: t => {
1077
- // The lamp flashes S-O-S in morse; arms wave between letters.
1078
- const c = t % SOS.length;
1079
- const on = SOS[c] === 1;
1080
- const u = Math.floor(t / 2) % 2;
1081
- const e = [[1, 4 + u * 2, "g"], [2, 5 + u * 2, "g"], [13, 5 + u * 2, "g"], [14, 4 + u * 2, "g"]];
1082
- return {
1083
- ...BASE,
1084
- eyes: "big",
1085
- lamp: on ? "r" : "R",
1086
- extras: e
1087
- };
1088
- },
1089
- offline: t => {
1090
- // A struck-through cloud; slumped, lamp dim, one glance up.
1091
- const c = t % 16;
1092
- const e = [];
1093
- rect(11, 0, 14, 0, "n", e);
1094
- rect(10, 1, 15, 1, "n", e);
1095
- rect(11, 2, 14, 2, "n", e);
1096
- if (c % 4 < 2) e.push([10, 3, "r"], [11, 2, "r"], [12, 1, "r"], [13, 0, "r"]);
1097
- const glance = c >= 10 && c < 14;
1098
- return {
1099
- ...BASE,
1100
- y0: 5,
1101
- lamp: "A",
1102
- eyes: glance ? "open" : "closed",
1103
- ex: 1,
1104
- ey: glance ? -1 : 0,
1105
- extras: e
1106
- };
1107
- },
1108
- timeout: t => {
1109
- // A clock ticks round, then turns red; Otto shakes.
1110
- const c = t % 16;
1111
- const late = c >= 12;
1112
- const e = [];
1113
- const ring = late ? "r" : "n";
1114
- e.push([13, 1, ring], [14, 1, ring], [12, 2, ring], [15, 2, ring], [12, 3, ring], [15, 3, ring], [13, 4, ring], [14, 4, ring]);
1115
- rect(13, 2, 14, 3, "l", e);
1116
- e.push(pt([[14, 2], [14, 3], [13, 3], [13, 2]][late ? 0 : Math.floor(c / 3) % 4], "k"));
1117
- return {
1118
- ...BASE,
1119
- ex: 1,
1120
- ey: -1,
1121
- eyes: late ? "closed" : "open",
1122
- lamp: late && c % 2 ? "r" : "a",
1123
- dx: late ? [0, 1, 0, -1][c % 4] : 0,
1124
- extras: e
1125
- };
1126
- },
1127
- locked: t => {
1128
- // A padlock on the right: look, strain at it, give up with a shrug.
1129
- const c = t % 20;
1130
- const e = [];
1131
- padlock(false, e);
1132
- const strain = c >= 6 && c < 12;
1133
- const give = c >= 12;
1134
- if (strain) e.push([13, 7, "g"], [14, 7, "g"]);
1135
- if (give) e.push([2, 5, "g"], [1, 4, "g"]);
1136
- return {
1137
- ...BASE,
1138
- ex: give ? 0 : 1,
1139
- ey: give ? 0 : -1,
1140
- eyes: strain ? "closed" : "open",
1141
- dx: strain && c % 2 ? -1 : 0,
1142
- extras: e
1143
- };
1144
- },
1145
- unlocked: t => {
1146
- // The shackle pops open; sparkles, a hop, a happy Otto.
1147
- const c = t % 20;
1148
- const open = c >= 4;
1149
- const e = [];
1150
- padlock(open, e);
1151
- if (c >= 4 && c < 10) {
1152
- const sp = c % 2 ? [[11, 0], [15, 5], [12, 6]] : [[12, 0], [11, 4], [15, 6]];
1153
- sp.forEach(s => e.push(pt(s, "l")));
1154
- }
1155
- const hop = c === 5 || c === 6 ? 1 : 0;
1156
- return {
1157
- ...BASE,
1158
- y0: 4 - hop,
1159
- ex: open ? 0 : 1,
1160
- ey: open ? 0 : -1,
1161
- eyes: open ? "happy" : "open",
1162
- lamp: open && c % 2 ? "A" : "a",
1163
- legs: hop ? [1, 1, 1] : [0, 0, 0],
1164
- extras: e
1165
- };
1166
- },
1167
- denied: t => {
1168
- // Shifted left; a red no-entry sign, head shaking.
1169
- const e = [];
1170
- rect(13, 0, 15, 0, "r", e);
1171
- rect(13, 4, 15, 4, "r", e);
1172
- for (let y = 1; y <= 3; y++) e.push([12, y, "r"], [16, y, "r"]);
1173
- e.push([13, 3, "r"], [14, 2, "r"], [15, 1, "r"]);
1174
- return {
1175
- ...BASE,
1176
- dx: -1,
1177
- ex: [-1, 0, 1, 0][Math.floor(t / 2) % 4],
1178
- ey: -1,
1179
- extras: e
1180
- };
1181
- },
1182
- broken: t => {
1183
- // A crack down the middle; a band-aid goes on.
1184
- const c = t % 24;
1185
- const e = [[8, 4, "k"], [7, 5, "k"], [8, 6, "k"], [7, 7, "k"], [8, 8, "k"], [7, 9, "k"], [8, 10, "k"]];
1186
- if (c >= 8) {
1187
- rect(6, 8, 9, 9, "n", e);
1188
- rect(7, 8, 8, 9, "l", e);
1189
- }
1190
- return {
1191
- ...BASE,
1192
- eyes: c < 8 ? "closed" : c === 20 ? "closed" : "open",
1193
- lamp: c < 8 && c % 2 ? "A" : "a",
1194
- dx: c < 4 ? [0, 1, 0, -1][c] : 0,
1195
- extras: e
1196
- };
1197
- },
1198
- sad: t => {
1199
- // Sunk a row, lamp dim, a tear rolls down and drops in.
1200
- const c = t % 16;
1201
- const ty = c >= 2 && c < 10 ? 8 + Math.floor((c - 2) / 2) : c >= 10 && c < 12 ? 12 : -1;
1202
- const e = ty >= 0 ? [[5, ty, "l"]] : [];
1203
- return {
1204
- ...BASE,
1205
- y0: 5,
1206
- lamp: "A",
1207
- eyes: "closed",
1208
- extras: e
1209
- };
1210
- },
1211
- rain: t => {
1212
- // A rain cloud overhead, drops falling; lamp dim, eyes shut.
1213
- const c = t % 12;
1214
- const e = [];
1215
- rect(5, 0, 10, 0, "n", e);
1216
- rect(4, 1, 11, 1, "m", e);
1217
- [1, 4, 8, 11, 14].forEach((x, i) => {
1218
- const y = 2 + (c + i * 3) % 11;
1219
- e.push([x, y, "l"]);
1220
- });
1221
- return {
1222
- ...BASE,
1223
- y0: 5,
1224
- lamp: "A",
1225
- eyes: "closed",
1226
- extras: e
1227
- };
1228
- },
1229
- sick: t => {
1230
- // A thermometer climbs; wobbling, sweating, eyes shut.
1231
- const c = t % 12;
1232
- const e = [];
1233
- rect(14, 2, 14, 7, "l", e);
1234
- e.push([14, 8, "r"], [15, 3, "n"], [15, 5, "n"]);
1235
- const level = Math.min(4, Math.floor(c / 2));
1236
- if (level > 0) rect(14, 8 - level, 14, 7, "r", e);
1237
- e.push(c % 2 ? [2, 4, "l"] : [1, 5, "l"]);
1238
- return {
1239
- ...BASE,
1240
- eyes: "closed",
1241
- lamp: "A",
1242
- dx: [0, 1, 0, -1][Math.floor(c / 3) % 4],
1243
- extras: e
1244
- };
1245
- },
1246
- flood: t => {
1247
- // In over the eyes, arms flailing, bubbles rising, lamp strobing.
1248
- const c = t % 8;
1249
- const e = [[1, 7 + c % 2, "g"], [2, 8 + c % 2, "g"], [13, 8 - c % 2, "g"], [14, 7 - c % 2, "g"], [0, 11 - c % 4, "l"], [15, 12 - (c + 2) % 4, "l"]];
1250
- return {
1251
- ...BASE,
1252
- submerged: true,
1253
- y0: 9,
1254
- eyes: "big",
1255
- lamp: c % 2 ? "a" : "A",
1256
- legs: null,
1257
- extras: e
1258
- };
1259
- },
1260
- bug: t => {
1261
- // A beetle crawls across the body; eyes track it; it flies off.
1262
- const c = t % 24;
1263
- const e = [];
1264
- let ex = 0;
1265
- let ey = 1;
1266
- if (c < 20) {
1267
- const bx = 3 + Math.floor(c / 2);
1268
- rect(bx, 8, bx + 1, 9, "1", e);
1269
- e.push([bx - 1, 9 - c % 2, "k"], [bx + 2, 8 + c % 2, "k"]);
1270
- ex = bx < 6 ? -1 : bx > 9 ? 1 : 0;
1271
- } else {
1272
- const f = c - 20;
1273
- e.push([12 + f, 7 - f, "1"], [13 + f, 7 - f, "1"], [12 + f, 6 - f, "n"], [14 + f, 6 - f, "n"]);
1274
- ex = 1;
1275
- ey = -1;
1276
- }
1277
- return {
1278
- ...BASE,
1279
- ex,
1280
- ey,
1281
- eyes: c >= 18 ? "big" : "open",
1282
- extras: e
1283
- };
1284
- },
1285
- alarm: t => {
1286
- // The lamp becomes a siren: red strobe, light rays sweeping.
1287
- const u = t % 2;
1288
- const e = u ? [[4, 2, "l"], [11, 2, "l"], [6, 0, "l"], [9, 0, "l"]] : [[3, 1, "l"], [12, 1, "l"], [7, 0, "l"], [8, 0, "l"]];
1289
- return {
1290
- ...BASE,
1291
- eyes: "big",
1292
- lamp: u ? "r" : "R",
1293
- extras: e
1294
- };
1295
- },
1296
- frozen: t => {
1297
- // Iced over: icicles for legs, snow falling, shivering.
1298
- const c = t % 12;
1299
- const e = [[4, 11, "l"], [4, 12, "l"], [7, 11, "l"], [10, 11, "l"], [10, 12, "l"], [3, 3, "l"], [12, 3, "l"]];
1300
- [1, 14, 5, 10].forEach((x, i) => e.push([x, (c * 2 + i * 3) % 12, "l"]));
1301
- return {
1302
- ...BASE,
1303
- lamp: "A",
1304
- legs: null,
1305
- dx: t % 2,
1306
- extras: e
1307
- };
1308
- },
1309
- snail: t => {
1310
- // A snail crosses the foreground at one pixel per six ticks.
1311
- const c = t % 36;
1312
- const e = [];
1313
- const sx = Math.floor(c / 6) - 3;
1314
- rect(sx, 9, sx + 2, 11, "A", e);
1315
- e.push([sx + 1, 10, "a"], [sx + 3, 11, "n"], [sx + 4, 11, "n"], [sx + 4, 10, "n"], [sx + 4, 9, "k"]);
1316
- return {
1317
- ...BASE,
1318
- ex: -1,
1319
- ey: 1,
1320
- eyes: c % 12 === 11 ? "closed" : "open",
1321
- extras: e
1322
- };
1323
- },
1324
- angry: t => {
1325
- // Brows down, lamp red, steam off the top, stomping.
1326
- const e = [[4, 5, "k"], [5, 5, "k"], [6, 6, "k"], [9, 6, "k"], [10, 5, "k"], [11, 5, "k"]];
1327
- if (t % 2) e.push([4, 1, "n"], [11, 1, "n"]);else e.push([3, 0, "n"], [12, 0, "n"]);
1328
- return {
1329
- ...BASE,
1330
- ey: 1,
1331
- lamp: t % 4 < 2 ? "r" : "R",
1332
- legs: walk(t),
1333
- extras: e
1334
- };
1335
- },
1336
- ghost: t => {
1337
- // Grey, translucent, no legs, floating; white eyes.
1338
- const c = t % 8;
1339
- const e = [];
1340
- const y0 = 4 - (c < 4 ? 0 : 1);
1341
- rect(4, y0, 11, y0 + 6, "m", e);
1342
- rect(3, y0 + 1, 3, y0 + 5, "m", e);
1343
- rect(12, y0 + 1, 12, y0 + 5, "m", e);
1344
- [4, 7, 10].forEach(x => e.push([x, y0 + 7, "m"]));
1345
- rect(5, y0 + 2, 6, y0 + 3, "l", e);
1346
- rect(9, y0 + 2, 10, y0 + 3, "l", e);
1347
- return {
1348
- ...BASE,
1349
- y0,
1350
- lamp: "A",
1351
- legs: null,
1352
- extras: e
1353
- };
1354
- },
1355
- nervous: t => {
1356
- // Eyes darting, sweat, feet fidgeting, lamp flickering.
1357
- const e = [t % 2 ? [13, 3, "l"] : [2, 3, "l"]];
1358
- return {
1359
- ...BASE,
1360
- ex: t % 2 ? 1 : -1,
1361
- lamp: t % 3 ? "a" : "A",
1362
- legs: t % 2 ? [1, 0, 0] : [0, 0, 1],
1363
- extras: e
1364
- };
1365
- },
1366
- // ── Questions & investigation ───────────────────────────────────────────
1367
- puzzled: t => {
1368
- // A tentacle curls up to scratch the head; eyes wander.
1369
- const c = t % 16;
1370
- const scratch = c >= 4 && c < 12;
1371
- const e = scratch ? [[13, 6, "g"], [14, 5, "g"], [14, 4, "g"], [13, 3 - c % 2, "g"]] : [];
1372
- return {
1373
- ...BASE,
1374
- ex: c < 4 ? 0 : c < 8 ? -1 : c < 12 ? 1 : 0,
1375
- ey: scratch ? -1 : 0,
1376
- eyes: c === 14 ? "closed" : "open",
1377
- extras: e
1378
- };
1379
- },
1380
- detective: t => {
1381
- // Deerstalker hat, magnifying glass held out and moving; eyes track it.
1382
- const c = t % 16;
1383
- const e = [];
1384
- rect(3, 3, 12, 3, "A", e);
1385
- rect(5, 1, 10, 2, "A", e);
1386
- rect(5, 2, 10, 2, "a", e);
1387
- const gy = Math.floor(c / 4) % 2 ? 4 : 5;
1388
- e.push([0, gy, "n"], [1, gy, "n"], [2, gy, "n"], [0, gy + 1, "n"], [2, gy + 1, "n"], [0, gy + 2, "n"], [1, gy + 2, "n"], [2, gy + 2, "n"]);
1389
- e.push([1, gy + 1, "l"], [2, gy + 3, "g"], [1, gy + 3, "g"]);
1390
- return {
1391
- ...BASE,
1392
- lamp: null,
1393
- ex: -1,
1394
- ey: gy === 4 ? -1 : 0,
1395
- eyes: c === 15 ? "closed" : "open",
1396
- extras: e
1397
- };
1398
- },
1399
- reading: t => {
1400
- // An open book held up; eyes run along the lines; a page turns.
1401
- const c = t % 24;
1402
- const e = [];
1403
- rect(3, 8, 12, 11, "l", e);
1404
- rect(7, 8, 8, 11, "n", e);
1405
- const flip = c >= 20 && c < 22;
1406
- if (flip) rect(9, 8, 12, 11, "n", e);
1407
- for (const y of [9, 10]) {
1408
- rect(4, y, 6, y, "k", e);
1409
- if (!flip) rect(9, y, 11, y, "k", e);
1410
- }
1411
- e.push([2, 9, "g"], [13, 9, "g"]);
1412
- return {
1413
- ...BASE,
1414
- ey: 1,
1415
- ex: c < 20 ? [-1, 0, 1][Math.floor(c / 2) % 3] : 0,
1416
- eyes: c === 22 ? "closed" : "open",
1417
- legs: null,
1418
- extras: e
1419
- };
1420
- },
1421
- // ── Success & celebration ───────────────────────────────────────────────
1422
- success: t => {
1423
- // A check mark lands on the right; sparkles, a hop, the lamp blinks.
1424
- const c = t % 16;
1425
- const e = [];
1426
- if (c >= 2) e.push([11, 2, "g"], [12, 3, "g"], [13, 2, "g"], [14, 1, "g"], [15, 0, "g"]);
1427
- if (c >= 3 && c < 7) {
1428
- const sp = c % 2 ? [[10, 0], [15, 3], [13, 5]] : [[11, 0], [14, 4], [9, 1]];
1429
- sp.forEach(s => e.push(pt(s, "l")));
1430
- }
1431
- const hop = c === 3 || c === 4 ? 1 : 0;
1432
- return {
1433
- ...BASE,
1434
- y0: 4 - hop,
1435
- eyes: c >= 2 ? "happy" : "open",
1436
- ex: c >= 2 ? 0 : 1,
1437
- ey: c >= 2 ? 0 : -1,
1438
- lamp: c >= 2 && c < 8 && c % 2 ? "A" : "a",
1439
- legs: hop ? [1, 1, 1] : [0, 0, 0],
1440
- extras: e
1441
- };
1442
- },
1443
- celebrate: t => {
1444
- // Confetti falls, arms up, bouncing.
1445
- const c = t % 12;
1446
- const e = [];
1447
- const cols = [0, 15, 2, 13, 5, 10, 1, 14];
1448
- const tint = ["p", "l", "a", "p", "l", "p", "a", "l"];
1449
- cols.forEach((x, i) => e.push([x, (c * 2 + i * 5) % 13, tint[i]]));
1450
- const up = c % 4 < 2;
1451
- e.push([2, 5, "g"], [1, 4, "g"], [13, 5, "g"], [14, 4, "g"]);
1452
- return {
1453
- ...BASE,
1454
- y0: up ? 3 : 4,
1455
- eyes: "happy",
1456
- legs: up ? [1, 1, 1] : [0, 0, 0],
1457
- extras: e
1458
- };
1459
- },
1460
- thumbsup: t => {
1461
- // A fist rises with the thumb out; then a wink.
1462
- const c = t % 12;
1463
- const lift = c < 4 ? 2 : 0;
1464
- const e = [];
1465
- rect(13, 6 + lift, 14, 7 + lift, "g", e);
1466
- e.push([14, 4 + lift, "g"], [14, 5 + lift, "g"]);
1467
- const wink = c >= 6 && c < 10;
1468
- if (wink) e.push([5, 6, "g"], [6, 6, "g"]);
1469
- return {
1470
- ...BASE,
1471
- eyes: c >= 4 && !wink ? "happy" : "open",
1472
- extras: e
1473
- };
1474
- },
1475
- party: t => {
1476
- // Party hat in place of the lamp, confetti, a side-to-side dance.
1477
- const c = t % 16;
1478
- const e = [];
1479
- e.push([7, 0, "a"], [8, 0, "a"]);
1480
- rect(6, 1, 9, 1, "p", e);
1481
- rect(5, 2, 10, 2, "a", e);
1482
- rect(4, 3, 11, 3, "p", e);
1483
- [0, 15, 2, 13].forEach((x, i) => e.push([x, (c * 2 + i * 4) % 12, i % 2 ? "l" : "p"]));
1484
- const u = Math.floor(c / 2) % 2;
1485
- e.push([1, 5 + u, "g"], [2, 6 - u, "g"], [13, 6 - u, "g"], [14, 5 + u, "g"]);
1486
- return {
1487
- ...BASE,
1488
- lamp: null,
1489
- eyes: "happy",
1490
- dx: [0, 1, 0, -1][Math.floor(c / 2) % 4],
1491
- legs: walk(Math.floor(c / 2)),
1492
- extras: e
1493
- };
1494
- },
1495
- trophy: t => {
1496
- // A cup held overhead, arms raised, sparkles, a hop every so often.
1497
- const c = t % 16;
1498
- const e = [];
1499
- rect(5, 0, 10, 0, "a", e);
1500
- rect(6, 1, 9, 1, "a", e);
1501
- rect(7, 2, 8, 2, "A", e);
1502
- rect(6, 3, 9, 3, "A", e);
1503
- e.push([2, 5, "g"], [1, 4, "g"], [13, 5, "g"], [14, 4, "g"]);
1504
- if (c % 2) e.push([3, 0, "l"], [12, 1, "l"]);else e.push([4, 1, "l"], [11, 0, "l"]);
1505
- const hop = c === 8 || c === 9 ? 1 : 0;
1506
- return {
1507
- ...BASE,
1508
- y0: 4 - hop,
1509
- lamp: null,
1510
- eyes: "happy",
1511
- legs: hop ? [1, 1, 1] : [0, 0, 0],
1512
- extras: e
1513
- };
1514
- },
1515
- starred: t => {
1516
- // A star pops in at the top right and twinkles.
1517
- const c = t % 12;
1518
- const e = [];
1519
- if (c >= 1) {
1520
- e.push([13, 0, "a"]);
1521
- rect(11, 1, 15, 1, "a", e);
1522
- rect(12, 2, 14, 2, "a", e);
1523
- e.push([12, 3, "a"], [14, 3, "a"], [11, 4, "a"], [15, 4, "a"]);
1524
- if (c % 3 === 0) e.push([13, 2, "l"]);
1525
- }
1526
- return {
1527
- ...BASE,
1528
- ex: 1,
1529
- ey: -1,
1530
- eyes: c >= 4 ? "happy" : "open",
1531
- extras: e
1532
- };
1533
- },
1534
- love: t => {
1535
- // Hearts float up either side; the body bobs.
1536
- const c = t % 16;
1537
- const e = [];
1538
- const heart = (x, y) => {
1539
- if (y < -2) return;
1540
- e.push([x, y, "r"], [x + 2, y, "r"], [x, y + 1, "r"], [x + 1, y + 1, "r"], [x + 2, y + 1, "r"], [x + 1, y + 2, "r"]);
1541
- };
1542
- heart(0, 8 - Math.floor(c / 2) * 2);
1543
- heart(13, 8 - Math.floor((c + 8) % 16 / 2) * 2);
1544
- return {
1545
- ...BASE,
1546
- y0: 4 + Math.floor(c / 4) % 2,
1547
- eyes: "happy",
1548
- extras: e
1549
- };
1550
- },
1551
- wave: t => {
1552
- // One arm up, hand swinging side to side; a smile at the end.
1553
- const c = t % 12;
1554
- const e = [[13, 5, "g"], [14, 4, "g"], [c % 2 ? 15 : 14, 3, "g"]];
1555
- return {
1556
- ...BASE,
1557
- eyes: c >= 8 ? "happy" : "open",
1558
- extras: e
1559
- };
1560
- },
1561
- bow: t => {
1562
- // A slow bow: squash forward, eyes shut, back up.
1563
- const c = t % 16;
1564
- const down = c >= 4 && c < 12;
1565
- return down ? {
1566
- ...BASE,
1567
- y0: 6,
1568
- h: 5,
1569
- eyes: "closed"
1570
- } : {
1571
- ...BASE
1572
- };
1573
- },
1574
- cool: t => {
1575
- // Sunglasses drop into place; a little sway.
1576
- const c = t % 16;
1577
- const y = Math.min(6, 3 + c);
1578
- const e = [];
1579
- rect(4, y, 6, y + 1, "k", e);
1580
- rect(9, y, 11, y + 1, "k", e);
1581
- e.push([7, y, "k"], [8, y, "k"]);
1582
- const on = y === 6;
1583
- return {
1584
- ...BASE,
1585
- dx: on ? [0, 0, 1, 0, 0, -1][Math.floor(c / 2) % 6] : 0,
1586
- extras: e
1587
- };
1588
- },
1589
- flexing: t => {
1590
- // Both arms up in a flex; the biceps pop every other beat.
1591
- const c = t % 8;
1592
- const e = [[2, 6, "g"], [1, 6, "g"], [1, 5, "g"], [1, 4, "g"], [13, 6, "g"], [14, 6, "g"], [14, 5, "g"], [14, 4, "g"]];
1593
- if (c < 4) e.push([0, 5, "g"], [15, 5, "g"]);
1594
- return {
1595
- ...BASE,
1596
- eyes: c < 4 ? "open" : "happy",
1597
- extras: e
1598
- };
1599
- },
1600
- zen: t => {
1601
- // Floating above the water, eyes shut, slow bob, a sparkle or two.
1602
- const c = t % 16;
1603
- const e = c < 8 ? [[1, 5, "l"], [14, 9, "l"]] : [[2, 10, "l"], [13, 4, "l"]];
1604
- return {
1605
- ...BASE,
1606
- y0: 3 + Math.floor(c / 8) % 2,
1607
- lamp: "a",
1608
- eyes: "closed",
1609
- legs: null,
1610
- extras: e
1611
- };
1612
- },
1613
- // ── Tool moments ────────────────────────────────────────────────────────
1614
- recording: t => {
1615
- // A red REC dot blinks at the top right; eyes slowly sweep the room.
1616
- const c = t % 16;
1617
- const e = c % 4 < 2 ? [...rect(13, 0, 14, 1, "r", [])] : [];
1618
- return {
1619
- ...BASE,
1620
- ex: [-1, -1, 0, 0, 1, 1, 0, 0][Math.floor(c / 2)],
1621
- extras: e
1622
- };
1623
- },
1624
- paused: t => {
1625
- // Pause bars overhead; resting with the lamp dim, one peek.
1626
- const c = t % 16;
1627
- const e = [];
1628
- rect(13, 0, 13, 3, "n", e);
1629
- rect(15, 0, 15, 3, "n", e);
1630
- const peek = c >= 8 && c < 10;
1631
- return {
1632
- ...BASE,
1633
- y0: 5,
1634
- lamp: "A",
1635
- eyes: peek ? "open" : "closed",
1636
- ex: 1,
1637
- ey: peek ? -1 : 0,
1638
- extras: e
1639
- };
1640
- },
1641
- filtering: t => {
1642
- // A funnel on the right: mixed bits go in the top, only orange comes out.
1643
- const c = t % 12;
1644
- const e = [];
1645
- rect(12, 0, 15, 0, "n", e);
1646
- e.push([12, 1, "n"], [15, 1, "n"], [13, 2, "n"], [14, 2, "n"], [14, 3, "n"], [14, 4, "n"]);
1647
- const mix = ["p", "l", "a", "l", "p", "a"];
1648
- e.push([13, 1, mix[c % 6]], [14, 1, mix[(c + 3) % 6]]);
1649
- e.push([14, 5 + c % 4, "a"]);
1650
- return {
1651
- ...BASE,
1652
- ex: 1,
1653
- ey: c % 8 < 4 ? -1 : 1,
1654
- extras: e
1655
- };
1656
- },
1657
- pinned: t => {
1658
- // A pushpin drops in from above and lands with a blink.
1659
- const c = t % 12;
1660
- const dy = c < 3 ? c - 3 : 0;
1661
- const e = [];
1662
- rect(13, 1 + dy, 14, 2 + dy, "r", e);
1663
- e.push([13, 3 + dy, "n"], [14, 3 + dy, "n"], [13, 4 + dy, "n"], [13, 5 + dy, "n"]);
1664
- if (c === 4 || c === 5) e.push([15, 0, "l"], [12, 6, "l"]);
1665
- return {
1666
- ...BASE,
1667
- ex: 1,
1668
- ey: -1,
1669
- eyes: c === 3 ? "closed" : "open",
1670
- extras: e
1671
- };
1672
- },
1673
- rewind: t => {
1674
- // Moonwalks left while a clock runs backwards beside it.
1675
- const c = t % 16;
1676
- const e = [];
1677
- e.push([1, 0, "n"], [2, 0, "n"], [0, 1, "n"], [3, 1, "n"], [0, 2, "n"], [3, 2, "n"], [1, 3, "n"], [2, 3, "n"]);
1678
- rect(1, 1, 2, 2, "l", e);
1679
- e.push(pt([[1, 1], [1, 2], [2, 2], [2, 1]][c % 4], "k"));
1680
- return {
1681
- ...BASE,
1682
- dx: 3 - Math.floor(c / 2),
1683
- ex: 1,
1684
- legs: walk(t),
1685
- extras: e
1686
- };
1687
- },
1688
- storing: t => {
1689
- // Crates stack up on the right, one lowered into place every six ticks.
1690
- const c = t % 24;
1691
- const e = [];
1692
- const placed = Math.floor(c / 6);
1693
- for (let i = 0; i < Math.min(3, placed); i++) {
1694
- const y = 11 - i * 2;
1695
- rect(13, y, 14, y + 1, "A", e);
1696
- e.push([13, y, "a"]);
1697
- }
1698
- if (placed < 3) {
1699
- const y = 4 + (c % 6 < 3 ? 0 : 1);
1700
- rect(13, y, 14, y + 1, "A", e);
1701
- e.push([13, y, "a"], [13, y + 2, "g"], [14, y + 2, "g"]);
1702
- }
1703
- return {
1704
- ...BASE,
1705
- ex: 1,
1706
- ey: placed < 3 ? 0 : 1,
1707
- eyes: placed === 3 && c % 6 === 5 ? "happy" : "open",
1708
- extras: e
1709
- };
1710
- },
1711
- printing: t => {
1712
- // A little printer spools out a strip of log lines.
1713
- const c = t % 16;
1714
- const e = [];
1715
- rect(13, 3, 15, 5, "n", e);
1716
- e.push([14, 4, "1"]);
1717
- const len = Math.min(6, c);
1718
- if (len > 0) {
1719
- rect(13, 6, 15, 5 + len, "l", e);
1720
- for (let y = 6; y <= 5 + len; y += 2) e.push([14, y, "k"]);
1721
- }
1722
- return {
1723
- ...BASE,
1724
- ex: 1,
1725
- ey: 1,
1726
- extras: e
1727
- };
1728
- },
1729
- stopwatch: t => {
1730
- // A stopwatch with a fast hand; speed lines off the far side.
1731
- const e = [];
1732
- e.push([13, 0, "n"], [13, 1, "n"], [14, 1, "n"], [12, 2, "n"], [15, 2, "n"], [12, 3, "n"], [15, 3, "n"], [13, 4, "n"], [14, 4, "n"]);
1733
- rect(13, 2, 14, 3, "l", e);
1734
- e.push(pt([[14, 2], [14, 3], [13, 3], [13, 2]][t % 4], "k"));
1735
- if (t % 2) e.push([0, 6, "n"], [1, 6, "n"], [0, 9, "n"]);else e.push([0, 7, "n"], [1, 8, "n"], [0, 8, "n"]);
1736
- return {
1737
- ...BASE,
1738
- eyes: "big",
1739
- ex: 1,
1740
- ey: -1,
1741
- extras: e
1742
- };
1743
- },
1744
- spotlight: t => {
1745
- // The lamp throws a beam that sweeps left, up, right.
1746
- const c = t % 12;
1747
- const e = [];
1748
- if (c < 4) {
1749
- rect(4, 1, 7, 1, "a", e);
1750
- rect(2, 0, 6, 0, "a", e);
1751
- } else if (c < 8) {
1752
- rect(6, 1, 9, 1, "a", e);
1753
- rect(5, 0, 10, 0, "a", e);
1754
- } else {
1755
- rect(8, 1, 11, 1, "a", e);
1756
- rect(9, 0, 13, 0, "a", e);
1757
- }
1758
- return {
1759
- ...BASE,
1760
- ex: c < 4 ? -1 : c < 8 ? 0 : 1,
1761
- ey: -1,
1762
- extras: e
1763
- };
1764
- },
1765
- keys: t => {
1766
- // A keyring held out; the keys jingle.
1767
- const c = t % 8;
1768
- const e = [[13, 5, "g"], [14, 5, "g"]];
1769
- e.push([13, 6, "n"], [14, 6, "n"], [15, 6, "n"], [13, 7, "n"], [15, 7, "n"], [13, 8, "n"], [14, 8, "n"], [15, 8, "n"]);
1770
- const k2 = c < 4 ? 15 : 14;
1771
- e.push([13, 9, "a"], [13, 10, "a"], [k2, 9, "a"], [k2, 10, "a"]);
1772
- return {
1773
- ...BASE,
1774
- ex: 1,
1775
- ey: 1,
1776
- eyes: c === 7 ? "closed" : "open",
1777
- extras: e
1778
- };
1779
- },
1780
- map: t => {
1781
- // A folded map held up: dotted route, red pin; looks around for the way.
1782
- const c = t % 16;
1783
- const e = [];
1784
- rect(3, 8, 12, 11, "l", e);
1785
- e.push([4, 10, "m"], [5, 9, "m"], [6, 9, "m"], [7, 10, "m"], [8, 10, "m"], [9, 9, "m"], [10, 9, "m"]);
1786
- e.push([11, 8, "r"], [11, 9, "r"]);
1787
- e.push([2, 9, "g"], [13, 9, "g"]);
1788
- const look = c >= 8;
1789
- return {
1790
- ...BASE,
1791
- ex: look ? c < 12 ? -1 : 1 : 0,
1792
- ey: look ? -1 : 1,
1793
- legs: null,
1794
- extras: e
1795
- };
1796
- },
1797
- photo: t => {
1798
- // A camera held up; flash; a print pops out the side.
1799
- const c = t % 16;
1800
- const e = [];
1801
- rect(5, 8, 10, 10, "n", e);
1802
- rect(7, 9, 8, 9, "k", e);
1803
- e.push([7, 9, "l"], [10, 8, "1"]);
1804
- e.push([2, 9, "g"], [13, 9, "g"]);
1805
- if (c === 6) {
1806
- rect(0, 0, 15, 1, "l", e);
1807
- e.push([3, 2, "l"], [12, 2, "l"]);
1808
- }
1809
- if (c >= 8) {
1810
- rect(13, 6, 15, 8, "n", e);
1811
- e.push([14, 7, "g"]);
1812
- }
1813
- return {
1814
- ...BASE,
1815
- lamp: c === 6 ? "a" : "A",
1816
- eyes: c === 6 ? "closed" : "open",
1817
- legs: null,
1818
- extras: e
1819
- };
1820
- },
1821
- painting: t => {
1822
- // A canvas on the right; strokes appear as the brush works.
1823
- const c = t % 16;
1824
- const e = [];
1825
- rect(13, 2, 15, 7, "l", e);
1826
- if (c >= 2) e.push([13, 3, "p"], [14, 3, "p"]);
1827
- if (c >= 6) e.push([14, 5, "a"], [15, 5, "a"]);
1828
- if (c >= 10) e.push([13, 6, "r"]);
1829
- e.push([13, 8, "g"], [14, 8, "g"], [15, 8 - c % 2, "m"]);
1830
- return {
1831
- ...BASE,
1832
- ex: 1,
1833
- ey: c % 8 < 4 ? -1 : 0,
1834
- extras: e
1835
- };
1836
- },
1837
- disguise: t => {
1838
- // Groucho glasses, nose and moustache; sly glances.
1839
- const e = [];
1840
- for (const x of [4, 8]) {
1841
- rect(x, 5, x + 3, 5, "n", e);
1842
- rect(x, 8, x + 3, 8, "n", e);
1843
- e.push([x, 6, "n"], [x, 7, "n"], [x + 3, 6, "n"], [x + 3, 7, "n"]);
1844
- }
1845
- e.push([7, 8, "a"], [8, 8, "a"]);
1846
- rect(5, 9, 10, 9, "k", e);
1847
- e.push([5, 10, "k"], [10, 10, "k"]);
1848
- return {
1849
- ...BASE,
1850
- ex: [-1, -1, -1, 0, 1, 1, 1, 0][Math.floor(t / 3) % 8],
1851
- extras: e
1852
- };
1853
- },
1854
- pro: t => {
1855
- // A crown in place of the lamp, jewels, sparkles.
1856
- const c = t % 12;
1857
- const e = [];
1858
- rect(5, 2, 10, 3, "a", e);
1859
- e.push([5, 1, "a"], [7, 1, "a"], [8, 1, "a"], [10, 1, "a"], [6, 2, "p"], [9, 2, "p"]);
1860
- e.push(c % 2 ? [3, 1, "l"] : [12, 0, "l"]);
1861
- return {
1862
- ...BASE,
1863
- lamp: null,
1864
- eyes: c >= 6 ? "happy" : "open",
1865
- extras: e
1866
- };
1867
- },
1868
- talking: t => {
1869
- // A speech bubble with typing dots; the lamp pulses as it speaks.
1870
- const c = t % 12;
1871
- const e = [];
1872
- rect(9, 0, 15, 2, "l", e);
1873
- e.push([10, 3, "l"]);
1874
- [10, 12, 14].forEach((x, i) => e.push([x, 1, (c + i) % 3 === 0 ? "k" : "m"]));
1875
- return {
1876
- ...BASE,
1877
- ex: 1,
1878
- ey: -1,
1879
- lamp: c % 4 < 2 ? "a" : "A",
1880
- extras: e
1881
- };
1882
- },
1883
- handshake: t => {
1884
- // A hand arrives from the right; Otto meets it; they shake.
1885
- const c = t % 16;
1886
- const hx = 16 - Math.min(2, c);
1887
- const dy = c >= 4 && c < 12 ? Math.floor(c / 2) % 2 : 0;
1888
- const e = [];
1889
- rect(hx, 6 + dy, hx + 1, 7 + dy, "n", e);
1890
- if (c >= 2) e.push([13, 7 + dy, "g"]);
1891
- return {
1892
- ...BASE,
1893
- ex: 1,
1894
- eyes: c >= 4 ? "happy" : "open",
1895
- extras: e
1896
- };
1897
- },
1898
- robot: t => {
1899
- // A small robot friend on the right: antenna blinking, eyes flickering.
1900
- const c = t % 16;
1901
- const e = [];
1902
- e.push([14, 3, c % 4 < 2 ? "r" : "n"], [14, 4, "n"]);
1903
- rect(13, 5, 15, 7, "n", e);
1904
- const eye = c % 8 < 2 ? "r" : "k";
1905
- e.push([13, 6, eye], [15, 6, eye]);
1906
- rect(13, 8, 15, 10, "m", e);
1907
- e.push([14, 9, "l"], [13, 11, "n"], [15, 11, "n"]);
1908
- return {
1909
- ...BASE,
1910
- ex: 1,
1911
- ey: 1,
1912
- eyes: c >= 8 && c < 12 ? "happy" : "open",
1913
- extras: e
1914
- };
1915
- },
1916
- plug: t => {
1917
- // A plug slides in from the right and connects; the lamp comes on.
1918
- const c = t % 16;
1919
- const px = 16 - Math.min(3, c);
1920
- const e = [];
1921
- rect(px, 6, px + 1, 7, "n", e);
1922
- e.push([px - 1, 6, "l"], [px - 1, 7, "l"], [px + 2, 7, "n"], [px + 3, 7, "n"]);
1923
- if (c >= 4 && c < 7) e.push(c % 2 ? [11, 2, "l"] : [15, 4, "l"]);
1924
- return {
1925
- ...BASE,
1926
- lamp: c >= 3 ? "a" : "A",
1927
- ex: 1,
1928
- eyes: c >= 5 ? "happy" : "open",
1929
- extras: e
1930
- };
1931
- },
1932
- gift: t => {
1933
- // A wrapped gift bounces; the lid lifts with a sparkle.
1934
- const c = t % 16;
1935
- const open = c >= 12;
1936
- const dy = !open && c % 4 === 2 ? -1 : 0;
1937
- const e = [];
1938
- rect(13, 7 + dy, 15, 10 + dy, "p", e);
1939
- rect(14, 7 + dy, 14, 10 + dy, "a", e);
1940
- const by = open ? 4 : 6 + dy;
1941
- rect(13, by, 15, by, "a", e);
1942
- if (open) e.push([14, 3, "l"], [12, 5, "l"]);
1943
- return {
1944
- ...BASE,
1945
- ex: 1,
1946
- ey: 1,
1947
- eyes: open ? "happy" : "big",
1948
- extras: e
1949
- };
1950
- },
1951
- action: t => {
1952
- // A clapperboard on the right claps shut.
1953
- const c = t % 16;
1954
- const closed = c === 4 || c === 5;
1955
- const e = [];
1956
- rect(13, 4, 15, 7, "n", e);
1957
- e.push([14, 5, "k"], [14, 6, "k"]);
1958
- const by = closed ? 3 : 2;
1959
- e.push([13, by, "l"], [14, by, "k"], [15, by, "l"]);
1960
- if (c === 4) e.push([12, 2, "l"]);
1961
- return {
1962
- ...BASE,
1963
- ex: 1,
1964
- ey: -1,
1965
- eyes: c === 4 ? "closed" : "open",
1966
- extras: e
1967
- };
1968
- },
1969
- guard: t => {
1970
- // A shield up; a red bolt comes in, sparks off it and bounces away.
1971
- const c = t % 16;
1972
- const e = [];
1973
- rect(13, 5, 15, 7, "n", e);
1974
- e.push([14, 8, "n"], [14, 6, "g"]);
1975
- if (c % 6 === 0) e.push([13, 5, "l"]);
1976
- if (c >= 2 && c < 6) e.push([15, c - 2, "r"]);
1977
- if (c === 6) e.push([15, 4, "l"], [14, 4, "l"]);
1978
- if (c >= 7 && c < 10) e.push([15, 9 - c, "R"]);
1979
- return {
1980
- ...BASE,
1981
- ex: 1,
1982
- ey: -1,
1983
- eyes: c === 5 || c === 6 ? "big" : "open",
1984
- extras: e
1985
- };
1986
- },
1987
- coffee: t => {
1988
- // A mug with steam; lifts it for a sip, eyes shut, then content.
1989
- const c = t % 16;
1990
- const sip = c >= 8 && c < 12;
1991
- const dy = sip ? -2 : 0;
1992
- const e = [];
1993
- rect(13, 6 + dy, 14, 8 + dy, "l", e);
1994
- e.push([15, 7 + dy, "n"], [13, 6 + dy, "A"], [14, 6 + dy, "A"], [13, 9 + dy, "g"], [14, 9 + dy, "g"]);
1995
- if (!sip) e.push(...(c % 2 ? [[13, 4, "n"], [14, 3, "n"]] : [[14, 4, "n"], [13, 3, "n"]]));
1996
- return {
1997
- ...BASE,
1998
- ex: sip ? 0 : 1,
1999
- ey: sip ? 0 : 1,
2000
- eyes: sip ? "closed" : c >= 12 && c < 14 ? "happy" : "open",
2001
- extras: e
2002
- };
2003
- },
2004
- swimming: t => {
2005
- // In the water to the shoulders, alternating strokes with splashes.
2006
- const c = t % 8;
2007
- const left = c < 4;
2008
- const e = left ? [[1, 8, "g"], [2, 9, "g"], [0, 12, "l"], [13, 11, "g"], [14, 12, "g"]] : [[14, 8, "g"], [13, 9, "g"], [15, 12, "l"], [2, 11, "g"], [1, 12, "g"]];
2009
- return {
2010
- ...BASE,
2011
- submerged: true,
2012
- y0: 8,
2013
- ex: left ? -1 : 1,
2014
- legs: null,
2015
- extras: e
2016
- };
2017
- },
2018
- diving: t => {
2019
- // Sinks out of sight, bubbles rise, then comes back up dripping.
2020
- const c = t % 24;
2021
- const e = [];
2022
- let y0 = 4;
2023
- if (c >= 4 && c < 10) y0 = 4 + (c - 3) * 2;else if (c >= 10 && c < 16) y0 = 16;else if (c >= 16 && c < 20) y0 = 14 - (c - 15) * 2;
2024
- if (c >= 8 && c < 16) e.push([7, 12 - c * 2 % 6, "l"], [9, 12 - (c * 2 + 3) % 6, "l"]);
2025
- if (c === 20 || c === 21) e.push([3, 3, "l"], [12, 3, "l"]);
2026
- return {
2027
- ...BASE,
2028
- submerged: y0 > 4,
2029
- y0,
2030
- ey: c < 4 ? 1 : 0,
2031
- eyes: c >= 20 && c < 23 ? "happy" : "open",
2032
- legs: y0 > 4 ? null : [0, 0, 0],
2033
- extras: e
2034
- };
2035
- },
2036
- balloon: t => {
2037
- // A balloon lifts Otto clear of the water; a splash when it lets go.
2038
- const c = t % 24;
2039
- const y0 = c < 8 ? 4 : c < 20 ? 4 - Math.min(3, Math.floor((c - 8) / 2)) : 4;
2040
- const e = [];
2041
- rect(13, 0, 15, 2, "r", e);
2042
- e.push([14, 3, "R"]);
2043
- rect(14, 4, 14, y0 + 2, "n", e);
2044
- e.push([13, y0 + 2, "g"]);
2045
- if (c === 20) e.push([2, 12, "l"], [12, 12, "l"]);
2046
- const lifted = y0 < 4;
2047
- return {
2048
- ...BASE,
2049
- y0,
2050
- ex: lifted ? 0 : 1,
2051
- ey: lifted ? 0 : -1,
2052
- eyes: lifted ? "happy" : "open",
2053
- legs: lifted ? c % 2 ? [1, 0, 1] : [0, 1, 0] : [0, 0, 0],
2054
- extras: e
2055
- };
2056
- },
2057
- landing: t => {
2058
- // Drops in from above, lands with a squash and a splash, settles.
2059
- const c = t % 16;
2060
- if (c < 4) return {
2061
- ...BASE,
2062
- y0: -8 + c * 3,
2063
- eyes: "big",
2064
- legs: [1, 1, 1]
2065
- };
2066
- if (c === 4) return {
2067
- ...BASE,
2068
- x0: 2,
2069
- w: 12,
2070
- y0: 6,
2071
- h: 5,
2072
- eyes: "closed",
2073
- extras: [[1, 12, "l"], [14, 12, "l"], [0, 11, "l"], [15, 11, "l"]]
2074
- };
2075
- if (c === 5) return {
2076
- ...BASE,
2077
- eyes: "closed"
2078
- };
2079
- return {
2080
- ...BASE,
2081
- eyes: c >= 8 && c < 12 ? "happy" : "open"
2082
- };
2083
- },
2084
- spinning: t => {
2085
- // A full turn: front, three-quarter, side, back and round again.
2086
- const c = t % 16;
2087
- const ph = Math.floor(c / 2);
2088
- const [w, ex] = [[10, 0], [8, 1], [6, 0], [4, 0], [6, 0], [8, -1], [10, 0], [10, 0]][ph];
2089
- const x0 = 3 + (10 - w) / 2;
2090
- const e = [];
2091
- if (w <= 6) {
2092
- const x1 = x0 + w - 1;
2093
- e.push([x0 + 1, 11, "s"], [x0 + 1, 12, "s"], [x1 - 1, 11, "s"], [x1 - 1, 12, "s"]);
2094
- }
2095
- if (w === 4) rect(x0, 6, x0 + 3, 7, "g", e);
2096
- return {
2097
- ...BASE,
2098
- x0,
2099
- w,
2100
- ex,
2101
- legs: w <= 6 ? null : [0, 0, 0],
2102
- extras: e
2103
- };
2104
- },
2105
- bubbles: t => {
2106
- // Blows through a bubble wand; bubbles drift up and away.
2107
- const c = t % 12;
2108
- const blow = c < 4;
2109
- const e = [[13, 6, "g"], [14, 6, "g"], [15, 6, "m"], [15, 5, "m"], [15, 4, "n"]];
2110
- for (let i = 0; i < 3; i++) {
2111
- const y = 3 - (c + i * 4) % 12;
2112
- if (y >= 0) e.push([13 + i % 2, y, "l"]);
2113
- }
2114
- return {
2115
- ...BASE,
2116
- ex: blow ? 1 : 1,
2117
- ey: blow ? 0 : -1,
2118
- eyes: blow ? "closed" : "open",
2119
- extras: e
2120
- };
2121
- },
2122
- trash: t => {
2123
- // Bits fly into a bin, the lid flaps, a puff when it's done.
2124
- const c = t % 16;
2125
- const e = [];
2126
- rect(13, 7, 15, 11, "n", e);
2127
- rect(14, 8, 14, 10, "1", e);
2128
- const open = c >= 2 && c < 10;
2129
- rect(13, open ? 5 : 6, 15, open ? 5 : 6, "n", e);
2130
- if (c >= 3 && c < 9) e.push([7 + (c - 3), 5 - c % 2, c % 2 ? "p" : "a"]);
2131
- if (c === 9 || c === 10) e.push([14, 4, "l"], [13, 3, "l"], [15, 3, "l"]);
2132
- return {
2133
- ...BASE,
2134
- ex: 1,
2135
- ey: -1,
2136
- eyes: c >= 11 && c < 14 ? "happy" : "open",
2137
- extras: e
2138
- };
2139
- },
2140
- saved: t => {
2141
- // A floppy disk pops in; a hop and a sparkle.
2142
- const c = t % 12;
2143
- const dy = c === 1 ? -1 : 0;
2144
- const e = [];
2145
- if (c >= 1) {
2146
- rect(13, 2 + dy, 15, 5 + dy, "1", e);
2147
- e.push([13, 2 + dy, "n"], [14, 2 + dy, "n"]);
2148
- rect(13, 4 + dy, 15, 5 + dy, "l", e);
2149
- }
2150
- if (c === 3 || c === 4) e.push([12, 0, "l"], [15, 7, "l"]);
2151
- const hop = c === 2 ? 1 : 0;
2152
- return {
2153
- ...BASE,
2154
- y0: 4 - hop,
2155
- ex: 1,
2156
- ey: -1,
2157
- eyes: c >= 3 ? "happy" : "open",
2158
- legs: hop ? [1, 1, 1] : [0, 0, 0],
2159
- extras: e
2160
- };
2161
- },
2162
- copied: t => {
2163
- // One sheet slides out from behind another; a sparkle.
2164
- const c = t % 12;
2165
- const off = c < 2 ? 0 : 1;
2166
- const e = [];
2167
- rect(12, 1, 14, 3, "n", e);
2168
- e.push([13, 2, "1"]);
2169
- rect(12 + off, 2 + off, 14 + off, 4 + off, "l", e);
2170
- e.push([13 + off, 3 + off, "m"]);
2171
- if (c === 4 || c === 5) e.push([15, 0, "l"], [11, 6, "l"]);
2172
- return {
2173
- ...BASE,
2174
- ex: 1,
2175
- ey: -1,
2176
- eyes: c >= 4 ? "happy" : "open",
2177
- extras: e
2178
- };
2179
- },
2180
- charting: t => {
2181
- // Three bars grow on the right; pleased when they land.
2182
- const c = t % 16;
2183
- const e = [];
2184
- rect(13, 12, 15, 12, "n", e);
2185
- [3, 5, 4].forEach((target, i) => {
2186
- const h = Math.min(target, Math.floor(c / 2));
2187
- if (h > 0) rect(13 + i, 12 - h, 13 + i, 11, "g", e);
2188
- });
2189
- return {
2190
- ...BASE,
2191
- ex: 1,
2192
- ey: c < 6 ? 1 : 0,
2193
- eyes: c >= 12 ? "happy" : "open",
2194
- extras: e
2195
- };
2196
- },
2197
- // ── Pairing poses ───────────────────────────────────────────────────────
2198
- // Built to hold something that is NOT in the grid — a tool's icon tile,
2199
- // drawn by the scene at OTTO_ANCHORS[state](t). The right-hand prop zone is
2200
- // kept clear on purpose.
2201
- present: t => {
2202
- // A flat hand held out; the object floats above the palm and bobs.
2203
- const c = t % 16;
2204
- const e = [[13, 7, "g"], [14, 7, "g"], [15, 7, "g"], [15, 6, "g"]];
2205
- return {
2206
- ...BASE,
2207
- ex: 1,
2208
- ey: -1,
2209
- eyes: c === 13 ? "closed" : c >= 8 && c < 12 ? "happy" : "open",
2210
- extras: e
2211
- };
2212
- },
2213
- lift: t => {
2214
- // Both arms up; the object rides above the head; a hop every eight ticks.
2215
- const c = t % 16;
2216
- const hop = c % 8 === 2 || c % 8 === 3 ? 1 : 0;
2217
- const e = [[2, 5 - hop, "g"], [1, 4 - hop, "g"], [1, 3 - hop, "g"], [13, 5 - hop, "g"], [14, 4 - hop, "g"], [14, 3 - hop, "g"]];
2218
- return {
2219
- ...BASE,
2220
- y0: 4 - hop,
2221
- eyes: "happy",
2222
- legs: hop ? [1, 1, 1] : [0, 0, 0],
2223
- extras: e
2224
- };
2225
- },
2226
- carry: t => {
2227
- // Arms up, marching; the object rides overhead with the step.
2228
- const b = Math.floor(t / 2) % 2;
2229
- const e = [[2, 5 + b, "g"], [1, 4 + b, "g"], [1, 3 + b, "g"], [13, 5 + b, "g"], [14, 4 + b, "g"], [14, 3 + b, "g"]];
2230
- return {
2231
- ...BASE,
2232
- y0: 4 + b,
2233
- ex: t % 16 < 8 ? 0 : 1,
2234
- legs: walk(t),
2235
- extras: e
2236
- };
2237
- },
2238
- hug: t => {
2239
- // Arms wrapped round the object held against the body; eyes peep over it.
2240
- const c = t % 16;
2241
- const b = Math.floor(c / 8) % 2;
2242
- const e = [[1, 7 + b, "g"], [2, 8 + b, "g"], [14, 7 + b, "g"], [13, 8 + b, "g"]];
2243
- return {
2244
- ...BASE,
2245
- y0: 4 + b,
2246
- ey: -1,
2247
- eyes: c >= 4 && c < 12 ? "happy" : "closed",
2248
- extras: e
2249
- };
2250
- },
2251
- lean: t => {
2252
- // One arm resting on the object standing beside Otto; relaxed.
2253
- const c = t % 24;
2254
- const e = [[13, 5, "g"], [14, 5, "g"], [15, 5, "g"]];
2255
- return {
2256
- ...BASE,
2257
- ex: c < 16 ? 1 : 0,
2258
- eyes: c >= 8 && c < 12 ? "closed" : "open",
2259
- legs: [0, 1, 0],
2260
- extras: e
2261
- };
2262
- },
2263
- point: t => {
2264
- // Arm up and out; the object hangs up-right, bobbing; a hop of delight.
2265
- const c = t % 16;
2266
- const hop = c === 6 || c === 7 ? 1 : 0;
2267
- const e = [[13, 5 - hop, "g"], [14, 4 - hop, "g"], [15, 3 - hop, "g"]];
2268
- return {
2269
- ...BASE,
2270
- y0: 4 - hop,
2271
- ex: 1,
2272
- ey: -1,
2273
- eyes: c >= 6 && c < 10 ? "happy" : "open",
2274
- legs: hop ? [1, 1, 1] : [0, 0, 0],
2275
- extras: e
2276
- };
2277
- },
2278
- static: () => ({
2279
- ...BASE
2280
- })
2281
- };
2282
-
2283
- /** Where a held object sits, in grid cells (may run past the 16×16 grid). */
2284
-
2285
- /**
2286
- * The pairing poses' object anchors at tick `t`, for a 7×7-cell object — a
2287
- * tool icon tile. Bobs follow the pose so the object moves with the hands.
2288
- */
2289
- export const OTTO_ANCHORS = {
2290
- present: t => ({
2291
- x: 14,
2292
- y: -1 + Math.floor(t % 16 / 4) % 2,
2293
- over: false
2294
- }),
2295
- lift: t => {
2296
- const c = t % 16;
2297
- const hop = c % 8 === 2 || c % 8 === 3 ? 1 : 0;
2298
- return {
2299
- x: 4,
2300
- y: -5 - hop,
2301
- over: false
2302
- };
2303
- },
2304
- carry: t => ({
2305
- x: 4,
2306
- y: -5 + Math.floor(t / 2) % 2,
2307
- over: false
2308
- }),
2309
- hug: t => ({
2310
- x: 4,
2311
- y: 7 + Math.floor(t % 16 / 8) % 2,
2312
- over: true
2313
- }),
2314
- lean: () => ({
2315
- x: 14,
2316
- y: 6,
2317
- over: false
2318
- }),
2319
- point: t => {
2320
- const c = t % 16;
2321
- const hop = c === 6 || c === 7 ? 1 : 0;
2322
- return {
2323
- x: 15,
2324
- y: -5 - hop + Math.floor(c / 4) % 2,
2325
- over: false
2326
- };
2327
- }
2328
- };
2329
-
2330
- /** The object size OTTO_ANCHORS is drawn for, in cells. */
2331
- export const OTTO_ANCHOR_SIZE = 7;
2332
- export const OTTO_NOTES = {
2333
- idle: "Bobs one pixel, blinks, glances left and right.",
2334
- thinking: "Looks up; a thought cloud fills with dots.",
2335
- happy: "Two-pixel hop: stretch on takeoff, squash on landing.",
2336
- error: "Lamp goes red, eyes shut, body shakes.",
2337
- sleep: "Sinks a row, lamp dims, z’s drift up.",
2338
- peek: "Submerged to the eyes, scanning.",
2339
- typing: "Laptop with a Buoy screen; tentacles tap.",
2340
- debugging: "Magnifier over one eye, scanning left and right.",
2341
- building: "Hard hat, hammer swings, spark on the hit.",
2342
- carrying: "Phone overhead, marching.",
2343
- pushing: "Shoves a crate, one pixel per heave.",
2344
- sweeping: "Broom, dust puff on each stroke.",
2345
- juggling: "Three blocks: red, orange, purple.",
2346
- wizard: "Purple hat, wand sparkles.",
2347
- conducting: "Arms swing in antiphase, notes rise.",
2348
- beacon: "Lamp emits three expanding rings.",
2349
- notification: "Hop with a blinking exclamation.",
2350
- disconnected: "Lamp dim, looks up at a phone blinking red.",
2351
- dizzy: "X eyes, two stars orbit, body wobbles.",
2352
- overheated: "Melts into a puddle and reforms.",
2353
- confused: "Question mark, head tilt, eyes wander.",
2354
- stare: "Big square eyes. Rare blink.",
2355
- walking: "Crab-walks left and right, eyes lead.",
2356
- goingaway: "Walks off the right edge, returns from the left.",
2357
- eureka: "Bulb appears, lights up with sparks, tiny hops.",
2358
- grooving: "Headphones on, sways with the beat, notes pop.",
2359
- hatmishap: "Wizard hat slips over the eyes; a wave of the wand fixes it.",
2360
- lowbattery: "Slumped, lamp off, red battery blinks. Eyes barely open.",
2361
- wake: "Puddle, wide eyes, springs up, squashes, settles.",
2362
- builder: "Balances a stack of blocks; sweat drop when it wobbles.",
2363
- mini: "Half-size Otto. Big eyes, waving arms, kicking feet.",
2364
- minityping: "Mini Otto typing, data bits float up.",
2365
- happydance: "Arms pump in antiphase, feet shuffle.",
2366
- jumping: "Crouch, four-pixel leap, arms up, land.",
2367
- loading: "Three dots chase around a ring; eyes follow the lead.",
2368
- progress: "A bar fills across the top; a hop when it completes.",
2369
- hourglass: "Sand runs through, the glass lifts and flips.",
2370
- waiting: "Foot taps, checks the wristwatch, dots pile up.",
2371
- syncing: "Two arcs chase each other; lamp pulses in step.",
2372
- downloading: "An arrow drops into the tray, the parcel lands.",
2373
- uploading: "The parcel lifts off the tray and climbs out.",
2374
- connecting: "Signal bars fill one by one, then blink: connected.",
2375
- scanning: "A bright line sweeps down the body with a trail.",
2376
- searching: "Binoculars up, slow sweep left and right.",
2377
- empty: "Peers into an open box, finds nothing, looks back at you.",
2378
- shrug: "Arms up, looks left, looks right, arms down.",
2379
- fishing: "Rod out, bobber bobbing; one tug, one splash.",
2380
- listening: "Hand cupped, sound arcs arriving from the side.",
2381
- tumbleweed: "A tumbleweed rolls past; eyes follow it off the edge.",
2382
- warning: "Holds up a warning sign, lamp blinking.",
2383
- crash: "Burst, smoke, then dazed with X eyes.",
2384
- panic: "Arms flail, sweat flies, lamp strobes.",
2385
- sos: "The lamp flashes S-O-S in morse; arms wave.",
2386
- offline: "A struck-through cloud; slumped, lamp dim.",
2387
- timeout: "A clock ticks round, turns red; a shake.",
2388
- locked: "A padlock: look, strain at it, give up.",
2389
- unlocked: "The shackle pops open; sparkles and a hop.",
2390
- denied: "A red no-entry sign; head shaking.",
2391
- broken: "A crack down the middle; a band-aid goes on.",
2392
- sad: "Sunk a row, lamp dim, a tear drops in.",
2393
- rain: "A rain cloud overhead, drops falling.",
2394
- sick: "A thermometer climbs; wobbling and sweating.",
2395
- flood: "In over the eyes, arms flailing, bubbles rising.",
2396
- bug: "A beetle crawls across the body, then flies off.",
2397
- alarm: "The lamp is a siren: red strobe, sweeping rays.",
2398
- frozen: "Iced over: icicles for legs, snow, shivering.",
2399
- snail: "A snail crosses the foreground, very slowly.",
2400
- angry: "Brows down, lamp red, steam, stomping.",
2401
- ghost: "Grey and translucent, floating, white eyes.",
2402
- nervous: "Eyes darting, sweat, fidgeting feet.",
2403
- puzzled: "A tentacle scratches the head; eyes wander.",
2404
- detective: "Deerstalker hat, magnifying glass on the move.",
2405
- reading: "An open book; eyes run the lines; a page turns.",
2406
- success: "A check mark lands; sparkles, a hop, lamp blinks.",
2407
- celebrate: "Confetti falls, arms up, bouncing.",
2408
- thumbsup: "A fist rises, thumb out; then a wink.",
2409
- party: "Party hat, confetti, a side-to-side dance.",
2410
- trophy: "A cup held overhead, sparkles, a hop.",
2411
- starred: "A star pops in at the top right and twinkles.",
2412
- love: "Hearts float up either side; the body bobs.",
2413
- wave: "One arm up, hand swinging; a smile at the end.",
2414
- bow: "A slow bow: squash forward, eyes shut, back up.",
2415
- cool: "Sunglasses drop into place; a little sway.",
2416
- flexing: "Both arms up in a flex; the biceps pop.",
2417
- zen: "Floating above the water, eyes shut, slow bob.",
2418
- recording: "A red REC dot blinks; eyes slowly sweep the room.",
2419
- paused: "Pause bars overhead; resting, lamp dim, one peek.",
2420
- filtering: "A funnel: mixed bits go in, only orange comes out.",
2421
- pinned: "A pushpin drops in from above and lands.",
2422
- rewind: "Moonwalks left while a clock runs backwards.",
2423
- storing: "Crates stack up on the right, one at a time.",
2424
- printing: "A little printer spools out a strip of log lines.",
2425
- stopwatch: "A stopwatch with a fast hand; speed lines.",
2426
- spotlight: "The lamp throws a beam that sweeps left, up, right.",
2427
- keys: "A keyring held out; the keys jingle.",
2428
- map: "A folded map: dotted route, red pin; looks around.",
2429
- photo: "A camera held up; flash; a print pops out.",
2430
- painting: "A canvas on the right; strokes appear.",
2431
- disguise: "Groucho glasses, nose and moustache; sly glances.",
2432
- pro: "A crown in place of the lamp, jewels, sparkles.",
2433
- talking: "A speech bubble with typing dots; lamp pulses.",
2434
- handshake: "A hand arrives from the right; they shake.",
2435
- robot: "A small robot friend: antenna blinking, eyes flickering.",
2436
- plug: "A plug slides in and connects; the lamp comes on.",
2437
- gift: "A wrapped gift bounces; the lid lifts with a sparkle.",
2438
- action: "A clapperboard claps shut.",
2439
- guard: "A shield up; a red bolt sparks off it and bounces away.",
2440
- coffee: "A mug with steam; a sip with eyes shut.",
2441
- swimming: "In to the shoulders, alternating strokes with splashes.",
2442
- diving: "Sinks out of sight, bubbles rise, comes back dripping.",
2443
- balloon: "A balloon lifts Otto clear of the water; a splash on release.",
2444
- landing: "Drops in from above, lands with a squash and a splash.",
2445
- spinning: "A full turn: front, three-quarter, side, back and round.",
2446
- bubbles: "Blows through a bubble wand; bubbles drift up.",
2447
- trash: "Bits fly into a bin, the lid flaps, a puff when done.",
2448
- saved: "A floppy disk pops in; a hop and a sparkle.",
2449
- copied: "One sheet slides out from behind another.",
2450
- charting: "Three bars grow on the right; pleased when they land.",
2451
- present: "A flat hand held out; the object floats above the palm.",
2452
- lift: "Both arms up; the object rides overhead; a hop.",
2453
- carry: "Arms up, marching; the object rides with the step.",
2454
- hug: "Arms wrapped round the object; eyes peep over it.",
2455
- lean: "One arm resting on the object beside Otto; relaxed.",
2456
- point: "Arm up and out; the object hangs up-right, bobbing.",
2457
- static: "Base pose, no motion. For favicons and stills."
2458
- };
2459
-
2460
- /** Every animated state, in the mockup's order (`static` excluded). */
2461
- export const OTTO_STATE_NAMES = Object.keys(OTTO_STATES).filter(n => n !== "static");
2462
- /**
2463
- * The states by job. Every animated state is in exactly one group; a tool
2464
- * picks from the group that matches the moment (an empty list shows an
2465
- * `empty` group state, a failed request a `trouble` one, and so on).
2466
- */
2467
- export const OTTO_GROUPS = [{
2468
- id: "loading",
2469
- title: "Loading & progress",
2470
- blurb: "Something is on its way. Spinners, bars, connecting, scanning, waiting.",
2471
- states: ["loading", "progress", "hourglass", "waiting", "syncing", "downloading", "uploading", "connecting", "scanning", "searching", "fishing"]
2472
- }, {
2473
- id: "empty",
2474
- title: "Empty & unknown",
2475
- blurb: "Nothing here yet, nothing found, or no idea what this is.",
2476
- states: ["empty", "shrug", "tumbleweed", "confused", "puzzled"]
2477
- }, {
2478
- id: "trouble",
2479
- title: "Errors & trouble",
2480
- blurb: "Failures, warnings, disconnects, limits — from a blip to a crash.",
2481
- states: ["error", "warning", "crash", "panic", "sos", "alarm", "offline", "disconnected", "timeout", "locked", "denied", "broken", "sad", "rain", "sick", "overheated", "dizzy", "flood", "bug", "frozen", "snail", "angry", "ghost", "nervous", "lowbattery"]
2482
- }, {
2483
- id: "success",
2484
- title: "Success & celebration",
2485
- blurb: "It worked. Confirmations, unlocks, milestones, thanks.",
2486
- states: ["happy", "eureka", "success", "celebrate", "thumbsup", "party", "trophy", "starred", "love", "unlocked", "notification", "beacon", "cool", "flexing", "pro", "gift"]
2487
- }, {
2488
- id: "working",
2489
- title: "Working & tool moments",
2490
- blurb: "Busy doing the job: capturing, filtering, saving, inspecting, talking.",
2491
- states: ["thinking", "typing", "debugging", "building", "carrying", "pushing", "sweeping", "detective", "reading", "map", "painting", "photo", "printing", "storing", "charting", "stopwatch", "spotlight", "keys", "filtering", "talking", "listening", "recording", "paused", "rewind", "trash", "disguise", "guard", "action", "robot", "plug", "handshake", "saved", "copied", "pinned"]
2492
- }, {
2493
- id: "personality",
2494
- title: "Idle, moves & personality",
2495
- blurb: "Otto being Otto: idling, wandering, swimming, dancing, showing off.",
2496
- states: ["idle", "stare", "mini", "minityping", "walking", "goingaway", "peek", "sleep", "wake", "jumping", "spinning", "swimming", "diving", "balloon", "landing", "bubbles", "zen", "bow", "wave", "coffee", "grooving", "conducting", "juggling", "wizard", "hatmishap", "builder", "happydance"]
2497
- }, {
2498
- id: "pairing",
2499
- title: "Pairing poses",
2500
- blurb: "Built to hold a tool's icon tile — the object is drawn by the scene at OTTO_ANCHORS.",
2501
- states: ["present", "lift", "carry", "hug", "lean", "point"]
2502
- }];
2503
-
2504
- /** When to reach for each state — the moment in a tool it was drawn for. */
2505
- export const OTTO_USES = {
2506
- idle: "Default resting state; nothing to report.",
2507
- thinking: "Working something out; Ask Buoy composing.",
2508
- happy: "A quick positive beat after any action.",
2509
- error: "A request or action failed.",
2510
- sleep: "Tool idle for a long time; capture off overnight.",
2511
- peek: "Minimized or collapsed; still watching.",
2512
- typing: "Ask Buoy typing a reply; code being written.",
2513
- debugging: "Inspecting a detail view; stepping through.",
2514
- building: "Bundling, compiling, a build in progress.",
2515
- carrying: "Moving data between tools; exporting.",
2516
- pushing: "A heavy job: large payload, slow migration.",
2517
- sweeping: "Clearing a list; cache cleanup done.",
2518
- juggling: "Several stores or queries updating at once.",
2519
- wizard: "A setup wizard; magic done on your behalf.",
2520
- conducting: "Orchestrating a flow or scenario.",
2521
- beacon: "Broadcasting: broker up, dashboard discoverable.",
2522
- notification: "A new item arrived; badge count went up.",
2523
- disconnected: "Device or dashboard connection dropped.",
2524
- dizzy: "Too many re-renders; a render storm.",
2525
- overheated: "CPU or thermal pressure; perf meltdown.",
2526
- confused: "Unknown or unparseable data.",
2527
- stare: "Watching for a specific event; recording armed.",
2528
- walking: "Navigating between routes.",
2529
- goingaway: "Leaving a screen; a tool closing.",
2530
- eureka: "Root cause found; a diff that explains it.",
2531
- grooving: "Everything healthy; nothing to do but vibe.",
2532
- hatmishap: "A small recoverable slip; retry worked.",
2533
- lowbattery: "Device battery low; power-saving mode.",
2534
- wake: "Tool re-opened; capture resumed.",
2535
- builder: "Assembling a state tree or fixture.",
2536
- mini: "Compact or inline placements.",
2537
- minityping: "A compact typing indicator.",
2538
- happydance: "A milestone: all tests green, release done.",
2539
- jumping: "Jump to a route, a log line, a snapshot.",
2540
- loading: "Generic indeterminate loading.",
2541
- progress: "Determinate progress: download, batch, upload.",
2542
- hourglass: "Waiting on a timer; a scheduled retry.",
2543
- waiting: "Waiting for a device, the first event, a reply.",
2544
- syncing: "Syncing with the desktop dashboard or broker.",
2545
- downloading: "Pulling a snapshot, an update, a payload.",
2546
- uploading: "Sending a report, a snapshot, feedback.",
2547
- connecting: "Connecting to a device or broker.",
2548
- scanning: "Scanning for targets, keys, assets, fibers.",
2549
- searching: "A search running; filtering a long list.",
2550
- fishing: "Capture on, nothing captured yet.",
2551
- empty: "An empty list: no requests, no logs, no keys.",
2552
- shrug: "No result and no explanation available.",
2553
- tumbleweed: "Deliberately empty; nothing happened for a while.",
2554
- puzzled: "Unexpected shape; needs a second look.",
2555
- warning: "A warning: deprecated, risky, near a limit.",
2556
- crash: "The app crashed; a fatal was captured.",
2557
- panic: "Many errors at once; an error cascade.",
2558
- sos: "Critical: the app cannot continue.",
2559
- alarm: "An alert rule fired; attention now.",
2560
- offline: "No network; device offline.",
2561
- timeout: "A request or connection timed out.",
2562
- locked: "A Pro feature; a locked setting.",
2563
- denied: "Permission denied; blocked by policy.",
2564
- broken: "Corrupted data; a broken persisted value.",
2565
- sad: "Nothing matched; a failed search.",
2566
- rain: "A bad run: errors piling up.",
2567
- sick: "Unhealthy config; env check failing.",
2568
- flood: "Buffer full; too many events to keep up.",
2569
- bug: "A bug was found (or is being reported).",
2570
- frozen: "The UI thread froze; a hung frame.",
2571
- snail: "Slow: a long request, a slow render.",
2572
- angry: "Rate limited, rejected, forbidden.",
2573
- ghost: "Stale or detached: an unmounted component, an old snapshot.",
2574
- nervous: "A risky action pending confirmation.",
2575
- detective: "Investigating; root-cause analysis.",
2576
- reading: "Reading docs or a long log.",
2577
- success: "Action completed; a rule saved, a replay done.",
2578
- celebrate: "A big success: first capture, setup complete.",
2579
- thumbsup: "Approved; looks good; confirmation received.",
2580
- party: "Release shipped; a version milestone.",
2581
- trophy: "Best benchmark yet; a personal record.",
2582
- starred: "Pinned, favourited, starred.",
2583
- love: "Thanks and delight; feedback sent.",
2584
- unlocked: "Pro unlocked; license activated.",
2585
- cool: "Perfect score; zero warnings.",
2586
- flexing: "Fast: a great perf result.",
2587
- zen: "All quiet; nothing needs attention.",
2588
- pro: "Pro plan active.",
2589
- gift: "New version or feature available.",
2590
- map: "Route inspector; where am I in the navigator.",
2591
- photo: "Screenshot taken; image captured.",
2592
- painting: "Assets and design overlays; theming.",
2593
- printing: "Console streaming; logs arriving.",
2594
- storing: "Saving to storage; persisting.",
2595
- charting: "Metrics building up; perf charts.",
2596
- stopwatch: "Benchmark running; timing a request.",
2597
- spotlight: "Highlighting renders; spotlight on a component.",
2598
- keys: "Environment variables and secrets.",
2599
- filtering: "Filters active; a subset shown.",
2600
- talking: "Ask Buoy answering; a message in flight.",
2601
- listening: "Listening for events; waiting for input.",
2602
- recording: "Capture on; recording a session.",
2603
- paused: "Capture paused.",
2604
- rewind: "Time Machine: stepping back through snapshots.",
2605
- trash: "Cleared: list emptied, cache purged.",
2606
- disguise: "Impersonating another user.",
2607
- guard: "Sentry or a guard rail caught something.",
2608
- action: "A scenario or flow started.",
2609
- robot: "The MCP agent is driving the tools.",
2610
- plug: "Device connected; plugin installed.",
2611
- handshake: "Paired with the desktop dashboard.",
2612
- saved: "Saved: request, snapshot, rule.",
2613
- copied: "Copied to clipboard.",
2614
- pinned: "Item pinned; survives clears.",
2615
- spinning: "Refreshing; reloading the app.",
2616
- swimming: "Making progress through a long job.",
2617
- diving: "Drilling into a detail or nested value.",
2618
- balloon: "Upgrading; a plan change in progress.",
2619
- landing: "Tool mounted; first open.",
2620
- bubbles: "A light idle for empty side panels.",
2621
- bow: "Thank you; a graceful exit.",
2622
- wave: "Welcome; onboarding; first run.",
2623
- coffee: "A long build; take a break.",
2624
- present: "Presenting a tool: onboarding, a tool's intro card.",
2625
- lift: "Showing off a tool: a feature announcement.",
2626
- carry: "Bringing a tool along: install, add-to-dial.",
2627
- hug: "A favourite tool: pinned, most used.",
2628
- lean: "A tool at rest: its idle or settings screen.",
2629
- point: "Pointing at a tool: a hint, a next step.",
2630
- static: "Favicons, stills, icons."
2631
- };
2632
-
2633
- /** Cycle lengths that differ from the 16-tick default (used by the reel). */
2634
- const OTTO_CYCLE = {
2635
- progress: 32,
2636
- hourglass: 20,
2637
- fishing: 32,
2638
- tumbleweed: 28,
2639
- crash: 20,
2640
- sos: 34,
2641
- locked: 20,
2642
- unlocked: 20,
2643
- broken: 24,
2644
- snail: 36,
2645
- reading: 24,
2646
- storing: 24,
2647
- diving: 24,
2648
- balloon: 24,
2649
- swimming: 8,
2650
- scanning: 14,
2651
- connecting: 14,
2652
- loading: 10,
2653
- syncing: 10,
2654
- downloading: 12,
2655
- uploading: 12,
2656
- alarm: 8,
2657
- flood: 8,
2658
- panic: 8,
2659
- nervous: 8,
2660
- keys: 8,
2661
- flexing: 8
2662
- };
2663
-
2664
- /** The demo reel: [state, frames]. */
2665
- export const OTTO_REEL = [["idle", 30], ["thinking", 20], ["typing", 20], ["happy", 14], ["debugging", 18], ["idle", 14], ["building", 16], ["carrying", 14], ["pushing", 14], ["sweeping", 14], ["juggling", 16], ["wizard", 14], ["conducting", 14], ["beacon", 14], ["notification", 16], ["error", 12], ["disconnected", 14], ["dizzy", 14], ["overheated", 24], ["confused", 18], ["stare", 20], ["walking", 32], ["eureka", 24], ["grooving", 16], ["hatmishap", 32], ["builder", 16], ["happydance", 12], ["jumping", 16], ["mini", 16], ["minityping", 12], ["lowbattery", 24], ["sleep", 24], ["wake", 30], ["peek", 18], ["goingaway", 26],
2666
- // Everything after the original set, one full cycle each.
2667
- ...["loading", "progress", "hourglass", "waiting", "syncing", "downloading", "uploading", "connecting", "scanning", "searching", "fishing", "empty", "shrug", "tumbleweed", "puzzled", "warning", "crash", "panic", "sos", "alarm", "offline", "timeout", "locked", "unlocked", "denied", "broken", "sad", "rain", "sick", "flood", "bug", "frozen", "snail", "angry", "ghost", "nervous", "detective", "reading", "success", "celebrate", "thumbsup", "party", "trophy", "starred", "love", "wave", "bow", "cool", "flexing", "zen", "recording", "paused", "filtering", "pinned", "rewind", "storing", "printing", "stopwatch", "spotlight", "keys", "map", "photo", "painting", "disguise", "pro", "talking", "handshake", "robot", "plug", "gift", "action", "guard", "coffee", "swimming", "diving", "balloon", "landing", "spinning", "bubbles", "trash", "saved", "copied", "charting", "present", "lift", "carry", "hug", "lean", "point"].map(s => [s, OTTO_CYCLE[s] ?? 16])];
2668
- const REEL_LENGTH = OTTO_REEL.reduce((a, s) => a + s[1], 0);
2669
-
2670
- /** Which reel state plays at tick `t`, and how far into it we are. */
2671
- export function ottoReel(t) {
2672
- let c = (t % REEL_LENGTH + REEL_LENGTH) % REEL_LENGTH;
2673
- for (const [state, len] of OTTO_REEL) {
2674
- if (c < len) return {
2675
- state,
2676
- local: c
2677
- };
2678
- c -= len;
2679
- }
2680
- return {
2681
- state: "idle",
2682
- local: 0
2683
- };
2684
- }
2685
-
2686
- /**
2687
- * One frame of one state as a 16×16 grid of palette keys (`.` = transparent).
2688
- * Look colours up in `OTTO_PALETTE`.
2689
- */
2690
- export function renderOttoFrame(state, t, opts = {}) {
2691
- const local = Math.max(0, Math.floor(t));
2692
- const pose = OTTO_STATES[state](local);
2693
- return compose(draw(pose), local, {
2694
- water: opts.water ?? true,
2695
- keyline: opts.keyline ?? true,
2696
- submerged: !!pose.submerged
2697
- });
2698
- }
2699
-
2700
- /** A horizontal run of one colour — what the renderer actually draws. */
2701
-
2702
- /**
2703
- * Run-length encode a frame into coloured spans, skipping transparency. A
2704
- * 16×16 frame is ~256 cells but only ~40–70 runs, which is what keeps a
2705
- * screen full of animating sprites cheap on Fabric.
2706
- */
2707
- export function ottoRuns(grid) {
2708
- const runs = [];
2709
- for (let y = 0; y < grid.length; y++) {
2710
- const row = grid[y];
2711
- let x = 0;
2712
- while (x < row.length) {
2713
- const key = row[x];
2714
- let w = 1;
2715
- while (x + w < row.length && row[x + w] === key) w++;
2716
- if (key !== ".") {
2717
- const color = OTTO_PALETTE[key];
2718
- if (color) runs.push({
2719
- x,
2720
- y,
2721
- w,
2722
- color
2723
- });
2724
- }
2725
- x += w;
2726
- }
2727
- }
2728
- return runs;
2729
- }
1
+ "use strict";export const OTTO_GRID=16;export const OTTO_PALETTE={g:"#20C997",s:"#1BAB80",d:"#0D9668",h:"#3DD9A8",k:"#000000",a:"#FFA94D",A:"#6B4520",r:"#FF3B30",R:"#5A1712",p:"#9B70E0",w:"#0A1A16",W:"#0F2A22",n:"#9BA1A6",m:"#636366",l:"#ECEDEE","1":"#2A2A2E"};const a={x0:3,y0:4,w:10,h:7,eyes:"open",lamp:"a",legs:[0,0,0]};const O=["nnnnnnnnnn","lmlmlmlmlm","mmmmmmmmmm"];const z="gsdhaArRk";function u(t){return t%2?[0,1,0]:[1,0,1]}function r(t,e,n,s,o,i){for(let l=e;l<=s;l++)for(let c=t;c<=n;c++)i.push([c,l,o]);return i}function d([t,e],n){return[t,e,n]}const b=[[13,0],[14,0],[15,1],[15,2],[15,3],[14,4],[13,4],[12,3],[12,2],[12,1]];function S(t,e,n,s){s.push([t,e,n],[t,e+1,n],[t-1,e+2,n],[t,e+2,n],[t+1,e+2,n],[t,e+3,n]);return s}function B(t,e,n,s){s.push([t,e,n],[t-1,e+1,n],[t,e+1,n],[t+1,e+1,n],[t,e+2,n],[t,e+3,n]);return s}const T=[1,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0];function E(t,e){r(13,4,15,6,"a",e);e.push([14,5,"k"],[14,6,"k"]);if(t)e.push([13,1,"n"],[14,1,"n"],[15,1,"n"],[13,2,"n"],[13,3,"n"]);else e.push([13,2,"n"],[14,2,"n"],[15,2,"n"],[13,3,"n"],[15,3,"n"]);return e}function R(t){const e=OTTO_GRID;const n=OTTO_GRID;const s=Array.from({length:n},()=>Array(e).fill("."));const o=t.dx||0;const i=(p,g,y)=>{p+=o;if(p>=0&&p<e&&g>=0&&g<n)s[g][p]=y};const{x0:l,y0:c,w:m,h:w}=t;const x=l+m-1;const f=c+w-1;for(let p=c;p<=f;p++){for(let g=l;g<=x;g++){if((g===l||g===x)&&(p===c||p===f))continue;i(g,p,p===c?"h":p===f||g===x?"s":"g")}}if(t.lamp){const p=l+Math.floor(m/2)-1;i(p,c-2,t.lamp);i(p+1,c-2,t.lamp);for(let g=p-1;g<=p+2;g++)i(g,c-1,"d")}const k=t.ex||0;const h=c+2+(t.ey||0);for(const p of[l+2+k,x-3+k]){if(t.eyes==="open"){i(p,h,"k");i(p+1,h,"k");i(p,h+1,"k");i(p+1,h+1,"k")}else if(t.eyes==="closed"){i(p,h+1,"k");i(p+1,h+1,"k")}else if(t.eyes==="happy"){i(p,h+1,"k");i(p+1,h,"k");i(p+2,h+1,"k")}else if(t.eyes==="x"){i(p,h,"k");i(p+2,h,"k");i(p+1,h+1,"k");i(p,h+2,"k");i(p+2,h+2,"k")}else if(t.eyes==="big"){for(let g=0;g<3;g++)for(let y=0;y<3;y++)i(p+y,h+g,"k")}}if(t.legs){const p=l+Math.floor((m-8)/2);t.legs.forEach((g,y)=>{const A=p+y*3;i(A,f+1,g?"s":"g");i(A+1,f+1,g?"s":"g");if(!g){i(A,f+2,"s");i(A+1,f+2,"s")}})}(t.extras||[]).forEach(([p,g,y])=>i(p,g,y));return s}function v(t,e,n){return((t-Math.floor(n/2)+e*5)%7+7)%7<2?"W":"w"}export function ottoWaterRows(t){const e=[];for(let n=13;n<OTTO_GRID;n++){const s=[];for(let o=0;o<OTTO_GRID;o++)s.push(v(o,n,t));e.push(s)}return e}const C=[[0,1],[0,-1],[1,0],[-1,0]];function j(t,e,n){const s=OTTO_GRID;const o=OTTO_GRID;const i=t.map(l=>l.slice());for(let l=0;l<o;l++){for(let c=0;c<s;c++){const m=l>=13;if(m&&n.submerged){i[l][c]=n.water?v(c,l,e):".";continue}if(t[l][c]!==".")continue;const w=n.keyline&&C.some(([x,f])=>{const k=l+x;const h=c+f;return k>=0&&k<o&&h>=0&&h<s&&z.includes(t[k][h])});if(w)i[l][c]="k";else if(m&&n.water)i[l][c]=v(c,l,e)}}return i}export const OTTO_STATES={idle:t=>{const e=t%48;const n=e%8>=4?1:0;const s=e%16===13||e===47;const o=e>=20&&e<=26?-1:e>=32&&e<=38?1:0;return{...a,y0:4+n,eyes:s?"closed":"open",ex:o,legs:u(Math.floor(t/2))}},thinking:t=>{const e=t%10;const n=[];if(e>=1)n.push([13,5,"n"]);if(e>=2)n.push([14,3,"n"]);if(e>=3){r(11,0,14,0,"l",n);r(10,1,15,1,"l",n);r(11,2,14,2,"l",n)}for(let s=0;s<Math.min(3,Math.max(0,e-4));s++)n.push([11+s*2,1,"m"]);return{...a,ex:1,ey:-1,lamp:t%4<2?"a":"A",extras:n}},happy:t=>{const e=t%12;const n=[0,1,2,2,1,0,0,0,0,0,0,0][e];let s={...a,eyes:"happy",legs:u(t),y0:4-n};if(e===1)s={...s,x0:4,w:8,h:8,y0:2};if(e===5||e===6)s={...s,x0:2,w:12,h:6,y0:5};return s},error:t=>({...a,lamp:t%2?"r":"R",dx:[0,1,0,-1][t%4],eyes:"closed"}),sleep:t=>{const e=Math.floor(t/3)%4;const n=(s,o)=>[[s,o],[s+1,o],[s+2,o],[s+3,o],[s+2,o+1],[s+1,o+2],[s,o+3],[s+1,o+3],[s+2,o+3],[s+3,o+3]].map(([i,l])=>[i,l,"n"]);return{...a,y0:5+Math.floor(t/8)%2,eyes:"closed",lamp:"A",extras:n(12,6-e*2)}},peek:t=>({...a,submerged:true,y0:9+Math.floor(t/4)%2,ex:[-1,0,1,0][Math.floor(t/6)%4],legs:null}),typing:t=>{const e=[];O.forEach((s,o)=>{for(let i=0;i<s.length;i++)e.push([3+i,10+o,s[i]])});const n=t%2;e.push([2,10+n,"g"],[13,11-n,"g"]);return{...a,eyes:t%12===11?"closed":"open",legs:null,extras:e}},debugging:t=>{const e=Math.floor(t/4)%2?0:-1;const n=[];[[10,3],[11,3],[12,3],[9,4],[13,4],[9,5],[13,5],[9,6],[13,6],[10,7],[11,7],[12,7]].forEach(([s,o])=>n.push([s+e,o,"n"]));r(10+e,4,12+e,4,"l",n);r(10+e,5,12+e,6,"k",n);n.push([14+e,7,"m"],[15+e,8,"m"]);return{...a,extras:n}},building:t=>{const e=[];r(5,1,10,1,"a",e);r(4,2,11,2,"a",e);r(2,3,13,3,"A",e);r(13,11,15,12,"m",e);if(t%4<2)e.push([13,6,"g"],[14,5,"m"],[14,4,"m"],[13,2,"n"],[14,2,"n"],[15,2,"n"]);else e.push([13,8,"g"],[14,9,"m"],[15,8,"n"],[15,9,"n"],[15,10,"n"],[12,10,"a"]);return{...a,lamp:null,eyes:t%10===9?"closed":"open",extras:e}},carrying:t=>{const e=t%4<2?0:1;const n=[];r(5,e,10,e,"n",n);r(5,3+e,10,3+e,"n",n);r(5,1+e,5,2+e,"n",n);r(10,1+e,10,2+e,"n",n);r(6,1+e,9,2+e,"g",n);r(4,2+e,4,3+e,"g",n);r(11,2+e,11,3+e,"g",n);return{...a,y0:4+e,lamp:null,ey:-1,legs:u(t),extras:n}},pushing:t=>{const e=[];for(let n=5;n<=12;n++){for(let s=11;s<=15;s++){e.push([s,n,n===5||n===12||s===11||s===15?"n":s===13?"l":"m"])}}e.push([10,7,"g"],[10,8,"g"]);return{...a,x0:0,dx:t%4<2?0:1,ex:1,legs:u(t),extras:e}},sweeping:t=>{const e=t%4<2?0:1;const n=[];r(13,3,13,10,"m",n);r(12+e,11,15+e,12,"a",n);n.push([13,6,"g"]);if(e)n.push([15,10,"m"],[11,12,"m"]);return{...a,ex:1,eyes:t%12===11?"closed":"open",extras:n}},juggling:t=>{const e=[];[[2,"r"],[7,"a"],[12,"p"]].forEach(([n,s],o)=>{const i=[0,1,2,2,1,0][(t+o*2)%6];const l=2-i;r(n,l,n+1,l+1,s,e)});e.push([2,4+t%2,"g"],[13,5-t%2,"g"]);return{...a,lamp:null,ey:-1,ex:[-1,0,1,0][Math.floor(t/2)%4],extras:e}},wizard:t=>{const e=[];r(7,0,8,0,"p",e);r(6,1,9,1,"p",e);r(5,2,10,2,"p",e);r(3,3,12,3,"p",e);e.push([8,1,"a"]);e.push([13,5,"g"],[14,4,"m"],[15,3,"m"]);const n=t%4;if(n===1)e.push([15,1,"a"]);if(n===2)e.push([14,1,"a"],[15,0,"a"],[15,2,"a"]);if(n===3)e.push([13,0,"a"]);return{...a,lamp:null,eyes:t%12===11?"closed":"open",extras:e}},conducting:t=>{const e=t%2;const n=Math.floor(t/2)%4;const s=[[1,4+e*3,"g"],[2,4+e*3,"g"],[13,7-e*3,"g"],[14,7-e*3,"g"],[15,6-e*3,"m"],[2,3-n,"n"],[3,2-n,"n"]];return{...a,eyes:"happy",extras:s}},beacon:t=>{const e=t%6;const n=[[],[[5,3],[10,3],[5,2],[10,2]],[[3,3],[12,3],[3,2],[12,2],[4,1],[11,1],[5,0],[10,0]],[[1,2],[14,2],[1,1],[14,1],[2,0],[13,0]],[],[]];return{...a,lamp:e<4?"a":"A",ey:-1,extras:n[e].map(([s,o])=>[s,o,"a"])}},notification:t=>{const e=t%16;const n=[0,0,0,0,1,2,2,1,0,0,0,0,0,0,0,0][e];const s=e>=3&&e<=10;const o=s?[...r(14,0,15,2,"a",[]),[14,4,"a"],[15,4,"a"]]:[];return{...a,y0:4-n,lamp:s&&e%2?"A":"a",legs:n?[1,1,1]:[0,0,0],extras:o}},disconnected:t=>{const e=t%4<2;const n=[];for(let s=0;s<=4;s++){n.push([12,s,"n"],[14,s,"n"],[13,s,s===0||s===4?"n":e?"r":"1"])}return{...a,y0:5,lamp:"A",ex:1,ey:-1,extras:n}},dizzy:t=>{const e=[[1,2],[4,0],[11,0],[14,2]];const n=[e[t%4],e[(t+2)%4]].map(([s,o])=>[s,o,"a"]);return{...a,eyes:"x",lamp:"A",dx:[0,1,0,-1][t%4],extras:n}},overheated:t=>{const e=[0,0,0,1,2,3,3,3,3,2,1,0][t%12];const n=[{x0:3,y0:4,w:10,h:7,ey:0,legs:[0,0,0]},{x0:3,y0:6,w:10,h:5,ey:0,legs:[0,0,0]},{x0:2,y0:8,w:12,h:3,ey:-1,legs:null},{x0:1,y0:10,w:14,h:2,ey:-2,legs:null}];return{...a,...n[e],eyes:e>=2?"closed":"open",lamp:e>=2?"A":t%2?"a":"A",extras:e>=1?[[14,2+t%3,"l"]]:[]}},confused:t=>{const e=t%18;const n=e>=4?[[12,0,"n"],[13,0,"n"],[14,0,"n"],[14,1,"n"],[13,2,"n"],[14,2,"n"],[13,4,"n"]]:[];return{...a,ex:[1,1,0,-1,-1,0][Math.floor(e/3)%6],ey:-1,dx:e>=9?-1:0,extras:n}},stare:t=>({...a,eyes:t%20===19?"closed":"big",ex:[0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,0,0,0,0,0,0][t%20]}),walking:t=>{const e=t%16;const n=e<8?e-4:11-e;return{...a,dx:n,ex:e<8?1:-1,legs:u(t)}},goingaway:t=>({...a,dx:t%26-6,ex:1,legs:u(t)}),eureka:t=>{const e=t%24;const n=[];if(e>=3&&e<20){const s=e>=6;r(12,0,13,0,s?"a":"A",n);r(11,1,14,2,s?"a":"A",n);r(12,3,13,3,"m",n);r(12,4,13,4,"n",n);if(s)n.push([12,1,"l"]);if(s&&e<14&&e%2===0)n.push([10,0,"l"],[15,0,"l"],[10,4,"l"],[15,4,"l"]);n.push([13,6,"g"],[14,5,"g"])}return{...a,lamp:e>=6&&e<20?"a":"A",eyes:e>=8&&e<20?"happy":e===22?"closed":"open",ex:e>=3&&e<8?1:0,ey:e>=3&&e<8?-1:0,y0:e>=8&&e<20&&e%4<2?3:4,extras:n}},grooving:t=>{const e=t%4;const n=[0,1,0,-1][e];const s=[];r(4,1,11,1,"p",s);r(3,2,3,3,"p",s);r(12,2,12,3,"p",s);r(1,6,2,8,"p",s);r(13,6,14,8,"p",s);s.push([2,7,"1"],[13,7,"1"]);if(e===1)s.push([0,3,"a"],[1,2,"a"],[1,3,"a"]);if(e===3)s.push([15,3,"a"],[14,2,"a"],[14,3,"a"]);return{...a,lamp:null,dx:n,eyes:"happy",legs:e%2?[1,0,1]:[0,1,0],y0:e%2?4:5,extras:s}},hatmishap:t=>{const e=t%32;const n=[];const s=e>=10&&e<20?2:e>=20&&e<22?1:0;const o=e>=10&&e<20?1:0;const i=s;const l=(c,m,w)=>n.push([c+o,m+i,w]);l(7,0,"p");l(8,0,"p");for(let c=6;c<=9;c++)l(c,1,"p");for(let c=5;c<=10;c++)l(c,2,"p");for(let c=3;c<=12;c++)l(c,3,"p");l(8,1,"a");l(6,2,"a");l(10,3,"a");if(s===2)for(let c=4;c<=11;c++)l(c,4,"p");if(e>=14&&e<22){n.push([13,5,"g"],[14,4,"g"],[14,3,"g"]);if(e%2)n.push([15,1,"a"],[14,0,"l"])}return{...a,lamp:null,eyes:s===2?"closed":e>=22&&e<24?"happy":"open",ex:e<10?1:0,legs:e<8?u(t):[0,0,0],dx:e<8?e<4?e-2:5-e:0,extras:n}},lowbattery:t=>{const e=[];r(12,1,15,1,"r",e);r(12,6,15,6,"r",e);e.push([12,2,"r"],[12,3,"r"],[12,4,"r"],[12,5,"r"],[15,2,"r"],[15,3,"r"],[15,4,"r"],[15,5,"r"],[13,0,"r"],[14,0,"r"]);if(t%6<3)r(13,5,14,5,"r",e);const n=t%24>=18&&t%24<21;return{...a,y0:6,h:6,x0:2,w:12,lamp:"A",eyes:n?"open":"closed",ey:n?1:0,legs:null,extras:e}},wake:t=>{const e=t%30;if(e<8)return{...a,x0:2,w:12,y0:7,h:5,lamp:"A",eyes:e>=6?"big":"closed",ey:0,legs:null};if(e<10)return{...a,x0:4,w:8,y0:0,h:9,lamp:null,eyes:"big",ey:1,legs:[1,1,1]};if(e<12)return{...a,y0:2,eyes:"big",lamp:"a",legs:[1,1,1]};if(e<14)return{...a,x0:2,w:12,y0:5,h:6,eyes:"open",lamp:"a"};return{...a,eyes:e===20||e===21?"closed":"open",legs:[0,0,0]}},builder:t=>{const e=[0,1,0,-1][Math.floor(t/2)%4];const n=[];r(5,2,10,3,"n",n);n.push([5,3,"m"],[10,3,"m"]);r(4+e,0,9+e,1,"p",n);n.push([4+e,1,"1"]);if(Math.floor(t/2)%4===3&&t%2)n.push([1,5,"l"],[0,4,"l"]);const s=e?[[1,5,"g"],[14,7,"g"]]:[[1,6,"g"],[14,6,"g"]];return{...a,lamp:null,ex:e,ey:-1,legs:u(t),extras:[...n,...s]}},mini:t=>{const e=t%32;const n=e<8?0:e<16?-1:e<24?1:0;const s=e>=24&&e<28?-1:0;return{...a,x0:4,w:8,y0:6+Math.floor(t/4)%2,h:5,lamp:"a",eyes:"big",ex:n,ey:s,legs:[Math.floor(t/2)%2,0,(Math.floor(t/2)+1)%2],extras:[[2,8+t%2,"g"],[13,8+(t+1)%2,"g"]]}},minityping:t=>{const e=[[2,8+t%2,"g"],[13,8+(t+1)%2,"g"]];const n=t%6;e.push([7+t%3,5-n,"p"]);return{...a,x0:4,w:8,y0:7-t%2,h:5,lamp:null,legs:[0,0,0],extras:e}},happydance:t=>{const e=t%4;const n=[[1,5+[0,1,2,1][e],"g"],[14,5+[2,1,0,1][e],"g"]];return{...a,eyes:e%2?"happy":"open",legs:e%2?[1,0,1]:[0,1,0],extras:n}},jumping:t=>{const e=t%8;const n=[0,1,-1,-3,-4,-2,0,0][e];const s=[6,7,6,4,3,4,6,6][e];return{...a,y0:4+n,eyes:e===1?"closed":"open",legs:e>=2&&e<=5?[1,1,1]:[0,0,0],extras:[[1,s+n,"g"],[14,s+n,"g"]]}},loading:t=>{const e=[];const n=b.length;const s=t%n;e.push(d(b[s],"l"),d(b[(s+n-1)%n],"n"),d(b[(s+n-2)%n],"m"));return{...a,ex:1,ey:-1,extras:e}},progress:t=>{const e=t%32;const n=Math.min(12,Math.floor(e/2));const s=e>=24;const o=[];r(2,0,13,1,"A",o);if(n>0)r(2,0,1+n,1,"a",o);const i=s&&(e===25||e===26)?1:0;return{...a,y0:4-i,eyes:s?"happy":"open",ex:s?0:n<4?-1:n<9?0:1,ey:s?0:-1,lamp:s&&e%2?"A":"a",legs:i?[1,1,1]:[0,0,0],extras:o}},hourglass:t=>{const e=t%20;const n=e>=16?-1:0;const s=[];const o=3+n;r(13,o,15,o,"n",s);r(13,o+4,15,o+4,"n",s);s.push([13,o+1,"n"],[15,o+1,"n"],[14,o+2,"n"],[13,o+3,"n"],[15,o+3,"n"]);const i=e<8||e>=16;s.push([14,o+1,i?"a":"1"],[14,o+3,i?"1":"a"]);if(e>=4&&e<12&&e%2)s.push([14,o+2,"a"]);s.push([13,8+n,"g"]);return{...a,ex:1,eyes:e===17?"closed":"open",extras:s}},waiting:t=>{const e=t%16;const n=[];n.push([1,0,"n"],[2,0,"n"],[0,1,"n"],[3,1,"n"],[0,2,"n"],[3,2,"n"],[1,3,"n"],[2,3,"n"]);r(1,1,2,2,"l",n);n.push(d([[2,1],[2,2],[1,2],[1,1]][Math.floor(e/2)%4],"k"));const s=Math.min(3,Math.floor(e/4));for(let i=0;i<s;i++)n.push([13+i,1,"n"]);const o=e>=6&&e<11;return{...a,ex:o?-1:0,ey:o?-1:0,legs:[0,0,e%2],extras:n}},syncing:t=>{const e=[];const n=b.length;const s=t%n;for(const o of[0,1,2]){e.push(d(b[(s+o)%n],o===2?"l":"n"));e.push(d(b[(s+o+5)%n],o===2?"l":"n"))}return{...a,ex:1,ey:-1,lamp:t%4<2?"a":"A",extras:e}},downloading:t=>{const e=t%12;const n=[[13,5,"n"],[15,5,"n"],[13,6,"n"],[14,6,"n"],[15,6,"n"]];if(e<6){const s=Math.floor(e/2);S(14,s,"l",n)}else if(e===6){r(13,6,15,6,"l",n)}else if(e<10){n.push([14,5,"a"])}return{...a,ex:1,ey:e<2?-1:e<6?0:1,extras:n}},uploading:t=>{const e=t%12;const n=[[13,5,"n"],[15,5,"n"],[13,6,"n"],[14,6,"n"],[15,6,"n"]];if(e<2)n.push([14,5,"a"]);else if(e<10)B(14,2-Math.floor((e-2)/2),"l",n);return{...a,ex:1,ey:e<4?1:e<8?0:-1,extras:n}},connecting:t=>{const e=t%14;const n=e<8?Math.floor(e/2):e%2?4:0;const s=[];for(let o=0;o<4;o++){const i=12+o;const l=o<n;for(let c=4-o;c<=4;c++)s.push([i,c,l?"g":"1"])}return{...a,ex:1,ey:-1,eyes:e>=8?"happy":"open",extras:s}},scanning:t=>{const e=t%14;const n=[];if(e<9){const s=4+e;if(e>0)r(1,s-1,14,s-1,"n",n);r(1,s,14,s,"l",n)}return{...a,eyes:"big",legs:[0,0,0],extras:n}},searching:t=>{const e=[];for(const o of[4,9]){r(o,5,o+2,5,"n",e);r(o,7,o+2,7,"n",e);e.push([o,6,"n"],[o+2,6,"n"],[o+1,6,"k"])}e.push([7,6,"n"],[8,6,"n"]);const n=Math.floor(t/3)%4;const s=[-1,0,1,0][n];return{...a,dx:s,legs:n%2?u(t):[0,0,0],extras:e}},empty:t=>{const e=t%16;const n=[];r(13,7,13,10,"n",n);r(15,7,15,10,"n",n);r(14,10,14,10,"n",n);r(14,8,14,9,"1",n);const s=e>=9?Math.min(3,e-8):0;for(let i=0;i<s;i++)n.push([12+i,1,"n"]);const o=e<8;return{...a,ex:o?1:0,ey:o?1:0,eyes:e===8?"closed":"open",extras:n}},shrug:t=>{const e=t%16;const n=e>=4&&e<12;const s=n?[[2,5,"g"],[1,4,"g"],[13,5,"g"],[14,4,"g"]]:[];return{...a,ex:e<4?0:e<8?-1:e<12?1:0,ey:n?-1:0,extras:s}},fishing:t=>{const e=t%32;const n=[[13,6,"g"],[14,6,"g"],[14,5,"m"],[15,4,"m"]];const s=e>=20&&e<24;const o=e>=24&&e<27;const i=s?14:o?11:12+Math.floor(e/4)%2;r(15,5,15,i-1,"n",n);n.push([15,i,"r"],[15,i+1,"l"]);if(o)n.push([14,12,"l"],[13,13,"l"]);return{...a,ex:1,eyes:s?"big":e===15?"closed":"open",extras:n}},listening:t=>{const e=Math.floor(t/2)%4;const n=[[13,5,"g"],[14,5,"g"],[14,6,"g"]];const s=[[15,4,"n"],[16,5,"n"],[16,6,"n"],[15,7,"n"]];const o=[[16,3,"l"],[17,4,"l"],[17,5,"l"],[17,6,"l"],[17,7,"l"],[16,8,"l"]];if(e===0||e===1)n.push(...s);if(e===1||e===2)n.push(...o);return{...a,dx:-2,eyes:"closed",extras:n}},tumbleweed:t=>{const e=t%28;const n=[];const s=15-e;if(e<20){if(e%2)n.push([s,11,"A"],[s+2,11,"A"],[s+1,12,"A"],[s,13,"A"],[s+2,13,"A"]);else n.push([s+1,11,"A"],[s,12,"A"],[s+2,12,"A"],[s+1,13,"A"])}const o=e>=20?0:s>8?1:s>3?0:-1;return{...a,ex:o,ey:e<20?1:0,extras:n}},warning:t=>{const e=[];e.push([15,0,"a"]);r(14,1,16,2,"a",e);r(13,3,17,4,"a",e);e.push([15,1,"k"],[15,2,"k"],[15,4,"k"]);e.push([13,5,"g"],[14,5,"g"]);return{...a,dx:-2,eyes:"big",ex:1,ey:-1,lamp:t%4<2?"a":"A",extras:e}},crash:t=>{const e=t%20;const n=[];if(e<3){const s=e%2?[[1,2],[14,2],[0,7],[15,7],[4,0],[11,0],[1,11],[14,11]]:[[2,1],[13,1],[0,5],[15,5],[6,0],[9,0],[0,9],[15,9]];s.forEach(o=>n.push(d(o,e===0?"l":"a")))}else if(e<10){const s=2-Math.floor((e-3)/2);if(s>=0)n.push([2,s,"n"],[13,s,"n"],[1,s+1,"n"],[14,s+1,"n"])}return{...a,eyes:"x",lamp:e<3?"r":"R",dx:e<3?[0,1,-1][e]:e>=10?[0,1,0,-1][e%4]:0,legs:e<10?[1,1,1]:[0,0,0],extras:n}},panic:t=>{const e=t%2;const n=e?[[2,5,"g"],[1,4,"g"],[13,5,"g"],[14,4,"g"],[14,2,"l"]]:[[2,7,"g"],[1,8,"g"],[13,7,"g"],[14,8,"g"],[1,3,"l"]];return{...a,eyes:"big",lamp:e?"r":"a",dx:[0,1,0,-1][t%4],legs:u(t),extras:n}},sos:t=>{const e=t%T.length;const n=T[e]===1;const s=Math.floor(t/2)%2;const o=[[1,4+s*2,"g"],[2,5+s*2,"g"],[13,5+s*2,"g"],[14,4+s*2,"g"]];return{...a,eyes:"big",lamp:n?"r":"R",extras:o}},offline:t=>{const e=t%16;const n=[];r(11,0,14,0,"n",n);r(10,1,15,1,"n",n);r(11,2,14,2,"n",n);if(e%4<2)n.push([10,3,"r"],[11,2,"r"],[12,1,"r"],[13,0,"r"]);const s=e>=10&&e<14;return{...a,y0:5,lamp:"A",eyes:s?"open":"closed",ex:1,ey:s?-1:0,extras:n}},timeout:t=>{const e=t%16;const n=e>=12;const s=[];const o=n?"r":"n";s.push([13,1,o],[14,1,o],[12,2,o],[15,2,o],[12,3,o],[15,3,o],[13,4,o],[14,4,o]);r(13,2,14,3,"l",s);s.push(d([[14,2],[14,3],[13,3],[13,2]][n?0:Math.floor(e/3)%4],"k"));return{...a,ex:1,ey:-1,eyes:n?"closed":"open",lamp:n&&e%2?"r":"a",dx:n?[0,1,0,-1][e%4]:0,extras:s}},locked:t=>{const e=t%20;const n=[];E(false,n);const s=e>=6&&e<12;const o=e>=12;if(s)n.push([13,7,"g"],[14,7,"g"]);if(o)n.push([2,5,"g"],[1,4,"g"]);return{...a,ex:o?0:1,ey:o?0:-1,eyes:s?"closed":"open",dx:s&&e%2?-1:0,extras:n}},unlocked:t=>{const e=t%20;const n=e>=4;const s=[];E(n,s);if(e>=4&&e<10){const i=e%2?[[11,0],[15,5],[12,6]]:[[12,0],[11,4],[15,6]];i.forEach(l=>s.push(d(l,"l")))}const o=e===5||e===6?1:0;return{...a,y0:4-o,ex:n?0:1,ey:n?0:-1,eyes:n?"happy":"open",lamp:n&&e%2?"A":"a",legs:o?[1,1,1]:[0,0,0],extras:s}},denied:t=>{const e=[];r(13,0,15,0,"r",e);r(13,4,15,4,"r",e);for(let n=1;n<=3;n++)e.push([12,n,"r"],[16,n,"r"]);e.push([13,3,"r"],[14,2,"r"],[15,1,"r"]);return{...a,dx:-1,ex:[-1,0,1,0][Math.floor(t/2)%4],ey:-1,extras:e}},broken:t=>{const e=t%24;const n=[[8,4,"k"],[7,5,"k"],[8,6,"k"],[7,7,"k"],[8,8,"k"],[7,9,"k"],[8,10,"k"]];if(e>=8){r(6,8,9,9,"n",n);r(7,8,8,9,"l",n)}return{...a,eyes:e<8?"closed":e===20?"closed":"open",lamp:e<8&&e%2?"A":"a",dx:e<4?[0,1,0,-1][e]:0,extras:n}},sad:t=>{const e=t%16;const n=e>=2&&e<10?8+Math.floor((e-2)/2):e>=10&&e<12?12:-1;const s=n>=0?[[5,n,"l"]]:[];return{...a,y0:5,lamp:"A",eyes:"closed",extras:s}},rain:t=>{const e=t%12;const n=[];r(5,0,10,0,"n",n);r(4,1,11,1,"m",n);[1,4,8,11,14].forEach((s,o)=>{const i=2+(e+o*3)%11;n.push([s,i,"l"])});return{...a,y0:5,lamp:"A",eyes:"closed",extras:n}},sick:t=>{const e=t%12;const n=[];r(14,2,14,7,"l",n);n.push([14,8,"r"],[15,3,"n"],[15,5,"n"]);const s=Math.min(4,Math.floor(e/2));if(s>0)r(14,8-s,14,7,"r",n);n.push(e%2?[2,4,"l"]:[1,5,"l"]);return{...a,eyes:"closed",lamp:"A",dx:[0,1,0,-1][Math.floor(e/3)%4],extras:n}},flood:t=>{const e=t%8;const n=[[1,7+e%2,"g"],[2,8+e%2,"g"],[13,8-e%2,"g"],[14,7-e%2,"g"],[0,11-e%4,"l"],[15,12-(e+2)%4,"l"]];return{...a,submerged:true,y0:9,eyes:"big",lamp:e%2?"a":"A",legs:null,extras:n}},bug:t=>{const e=t%24;const n=[];let s=0;let o=1;if(e<20){const i=3+Math.floor(e/2);r(i,8,i+1,9,"1",n);n.push([i-1,9-e%2,"k"],[i+2,8+e%2,"k"]);s=i<6?-1:i>9?1:0}else{const i=e-20;n.push([12+i,7-i,"1"],[13+i,7-i,"1"],[12+i,6-i,"n"],[14+i,6-i,"n"]);s=1;o=-1}return{...a,ex:s,ey:o,eyes:e>=18?"big":"open",extras:n}},alarm:t=>{const e=t%2;const n=e?[[4,2,"l"],[11,2,"l"],[6,0,"l"],[9,0,"l"]]:[[3,1,"l"],[12,1,"l"],[7,0,"l"],[8,0,"l"]];return{...a,eyes:"big",lamp:e?"r":"R",extras:n}},frozen:t=>{const e=t%12;const n=[[4,11,"l"],[4,12,"l"],[7,11,"l"],[10,11,"l"],[10,12,"l"],[3,3,"l"],[12,3,"l"]];[1,14,5,10].forEach((s,o)=>n.push([s,(e*2+o*3)%12,"l"]));return{...a,lamp:"A",legs:null,dx:t%2,extras:n}},snail:t=>{const e=t%36;const n=[];const s=Math.floor(e/6)-3;r(s,9,s+2,11,"A",n);n.push([s+1,10,"a"],[s+3,11,"n"],[s+4,11,"n"],[s+4,10,"n"],[s+4,9,"k"]);return{...a,ex:-1,ey:1,eyes:e%12===11?"closed":"open",extras:n}},angry:t=>{const e=[[4,5,"k"],[5,5,"k"],[6,6,"k"],[9,6,"k"],[10,5,"k"],[11,5,"k"]];if(t%2)e.push([4,1,"n"],[11,1,"n"]);else e.push([3,0,"n"],[12,0,"n"]);return{...a,ey:1,lamp:t%4<2?"r":"R",legs:u(t),extras:e}},ghost:t=>{const e=t%8;const n=[];const s=4-(e<4?0:1);r(4,s,11,s+6,"m",n);r(3,s+1,3,s+5,"m",n);r(12,s+1,12,s+5,"m",n);[4,7,10].forEach(o=>n.push([o,s+7,"m"]));r(5,s+2,6,s+3,"l",n);r(9,s+2,10,s+3,"l",n);return{...a,y0:s,lamp:"A",legs:null,extras:n}},nervous:t=>{const e=[t%2?[13,3,"l"]:[2,3,"l"]];return{...a,ex:t%2?1:-1,lamp:t%3?"a":"A",legs:t%2?[1,0,0]:[0,0,1],extras:e}},puzzled:t=>{const e=t%16;const n=e>=4&&e<12;const s=n?[[13,6,"g"],[14,5,"g"],[14,4,"g"],[13,3-e%2,"g"]]:[];return{...a,ex:e<4?0:e<8?-1:e<12?1:0,ey:n?-1:0,eyes:e===14?"closed":"open",extras:s}},detective:t=>{const e=t%16;const n=[];r(3,3,12,3,"A",n);r(5,1,10,2,"A",n);r(5,2,10,2,"a",n);const s=Math.floor(e/4)%2?4:5;n.push([0,s,"n"],[1,s,"n"],[2,s,"n"],[0,s+1,"n"],[2,s+1,"n"],[0,s+2,"n"],[1,s+2,"n"],[2,s+2,"n"]);n.push([1,s+1,"l"],[2,s+3,"g"],[1,s+3,"g"]);return{...a,lamp:null,ex:-1,ey:s===4?-1:0,eyes:e===15?"closed":"open",extras:n}},reading:t=>{const e=t%24;const n=[];r(3,8,12,11,"l",n);r(7,8,8,11,"n",n);const s=e>=20&&e<22;if(s)r(9,8,12,11,"n",n);for(const o of[9,10]){r(4,o,6,o,"k",n);if(!s)r(9,o,11,o,"k",n)}n.push([2,9,"g"],[13,9,"g"]);return{...a,ey:1,ex:e<20?[-1,0,1][Math.floor(e/2)%3]:0,eyes:e===22?"closed":"open",legs:null,extras:n}},success:t=>{const e=t%16;const n=[];if(e>=2)n.push([11,2,"g"],[12,3,"g"],[13,2,"g"],[14,1,"g"],[15,0,"g"]);if(e>=3&&e<7){const o=e%2?[[10,0],[15,3],[13,5]]:[[11,0],[14,4],[9,1]];o.forEach(i=>n.push(d(i,"l")))}const s=e===3||e===4?1:0;return{...a,y0:4-s,eyes:e>=2?"happy":"open",ex:e>=2?0:1,ey:e>=2?0:-1,lamp:e>=2&&e<8&&e%2?"A":"a",legs:s?[1,1,1]:[0,0,0],extras:n}},celebrate:t=>{const e=t%12;const n=[];const s=[0,15,2,13,5,10,1,14];const o=["p","l","a","p","l","p","a","l"];s.forEach((l,c)=>n.push([l,(e*2+c*5)%13,o[c]]));const i=e%4<2;n.push([2,5,"g"],[1,4,"g"],[13,5,"g"],[14,4,"g"]);return{...a,y0:i?3:4,eyes:"happy",legs:i?[1,1,1]:[0,0,0],extras:n}},thumbsup:t=>{const e=t%12;const n=e<4?2:0;const s=[];r(13,6+n,14,7+n,"g",s);s.push([14,4+n,"g"],[14,5+n,"g"]);const o=e>=6&&e<10;if(o)s.push([5,6,"g"],[6,6,"g"]);return{...a,eyes:e>=4&&!o?"happy":"open",extras:s}},party:t=>{const e=t%16;const n=[];n.push([7,0,"a"],[8,0,"a"]);r(6,1,9,1,"p",n);r(5,2,10,2,"a",n);r(4,3,11,3,"p",n);[0,15,2,13].forEach((o,i)=>n.push([o,(e*2+i*4)%12,i%2?"l":"p"]));const s=Math.floor(e/2)%2;n.push([1,5+s,"g"],[2,6-s,"g"],[13,6-s,"g"],[14,5+s,"g"]);return{...a,lamp:null,eyes:"happy",dx:[0,1,0,-1][Math.floor(e/2)%4],legs:u(Math.floor(e/2)),extras:n}},trophy:t=>{const e=t%16;const n=[];r(5,0,10,0,"a",n);r(6,1,9,1,"a",n);r(7,2,8,2,"A",n);r(6,3,9,3,"A",n);n.push([2,5,"g"],[1,4,"g"],[13,5,"g"],[14,4,"g"]);if(e%2)n.push([3,0,"l"],[12,1,"l"]);else n.push([4,1,"l"],[11,0,"l"]);const s=e===8||e===9?1:0;return{...a,y0:4-s,lamp:null,eyes:"happy",legs:s?[1,1,1]:[0,0,0],extras:n}},starred:t=>{const e=t%12;const n=[];if(e>=1){n.push([13,0,"a"]);r(11,1,15,1,"a",n);r(12,2,14,2,"a",n);n.push([12,3,"a"],[14,3,"a"],[11,4,"a"],[15,4,"a"]);if(e%3===0)n.push([13,2,"l"])}return{...a,ex:1,ey:-1,eyes:e>=4?"happy":"open",extras:n}},love:t=>{const e=t%16;const n=[];const s=(o,i)=>{if(i<-2)return;n.push([o,i,"r"],[o+2,i,"r"],[o,i+1,"r"],[o+1,i+1,"r"],[o+2,i+1,"r"],[o+1,i+2,"r"])};s(0,8-Math.floor(e/2)*2);s(13,8-Math.floor((e+8)%16/2)*2);return{...a,y0:4+Math.floor(e/4)%2,eyes:"happy",extras:n}},wave:t=>{const e=t%12;const n=[[13,5,"g"],[14,4,"g"],[e%2?15:14,3,"g"]];return{...a,eyes:e>=8?"happy":"open",extras:n}},bow:t=>{const e=t%16;const n=e>=4&&e<12;return n?{...a,y0:6,h:5,eyes:"closed"}:{...a}},cool:t=>{const e=t%16;const n=Math.min(6,3+e);const s=[];r(4,n,6,n+1,"k",s);r(9,n,11,n+1,"k",s);s.push([7,n,"k"],[8,n,"k"]);const o=n===6;return{...a,dx:o?[0,0,1,0,0,-1][Math.floor(e/2)%6]:0,extras:s}},flexing:t=>{const e=t%8;const n=[[2,6,"g"],[1,6,"g"],[1,5,"g"],[1,4,"g"],[13,6,"g"],[14,6,"g"],[14,5,"g"],[14,4,"g"]];if(e<4)n.push([0,5,"g"],[15,5,"g"]);return{...a,eyes:e<4?"open":"happy",extras:n}},zen:t=>{const e=t%16;const n=e<8?[[1,5,"l"],[14,9,"l"]]:[[2,10,"l"],[13,4,"l"]];return{...a,y0:3+Math.floor(e/8)%2,lamp:"a",eyes:"closed",legs:null,extras:n}},recording:t=>{const e=t%16;const n=e%4<2?[...r(13,0,14,1,"r",[])]:[];return{...a,ex:[-1,-1,0,0,1,1,0,0][Math.floor(e/2)],extras:n}},paused:t=>{const e=t%16;const n=[];r(13,0,13,3,"n",n);r(15,0,15,3,"n",n);const s=e>=8&&e<10;return{...a,y0:5,lamp:"A",eyes:s?"open":"closed",ex:1,ey:s?-1:0,extras:n}},filtering:t=>{const e=t%12;const n=[];r(12,0,15,0,"n",n);n.push([12,1,"n"],[15,1,"n"],[13,2,"n"],[14,2,"n"],[14,3,"n"],[14,4,"n"]);const s=["p","l","a","l","p","a"];n.push([13,1,s[e%6]],[14,1,s[(e+3)%6]]);n.push([14,5+e%4,"a"]);return{...a,ex:1,ey:e%8<4?-1:1,extras:n}},pinned:t=>{const e=t%12;const n=e<3?e-3:0;const s=[];r(13,1+n,14,2+n,"r",s);s.push([13,3+n,"n"],[14,3+n,"n"],[13,4+n,"n"],[13,5+n,"n"]);if(e===4||e===5)s.push([15,0,"l"],[12,6,"l"]);return{...a,ex:1,ey:-1,eyes:e===3?"closed":"open",extras:s}},rewind:t=>{const e=t%16;const n=[];n.push([1,0,"n"],[2,0,"n"],[0,1,"n"],[3,1,"n"],[0,2,"n"],[3,2,"n"],[1,3,"n"],[2,3,"n"]);r(1,1,2,2,"l",n);n.push(d([[1,1],[1,2],[2,2],[2,1]][e%4],"k"));return{...a,dx:3-Math.floor(e/2),ex:1,legs:u(t),extras:n}},storing:t=>{const e=t%24;const n=[];const s=Math.floor(e/6);for(let o=0;o<Math.min(3,s);o++){const i=11-o*2;r(13,i,14,i+1,"A",n);n.push([13,i,"a"])}if(s<3){const o=4+(e%6<3?0:1);r(13,o,14,o+1,"A",n);n.push([13,o,"a"],[13,o+2,"g"],[14,o+2,"g"])}return{...a,ex:1,ey:s<3?0:1,eyes:s===3&&e%6===5?"happy":"open",extras:n}},printing:t=>{const e=t%16;const n=[];r(13,3,15,5,"n",n);n.push([14,4,"1"]);const s=Math.min(6,e);if(s>0){r(13,6,15,5+s,"l",n);for(let o=6;o<=5+s;o+=2)n.push([14,o,"k"])}return{...a,ex:1,ey:1,extras:n}},stopwatch:t=>{const e=[];e.push([13,0,"n"],[13,1,"n"],[14,1,"n"],[12,2,"n"],[15,2,"n"],[12,3,"n"],[15,3,"n"],[13,4,"n"],[14,4,"n"]);r(13,2,14,3,"l",e);e.push(d([[14,2],[14,3],[13,3],[13,2]][t%4],"k"));if(t%2)e.push([0,6,"n"],[1,6,"n"],[0,9,"n"]);else e.push([0,7,"n"],[1,8,"n"],[0,8,"n"]);return{...a,eyes:"big",ex:1,ey:-1,extras:e}},spotlight:t=>{const e=t%12;const n=[];if(e<4){r(4,1,7,1,"a",n);r(2,0,6,0,"a",n)}else if(e<8){r(6,1,9,1,"a",n);r(5,0,10,0,"a",n)}else{r(8,1,11,1,"a",n);r(9,0,13,0,"a",n)}return{...a,ex:e<4?-1:e<8?0:1,ey:-1,extras:n}},keys:t=>{const e=t%8;const n=[[13,5,"g"],[14,5,"g"]];n.push([13,6,"n"],[14,6,"n"],[15,6,"n"],[13,7,"n"],[15,7,"n"],[13,8,"n"],[14,8,"n"],[15,8,"n"]);const s=e<4?15:14;n.push([13,9,"a"],[13,10,"a"],[s,9,"a"],[s,10,"a"]);return{...a,ex:1,ey:1,eyes:e===7?"closed":"open",extras:n}},map:t=>{const e=t%16;const n=[];r(3,8,12,11,"l",n);n.push([4,10,"m"],[5,9,"m"],[6,9,"m"],[7,10,"m"],[8,10,"m"],[9,9,"m"],[10,9,"m"]);n.push([11,8,"r"],[11,9,"r"]);n.push([2,9,"g"],[13,9,"g"]);const s=e>=8;return{...a,ex:s?e<12?-1:1:0,ey:s?-1:1,legs:null,extras:n}},photo:t=>{const e=t%16;const n=[];r(5,8,10,10,"n",n);r(7,9,8,9,"k",n);n.push([7,9,"l"],[10,8,"1"]);n.push([2,9,"g"],[13,9,"g"]);if(e===6){r(0,0,15,1,"l",n);n.push([3,2,"l"],[12,2,"l"])}if(e>=8){r(13,6,15,8,"n",n);n.push([14,7,"g"])}return{...a,lamp:e===6?"a":"A",eyes:e===6?"closed":"open",legs:null,extras:n}},painting:t=>{const e=t%16;const n=[];r(13,2,15,7,"l",n);if(e>=2)n.push([13,3,"p"],[14,3,"p"]);if(e>=6)n.push([14,5,"a"],[15,5,"a"]);if(e>=10)n.push([13,6,"r"]);n.push([13,8,"g"],[14,8,"g"],[15,8-e%2,"m"]);return{...a,ex:1,ey:e%8<4?-1:0,extras:n}},disguise:t=>{const e=[];for(const n of[4,8]){r(n,5,n+3,5,"n",e);r(n,8,n+3,8,"n",e);e.push([n,6,"n"],[n,7,"n"],[n+3,6,"n"],[n+3,7,"n"])}e.push([7,8,"a"],[8,8,"a"]);r(5,9,10,9,"k",e);e.push([5,10,"k"],[10,10,"k"]);return{...a,ex:[-1,-1,-1,0,1,1,1,0][Math.floor(t/3)%8],extras:e}},pro:t=>{const e=t%12;const n=[];r(5,2,10,3,"a",n);n.push([5,1,"a"],[7,1,"a"],[8,1,"a"],[10,1,"a"],[6,2,"p"],[9,2,"p"]);n.push(e%2?[3,1,"l"]:[12,0,"l"]);return{...a,lamp:null,eyes:e>=6?"happy":"open",extras:n}},talking:t=>{const e=t%12;const n=[];r(9,0,15,2,"l",n);n.push([10,3,"l"]);[10,12,14].forEach((s,o)=>n.push([s,1,(e+o)%3===0?"k":"m"]));return{...a,ex:1,ey:-1,lamp:e%4<2?"a":"A",extras:n}},handshake:t=>{const e=t%16;const n=16-Math.min(2,e);const s=e>=4&&e<12?Math.floor(e/2)%2:0;const o=[];r(n,6+s,n+1,7+s,"n",o);if(e>=2)o.push([13,7+s,"g"]);return{...a,ex:1,eyes:e>=4?"happy":"open",extras:o}},robot:t=>{const e=t%16;const n=[];n.push([14,3,e%4<2?"r":"n"],[14,4,"n"]);r(13,5,15,7,"n",n);const s=e%8<2?"r":"k";n.push([13,6,s],[15,6,s]);r(13,8,15,10,"m",n);n.push([14,9,"l"],[13,11,"n"],[15,11,"n"]);return{...a,ex:1,ey:1,eyes:e>=8&&e<12?"happy":"open",extras:n}},plug:t=>{const e=t%16;const n=16-Math.min(3,e);const s=[];r(n,6,n+1,7,"n",s);s.push([n-1,6,"l"],[n-1,7,"l"],[n+2,7,"n"],[n+3,7,"n"]);if(e>=4&&e<7)s.push(e%2?[11,2,"l"]:[15,4,"l"]);return{...a,lamp:e>=3?"a":"A",ex:1,eyes:e>=5?"happy":"open",extras:s}},gift:t=>{const e=t%16;const n=e>=12;const s=!n&&e%4===2?-1:0;const o=[];r(13,7+s,15,10+s,"p",o);r(14,7+s,14,10+s,"a",o);const i=n?4:6+s;r(13,i,15,i,"a",o);if(n)o.push([14,3,"l"],[12,5,"l"]);return{...a,ex:1,ey:1,eyes:n?"happy":"big",extras:o}},action:t=>{const e=t%16;const n=e===4||e===5;const s=[];r(13,4,15,7,"n",s);s.push([14,5,"k"],[14,6,"k"]);const o=n?3:2;s.push([13,o,"l"],[14,o,"k"],[15,o,"l"]);if(e===4)s.push([12,2,"l"]);return{...a,ex:1,ey:-1,eyes:e===4?"closed":"open",extras:s}},guard:t=>{const e=t%16;const n=[];r(13,5,15,7,"n",n);n.push([14,8,"n"],[14,6,"g"]);if(e%6===0)n.push([13,5,"l"]);if(e>=2&&e<6)n.push([15,e-2,"r"]);if(e===6)n.push([15,4,"l"],[14,4,"l"]);if(e>=7&&e<10)n.push([15,9-e,"R"]);return{...a,ex:1,ey:-1,eyes:e===5||e===6?"big":"open",extras:n}},coffee:t=>{const e=t%16;const n=e>=8&&e<12;const s=n?-2:0;const o=[];r(13,6+s,14,8+s,"l",o);o.push([15,7+s,"n"],[13,6+s,"A"],[14,6+s,"A"],[13,9+s,"g"],[14,9+s,"g"]);if(!n)o.push(...e%2?[[13,4,"n"],[14,3,"n"]]:[[14,4,"n"],[13,3,"n"]]);return{...a,ex:n?0:1,ey:n?0:1,eyes:n?"closed":e>=12&&e<14?"happy":"open",extras:o}},swimming:t=>{const e=t%8;const n=e<4;const s=n?[[1,8,"g"],[2,9,"g"],[0,12,"l"],[13,11,"g"],[14,12,"g"]]:[[14,8,"g"],[13,9,"g"],[15,12,"l"],[2,11,"g"],[1,12,"g"]];return{...a,submerged:true,y0:8,ex:n?-1:1,legs:null,extras:s}},diving:t=>{const e=t%24;const n=[];let s=4;if(e>=4&&e<10)s=4+(e-3)*2;else if(e>=10&&e<16)s=16;else if(e>=16&&e<20)s=14-(e-15)*2;if(e>=8&&e<16)n.push([7,12-e*2%6,"l"],[9,12-(e*2+3)%6,"l"]);if(e===20||e===21)n.push([3,3,"l"],[12,3,"l"]);return{...a,submerged:s>4,y0:s,ey:e<4?1:0,eyes:e>=20&&e<23?"happy":"open",legs:s>4?null:[0,0,0],extras:n}},balloon:t=>{const e=t%24;const n=e<8?4:e<20?4-Math.min(3,Math.floor((e-8)/2)):4;const s=[];r(13,0,15,2,"r",s);s.push([14,3,"R"]);r(14,4,14,n+2,"n",s);s.push([13,n+2,"g"]);if(e===20)s.push([2,12,"l"],[12,12,"l"]);const o=n<4;return{...a,y0:n,ex:o?0:1,ey:o?0:-1,eyes:o?"happy":"open",legs:o?e%2?[1,0,1]:[0,1,0]:[0,0,0],extras:s}},landing:t=>{const e=t%16;if(e<4)return{...a,y0:-8+e*3,eyes:"big",legs:[1,1,1]};if(e===4)return{...a,x0:2,w:12,y0:6,h:5,eyes:"closed",extras:[[1,12,"l"],[14,12,"l"],[0,11,"l"],[15,11,"l"]]};if(e===5)return{...a,eyes:"closed"};return{...a,eyes:e>=8&&e<12?"happy":"open"}},spinning:t=>{const e=t%16;const n=Math.floor(e/2);const[s,o]=[[10,0],[8,1],[6,0],[4,0],[6,0],[8,-1],[10,0],[10,0]][n];const i=3+(10-s)/2;const l=[];if(s<=6){const c=i+s-1;l.push([i+1,11,"s"],[i+1,12,"s"],[c-1,11,"s"],[c-1,12,"s"])}if(s===4)r(i,6,i+3,7,"g",l);return{...a,x0:i,w:s,ex:o,legs:s<=6?null:[0,0,0],extras:l}},bubbles:t=>{const e=t%12;const n=e<4;const s=[[13,6,"g"],[14,6,"g"],[15,6,"m"],[15,5,"m"],[15,4,"n"]];for(let o=0;o<3;o++){const i=3-(e+o*4)%12;if(i>=0)s.push([13+o%2,i,"l"])}return{...a,ex:n?1:1,ey:n?0:-1,eyes:n?"closed":"open",extras:s}},trash:t=>{const e=t%16;const n=[];r(13,7,15,11,"n",n);r(14,8,14,10,"1",n);const s=e>=2&&e<10;r(13,s?5:6,15,s?5:6,"n",n);if(e>=3&&e<9)n.push([7+(e-3),5-e%2,e%2?"p":"a"]);if(e===9||e===10)n.push([14,4,"l"],[13,3,"l"],[15,3,"l"]);return{...a,ex:1,ey:-1,eyes:e>=11&&e<14?"happy":"open",extras:n}},saved:t=>{const e=t%12;const n=e===1?-1:0;const s=[];if(e>=1){r(13,2+n,15,5+n,"1",s);s.push([13,2+n,"n"],[14,2+n,"n"]);r(13,4+n,15,5+n,"l",s)}if(e===3||e===4)s.push([12,0,"l"],[15,7,"l"]);const o=e===2?1:0;return{...a,y0:4-o,ex:1,ey:-1,eyes:e>=3?"happy":"open",legs:o?[1,1,1]:[0,0,0],extras:s}},copied:t=>{const e=t%12;const n=e<2?0:1;const s=[];r(12,1,14,3,"n",s);s.push([13,2,"1"]);r(12+n,2+n,14+n,4+n,"l",s);s.push([13+n,3+n,"m"]);if(e===4||e===5)s.push([15,0,"l"],[11,6,"l"]);return{...a,ex:1,ey:-1,eyes:e>=4?"happy":"open",extras:s}},charting:t=>{const e=t%16;const n=[];r(13,12,15,12,"n",n);[3,5,4].forEach((s,o)=>{const i=Math.min(s,Math.floor(e/2));if(i>0)r(13+o,12-i,13+o,11,"g",n)});return{...a,ex:1,ey:e<6?1:0,eyes:e>=12?"happy":"open",extras:n}},present:t=>{const e=t%16;const n=[[13,7,"g"],[14,7,"g"],[15,7,"g"],[15,6,"g"]];return{...a,ex:1,ey:-1,eyes:e===13?"closed":e>=8&&e<12?"happy":"open",extras:n}},lift:t=>{const e=t%16;const n=e%8===2||e%8===3?1:0;const s=[[2,5-n,"g"],[1,4-n,"g"],[1,3-n,"g"],[13,5-n,"g"],[14,4-n,"g"],[14,3-n,"g"]];return{...a,y0:4-n,eyes:"happy",legs:n?[1,1,1]:[0,0,0],extras:s}},carry:t=>{const e=Math.floor(t/2)%2;const n=[[2,5+e,"g"],[1,4+e,"g"],[1,3+e,"g"],[13,5+e,"g"],[14,4+e,"g"],[14,3+e,"g"]];return{...a,y0:4+e,ex:t%16<8?0:1,legs:u(t),extras:n}},hug:t=>{const e=t%16;const n=Math.floor(e/8)%2;const s=[[1,7+n,"g"],[2,8+n,"g"],[14,7+n,"g"],[13,8+n,"g"]];return{...a,y0:4+n,ey:-1,eyes:e>=4&&e<12?"happy":"closed",extras:s}},lean:t=>{const e=t%24;const n=[[13,5,"g"],[14,5,"g"],[15,5,"g"]];return{...a,ex:e<16?1:0,eyes:e>=8&&e<12?"closed":"open",legs:[0,1,0],extras:n}},point:t=>{const e=t%16;const n=e===6||e===7?1:0;const s=[[13,5-n,"g"],[14,4-n,"g"],[15,3-n,"g"]];return{...a,y0:4-n,ex:1,ey:-1,eyes:e>=6&&e<10?"happy":"open",legs:n?[1,1,1]:[0,0,0],extras:s}},static:()=>({...a})};export const OTTO_ANCHORS={present:t=>({x:14,y:-1+Math.floor(t%16/4)%2,over:false}),lift:t=>{const e=t%16;const n=e%8===2||e%8===3?1:0;return{x:4,y:-5-n,over:false}},carry:t=>({x:4,y:-5+Math.floor(t/2)%2,over:false}),hug:t=>({x:4,y:7+Math.floor(t%16/8)%2,over:true}),lean:()=>({x:14,y:6,over:false}),point:t=>{const e=t%16;const n=e===6||e===7?1:0;return{x:15,y:-5-n+Math.floor(e/4)%2,over:false}}};export const OTTO_ANCHOR_SIZE=7;export const OTTO_NOTES={idle:"Bobs one pixel, blinks, glances left and right.",thinking:"Looks up; a thought cloud fills with dots.",happy:"Two-pixel hop: stretch on takeoff, squash on landing.",error:"Lamp goes red, eyes shut, body shakes.",sleep:"Sinks a row, lamp dims, z\u2019s drift up.",peek:"Submerged to the eyes, scanning.",typing:"Laptop with a Buoy screen; tentacles tap.",debugging:"Magnifier over one eye, scanning left and right.",building:"Hard hat, hammer swings, spark on the hit.",carrying:"Phone overhead, marching.",pushing:"Shoves a crate, one pixel per heave.",sweeping:"Broom, dust puff on each stroke.",juggling:"Three blocks: red, orange, purple.",wizard:"Purple hat, wand sparkles.",conducting:"Arms swing in antiphase, notes rise.",beacon:"Lamp emits three expanding rings.",notification:"Hop with a blinking exclamation.",disconnected:"Lamp dim, looks up at a phone blinking red.",dizzy:"X eyes, two stars orbit, body wobbles.",overheated:"Melts into a puddle and reforms.",confused:"Question mark, head tilt, eyes wander.",stare:"Big square eyes. Rare blink.",walking:"Crab-walks left and right, eyes lead.",goingaway:"Walks off the right edge, returns from the left.",eureka:"Bulb appears, lights up with sparks, tiny hops.",grooving:"Headphones on, sways with the beat, notes pop.",hatmishap:"Wizard hat slips over the eyes; a wave of the wand fixes it.",lowbattery:"Slumped, lamp off, red battery blinks. Eyes barely open.",wake:"Puddle, wide eyes, springs up, squashes, settles.",builder:"Balances a stack of blocks; sweat drop when it wobbles.",mini:"Half-size Otto. Big eyes, waving arms, kicking feet.",minityping:"Mini Otto typing, data bits float up.",happydance:"Arms pump in antiphase, feet shuffle.",jumping:"Crouch, four-pixel leap, arms up, land.",loading:"Three dots chase around a ring; eyes follow the lead.",progress:"A bar fills across the top; a hop when it completes.",hourglass:"Sand runs through, the glass lifts and flips.",waiting:"Foot taps, checks the wristwatch, dots pile up.",syncing:"Two arcs chase each other; lamp pulses in step.",downloading:"An arrow drops into the tray, the parcel lands.",uploading:"The parcel lifts off the tray and climbs out.",connecting:"Signal bars fill one by one, then blink: connected.",scanning:"A bright line sweeps down the body with a trail.",searching:"Binoculars up, slow sweep left and right.",empty:"Peers into an open box, finds nothing, looks back at you.",shrug:"Arms up, looks left, looks right, arms down.",fishing:"Rod out, bobber bobbing; one tug, one splash.",listening:"Hand cupped, sound arcs arriving from the side.",tumbleweed:"A tumbleweed rolls past; eyes follow it off the edge.",warning:"Holds up a warning sign, lamp blinking.",crash:"Burst, smoke, then dazed with X eyes.",panic:"Arms flail, sweat flies, lamp strobes.",sos:"The lamp flashes S-O-S in morse; arms wave.",offline:"A struck-through cloud; slumped, lamp dim.",timeout:"A clock ticks round, turns red; a shake.",locked:"A padlock: look, strain at it, give up.",unlocked:"The shackle pops open; sparkles and a hop.",denied:"A red no-entry sign; head shaking.",broken:"A crack down the middle; a band-aid goes on.",sad:"Sunk a row, lamp dim, a tear drops in.",rain:"A rain cloud overhead, drops falling.",sick:"A thermometer climbs; wobbling and sweating.",flood:"In over the eyes, arms flailing, bubbles rising.",bug:"A beetle crawls across the body, then flies off.",alarm:"The lamp is a siren: red strobe, sweeping rays.",frozen:"Iced over: icicles for legs, snow, shivering.",snail:"A snail crosses the foreground, very slowly.",angry:"Brows down, lamp red, steam, stomping.",ghost:"Grey and translucent, floating, white eyes.",nervous:"Eyes darting, sweat, fidgeting feet.",puzzled:"A tentacle scratches the head; eyes wander.",detective:"Deerstalker hat, magnifying glass on the move.",reading:"An open book; eyes run the lines; a page turns.",success:"A check mark lands; sparkles, a hop, lamp blinks.",celebrate:"Confetti falls, arms up, bouncing.",thumbsup:"A fist rises, thumb out; then a wink.",party:"Party hat, confetti, a side-to-side dance.",trophy:"A cup held overhead, sparkles, a hop.",starred:"A star pops in at the top right and twinkles.",love:"Hearts float up either side; the body bobs.",wave:"One arm up, hand swinging; a smile at the end.",bow:"A slow bow: squash forward, eyes shut, back up.",cool:"Sunglasses drop into place; a little sway.",flexing:"Both arms up in a flex; the biceps pop.",zen:"Floating above the water, eyes shut, slow bob.",recording:"A red REC dot blinks; eyes slowly sweep the room.",paused:"Pause bars overhead; resting, lamp dim, one peek.",filtering:"A funnel: mixed bits go in, only orange comes out.",pinned:"A pushpin drops in from above and lands.",rewind:"Moonwalks left while a clock runs backwards.",storing:"Crates stack up on the right, one at a time.",printing:"A little printer spools out a strip of log lines.",stopwatch:"A stopwatch with a fast hand; speed lines.",spotlight:"The lamp throws a beam that sweeps left, up, right.",keys:"A keyring held out; the keys jingle.",map:"A folded map: dotted route, red pin; looks around.",photo:"A camera held up; flash; a print pops out.",painting:"A canvas on the right; strokes appear.",disguise:"Groucho glasses, nose and moustache; sly glances.",pro:"A crown in place of the lamp, jewels, sparkles.",talking:"A speech bubble with typing dots; lamp pulses.",handshake:"A hand arrives from the right; they shake.",robot:"A small robot friend: antenna blinking, eyes flickering.",plug:"A plug slides in and connects; the lamp comes on.",gift:"A wrapped gift bounces; the lid lifts with a sparkle.",action:"A clapperboard claps shut.",guard:"A shield up; a red bolt sparks off it and bounces away.",coffee:"A mug with steam; a sip with eyes shut.",swimming:"In to the shoulders, alternating strokes with splashes.",diving:"Sinks out of sight, bubbles rise, comes back dripping.",balloon:"A balloon lifts Otto clear of the water; a splash on release.",landing:"Drops in from above, lands with a squash and a splash.",spinning:"A full turn: front, three-quarter, side, back and round.",bubbles:"Blows through a bubble wand; bubbles drift up.",trash:"Bits fly into a bin, the lid flaps, a puff when done.",saved:"A floppy disk pops in; a hop and a sparkle.",copied:"One sheet slides out from behind another.",charting:"Three bars grow on the right; pleased when they land.",present:"A flat hand held out; the object floats above the palm.",lift:"Both arms up; the object rides overhead; a hop.",carry:"Arms up, marching; the object rides with the step.",hug:"Arms wrapped round the object; eyes peep over it.",lean:"One arm resting on the object beside Otto; relaxed.",point:"Arm up and out; the object hangs up-right, bobbing.",static:"Base pose, no motion. For favicons and stills."};export const OTTO_STATE_NAMES=Object.keys(OTTO_STATES).filter(t=>t!=="static");export const OTTO_GROUPS=[{id:"loading",title:"Loading & progress",blurb:"Something is on its way. Spinners, bars, connecting, scanning, waiting.",states:["loading","progress","hourglass","waiting","syncing","downloading","uploading","connecting","scanning","searching","fishing"]},{id:"empty",title:"Empty & unknown",blurb:"Nothing here yet, nothing found, or no idea what this is.",states:["empty","shrug","tumbleweed","confused","puzzled"]},{id:"trouble",title:"Errors & trouble",blurb:"Failures, warnings, disconnects, limits \u2014 from a blip to a crash.",states:["error","warning","crash","panic","sos","alarm","offline","disconnected","timeout","locked","denied","broken","sad","rain","sick","overheated","dizzy","flood","bug","frozen","snail","angry","ghost","nervous","lowbattery"]},{id:"success",title:"Success & celebration",blurb:"It worked. Confirmations, unlocks, milestones, thanks.",states:["happy","eureka","success","celebrate","thumbsup","party","trophy","starred","love","unlocked","notification","beacon","cool","flexing","pro","gift"]},{id:"working",title:"Working & tool moments",blurb:"Busy doing the job: capturing, filtering, saving, inspecting, talking.",states:["thinking","typing","debugging","building","carrying","pushing","sweeping","detective","reading","map","painting","photo","printing","storing","charting","stopwatch","spotlight","keys","filtering","talking","listening","recording","paused","rewind","trash","disguise","guard","action","robot","plug","handshake","saved","copied","pinned"]},{id:"personality",title:"Idle, moves & personality",blurb:"Otto being Otto: idling, wandering, swimming, dancing, showing off.",states:["idle","stare","mini","minityping","walking","goingaway","peek","sleep","wake","jumping","spinning","swimming","diving","balloon","landing","bubbles","zen","bow","wave","coffee","grooving","conducting","juggling","wizard","hatmishap","builder","happydance"]},{id:"pairing",title:"Pairing poses",blurb:"Built to hold a tool's icon tile \u2014 the object is drawn by the scene at OTTO_ANCHORS.",states:["present","lift","carry","hug","lean","point"]}];export const OTTO_USES={idle:"Default resting state; nothing to report.",thinking:"Working something out; Ask Buoy composing.",happy:"A quick positive beat after any action.",error:"A request or action failed.",sleep:"Tool idle for a long time; capture off overnight.",peek:"Minimized or collapsed; still watching.",typing:"Ask Buoy typing a reply; code being written.",debugging:"Inspecting a detail view; stepping through.",building:"Bundling, compiling, a build in progress.",carrying:"Moving data between tools; exporting.",pushing:"A heavy job: large payload, slow migration.",sweeping:"Clearing a list; cache cleanup done.",juggling:"Several stores or queries updating at once.",wizard:"A setup wizard; magic done on your behalf.",conducting:"Orchestrating a flow or scenario.",beacon:"Broadcasting: broker up, dashboard discoverable.",notification:"A new item arrived; badge count went up.",disconnected:"Device or dashboard connection dropped.",dizzy:"Too many re-renders; a render storm.",overheated:"CPU or thermal pressure; perf meltdown.",confused:"Unknown or unparseable data.",stare:"Watching for a specific event; recording armed.",walking:"Navigating between routes.",goingaway:"Leaving a screen; a tool closing.",eureka:"Root cause found; a diff that explains it.",grooving:"Everything healthy; nothing to do but vibe.",hatmishap:"A small recoverable slip; retry worked.",lowbattery:"Device battery low; power-saving mode.",wake:"Tool re-opened; capture resumed.",builder:"Assembling a state tree or fixture.",mini:"Compact or inline placements.",minityping:"A compact typing indicator.",happydance:"A milestone: all tests green, release done.",jumping:"Jump to a route, a log line, a snapshot.",loading:"Generic indeterminate loading.",progress:"Determinate progress: download, batch, upload.",hourglass:"Waiting on a timer; a scheduled retry.",waiting:"Waiting for a device, the first event, a reply.",syncing:"Syncing with the desktop dashboard or broker.",downloading:"Pulling a snapshot, an update, a payload.",uploading:"Sending a report, a snapshot, feedback.",connecting:"Connecting to a device or broker.",scanning:"Scanning for targets, keys, assets, fibers.",searching:"A search running; filtering a long list.",fishing:"Capture on, nothing captured yet.",empty:"An empty list: no requests, no logs, no keys.",shrug:"No result and no explanation available.",tumbleweed:"Deliberately empty; nothing happened for a while.",puzzled:"Unexpected shape; needs a second look.",warning:"A warning: deprecated, risky, near a limit.",crash:"The app crashed; a fatal was captured.",panic:"Many errors at once; an error cascade.",sos:"Critical: the app cannot continue.",alarm:"An alert rule fired; attention now.",offline:"No network; device offline.",timeout:"A request or connection timed out.",locked:"A Pro feature; a locked setting.",denied:"Permission denied; blocked by policy.",broken:"Corrupted data; a broken persisted value.",sad:"Nothing matched; a failed search.",rain:"A bad run: errors piling up.",sick:"Unhealthy config; env check failing.",flood:"Buffer full; too many events to keep up.",bug:"A bug was found (or is being reported).",frozen:"The UI thread froze; a hung frame.",snail:"Slow: a long request, a slow render.",angry:"Rate limited, rejected, forbidden.",ghost:"Stale or detached: an unmounted component, an old snapshot.",nervous:"A risky action pending confirmation.",detective:"Investigating; root-cause analysis.",reading:"Reading docs or a long log.",success:"Action completed; a rule saved, a replay done.",celebrate:"A big success: first capture, setup complete.",thumbsup:"Approved; looks good; confirmation received.",party:"Release shipped; a version milestone.",trophy:"Best benchmark yet; a personal record.",starred:"Pinned, favourited, starred.",love:"Thanks and delight; feedback sent.",unlocked:"Pro unlocked; license activated.",cool:"Perfect score; zero warnings.",flexing:"Fast: a great perf result.",zen:"All quiet; nothing needs attention.",pro:"Pro plan active.",gift:"New version or feature available.",map:"Route inspector; where am I in the navigator.",photo:"Screenshot taken; image captured.",painting:"Assets and design overlays; theming.",printing:"Console streaming; logs arriving.",storing:"Saving to storage; persisting.",charting:"Metrics building up; perf charts.",stopwatch:"Benchmark running; timing a request.",spotlight:"Highlighting renders; spotlight on a component.",keys:"Environment variables and secrets.",filtering:"Filters active; a subset shown.",talking:"Ask Buoy answering; a message in flight.",listening:"Listening for events; waiting for input.",recording:"Capture on; recording a session.",paused:"Capture paused.",rewind:"Time Machine: stepping back through snapshots.",trash:"Cleared: list emptied, cache purged.",disguise:"Impersonating another user.",guard:"Sentry or a guard rail caught something.",action:"A scenario or flow started.",robot:"The MCP agent is driving the tools.",plug:"Device connected; plugin installed.",handshake:"Paired with the desktop dashboard.",saved:"Saved: request, snapshot, rule.",copied:"Copied to clipboard.",pinned:"Item pinned; survives clears.",spinning:"Refreshing; reloading the app.",swimming:"Making progress through a long job.",diving:"Drilling into a detail or nested value.",balloon:"Upgrading; a plan change in progress.",landing:"Tool mounted; first open.",bubbles:"A light idle for empty side panels.",bow:"Thank you; a graceful exit.",wave:"Welcome; onboarding; first run.",coffee:"A long build; take a break.",present:"Presenting a tool: onboarding, a tool's intro card.",lift:"Showing off a tool: a feature announcement.",carry:"Bringing a tool along: install, add-to-dial.",hug:"A favourite tool: pinned, most used.",lean:"A tool at rest: its idle or settings screen.",point:"Pointing at a tool: a hint, a next step.",static:"Favicons, stills, icons."};const P={progress:32,hourglass:20,fishing:32,tumbleweed:28,crash:20,sos:34,locked:20,unlocked:20,broken:24,snail:36,reading:24,storing:24,diving:24,balloon:24,swimming:8,scanning:14,connecting:14,loading:10,syncing:10,downloading:12,uploading:12,alarm:8,flood:8,panic:8,nervous:8,keys:8,flexing:8};export const OTTO_REEL=[["idle",30],["thinking",20],["typing",20],["happy",14],["debugging",18],["idle",14],["building",16],["carrying",14],["pushing",14],["sweeping",14],["juggling",16],["wizard",14],["conducting",14],["beacon",14],["notification",16],["error",12],["disconnected",14],["dizzy",14],["overheated",24],["confused",18],["stare",20],["walking",32],["eureka",24],["grooving",16],["hatmishap",32],["builder",16],["happydance",12],["jumping",16],["mini",16],["minityping",12],["lowbattery",24],["sleep",24],["wake",30],["peek",18],["goingaway",26],...["loading","progress","hourglass","waiting","syncing","downloading","uploading","connecting","scanning","searching","fishing","empty","shrug","tumbleweed","puzzled","warning","crash","panic","sos","alarm","offline","timeout","locked","unlocked","denied","broken","sad","rain","sick","flood","bug","frozen","snail","angry","ghost","nervous","detective","reading","success","celebrate","thumbsup","party","trophy","starred","love","wave","bow","cool","flexing","zen","recording","paused","filtering","pinned","rewind","storing","printing","stopwatch","spotlight","keys","map","photo","painting","disguise","pro","talking","handshake","robot","plug","gift","action","guard","coffee","swimming","diving","balloon","landing","spinning","bubbles","trash","saved","copied","charting","present","lift","carry","hug","lean","point"].map(t=>[t,P[t]??16])];const M=OTTO_REEL.reduce((t,e)=>t+e[1],0);export function ottoReel(t){let e=(t%M+M)%M;for(const[n,s]of OTTO_REEL){if(e<s)return{state:n,local:e};e-=s}return{state:"idle",local:0}}export function renderOttoFrame(t,e,n={}){const s=Math.max(0,Math.floor(e));const o=OTTO_STATES[t](s);return j(R(o),s,{water:n.water??true,keyline:n.keyline??true,submerged:!!o.submerged})}export function ottoRuns(t){const e=[];for(let n=0;n<t.length;n++){const s=t[n];let o=0;while(o<s.length){const i=s[o];let l=1;while(o+l<s.length&&s[o+l]===i)l++;if(i!=="."){const c=OTTO_PALETTE[i];if(c)e.push({x:o,y:n,w:l,color:c})}o+=l}}return e}