ethagent 3.3.3 → 4.0.0

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 (322) hide show
  1. package/.claude-plugin/marketplace.json +11 -0
  2. package/.claude-plugin/plugin.json +35 -0
  3. package/LICENSE +1 -1
  4. package/README.md +64 -104
  5. package/commands/ethagent.md +40 -0
  6. package/package.json +16 -16
  7. package/src/app/keybindings/KeybindingProvider.tsx +1 -6
  8. package/src/app/keybindings/types.ts +1 -6
  9. package/src/cli/ResetConfirmView.tsx +54 -53
  10. package/src/cli/demo.ts +86 -0
  11. package/src/cli/hookIo.ts +45 -0
  12. package/src/cli/main.tsx +94 -123
  13. package/src/cli/memoryGuard.ts +49 -0
  14. package/src/cli/reset.ts +28 -70
  15. package/src/cli/sessionStart.ts +33 -0
  16. package/src/cli/status.ts +46 -0
  17. package/src/cli/sync.ts +167 -0
  18. package/src/cli/syncAdapters/claude-code.ts +86 -0
  19. package/src/cli/syncAdapters/codex.ts +66 -0
  20. package/src/cli/syncAdapters/index.ts +45 -0
  21. package/src/cli/syncAdapters/managedBlock.ts +175 -0
  22. package/src/cli/syncAdapters/shared.ts +63 -0
  23. package/src/identity/continuity/envelopeParse.ts +20 -1
  24. package/src/identity/continuity/publicSkills.ts +3 -1
  25. package/src/identity/continuity/skills/publicSkillsSync.ts +2 -1
  26. package/src/identity/continuity/skills/scaffold.ts +5 -2
  27. package/src/identity/continuity/snapshots.ts +12 -5
  28. package/src/identity/continuity/storage/defaults.ts +20 -19
  29. package/src/identity/continuity/storage/status.ts +1 -1
  30. package/src/identity/ens/ensLookup/constants.ts +1 -1
  31. package/src/identity/manager/IdentityManager.tsx +33 -0
  32. package/src/identity/{hub → manager}/OperationalRoutes.tsx +37 -18
  33. package/src/identity/{hub → manager}/Routes.tsx +48 -34
  34. package/src/identity/{hub → manager}/continuity/ContinuityDashboardScreen.tsx +9 -19
  35. package/src/identity/{hub → manager}/continuity/RebackupStorageScreen.tsx +3 -3
  36. package/src/identity/manager/continuity/RecoveryConfirmScreen.tsx +102 -0
  37. package/src/identity/{hub → manager}/continuity/SavePromptScreen.tsx +2 -3
  38. package/src/identity/{hub → manager}/continuity/completion.ts +1 -1
  39. package/src/identity/{hub → manager}/continuity/effects.ts +1 -1
  40. package/src/identity/{hub → manager}/continuity/skills/DeleteSkillConfirmScreen.tsx +2 -2
  41. package/src/identity/{hub → manager}/continuity/skills/NewSkillScreen.tsx +0 -5
  42. package/src/identity/{hub → manager}/continuity/skills/NewSkillVisibilityScreen.tsx +4 -4
  43. package/src/identity/{hub → manager}/continuity/skills/SkillActionsScreen.tsx +6 -22
  44. package/src/identity/{hub → manager}/continuity/skills/SkillsTreeScreen.tsx +5 -17
  45. package/src/identity/{hub → manager}/continuity/snapshot.ts +1 -1
  46. package/src/identity/{hub → manager}/continuity/vault.ts +1 -1
  47. package/src/identity/{hub → manager}/create/CreateFlow.tsx +59 -32
  48. package/src/identity/{hub → manager}/create/effects.ts +19 -10
  49. package/src/identity/manager/create/importScan.ts +122 -0
  50. package/src/identity/{hub → manager}/custody/CustodyEditFlow.tsx +17 -61
  51. package/src/identity/{hub → manager}/custody/actions.ts +1 -15
  52. package/src/identity/{hub → manager}/custody/routes.tsx +20 -40
  53. package/src/identity/{hub → manager}/custody/transactions.ts +1 -0
  54. package/src/identity/{hub → manager}/custody/types.ts +1 -2
  55. package/src/identity/{hub → manager}/custody/useCustodyEffects.ts +1 -1
  56. package/src/identity/{hub → manager}/ens/EnsEditAdvancedScreens.tsx +2 -2
  57. package/src/identity/{hub → manager}/ens/EnsEditMaintenanceScreens.tsx +12 -23
  58. package/src/identity/{hub → manager}/ens/EnsEditReviewScreens.tsx +18 -42
  59. package/src/identity/{hub → manager}/ens/EnsEditRunners.tsx +1 -1
  60. package/src/identity/{hub → manager}/ens/EnsEditShared.tsx +0 -2
  61. package/src/identity/{hub → manager}/ens/EnsEditSimpleScreens.tsx +10 -19
  62. package/src/identity/{hub → manager}/ens/EnsFlow.tsx +133 -41
  63. package/src/identity/{hub → manager}/ens/EnsOperatorWalletsScreen.tsx +14 -19
  64. package/src/identity/{hub → manager}/ens/editCopy.ts +1 -14
  65. package/src/identity/{hub → manager}/profile/EditProfileFlow.tsx +99 -66
  66. package/src/identity/{hub → manager}/profile/effects.ts +1 -3
  67. package/src/identity/{hub → manager}/profile/operatorSave.ts +1 -1
  68. package/src/identity/{hub → manager}/profile/state.ts +1 -1
  69. package/src/identity/{hub/identityHubReducer.ts → manager/reducer.ts} +25 -26
  70. package/src/identity/{hub → manager}/restore/RestoreFlow.tsx +16 -24
  71. package/src/identity/{hub → manager}/restore/apply.ts +1 -1
  72. package/src/identity/{hub → manager}/restore/auth.ts +1 -1
  73. package/src/identity/{hub → manager}/restore/discover.ts +1 -1
  74. package/src/identity/{hub → manager}/restore/fetch.ts +1 -1
  75. package/src/identity/{hub → manager}/restore/restoreAdmin.ts +1 -1
  76. package/src/identity/{hub → manager}/restore/useRestoreEffects.ts +2 -9
  77. package/src/identity/{hub → manager}/settings/StorageCredentialScreen.tsx +10 -25
  78. package/src/identity/{hub → manager}/shared/components/DetailsScreen.tsx +5 -7
  79. package/src/identity/{hub → manager}/shared/components/ErrorScreen.tsx +6 -10
  80. package/src/identity/{hub → manager}/shared/components/FlowTimeline.tsx +4 -3
  81. package/src/identity/{hub → manager}/shared/components/IdentitySummary.tsx +19 -59
  82. package/src/identity/manager/shared/components/LazyMenu.tsx +147 -0
  83. package/src/identity/manager/shared/components/MenuScreen.tsx +220 -0
  84. package/src/identity/manager/shared/components/OperationCompleteScreen.tsx +28 -0
  85. package/src/identity/{hub → manager}/shared/components/UnlinkedIdentityScreen.tsx +9 -10
  86. package/src/identity/{hub → manager}/shared/components/WalletApprovalScreen.tsx +1 -2
  87. package/src/identity/manager/shared/components/Wordmark.tsx +54 -0
  88. package/src/identity/{hub → manager}/shared/components/menuFlagsFromReconciliation.ts +39 -15
  89. package/src/identity/{hub → manager}/shared/effects/profilePrep.ts +1 -1
  90. package/src/identity/manager/shared/effects/types.ts +30 -0
  91. package/src/identity/{hub → manager}/shared/model/copy.ts +0 -4
  92. package/src/identity/{hub → manager}/shared/model/errors.ts +32 -3
  93. package/src/identity/{hub → manager}/shared/model/network.ts +2 -2
  94. package/src/identity/{hub → manager}/shared/reconciliation/agentReconciliation/hook.ts +5 -0
  95. package/src/identity/{hub → manager}/shared/reconciliation/agentReconciliation/run.ts +1 -1
  96. package/src/identity/{hub/shared/reconciliation/useAgentReconciliation.ts → manager/shared/reconciliation/index.ts} +6 -0
  97. package/src/identity/{hub → manager}/shared/utils.ts +6 -10
  98. package/src/identity/{hub → manager}/transfer/TokenTransferFlow.tsx +3 -3
  99. package/src/identity/{hub → manager}/transfer/TokenTransferScreens.tsx +4 -10
  100. package/src/identity/{hub → manager}/transfer/effects.ts +1 -1
  101. package/src/identity/{hub → manager}/types.ts +5 -6
  102. package/src/identity/{hub/useIdentityHubContinuity.ts → manager/useContinuity.ts} +59 -27
  103. package/src/identity/{hub/useIdentityHubController.ts → manager/useController.ts} +38 -35
  104. package/src/identity/{hub/useIdentityHubSideEffects.ts → manager/useSideEffects.ts} +40 -4
  105. package/src/identity/registry/erc8004/discovery.ts +3 -17
  106. package/src/identity/registry/erc8004/utils.ts +1 -1
  107. package/src/identity/storage/ipfs.ts +21 -1
  108. package/src/identity/wallet/browserWallet/html.ts +10 -2
  109. package/src/identity/wallet/browserWallet/http.ts +18 -0
  110. package/src/identity/wallet/browserWallet/requestServer.ts +5 -1
  111. package/src/identity/wallet/browserWallet/requests.ts +10 -28
  112. package/src/identity/wallet/browserWallet/session.ts +26 -33
  113. package/src/identity/wallet/browserWallet/validation.ts +14 -0
  114. package/src/identity/wallet/browserWallet/walletPageSource.ts +22 -40
  115. package/src/identity/wallet/page/boot.ts +43 -0
  116. package/src/identity/wallet/page/config.ts +59 -0
  117. package/src/identity/wallet/page/constants.ts +12 -0
  118. package/src/identity/wallet/page/copy.ts +47 -68
  119. package/src/identity/wallet/page/css.ts +638 -0
  120. package/src/identity/wallet/page/{errorView.ts → errors.ts} +5 -14
  121. package/src/identity/wallet/page/{controller.ts → flow.ts} +4 -71
  122. package/src/identity/wallet/page/markup.ts +44 -34
  123. package/src/identity/wallet/page/{walletProvider.ts → provider.ts} +0 -3
  124. package/src/identity/wallet/page/resize.ts +95 -0
  125. package/src/identity/wallet/page/state.ts +135 -8
  126. package/src/identity/wallet/page/timeline.ts +161 -0
  127. package/src/identity/wallet/page/view.ts +22 -302
  128. package/src/storage/config.ts +30 -80
  129. package/src/storage/reset.ts +31 -0
  130. package/src/storage/secrets.ts +1 -16
  131. package/src/ui/Select.tsx +27 -5
  132. package/src/ui/Spinner.tsx +16 -15
  133. package/src/ui/Surface.tsx +21 -17
  134. package/src/ui/TextArea.tsx +173 -0
  135. package/src/ui/TextInput.tsx +31 -133
  136. package/src/ui/theme.ts +22 -13
  137. package/src/utils/clipboard.ts +0 -140
  138. package/src/app/FirstRun.tsx +0 -577
  139. package/src/app/FirstRunTimeline.tsx +0 -51
  140. package/src/app/firstRunConfig.ts +0 -26
  141. package/src/app/hooks/useCancelRequest.ts +0 -22
  142. package/src/app/hooks/useDoublePress.ts +0 -46
  143. package/src/app/hooks/useExitOnCtrlC.ts +0 -36
  144. package/src/auth/openaiOAuth/credentials.ts +0 -47
  145. package/src/auth/openaiOAuth/crypto.ts +0 -23
  146. package/src/auth/openaiOAuth/index.ts +0 -238
  147. package/src/auth/openaiOAuth/landingPage.ts +0 -116
  148. package/src/auth/openaiOAuth/listener.ts +0 -151
  149. package/src/auth/openaiOAuth/refresh.ts +0 -70
  150. package/src/auth/openaiOAuth/shared.ts +0 -115
  151. package/src/chat/ChatBottomPane.tsx +0 -296
  152. package/src/chat/ChatScreen.tsx +0 -1685
  153. package/src/chat/ConversationStack.tsx +0 -56
  154. package/src/chat/MessageList.tsx +0 -638
  155. package/src/chat/SessionStatus.tsx +0 -53
  156. package/src/chat/chatEnvironment.ts +0 -16
  157. package/src/chat/chatScreenUtils.ts +0 -194
  158. package/src/chat/chatSessionState.ts +0 -146
  159. package/src/chat/chatTurnContext.ts +0 -50
  160. package/src/chat/chatTurnOrchestrator.ts +0 -603
  161. package/src/chat/chatTurnRows.ts +0 -64
  162. package/src/chat/commands.ts +0 -494
  163. package/src/chat/continuityEditReview.ts +0 -42
  164. package/src/chat/display/DiffView.tsx +0 -193
  165. package/src/chat/display/SyntaxText.tsx +0 -192
  166. package/src/chat/display/toolCallDisplay.ts +0 -103
  167. package/src/chat/display/toolResultDisplay.ts +0 -19
  168. package/src/chat/input/ChatInput.tsx +0 -625
  169. package/src/chat/input/chatInputHelpers.ts +0 -62
  170. package/src/chat/input/chatInputState.ts +0 -247
  171. package/src/chat/input/chatPaste.ts +0 -49
  172. package/src/chat/input/imageRefs.ts +0 -30
  173. package/src/chat/input/inputRendering.tsx +0 -93
  174. package/src/chat/input/textCursor.ts +0 -212
  175. package/src/chat/messageMarkdown.ts +0 -220
  176. package/src/chat/messageRows.ts +0 -43
  177. package/src/chat/planImplementation.ts +0 -62
  178. package/src/chat/slashCommandHandlers.ts +0 -122
  179. package/src/chat/slashCommandViews.ts +0 -120
  180. package/src/chat/transcript/TranscriptView.tsx +0 -184
  181. package/src/chat/transcript/transcriptViewport.ts +0 -295
  182. package/src/chat/views/ContextLimitView.tsx +0 -95
  183. package/src/chat/views/ContinuityEditReviewView.tsx +0 -50
  184. package/src/chat/views/CopyPicker.tsx +0 -50
  185. package/src/chat/views/PermissionPrompt.tsx +0 -156
  186. package/src/chat/views/PermissionsView.tsx +0 -165
  187. package/src/chat/views/PlanApprovalView.tsx +0 -91
  188. package/src/chat/views/ResumeView.tsx +0 -273
  189. package/src/chat/views/RewindView.tsx +0 -412
  190. package/src/cli/preview.tsx +0 -14
  191. package/src/cli/updateNotice.ts +0 -54
  192. package/src/identity/continuity/privateEdit/apply.ts +0 -170
  193. package/src/identity/continuity/privateEdit/diff.ts +0 -6
  194. package/src/identity/continuity/privateEdit/files.ts +0 -23
  195. package/src/identity/continuity/privateEdit/types.ts +0 -28
  196. package/src/identity/continuity/privateEdit.ts +0 -46
  197. package/src/identity/hub/IdentityHub.tsx +0 -14
  198. package/src/identity/hub/continuity/RecoveryConfirmScreen.tsx +0 -104
  199. package/src/identity/hub/ens/effects.ts +0 -218
  200. package/src/identity/hub/shared/components/MenuScreen.tsx +0 -241
  201. package/src/identity/hub/shared/effects/types.ts +0 -53
  202. package/src/identity/hub/shared/reconciliation/index.ts +0 -14
  203. package/src/identity/wallet/page/grainient.ts +0 -278
  204. package/src/identity/wallet/page/html.ts +0 -28
  205. package/src/identity/wallet/page/styles/base.ts +0 -259
  206. package/src/identity/wallet/page/styles/components.ts +0 -262
  207. package/src/identity/wallet/page/styles/index.ts +0 -5
  208. package/src/identity/wallet/page/styles/responsive.ts +0 -247
  209. package/src/identity/wallet/page.tsx +0 -38
  210. package/src/mcp/approvals.ts +0 -113
  211. package/src/mcp/config.ts +0 -235
  212. package/src/mcp/manager.ts +0 -482
  213. package/src/mcp/managerHelpers.ts +0 -70
  214. package/src/mcp/names.ts +0 -19
  215. package/src/mcp/output.ts +0 -96
  216. package/src/models/ModelPicker.tsx +0 -1009
  217. package/src/models/catalog.ts +0 -327
  218. package/src/models/huggingface.ts +0 -712
  219. package/src/models/huggingfaceStorage.ts +0 -136
  220. package/src/models/llamacpp.ts +0 -848
  221. package/src/models/llamacppCommands.ts +0 -44
  222. package/src/models/llamacppConfig.ts +0 -34
  223. package/src/models/llamacppDiscovery.ts +0 -176
  224. package/src/models/llamacppOutput.ts +0 -65
  225. package/src/models/llamacppPreflight.ts +0 -158
  226. package/src/models/modelDisplay.ts +0 -180
  227. package/src/models/modelPickerCatalogFlow.ts +0 -56
  228. package/src/models/modelPickerCredentials.ts +0 -166
  229. package/src/models/modelPickerData.ts +0 -41
  230. package/src/models/modelPickerDisplay.tsx +0 -132
  231. package/src/models/modelPickerHfFlow.ts +0 -192
  232. package/src/models/modelPickerLocalRunnerFlow.ts +0 -115
  233. package/src/models/modelPickerOptions.ts +0 -457
  234. package/src/models/modelPickerTypes.ts +0 -69
  235. package/src/models/modelPickerUninstallFlow.ts +0 -48
  236. package/src/models/modelPickerViewHelpers.ts +0 -174
  237. package/src/models/modelRecommendation.ts +0 -139
  238. package/src/models/providerDisplay.ts +0 -16
  239. package/src/models/runtimeDetection.ts +0 -81
  240. package/src/models/uncensoredCatalog.ts +0 -86
  241. package/src/providers/anthropic.ts +0 -290
  242. package/src/providers/contracts.ts +0 -71
  243. package/src/providers/errors.ts +0 -80
  244. package/src/providers/gemini.ts +0 -391
  245. package/src/providers/openai-chat.ts +0 -474
  246. package/src/providers/openai-responses-format.ts +0 -177
  247. package/src/providers/openai-responses.ts +0 -306
  248. package/src/providers/openaiChatWire.ts +0 -124
  249. package/src/providers/registry.ts +0 -120
  250. package/src/providers/retry.ts +0 -58
  251. package/src/providers/sse.ts +0 -93
  252. package/src/runtime/compaction.ts +0 -395
  253. package/src/runtime/cwd.ts +0 -43
  254. package/src/runtime/providerTurn.ts +0 -38
  255. package/src/runtime/sessionMode.ts +0 -55
  256. package/src/runtime/systemPrompt.ts +0 -213
  257. package/src/runtime/textToolParser.ts +0 -161
  258. package/src/runtime/toolClaimGuards.ts +0 -143
  259. package/src/runtime/toolExecution.ts +0 -304
  260. package/src/runtime/toolIntent.ts +0 -143
  261. package/src/runtime/turn.ts +0 -369
  262. package/src/runtime/turnNudges.ts +0 -223
  263. package/src/runtime/turnTypes.ts +0 -86
  264. package/src/storage/factoryReset.ts +0 -127
  265. package/src/storage/history.ts +0 -58
  266. package/src/storage/permissions.ts +0 -76
  267. package/src/storage/rewind.ts +0 -266
  268. package/src/storage/sessionExport.ts +0 -49
  269. package/src/storage/sessions.ts +0 -495
  270. package/src/tools/bashSafety.ts +0 -186
  271. package/src/tools/bashTool.ts +0 -140
  272. package/src/tools/changeDirectoryTool.ts +0 -213
  273. package/src/tools/contracts.ts +0 -192
  274. package/src/tools/deleteFileTool.ts +0 -116
  275. package/src/tools/editTool.ts +0 -165
  276. package/src/tools/editUtils.ts +0 -170
  277. package/src/tools/fileDiff.ts +0 -261
  278. package/src/tools/listDirectoryTool.ts +0 -55
  279. package/src/tools/listSkillFilesTool.ts +0 -77
  280. package/src/tools/listSkillsTool.ts +0 -68
  281. package/src/tools/mcpResourceTools.ts +0 -95
  282. package/src/tools/permissionRules.ts +0 -85
  283. package/src/tools/privateContinuityEditTool.ts +0 -187
  284. package/src/tools/privateContinuityReadTool.ts +0 -106
  285. package/src/tools/readSkillTool.ts +0 -107
  286. package/src/tools/readTool.ts +0 -85
  287. package/src/tools/registry.ts +0 -103
  288. package/src/tools/writeFileTool.ts +0 -167
  289. package/src/ui/BrandSplash.tsx +0 -133
  290. package/src/ui/terminalTitle.ts +0 -30
  291. package/src/utils/images.ts +0 -140
  292. package/src/utils/markdownSegments.ts +0 -51
  293. package/src/utils/messages.ts +0 -37
  294. package/src/utils/withRetry.ts +0 -324
  295. /package/src/identity/{hub → manager}/continuity/state.ts +0 -0
  296. /package/src/identity/{hub → manager}/custody/helpers.ts +0 -0
  297. /package/src/identity/{hub → manager}/custody/preflight.ts +0 -0
  298. /package/src/identity/{hub → manager}/custody/state.ts +0 -0
  299. /package/src/identity/{hub → manager}/custody/useCustodyFlow.tsx +0 -0
  300. /package/src/identity/{hub → manager}/ens/EnsEditFlow.tsx +0 -0
  301. /package/src/identity/{hub → manager}/ens/advancedEnsValidation.ts +0 -0
  302. /package/src/identity/{hub → manager}/ens/state.ts +0 -0
  303. /package/src/identity/{hub → manager}/ens/transactions.ts +0 -0
  304. /package/src/identity/{hub → manager}/ens/types.ts +0 -0
  305. /package/src/identity/{hub → manager}/profile/identity.ts +0 -0
  306. /package/src/identity/{hub → manager}/restore/envelopes.ts +0 -0
  307. /package/src/identity/{hub → manager}/restore/helpers.ts +0 -0
  308. /package/src/identity/{hub → manager}/restore/recovery.ts +0 -0
  309. /package/src/identity/{hub → manager}/restore/resolve.ts +0 -0
  310. /package/src/identity/{hub → manager}/shared/components/BusyScreen.tsx +0 -0
  311. /package/src/identity/{hub → manager}/shared/components/NetworkScreen.tsx +0 -0
  312. /package/src/identity/{hub → manager}/shared/components/PinataJwtInput.tsx +0 -0
  313. /package/src/identity/{hub → manager}/shared/effects/receipts.ts +0 -0
  314. /package/src/identity/{hub → manager}/shared/effects/sync.ts +0 -0
  315. /package/src/identity/{hub → manager}/shared/model/format.ts +0 -0
  316. /package/src/identity/{hub → manager}/shared/operatorWallets.ts +0 -0
  317. /package/src/identity/{hub → manager}/shared/reconciliation/agentReconciliation/ownership.ts +0 -0
  318. /package/src/identity/{hub → manager}/shared/reconciliation/agentReconciliation/types.ts +0 -0
  319. /package/src/identity/{hub → manager}/shared/reconciliation/walletSetup.ts +0 -0
  320. /package/src/identity/{hub → manager}/shared/txGuard.ts +0 -0
  321. /package/src/identity/{hub → manager}/transfer/progress.ts +0 -0
  322. /package/src/identity/{hub → manager}/transfer/state.ts +0 -0
@@ -1,53 +0,0 @@
1
- import type { Address } from 'viem'
2
- import type { EthagentIdentity } from '../../../../storage/config.js'
3
- import type { BrowserWalletReady } from '../../../wallet/browserWallet.js'
4
- import type { Step } from '../../identityHubReducer.js'
5
-
6
- export type IdentityCompletionSource = 'create' | 'restore' | 'update'
7
-
8
- export type EffectCallbacks = {
9
- onStep: (step: Step) => void
10
- onWalletReady: (session: BrowserWalletReady | null) => void
11
- onIdentityComplete: (identity: EthagentIdentity, message: string, source?: IdentityCompletionSource) => Promise<void>
12
- onRestoreProgress?: (progress: RestoreProgress | null) => void
13
- onTokenTransferProgress?: (progress: TokenTransferProgress | null) => void
14
- onEnsClearProgress?: (progress: EnsClearProgress | null) => void
15
- onEnsLinkProgress?: (progress: EnsLinkProgress | null) => void
16
- onEnsUpdateProgress?: (progress: EnsUpdateProgress | null) => void
17
- onCustodySwitchAdvancedProgress?: (progress: CustodySwitchAdvancedProgress | null) => void
18
- }
19
-
20
- export type RestoreProgress = {
21
- phase: 'decrypting' | 'writing' | 'finishing'
22
- label: string
23
- }
24
-
25
- export type TokenTransferProgress = {
26
- phase: 'sender-sign' | 'target-sign' | 'pinning' | 'sender-transaction' | 'confirming'
27
- walletRole: 'sender' | 'receiver' | 'none'
28
- title: string
29
- detail: string
30
- label: string
31
- expectedAddress?: Address
32
- walletAction?: string
33
- }
34
-
35
- export type EnsClearProgress = {
36
- phase: 'records-tx' | 'records-confirming' | 'snapshot-sign' | 'snapshot-tx' | 'snapshot-confirming'
37
- label: string
38
- }
39
-
40
- export type EnsLinkProgress = {
41
- phase: 'registry-tx' | 'registry-confirming' | 'records-tx' | 'records-confirming' | 'snapshot-sign' | 'snapshot-tx' | 'snapshot-confirming'
42
- label: string
43
- }
44
-
45
- export type EnsUpdateProgress = {
46
- phase: 'records-tx' | 'records-confirming' | 'snapshot-sign' | 'snapshot-tx' | 'snapshot-confirming'
47
- label: string
48
- }
49
-
50
- export type CustodySwitchAdvancedProgress = {
51
- phase: 'deploy-tx' | 'deploy-confirming' | 'deposit-tx' | 'deposit-confirming' | 'reconcile-tx' | 'reconcile-confirming'
52
- label: string
53
- }
@@ -1,14 +0,0 @@
1
- export {
2
- invalidateOwnershipCache,
3
- preflightTokenOwnership,
4
- useAgentReconciliation,
5
- } from './useAgentReconciliation.js'
6
- export type {
7
- AgentReconciliation,
8
- } from './useAgentReconciliation.js'
9
- export {
10
- computeApprovalDiff,
11
- } from './walletSetup.js'
12
- export type {
13
- ApprovalDiff,
14
- } from './walletSetup.js'
@@ -1,278 +0,0 @@
1
- interface GrainientOptions {
2
- timeSpeed?: number;
3
- colorBalance?: number;
4
- warpStrength?: number;
5
- warpFrequency?: number;
6
- warpSpeed?: number;
7
- warpAmplitude?: number;
8
- blendAngle?: number;
9
- blendSoftness?: number;
10
- rotationAmount?: number;
11
- noiseScale?: number;
12
- grainAmount?: number;
13
- grainScale?: number;
14
- grainAnimated?: boolean;
15
- contrast?: number;
16
- gamma?: number;
17
- saturation?: number;
18
- centerX?: number;
19
- centerY?: number;
20
- zoom?: number;
21
- color1?: string;
22
- color2?: string;
23
- color3?: string;
24
- }
25
-
26
- function hexToRgb(hex: string): [number, number, number] {
27
- const m = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
28
- if (!m) return [1, 1, 1];
29
- return [
30
- parseInt(m[1]!, 16) / 255,
31
- parseInt(m[2]!, 16) / 255,
32
- parseInt(m[3]!, 16) / 255,
33
- ];
34
- }
35
-
36
- const GRAINIENT_VERTEX = `#version 300 es
37
- in vec2 position;
38
- void main() {
39
- gl_Position = vec4(position, 0.0, 1.0);
40
- }
41
- `;
42
-
43
- const GRAINIENT_FRAGMENT = `#version 300 es
44
- precision highp float;
45
- uniform vec2 iResolution;
46
- uniform float iTime;
47
- uniform float uTimeSpeed;
48
- uniform float uColorBalance;
49
- uniform float uWarpStrength;
50
- uniform float uWarpFrequency;
51
- uniform float uWarpSpeed;
52
- uniform float uWarpAmplitude;
53
- uniform float uBlendAngle;
54
- uniform float uBlendSoftness;
55
- uniform float uRotationAmount;
56
- uniform float uNoiseScale;
57
- uniform float uGrainAmount;
58
- uniform float uGrainScale;
59
- uniform float uGrainAnimated;
60
- uniform float uContrast;
61
- uniform float uGamma;
62
- uniform float uSaturation;
63
- uniform vec2 uCenterOffset;
64
- uniform float uZoom;
65
- uniform vec3 uColor1;
66
- uniform vec3 uColor2;
67
- uniform vec3 uColor3;
68
- out vec4 fragColor;
69
- #define S(a,b,t) smoothstep(a,b,t)
70
- mat2 Rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
71
- vec2 hash(vec2 p){p=vec2(dot(p,vec2(2127.1,81.17)),dot(p,vec2(1269.5,283.37)));return fract(sin(p)*43758.5453);}
72
- float noise(vec2 p){vec2 i=floor(p),f=fract(p),u=f*f*(3.0-2.0*f);float n=mix(mix(dot(-1.0+2.0*hash(i+vec2(0.0,0.0)),f-vec2(0.0,0.0)),dot(-1.0+2.0*hash(i+vec2(1.0,0.0)),f-vec2(1.0,0.0)),u.x),mix(dot(-1.0+2.0*hash(i+vec2(0.0,1.0)),f-vec2(0.0,1.0)),dot(-1.0+2.0*hash(i+vec2(1.0,1.0)),f-vec2(1.0,1.0)),u.x),u.y);return 0.5+0.5*n;}
73
- void mainImage(out vec4 o, vec2 C){
74
- float t=iTime*uTimeSpeed;
75
- vec2 uv=C/iResolution.xy;
76
- float ratio=iResolution.x/iResolution.y;
77
- vec2 tuv=uv-0.5+uCenterOffset;
78
- tuv/=max(uZoom,0.001);
79
-
80
- float degree=noise(vec2(t*0.1,tuv.x*tuv.y)*uNoiseScale);
81
- tuv.y*=1.0/ratio;
82
- tuv*=Rot(radians((degree-0.5)*uRotationAmount+180.0));
83
- tuv.y*=ratio;
84
-
85
- float frequency=uWarpFrequency;
86
- float ws=max(uWarpStrength,0.001);
87
- float amplitude=uWarpAmplitude/ws;
88
- float warpTime=t*uWarpSpeed;
89
- tuv.x+=sin(tuv.y*frequency+warpTime)/amplitude;
90
- tuv.y+=sin(tuv.x*(frequency*1.5)+warpTime)/(amplitude*0.5);
91
-
92
- vec3 colLav=uColor1;
93
- vec3 colOrg=uColor2;
94
- vec3 colDark=uColor3;
95
- float b=uColorBalance;
96
- float s=max(uBlendSoftness,0.0);
97
- mat2 blendRot=Rot(radians(uBlendAngle));
98
- float blendX=(tuv*blendRot).x;
99
- float edge0=-0.3-b-s;
100
- float edge1=0.2-b+s;
101
- float v0=0.5-b+s;
102
- float v1=-0.3-b-s;
103
- vec3 layer1=mix(colDark,colOrg,S(edge0,edge1,blendX));
104
- vec3 layer2=mix(colOrg,colLav,S(edge0,edge1,blendX));
105
- vec3 col=mix(layer1,layer2,S(v0,v1,tuv.y));
106
-
107
- vec2 grainUv=uv*max(uGrainScale,0.001);
108
- if(uGrainAnimated>0.5){grainUv+=vec2(iTime*0.05);}
109
- float grain=fract(sin(dot(grainUv,vec2(12.9898,78.233)))*43758.5453);
110
- col+=(grain-0.5)*uGrainAmount;
111
-
112
- col=(col-0.5)*uContrast+0.5;
113
- float luma=dot(col,vec3(0.2126,0.7152,0.0722));
114
- col=mix(vec3(luma),col,uSaturation);
115
- col=pow(max(col,0.0),vec3(1.0/max(uGamma,0.001)));
116
- col=clamp(col,0.0,1.0);
117
-
118
- o=vec4(col,1.0);
119
- }
120
- void main(){
121
- vec4 o=vec4(0.0);
122
- mainImage(o,gl_FragCoord.xy);
123
- fragColor=o;
124
- }
125
- `;
126
-
127
- function compileShader(gl: WebGL2RenderingContext, type: number, src: string): WebGLShader {
128
- const sh = gl.createShader(type)!;
129
- gl.shaderSource(sh, src);
130
- gl.compileShader(sh);
131
- if (!gl.getShaderParameter(sh, gl.COMPILE_STATUS)) {
132
- const log = gl.getShaderInfoLog(sh);
133
- gl.deleteShader(sh);
134
- throw new Error("Shader compile failed: " + log);
135
- }
136
- return sh;
137
- }
138
-
139
- export function startGrainient(canvas: HTMLCanvasElement, opts: GrainientOptions = {}): () => void {
140
- const o: Required<GrainientOptions> = {
141
- timeSpeed: 0.25,
142
- colorBalance: 0.0,
143
- warpStrength: 1.0,
144
- warpFrequency: 5.0,
145
- warpSpeed: 2.0,
146
- warpAmplitude: 10.0,
147
- blendAngle: 0.0,
148
- blendSoftness: 0.05,
149
- rotationAmount: 500.0,
150
- noiseScale: 2.0,
151
- grainAmount: 0.1,
152
- grainScale: 2.0,
153
- grainAnimated: false,
154
- contrast: 1.5,
155
- gamma: 1.0,
156
- saturation: 1.0,
157
- centerX: 0.0,
158
- centerY: 0.0,
159
- zoom: 0.9,
160
- color1: "#000422",
161
- color2: "#d8dcfa",
162
- color3: "#000422",
163
- ...opts,
164
- };
165
-
166
- const gl = canvas.getContext("webgl2", { alpha: true, antialias: false, premultipliedAlpha: true });
167
- if (!gl) {
168
- canvas.style.display = "none";
169
- return () => {};
170
- }
171
-
172
- const vs = compileShader(gl, gl.VERTEX_SHADER, GRAINIENT_VERTEX);
173
- const fs = compileShader(gl, gl.FRAGMENT_SHADER, GRAINIENT_FRAGMENT);
174
- const prog = gl.createProgram()!;
175
- gl.attachShader(prog, vs);
176
- gl.attachShader(prog, fs);
177
- gl.linkProgram(prog);
178
- if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {
179
- throw new Error("Grainient link failed: " + gl.getProgramInfoLog(prog));
180
- }
181
-
182
- const vao = gl.createVertexArray();
183
- gl.bindVertexArray(vao);
184
- const buf = gl.createBuffer();
185
- gl.bindBuffer(gl.ARRAY_BUFFER, buf);
186
- gl.bufferData(
187
- gl.ARRAY_BUFFER,
188
- new Float32Array([-1, -1, 3, -1, -1, 3]),
189
- gl.STATIC_DRAW
190
- );
191
- const posLoc = gl.getAttribLocation(prog, "position");
192
- gl.enableVertexAttribArray(posLoc);
193
- gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, 0, 0);
194
-
195
- gl.useProgram(prog);
196
-
197
- const uloc = (name: string) => gl.getUniformLocation(prog, name);
198
- const u = {
199
- iTime: uloc("iTime"),
200
- iResolution: uloc("iResolution"),
201
- uTimeSpeed: uloc("uTimeSpeed"),
202
- uColorBalance: uloc("uColorBalance"),
203
- uWarpStrength: uloc("uWarpStrength"),
204
- uWarpFrequency: uloc("uWarpFrequency"),
205
- uWarpSpeed: uloc("uWarpSpeed"),
206
- uWarpAmplitude: uloc("uWarpAmplitude"),
207
- uBlendAngle: uloc("uBlendAngle"),
208
- uBlendSoftness: uloc("uBlendSoftness"),
209
- uRotationAmount: uloc("uRotationAmount"),
210
- uNoiseScale: uloc("uNoiseScale"),
211
- uGrainAmount: uloc("uGrainAmount"),
212
- uGrainScale: uloc("uGrainScale"),
213
- uGrainAnimated: uloc("uGrainAnimated"),
214
- uContrast: uloc("uContrast"),
215
- uGamma: uloc("uGamma"),
216
- uSaturation: uloc("uSaturation"),
217
- uCenterOffset: uloc("uCenterOffset"),
218
- uZoom: uloc("uZoom"),
219
- uColor1: uloc("uColor1"),
220
- uColor2: uloc("uColor2"),
221
- uColor3: uloc("uColor3"),
222
- };
223
-
224
- gl.uniform1f(u.uTimeSpeed, o.timeSpeed);
225
- gl.uniform1f(u.uColorBalance, o.colorBalance);
226
- gl.uniform1f(u.uWarpStrength, o.warpStrength);
227
- gl.uniform1f(u.uWarpFrequency, o.warpFrequency);
228
- gl.uniform1f(u.uWarpSpeed, o.warpSpeed);
229
- gl.uniform1f(u.uWarpAmplitude, o.warpAmplitude);
230
- gl.uniform1f(u.uBlendAngle, o.blendAngle);
231
- gl.uniform1f(u.uBlendSoftness, o.blendSoftness);
232
- gl.uniform1f(u.uRotationAmount, o.rotationAmount);
233
- gl.uniform1f(u.uNoiseScale, o.noiseScale);
234
- gl.uniform1f(u.uGrainAmount, o.grainAmount);
235
- gl.uniform1f(u.uGrainScale, o.grainScale);
236
- gl.uniform1f(u.uGrainAnimated, o.grainAnimated ? 1.0 : 0.0);
237
- gl.uniform1f(u.uContrast, o.contrast);
238
- gl.uniform1f(u.uGamma, o.gamma);
239
- gl.uniform1f(u.uSaturation, o.saturation);
240
- gl.uniform2f(u.uCenterOffset, o.centerX, o.centerY);
241
- gl.uniform1f(u.uZoom, o.zoom);
242
- const c1 = hexToRgb(o.color1);
243
- const c2 = hexToRgb(o.color2);
244
- const c3 = hexToRgb(o.color3);
245
- gl.uniform3f(u.uColor1, c1[0], c1[1], c1[2]);
246
- gl.uniform3f(u.uColor2, c2[0], c2[1], c2[2]);
247
- gl.uniform3f(u.uColor3, c3[0], c3[1], c3[2]);
248
-
249
- const dpr = Math.min(window.devicePixelRatio || 1, 2);
250
- const setSize = () => {
251
- const w = Math.max(1, Math.floor(canvas.clientWidth * dpr));
252
- const h = Math.max(1, Math.floor(canvas.clientHeight * dpr));
253
- if (canvas.width !== w || canvas.height !== h) {
254
- canvas.width = w;
255
- canvas.height = h;
256
- }
257
- gl.viewport(0, 0, w, h);
258
- gl.uniform2f(u.iResolution, w, h);
259
- };
260
-
261
- const ro = new ResizeObserver(setSize);
262
- ro.observe(canvas);
263
- setSize();
264
-
265
- const t0 = performance.now();
266
- let raf = 0;
267
- const loop = (t: number) => {
268
- gl.uniform1f(u.iTime, (t - t0) * 0.001);
269
- gl.drawArrays(gl.TRIANGLES, 0, 3);
270
- raf = requestAnimationFrame(loop);
271
- };
272
- raf = requestAnimationFrame(loop);
273
-
274
- return () => {
275
- cancelAnimationFrame(raf);
276
- ro.disconnect();
277
- };
278
- }
@@ -1,28 +0,0 @@
1
- export const glyphs = {
2
- eyes: `
3
- -+:
4
- :=- -%@@@%.
5
- *@@@@@#- *@@-
6
- +@@. +@
7
- @@= -#=-+++=+:
8
- #% .:===-: -@* +@@@@%
9
- *@-+@@@@@: %@@+ @@@=#@
10
- *@= @@@@@@@- .@.@@@@@@@ :
11
- @@+=@@@@@@@@@@@@: .% *@@@@@*-=
12
- #:-@ -@@@@@@@@@-+% @ -@@@- #
13
- : #+ @@@@@@@- -% =# =
14
- -@: *@ .+%%
15
- :%#: --
16
- .-:
17
- `,
18
- ellipsis: "…",
19
- };
20
-
21
- export function escapeHtml(value: unknown): string {
22
- return String(value == null ? "" : value)
23
- .replaceAll("&", "&amp;")
24
- .replaceAll("<", "&lt;")
25
- .replaceAll(">", "&gt;")
26
- .replaceAll("\"", "&quot;");
27
- }
28
- export function renderEyes(): string { return escapeHtml(glyphs.eyes); }
@@ -1,259 +0,0 @@
1
- export const BASE_CSS = String.raw`
2
- *,
3
- *::before,
4
- *::after { box-sizing: border-box; }
5
-
6
- :root {
7
- interpolate-size: allow-keywords;
8
- --font-ui: Inter, "SF Pro Text", "Segoe UI", system-ui, sans-serif;
9
- --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas,
10
- "DejaVu Sans Mono", "Liberation Mono", monospace;
11
- --font-display: Inter, "SF Pro Display", "Segoe UI", system-ui, sans-serif;
12
-
13
- --c-gray-900: #1f2330;
14
- --c-gray-800: #2f364a;
15
- --c-gray-700: #49526a;
16
- --c-gray-500: #6f7890;
17
- --c-gray-400: #949bb0;
18
- --c-blue-400: #5f8fff;
19
- --c-blue-500: #3f76ff;
20
- --c-blue-700: #2954c6;
21
- --c-danger: #e5484d;
22
- --c-success: #1aa86b;
23
-
24
- --mint-accent: #ededfd;
25
- --mint-accent-strong: #d8dcfa;
26
- --mint-accent-soft: rgba(237, 237, 253, 0.20);
27
- --mint-glow: rgba(237, 237, 253, 0.32);
28
- --c-text-accent: #9eaae0;
29
-
30
- --ease-standard: cubic-bezier(0.2, 0.0, 0, 1);
31
- --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
32
- --fg-1: #1f2330;
33
- }
34
-
35
- html, body { height: 100%; margin: 0; overflow: hidden; }
36
-
37
- body {
38
- position: relative;
39
- font-family: var(--font-ui);
40
- color: var(--fg-1);
41
- background: #120f17;
42
- display: grid;
43
- place-items: center;
44
- padding: clamp(18px, 3vw, 28px);
45
- }
46
-
47
-
48
- .grainient-canvas {
49
- position: fixed;
50
- inset: 0;
51
- width: 100%;
52
- height: 100%;
53
- display: block;
54
- z-index: 0;
55
- pointer-events: none;
56
- }
57
-
58
- main {
59
- position: relative;
60
- z-index: 1;
61
- width: min(700px, 100%);
62
- max-height: calc(100dvh - 36px);
63
- display: flex;
64
- flex-direction: column;
65
- background: #030509;
66
- color: #f1f1f1;
67
- border: 1px solid rgba(255, 255, 255, 0.06);
68
- border-radius: 26px;
69
- box-shadow:
70
- 0 1px 0 rgba(255, 255, 255, 0.04) inset,
71
- 0 -1px 0 rgba(0, 0, 0, 0.6) inset,
72
- 0 30px 80px -20px rgba(0, 0, 0, 0.75),
73
- 0 12px 28px -8px rgba(0, 0, 0, 0.5);
74
- overflow: hidden;
75
- height: fit-content;
76
-
77
- --c-gray-900: #f1f1f1;
78
- --c-gray-800: #d8d8d8;
79
- --c-gray-700: #b0b0b0;
80
- --c-gray-500: #8a8a8a;
81
- --c-gray-400: #6f6f6f;
82
- }
83
-
84
-
85
- .chrome {
86
- display: flex;
87
- align-items: center;
88
- justify-content: space-between;
89
- gap: 12px;
90
- padding: 12px 14px 12px 20px;
91
- border-bottom: 1px solid rgba(255, 255, 255, 0.06);
92
- background: transparent;
93
- flex: none;
94
- }
95
-
96
- .chrome-spacer { flex: 1 1 0; min-width: 0; }
97
-
98
- .chrome-title {
99
- flex: 0 1 auto;
100
- text-align: center;
101
- font-size: 11.5px;
102
- color: rgba(241, 241, 241, 0.55);
103
- font-weight: 500;
104
- letter-spacing: 0.01em;
105
- margin: 0;
106
- }
107
-
108
- .chrome-actions {
109
- flex: 1 1 0;
110
- display: flex;
111
- justify-content: flex-end;
112
- align-items: center;
113
- }
114
-
115
-
116
- .body {
117
- flex: 1;
118
- min-height: 0;
119
- padding: clamp(20px, 3vw, 28px) clamp(22px, 4vw, 32px) clamp(22px, 3vw, 30px);
120
- display: flex;
121
- flex-direction: column;
122
- gap: 15px;
123
- overflow: hidden;
124
- }
125
-
126
- .splash-wrap {
127
- flex: none;
128
- display: flex;
129
- justify-content: center;
130
- margin: 6px 0 2px;
131
- padding: 4px 0;
132
- }
133
-
134
- .splash {
135
- font-family: var(--font-mono);
136
- font-size: clamp(9.5px, 1.35vw, 11px);
137
- font-weight: 700;
138
- line-height: 1.05;
139
- letter-spacing: 0;
140
- white-space: pre;
141
- margin: 0;
142
- text-align: left;
143
- transform: scaleX(0.8);
144
- transform-origin: 50% 50%;
145
- color: rgba(255, 255, 255, 0.7);
146
- }
147
-
148
- .spinner {
149
- display: inline-block;
150
- width: 12px;
151
- height: 12px;
152
- border-radius: 999px;
153
- border: 1.5px solid color-mix(in srgb, var(--accent) 28%, transparent);
154
- border-top-color: var(--accent);
155
- animation: spin 0.9s linear infinite;
156
- }
157
-
158
- @keyframes spin { to { transform: rotate(360deg); } }
159
-
160
- [data-flow] {
161
- --accent: var(--mint-accent);
162
- --accent-soft: var(--mint-accent-soft);
163
- --glow: var(--mint-glow);
164
- }
165
-
166
- main, .head .label, .status, .status-line, .status-hint, .flow-detail,
167
- #error-block-slot, .net-pill {
168
- transition: height 480ms var(--ease-standard),
169
- background-color 320ms var(--ease-standard),
170
- border-color 320ms var(--ease-standard),
171
- color 320ms var(--ease-standard),
172
- box-shadow 320ms var(--ease-standard);
173
- }
174
-
175
- .status-line, .status-hint {
176
- transition: opacity 280ms var(--ease-standard),
177
- transform 280ms var(--ease-standard),
178
- color 320ms var(--ease-standard);
179
- }
180
-
181
- .status-line.is-changing, .status-hint.is-changing {
182
- opacity: 0;
183
- transform: translateY(-3px);
184
- }
185
-
186
- .head {
187
- display: flex;
188
- align-items: center;
189
- justify-content: space-between;
190
- gap: 12px;
191
- }
192
-
193
- .head .label {
194
- font-family: var(--font-ui);
195
- color: var(--c-gray-800);
196
- font-size: 11.5px;
197
- font-weight: 500;
198
- letter-spacing: 0;
199
- text-transform: capitalize;
200
- display: inline-flex;
201
- align-items: center;
202
- gap: 6px;
203
- padding: 5px 13px 5px 10px;
204
- background: rgba(255, 255, 255, 0.08);
205
- border-radius: 999px;
206
- border: 1px solid rgba(255, 255, 255, 0.14);
207
- backdrop-filter: blur(14px) saturate(140%);
208
- -webkit-backdrop-filter: blur(14px) saturate(140%);
209
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3),
210
- 0 1px 0 rgba(255, 255, 255, 0.08) inset;
211
- }
212
-
213
- .head .label::before {
214
- content: "";
215
- width: 7px;
216
- height: 7px;
217
- border-radius: 999px;
218
- background: #d8dcfa;
219
- border: 1px solid #a3a3c2;
220
- }
221
-
222
- .flow-title {
223
- font-family: var(--font-display);
224
- font-size: clamp(18px, 2.6vw, 20px);
225
- font-weight: 600;
226
- line-height: 1.22;
227
- letter-spacing: 0;
228
- margin: 0;
229
- color: var(--c-gray-900);
230
- text-wrap: balance;
231
- }
232
-
233
-
234
- .timeline {
235
- list-style: none;
236
- margin: 0;
237
- padding: 14px 10px 4px;
238
- display: flex;
239
- align-items: flex-start;
240
- justify-content: space-between;
241
- gap: 4px;
242
- background: transparent;
243
- border: 0;
244
- border-radius: 0;
245
- box-shadow: none;
246
- max-height: 96px;
247
- opacity: 1;
248
- overflow: visible;
249
- position: relative;
250
- transition: max-height 480ms var(--ease-standard),
251
- padding 480ms var(--ease-standard),
252
- margin 480ms var(--ease-standard),
253
- opacity 480ms var(--ease-standard);
254
- }
255
-
256
- .timeline[hidden] {
257
- display: flex;
258
- max-height: 0;
259
- `;