From 2034c0405448404612889a7b68eeab31cde82995 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Thu, 9 Jun 2022 11:28:21 +0200 Subject: [PATCH 01/75] add @babel/plugin-transform-runtime --- apps/remix-ide/.babelrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/.babelrc b/apps/remix-ide/.babelrc index e60d3036a3..58a023dfd5 100644 --- a/apps/remix-ide/.babelrc +++ b/apps/remix-ide/.babelrc @@ -1,4 +1,4 @@ { "presets": ["@babel/preset-env", "@babel/preset-react"], - "plugins": ["@babel/plugin-proposal-class-properties"] + "plugins": ["@babel/plugin-proposal-class-properties", "@babel/plugin-transform-runtime"] } From 08cc306bcd5822b14a752cbea8788288f29f6cee Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Wed, 8 Jun 2022 18:31:21 +0530 Subject: [PATCH 02/75] Readme updated for default template --- .../src/templates/remixDefault/README.txt | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/libs/remix-ws-templates/src/templates/remixDefault/README.txt b/libs/remix-ws-templates/src/templates/remixDefault/README.txt index 5e243584b2..d8c928011d 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/README.txt +++ b/libs/remix-ws-templates/src/templates/remixDefault/README.txt @@ -2,25 +2,27 @@ REMIX DEFAULT WORKSPACE Remix default workspace is present when: i. Remix loads for the very first time -ii. A new workspace is created +ii. A new workspace is created with 'Default' template iii. There are no files existing in the File Explorer This workspace contains 3 directories: 1. 'contracts': Holds three contracts with different complexity level, denoted with number prefix in file name. -2. 'scripts': Holds two scripts to deploy a contract. It is explained below. -3. 'tests': Contains one Solidity test file for 'Ballot' contract & one JS test file for 'Storage' contract +2. 'scripts': Contains four typescript files to deploy a contract. It is explained below. +3. 'tests': Contains one Solidity test file for 'Ballot' contract & one JS test file for 'Storage' contract. SCRIPTS -The 'scripts' folder contains two example async/await scripts for deploying the 'Storage' contract. -For the deployment of any other contract, 'contractName' and 'constructorArgs' should be updated (along with other code if required). +The 'scripts' folder have four typescript files which help to deploy the 'Storage' contract using 'web3.js' and 'ethers.js' libraries. -Also, there is a script containing some unit tests for Storage contract inside tests directory. +For the deployment of any other contract, just update contract name from 'Storage' to desired contract and provide constructor arguments accordingly +in the file `deploy_with_ethers.ts` or `deploy_with_web3.ts` + +Also, there is a script containing some Mocha-Chai unit tests for 'Storage' contract inside 'tests' directory. To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled. Output from script will appear in remix terminal. -Please note, 'require' statement is supported in a limited manner for Remix supported modules. -For now, modules supported by Remix are ethers, web3, swarmgw, chai, remix and hardhat only for hardhat.ethers object/plugin. -For unsupported modules, an error like this will be thrown: ' module require is not supported by Remix IDE will be shown.' \ No newline at end of file +Please note, require/import is supported in a limited manner for Remix supported modules. +For now, modules supported by Remix are ethers, web3, swarmgw, chai, multihashes, remix and hardhat only for hardhat.ethers object/plugin. +For unsupported modules, an error like this will be thrown: ' module require is not supported by Remix IDE' will be shown. \ No newline at end of file From cec1e52aa1d9de8133b856c270c9efdd5e3fd814 Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Wed, 8 Jun 2022 19:03:04 +0530 Subject: [PATCH 03/75] e2e fix --- apps/remix-ide-e2e/src/tests/search.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/search.test.ts b/apps/remix-ide-e2e/src/tests/search.test.ts index b2cff57b7c..9791bae4c5 100644 --- a/apps/remix-ide-e2e/src/tests/search.test.ts +++ b/apps/remix-ide-e2e/src/tests/search.test.ts @@ -33,11 +33,11 @@ module.exports = { .clearValue('*[id="search_include"]').pause(2000) .setValue('*[id="search_include"]', '**').sendKeys('*[id="search_include"]', browser.Keys.ENTER).pause(4000) .elements('css selector', '.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 61) + Array.isArray(res.value) && browser.assert.equal(res.value.length, 62) }) .setValue('*[id="search_exclude"]', ',contracts/**').sendKeys('*[id="search_exclude"]', browser.Keys.ENTER).pause(4000) .elements('css selector', '.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 55) + Array.isArray(res.value) && browser.assert.equal(res.value.length, 56) }) .clearValue('*[id="search_include"]').setValue('*[id="search_include"]', '*.sol, *.js, *.txt') .clearValue('*[id="search_exclude"]').setValue('*[id="search_exclude"]', '.*/**/*') @@ -78,7 +78,7 @@ module.exports = { .clearValue('*[id="search_input"]') .setValue('*[id="search_input"]', 'contract').sendKeys('*[id="search_input"]', browser.Keys.ENTER).pause(4000) .elements('css selector', '.search_plugin_search_line', (res) => { - Array.isArray(res.value) && browser.assert.equal(res.value.length, 13) + Array.isArray(res.value) && browser.assert.equal(res.value.length, 15) }) }, 'Should replace text': function (browser: NightwatchBrowser) { From f939a3e3fe2d9661cb7e2536f5316adb9846fcce Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Fri, 10 Jun 2022 12:56:43 +0530 Subject: [PATCH 04/75] text update --- .../src/templates/remixDefault/README.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/remix-ws-templates/src/templates/remixDefault/README.txt b/libs/remix-ws-templates/src/templates/remixDefault/README.txt index d8c928011d..b9eaf4a25b 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/README.txt +++ b/libs/remix-ws-templates/src/templates/remixDefault/README.txt @@ -13,12 +13,12 @@ This workspace contains 3 directories: SCRIPTS -The 'scripts' folder have four typescript files which help to deploy the 'Storage' contract using 'web3.js' and 'ethers.js' libraries. +The 'scripts' folder has four typescript files which help to deploy the 'Storage' contract using 'web3.js' and 'ethers.js' libraries. -For the deployment of any other contract, just update contract name from 'Storage' to desired contract and provide constructor arguments accordingly +For the deployment of any other contract, just update the contract's name from 'Storage' to the desired contract and provide constructor arguments accordingly in the file `deploy_with_ethers.ts` or `deploy_with_web3.ts` -Also, there is a script containing some Mocha-Chai unit tests for 'Storage' contract inside 'tests' directory. +In the 'tests' folder there is a script containing Mocha-Chai unit tests for 'Storage' contract. To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled. Output from script will appear in remix terminal. From 5d409a556c89ebb4e7bd2f176f5b3e9001809175 Mon Sep 17 00:00:00 2001 From: Aniket <30843294+Aniket-Engg@users.noreply.github.com> Date: Wed, 15 Jun 2022 19:38:24 +0530 Subject: [PATCH 05/75] Update README.txt --- libs/remix-ws-templates/src/templates/remixDefault/README.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-ws-templates/src/templates/remixDefault/README.txt b/libs/remix-ws-templates/src/templates/remixDefault/README.txt index b9eaf4a25b..e27de83769 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/README.txt +++ b/libs/remix-ws-templates/src/templates/remixDefault/README.txt @@ -7,7 +7,7 @@ iii. There are no files existing in the File Explorer This workspace contains 3 directories: -1. 'contracts': Holds three contracts with different complexity level, denoted with number prefix in file name. +1. 'contracts': Holds three contracts with increasing levels of complexity. 2. 'scripts': Contains four typescript files to deploy a contract. It is explained below. 3. 'tests': Contains one Solidity test file for 'Ballot' contract & one JS test file for 'Storage' contract. @@ -25,4 +25,4 @@ Output from script will appear in remix terminal. Please note, require/import is supported in a limited manner for Remix supported modules. For now, modules supported by Remix are ethers, web3, swarmgw, chai, multihashes, remix and hardhat only for hardhat.ethers object/plugin. -For unsupported modules, an error like this will be thrown: ' module require is not supported by Remix IDE' will be shown. \ No newline at end of file +For unsupported modules, an error like this will be thrown: ' module require is not supported by Remix IDE' will be shown. From ced2d12656f969eda0c1abe5dc34ffc1e25d2652 Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Thu, 9 Jun 2022 14:44:20 +0530 Subject: [PATCH 06/75] check if file to import already exists --- libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx b/libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx index 05f7c32125..2690dfc840 100644 --- a/libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx +++ b/libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx @@ -54,13 +54,16 @@ export const RemixUiHomeTab = (props: RemixUiHomeTabProps) => { contentImport.import( state.importSource, (loadingMsg) => dispatch({ tooltip: loadingMsg }), - (error, content, cleanUrl, type, url) => { + async (error, content, cleanUrl, type, url) => { if (error) { toast(error.message || error) } else { try { - workspace.addExternal(type + '/' + cleanUrl, content, url) - plugin.call('menuicons', 'select', 'filePanel') + if (await workspace.exists(type + '/' + cleanUrl)) toast('File already exists in workspace') + else { + workspace.addExternal(type + '/' + cleanUrl, content, url) + plugin.call('menuicons', 'select', 'filePanel') + } } catch (e) { toast(e.message) } From 581048c087048f4fdab2946678098b73fb8c98c7 Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Wed, 15 Jun 2022 17:06:28 +0530 Subject: [PATCH 07/75] minor fixes --- apps/remix-ide/src/remixAppManager.js | 3 +-- libs/remix-ui/workspace/src/lib/types/index.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js index 0868ef8689..bf8c5dccd3 100644 --- a/apps/remix-ide/src/remixAppManager.js +++ b/apps/remix-ide/src/remixAppManager.js @@ -19,8 +19,7 @@ const sensitiveCalls = { } export function isNative(name) { - const nativePlugins = ['vyper', 'workshops', 'debugger', 'remixd', 'menuicons', 'solidity', 'solidity-logic', - 'hardhat-provider', 'solidityStaticAnalysis', 'solidityUnitTesting', 'layout', 'notification', 'hardhat-provider', 'ganache-provider'] + const nativePlugins = ['vyper', 'workshops', 'debugger', 'remixd', 'menuicons', 'solidity', 'solidity-logic', 'solidityStaticAnalysis', 'solidityUnitTesting', 'layout', 'notification', 'hardhat-provider', 'ganache-provider'] return nativePlugins.includes(name) || requiredModules.includes(name) } diff --git a/libs/remix-ui/workspace/src/lib/types/index.ts b/libs/remix-ui/workspace/src/lib/types/index.ts index b2d490713b..fb169db5e8 100644 --- a/libs/remix-ui/workspace/src/lib/types/index.ts +++ b/libs/remix-ui/workspace/src/lib/types/index.ts @@ -13,7 +13,7 @@ export interface JSONStandardInput { }; } export type MenuItems = action[] -export type WorkspaceTemplate = 'gist-template' | 'code-template' | 'remixDefault' | 'blank' | 'erc20' +export type WorkspaceTemplate = 'gist-template' | 'code-template' | 'remixDefault' | 'blank' | 'ozerc20' | 'zeroxErc20' | 'ozerc721' export interface WorkspaceProps { plugin: { setWorkspace: ({ name: string, isLocalhost: boolean }, setEvent: boolean) => void, From 7749cfb04ccc6e96934d5e7423ac13dd22fd5dbf Mon Sep 17 00:00:00 2001 From: 8times4 <46720448+8times4@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:27:25 +0200 Subject: [PATCH 08/75] add foundry provider draft --- apps/remix-ide/src/app.js | 3 ++ .../src/app/tabs/foundry-provider.tsx | 33 +++++++++++++++++++ apps/remix-ide/src/app/udapp/run-tab.js | 14 ++++++++ 3 files changed, 50 insertions(+) create mode 100644 apps/remix-ide/src/app/tabs/foundry-provider.tsx diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index 30e653731d..4eb9423d38 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -27,6 +27,7 @@ import { NotificationPlugin } from './app/plugins/notification' import { Blockchain } from './blockchain/blockchain.js' import { HardhatProvider } from './app/tabs/hardhat-provider' import { GanacheProvider } from './app/tabs/ganache-provider' +import { FoundryProvider } from './app/tabs/foundry-provider' const isElectron = require('is-electron') @@ -177,6 +178,7 @@ class AppComponent { const web3Provider = new Web3ProviderModule(blockchain) const hardhatProvider = new HardhatProvider(blockchain) const ganacheProvider = new GanacheProvider(blockchain) + const foundryProvider = new FoundryProvider(blockchain) // ----------------- convert offset to line/column service ----------- const offsetToLineColumnConverter = new OffsetToLineColumnConverter() Registry.getInstance().put({ @@ -233,6 +235,7 @@ class AppComponent { storagePlugin, hardhatProvider, ganacheProvider, + foundryProvider, this.walkthroughService, search ]) diff --git a/apps/remix-ide/src/app/tabs/foundry-provider.tsx b/apps/remix-ide/src/app/tabs/foundry-provider.tsx new file mode 100644 index 0000000000..47e899865a --- /dev/null +++ b/apps/remix-ide/src/app/tabs/foundry-provider.tsx @@ -0,0 +1,33 @@ +import * as packageJson from '../../../../../package.json' +import { Plugin } from '@remixproject/engine' +import { AppModal, AlertModal, ModalTypes } from '@remix-ui/app' +import React from 'react' // eslint-disable-line +import { Blockchain } from '../../blockchain/blockchain' +import { ethers } from 'ethers' +import { AbstractProvider } from './abstract-provider' + +const profile = { + name: 'foundry-provider', + displayName: 'Foundry Provider', + kind: 'provider', + description: 'Anvil', + methods: ['sendAsync'], + version: packageJson.version +} + +export class FoundryProvider extends AbstractProvider { + constructor (blockchain) { + super(profile, blockchain, 'http://127.0.0.1:8545') + } + + body (): JSX.Element { + return ( +
Note: To run Anvil on your system, run +
curl -L https://foundry.paradigm.xyz | bash
+
anvil
+ For more info, visit: Foundry Documentation +
Anvil JSON-RPC Endpoint:
+
+ ) + } +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/udapp/run-tab.js b/apps/remix-ide/src/app/udapp/run-tab.js index 0f59ddd962..020c2a34df 100644 --- a/apps/remix-ide/src/app/udapp/run-tab.js +++ b/apps/remix-ide/src/app/udapp/run-tab.js @@ -127,6 +127,20 @@ export class RunTab extends ViewPlugin { } }) + await this.call('blockchain', 'addProvider', { + name: 'Foundry Provider', + provider: { + async sendAsync (payload, callback) { + try { + const result = await udapp.call('foundry-provider', 'sendAsync', payload) + callback(null, result) + } catch (e) { + callback(e) + } + } + } + }) + await this.call('blockchain', 'addProvider', { name: 'Wallet Connect', provider: { From a0ad00821442d3ab823b68fe5ddb4537c7e8ae03 Mon Sep 17 00:00:00 2001 From: 8times4 <46720448+8times4@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:56:03 +0200 Subject: [PATCH 09/75] add provider test for foundry --- .../remix-ide-e2e/src/tests/providers.test.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/apps/remix-ide-e2e/src/tests/providers.test.ts b/apps/remix-ide-e2e/src/tests/providers.test.ts index 8bbfa7636b..83f69d699b 100644 --- a/apps/remix-ide-e2e/src/tests/providers.test.ts +++ b/apps/remix-ide-e2e/src/tests/providers.test.ts @@ -29,5 +29,26 @@ module.exports = { .waitForElementVisible('*[data-id="ganache-providerModalDialogModalBody-react"]') .modalFooterOKClick('ganache-provider') .waitForElementContainsText('*[data-id="settingsNetworkEnv"]', 'Custom (') + }, + 'Should switch to foundry provider, set a custom URL and fail to connect': function (browser: NightwatchBrowser) { + browser.click('*[data-id="Foundry Provider"]') + .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') + .execute(() => { + (document.querySelector('*[data-id="foundry-providerModalDialogModalBody-react"] input') as any).focus() + }, [], () => {}) + .clearValue('*[data-id="foundry-providerModalDialogModalBody-react"] input') + .setValue('*[data-id="foundry-providerModalDialogModalBody-react"] input', 'http://127.0.0.1:8084') + .modalFooterOKClick('foundry-provider') + .waitForElementContainsText('*[data-id="foundry-providerModalDialogModalBody-react"]', 'Error while connecting to the provider') + .modalFooterOKClick('foundry-provider') + .waitForElementNotVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') + .pause(1000) + +}, + 'Should switch to foundry provider, use the default foundry URL and succeed to connect': function (browser: NightwatchBrowser) { + browser.click('*[data-id="Foundry Provider"]') + .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') + .modalFooterOKClick('foundry-provider') + .waitForElementContainsText('*[data-id="settingsNetworkEnv"]', 'Custom (') } } From 79b668b8218279cd19c24987577d62f4ea80d249 Mon Sep 17 00:00:00 2001 From: M <46720448+8times4@users.noreply.github.com> Date: Wed, 8 Jun 2022 22:30:05 +0200 Subject: [PATCH 10/75] add new line --- apps/remix-ide-e2e/src/tests/providers.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remix-ide-e2e/src/tests/providers.test.ts b/apps/remix-ide-e2e/src/tests/providers.test.ts index 83f69d699b..486b75ab73 100644 --- a/apps/remix-ide-e2e/src/tests/providers.test.ts +++ b/apps/remix-ide-e2e/src/tests/providers.test.ts @@ -30,6 +30,7 @@ module.exports = { .modalFooterOKClick('ganache-provider') .waitForElementContainsText('*[data-id="settingsNetworkEnv"]', 'Custom (') }, + 'Should switch to foundry provider, set a custom URL and fail to connect': function (browser: NightwatchBrowser) { browser.click('*[data-id="Foundry Provider"]') .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') From a0035979d8bca31d46717844cbee828d380de02e Mon Sep 17 00:00:00 2001 From: 8times4 <46720448+8times4@users.noreply.github.com> Date: Wed, 8 Jun 2022 23:28:23 +0200 Subject: [PATCH 11/75] fix provider test --- apps/remix-ide-e2e/src/tests/providers.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/providers.test.ts b/apps/remix-ide-e2e/src/tests/providers.test.ts index 486b75ab73..630706c509 100644 --- a/apps/remix-ide-e2e/src/tests/providers.test.ts +++ b/apps/remix-ide-e2e/src/tests/providers.test.ts @@ -30,9 +30,11 @@ module.exports = { .modalFooterOKClick('ganache-provider') .waitForElementContainsText('*[data-id="settingsNetworkEnv"]', 'Custom (') }, - + 'Should switch to foundry provider, set a custom URL and fail to connect': function (browser: NightwatchBrowser) { - browser.click('*[data-id="Foundry Provider"]') + browser.waitForElementVisible('div[data-id="remixIdeIconPanel"]', 10000) + .clickLaunchIcon('udapp') + .click('*[data-id="Foundry Provider"]') .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') .execute(() => { (document.querySelector('*[data-id="foundry-providerModalDialogModalBody-react"] input') as any).focus() From 065df4a7f2969e675992f7415ceee6af4e13a224 Mon Sep 17 00:00:00 2001 From: 8x4 <46720448+8times4@users.noreply.github.com> Date: Thu, 9 Jun 2022 00:13:58 +0200 Subject: [PATCH 12/75] fix testing --- apps/remix-ide-e2e/src/tests/providers.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/providers.test.ts b/apps/remix-ide-e2e/src/tests/providers.test.ts index 630706c509..b2c883fd53 100644 --- a/apps/remix-ide-e2e/src/tests/providers.test.ts +++ b/apps/remix-ide-e2e/src/tests/providers.test.ts @@ -33,7 +33,6 @@ module.exports = { 'Should switch to foundry provider, set a custom URL and fail to connect': function (browser: NightwatchBrowser) { browser.waitForElementVisible('div[data-id="remixIdeIconPanel"]', 10000) - .clickLaunchIcon('udapp') .click('*[data-id="Foundry Provider"]') .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') .execute(() => { @@ -45,6 +44,9 @@ module.exports = { .waitForElementContainsText('*[data-id="foundry-providerModalDialogModalBody-react"]', 'Error while connecting to the provider') .modalFooterOKClick('foundry-provider') .waitForElementNotVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') + .waitForElementVisible('*[data-id="PermissionHandler-modal-footer-ok-react"]') + .click('*[data-id="PermissionHandler-modal-footer-ok-react"]') + .waitForElementNotVisible('*[data-id="PermissionHandler-modal-footer-ok-react"]') .pause(1000) }, From f537386bbf2244e67f1ab69810e9faa9f7a7a63c Mon Sep 17 00:00:00 2001 From: lianahus Date: Thu, 9 Jun 2022 11:51:53 +0200 Subject: [PATCH 13/75] fixing udapp deployed item layout --- .../run-tab/src/lib/components/instanceContainerUI.tsx | 2 +- libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx | 4 ++-- libs/remix-ui/run-tab/src/lib/css/run-tab.css | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx b/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx index afc97b9dac..84faf56661 100644 --- a/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx @@ -12,7 +12,7 @@ export function InstanceContainerUI (props: InstanceContainerProps) { return (
-