diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4c0fbf99fc7..25d3664e6b9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,7 +58,7 @@ Then, create a `index.js` file like this, import panelJson from './panel.json'; import enJson from '../en'; -// There may have some un-translated content. Always fill in the gaps with EN JSON. +// There may have some untranslated content. Always fill in the gaps with EN JSON. // No need for a defaultMessage prop when render a FormattedMessage component. export default Object.assign({}, enJson, { ...panelJson, @@ -84,7 +84,7 @@ If you search `FormattedMessage` or `intl.formatMessage` in this project, you wi **Why?** -Each non-english language will be filled in the gaps with english. Even though there may be some un-translated content, it will always use english as defaultMessage. That's why we don't need to provide a `defaultMessage` prop each time we render a `FormattedMessage` component. +Each non-english language will be filled in the gaps with english. Even though there may be some untranslated content, it will always use english as defaultMessage. That's why we don't need to provide a `defaultMessage` prop each time we render a `FormattedMessage` component. But in some cases, the `id` prop may not be static. For example, ```jsx diff --git a/apps/remix-ide-e2e/src/commands/selectAccount.ts b/apps/remix-ide-e2e/src/commands/selectAccount.ts index d7447d891c8..c4230a52533 100644 --- a/apps/remix-ide-e2e/src/commands/selectAccount.ts +++ b/apps/remix-ide-e2e/src/commands/selectAccount.ts @@ -5,7 +5,9 @@ class SelectAccount extends EventEmitter { command (this: NightwatchBrowser, account?: string): NightwatchBrowser { if (account) { this.api - .click(`select[data-id="runTabSelectAccount"] [value="${account}"]`) + .click(`*[data-id="runTabSelectAccount"]`) //open the dropdown + .waitForElementVisible(`*[data-id="${account}"]`) + .click(`*[data-id="${account}"]`) //close the dropdown .perform(() => { this.emit('complete') }) diff --git a/apps/remix-ide-e2e/src/commands/switchEnvironment.ts b/apps/remix-ide-e2e/src/commands/switchEnvironment.ts index bd58e3121c0..3c748f24638 100644 --- a/apps/remix-ide-e2e/src/commands/switchEnvironment.ts +++ b/apps/remix-ide-e2e/src/commands/switchEnvironment.ts @@ -4,35 +4,35 @@ import EventEmitter from 'events' class switchEnvironment extends EventEmitter { command (this: NightwatchBrowser, provider: string): NightwatchBrowser { this.api.useCss().waitForElementVisible('[data-id="settingsSelectEnvOptions"]') - .perform((done) => { - this.api.isPresent({ selector: `[data-id="selected-provider-${provider}"]`, suppressNotFoundErrors: true, timeout: 5000}, (result) => { - if (result.value) { - done() - } else { - browser.perform(() => { - this.api - .click('[data-id="settingsSelectEnvOptions"] button') // open dropdown - .isPresent({ selector: `[data-id="dropdown-item-${provider}"]`, suppressNotFoundErrors: true, timeout: 5000}, (result) => { - console.log(result) - this.api.click('[data-id="settingsSelectEnvOptions"] button') // close dropdown - if (!result.value) { - this.api.pinGrid(provider, true) - .click('[data-id="settingsSelectEnvOptions"] button') - .waitForElementVisible(`[data-id="dropdown-item-${provider}"]`) - .click(`[data-id="dropdown-item-${provider}"]`) - .perform(() => done()) - } else { - browser.click('[data-id="settingsSelectEnvOptions"] button') - .waitForElementVisible(`[data-id="dropdown-item-${provider}"]`) - .click(`[data-id="dropdown-item-${provider}"]`) - .perform(() => done()) - } - }) - }) - } - }) - }).perform(() => this.emit('complete')) - + .perform((done) => { + this.api.isPresent({ selector: `[data-id="selected-provider-${provider}"]`, suppressNotFoundErrors: true, timeout: 5000 }, (result) => { + if (result.value) { + done() + } else { + browser.perform(() => { + this.api + .click('[data-id="settingsSelectEnvOptions"] button') // open dropdown + .isPresent({ selector: `[data-id="dropdown-item-${provider}"]`, suppressNotFoundErrors: true, timeout: 5000 }, (result) => { + console.log(result) + this.api.click('[data-id="settingsSelectEnvOptions"] button') // close dropdown + if (!result.value) { + this.api.pinGrid(provider, true) + .click('[data-id="settingsSelectEnvOptions"] button') + .waitForElementVisible(`[data-id="dropdown-item-${provider}"]`) + .click(`[data-id="dropdown-item-${provider}"]`) + .perform(() => done()) + } else { + browser.click('[data-id="settingsSelectEnvOptions"] button') + .waitForElementVisible(`[data-id="dropdown-item-${provider}"]`) + .click(`[data-id="dropdown-item-${provider}"]`) + .perform(() => done()) + } + }) + }) + } + }) + }).perform(() => this.emit('complete')) + return this } } diff --git a/apps/remix-ide-e2e/src/tests/ballot_0_4_14.test.ts b/apps/remix-ide-e2e/src/tests/ballot_0_4_14.test.ts index 61d08b5735f..4f03f48505b 100644 --- a/apps/remix-ide-e2e/src/tests/ballot_0_4_14.test.ts +++ b/apps/remix-ide-e2e/src/tests/ballot_0_4_14.test.ts @@ -36,6 +36,7 @@ module.exports = { browser.pause(500) .clickLaunchIcon('udapp') .selectAccount('0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c') + .pause() .setValue('input[placeholder="uint8 _numProposals"]', '2') .click('*[data-id="Deploy - transact (not payable)"]') .waitForElementPresent('*[data-id="universalDappUiContractActionWrapper"]', 60000) diff --git a/apps/remix-ide-e2e/src/tests/publishContract.test.ts b/apps/remix-ide-e2e/src/tests/publishContract.test.ts index f397ed81676..3bd0d3576d7 100644 --- a/apps/remix-ide-e2e/src/tests/publishContract.test.ts +++ b/apps/remix-ide-e2e/src/tests/publishContract.test.ts @@ -38,7 +38,7 @@ module.exports = { .openFile('ipfs/QmXYUS1ueS22EqNVRaKuZa31EgHLjKZ8uTM8vWhQLxa3pw') }, - /* Disabling the test until refactoring and the new swarm usage + 'Publish on Swarm': '' + function (browser: NightwatchBrowser) { browser .click('#publishOnSwarm') @@ -54,7 +54,7 @@ module.exports = { }) .click('[data-id="publishToStorage-modal-footer-ok-react"]') }, - */ + 'Should publish contract metadata to ipfs on deploy': function (browser: NightwatchBrowser) { browser diff --git a/apps/remix-ide-e2e/src/tests/terminal.test.ts b/apps/remix-ide-e2e/src/tests/terminal.test.ts index b20eac082c5..c403d1aad93 100644 --- a/apps/remix-ide-e2e/src/tests/terminal.test.ts +++ b/apps/remix-ide-e2e/src/tests/terminal.test.ts @@ -300,9 +300,10 @@ module.exports = { browser .clickLaunchIcon('udapp') .switchEnvironment('vm-mainnet-fork') + .click('*[data-id="runTabSelectAccount"]') .waitForElementPresent({ locateStrategy: 'css selector', - selector: 'select[data-id="runTabSelectAccount"] option[value="0xdD870fA1b7C4700F2BD7f44238821C26f7392148"]', + selector: '*[data-id="0xdD870fA1b7C4700F2BD7f44238821C26f7392148"]', timeout: 240000 }) .executeScriptInTerminal(`web3.eth.getCode('0x180587b00c8642e2c7ac3a758712d97e6f7bdcc7')`) // mainnet contract @@ -361,10 +362,10 @@ module.exports = { Resolver resolver = ens.resolver(node); console.log(resolver.addr(node)); } - ` + ` if (runMasterTests) { const path = "//*[@class='view-line' and contains(.,'resolveENS') and contains(.,'view')]//span//span[contains(.,'(')]" - + browser // .clickLaunchIcon('udapp') .switchEnvironment('vm-mainnet-fork') @@ -401,8 +402,8 @@ module.exports = { .waitForElementVisible('#editorView') .pause(10000) // the parser need to parse the code .useXpath() - .scrollToLine(3) - .click(path) + .scrollToLine(3) + .click(path) .perform(function () { const actions = this.actions({ async: true }); return actions diff --git a/apps/remix-ide-e2e/src/tests/transactionExecution.test.ts b/apps/remix-ide-e2e/src/tests/transactionExecution.test.ts index 019d3659aa6..ff80fb580c4 100644 --- a/apps/remix-ide-e2e/src/tests/transactionExecution.test.ts +++ b/apps/remix-ide-e2e/src/tests/transactionExecution.test.ts @@ -245,11 +245,13 @@ module.exports = { .setSolidityCompilerVersion('soljson-v0.8.17+commit.8df45f5f.js') .clickLaunchIcon('udapp') .switchEnvironment('vm-mainnet-fork') + .click('*[data-id="runTabSelectAccount"]') .waitForElementPresent({ locateStrategy: 'css selector', - selector: 'select[data-id="runTabSelectAccount"] option[value="0xdD870fA1b7C4700F2BD7f44238821C26f7392148"]', + selector: `*[data-id="0xdD870fA1b7C4700F2BD7f44238821C26f7392148"]`, timeout: 250000 }) // wait for the udapp to load the list of accounts + .click('*[data-id="0xdD870fA1b7C4700F2BD7f44238821C26f7392148"]') .selectContract('MyResolver') .createContract('') .clickInstance(0) diff --git a/apps/remix-ide-e2e/src/tests/url.test.ts b/apps/remix-ide-e2e/src/tests/url.test.ts index d3886cd2cc3..1b6cc6fe3a7 100644 --- a/apps/remix-ide-e2e/src/tests/url.test.ts +++ b/apps/remix-ide-e2e/src/tests/url.test.ts @@ -340,5 +340,17 @@ module.exports = { .getEditorValue((content) => { browser.assert.ok(content.indexOf('contract Lock {') !== -1, 'content does contain "contract Lock {"') }) - } + }, + + 'Load remix with an iframe plugin #group4': function (browser: NightwatchBrowser) { + browser + .url('http://127.0.0.1:8080?activate=contract-verification') + .refreshPage() + .waitForElementVisible( + { + selector: '//*[contains(@data-id, "sidePanelSwapitTitle") and text()="Contract Verification"]', + locateStrategy: 'xpath' + } + ) + } } diff --git a/apps/remix-ide/meetings.md b/apps/remix-ide/meetings.md index 8534e70ac14..52111f210fd 100644 --- a/apps/remix-ide/meetings.md +++ b/apps/remix-ide/meetings.md @@ -34,10 +34,10 @@ Each other native plugin can request a guided tour with: Other type of plugin may be able to the native plugin guided tour but we won't push this if the integration is not working out of the box. We rather update the remix-plugin doc saying that `guided tour framework name` is the preferred one. -## web site +## website -we commit to have a public web site for general info about us. -It won't be a branded web site. +we commit to have a public website for general info about us. +It won't be a branded website. We are asking a designer for improving the Liana's logo. We don't need to have a framework (hugo, hexo) if that's too much overhead. @liana is testing out the easiest solution. @@ -98,7 +98,7 @@ first steps : - put all the public link to the local package - basic electron wrapper -## out reach beyond community +## outreach beyond community We agree it is something interesting to explore, It is not 100% dev tool nor remix so we should organize call with other people from EF at least diff --git a/apps/remix-ide/src/app/plugins/remixGuide.tsx b/apps/remix-ide/src/app/plugins/remixGuide.tsx index adee5e5a1a9..ac3c8b7ae57 100644 --- a/apps/remix-ide/src/app/plugins/remixGuide.tsx +++ b/apps/remix-ide/src/app/plugins/remixGuide.tsx @@ -112,13 +112,14 @@ export class RemixGuidePlugin extends ViewPlugin { title={Data.title} description={Data.description} > - { Data.sections.map(section => { + { Data.sections.map((section, index) => { return - { section.cells.map(cell => { + { section.cells.map((cell, index) => { return { this.showVideo = true diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index 8627b5f3a38..ef12c7461f9 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -161,11 +161,11 @@ export class TemplatesSelectionPlugin extends ViewPlugin { tooltipTitle={template.tooltip} hScrollable={false} > - {template.items.map(item => { + {template.items.map((item, index) => { return = () => {} - + dispatch: React.Dispatch = () => { } + state: EnvironmentExplorerState constructor() { super(profile) - this.providersFlat = {} - this.providers = { - 'Injected': [], - 'Remix VMs': [], - 'Saved VM States': [], - 'Remix forked VMs': [], - 'Externals': [] + this.state = { + providersFlat: {}, + pinnedProviders: [], } } async onActivation(): Promise { - this.providersFlat = await this.call('blockchain', 'getAllProviders') - this.pinnedProviders = await this.call('blockchain', 'getPinnedProviders') - this.renderComponent() + this.on('blockchain', 'providersChanged', this.updateProviders.bind(this)) + await this.updateProviders() } - addProvider (provider: Provider) { - if (provider.isInjected) { - this.providers['Injected'].push(provider) - } else if (provider.isForkedVM) { - this.providers['Remix forked VMs'].push(provider) - } else if (provider.isVM) { - this.providers['Remix VMs'].push(provider) - } else if (provider.isSavedState) { - this.providers['Saved VM States'].push(provider) - } else { - this.providers['Externals'].push(provider) - } + async updateProviders() { + this.state.providersFlat = await this.call('blockchain', 'getAllProviders') + this.state.pinnedProviders = await this.call('blockchain', 'getPinnedProviders') + this.renderComponent() } setDispatch(dispatch: React.Dispatch): void { @@ -77,215 +61,32 @@ export class EnvironmentExplorer extends ViewPlugin { ) } + async pinStateCallback(provider: Provider, pinned: boolean) { + if (pinned) { + this.emit('providerPinned', provider.name, provider) + this.call('notification', 'toast', `"${provider.displayName}" has been added to the Environment list of the Deploy & Run Transactions plugin.`) + } else { + const providerName = await this.call('blockchain', 'getProvider') + if (providerName !== provider.name) { + this.emit('providerUnpinned', provider.name, provider) + this.call('notification', 'toast', `"${provider.displayName}" has been removed from the Environment list of the Deploy & Run Transactions plugin.`) + return true + } else { + this.call('notification', 'toast', 'Cannot unpin the current selected provider') + return false + } + } + } + renderComponent() { this.dispatch({ - ...this + ...this.state }) } - updateComponent(state: any) { - this.providers = { - 'Injected': [], - 'Remix VMs': [], - 'Saved VM States': [], - 'Externals': [], - 'Remix forked VMs': [] - } - for (const [key, provider] of Object.entries(this.providersFlat)) { - this.addProvider(provider) - } - return ( - - - {this.providers['Injected'].map(provider => { - return { - if (pinned) { - this.emit('providerPinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been added to the Environment list of the Deploy & Run Transactions plugin.`) - return true - } - const providerName = await this.call('blockchain', 'getProvider') - if (providerName !== provider.name) { - this.emit('providerUnpinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been removed from the Environment list of the Deploy & Run Transactions plugin.`) - return true - } else { - this.call('notification', 'toast', 'Cannot unpin the current selected provider') - return false - } - }} - > -
{provider.description}
-
- })} -
- {this.providers['Remix VMs'].map(provider => { - return { - if (pinned) { - this.emit('providerPinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been added to the Environment list of the Deploy & Run Transactions plugin.`) - return true - } - const providerName = await this.call('blockchain', 'getProvider') - if (providerName !== provider.name) { - this.emit('providerUnpinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been removed from the Environment list of the Deploy & Run Transactions plugin.`) - return true - } else { - this.call('notification', 'toast', 'Cannot unpin the current selected provider') - return false - } - }} - > -
{provider.description}
-
- })}
- {this.providers['Saved VM States'].map(provider => { - const { latestBlock, timestamp } = JSON.parse(provider.description) - return { - if (pinned) { - this.emit('providerPinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been added to the Environment list of the Deploy & Run Transactions plugin.`) - return true - } - const providerName = await this.call('blockchain', 'getProvider') - if (providerName !== provider.name) { - this.emit('providerUnpinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been removed from the Environment list of the Deploy & Run Transactions plugin.`) - return true - } else { - this.call('notification', 'toast', 'Cannot unpin the current selected provider') - return false - } - }} - > -
Latest Block: {parseInt(latestBlock)}
- -
Saved at: {(new Date(timestamp)).toDateString()}
-
-
- })}
- {this.providers['Remix forked VMs'].map(provider => { - return { - if (pinned) { - this.emit('providerPinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been added to the Environment list of the Deploy & Run Transactions plugin.`) - return true - } - const providerName = await this.call('blockchain', 'getProvider') - if (providerName !== provider.name) { - this.emit('providerUnpinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been removed from the Environment list of the Deploy & Run Transactions plugin.`) - return true - } else { - this.call('notification', 'toast', 'Cannot unpin the current selected provider') - return false - } - }} - > -
{provider.description}
-
- })}
- {this.providers['Externals'].map(provider => { - return { - if (pinned) { - this.emit('providerPinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been added to the Environment list of the Deploy & Run Transactions plugin.`) - return true - } - const providerName = await this.call('blockchain', 'getProvider') - if (providerName !== provider.name) { - this.emit('providerUnpinned', provider.name, provider) - this.call('notification', 'toast', `"${provider.displayName}" has been removed from the Environment list of the Deploy & Run Transactions plugin.`) - return true - } else { - this.call('notification', 'toast', 'Cannot unpin the current selected provider') - return false - } - }} - > -
{provider.description}
-
- })}
-
- ) + updateComponent(state: EnvironmentExplorerState) { + return (<> + + ) } } diff --git a/apps/remix-ide/src/app/tabs/locales/it/circuit.json b/apps/remix-ide/src/app/tabs/locales/it/circuit.json new file mode 100644 index 00000000000..23b8654b110 --- /dev/null +++ b/apps/remix-ide/src/app/tabs/locales/it/circuit.json @@ -0,0 +1,15 @@ +{ + "circuit.compiler": "Compilatore", + "circuit.autoCompile": "Compila automaticamente", + "circuit.hideWarnings": "Nascondi gli avvisi", + "circuit.advancedConfigurations": "Configurazioni Avanzate", + "circuit.compilerConfiguration": "Configurazione del compilatore", + "circuit.prime": "Primo", + "circuit.useConfigurationFile": "Usa il file di configurazione", + "circuit.compile": "Compila", + "circuit.noFileSelected": "nessun file selezionato", + "circuit.generateR1cs": "Genera R1CS", + "circuit.computeWitness": "Calcola Testimone", + "circuit.signalInput": "Ingresso Segnale", + "circuit.compute": "Calcola" +} diff --git a/apps/remix-ide/src/app/tabs/locales/it/editor.json b/apps/remix-ide/src/app/tabs/locales/it/editor.json new file mode 100644 index 00000000000..49ea4dccbca --- /dev/null +++ b/apps/remix-ide/src/app/tabs/locales/it/editor.json @@ -0,0 +1,36 @@ +{ + "editor.keyboardShortcuts": "Scorciatoie della tastiera", + "editor.keyboardShortcuts.text1": "Compila il contratto attuale", + "editor.keyboardShortcuts.text2": "Apri Esplora File", + "editor.keyboardShortcuts.text3": "Apri la Gestione Plugin", + "editor.keyboardShortcuts.text4": "Compila il contratto attuale ed esegui uno script associato", + "editor.editorKeyboardShortcuts": "Scorciatoie della tastiera dell'Editor", + "editor.editorKeyboardShortcuts.text1": "Formatta il codice nel file attuale", + "editor.importantLinks": "Collegamenti importanti", + "editor.importantLinks.text1": "Sito web ufficiale del Progetto di Remix", + "editor.importantLinks.text2": "Documentazione ufficiale", + "editor.title1": "Avviso Codice incollato", + "editor.title1.message1": "Hai appena incollato un frammento di codice o contratto nell'editor.", + "editor.title1.message2": "Assicurati di comprenderlo a pieno prima di distribuire, o interagire con, questo contratto. Non cadere nelle truffe!", + "editor.title1.message3": "L'esecuzione di codice non attendibile può mettere a rischio il tuo portafoglio. Nel peggiore dei casi, potresti perdere tutto il tuo denaro.", + "editor.title1.message4": "Se non lo comprendi del tutto, ti preghiamo di non eseguire questo codice.", + "editor.title1.message5": "Se non sei uno sviluppatore di contratti intelligenti, chiedi a qualcuno di fiducia, che abbia le capacità di determinare se questo codice è sicuro per l'utilizzo.", + "editor.title1.message6": "Consulta questi consigli per ulteriori informazioni.", + "editor.zoomIn": "Ingrandisci", + "editor.zoomOut": "Riduci", + "editor.formatCode": "Formatta il Codice", + "editor.generateDocumentation": "Genera della documentazione per questa funzione", + "editor.generateDocumentation2": "Genera della documentazione per questa funzione \"{name}\"", + "editor.generateDocumentationByAI": "```solidity\n {content}\n```\n Generi esclusivamente la documentazione di natspec per la funzione {currentFunction}, utilizzando la sintassi di stile docstring. Utilizza soltanto i tag supportati da docstring", + "editor.explainFunction": "Spiega questa funzione", + "editor.explainFunctionSol": "Spiega questo codice", + "editor.explainFunction2": "Spiega la funzione \"{name}\"", + "editor.explainFunctionByAI": "```\n{content}\n```\nSpiega la funzione {currentFunction}", + "editor.explainFunctionByAISol": "```\n{content}\n```\nSpiega la funzione {currentFunction}", + "editor.ExplainPipeMessage": "```\n {content}\n```\nSpiega il precedente frammento", + "editor.executeFreeFunction": "Esegui una funzione gratuita", + "editor.executeFreeFunction2": "Esegui la funzione gratuita \"{name}\"", + "editor.toastText1": "Questo può eseguire esclusivamente la funzion gratuita", + "editor.toastText2": "Ti preghiamo di andare alle impostazioni di Remix, per attivare le funzionalità dell'editor del codice, o attendi il caricameento dl contesto dell'editor attuale.", + "editor.text": "Il file è aperto in modalità di sola lettura." +} diff --git a/apps/remix-ide/src/app/tabs/locales/it/electron.json b/apps/remix-ide/src/app/tabs/locales/it/electron.json new file mode 100644 index 00000000000..ab246a8ed72 --- /dev/null +++ b/apps/remix-ide/src/app/tabs/locales/it/electron.json @@ -0,0 +1,6 @@ +{ + "electron.openFolder": "Apri la cartella", + "electron.recentFolders": "Cartelle recenti", + "electron.gitClone": "Clona una repository di Git", + "electron.openFolderMessage": "Per poter utilizzare le funzionalità di Git, puoi aprire una cartella, o clonare una repository." +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/tabs/locales/it/filePanel.json b/apps/remix-ide/src/app/tabs/locales/it/filePanel.json index fa8728fa68a..097d5bd5d10 100644 --- a/apps/remix-ide/src/app/tabs/locales/it/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/it/filePanel.json @@ -2,12 +2,21 @@ "filePanel.displayName": "Esplora file", "filePanel.workspace": "WORKSPACE", "filePanel.create": "Crea", + "filePanel.createLabel": "Crea con Modello", + "filePanel.createBlank": "Crea vuoto", + "filePanel.create.desktop": "Crea Progetto", "filePanel.clone": "Clona", "filePanel.download": "Scarica", "filePanel.backup": "Backup", + "filePanel.localFileSystem": "Connetti ai file di sistema locali", "filePanel.restore": "Ripristina", - "filePanel.workspace.create": "Crea un'area di lavoro", + "filePanel.name": "Nome", + "filePanel.save": "Salva", + "filePanel.workspace.create": "Crea Area di Lavoro con Modello", + "filePanel.workspace.createBlank": "Crea Area di Lavoro vuota", + "filePanel.workspace.create.desktop": "Crea il progetto nella nuova cartella", "filePanel.workspace.rename": "Rinomina l'area di lavoro", + "filePanel.workspace.save_workspace": "Salva l'Area di Lavoro", "filePanel.workspace.delete": "Elimina l'area di lavoro", "filePanel.workspace.deleteConfirm": "Sei sicuro di voler eliminare l'area di lavoro corrente?", "filePanel.workspace.download": "Scarica l'area di lavoro", @@ -19,6 +28,7 @@ "filePanel.workspace.chooseTemplate": "Scegli un template", "filePanel.workspace.backup": "Backup di tutte le aree di lavoro", "filePanel.workspace.restore": "Ripristina le aree di lavoro dal backup", + "filePanel.workspace.localFileSystem": "Connetti ai File di sistema locali utilizzando Remixd", "filePanel.workspace.clone": "Clona un Repository di Git", "filePanel.workspace.cloneMessage": "Fornisci un Url valido del repository git.", "filePanel.workspace.enterGitUrl": "Inserisci l'url del repository git", @@ -29,6 +39,10 @@ "filePanel.tssoltestghaction": "Flusso di lavoro dei test Mocha Chai", "filePanel.workspace.addscriptetherscan": "Aggiunge gli script che possono essere utilizzati per interagire con l'API di Etherscan", "filePanel.addscriptetherscan": "Aggiungi gli script Etherscan", + "filePanel.workspace.addscriptsindri": "Aggiunge degli script per interagire con Sindri, un servizio remoto con prova a conoscenza zero", + "filePanel.addscriptsindri": "Aggiungi gli script ZK di Sindri", + "filePanel.workspace.addcreate2solidityfactory": "Un contratto che ti consente di distribuire un contratto con CREATE2.", + "filePanel.addcreate2solidityfactory": "Aggiungi factory di Solidity di Create2", "filePanel.workspace.addscriptdeployer": "Aggiunge gli script che possono essere utilizzati per deploiare i contratti", "filePanel.addscriptdeployer": "Aggiungi script deployer del contratto", "filePanel.workspace.slitherghaction": "Aggiunge un file yml preimpostato per eseguire l'analisi di slither sulle azioni github CI", @@ -57,17 +71,19 @@ "filePanel.compileForNahmii": "Compila per Nahmii", "filePanel.createNewFile": "Crea nuovo file", "filePanel.createNewFolder": "Crea nuova cartella", - "filePanel.publishToGist": "Pubblica tutti i file su GitHub gist", - "filePanel.uploadFile": "Carica i file", + "filePanel.publishToGist": "Pubblica su Gist", + "filePanel.workspace.publishToGist": "Pubblica Area di Lavoro su GitHub Gist", + "filePanel.uploadFile": "Apri un file dai tuoi File di Sistema", "filePanel.uploadFolder": "Carica la cartella", - "filePanel.updateGist": "Aggiorna l'esploratore [gist] corrente", + "filePanel.updateGist": "Aggiorna Gist", + "filePanel.workspace.updateGist": "Pubblica aggiornamento di Gist", "filePanel.viewAllBranches": "Visualizza tutte le branch", "filePanel.createBranch": "Crea una branch", "filePanel.switchBranches": "Cambia branch", "filePanel.checkoutGitBranch": "Controllare il ramo Git", "filePanel.findOrCreateABranch": "Trovare o creare un ramo.", "filePanel.initGitRepositoryLabel": "Inizializza l'area di lavoro come nuovo repository git", - "filePanel.initGitRepositoryWarning": "Per utilizzare le funzioni di Git, aggiungere nome utente ed e-mail alla sezione Github del pannello Impostazioni.", + "filePanel.initGitRepositoryWarning": "Per utilizzare le funzionalità di Git, aggiungi il nome utente e l'email alla sezione di GitHub del plugin di Git.", "filePanel.workspaceName": "Nome del Workspace", "filePanel.customizeTemplate": "Template personalizzati", "filePanel.features": "Caratteristiche", @@ -75,8 +91,9 @@ "filePanel.ok": "OK", "filePanel.yes": "Si", "filePanel.cancel": "Annulla", + "filePanel.selectFolder": "Seleziona o crea cartella", "filePanel.createNewWorkspace": "Crea un nuovo workspace", - "filePanel.connectToLocalhost": "connetti a localhost", + "filePanel.connectToLocalhost": "Connetti ai File di sistema locali", "filePanel.copiedToClipboard": "Copiato negli appunti {path}", "filePanel.downloadFailed": "Download non riuscito", "filePanel.downloadFailedMsg": "Errore inatteso durante il download: {error}", @@ -86,7 +103,7 @@ "filePanel.copyFolderFailed": "Copia Cartella Non Riuscita", "filePanel.copyFolderFailedMsg": "Errore inatteso durante la copia della cartella: {src}", "filePanel.runScriptFailed": "Esecuzione dello script non riuscita", - "filePanel.createPublicGist": "Pubblicare Gist Pubblico", + "filePanel.createPublicGist": "Pubblica su un Gist pubblico", "filePanel.createPublicGistMsg1": "Sei sicuro di voler inviare le modifiche al file gist remoto su github.com?", "filePanel.createPublicGistMsg2": "Sei sicuro di voler pubblicare in modo anonimo tutti i tuoi file nella cartella {path} come gist pubblico su github.com?", "filePanel.createPublicGistMsg3": "Sei sicuro di voler pubblicare in modo anonimo tutti i tuoi file nella cartella {path} come gist pubblico su github.com?", @@ -103,6 +120,12 @@ "filePanel.mintable": "Mintable", "filePanel.burnable": "Bruciabile", "filePanel.pausable": "Pausabile", + "filePanel.semaphore": "Semaforo", + "filePanel.hashchecker": "Controllo dell'Hash", + "filePanel.rln": "Nullificatore del Rate-Limiting", + "filePanel.breakthroughLabsUniswapv4Hooks": "Hook di Breakthrough-Labs", + "filePanel.uniswapV4Template": "Modello v4", + "filePanel.uniswapV4HookBookMultiSigSwapHook": "HookBook MultiSigSwapHook", "filePanel.transparent": "Trasparente", "filePanel.initGitRepoTitle": "Opzione di controllo per inizializzare il workspace come nuovo repository git", "filePanel.switchToBranchTitle1": "Esegue il check out del nuovo ramo dal ramo remoto", @@ -122,5 +145,11 @@ "filePanel.movingFileFailedMsg": "Errore inatteso durante lo spostamento del file: {src}", "filePanel.movingFolderFailed": "Spostamento File Non Riuscito", "filePanel.movingFolderFailedMsg": "Errore inatteso durante lo spostamento della cartella: {src}", - "filePanel.workspaceActions": "Azioni workspace" + "filePanel.workspaceActions": "Azioni workspace", + "filePanel.saveCodeSample": "Questa area di lavoro di codice-esempio non verrà mantenuta. Clicca qui per salvarla.", + "filePanel.logInGithub": "Accedi a GitHub.", + "filePanel.gitHubLoggedAs": "Connesso come {githubuser}", + "filePanel.updateSubmodules": "Aggiorna tutti i moduli secondari della repository. Clicca per prelevare le dipendenze.", + "filePanel.signTypedData": "Firma dati digitati", + "filePanel.signTypedDataError": "Errore firmando questi dati digitati." } diff --git a/apps/remix-ide/src/app/tabs/locales/it/gitui.json b/apps/remix-ide/src/app/tabs/locales/it/gitui.json new file mode 100644 index 00000000000..8bbaac09eb3 --- /dev/null +++ b/apps/remix-ide/src/app/tabs/locales/it/gitui.json @@ -0,0 +1,3 @@ +{ + "gitui.openFolderMessage": "Per poter utilizzare le funzionalità di Git, puoi aprire una cartella, o clonare una repository." +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/tabs/locales/it/home.json b/apps/remix-ide/src/app/tabs/locales/it/home.json index c8082f34bf3..9810caa5148 100644 --- a/apps/remix-ide/src/app/tabs/locales/it/home.json +++ b/apps/remix-ide/src/app/tabs/locales/it/home.json @@ -1,14 +1,15 @@ { + "home.home": "Home", "home.scamAlert": "Allerta Truffa", "home.scamAlertText": "L'unico URL utilizzato da Remix è remix.ethereum.org", "home.scamAlertText2": "Attenzione ai video online che promuovono i \"bot di che fanno \"front running\" di liquidità\"", "home.scamAlertText3": "Ulteriori suggerimenti di sicurezza", "home.learnMore": "Scopri di più", - "home.here": "qui", + "home.here": "altro", "home.featured": "In Evidenza", - "home.jumpIntoWeb3": "JUMP INTO WEB3", - "home.jumpIntoWeb3More": "More", - "home.jumpIntoWeb3Text": "Remix IDE is part of the Remix Project, a rich toolset that can be used for the entire journey of contract development by users of any knowledge level. Learn more on the Remix Project website.", + "home.learnEthPromoTitle": "LearnEth: Tutorial dentro Remix", + "home.learnEthPromoButton": "Inizia a imparare", + "home.learnEthPromoText": "Consulta i tutorial su Remix, Solidity e altri progetti del Web3. Ottimo per tutti i livelli di competenza.", "home.remixYouTube": "GUARDA PER IMPARARE", "home.remixYouTubeText1": "Video di Suggerimenti dal Team di Remix", "home.remixYouTubeMore": "Guarda", @@ -28,7 +29,7 @@ "home.dgitPluginDesc": "Aggiungi il controllo delle sorgenti ai tuoi progetti.", "home.oneClickDappDesc": "Genera rapidamente interfacce per contratti intelligenti", "home.getStarted": "Inizia", - "home.projectTemplates": "Modelli di Progetto", + "home.projectTemplates": "Esplora. Prototipa. Crea.", "home.blankTemplateDesc": "Crea uno workspace vuoto.", "home.remixDefaultTemplateDesc": "Crea uno spazio di lavoro con file di esempio.", "home.ozerc20TemplateDesc": "Crea un token ERC20 importando la libreria OpenZeppelin.", @@ -36,6 +37,7 @@ "home.ozerc1155TemplateDesc": "Crea un token ERC1155 importando la libreria OpenZeppelin.", "home.gnosisSafeMultisigTemplateDesc": "Crea dei Wallet Multisig utilizzando questo modello.", "home.zeroxErc20TemplateDesc": "Crea un token ERC20 importando il contratto 0xProject.", + "home.learnEthPluginDesc": "Impara su Remix, Solidity e altri progetti del Web3.", "home.learn": "Impara", "home.learnEth1": "Basi di Remix", "home.learnEth1Desc": "Un'introduzione all'interfaccia di Remix e alle operazioni di base.", @@ -44,7 +46,7 @@ "home.remixAdvanced": "Distribuire con le Librerie", "home.remixAdvancedDesc": "Impara a fare deployment con le librerie in Remix", "home.remixYoutubePlaylist": "Playlist Youtube di Remix", - "home.remixTwitterProfile": "Profilo X di Remix", + "home.remixTwitterProfile": "Profilo di X di Remix", "home.remixLinkedinProfile": "Profilo LinkedIn di Remix", "home.remixMediumPosts": "Post in Medium di Remix", "home.joinUsOnDiscord": "Unisciti a noi su Discord", @@ -55,12 +57,19 @@ "home.remixDesktop": "Remix Desktop", "home.searchDocumentation": "Cerca la Documentazione", "home.files": "File", - "home.newFile": "Nuovo File", - "home.openFile": "Apri File", - "home.accessFileSystem": "Accedi al File System", + "home.newFile": "Nuovo", + "home.startCoding": "Inizia a programmare", + "home.startCodingPlayground": "Apri un terreno di gioco per la prototipazione e l'apprendimento semplice", + "home.openFile": "Apri", + "home.openFileTooltip": "Apri un File dal tuo Sistema di File", + "home.accessFileSystem": "Connetti ai File di sistema locali", "home.loadFrom": "Carica da", "home.resources": "Risorse", "home.connectToLocalhost": "Connetti a localhost", "home.seeAllTutorials": "Tutti i tutorial", - "home.maintainedByRemix": "Mantenuto da Remix" + "home.maintainedByRemix": "Mantenuto da Remix", + "home.gitCloneTooltip": "Clona una repository di GitHub in una nuova Area di Lavoro", + "home.gistTooltip": "Apri la repository di Gist", + "home.newFileTooltip": "Aggiungi un nuovo file a un'Area di Lavoro" } + diff --git a/apps/remix-ide/src/app/tabs/locales/it/quickDapp.json b/apps/remix-ide/src/app/tabs/locales/it/quickDapp.json new file mode 100644 index 00000000000..295e43734d7 --- /dev/null +++ b/apps/remix-ide/src/app/tabs/locales/it/quickDapp.json @@ -0,0 +1,43 @@ +{ + "quickDapp.address": "indirizzo", + "quickDapp.enterAddress": "Inserisci l'indirizzo", + "quickDapp.enterAbi": "Inserisci l'ABI", + "quickDapp.name": "nome", + "quickDapp.enterName": "Inserisci il nome", + "quickDapp.network": "rete", + "quickDapp.enterNetwork": "Inserisci la rete", + "quickDapp.submit": "Invia", + "quickDapp.text1": "QuickDapp funziona soltanto per il Fornitore Iniettato, al momento. Ulteriori fornitori saranno adottati nelle iterazioni future.", + "quickDapp.text2": "Il click sull'icona di modifica in un contratto distribuito, inserirà automaticamente i parametri.", + "quickDapp.admin": "Admin", + "quickDapp.resetFunctions": "Ripristina le funzioni", + "quickDapp.deleteDapp": "Elimina dApp", + "quickDapp.text3": "QuickDapp distribuisce su Surge.sh. I profili di Surge sono gratuiti fiino al raggiungimento di un livello d'utilizzo. L'email e la password che inserisci di seguito, ti consentiranno di accedere a un profilo di Surge. Il dominio secondario è di tua scelta, ma dev'essere univoco. Ulteriori informazioni su surge.sh", + "quickDapp.email": "Email", + "quickDapp.surgeEmail": "Email di Surge", + "quickDapp.password": "Password", + "quickDapp.surgePassword": "Password di Surge", + "quickDapp.subdomain": "Dominio secondario", + "quickDapp.uniqueSubdomain": "Nome univoco del dominio secondario", + "quickDapp.shareTo": "Condividi con (Facoltativo)", + "quickDapp.useNatSpec": "Utilizza NatSpec (Facoltativo)", + "quickDapp.useNatSpecTooltip": "Recupera le informazioni dal NatSpec del contratto", + "quickDapp.verifiedByEtherscan": "Verificata da Etherscan (Facoltativo)", + "quickDapp.verified": "Verificata", + "quickDapp.noTerminal": "Nessun terminale (Facoltativo)", + "quickDapp.no": "No", + "quickDapp.themes": "Temi", + "quickDapp.deploy": "Distribuisci", + "quickDapp.teardown": "Abbatti", + "quickDapp.text4": "Distribuito correttamente!", + "quickDapp.text5": "Clicca il seguente collegamento per visualizzare la tua dApp", + "quickDapp.text6": "Abbattimento riuscito!", + "quickDapp.addLogoTooltip": "Clicca qui per aggiungere un logo", + "quickDapp.deleteLogoTooltip": "Clicca qui per eliminare il logo", + "quickDapp.dappTitle": "Titolo della dApp", + "quickDapp.dappInstructions": "Istruzioni sulla dApp", + "quickDapp.functionTitle": "Titolo della funzione", + "quickDapp.functionInstructions": "Istruzioni per la funzione", + "quickDapp.addColumn": "Aggiungi colonna", + "quickDapp.column": "Colonna" +} diff --git a/apps/remix-ide/src/app/tabs/locales/it/remixUiTabs.json b/apps/remix-ide/src/app/tabs/locales/it/remixUiTabs.json index 10585e39ccc..8ace71a9f3f 100644 --- a/apps/remix-ide/src/app/tabs/locales/it/remixUiTabs.json +++ b/apps/remix-ide/src/app/tabs/locales/it/remixUiTabs.json @@ -1,7 +1,14 @@ { "remixUiTabs.tooltipText1": "Esegui script (CTRL + SHIFT + S)", "remixUiTabs.tooltipText2": "Compila CTRL + S", - "remixUiTabs.tooltipText3": "Seleziona il file .sol o .yul da compilare o un file .ts o .js ed eseguilo", - "remixUiTabs.zoomOut": "Rimpicciolisci", + "remixUiTabs.tooltipText3": "Seleziona un file .sol o .yul da compilare O un file .ts o .js da eseguire", + "remixUiTabs.tooltipText4": "Per spiegare un contratto, scegli un file .sol, .vy o .circom", + "remixUiTabs.tooltipText5": "Spiega il/i contratto/i nel file attuale [BETA]", + "remixUiTabs.tooltipText6": "Abilita RemixAI Copilot [BETA]", + "remixUiTabs.tooltipText7": "Disabilita RemixAI Copilot [BETA]", + "remixUiTabs.tooltipText8": "Documentazione sugli strumenti di RemixAI", + "remixUiTabs.tooltipText9": "Configura le dipendenze dello scripting", + "remixUiTabs.tooltipTextDisabledCopilot": "Per utilizzare RemixAI Copilot, scegli un file .sol", + "remixUiTabs.zoomOut": "Riduci", "remixUiTabs.zoomIn": "Ingrandisci" } diff --git a/apps/remix-ide/src/app/tabs/locales/it/settings.json b/apps/remix-ide/src/app/tabs/locales/it/settings.json index 251089f6cb0..fb9b3c909af 100644 --- a/apps/remix-ide/src/app/tabs/locales/it/settings.json +++ b/apps/remix-ide/src/app/tabs/locales/it/settings.json @@ -1,22 +1,27 @@ { "settings.displayName": "Impostazioni", "settings.reset": "Ripristino delle impostazioni predefinite", - "settings.general": "Impostazioni generali", - "settings.generateContractMetadataText": "Generare i metadati del contratto. Genera un file JSON nella cartella del contratto. Permette di specificare gli indirizzi delle librerie da cui dipende il contratto. Se non viene specificato nulla, Remix distribuisce le librerie in modo automatico.", + "settings.general": "Generali", + "settings.generateContractMetadataText": "Genera i metadati del contratto", + "settings.generateContractMetadataTooltip": "Genera un file JSON nella cartella del contratto. Consente di specificare gli indirizzi della libreria da cui dipende il contratto. Se non viene specificato nulla, Remix distribuisce automaticamente le librerie.", "settings.ethereunVMText": "Utilizzare sempre la macchina virtuale Remix al momento del caricamento", "settings.wordWrapText": "A capo automatico nell'editor", - "settings.useAutoCompleteText": "Abilita il completamento del codice nell'editor.", - "settings.useShowGasInEditorText": "Visualizza le stime del gas nell'editor.", - "settings.displayErrorsText": "Visualizza gli errori nell'editor durante la digitazione.", - "settings.matomoAnalytics": "Attiva \"Matomo Analytics\". Non raccogliamo informazioni di identificazione personale (PII, dall'inglese \"personally identifiable information\"). Le informazioni vengono utilizzate per migliorare l'esperienza utente e l'interfaccia utente del sito. Per saperne di più ", - "settings.enablePersonalModeText": " Abilita la modalità personale per il provider web3. Le transazioni inviate tramite Web3 utilizzeranno l'API web3.personal.\n", - "settings.warnText": "Assicurati che l'endpoint sia aperto prima di abilitarlo. Questa modalità consente all'utente di fornire una frase d'accesso nell'interfaccia di Remix senza dover sbloccare l'account. Sebbene sia molto comodo, è necessario fidarsi completamente del backend a cui si è connessi (Geth, Parity, ...). Remix non conserva mai alcuna frase d'accesso", + "settings.useAutoCompleteText": "Abilita il completamento del codice nell'editor", + "settings.useShowGasInEditorText": "Mostra le stime sul gas nell'editor", + "settings.displayErrorsText": "Mostra gli errori nell'editor durante la digitazione", + "settings.matomoAnalytics": "Abilita Matomo Analytics. Consulta", + "settings.matomoAnalyticsTooltip": "Non raccogliamo le informazioni di identificazione personali. Le informazioni sono utilizzate per migliorare l'UX e l'UI del sito.", + "settings.enablePersonalModeText": " Abilita la modalità Personale per il fornitore del Web3", + "settings.enablePersonalModeTooltip": "Le transazioni inviate sul Web3 utilizzeranno l'API web3.personal. Assicurati che l'endpoint sia aperto, prima di abilitarlo. Questa modalità consente a un utente di fornire una frase d'accesso nell'interfaccia di Remix, senza dover sbloccare il profilo. Sebbene ciò sia molto conveniente, dovresti fidarti completamente del backend cui sei connesso (Geth, Parity, ...). Remix non conserva mai alcuna frase d'accesso.", "settings.gitAccessTokenTitle": "Credenziali Github", "settings.gitAccessTokenText": "Il token di accesso viene utilizzato per pubblicare una Gist e recuperare i contenuti di GitHub. Potrebbe essere necessario inserire nome utente/email.", "settings.gitAccessTokenText2": "Vai alla pagina dei token di github (link in basso) per creare un nuovo token e salvarlo in Remix. Assicurati che questo token abbia solo l'autorizzazione \"create gist\"", "settings.etherscanTokenTitle": "Token di accesso a Etherscan", "settings.etherscanAccessTokenText": "Gestione della chiave api utilizzata per interagire con Etherscan.", "settings.etherscanAccessTokenText2": "Vai alla pagina delle chiavi api di Etherscan (link in basso) per creare una nuova chiave api e salvarla in Remix.", + "settings.sindriAccessTokenTitle": "Credenziali di Sindri", + "settings.sindriAccessTokenText": "Il token d'accesso viene utilizzato per compilare i circuiti ZKP e generare prove con Sindri.", + "settings.sindriAccessTokenText2": "Vai alla pagina di creazione del profilo di Sindri (link in basso), per creare un nuovo token e salvarlo su Remix.", "settings.save": "Salva", "settings.remove": "Rimuovi", "settings.themes": "Temi", @@ -37,5 +42,9 @@ "settings.projectID": "ID PROGETTO", "settings.projectSecret": "SEGRETO DEL PROGETTO", "settings.analyticsInRemix": "Analytics nella Remix IDE", - "settings.enableSaveEnvState": "Save environment state" + "settings.copilot": "Solidity copilot - Alpha", + "settings.copilot.activate": "Carica & Attiva copilot", + "settings.copilot.max_new_tokens": "Numero massimo di parole da generare", + "settings.copilot.temperature": "Temperatura", + "settings.enableSaveEnvState": "Salva lo stato dell'ambiente" } diff --git a/apps/remix-ide/src/app/tabs/locales/it/solUmlGen.json b/apps/remix-ide/src/app/tabs/locales/it/solUmlGen.json index d68c5e02233..b028e6058d9 100644 --- a/apps/remix-ide/src/app/tabs/locales/it/solUmlGen.json +++ b/apps/remix-ide/src/app/tabs/locales/it/solUmlGen.json @@ -1,10 +1,10 @@ { - "solUmlGen.pngDownload": "Download as PNG", - "solUmlGen.pdfDownload": "Download as PDF", - "solUmlGen.pngDownloadTooltip": "Download UML diagram as a PNG file", - "solUmlGen.pdfDownloadTooltip": "Download UML diagram as a PDF file", - "solUmlGen.text1": "To view your contract as a UML Diagram", - "solUmlGen.text2": "Right-click on your contract file", - "solUmlGen.clickOn": "Click on", - "solUmlGen.generateUML": "Generate UML" + "solUmlGen.pngDownload": "Scarica come PNG", + "solUmlGen.pdfDownload": "Scarica come PDF", + "solUmlGen.pngDownloadTooltip": "Scarica diagramma UML come un file PNG", + "solUmlGen.pdfDownloadTooltip": "Scarica diagramma UML come un file PDF", + "solUmlGen.text1": "Per visualizzare il tuo contratto come un diagramma UML", + "solUmlGen.text2": "Clicca con il destro del mouse sul file del tuo contratto", + "solUmlGen.clickOn": "Clicca su", + "solUmlGen.generateUML": "Genera UML" } diff --git a/apps/remix-ide/src/app/tabs/locales/it/solidity.json b/apps/remix-ide/src/app/tabs/locales/it/solidity.json index 432fef045e6..b5e866f4110 100644 --- a/apps/remix-ide/src/app/tabs/locales/it/solidity.json +++ b/apps/remix-ide/src/app/tabs/locales/it/solidity.json @@ -1,10 +1,12 @@ { "solidity.displayName": "Compilatore di Solidity", + "solidity.openaigptMessage": "solidity code: {content}\n error message: {messageText}\n spiega perché l'errore si è verificato e come correggerlo.", "solidity._comment_compiler-container.tsx": "libs/remix-ui/solidity-Compiler/src/lib/compiler-container.tsx", "solidity.compiler": "Compilatore", "solidity.addACustomCompiler": "Aggiungi un compilatore personalizzato", "solidity.addACustomCompilerWithURL": "Aggiungi un compilatore personalizzato con URL", "solidity.includeNightlyBuilds": "Includi le build nightly", + "solidity.downloadedCompilers": "Mostra solo scaricati", "solidity.autoCompile": "Compila automaticamente", "solidity.hideWarnings": "Nascondi gli avvertimenti", "solidity.enableHardhat": "Abilita la Compilazione Hardhat", @@ -16,7 +18,7 @@ "solidity.compilationDetails": "Dettagli Della Compilazione", "solidity.language": "Lingua", "solidity.evmVersion": "Versione EVM", - "solidity.enableOptimization": "Abilita l'ottimizzazione", + "solidity.enableOptimization": "Ottimizzazione", "solidity.useConfigurationFile": "Usa il file di configurazione", "solidity.change": "Cambia", "solidity.compile": "Compila", @@ -43,11 +45,22 @@ "solidity.compileIconAttribute": "il compilatore è in caricamento, attendere qualche istante.", "solidity.compilerLicense": "Licenza Compiler", "solidity.compilerLicenseMsg1": "Compiler è in caricamento. La licenza verrà visualizzata una volta caricato il compiler", - "solidity.compilerLicenseMsg2": "Impossibile trovare la licenza per la versione selezionata del compilatore", + "solidity.compilerLicenseMsg2": "Impossibile recuperare la licenza per la versione selezionata del compilatore", "solidity.compilerLicenseMsg3": "Licenza non disponibile", "solidity.seeCompilerLicense": "Vedi la licenza del compilatore", "solidity._comment_contract-selection.tsx": "libs/remix-ui/solidity-compiler/src/lib/contract-selection.tsx", "solidity.publishOn": "Pubblica su", + "solidity.runStaticAnalysis": "Esegui Remix Analysis", + "solidity.runStaticAnalysis.iconTooltip": "Clicca per analizzare le vulnerabilità di questo contratto con gli analizzatori di Remix, Solhint e Slither", + "solidity.runSolidityScan": "Esegui SolidityScan", + "solidity.solScan.iconTooltip": "Clicca per scansionare per le vulnerabilità di questo contratto con SolidityScan, un fornitore di terze parti [BETA]", + "solidity.solScan.modalTitle": "Autorizzazione per la condivisione del codice", + "solidity.solScan.modalMessage": "Per scansionare e analizzare il contratto per rischi e vulnerabilità, il suo codice sarà condiviso con SolidityScan, un fornitore di terze parti. ", + "solidity.solScan.likeToContinue": "Desideri continuare?", + "solidity.solScan.modalOkLabel": "Continua", + "solidity.solScan.modalCancelLabel": "Annulla", + "solidity.solScan.errModalTitle": "Errore di scansione", + "solidity.solScan.successModalTitle": "Risultati scansione", "solidity.flatten": "Appiattire i contratti prima della generazione UML.", "solidity.generateUML": "Genera un diagramma UML del tuo contratto.", "solidity.flattenLabel": "Unisci livelli", @@ -57,7 +70,7 @@ "solidity.copyBytecode": "Copia Bytecode negli appunti", "solidity.unableToDisplay": "Impossibile visualizzare", "solidity.download": "Scarica", - "solidity.compileDetails": "Download compilation details (JSON format)", + "solidity.compileDetails": "Scarica i dettagli della compilazione (in formato JSON)", "solidity.close": "Chiudi", "solidity.contract": "Contratto", "solidity.displayContractDetails": "Visualizza Dettagli Del Contratto", @@ -65,7 +78,7 @@ "solidity.Assembly": "Codici operativi di Assembly che descrivono il contratto, compreso il corrispondente codice sorgente solidity", "solidity.Opcodes": "Codici operativi di Assembly che descrivono il contratto", "solidity.name": "Nome del contratto compilato", - "solidity.metadata": "Contiene tutte le informazioni relative alla compilazione", + "solidity.metadata": "Contiene tutte le informazioni sulla compilazione", "solidity.bytecode": "Bytecode in esecuzione durante la creazione del contratto", "solidity.abi": "ABI: descrizione di tutte le funzioni (parametri input/output, ambito di applicazione, ...)", "solidity.web3Deploy": "Copia/incolla questo codice su qualsiasi console JavaScript/Web3 per distribuire questo contratto", diff --git a/apps/remix-ide/src/app/tabs/locales/it/terminal.json b/apps/remix-ide/src/app/tabs/locales/it/terminal.json index 19653883b19..a1aa699ecc8 100644 --- a/apps/remix-ide/src/app/tabs/locales/it/terminal.json +++ b/apps/remix-ide/src/app/tabs/locales/it/terminal.json @@ -1,7 +1,8 @@ { - "terminal.listen": "ascolta su tutte le transazioni", + "terminal.listen": "Ascolta su tutte le transazioni", + "terminal.listenVM": "Ascolta su tutte le transazioni è disabilitato per l'ambiente della VM", "terminal.listenTitle": "Se è selezionato, Remix ascolterà tutte le transazioni generate nell'environment attuale e non solo quelle create da te", - "terminal.search": "Cercare con hash o indirizzo della transazione", + "terminal.search": "Filtra con hash o indirizzo della transazione", "terminal.used": "usato", "terminal.debug": "Debug", "terminal.welcomeText1": "Benvenuto a", @@ -11,10 +12,10 @@ "terminal.welcomeText5": "Esegui gli script JavaScript", "terminal.welcomeText6": "Immettere uno script direttamente nell'interfaccia della riga di comando", "terminal.welcomeText7": "Seleziona un file Javascript nel file explorer ed esegui `remix.execute()` o `remix.exeCurrent()` nell'interfaccia Command Line (Terminale)", - "terminal.welcomeText8": "Fare clic con il tasto destro su un file JavaScript nell'esplora file e quindi fare clic su `Run`", + "terminal.welcomeText8": "Clicca con il destro su un file JavaScript in Esplora File, quindi clicca su `Esegui`", "terminal.welcomeText9": "Le seguenti librerie sono accessibili", "terminal.welcomeText10": "Digitare il nome della libreria per vedere i comandi disponibili", - "terminal.text1": "Questo tipo di comando è stato deprecato e non è più funzionante. Si prega di eseguire remix.help() per elencare i comandi disponibili.", + "terminal.text1": "Questo tipo di comando è stato deprecato e non è più operativo. Ti preghiamo di eseguire remix.help() per elencare tutti i comandi disponibili.", "terminal.hideTerminal": "Nascondi Terminale", "terminal.showTerminal": "Mostra Terminale", "terminal.clearConsole": "Pulisci console", @@ -38,7 +39,8 @@ "terminal.executionCost": "costo di esecuzione", "terminal.input": "input", "terminal.decodedInput": "input decodificato", + "terminal.output": "output", "terminal.decodedOutput": "output decodificato", - "terminal.rawlogs": "log grezzi", + "terminal.rawlogs": "registri grezzi", "terminal.logs": "Log" } diff --git a/apps/remix-ide/src/app/tabs/locales/it/udapp.json b/apps/remix-ide/src/app/tabs/locales/it/udapp.json index 06c650b01a8..0cce3aad55d 100644 --- a/apps/remix-ide/src/app/tabs/locales/it/udapp.json +++ b/apps/remix-ide/src/app/tabs/locales/it/udapp.json @@ -2,10 +2,12 @@ "udapp.displayName": "Distribuisci ed esegui transazioni", "udapp._comment_gasPrice.tsx": "libs/remix-ui/run-tab/src/lib/components/gasPrice.tsx", "udapp.gasLimit": "Limite di gas", - "udapp.tooltipText4": "Il limite di gas predefinito è 3M. Regolare come necessario.", + "udapp.gasLimitAuto": "Gas stimato", + "udapp.gasLimitManual": "Personalizza", + "udapp.tooltipText4": "Inserisci un limite di gas personalizzato.", "udapp._comment_value.tsx": "libs/remix-ui/run-tab/src/lib/components/value.tsx", "udapp.value": "Valore", - "udapp.tooltipText5": "Inserisci un importo e scegli la sua unità", + "udapp.tooltipText5": "Inserisci un importo da inviare con la transazione, e scegline l'unità", "udapp._comment_contractDropdownUI.tsx": "libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx", "udapp.contract": "Contratto", "udapp.compiledBy": "compilato da {compilerName}", @@ -16,14 +18,14 @@ "udapp.publishTo": "Pubblica su", "udapp.atAddress": "All'Indirizzo", "udapp.atAddressOptionsTitle1": "indirizzo del contratto", - "udapp.atAddressOptionsTitle2": "Interagire con il contratto distribuito - richiede che il file .abi o il file .sol compilato sia selezionato nell'editor (con la stessa configurazione del compilatore)", + "udapp.atAddressOptionsTitle2": "Interagisci con il contratto distribuito; richiede che il file .abi, o il file .sol compilato, sia selezionato nell'editor (con la stessa configurazione del compilatore)", "udapp.atAddressOptionsTitle3": "Compila un file *.sol o seleziona un file *.abi.", "udapp.atAddressOptionsTitle4": "Per interagire con un contratto distribuito, è necessario inserire il suo indirizzo e compilare il file sorgente *.sol (con le stesse impostazioni del compilatore) oppure selezionare il file .abi nell'editor. ", "udapp.contractOptionsTitle1": "Si prega di compilare *.sol file per distribuire o accedere a un contratto", "udapp.contractOptionsTitle2": "Selezionare un contratto compilato da distribuire o da utilizzare con At Address.", "udapp.contractOptionsTitle3": "Selezionare e compilare il file *.sol per distribuire o accedere a un contratto.", "udapp.contractOptionsTitle4": "Quando c'è un file .sol compilato, scegliere il contratto da distribuire o da usare con At Address.", - "udapp.checkSumWarning": "Sembra che non si stia utilizzando un indirizzo con checksum. Un indirizzo con checksum è un indirizzo che contiene lettere maiuscole, come specificato in {a}. Gli indirizzi con checksum sono pensati per evitare che gli utenti inviino transazioni all'indirizzo sbagliato.", + "udapp.checkSumWarning": "Sembra che tu non stia utilizzando un indirizzo con somma di controllo. Si tratta di un indirizzo contenente delle lettere maiuscole, come specificato in {a}. Gli indirizzi con somma di controllo sono pensati per evitare che gli utenti inviino le transazioni all'indirizzo sbagliato.", "udapp.isOverSizePromptEip170": "L'inizializzazione della creazione del contratto restituisce dati di lunghezza superiore a 24576 byte. La distribuzione probabilmente fallirà se la rete corrente ha attivato l'eip 170. Ulteriori informazioni: {a}", "udapp.isOverSizePromptEip3860": "Il codice di avvio della creazione del contratto supera la dimensione massima consentita di 49152 byte. È probabile che la distribuzione fallisca se la rete corrente ha attivato l'eip 3860. Ulteriori informazioni: {a}", "udapp.thisContractMayBeAbstract": "Questo contratto potrebbe essere astratto, potrebbe non implementare completamente i metodi di un contratto genitore astratto o potrebbe non invocare correttamente il costruttore di un contratto ereditato.", @@ -40,35 +42,47 @@ "udapp._comment_account.tsx": "libs/remix-ui/run-tab/src/lib/components/account.tsx", "udapp.account": "Account", "udapp.signAMessage": "Firma un messaggio", - "udapp.enterAMessageToSign": "Inserire un messaggio da firmare", + "udapp.enterAMessageToSign": "Inserisci un messaggio per firmare e clicca su `Firma`", "udapp.hash": "hash", "udapp.signature": "firma", + "udapp.saveVmStateTitle": "Save VM state", + "udapp.saveVmStateLabel": "State Name", + "udapp.saveVmStateTip": "Saved VM states can be pinned as environment using Environment Explorer", "udapp.injectedTitle": "Purtroppo non è possibile creare un account utilizzando un provider iniettato. Per favore crea l'account direttamente dal tuo provider (cioè metamask o altro dello stesso tipo).", - "udapp.createNewAccount": "Crea un nuovo account", + "udapp.createNewAccount": "Crea un nuovo conto", "udapp.web3Title": "La creazione di un account è possibile solo in modalità personale. Vai su Impostazioni per abilitarlo.", "udapp.defaultTitle": "Purtroppo non è possibile creare un account utilizzando un portafoglio esterno ({selectExEnv}).", "udapp.text1": "Fornisci una frase segreta per la creazione dell'account", "udapp.tooltipText1": "L'elenco degli account è vuoto, assicurati che il provider corrente sia collegato correttamente a Remix", "udapp.modalTitle1": "Passphrase per firmare un messaggio", "udapp.modalMessage1": "Inserisci la tua frase segreta per questo account per firmare il messaggio", - "udapp.copyAccount": "Copia account negli appunti", - "udapp.signMsgUsingAccount": "Firma un messaggio utilizzando questo account", + "udapp.copyAccount": "Copia conto", + "udapp.signMsgUsingAccount": "Firma con questo conto", "udapp._comment_environment.tsx": "libs/remix-ui/run-tab/src/lib/components/environment.tsx", "udapp.environment": "Ambiente", "udapp.environmentDocs": "Fare clic per i documenti sull'Ambiente", + "udapp.saveVmState": "Save VM state", "udapp.tooltipText2": "Aprire chainlist.org e ottenere le specifiche di connessione della chain con cui si desidera interagire.", "udapp.tooltipText3": "Fare clic per aprire un bridge per convertire ETH mainnet L1 nella valuta di rete selezionata.", "udapp._comment_instanceContainerUI.tsx": "libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx", "udapp.deployedContracts": "Contratti Distribuiti", - "udapp.deployAndRunClearInstances": "Cancellare l'elenco delle istanze e ripristinare il registratore", - "udapp.deployAndRunNoInstanceText": "Attualmente non si dispone di istanze contrattuali con cui interagire.", + "udapp.deployAndRunClearInstances": "Cancella tutti i contratti distribuiti (inclusi fissati) e ripristina il registratore", + "udapp.deployAndRunNoInstanceText": "Al momento non disponi di alcun contratto non fissato con cui interagire.", "udapp.tooltipText6": "Interfacce utente generiche generate automaticamente per interagire con gli smart contratti deploiati", + "udapp.pinnedContracts": "Contratti fissati", + "udapp.tooltipTextPinnedContracts": "Elenco di contratti fissati per l'area di lavoro e la rete selezionate", + "udapp.NoPinnedInstanceText": "Nessun contratto fissato trovato per l'area di lavoro e la rete selezionate", + "udapp.tooltipTextDelete": "Elimina immediatamente", + "udapp.tooltipTextUnpin": "Sblocca il contratto da eliminare dopo aver ricaricato", + "udapp.pinnedAt": "Fissato su", + "udapp.filePath": "Percorso del file", "udapp._comment_recorderCardUI.tsx": "libs/remix-ui/run-tab/src/lib/components/recorderCardUI.tsx", "udapp.transactionsRecorded": "Transazioni registrate", "udapp.transactionsCountTooltip": "Il numero di transazioni registrate", "udapp.transactionSaveTooltip1": "Nessuna transazione da salvare", "udapp.transactionSaveTooltip2": "Salvare la transazione {count} come file di scenario", "udapp.transactionSaveTooltip3": "Salvare le transazioni {count} come file di scenario", + "udapp.transactionsWalkthroughTooltip": "Inizia il tour dettagliato per il registratore.", "udapp.infoRecorderTooltip": "Salvare le transazioni (contratti distribuiti ed esecuzioni di funzioni) e riprodurle in un altro ambiente, ad esempio le transazioni create nella macchina virtuale Remix possono essere riprodotte in Injected Provider.", "udapp.livemodeRecorderTooltip": "Se i contratti vengono aggiornati dopo la registrazione delle transazioni, selezionando questa casella si eseguono le transazioni registrate con l'ultima copia dei contratti compilati", "udapp.livemodeRecorderLabel": "Eseguire le transazioni utilizzando l'ultimo risultato della compilazione", @@ -88,7 +102,9 @@ "udapp.tooltipText12": "Input richiesto", "udapp.tooltipText13": "Deploiato", "udapp._comment_universalDappUI.tsx": "libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx", - "udapp.tooltipTextRemove": "Rimuovi dalla lista", + "udapp.tooltipTextRemove": "Rimuovi permanentemente dall'elenco", + "udapp.tooltipTextEdit": "Crea una dApp con questo contratto, nel pannello principale", + "udapp.tooltipTextPin": "Fissa il contratto per l'area di lavoro e la rete attuali, affinché persista dopo aver ricaricato", "udapp.tooltipText8": "Fare clic per i documenti sull'uso di 'receive'/'fallback'", "udapp.tooltipText9": "Il Calldata per inviare alla funzione di fallback del contratto.", "udapp.tooltipText10": "Invia dati al contratto.", @@ -102,7 +118,7 @@ "udapp.llIError6": "Le funzioni 'receive' e 'fallback' non sono definite", "udapp.llIError7": "Definisci una funzione 'Fallback' per inviare Calldata e una 'Receive' o 'Fallback' payable per inviare ETH", "udapp.copy": "Copia", - "udapp.copyAddress": "Copy Address", + "udapp.copyAddress": "Copia Indirizzo", "udapp._comment_mainnet.tsx": "libs/remix-ui/run-tab/src/lib/components/mainnet.tsx", "udapp.mainnetText1": "Stai per creare una transazione su {name} Network. Conferma i dettagli per inviare le informazioni al tuo provider.", "udapp.mainnetText2": "Il provider per molti utenti è MetaMask. Il provider ti chiederà di firmare la transazione prima che venga inviata alla rete {name}.", @@ -113,7 +129,7 @@ "udapp.contractCreation": "Creazione Contratto", "udapp.transactionFee": "Transazione non valida. La commissione massima non dovrebbe essere inferiore alla commissione base", "udapp.title1": "Rappresenta la parte della commissione della transazione che va al minatore.", - "udapp.title2": "Rappresenta l'importo massimo della commissione che pagherai per questa transazione. Il minimo deve essere impostato su Base Fee.", + "udapp.title2": "Rappresenta l'importo massimo della commissione che pagherai per questa transazione. Il minimo dev'essere impostato alla commissione di base.", "udapp.gasPrice": "Prezzo del gas", "udapp.gweiText": "visita {a} per informazioni sul prezzo corrente del gas.", "udapp.maxTransactionFee": "Tariffa massima transazione", @@ -135,5 +151,10 @@ "udapp.ganacheProviderText1": "Nota: Per eseguire Ganache sul sistema, eseguire:", "udapp.ganacheProviderText2": "Per ulteriori informazioni, visita: Ganache Documentation", "udapp.hardhatProviderText1": "Nota: Per eseguire il nodo di rete Hardhat sul sistema, vai alla cartella del progetto hardhat ed esegui il comando:", - "udapp.hardhatProviderText2": "Per ulteriori informazioni, visita: Hardhat Documentation" + "udapp.hardhatProviderText2": "Per ulteriori informazioni, visita: Hardhat Documentation", + "udapp.EIP712-2": "Ti preghiamo di seguire questo collegamento per ottenere ulteriori informazioni.", + "udapp.EIP712-3": "Su Remix, è possibile firmare i dati digitati cliccando con il destro del mouse su Firma Dati Digitati su un file JSON il cui contenuto è compatibile con l'EIP-712.", + "udapp.EIP712-create-template": "Crea un JSON conforme all'EIP-712", + "udapp.EIP712-close": "Chiudi", + "udapp.sign": "Firma" } diff --git a/apps/remix-ide/src/app/tabs/locales/it/vyper.json b/apps/remix-ide/src/app/tabs/locales/it/vyper.json new file mode 100644 index 00000000000..23cddf0d9bd --- /dev/null +++ b/apps/remix-ide/src/app/tabs/locales/it/vyper.json @@ -0,0 +1,3 @@ +{ + "vyper.openaigptMessage": "vyper code: {content}\n error message: {messageText}\n spiega perché questo errore si è verificato e come risolverlo." +} diff --git a/apps/remix-ide/src/blockchain/blockchain.tsx b/apps/remix-ide/src/blockchain/blockchain.tsx index d5832e9ff44..6d3958a0648 100644 --- a/apps/remix-ide/src/blockchain/blockchain.tsx +++ b/apps/remix-ide/src/blockchain/blockchain.tsx @@ -146,6 +146,7 @@ export class Blockchain extends Plugin { this.pinnedProviders.push(name) this.call('config', 'setAppParameter', 'settings/pinned-providers', JSON.stringify(this.pinnedProviders)) _paq.push(['trackEvent', 'blockchain', 'providerPinned', name]) + this.emit('providersChanged') }) this.on('environmentExplorer', 'providerUnpinned', (name, provider) => { @@ -154,6 +155,7 @@ export class Blockchain extends Plugin { this.pinnedProviders.splice(index, 1) this.call('config', 'setAppParameter', 'settings/pinned-providers', JSON.stringify(this.pinnedProviders)) _paq.push(['trackEvent', 'blockchain', 'providerUnpinned', name]) + this.emit('providersChanged') }) this.call('config', 'getAppParameter', 'settings/pinned-providers').then((providers) => { @@ -665,10 +667,12 @@ export class Blockchain extends Plugin { addProvider(provider: Provider) { if (this.pinnedProviders.includes(provider.name)) this.emit('shouldAddProvidertoUdapp', provider.name, provider) this.executionContext.addProvider(provider) + this.emit('providersChanged') } removeProvider(name) { this.executionContext.removeProvider(name) + this.emit('providersChanged') } getAllProviders() { diff --git a/apps/remix-ide/team-best-practices.md b/apps/remix-ide/team-best-practices.md index 7517e3483c4..2088cd5bf96 100644 --- a/apps/remix-ide/team-best-practices.md +++ b/apps/remix-ide/team-best-practices.md @@ -5,7 +5,7 @@ This document aims to address contributors best practices of the following repos - remix-ide https://github.com/ethereum/remix-project - remix-plugin https://github.com/ethereum/remix-plugin -This document is not in its final version, **a team meeting which aims to address new/old best practices, feedback, workflows, all kind of issues related to how the team work together occurs every 2 weeks.** +This document is not in its final version, **a team meeting which aims to address new/old best practices, feedback, workflows, all kind of issues related to how the team works together occurs every 2 weeks.** This document link to other specialised best practices (like coding best practices). Related links: @@ -122,9 +122,9 @@ Before starting to coding, we should ensure all devs / contributors are aware of - A milestone should **only** contain items we are sure to finish. - The end of a milestone trigger a new release. - - Milestone items and duration should take in account time spent in bugs fixing and support. + - Milestone items and duration should take into account time spent in bugs fixing and support. - The team should commit to the milestone duration. - - If a dev finish early he/she can help other to push remaining tasks. + - If a dev finish early he/she can help others to push remaining tasks. - If a dev finish early he/she can work on specifying / integrating the next milestone. - A milestone duration is fixed at the start of the milestone (but should better not exceed 1 month). - Progress and issues regarding a milestone are discussed on regular standups. @@ -146,7 +146,7 @@ Before starting to coding, we should ensure all devs / contributors are aware of - After a new release we should stay in alert for possible regression and better not release on Friday at 5pm :) ### 2) Community: - - Before the official release, we should select a group of power users and invite them to test and give feedbacks. + - Before the official release, we should select a group of power users and invite them to test and give feedback. - Users need to know upfront a new release is coming and we should prepare them for it by showcasing some new features they can expect and when it will happen (fixed date, published at least 1 week in advance). - Whenever we have a new release we have to communicate this efficiently (twitter, reddit, ...). diff --git a/libs/README.md b/libs/README.md index 238a9b198a3..ade2450dbc4 100644 --- a/libs/README.md +++ b/libs/README.md @@ -30,8 +30,8 @@ Each library is an NPM package and has basic documentation about its usage in it ## Contributing -Everyone is very welcome to contribute on Remix Project. Suggestions, issues, queries and feedbacks are our pleasure. Please reach us on [Gitter](https://gitter.im/ethereum/remix) in case of any query. +Everyone is very welcome to contribute on Remix Project. Suggestions, issues, queries and feedback are our pleasure. Please reach us on [Gitter](https://gitter.im/ethereum/remix) in case of any query. -For more information on the contributing in code, see our [contribution guidelines](https://github.com/ethereum/remix-project/blob/master/CONTRIBUTING.md). +For more information on the contributing to the code, see our [contribution guidelines](https://github.com/ethereum/remix-project/blob/master/CONTRIBUTING.md). diff --git a/libs/remix-ai-core/src/agents/codeExplainAgent.ts b/libs/remix-ai-core/src/agents/codeExplainAgent.ts index 83e6adf9142..43143354603 100644 --- a/libs/remix-ai-core/src/agents/codeExplainAgent.ts +++ b/libs/remix-ai-core/src/agents/codeExplainAgent.ts @@ -1,4 +1,4 @@ -// interactive code explaining and highlight security vunerabilities +// interactive code explaining and highlight security vulnerabilities import * as fs from 'fs'; export class CodeExplainAgent { diff --git a/libs/remix-ai-core/src/agents/securityAgent.ts b/libs/remix-ai-core/src/agents/securityAgent.ts index 04b0e786e30..0a8f285db40 100644 --- a/libs/remix-ai-core/src/agents/securityAgent.ts +++ b/libs/remix-ai-core/src/agents/securityAgent.ts @@ -183,7 +183,7 @@ export class SecurityAgent { } public getRecommendations(currentLine: string, numSuggestions: number = 3): string[] { - // process the code base highlighting security vunerabilities and deliver recommendations + // process the code base highlighting security vulnerabilities and deliver recommendations const suggestions: string[] = []; return suggestions; } diff --git a/libs/remix-ai-core/src/prompts/promptBuilder.ts b/libs/remix-ai-core/src/prompts/promptBuilder.ts index 27c1c3705d2..fea867e36c7 100644 --- a/libs/remix-ai-core/src/prompts/promptBuilder.ts +++ b/libs/remix-ai-core/src/prompts/promptBuilder.ts @@ -9,7 +9,7 @@ export const PromptBuilder = (inst, answr, modelop) => { export const buildSolgptPromt = (userPrompt:string, modelOP:RemoteBackendOPModel) => { if (modelOP === undefined) { - console.log('WARNING: modelOP is undefined. Provide a valide model OP for chat history') + console.log('WARNING: modelOP is undefined. Provide a valid model OP for chat history') return userPrompt } if (ChatHistory.getHistory().length === 0){ @@ -27,4 +27,4 @@ export const buildSolgptPromt = (userPrompt:string, modelOP:RemoteBackendOPModel newPrompt = "sol-gpt " + newPrompt + PromptBuilder(parsedPrompt, "", modelOP) return newPrompt } -} \ No newline at end of file +} diff --git a/libs/remix-analyzer/src/solidity-analyzer/modules/selfdestruct.ts b/libs/remix-analyzer/src/solidity-analyzer/modules/selfdestruct.ts index e1ad68eceee..afb935f9683 100644 --- a/libs/remix-analyzer/src/solidity-analyzer/modules/selfdestruct.ts +++ b/libs/remix-analyzer/src/solidity-analyzer/modules/selfdestruct.ts @@ -6,7 +6,7 @@ import { AnalyzerModule, ModuleAlgorithm, ModuleCategory, ReportObj, ContractHLA export default class selfdestruct implements AnalyzerModule { name = 'Selfdestruct: ' - description = 'Contracts using destructed contract can be broken' + description = 'Contracts using destroyed contract can be broken' category: ModuleCategory = category.SECURITY algorithm: ModuleAlgorithm = algorithm.HEURISTIC version: SupportedVersion = { diff --git a/libs/remix-solidity/README.md b/libs/remix-solidity/README.md index 45f0cda698a..7c8042a3c74 100644 --- a/libs/remix-solidity/README.md +++ b/libs/remix-solidity/README.md @@ -25,7 +25,7 @@ ``` `CompilerInput` can be used to form the [compiler input](https://github.com/ethereum/remix-project/blob/master/libs/remix-solidity/src/compiler/types.ts#L1) by passing the [options](https://github.com/ethereum/remix-project/blob/master/libs/remix-solidity/src/compiler/types.ts#L144) -`Compiler` is a class containing various methods to perform compiler related actions. Have a look to `Compiler` interface: +`Compiler` is a class containing various methods to perform compiler related actions. Have a look at `Compiler` interface: ``` class Compiler { @@ -135,7 +135,7 @@ class Compiler { Please feel free to open an issue or a pull request. -In case you want to add some code, do have a look to our contribution guidelnes [here](https://github.com/ethereum/remix-project/blob/master/CONTRIBUTING.md). Reach us on [Gitter](https://gitter.im/ethereum/remix) in case of any queries. +In case you want to add some code, do have a look to our contribution guidelines [here](https://github.com/ethereum/remix-project/blob/master/CONTRIBUTING.md). Reach us on [Gitter](https://gitter.im/ethereum/remix) in case of any queries. ### License MIT © 2018-21 Remix Team diff --git a/libs/remix-tests/README.md b/libs/remix-tests/README.md index 428e1abe72c..768a34579eb 100644 --- a/libs/remix-tests/README.md +++ b/libs/remix-tests/README.md @@ -269,7 +269,7 @@ For more details, see parameters' type definitions [here](src/types.ts). Please feel free to open an issue or a pull request. -In case you want to add a code, do have a look to our contribution guidelines [here](https://github.com/ethereum/remix-project/blob/master/CONTRIBUTING.md). Reach us in [Gitter](https://gitter.im/ethereum/remix) in case of any queries. +In case you want to add a code, do have a look at our contribution guidelines [here](https://github.com/ethereum/remix-project/blob/master/CONTRIBUTING.md). Reach us in [Gitter](https://gitter.im/ethereum/remix) in case of any queries. ### License MIT © 2018-21 Remix Team diff --git a/libs/remix-ui/environment-explorer/src/index.ts b/libs/remix-ui/environment-explorer/src/index.ts new file mode 100644 index 00000000000..6b3a3132fa6 --- /dev/null +++ b/libs/remix-ui/environment-explorer/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/types' +export { EnvironmentExplorerUI } from './lib/components/environment-explorer-ui' \ No newline at end of file diff --git a/libs/remix-ui/environment-explorer/src/lib/components/environment-explorer-ui.tsx b/libs/remix-ui/environment-explorer/src/lib/components/environment-explorer-ui.tsx new file mode 100644 index 00000000000..967d597a8e3 --- /dev/null +++ b/libs/remix-ui/environment-explorer/src/lib/components/environment-explorer-ui.tsx @@ -0,0 +1,113 @@ +// eslint-disable-next-line no-use-before-define +import React, { useEffect, useState } from 'react' +import { environmentExplorerUIGridSections, environmentExplorerUIProps } from '../types' +import { RemixUIGridCell, RemixUIGridSection, RemixUIGridView } from '@remix-ui/remix-ui-grid-view' +import { CustomTooltip } from '@remix-ui/helper' + +const defaultSections: environmentExplorerUIGridSections = { + Injected: { + title: 'Deploy using a Browser Extension.', + keywords: ['Injected'], + providers: [], + filterFn: (provider) => provider.isInjected + }, + 'Remix VMs': { + title: 'Deploy to an In-browser Virtual Machine.', + keywords: ['Remix VMs'], + providers: [], + filterFn: (provider) => provider.isVM + }, + 'Saved VM States': { + title: 'Deploy to an In-browser Saved VM State.', + keywords: ['Saved VM States'], + providers: [], + filterFn: (provider) => provider.isSavedState, + descriptionFn: (provider) => { + const { latestBlock, timestamp } = JSON.parse(provider.description) + return ( + <> +
Latest Block: {parseInt(latestBlock)}
+ +
Saved at: {(new Date(timestamp)).toDateString()}
+
+ ) + } + }, + 'Remix forked VMs': { + title: 'Deploy to a Remix forked Virtual Machine.', + keywords: ['Remix forked VMs'], + providers: [], + filterFn: (provider) => provider.isForkedVM + }, + 'Externals': { + title: 'Deploy to an external Provider.', + keywords: ['Externals'], + providers: [], + filterFn: (provider) => (!provider.isInjected && !provider.isVM && !provider.isSavedState && !provider.isForkedVM) + }, +} +export const EnvironmentExplorerUI = (props: environmentExplorerUIProps) => { + + const [sections, setSections] = useState(defaultSections) + const { state, pinStateCallback, profile } = props + + useEffect(() => { + + setSections((prevSections) => { + const newSections = { ...prevSections } + Object.keys(newSections).forEach((section) => { + newSections[section].providers = Object.values(state.providersFlat).filter(newSections[section].filterFn) + newSections[section].id = section + }) + return newSections + }) + }, [state]) + + return ( + <> + + {Object.values(sections).map((section) => ( + section.providers.length > 0 && ( + + {section.providers.map(provider => ( + { + await pinStateCallback(provider, pinned) + }} + > +
{(section.descriptionFn && section.descriptionFn(provider)) || provider.description}
+
+ ))} +
+ ) + ))} +
+ + ) +} \ No newline at end of file diff --git a/libs/remix-ui/environment-explorer/src/lib/types/index.ts b/libs/remix-ui/environment-explorer/src/lib/types/index.ts new file mode 100644 index 00000000000..63320842885 --- /dev/null +++ b/libs/remix-ui/environment-explorer/src/lib/types/index.ts @@ -0,0 +1,46 @@ +import { Plugin } from '@remixproject/engine' +import { Profile } from '@remixproject/plugin-utils' + +export type ProvidersSection = `Injected` | 'Remix VMs' | 'Externals' | 'Remix forked VMs' | 'Saved VM States' + +export type environmentExplorerUIProps = { + state: { + providersFlat: { [key: string]: Provider } + pinnedProviders: string[] + } + pinStateCallback (provider: Provider, pinned: boolean): Promise + profile: Profile +} + +export type environmentExplorerUIGridSection = { + title: string + keywords: string[], + providers: Provider[] + filterFn: (provider: Provider) => boolean + descriptionFn?: (provider: Provider) => string | JSX.Element | null + id?: string +} + +export type environmentExplorerUIGridSections = { + [key in ProvidersSection]: environmentExplorerUIGridSection +} + +export type Provider = { + options: { [key: string]: string } + dataId: string + name: string + displayName: string + logo?: string, + logos?: string[], + fork: string + description?: string + isInjected: boolean + isVM: boolean + isSavedState: boolean + isForkedVM: boolean + title: string + init: () => Promise + provider: { + sendAsync: (payload: any) => Promise + } +} \ No newline at end of file diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.css b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.css index 760a85e1d66..3226d3c53ff 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.css +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.css @@ -31,6 +31,7 @@ right: 0.9rem; top: -0.7rem; background: transparent; + z-index: 1000; } .remixui_grid_cell_tags { diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.tsx b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.tsx index f215b9ab53b..18e9f7af866 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.tsx +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.tsx @@ -3,6 +3,7 @@ import React, {useState, useEffect, useContext, useRef, ReactNode, ReactHTMLElem import './remix-ui-grid-cell.css' import FiltersContext from "./filtersContext" import { CustomTooltip } from '@remix-ui/helper' +import { ChildCallbackContext } from './remix-ui-grid-section' declare global { interface Window { @@ -33,6 +34,7 @@ interface RemixUIGridCellProps { export const RemixUIGridCell = (props: RemixUIGridCellProps) => { const filterCon = useContext(FiltersContext) + const callbackContext = useContext(ChildCallbackContext) const [anyEnabled, setAnyEnabled] = useState(false) const [expand, setExpand] = useState(false) const [pinned, setPinned] = useState(props.pinned) @@ -52,8 +54,15 @@ export const RemixUIGridCell = (props: RemixUIGridCellProps) => { props.searchKeywords?.map(keyword => keyword?.toLowerCase()).some(searchKeyword => searchKeyword?.toLowerCase().includes(filterCon.filter?.toLocaleLowerCase()))) setAnyEnabled(enabled) + if (callbackContext.onChildCallback && (props.id || props.title)) callbackContext.onChildCallback((props.id || props.title), enabled) }, [filterCon, props.tagList]) + useEffect(() => { + if (props.pinned!== pinned) { + setPinned(props.pinned) + } + },[props.pinned]) + /*const listenOnExpand = (key) => { if (key === props.key) setExpand(props.toggleExpandView) console.log('expand ----> ', key) @@ -86,7 +95,7 @@ export const RemixUIGridCell = (props: RemixUIGridCellProps) => { : <> } - { props.logos && props.logos.map((logo) => )} + { props.logos && props.logos.map((logo, index) => )} { props.title && { tooltipId="pluginManagerInactiveTitleLinkToDoc" tooltipClasses="text-nowrap" tooltipText={props.tagList[key]} + key={props.tagList[key]} > void; +} + +// Create the context with a default value of `null` +export const ChildCallbackContext = createContext(null); + +interface ChildState { + id: string; + enabled: boolean; +} + interface RemixUIGridSectionProps { plugin: any title?: string @@ -22,59 +31,53 @@ interface RemixUIGridSectionProps { expandedCell?: any } -const hasChildCell = (children: ReactNode): boolean => { - return true - let found = false - - const isElement = (child: ReactNode): child is React.ReactElement => { - return React.isValidElement(child) - } +export const RemixUIGridSection = (props: RemixUIGridSectionProps) => { - const traverse = (child: ReactNode) => { - if (found) return + const [hide, setHide] = useState(false); + const [childrenStates, setChildrenStates] = useState([]); - if (isElement(child)) { - if (child.props.classList === 'remixui_grid_cell_container') { - found = true - return - } + // Callback to update the state of a child + const onChildCallback = (id: string, enabled: boolean) => { + setChildrenStates((prev) => { + const existingChild = prev.find((child) => child.id === id); - if (child.props.children) { - React.Children.forEach(child.props.children, traverse) + if (existingChild) { + // Update existing child + return prev.map((child) => + child.id === id ? { ...child, enabled } : child + ); + } else { + // Add new child + return [...prev, { id, enabled }]; } - } - } - - React.Children.forEach(children, traverse) - return found -} - -export const RemixUIGridSection = (props: RemixUIGridSectionProps) => { - const [children, setChildren] = useState(props.children) - const filterCon = useContext(FiltersContext) + }); + }; useEffect(() => { - setChildren(props.children) - }, [props.children]) + // Check if all children are disabled + const allDisabled = childrenStates.every((child) => !child.enabled); + setHide(allDisabled); + }, [childrenStates]); return ( -
-
- { props.title &&
{ props.title }
} -
- { !hasChildCell(children) && No items found } - { props.children } -
- { props.expandedCell &&
- { props.expandedCell } + +
+
+ { props.title &&
{ props.title }
} +
+ { props.children } +
+ { props.expandedCell &&
+ { props.expandedCell } +
+ }
- }
-
+ ) } diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-view.tsx b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-view.tsx index b8c83738695..c5597a5535c 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-view.tsx +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-view.tsx @@ -127,7 +127,7 @@ export const RemixUIGridView = (props: RemixUIGridViewProps) => {
{ Object.keys(keyValueMap).map((key) => ( - + )) }
diff --git a/libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx b/libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx index 14c7838a891..52793a2ad5c 100644 --- a/libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx +++ b/libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx @@ -29,7 +29,7 @@ export const CustomToggle = React.forwardRef( className={className.replace('dropdown-toggle', '')} >
-
{children}
+
{children}
{icon && (
diff --git a/libs/remix-ui/publish-to-storage/src/lib/publishOnSwarm.tsx b/libs/remix-ui/publish-to-storage/src/lib/publishOnSwarm.tsx index 1b86823de9a..b5389a84eb2 100644 --- a/libs/remix-ui/publish-to-storage/src/lib/publishOnSwarm.tsx +++ b/libs/remix-ui/publish-to-storage/src/lib/publishOnSwarm.tsx @@ -1,12 +1,9 @@ -import { Bee } from '@ethersphere/bee-js' +import { Bee, NULL_STAMP, SWARM_GATEWAY_URL } from '@ethersphere/bee-js' // eslint-disable-next-line no-unused-vars import type { UploadResult } from '@ethersphere/bee-js' // public gateway node address -const publicBeeNode = new Bee('https://api.gateway.ethswarm.org/') - -// on the public gateway the postage stamp id is not relevant, so we use all zeroes -const defaultPostageStampId = '0000000000000000000000000000000000000000000000000000000000000000' +const publicBeeNode = new Bee(SWARM_GATEWAY_URL) export const publishToSwarm = async (contract, api) => { // gather list of files to publish @@ -52,12 +49,12 @@ export const publishToSwarm = async (contract, api) => { sources.push({ content: content, hash: hash, - filename: fileName + filename: fileName, }) resolve({ content: content, hash: hash, - filename: fileName + filename: fileName, }) }) .catch((error) => { @@ -72,7 +69,7 @@ export const publishToSwarm = async (contract, api) => { const beeNodes = [publicBeeNode] // add custom private Bee node to the list - const postageStampId = api.config.get('settings/swarm-postage-stamp-id') || defaultPostageStampId + const postageStampId = api.config.get('settings/swarm-postage-stamp-id') || NULL_STAMP const privateBeeAddress = api.config.get('settings/swarm-private-bee-address') if (privateBeeAddress) { const privateBee = new Bee(privateBeeAddress) @@ -116,7 +113,7 @@ export const publishToSwarm = async (contract, api) => { content: contract.metadata, hash: contract.metadataHash, filename: 'metadata.json', - output: result + output: result, }) } catch (error) { console.error(error) @@ -135,7 +132,7 @@ const swarmVerifiedPublish = async (beeNodes: Bee[], postageStampId: string, con return { message: 'hash mismatch between solidity bytecode and uploaded content.', url: 'bzz-raw://' + hash, - hash + hash, } } else { api.writeFile('swarm/' + hash, content) @@ -158,7 +155,7 @@ const hashFromResults = (results: UploadResult[]) => { const uploadToBee = async (bee: Bee, postageStampId: string, content) => { try { if (bee.url === publicBeeNode.url) { - postageStampId = defaultPostageStampId + postageStampId = NULL_STAMP } return await bee.uploadData(postageStampId, content) } catch { diff --git a/libs/remix-ui/run-tab/src/lib/components/account.tsx b/libs/remix-ui/run-tab/src/lib/components/account.tsx index 27b3b7264df..7b55d51b19a 100644 --- a/libs/remix-ui/run-tab/src/lib/components/account.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/account.tsx @@ -4,7 +4,8 @@ import { FormattedMessage, useIntl } from 'react-intl' import { CopyToClipboard } from '@remix-ui/clipboard' import { AccountProps } from '../types' import { PassphrasePrompt } from './passphrase' -import { CustomTooltip } from '@remix-ui/helper' +import { CustomMenu, CustomToggle, CustomTooltip } from '@remix-ui/helper' +import { Dropdown } from 'react-bootstrap' const _paq = window._paq = window._paq || [] export function AccountUI(props: AccountProps) { @@ -235,22 +236,27 @@ export function AccountUI(props: AccountProps) { {props.accounts.isRequesting && }
- + + + {selectedAccount ? loadedAccounts[selectedAccount] : ''} + + + {accounts && accounts.length > 0 ? accounts.map((value, index) => ( + { + props.setAccount(value) + }} + data-id={`txOriginSelectAccountItem-${value}`} + > + + {loadedAccounts[value]} + + + )) : } + +
) @@ -280,4 +286,4 @@ const EIP712_Example = { { name: 'createdAt', type: 'uint256' }, ], }, -} \ No newline at end of file +} diff --git a/libs/remix-ws-templates/src/templates/ozerc721/index.ts b/libs/remix-ws-templates/src/templates/ozerc721/index.ts index d898a605584..433d928b43a 100644 --- a/libs/remix-ws-templates/src/templates/ozerc721/index.ts +++ b/libs/remix-ws-templates/src/templates/ozerc721/index.ts @@ -21,7 +21,7 @@ export default async (opts) => { '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default } - // If no options is selected, opts.upgradeable will be undefined + // If no options are selected, opts.upgradeable will be undefined // We do not show test file for upgradeable contract // @ts-ignore if (!opts || opts.upgradeable === undefined || !opts.upgradeable) { @@ -31,4 +31,4 @@ export default async (opts) => { else filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default } return filesObj -} \ No newline at end of file +} diff --git a/libs/remix-ws-templates/src/templates/rln/README.md b/libs/remix-ws-templates/src/templates/rln/README.md index a7db49489db..bbc62b4c0e4 100644 --- a/libs/remix-ws-templates/src/templates/rln/README.md +++ b/libs/remix-ws-templates/src/templates/rln/README.md @@ -29,8 +29,8 @@ This generates a verification key (`./zk/build/verification_key.json`) and artif This script: -- create a list of identity commitments and add it to a `IncrementalMerkleTree`. The tree is used to generate a merkle proof that a specified identity is actually in the tree (see`tree.createProof(0)`). +- creates a list of identity commitments and add it to a `IncrementalMerkleTree`. The tree is used to generate a merkle proof that a specified identity is actually in the tree (see`tree.createProof(0)`). - generate a witness and a proof of execution with `messageId`equal to 0. -- generating 2 proofs (two different messages) with the same `messageId` reveal the two points of the polynomial necessary to deduct the `identitySecret` (using `shamirRecovery`). +- generating 2 proofs (two different messages) with the same `messageId` reveal the two points of the polynomial necessary to deduce the `identitySecret` (using `shamirRecovery`). diff --git a/libs/remix-ws-templates/src/templates/semaphore/README.md b/libs/remix-ws-templates/src/templates/semaphore/README.md index d75ceec1459..5eb03fb7988 100644 --- a/libs/remix-ws-templates/src/templates/semaphore/README.md +++ b/libs/remix-ws-templates/src/templates/semaphore/README.md @@ -20,7 +20,7 @@ This generates a verification key (`./zk/build/verification_key.json`) and artif #### 3) execute the file `run_verification.ts`: This script: - - create a list of identity commitments and add it to a `IncrementalMerkleTree`. The tree is used to generate a merkle proof that a specified identity is actually in the tree (see `tree.createProof(0)`). - - generate a witness and a proof of execution. + - creates a list of identity commitments and add it to a `IncrementalMerkleTree`. The tree is used to generate a merkle proof that a specified identity is actually in the tree (see `tree.createProof(0)`). + - generates a witness and a proof of execution. - verify that the proof is valid `(snarkjs.groth16.verify)` - ultimately verify that the hash generated by the circom compiler is the same as the root hash for the Tree. `(proof1.root.toString() === publicSignals[0]`). This asserts that the identity provided to the circuit is actually part of that semaphore group. diff --git a/libs/remixd/README.md b/libs/remixd/README.md index 5738300893f..f3ec7484264 100644 --- a/libs/remixd/README.md +++ b/libs/remixd/README.md @@ -7,7 +7,7 @@ `@remix-project/remixd` is an NPM module that intends to be used with [Remix IDE](https://remix.ethereum.org/) web and desktop applications. It establishes a two-way websocket connection between the local computer and Remix IDE for a particular project directory. -`remixd` can be used to setup a development environment with other popular frameworks like Hardhat, Truffle, Slither etc. +`remixd` can be used to set up a development environment with other popular frameworks like Hardhat, Truffle, Slither etc. More details are explained in the [documentation](https://remix-ide.readthedocs.io/en/latest/remixd.html). @@ -71,13 +71,13 @@ The current user should have `read/write` access to the folder (at least `read` It is important to notice that changes made to the current file in `Remix IDE` are automatically saved to the local computer every 5000 ms. There is no `Save` action. But the `Ctrl-Z` (undo) can be used. Furthermore: - - No copy of the shared folder are kept in the browser storage. + - No copy of the shared folder is kept in the browser storage. - Clicking on the new folder or new file icon under localhost will create a new file or folder in the shared folder. - If a folder does not contain any file, the folder will not be displayed in the explorer (that might change). - Symbolic links are not forwarded to Remix IDE. ## Ports Usage -remixd creates a websocket connections with Remix IDE on different ports. Ports are defined according to specific purpose. Port usage details are as: +remixd creates a websocket connection with Remix IDE on different ports. Ports are defined according to specific purposes. Port usage details are as: - **65520** : For `remixd` websocket listener, to share a project from local device with Remix IDE. Shared folder will be loaded in the Remix IDE File Explorer workspace named localhost [See more](https://remix-ide.readthedocs.io/en/latest/remixd.html) - **65522** : For `Hardhat` websocket listener, to enable the Hardhat Compilation using Remix IDE Solidity Compiler plugin, if shared folder is a Hardhat project [See more](https://remix-ide.readthedocs.io/en/latest/hardhat.html) diff --git a/package.json b/package.json index 6da9934fcf8..5334c2f75ef 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", "@ethereumjs/vm": "8.1.1", - "@ethersphere/bee-js": "^3.2.0", + "@ethersphere/bee-js": "^8.3.0", "@floating-ui/react": "^0.26.15", "@fortawesome/fontawesome-svg-core": "^6.5.1", "@fortawesome/free-solid-svg-icons": "^6.5.1", diff --git a/release-management.md b/release-management.md index 3162c46afc9..3273394d12d 100644 --- a/release-management.md +++ b/release-management.md @@ -27,7 +27,7 @@ We check all the issues and associated effort and identify critical issues. e.g: - issues that'll need to be split. - issues that miss important information. - - issues that are dependent on each others. + - issues that are dependent on each other. - issues that require different skills or that the team member is less available during this release. ## Configuring releases: diff --git a/release-process.md b/release-process.md index d66786d602e..3443b2a0833 100644 --- a/release-process.md +++ b/release-process.md @@ -49,7 +49,7 @@ This command will ask for a new version. This command uses `lerna` and is solely responsible for publishing all the remix libraries. It will ask for a new version of each library. Make sure you are logged in to NPM. -Once these commands run successfully, the version for each remix library will be updated to latest in the libs' package.json file. +Once these commands run successfully, the version for each remix library will be updated to the latest in the libs' package.json file. - Create and merge bump PR to master diff --git a/tsconfig.paths.json b/tsconfig.paths.json index a61989661de..7e5cec001f4 100644 --- a/tsconfig.paths.json +++ b/tsconfig.paths.json @@ -183,8 +183,11 @@ "libs/remix-ai-core/src/index.ts" ], "@remix-ui/git": [ - "libs/remix-ui/git/src/index.ts" + "libs/remix-ui/git/src/index.ts" ], + "@remix-ui/environment-explorer": [ + "libs/remix-ui/environment-explorer/src/index.ts" + ], "@remix-api": [ "libs/remix-api/src/index.ts" ], diff --git a/yarn.lock b/yarn.lock index 32b59035345..89c2ba8cd6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2931,24 +2931,18 @@ debug "^4.3.3" ethereum-cryptography "^2.2.1" -"@ethersphere/bee-js@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@ethersphere/bee-js/-/bee-js-3.2.0.tgz#521eac63676d13d21585166754d2b6d20ee9e332" - integrity sha512-ZVcbl8dsytx07+SxTmsKSn0X1zojR7vMb0uxQ+fGk05JHFNGBY2Qv/5AP7rI/SqGWDjHWIMB8Ww+ErURdyFXqA== +"@ethersphere/bee-js@^8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@ethersphere/bee-js/-/bee-js-8.3.0.tgz#cea35ae6b5fcc80a91378382d017c080b7fedea1" + integrity sha512-/VLyAXluvftUcRDApvpA+H/oSP17W4rag95/N2IWdw6MPLkh92a/I724jhO+BmRmNomlAVspnl2UkhXSD2Xk5w== dependencies: - "@types/readable-stream" "^2.3.11" - bufferutil "^4.0.3" - cross-blob "^2.0.1" + axios "^0.28.1" + cafe-utility "^23.10.0" elliptic "^6.5.4" isomorphic-ws "^4.0.1" js-sha3 "^0.8.0" - ky "^0.25.1" - ky-universal "^0.8.2" - readable-stream "^3.6.0" - tar-js "^0.3.0" - utf-8-validate "^5.0.8" - web-streams-polyfill "^3.1.0" - ws "^7.5.0" + semver "^7.3.5" + ws "^8.7.0" "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": version "5.7.0" @@ -7775,14 +7769,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/readable-stream@^2.3.11": - version "2.3.13" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.13.tgz#46451c1b87cb61010e420ac02a76cfc1b2c2089a" - integrity sha512-4JSCx8EUzaW9Idevt+9lsRAt1lcSccoQfE+AouM1gk8sFxnnytKNIO3wTl9Dy+4m6jRJ1yXhboLHHT/LXBQiEw== - dependencies: - "@types/node" "*" - safe-buffer "*" - "@types/readable-stream@^2.3.13": version "2.3.15" resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" @@ -9764,6 +9750,15 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" +axios@^0.28.1: + version "0.28.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.28.1.tgz#2a7bcd34a3837b71ee1a5ca3762214b86b703e70" + integrity sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -10665,11 +10660,6 @@ blakejs@^1.1.0: resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== -blob-polyfill@^5.0.20210201: - version "5.0.20210201" - resolved "https://registry.yarnpkg.com/blob-polyfill/-/blob-polyfill-5.0.20210201.tgz#0024bfa5dcc3440eb5a2f1e5991cb1612a558465" - integrity sha512-SrH6IG6aXL9pCgSysBCiDpGcAJ1j6/c1qCwR3sTEQJhb+MTk6FITNA6eW6WNYQDNZVi4Z9GjxH5v2MMTv59CrQ== - blob-to-it@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-0.0.2.tgz#851b4db0be4acebc86dd1c14c14b77fdc473e9b0" @@ -11226,7 +11216,7 @@ buffer@~5.2.1: base64-js "^1.0.2" ieee754 "^1.1.4" -bufferutil@4.0.5, bufferutil@^4.0.3: +bufferutil@4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== @@ -11400,6 +11390,11 @@ caching-transform@^3.0.1: package-hash "^3.0.0" write-file-atomic "^2.3.0" +cafe-utility@^23.10.0: + version "23.11.0" + resolved "https://registry.yarnpkg.com/cafe-utility/-/cafe-utility-23.11.0.tgz#e48872a680516f3466ec96abe1e5ae4100cf9607" + integrity sha512-WF0ZpCDQ9c4pVwuyuSmPvlD5DZOt6w7HCtAQYjme7opSvF+qtK9ojnzBPNFe5COiM9B5+TeMt/0NBgyVJBQBrg== + call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -12958,14 +12953,6 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-blob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/cross-blob/-/cross-blob-2.0.1.tgz#7c187282e0855353705ed9ac5af2ee7f27c910c6" - integrity sha512-ARuKPPo3I6DSqizal4UCyMCiGPQdMpMJS3Owx6Lleuh26vSt2UnfWRwbMLCYqbJUrcol+KzGVSLR91ezSHP80A== - dependencies: - blob-polyfill "^5.0.20210201" - fetch-blob "^2.1.2" - cross-fetch@3.1.5, cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" @@ -13412,11 +13399,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - dataloader@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" @@ -15802,11 +15784,6 @@ fecha@^4.2.0: resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.1.tgz#0a83ad8f86ef62a091e22bb5a039cd03d23eecce" integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q== -fetch-blob@^2.1.1, fetch-blob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-2.1.2.tgz#a7805db1361bd44c1ef62bb57fb5fe8ea173ef3c" - integrity sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow== - ffjavascript@0.2.57: version "0.2.57" resolved "https://registry.yarnpkg.com/ffjavascript/-/ffjavascript-0.2.57.tgz#ba1be96015b2688192e49f2f4de2cc5150fd8594" @@ -20454,19 +20431,6 @@ kuler@^2.0.0: resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== -ky-universal@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.8.2.tgz#edc398d54cf495d7d6830aa1ab69559a3cc7f824" - integrity sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ== - dependencies: - abort-controller "^3.0.0" - node-fetch "3.0.0-beta.9" - -ky@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.25.1.tgz#0df0bd872a9cc57e31acd5dbc1443547c881bfbc" - integrity sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA== - labeled-stream-splicer@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" @@ -23205,14 +23169,6 @@ node-fetch@2.6.7, node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-fetch@3.0.0-beta.9: - version "3.0.0-beta.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.0.0-beta.9.tgz#0a7554cfb824380dd6812864389923c783c80d9b" - integrity sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg== - dependencies: - data-uri-to-buffer "^3.0.1" - fetch-blob "^2.1.1" - node-fetch@^2.6.12: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -27611,16 +27567,16 @@ safe-array-concat@^1.0.1: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@*, safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-identifier@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb" @@ -29496,11 +29452,6 @@ tar-fs@^3.0.4: pump "^3.0.0" tar-stream "^3.1.5" -tar-js@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/tar-js/-/tar-js-0.3.0.tgz#6949aabfb0ba18bb1562ae51a439fd0f30183a17" - integrity sha1-aUmqv7C6GLsVYq5RpDn9DzAYOhc= - tar-stream@^2.1.0, tar-stream@^2.1.4, tar-stream@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" @@ -30899,13 +30850,6 @@ utf-8-validate@6.0.3: dependencies: node-gyp-build "^4.3.0" -utf-8-validate@^5.0.8: - version "5.0.8" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.8.tgz#4a735a61661dbb1c59a0868c397d2fe263f14e58" - integrity sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA== - dependencies: - node-gyp-build "^4.3.0" - utf8-byte-length@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" @@ -31289,11 +31233,6 @@ web-namespaces@^2.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== -web-streams-polyfill@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz#a6b74026b38e4885869fb5c589e90b95ccfc7965" - integrity sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA== - web-streams-polyfill@^3.2.1: version "3.3.3" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" @@ -32043,7 +31982,7 @@ ws@8.5.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== -ws@>=8.7.0, ws@^8.12.0, ws@^8.13.0, ws@^8.15.0, ws@^8.17.1, ws@^8.4.2, ws@^8.8.1: +ws@>=8.7.0, ws@^8.12.0, ws@^8.13.0, ws@^8.15.0, ws@^8.17.1, ws@^8.4.2, ws@^8.7.0, ws@^8.8.1: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== @@ -32056,7 +31995,7 @@ ws@^1.1.1: options ">=0.0.5" ultron "1.0.x" -ws@^7.3.1, ws@^7.4.6, ws@^7.5.0, ws@^7.5.1: +ws@^7.3.1, ws@^7.4.6, ws@^7.5.1: version "7.5.10" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==