From 60cf131b0faa3c5d7035ef2def656ee2c794a1a3 Mon Sep 17 00:00:00 2001 From: ryestew Date: Tue, 30 Apr 2024 15:14:51 -0400 Subject: [PATCH 01/69] update font-awesome with Vyper logo --- .../src/assets/fontawesome/css/all.css | 425 +++++++++++++++++- .../fontawesome/webfonts/custom-icons.ttf | Bin 9004 -> 4404 bytes .../fontawesome/webfonts/custom-icons.woff2 | Bin 5156 -> 2608 bytes 3 files changed, 409 insertions(+), 16 deletions(-) diff --git a/apps/remix-ide/src/assets/fontawesome/css/all.css b/apps/remix-ide/src/assets/fontawesome/css/all.css index 09fd88bb0b..7513e4fc29 100644 --- a/apps/remix-ide/src/assets/fontawesome/css/all.css +++ b/apps/remix-ide/src/assets/fontawesome/css/all.css @@ -15,6 +15,7 @@ .fasl, .fat, .fa-thin, +.fast, .fad, .fa-duotone, .fass, @@ -52,6 +53,7 @@ .fass, .fasr, .fasl, +.fast, .fa-sharp { font-family: 'Font Awesome 6 Sharp'; } @@ -487,8 +489,8 @@ transform: scale(-1, -1); } .fa-rotate-by { - -webkit-transform: rotate(var(--fa-rotate-angle, none)); - transform: rotate(var(--fa-rotate-angle, none)); } + -webkit-transform: rotate(var(--fa-rotate-angle, 0)); + transform: rotate(var(--fa-rotate-angle, 0)); } .fa-stack { display: inline-block; @@ -591,6 +593,7 @@ readers do not read off random characters that represent icons */ .fa-angles-up-down::before { content: "\e60d"; } .fa-angry::before { content: "\f556"; } .fa-ankh::before { content: "\f644"; } +.fa-ant::before { content: "\e680"; } .fa-apartment::before { content: "\e468"; } .fa-aperture::before { content: "\e2df"; } .fa-apostrophe::before { content: "\27"; } @@ -632,6 +635,7 @@ readers do not read off random characters that represent icons */ .fa-arrow-down-arrow-up::before { content: "\f883"; } .fa-arrow-down-big-small::before { content: "\f88c"; } .fa-arrow-down-from-arc::before { content: "\e614"; } +.fa-arrow-down-from-bracket::before { content: "\e667"; } .fa-arrow-down-from-dotted-line::before { content: "\e090"; } .fa-arrow-down-from-line::before { content: "\f345"; } .fa-arrow-down-left::before { content: "\e091"; } @@ -657,11 +661,13 @@ readers do not read off random characters that represent icons */ .fa-arrow-from-top::before { content: "\f345"; } .fa-arrow-left::before { content: "\f060"; } .fa-arrow-left-from-arc::before { content: "\e615"; } +.fa-arrow-left-from-bracket::before { content: "\e668"; } .fa-arrow-left-from-line::before { content: "\f344"; } .fa-arrow-left-long::before { content: "\f177"; } .fa-arrow-left-long-to-line::before { content: "\e3d4"; } .fa-arrow-left-rotate::before { content: "\f0e2"; } .fa-arrow-left-to-arc::before { content: "\e616"; } +.fa-arrow-left-to-bracket::before { content: "\e669"; } .fa-arrow-left-to-line::before { content: "\f33e"; } .fa-arrow-pointer::before { content: "\f245"; } .fa-arrow-progress::before { content: "\e5df"; } @@ -697,7 +703,10 @@ readers do not read off random characters that represent icons */ .fa-arrow-turn-down::before { content: "\f149"; } .fa-arrow-turn-down-left::before { content: "\e2e1"; } .fa-arrow-turn-down-right::before { content: "\e3d6"; } -.fa-arrow-turn-right::before { content: "\f064"; } +.fa-arrow-turn-left::before { content: "\e632"; } +.fa-arrow-turn-left-down::before { content: "\e633"; } +.fa-arrow-turn-left-up::before { content: "\e634"; } +.fa-arrow-turn-right::before { content: "\e635"; } .fa-arrow-turn-up::before { content: "\f148"; } .fa-arrow-up::before { content: "\f062"; } .fa-arrow-up-1-9::before { content: "\f163"; } @@ -723,6 +732,7 @@ readers do not read off random characters that represent icons */ .fa-arrow-up-small-big::before { content: "\f88f"; } .fa-arrow-up-square-triangle::before { content: "\f88b"; } .fa-arrow-up-to-arc::before { content: "\e617"; } +.fa-arrow-up-to-bracket::before { content: "\e66a"; } .fa-arrow-up-to-dotted-line::before { content: "\e0a1"; } .fa-arrow-up-to-line::before { content: "\f341"; } .fa-arrow-up-triangle-square::before { content: "\f88a"; } @@ -746,6 +756,7 @@ readers do not read off random characters that represent icons */ .fa-arrows-repeat-1::before { content: "\f366"; } .fa-arrows-retweet::before { content: "\f361"; } .fa-arrows-rotate::before { content: "\f021"; } +.fa-arrows-rotate-reverse::before { content: "\e630"; } .fa-arrows-spin::before { content: "\e4bb"; } .fa-arrows-split-up-and-left::before { content: "\e4bc"; } .fa-arrows-to-circle::before { content: "\e4bd"; } @@ -796,6 +807,8 @@ readers do not read off random characters that represent icons */ .fa-badminton::before { content: "\e33a"; } .fa-bag-seedling::before { content: "\e5f2"; } .fa-bag-shopping::before { content: "\f290"; } +.fa-bag-shopping-minus::before { content: "\e650"; } +.fa-bag-shopping-plus::before { content: "\e651"; } .fa-bagel::before { content: "\e3d7"; } .fa-bags-shopping::before { content: "\f847"; } .fa-baguette::before { content: "\e3d8"; } @@ -834,6 +847,8 @@ readers do not read off random characters that represent icons */ .fa-baseball-ball::before { content: "\f433"; } .fa-baseball-bat-ball::before { content: "\f432"; } .fa-basket-shopping::before { content: "\f291"; } +.fa-basket-shopping-minus::before { content: "\e652"; } +.fa-basket-shopping-plus::before { content: "\e653"; } .fa-basket-shopping-simple::before { content: "\e0af"; } .fa-basketball::before { content: "\f434"; } .fa-basketball-ball::before { content: "\f434"; } @@ -874,6 +889,7 @@ readers do not read off random characters that represent icons */ .fa-bell-exclamation::before { content: "\f848"; } .fa-bell-on::before { content: "\f8fa"; } .fa-bell-plus::before { content: "\f849"; } +.fa-bell-ring::before { content: "\e62c"; } .fa-bell-school::before { content: "\f5d5"; } .fa-bell-school-slash::before { content: "\f5d6"; } .fa-bell-slash::before { content: "\f1f6"; } @@ -978,6 +994,7 @@ readers do not read off random characters that represent icons */ .fa-border-top::before { content: "\f855"; } .fa-border-top-left::before { content: "\f853"; } .fa-bore-hole::before { content: "\e4c3"; } +.fa-bottle-baby::before { content: "\e673"; } .fa-bottle-droplet::before { content: "\e4c4"; } .fa-bottle-water::before { content: "\e4c5"; } .fa-bow-arrow::before { content: "\f6b9"; } @@ -1074,12 +1091,15 @@ readers do not read off random characters that represent icons */ .fa-building-columns::before { content: "\f19c"; } .fa-building-flag::before { content: "\e4d5"; } .fa-building-lock::before { content: "\e4d6"; } +.fa-building-magnifying-glass::before { content: "\e61c"; } +.fa-building-memo::before { content: "\e61e"; } .fa-building-ngo::before { content: "\e4d7"; } .fa-building-shield::before { content: "\e4d8"; } .fa-building-un::before { content: "\e4d9"; } .fa-building-user::before { content: "\e4da"; } .fa-building-wheat::before { content: "\e4db"; } .fa-buildings::before { content: "\e0cc"; } +.fa-bulldozer::before { content: "\e655"; } .fa-bullhorn::before { content: "\f0a1"; } .fa-bullseye::before { content: "\f140"; } .fa-bullseye-arrow::before { content: "\f648"; } @@ -1108,6 +1128,7 @@ readers do not read off random characters that represent icons */ .fa-cabinet-filing::before { content: "\f64b"; } .fa-cable-car::before { content: "\f7da"; } .fa-cactus::before { content: "\f8a7"; } +.fa-caduceus::before { content: "\e681"; } .fa-cake::before { content: "\f1fd"; } .fa-cake-candles::before { content: "\f1fd"; } .fa-cake-slice::before { content: "\e3e5"; } @@ -1172,6 +1193,7 @@ readers do not read off random characters that represent icons */ .fa-candy-cane::before { content: "\f786"; } .fa-candy-corn::before { content: "\f6bd"; } .fa-cannabis::before { content: "\f55f"; } +.fa-cannon::before { content: "\e642"; } .fa-capsules::before { content: "\f46b"; } .fa-car::before { content: "\f1b9"; } .fa-car-alt::before { content: "\f5de"; } @@ -1266,6 +1288,7 @@ readers do not read off random characters that represent icons */ .fa-chart-candlestick::before { content: "\e0e2"; } .fa-chart-column::before { content: "\e0e3"; } .fa-chart-gantt::before { content: "\e0e4"; } +.fa-chart-kanban::before { content: "\e64f"; } .fa-chart-line::before { content: "\f201"; } .fa-chart-line-down::before { content: "\f64d"; } .fa-chart-line-up::before { content: "\e0e5"; } @@ -1408,6 +1431,7 @@ readers do not read off random characters that represent icons */ .fa-circle-exclamation-check::before { content: "\e10d"; } .fa-circle-f::before { content: "\e10e"; } .fa-circle-g::before { content: "\e10f"; } +.fa-circle-gf::before { content: "\e67f"; } .fa-circle-h::before { content: "\f47e"; } .fa-circle-half::before { content: "\e110"; } .fa-circle-half-stroke::before { content: "\f042"; } @@ -1464,6 +1488,9 @@ readers do not read off random characters that represent icons */ .fa-circle-video::before { content: "\e12b"; } .fa-circle-w::before { content: "\e12c"; } .fa-circle-waveform-lines::before { content: "\e12d"; } +.fa-circle-wifi::before { content: "\e67d"; } +.fa-circle-wifi-circle-wifi::before { content: "\e67e"; } +.fa-circle-wifi-group::before { content: "\e67e"; } .fa-circle-x::before { content: "\e12e"; } .fa-circle-xmark::before { content: "\f057"; } .fa-circle-y::before { content: "\e12f"; } @@ -1683,6 +1710,7 @@ readers do not read off random characters that represent icons */ .fa-corner::before { content: "\e3fe"; } .fa-couch::before { content: "\f4b8"; } .fa-couch-small::before { content: "\f4cc"; } +.fa-court-sport::before { content: "\e643"; } .fa-cow::before { content: "\f6c8"; } .fa-cowbell::before { content: "\f8b3"; } .fa-cowbell-circle-plus::before { content: "\f8b4"; } @@ -1828,6 +1856,7 @@ readers do not read off random characters that represent icons */ .fa-doughnut::before { content: "\e406"; } .fa-dove::before { content: "\f4ba"; } .fa-down::before { content: "\f354"; } +.fa-down-from-bracket::before { content: "\e66b"; } .fa-down-from-dotted-line::before { content: "\e407"; } .fa-down-from-line::before { content: "\f349"; } .fa-down-left::before { content: "\e16a"; } @@ -1915,6 +1944,7 @@ readers do not read off random characters that represent icons */ .fa-eur::before { content: "\f153"; } .fa-euro::before { content: "\f153"; } .fa-euro-sign::before { content: "\f153"; } +.fa-excavator::before { content: "\e656"; } .fa-exchange::before { content: "\f0ec"; } .fa-exchange-alt::before { content: "\f362"; } .fa-exclamation::before { content: "\21"; } @@ -2086,6 +2116,7 @@ readers do not read off random characters that represent icons */ .fa-file-audio::before { content: "\f1c7"; } .fa-file-award::before { content: "\f5f3"; } .fa-file-binary::before { content: "\e175"; } +.fa-file-cad::before { content: "\e672"; } .fa-file-caret-down::before { content: "\e429"; } .fa-file-caret-up::before { content: "\e42a"; } .fa-file-certificate::before { content: "\f5f3"; } @@ -2108,40 +2139,52 @@ readers do not read off random characters that represent icons */ .fa-file-doc::before { content: "\e5ed"; } .fa-file-download::before { content: "\f56d"; } .fa-file-edit::before { content: "\f31c"; } +.fa-file-eps::before { content: "\e644"; } .fa-file-excel::before { content: "\f1c3"; } .fa-file-exclamation::before { content: "\f31a"; } .fa-file-export::before { content: "\f56e"; } +.fa-file-gif::before { content: "\e645"; } .fa-file-heart::before { content: "\e176"; } .fa-file-image::before { content: "\f1c5"; } .fa-file-import::before { content: "\f56f"; } .fa-file-invoice::before { content: "\f570"; } .fa-file-invoice-dollar::before { content: "\f571"; } +.fa-file-jpg::before { content: "\e646"; } .fa-file-lines::before { content: "\f15c"; } .fa-file-lock::before { content: "\e3a6"; } .fa-file-magnifying-glass::before { content: "\f865"; } .fa-file-medical::before { content: "\f477"; } .fa-file-medical-alt::before { content: "\f478"; } .fa-file-minus::before { content: "\f318"; } +.fa-file-mov::before { content: "\e647"; } +.fa-file-mp3::before { content: "\e648"; } +.fa-file-mp4::before { content: "\e649"; } .fa-file-music::before { content: "\f8b6"; } .fa-file-pdf::before { content: "\f1c1"; } .fa-file-pen::before { content: "\f31c"; } .fa-file-plus::before { content: "\f319"; } .fa-file-plus-minus::before { content: "\e177"; } +.fa-file-png::before { content: "\e666"; } .fa-file-powerpoint::before { content: "\f1c4"; } +.fa-file-ppt::before { content: "\e64a"; } .fa-file-prescription::before { content: "\f572"; } .fa-file-search::before { content: "\f865"; } .fa-file-shield::before { content: "\e4f0"; } .fa-file-signature::before { content: "\f573"; } .fa-file-slash::before { content: "\e3a7"; } .fa-file-spreadsheet::before { content: "\f65b"; } +.fa-file-svg::before { content: "\e64b"; } .fa-file-text::before { content: "\f15c"; } .fa-file-times::before { content: "\f317"; } .fa-file-upload::before { content: "\f574"; } .fa-file-user::before { content: "\f65c"; } +.fa-file-vector::before { content: "\e64c"; } .fa-file-video::before { content: "\f1c8"; } .fa-file-waveform::before { content: "\f478"; } .fa-file-word::before { content: "\f1c2"; } +.fa-file-xls::before { content: "\e64d"; } .fa-file-xmark::before { content: "\f317"; } +.fa-file-xml::before { content: "\e654"; } .fa-file-zip::before { content: "\e5ee"; } .fa-file-zipper::before { content: "\f1c6"; } .fa-files::before { content: "\e178"; } @@ -2217,6 +2260,7 @@ readers do not read off random characters that represent icons */ .fa-folder-arrow-up::before { content: "\e054"; } .fa-folder-blank::before { content: "\f07b"; } .fa-folder-bookmark::before { content: "\e186"; } +.fa-folder-check::before { content: "\e64e"; } .fa-folder-closed::before { content: "\e185"; } .fa-folder-cog::before { content: "\e187"; } .fa-folder-download::before { content: "\e053"; } @@ -2408,6 +2452,7 @@ readers do not read off random characters that represent icons */ .fa-h6::before { content: "\e413"; } .fa-hamburger::before { content: "\f805"; } .fa-hammer::before { content: "\f6e3"; } +.fa-hammer-brush::before { content: "\e620"; } .fa-hammer-crash::before { content: "\e414"; } .fa-hammer-war::before { content: "\f6e4"; } .fa-hamsa::before { content: "\f665"; } @@ -2424,6 +2469,7 @@ readers do not read off random characters that represent icons */ .fa-hand-heart::before { content: "\f4bc"; } .fa-hand-holding::before { content: "\f4bd"; } .fa-hand-holding-box::before { content: "\f47b"; } +.fa-hand-holding-circle-dollar::before { content: "\e621"; } .fa-hand-holding-dollar::before { content: "\f4c0"; } .fa-hand-holding-droplet::before { content: "\f4c1"; } .fa-hand-holding-hand::before { content: "\e4f7"; } @@ -2749,6 +2795,7 @@ readers do not read off random characters that represent icons */ .fa-landmark-alt::before { content: "\f752"; } .fa-landmark-dome::before { content: "\f752"; } .fa-landmark-flag::before { content: "\e51c"; } +.fa-landmark-magnifying-glass::before { content: "\e622"; } .fa-landscape::before { content: "\e1b5"; } .fa-language::before { content: "\f1ab"; } .fa-laptop::before { content: "\f109"; } @@ -2778,10 +2825,12 @@ readers do not read off random characters that represent icons */ .fa-leaf-oak::before { content: "\f6f7"; } .fa-leafy-green::before { content: "\e41d"; } .fa-left::before { content: "\f355"; } +.fa-left-from-bracket::before { content: "\e66c"; } .fa-left-from-line::before { content: "\f348"; } .fa-left-long::before { content: "\f30a"; } .fa-left-long-to-line::before { content: "\e41e"; } .fa-left-right::before { content: "\f337"; } +.fa-left-to-bracket::before { content: "\e66d"; } .fa-left-to-line::before { content: "\f34b"; } .fa-legal::before { content: "\f0e3"; } .fa-lemon::before { content: "\f094"; } @@ -2840,6 +2889,7 @@ readers do not read off random characters that represent icons */ .fa-lobster::before { content: "\e421"; } .fa-location::before { content: "\f601"; } .fa-location-arrow::before { content: "\f124"; } +.fa-location-arrow-up::before { content: "\e63a"; } .fa-location-check::before { content: "\f606"; } .fa-location-circle::before { content: "\f602"; } .fa-location-crosshairs::before { content: "\f601"; } @@ -2890,11 +2940,15 @@ readers do not read off random characters that represent icons */ .fa-magnet::before { content: "\f076"; } .fa-magnifying-glass::before { content: "\f002"; } .fa-magnifying-glass-arrow-right::before { content: "\e521"; } +.fa-magnifying-glass-arrows-rotate::before { content: "\e65e"; } .fa-magnifying-glass-chart::before { content: "\e522"; } .fa-magnifying-glass-dollar::before { content: "\f688"; } .fa-magnifying-glass-location::before { content: "\f689"; } .fa-magnifying-glass-minus::before { content: "\f010"; } +.fa-magnifying-glass-music::before { content: "\e65f"; } +.fa-magnifying-glass-play::before { content: "\e660"; } .fa-magnifying-glass-plus::before { content: "\f00e"; } +.fa-magnifying-glass-waveform::before { content: "\e661"; } .fa-mail-bulk::before { content: "\f674"; } .fa-mail-forward::before { content: "\f064"; } .fa-mail-reply::before { content: "\f3e5"; } @@ -3102,6 +3156,7 @@ readers do not read off random characters that represent icons */ .fa-music::before { content: "\f001"; } .fa-music-alt::before { content: "\f8cf"; } .fa-music-alt-slash::before { content: "\f8d0"; } +.fa-music-magnifying-glass::before { content: "\e662"; } .fa-music-note::before { content: "\f8cf"; } .fa-music-note-slash::before { content: "\f8d0"; } .fa-music-slash::before { content: "\f8d1"; } @@ -3540,6 +3595,9 @@ readers do not read off random characters that represent icons */ .fa-redo::before { content: "\f01e"; } .fa-redo-alt::before { content: "\f2f9"; } .fa-reel::before { content: "\e238"; } +.fa-reflect-both::before { content: "\e66f"; } +.fa-reflect-horizontal::before { content: "\e664"; } +.fa-reflect-vertical::before { content: "\e665"; } .fa-refresh::before { content: "\f021"; } .fa-refrigerator::before { content: "\e026"; } .fa-registered::before { content: "\f25d"; } @@ -3595,6 +3653,7 @@ readers do not read off random characters that represent icons */ .fa-rotate-exclamation::before { content: "\e23c"; } .fa-rotate-forward::before { content: "\f2f9"; } .fa-rotate-left::before { content: "\f2ea"; } +.fa-rotate-reverse::before { content: "\e631"; } .fa-rotate-right::before { content: "\f2f9"; } .fa-rouble::before { content: "\f158"; } .fa-route::before { content: "\f4d7"; } @@ -3770,6 +3829,9 @@ readers do not read off random characters that represent icons */ .fa-sign-language::before { content: "\f2a7"; } .fa-sign-out::before { content: "\f08b"; } .fa-sign-out-alt::before { content: "\f2f5"; } +.fa-sign-post::before { content: "\e624"; } +.fa-sign-posts::before { content: "\e625"; } +.fa-sign-posts-wrench::before { content: "\e626"; } .fa-signal::before { content: "\f012"; } .fa-signal-1::before { content: "\f68c"; } .fa-signal-2::before { content: "\f68d"; } @@ -3912,6 +3974,7 @@ readers do not read off random characters that represent icons */ .fa-spider-black-widow::before { content: "\f718"; } .fa-spider-web::before { content: "\f719"; } .fa-spinner::before { content: "\f110"; } +.fa-spinner-scale::before { content: "\e62a"; } .fa-spinner-third::before { content: "\f3f4"; } .fa-split::before { content: "\e254"; } .fa-splotch::before { content: "\f5bc"; } @@ -4128,10 +4191,14 @@ readers do not read off random characters that represent icons */ .fa-sync-alt::before { content: "\f2f1"; } .fa-syringe::before { content: "\f48e"; } .fa-t::before { content: "\54"; } +.fa-t-rex::before { content: "\e629"; } .fa-t-shirt::before { content: "\f553"; } .fa-table::before { content: "\f0ce"; } .fa-table-cells::before { content: "\f00a"; } +.fa-table-cells-column-lock::before { content: "\e678"; } .fa-table-cells-large::before { content: "\f009"; } +.fa-table-cells-lock::before { content: "\e679"; } +.fa-table-cells-row-lock::before { content: "\e67a"; } .fa-table-columns::before { content: "\f0db"; } .fa-table-layout::before { content: "\e290"; } .fa-table-list::before { content: "\f00b"; } @@ -4218,6 +4285,7 @@ readers do not read off random characters that represent icons */ .fa-tent-arrow-left-right::before { content: "\e57f"; } .fa-tent-arrow-turn-left::before { content: "\e580"; } .fa-tent-arrows-down::before { content: "\e581"; } +.fa-tent-double-peak::before { content: "\e627"; } .fa-tents::before { content: "\e582"; } .fa-terminal::before { content: "\f120"; } .fa-text::before { content: "\f893"; } @@ -4253,8 +4321,16 @@ readers do not read off random characters that represent icons */ .fa-ticket::before { content: "\f145"; } .fa-ticket-airline::before { content: "\e29a"; } .fa-ticket-alt::before { content: "\f3ff"; } +.fa-ticket-perforated::before { content: "\e63e"; } +.fa-ticket-perforated-plane::before { content: "\e29a"; } +.fa-ticket-plane::before { content: "\e29a"; } .fa-ticket-simple::before { content: "\f3ff"; } +.fa-tickets::before { content: "\e658"; } .fa-tickets-airline::before { content: "\e29b"; } +.fa-tickets-perforated::before { content: "\e63f"; } +.fa-tickets-perforated-plane::before { content: "\e29b"; } +.fa-tickets-plane::before { content: "\e29b"; } +.fa-tickets-simple::before { content: "\e659"; } .fa-tilde::before { content: "\7e"; } .fa-timeline::before { content: "\e29c"; } .fa-timeline-arrow::before { content: "\e29d"; } @@ -4396,8 +4472,10 @@ readers do not read off random characters that represent icons */ .fa-truck-fast::before { content: "\f48b"; } .fa-truck-field::before { content: "\e58d"; } .fa-truck-field-un::before { content: "\e58e"; } +.fa-truck-fire::before { content: "\e65a"; } .fa-truck-flatbed::before { content: "\e2b6"; } .fa-truck-front::before { content: "\e2b7"; } +.fa-truck-ladder::before { content: "\e657"; } .fa-truck-loading::before { content: "\f4de"; } .fa-truck-medical::before { content: "\f0f9"; } .fa-truck-monster::before { content: "\f63b"; } @@ -4409,6 +4487,7 @@ readers do not read off random characters that represent icons */ .fa-truck-ramp-box::before { content: "\f4de"; } .fa-truck-ramp-couch::before { content: "\f4dd"; } .fa-truck-tow::before { content: "\e2b8"; } +.fa-truck-utensils::before { content: "\e628"; } .fa-trumpet::before { content: "\f8e3"; } .fa-try::before { content: "\e2bb"; } .fa-tshirt::before { content: "\f553"; } @@ -4421,6 +4500,10 @@ readers do not read off random characters that represent icons */ .fa-turn-down::before { content: "\f3be"; } .fa-turn-down-left::before { content: "\e331"; } .fa-turn-down-right::before { content: "\e455"; } +.fa-turn-left::before { content: "\e636"; } +.fa-turn-left-down::before { content: "\e637"; } +.fa-turn-left-up::before { content: "\e638"; } +.fa-turn-right::before { content: "\e639"; } .fa-turn-up::before { content: "\f3bf"; } .fa-turntable::before { content: "\f8e4"; } .fa-turtle::before { content: "\f726"; } @@ -4460,6 +4543,7 @@ readers do not read off random characters that represent icons */ .fa-up-right::before { content: "\e2be"; } .fa-up-right-and-down-left-from-center::before { content: "\f424"; } .fa-up-right-from-square::before { content: "\f35d"; } +.fa-up-to-bracket::before { content: "\e66e"; } .fa-up-to-dotted-line::before { content: "\e457"; } .fa-up-to-line::before { content: "\f34d"; } .fa-upload::before { content: "\f093"; } @@ -4641,6 +4725,7 @@ readers do not read off random characters that represent icons */ .fa-water-lower::before { content: "\f774"; } .fa-water-rise::before { content: "\f775"; } .fa-watermelon-slice::before { content: "\e337"; } +.fa-wave::before { content: "\e65b"; } .fa-wave-pulse::before { content: "\f5f8"; } .fa-wave-sine::before { content: "\f899"; } .fa-wave-square::before { content: "\f83e"; } @@ -4649,6 +4734,8 @@ readers do not read off random characters that represent icons */ .fa-waveform-circle::before { content: "\e12d"; } .fa-waveform-lines::before { content: "\f8f2"; } .fa-waveform-path::before { content: "\f8f2"; } +.fa-waves-sine::before { content: "\e65d"; } +.fa-web-awesome::before { content: "\e682"; } .fa-webcam::before { content: "\f832"; } .fa-webcam-slash::before { content: "\f833"; } .fa-webhook::before { content: "\e5d5"; } @@ -4746,9 +4833,9 @@ readers do not read off random characters that represent icons */ border-width: 0; } /*! - * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * Font Awesome Pro 6.5.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license (Commercial License) - * Copyright 2023 Fonticons, Inc. + * Copyright 2024 Fonticons, Inc. */ :root, :host { --fa-style-family-brands: 'Font Awesome 6 Brands'; @@ -4801,6 +4888,9 @@ readers do not read off random characters that represent icons */ .fa-ups:before { content: "\f7e0"; } +.fa-pixiv:before { + content: "\e640"; } + .fa-wpexplorer:before { content: "\f2de"; } @@ -4861,6 +4951,9 @@ readers do not read off random characters that represent icons */ .fa-drupal:before { content: "\f1a9"; } +.fa-jxl:before { + content: "\e67b"; } + .fa-hire-a-helper:before { content: "\f3b0"; } @@ -4906,6 +4999,9 @@ readers do not read off random characters that represent icons */ .fa-deskpro:before { content: "\f38f"; } +.fa-brave:before { + content: "\e63c"; } + .fa-sistrix:before { content: "\f3ee"; } @@ -5074,6 +5170,9 @@ readers do not read off random characters that represent icons */ .fa-cloudsmith:before { content: "\f384"; } +.fa-opensuse:before { + content: "\e62b"; } + .fa-pied-piper-alt:before { content: "\f1a8"; } @@ -5158,6 +5257,9 @@ readers do not read off random characters that represent icons */ .fa-kickstarter:before { content: "\f3bb"; } +.fa-square-kickstarter:before { + content: "\f3bb"; } + .fa-grav:before { content: "\f2d6"; } @@ -5218,6 +5320,9 @@ readers do not read off random characters that represent icons */ .fa-bluetooth-b:before { content: "\f294"; } +.fa-square-letterboxd:before { + content: "\e62e"; } + .fa-sticker-mule:before { content: "\f3f7"; } @@ -5377,6 +5482,9 @@ readers do not read off random characters that represent icons */ .fa-envira:before { content: "\f299"; } +.fa-google-scholar:before { + content: "\e63b"; } + .fa-square-gitlab:before { content: "\e5ae"; } @@ -5509,6 +5617,9 @@ readers do not read off random characters that represent icons */ .fa-vine:before { content: "\f1ca"; } +.fa-signal-messenger:before { + content: "\e663"; } + .fa-paypal:before { content: "\f1ed"; } @@ -5542,6 +5653,9 @@ readers do not read off random characters that represent icons */ .fa-nfc-symbol:before { content: "\e531"; } +.fa-mintbit:before { + content: "\e62f"; } + .fa-ethereum:before { content: "\f42e"; } @@ -5566,6 +5680,9 @@ readers do not read off random characters that represent icons */ .fa-bimobject:before { content: "\f378"; } +.fa-brave-reverse:before { + content: "\e63d"; } + .fa-facebook-f:before { content: "\f39e"; } @@ -5575,6 +5692,9 @@ readers do not read off random characters that represent icons */ .fa-google-plus-square:before { content: "\f0d4"; } +.fa-web-awesome:before { + content: "\e682"; } + .fa-mandalorian:before { content: "\f50f"; } @@ -5668,6 +5788,9 @@ readers do not read off random characters that represent icons */ .fa-tencent-weibo:before { content: "\f1d5"; } +.fa-letterboxd:before { + content: "\e62d"; } + .fa-symfony:before { content: "\f83d"; } @@ -5734,6 +5857,9 @@ readers do not read off random characters that represent icons */ .fa-xbox:before { content: "\f412"; } +.fa-square-web-awesome-stroke:before { + content: "\e684"; } + .fa-searchengin:before { content: "\f3eb"; } @@ -5806,6 +5932,9 @@ readers do not read off random characters that represent icons */ .fa-cmplid:before { content: "\e360"; } +.fa-upwork:before { + content: "\e641"; } + .fa-facebook:before { content: "\f09a"; } @@ -5839,6 +5968,9 @@ readers do not read off random characters that represent icons */ .fa-whatsapp:before { content: "\f232"; } +.fa-square-upwork:before { + content: "\e67c"; } + .fa-slideshare:before { content: "\f1e7"; } @@ -5917,6 +6049,9 @@ readers do not read off random characters that represent icons */ .fa-sellsy:before { content: "\f213"; } +.fa-square-web-awesome:before { + content: "\e683"; } + .fa-sass:before { content: "\f41e"; } @@ -5953,6 +6088,9 @@ readers do not read off random characters that represent icons */ .fa-waze:before { content: "\f83f"; } +.fa-bluesky:before { + content: "\e671"; } + .fa-cc-jcb:before { content: "\f24b"; } @@ -5980,6 +6118,9 @@ readers do not read off random characters that represent icons */ .fa-supple:before { content: "\f3f9"; } +.fa-webflow:before { + content: "\e65c"; } + .fa-rebel:before { content: "\f1d0"; } @@ -6287,9 +6428,9 @@ readers do not read off random characters that represent icons */ content: "\f3f6"; } /*! - * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * Font Awesome Pro 6.5.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license (Commercial License) - * Copyright 2023 Fonticons, Inc. + * Copyright 2024 Fonticons, Inc. */ :root, :host { --fa-style-family-classic: 'Font Awesome 6 Pro'; @@ -6307,9 +6448,9 @@ readers do not read off random characters that represent icons */ font-weight: 300; } /*! - * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * Font Awesome Pro 6.5.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license (Commercial License) - * Copyright 2023 Fonticons, Inc. + * Copyright 2024 Fonticons, Inc. */ :root, :host { --fa-style-family-classic: 'Font Awesome 6 Pro'; @@ -6327,9 +6468,9 @@ readers do not read off random characters that represent icons */ font-weight: 400; } /*! - * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * Font Awesome Pro 6.5.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license (Commercial License) - * Copyright 2023 Fonticons, Inc. + * Copyright 2024 Fonticons, Inc. */ :root, :host { --fa-style-family-classic: 'Font Awesome 6 Pro'; @@ -6347,9 +6488,9 @@ readers do not read off random characters that represent icons */ font-weight: 900; } /*! - * Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com + * Font Awesome Pro 6.5.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license (Commercial License) - * Copyright 2023 Fonticons, Inc. + * Copyright 2024 Fonticons, Inc. */ :root, :host { --fa-style-family-duotone: 'Font Awesome 6 Duotone'; @@ -6776,6 +6917,9 @@ readers do not read off random characters that represent icons */ .fad.fa-square-x::after, .fa-duotone.fa-square-x::after { content: "\e286\e286"; } +.fad.fa-building-memo::after, .fa-duotone.fa-building-memo::after { + content: "\e61e\e61e"; } + .fad.fa-utility-pole-double::after, .fa-duotone.fa-utility-pole-double::after { content: "\e2c4\e2c4"; } @@ -6941,6 +7085,9 @@ readers do not read off random characters that represent icons */ .fad.fa-arrow-down-up-across-line::after, .fa-duotone.fa-arrow-down-up-across-line::after { content: "\e4af\e4af"; } +.fad.fa-arrows-rotate-reverse::after, .fa-duotone.fa-arrows-rotate-reverse::after { + content: "\e630\e630"; } + .fad.fa-leaf-heart::after, .fa-duotone.fa-leaf-heart::after { content: "\f4cb\f4cb"; } @@ -7046,6 +7193,9 @@ readers do not read off random characters that represent icons */ .fad.fa-eggplant::after, .fa-duotone.fa-eggplant::after { content: "\e16c\e16c"; } +.fad.fa-excavator::after, .fa-duotone.fa-excavator::after { + content: "\e656\e656"; } + .fad.fa-ram::after, .fa-duotone.fa-ram::after { content: "\f70a\f70a"; } @@ -7337,6 +7487,9 @@ readers do not read off random characters that represent icons */ .fad.fa-trash-clock::after, .fa-duotone.fa-trash-clock::after { content: "\e2b0\e2b0"; } +.fad.fa-reflect-both::after, .fa-duotone.fa-reflect-both::after { + content: "\e66f\e66f"; } + .fad.fa-gavel::after, .fa-duotone.fa-gavel::after { content: "\f0e3\f0e3"; } @@ -7412,6 +7565,9 @@ readers do not read off random characters that represent icons */ .fad.fa-pencil-ruler::after, .fa-duotone.fa-pencil-ruler::after { content: "\f5ae\f5ae"; } +.fad.fa-file-mp3::after, .fa-duotone.fa-file-mp3::after { + content: "\e648\e648"; } + .fad.fa-arrow-progress::after, .fa-duotone.fa-arrow-progress::after { content: "\e5df\e5df"; } @@ -7433,6 +7589,9 @@ readers do not read off random characters that represent icons */ .fad.fa-people-arrows-left-right::after, .fa-duotone.fa-people-arrows-left-right::after { content: "\e068\e068"; } +.fad.fa-sign-post::after, .fa-duotone.fa-sign-post::after { + content: "\e624\e624"; } + .fad.fa-face-angry-horns::after, .fa-duotone.fa-face-angry-horns::after { content: "\e368\e368"; } @@ -7565,6 +7724,9 @@ readers do not read off random characters that represent icons */ .fad.fa-file-circle-question::after, .fa-duotone.fa-file-circle-question::after { content: "\e4ef\e4ef"; } +.fad.fa-truck-utensils::after, .fa-duotone.fa-truck-utensils::after { + content: "\e628\e628"; } + .fad.fa-laptop-code::after, .fa-duotone.fa-laptop-code::after { content: "\f5fc\f5fc"; } @@ -8228,9 +8390,15 @@ readers do not read off random characters that represent icons */ .fad.fa-print-search::after, .fa-duotone.fa-print-search::after { content: "\f81a\f81a"; } +.fad.fa-turn-right::after, .fa-duotone.fa-turn-right::after { + content: "\e639\e639"; } + .fad.fa-folder-bookmark::after, .fa-duotone.fa-folder-bookmark::after { content: "\e186\e186"; } +.fad.fa-arrow-turn-left-down::after, .fa-duotone.fa-arrow-turn-left-down::after { + content: "\e633\e633"; } + .fad.fa-om::after, .fa-duotone.fa-om::after { content: "\f679\f679"; } @@ -8594,6 +8762,9 @@ readers do not read off random characters that represent icons */ .fad.fa-head-side-cough-slash::after, .fa-duotone.fa-head-side-cough-slash::after { content: "\e062\e062"; } +.fad.fa-file-mov::after, .fa-duotone.fa-file-mov::after { + content: "\e647\e647"; } + .fad.fa-triangle::after, .fa-duotone.fa-triangle::after { content: "\f2ec\f2ec"; } @@ -8747,6 +8918,9 @@ readers do not read off random characters that represent icons */ .fad.fa-tally-1::after, .fa-duotone.fa-tally-1::after { content: "\e294\e294"; } +.fad.fa-file-vector::after, .fa-duotone.fa-file-vector::after { + content: "\e64c\e64c"; } + .fad.fa-face-frown-open::after, .fa-duotone.fa-face-frown-open::after { content: "\f57a\f57a"; } @@ -8756,6 +8930,9 @@ readers do not read off random characters that represent icons */ .fad.fa-square-dashed::after, .fa-duotone.fa-square-dashed::after { content: "\e269\e269"; } +.fad.fa-bag-shopping-plus::after, .fa-duotone.fa-bag-shopping-plus::after { + content: "\e651\e651"; } + .fad.fa-square-j::after, .fa-duotone.fa-square-j::after { content: "\e273\e273"; } @@ -8885,6 +9062,9 @@ readers do not read off random characters that represent icons */ .fad.fa-trash-plus::after, .fa-duotone.fa-trash-plus::after { content: "\e2b2\e2b2"; } +.fad.fa-file-cad::after, .fa-duotone.fa-file-cad::after { + content: "\e672\e672"; } + .fad.fa-objects-align-top::after, .fa-duotone.fa-objects-align-top::after { content: "\e3c0\e3c0"; } @@ -8993,6 +9173,9 @@ readers do not read off random characters that represent icons */ .fad.fa-badge-percent::after, .fa-duotone.fa-badge-percent::after { content: "\f646\f646"; } +.fad.fa-rotate-reverse::after, .fa-duotone.fa-rotate-reverse::after { + content: "\e631\e631"; } + .fad.fa-user::after, .fa-duotone.fa-user::after { content: "\f007\f007"; } @@ -9050,6 +9233,9 @@ readers do not read off random characters that represent icons */ .fad.fa-key::after, .fa-duotone.fa-key::after { content: "\f084\f084"; } +.fad.fa-arrow-left-to-bracket::after, .fa-duotone.fa-arrow-left-to-bracket::after { + content: "\e669\e669"; } + .fad.fa-hat-santa::after, .fa-duotone.fa-hat-santa::after { content: "\f7a7\f7a7"; } @@ -9134,6 +9320,9 @@ readers do not read off random characters that represent icons */ .fad.fa-mailbox::after, .fa-duotone.fa-mailbox::after { content: "\f813\f813"; } +.fad.fa-sign-posts::after, .fa-duotone.fa-sign-posts::after { + content: "\e625\e625"; } + .fad.fa-truck-bolt::after, .fa-duotone.fa-truck-bolt::after { content: "\e3d0\e3d0"; } @@ -9380,6 +9569,9 @@ readers do not read off random characters that represent icons */ .fad.fa-diagram-venn::after, .fa-duotone.fa-diagram-venn::after { content: "\e15a\e15a"; } +.fad.fa-arrow-down-from-bracket::after, .fa-duotone.fa-arrow-down-from-bracket::after { + content: "\e667\e667"; } + .fad.fa-x-ray::after, .fa-duotone.fa-x-ray::after { content: "\f497\f497"; } @@ -9437,6 +9629,9 @@ readers do not read off random characters that represent icons */ .fad.fa-files-medical::after, .fa-duotone.fa-files-medical::after { content: "\f7fd\f7fd"; } +.fad.fa-cannon::after, .fa-duotone.fa-cannon::after { + content: "\e642\e642"; } + .fad.fa-nfc-lock::after, .fa-duotone.fa-nfc-lock::after { content: "\e1f8\e1f8"; } @@ -9545,6 +9740,9 @@ readers do not read off random characters that represent icons */ .fad.fa-apostrophe::after, .fa-duotone.fa-apostrophe::after { content: "\27\27"; } +.fad.fa-file-png::after, .fa-duotone.fa-file-png::after { + content: "\e666\e666"; } + .fad.fa-fire-hydrant::after, .fa-duotone.fa-fire-hydrant::after { content: "\e17f\e17f"; } @@ -9626,6 +9824,9 @@ readers do not read off random characters that represent icons */ .fad.fa-file-prescription::after, .fa-duotone.fa-file-prescription::after { content: "\f572\f572"; } +.fad.fa-table-cells-lock::after, .fa-duotone.fa-table-cells-lock::after { + content: "\e679\e679"; } + .fad.fa-calendar-range::after, .fa-duotone.fa-calendar-range::after { content: "\e0d6\e0d6"; } @@ -9995,6 +10196,9 @@ readers do not read off random characters that represent icons */ .fad.fa-square-o::after, .fa-duotone.fa-square-o::after { content: "\e278\e278"; } +.fad.fa-caduceus::after, .fa-duotone.fa-caduceus::after { + content: "\e681\e681"; } + .fad.fa-signature::after, .fa-duotone.fa-signature::after { content: "\f5b7\f5b7"; } @@ -10493,6 +10697,9 @@ readers do not read off random characters that represent icons */ .fad.fa-arrow-up-right-and-arrow-down-left-from-center::after, .fa-duotone.fa-arrow-up-right-and-arrow-down-left-from-center::after { content: "\e0a0\e0a0"; } +.fad.fa-location-arrow-up::after, .fa-duotone.fa-location-arrow-up::after { + content: "\e63a\e63a"; } + .fad.fa-tablets::after, .fa-duotone.fa-tablets::after { content: "\f490\f490"; } @@ -10523,6 +10730,9 @@ readers do not read off random characters that represent icons */ .fad.fa-square-dashed-circle-plus::after, .fa-duotone.fa-square-dashed-circle-plus::after { content: "\e5c2\e5c2"; } +.fad.fa-hand-holding-circle-dollar::after, .fa-duotone.fa-hand-holding-circle-dollar::after { + content: "\e621\e621"; } + .fad.fa-money-simple-from-bracket::after, .fa-duotone.fa-money-simple-from-bracket::after { content: "\e313\e313"; } @@ -10541,6 +10751,9 @@ readers do not read off random characters that represent icons */ .fad.fa-phone-rotary::after, .fa-duotone.fa-phone-rotary::after { content: "\f8d3\f8d3"; } +.fad.fa-arrow-up-to-bracket::after, .fa-duotone.fa-arrow-up-to-bracket::after { + content: "\e66a\e66a"; } + .fad.fa-compass-drafting::after, .fa-duotone.fa-compass-drafting::after { content: "\f568\f568"; } @@ -10673,6 +10886,9 @@ readers do not read off random characters that represent icons */ .fad.fa-user-tie::after, .fa-duotone.fa-user-tie::after { content: "\f508\f508"; } +.fad.fa-up-to-bracket::after, .fa-duotone.fa-up-to-bracket::after { + content: "\e66e\e66e"; } + .fad.fa-arrow-down-long::after, .fa-duotone.fa-arrow-down-long::after { content: "\f175\f175"; } @@ -10973,6 +11189,9 @@ readers do not read off random characters that represent icons */ .fad.fa-flashlight::after, .fa-duotone.fa-flashlight::after { content: "\f8b8\f8b8"; } +.fad.fa-file-jpg::after, .fa-duotone.fa-file-jpg::after { + content: "\e646\e646"; } + .fad.fa-group-arrows-rotate::after, .fa-duotone.fa-group-arrows-rotate::after { content: "\e4f6\e4f6"; } @@ -11063,6 +11282,9 @@ readers do not read off random characters that represent icons */ .fad.fa-circle-6::after, .fa-duotone.fa-circle-6::after { content: "\e0f3\e0f3"; } +.fad.fa-waves-sine::after, .fa-duotone.fa-waves-sine::after { + content: "\e65d\e65d"; } + .fad.fa-left::after, .fa-duotone.fa-left::after { content: "\f355\f355"; } @@ -11210,6 +11432,9 @@ readers do not read off random characters that represent icons */ .fad.fa-fire-extinguisher::after, .fa-duotone.fa-fire-extinguisher::after { content: "\f134\f134"; } +.fad.fa-magnifying-glass-arrows-rotate::after, .fa-duotone.fa-magnifying-glass-arrows-rotate::after { + content: "\e65e\e65e"; } + .fad.fa-garage-open::after, .fa-duotone.fa-garage-open::after { content: "\e00b\e00b"; } @@ -11273,6 +11498,9 @@ readers do not read off random characters that represent icons */ .fad.fa-comment-middle-top::after, .fa-duotone.fa-comment-middle-top::after { content: "\e14a\e14a"; } +.fad.fa-wave::after, .fa-duotone.fa-wave::after { + content: "\e65b\e65b"; } + .fad.fa-envelope-circle-check::after, .fa-duotone.fa-envelope-circle-check::after { content: "\e4e8\e4e8"; } @@ -11312,6 +11540,9 @@ readers do not read off random characters that represent icons */ .fad.fa-file-archive::after, .fa-duotone.fa-file-archive::after { content: "\f1c6\f1c6"; } +.fad.fa-ticket-perforated::after, .fa-duotone.fa-ticket-perforated::after { + content: "\e63e\e63e"; } + .fad.fa-heart-half::after, .fa-duotone.fa-heart-half::after { content: "\e1ab\e1ab"; } @@ -11345,6 +11576,9 @@ readers do not read off random characters that represent icons */ .fad.fa-calendar-lines-pen::after, .fa-duotone.fa-calendar-lines-pen::after { content: "\e472\e472"; } +.fad.fa-table-cells-column-lock::after, .fa-duotone.fa-table-cells-column-lock::after { + content: "\e678\e678"; } + .fad.fa-church::after, .fa-duotone.fa-church::after { content: "\f51d\f51d"; } @@ -11360,6 +11594,9 @@ readers do not read off random characters that represent icons */ .fad.fa-comments-dollar::after, .fa-duotone.fa-comments-dollar::after { content: "\f653\f653"; } +.fad.fa-tickets-simple::after, .fa-duotone.fa-tickets-simple::after { + content: "\e659\e659"; } + .fad.fa-pickaxe::after, .fa-duotone.fa-pickaxe::after { content: "\e5bf\e5bf"; } @@ -11735,6 +11972,9 @@ readers do not read off random characters that represent icons */ .fad.fa-sack-xmark::after, .fa-duotone.fa-sack-xmark::after { content: "\e56a\e56a"; } +.fad.fa-file-xls::after, .fa-duotone.fa-file-xls::after { + content: "\e64d\e64d"; } + .fad.fa-file-excel::after, .fa-duotone.fa-file-excel::after { content: "\f1c3\f1c3"; } @@ -11873,6 +12113,9 @@ readers do not read off random characters that represent icons */ .fad.fa-mask-ventilator::after, .fa-duotone.fa-mask-ventilator::after { content: "\e524\e524"; } +.fad.fa-tickets::after, .fa-duotone.fa-tickets::after { + content: "\e658\e658"; } + .fad.fa-signature-lock::after, .fa-duotone.fa-signature-lock::after { content: "\e3ca\e3ca"; } @@ -11936,6 +12179,9 @@ readers do not read off random characters that represent icons */ .fad.fa-clock-nine::after, .fa-duotone.fa-clock-nine::after { content: "\e34c\e34c"; } +.fad.fa-hammer-brush::after, .fa-duotone.fa-hammer-brush::after { + content: "\e620\e620"; } + .fad.fa-tarp::after, .fa-duotone.fa-tarp::after { content: "\e57b\e57b"; } @@ -11972,6 +12218,9 @@ readers do not read off random characters that represent icons */ .fad.fa-grid-round-4::after, .fa-duotone.fa-grid-round-4::after { content: "\e5dd\e5dd"; } +.fad.fa-sign-posts-wrench::after, .fa-duotone.fa-sign-posts-wrench::after { + content: "\e626\e626"; } + .fad.fa-shirt-running::after, .fa-duotone.fa-shirt-running::after { content: "\e3c8\e3c8"; } @@ -12185,6 +12434,9 @@ readers do not read off random characters that represent icons */ .fad.fa-circle::after, .fa-duotone.fa-circle::after { content: "\f111\f111"; } +.fad.fa-left-to-bracket::after, .fa-duotone.fa-left-to-bracket::after { + content: "\e66d\e66d"; } + .fad.fa-cart-circle-exclamation::after, .fa-duotone.fa-cart-circle-exclamation::after { content: "\e3f2\e3f2"; } @@ -12320,6 +12572,9 @@ readers do not read off random characters that represent icons */ .fad.fa-transporter-6::after, .fa-duotone.fa-transporter-6::after { content: "\e2a7\e2a7"; } +.fad.fa-arrow-turn-left::after, .fa-duotone.fa-arrow-turn-left::after { + content: "\e632\e632"; } + .fad.fa-wrench::after, .fa-duotone.fa-wrench::after { content: "\f0ad\f0ad"; } @@ -12347,6 +12602,9 @@ readers do not read off random characters that represent icons */ .fad.fa-question-circle::after, .fa-duotone.fa-question-circle::after { content: "\f059\f059"; } +.fad.fa-tickets-perforated::after, .fa-duotone.fa-tickets-perforated::after { + content: "\e63f\e63f"; } + .fad.fa-image-user::after, .fa-duotone.fa-image-user::after { content: "\e1b8\e1b8"; } @@ -12449,6 +12707,9 @@ readers do not read off random characters that represent icons */ .fad.fa-user-crown::after, .fa-duotone.fa-user-crown::after { content: "\f6a4\f6a4"; } +.fad.fa-basket-shopping-plus::after, .fa-duotone.fa-basket-shopping-plus::after { + content: "\e653\e653"; } + .fad.fa-truck-field::after, .fa-duotone.fa-truck-field::after { content: "\e58d\e58d"; } @@ -12479,6 +12740,9 @@ readers do not read off random characters that represent icons */ .fad.fa-head-side-medical::after, .fa-duotone.fa-head-side-medical::after { content: "\f809\f809"; } +.fad.fa-arrow-turn-right::after, .fa-duotone.fa-arrow-turn-right::after { + content: "\e635\e635"; } + .fad.fa-tags::after, .fa-duotone.fa-tags::after { content: "\f02c\f02c"; } @@ -12605,6 +12869,12 @@ readers do not read off random characters that represent icons */ .fad.fa-ticket-airline::after, .fa-duotone.fa-ticket-airline::after { content: "\e29a\e29a"; } +.fad.fa-ticket-perforated-plane::after, .fa-duotone.fa-ticket-perforated-plane::after { + content: "\e29a\e29a"; } + +.fad.fa-ticket-plane::after, .fa-duotone.fa-ticket-plane::after { + content: "\e29a\e29a"; } + .fad.fa-boot-heeled::after, .fa-duotone.fa-boot-heeled::after { content: "\e33f\e33f"; } @@ -12875,6 +13145,9 @@ readers do not read off random characters that represent icons */ .fad.fa-mars-double::after, .fa-duotone.fa-mars-double::after { content: "\f227\f227"; } +.fad.fa-left-from-bracket::after, .fa-duotone.fa-left-from-bracket::after { + content: "\e66c\e66c"; } + .fad.fa-house-person-leave::after, .fa-duotone.fa-house-person-leave::after { content: "\e00f\e00f"; } @@ -13073,6 +13346,9 @@ readers do not read off random characters that represent icons */ .fad.fa-hat-wizard::after, .fa-duotone.fa-hat-wizard::after { content: "\f6e8\f6e8"; } +.fad.fa-chart-kanban::after, .fa-duotone.fa-chart-kanban::after { + content: "\e64f\e64f"; } + .fad.fa-pen-fancy::after, .fa-duotone.fa-pen-fancy::after { content: "\f5ac\f5ac"; } @@ -13103,6 +13379,9 @@ readers do not read off random characters that represent icons */ .fad.fa-car-side-bolt::after, .fa-duotone.fa-car-side-bolt::after { content: "\e344\e344"; } +.fad.fa-file-xml::after, .fa-duotone.fa-file-xml::after { + content: "\e654\e654"; } + .fad.fa-ornament::after, .fa-duotone.fa-ornament::after { content: "\f7b8\f7b8"; } @@ -13247,6 +13526,9 @@ readers do not read off random characters that represent icons */ .fad.fa-ruler::after, .fa-duotone.fa-ruler::after { content: "\f545\f545"; } +.fad.fa-arrow-left-from-bracket::after, .fa-duotone.fa-arrow-left-from-bracket::after { + content: "\e668\e668"; } + .fad.fa-cup-straw-swoosh::after, .fa-duotone.fa-cup-straw-swoosh::after { content: "\e364\e364"; } @@ -13304,6 +13586,9 @@ readers do not read off random characters that represent icons */ .fad.fa-th::after, .fa-duotone.fa-th::after { content: "\f00a\f00a"; } +.fad.fa-bag-shopping-minus::after, .fa-duotone.fa-bag-shopping-minus::after { + content: "\e650\e650"; } + .fad.fa-file-pdf::after, .fa-duotone.fa-file-pdf::after { content: "\f1c1\f1c1"; } @@ -13487,6 +13772,9 @@ readers do not read off random characters that represent icons */ .fad.fa-satellite::after, .fa-duotone.fa-satellite::after { content: "\f7bf\f7bf"; } +.fad.fa-truck-fire::after, .fa-duotone.fa-truck-fire::after { + content: "\e65a\e65a"; } + .fad.fa-plane-lock::after, .fa-duotone.fa-plane-lock::after { content: "\e558\e558"; } @@ -13541,6 +13829,9 @@ readers do not read off random characters that represent icons */ .fad.fa-head-side::after, .fa-duotone.fa-head-side::after { content: "\f6e9\f6e9"; } +.fad.fa-truck-ladder::after, .fa-duotone.fa-truck-ladder::after { + content: "\e657\e657"; } + .fad.fa-envelope::after, .fa-duotone.fa-envelope::after { content: "\f0e0\f0e0"; } @@ -13598,6 +13889,9 @@ readers do not read off random characters that represent icons */ .fad.fa-litecoin-sign::after, .fa-duotone.fa-litecoin-sign::after { content: "\e1d3\e1d3"; } +.fad.fa-bottle-baby::after, .fa-duotone.fa-bottle-baby::after { + content: "\e673\e673"; } + .fad.fa-circle-small::after, .fa-duotone.fa-circle-small::after { content: "\e122\e122"; } @@ -13607,12 +13901,21 @@ readers do not read off random characters that represent icons */ .fad.fa-arrow-turn-down-left::after, .fa-duotone.fa-arrow-turn-down-left::after { content: "\e2e1\e2e1"; } +.fad.fa-circle-wifi-circle-wifi::after, .fa-duotone.fa-circle-wifi-circle-wifi::after { + content: "\e67e\e67e"; } + +.fad.fa-circle-wifi-group::after, .fa-duotone.fa-circle-wifi-group::after { + content: "\e67e\e67e"; } + .fad.fa-circle-nodes::after, .fa-duotone.fa-circle-nodes::after { content: "\e4e2\e4e2"; } .fad.fa-parachute-box::after, .fa-duotone.fa-parachute-box::after { content: "\f4cd\f4cd"; } +.fad.fa-reflect-horizontal::after, .fa-duotone.fa-reflect-horizontal::after { + content: "\e664\e664"; } + .fad.fa-message-medical::after, .fa-duotone.fa-message-medical::after { content: "\f7f4\f7f4"; } @@ -13745,6 +14048,9 @@ readers do not read off random characters that represent icons */ .fad.fa-hand-holding-water::after, .fa-duotone.fa-hand-holding-water::after { content: "\f4c1\f4c1"; } +.fad.fa-file-eps::after, .fa-duotone.fa-file-eps::after { + content: "\e644\e644"; } + .fad.fa-tricycle-adult::after, .fa-duotone.fa-tricycle-adult::after { content: "\e5c4\e5c4"; } @@ -13805,6 +14111,9 @@ readers do not read off random characters that represent icons */ .fad.fa-truck::after, .fa-duotone.fa-truck::after { content: "\f0d1\f0d1"; } +.fad.fa-music-magnifying-glass::after, .fa-duotone.fa-music-magnifying-glass::after { + content: "\e662\e662"; } + .fad.fa-crosshairs::after, .fa-duotone.fa-crosshairs::after { content: "\f05b\f05b"; } @@ -14057,6 +14366,9 @@ readers do not read off random characters that represent icons */ .fad.fa-thunderstorm-moon::after, .fa-duotone.fa-thunderstorm-moon::after { content: "\f76d\f76d"; } +.fad.fa-turn-left-up::after, .fa-duotone.fa-turn-left-up::after { + content: "\e638\e638"; } + .fad.fa-dna::after, .fa-duotone.fa-dna::after { content: "\f471\f471"; } @@ -14954,6 +15266,9 @@ readers do not read off random characters that represent icons */ .fad.fa-dedent::after, .fa-duotone.fa-dedent::after { content: "\f03b\f03b"; } +.fad.fa-court-sport::after, .fa-duotone.fa-court-sport::after { + content: "\e643\e643"; } + .fad.fa-heart-circle-exclamation::after, .fa-duotone.fa-heart-circle-exclamation::after { content: "\e4fe\e4fe"; } @@ -15242,6 +15557,9 @@ readers do not read off random characters that represent icons */ .fad.fa-person-simple::after, .fa-duotone.fa-person-simple::after { content: "\e220\e220"; } +.fad.fa-arrow-turn-left-up::after, .fa-duotone.fa-arrow-turn-left-up::after { + content: "\e634\e634"; } + .fad.fa-vault::after, .fa-duotone.fa-vault::after { content: "\e2c5\e2c5"; } @@ -15389,6 +15707,9 @@ readers do not read off random characters that represent icons */ .fad.fa-wave-triangle::after, .fa-duotone.fa-wave-triangle::after { content: "\f89a\f89a"; } +.fad.fa-turn-left-down::after, .fa-duotone.fa-turn-left-down::after { + content: "\e637\e637"; } + .fad.fa-person-running-fast::after, .fa-duotone.fa-person-running-fast::after { content: "\e5ff\e5ff"; } @@ -15488,6 +15809,15 @@ readers do not read off random characters that represent icons */ .fad.fa-tickets-airline::after, .fa-duotone.fa-tickets-airline::after { content: "\e29b\e29b"; } +.fad.fa-tickets-perforated-plane::after, .fa-duotone.fa-tickets-perforated-plane::after { + content: "\e29b\e29b"; } + +.fad.fa-tickets-plane::after, .fa-duotone.fa-tickets-plane::after { + content: "\e29b\e29b"; } + +.fad.fa-tent-double-peak::after, .fa-duotone.fa-tent-double-peak::after { + content: "\e627\e627"; } + .fad.fa-anchor-circle-xmark::after, .fa-duotone.fa-anchor-circle-xmark::after { content: "\e4ac\e4ac"; } @@ -15527,6 +15857,9 @@ readers do not read off random characters that represent icons */ .fad.fa-envelope-badge::after, .fa-duotone.fa-envelope-badge::after { content: "\e16f\e16f"; } +.fad.fa-magnifying-glass-waveform::after, .fa-duotone.fa-magnifying-glass-waveform::after { + content: "\e661\e661"; } + .fad.fa-hands-holding-circle::after, .fa-duotone.fa-hands-holding-circle::after { content: "\e4fb\e4fb"; } @@ -15704,6 +16037,9 @@ readers do not read off random characters that represent icons */ .fad.fa-pinata::after, .fa-duotone.fa-pinata::after { content: "\e3c3\e3c3"; } +.fad.fa-file-ppt::after, .fa-duotone.fa-file-ppt::after { + content: "\e64a\e64a"; } + .fad.fa-arrows-from-line::after, .fa-duotone.fa-arrows-from-line::after { content: "\e0a4\e0a4"; } @@ -15773,6 +16109,9 @@ readers do not read off random characters that represent icons */ .fad.fa-pretzel::after, .fa-duotone.fa-pretzel::after { content: "\e441\e441"; } +.fad.fa-t-rex::after, .fa-duotone.fa-t-rex::after { + content: "\e629\e629"; } + .fad.fa-person-swimming::after, .fa-duotone.fa-person-swimming::after { content: "\f5c4\f5c4"; } @@ -15803,6 +16142,9 @@ readers do not read off random characters that represent icons */ .fad.fa-notebook::after, .fa-duotone.fa-notebook::after { content: "\e201\e201"; } +.fad.fa-circle-wifi::after, .fa-duotone.fa-circle-wifi::after { + content: "\e67d\e67d"; } + .fad.fa-droplet::after, .fa-duotone.fa-droplet::after { content: "\f043\f043"; } @@ -15830,6 +16172,9 @@ readers do not read off random characters that represent icons */ .fad.fa-globe-americas::after, .fa-duotone.fa-globe-americas::after { content: "\f57d\f57d"; } +.fad.fa-file-svg::after, .fa-duotone.fa-file-svg::after { + content: "\e64b\e64b"; } + .fad.fa-crate-apple::after, .fa-duotone.fa-crate-apple::after { content: "\f6b1\f6b1"; } @@ -16055,6 +16400,9 @@ readers do not read off random characters that represent icons */ .fad.fa-boxes-alt::after, .fa-duotone.fa-boxes-alt::after { content: "\f468\f468"; } +.fad.fa-landmark-magnifying-glass::after, .fa-duotone.fa-landmark-magnifying-glass::after { + content: "\e622\e622"; } + .fad.fa-grill-hot::after, .fa-duotone.fa-grill-hot::after { content: "\e5a5\e5a5"; } @@ -16097,6 +16445,9 @@ readers do not read off random characters that represent icons */ .fad.fa-burger-lettuce::after, .fa-duotone.fa-burger-lettuce::after { content: "\e3e3\e3e3"; } +.fad.fa-table-cells-row-lock::after, .fa-duotone.fa-table-cells-row-lock::after { + content: "\e67a\e67a"; } + .fad.fa-rupiah-sign::after, .fa-duotone.fa-rupiah-sign::after { content: "\e23d\e23d"; } @@ -16331,6 +16682,9 @@ readers do not read off random characters that represent icons */ .fad.fa-person-harassing::after, .fa-duotone.fa-person-harassing::after { content: "\e549\e549"; } +.fad.fa-magnifying-glass-play::after, .fa-duotone.fa-magnifying-glass-play::after { + content: "\e660\e660"; } + .fad.fa-hat-winter::after, .fa-duotone.fa-hat-winter::after { content: "\f7a8\f7a8"; } @@ -16757,6 +17111,9 @@ readers do not read off random characters that represent icons */ .fad.fa-tractor::after, .fa-duotone.fa-tractor::after { content: "\f722\f722"; } +.fad.fa-down-from-bracket::after, .fa-duotone.fa-down-from-bracket::after { + content: "\e66b\e66b"; } + .fad.fa-key-skeleton::after, .fa-duotone.fa-key-skeleton::after { content: "\f6f3\f6f3"; } @@ -16829,6 +17186,9 @@ readers do not read off random characters that represent icons */ .fad.fa-shortcake::after, .fa-duotone.fa-shortcake::after { content: "\e3e5\e3e5"; } +.fad.fa-building-magnifying-glass::after, .fa-duotone.fa-building-magnifying-glass::after { + content: "\e61c\e61c"; } + .fad.fa-peanut::after, .fa-duotone.fa-peanut::after { content: "\e430\e430"; } @@ -16925,6 +17285,9 @@ readers do not read off random characters that represent icons */ .fad.fa-chart-scatter::after, .fa-duotone.fa-chart-scatter::after { content: "\f7ee\f7ee"; } +.fad.fa-circle-gf::after, .fa-duotone.fa-circle-gf::after { + content: "\e67f\e67f"; } + .fad.fa-display-arrow-down::after, .fa-duotone.fa-display-arrow-down::after { content: "\e164\e164"; } @@ -16955,6 +17318,9 @@ readers do not read off random characters that represent icons */ .fad.fa-square-divide::after, .fa-duotone.fa-square-divide::after { content: "\e26a\e26a"; } +.fad.fa-folder-check::after, .fa-duotone.fa-folder-check::after { + content: "\e64e\e64e"; } + .fad.fa-signal-stream-slash::after, .fa-duotone.fa-signal-stream-slash::after { content: "\e250\e250"; } @@ -17402,6 +17768,9 @@ readers do not read off random characters that represent icons */ .fad.fa-line-columns::after, .fa-duotone.fa-line-columns::after { content: "\f870\f870"; } +.fad.fa-ant::after, .fa-duotone.fa-ant::after { + content: "\e680\e680"; } + .fad.fa-arrow-right-to-line::after, .fa-duotone.fa-arrow-right-to-line::after { content: "\f340\f340"; } @@ -17480,6 +17849,9 @@ readers do not read off random characters that represent icons */ .fad.fa-chair-office::after, .fa-duotone.fa-chair-office::after { content: "\f6c1\f6c1"; } +.fad.fa-magnifying-glass-music::after, .fa-duotone.fa-magnifying-glass-music::after { + content: "\e65f\e65f"; } + .fad.fa-nesting-dolls::after, .fa-duotone.fa-nesting-dolls::after { content: "\e3ba\e3ba"; } @@ -18029,6 +18401,9 @@ readers do not read off random characters that represent icons */ .fad.fa-m::after, .fa-duotone.fa-m::after { content: "\4d\4d"; } +.fad.fa-spinner-scale::after, .fa-duotone.fa-spinner-scale::after { + content: "\e62a\e62a"; } + .fad.fa-grip-dots-vertical::after, .fa-duotone.fa-grip-dots-vertical::after { content: "\e411\e411"; } @@ -18053,6 +18428,9 @@ readers do not read off random characters that represent icons */ .fad.fa-th-list::after, .fa-duotone.fa-th-list::after { content: "\f00b\f00b"; } +.fad.fa-basket-shopping-minus::after, .fa-duotone.fa-basket-shopping-minus::after { + content: "\e652\e652"; } + .fad.fa-comment-sms::after, .fa-duotone.fa-comment-sms::after { content: "\f7cd\f7cd"; } @@ -18260,9 +18638,6 @@ readers do not read off random characters that represent icons */ .fad.fa-share::after, .fa-duotone.fa-share::after { content: "\f064\f064"; } -.fad.fa-arrow-turn-right::after, .fa-duotone.fa-arrow-turn-right::after { - content: "\f064\f064"; } - .fad.fa-mail-forward::after, .fa-duotone.fa-mail-forward::after { content: "\f064\f064"; } @@ -18365,6 +18740,9 @@ readers do not read off random characters that represent icons */ .fad.fa-caret-circle-right::after, .fa-duotone.fa-caret-circle-right::after { content: "\f330\f330"; } +.fad.fa-turn-left::after, .fa-duotone.fa-turn-left::after { + content: "\e636\e636"; } + .fad.fa-wheat::after, .fa-duotone.fa-wheat::after { content: "\f72d\f72d"; } @@ -18374,6 +18752,9 @@ readers do not read off random characters that represent icons */ .fad.fa-audio-description-slash::after, .fa-duotone.fa-audio-description-slash::after { content: "\e0a8\e0a8"; } +.fad.fa-bell-ring::after, .fa-duotone.fa-bell-ring::after { + content: "\e62c\e62c"; } + .fad.fa-calendar-day::after, .fa-duotone.fa-calendar-day::after { content: "\f783\f783"; } @@ -18890,6 +19271,9 @@ readers do not read off random characters that represent icons */ .fad.fa-theater-masks::after, .fa-duotone.fa-theater-masks::after { content: "\f630\f630"; } +.fad.fa-file-gif::after, .fa-duotone.fa-file-gif::after { + content: "\e645\e645"; } + .fad.fa-kip-sign::after, .fa-duotone.fa-kip-sign::after { content: "\e1c4\e1c4"; } @@ -18941,12 +19325,21 @@ readers do not read off random characters that represent icons */ .fad.fa-share-alt-square::after, .fa-duotone.fa-share-alt-square::after { content: "\f1e1\f1e1"; } +.fad.fa-reflect-vertical::after, .fa-duotone.fa-reflect-vertical::after { + content: "\e665\e665"; } + .fad.fa-shield-keyhole::after, .fa-duotone.fa-shield-keyhole::after { content: "\e248\e248"; } +.fad.fa-file-mp4::after, .fa-duotone.fa-file-mp4::after { + content: "\e649\e649"; } + .fad.fa-barcode::after, .fa-duotone.fa-barcode::after { content: "\f02a\f02a"; } +.fad.fa-bulldozer::after, .fa-duotone.fa-bulldozer::after { + content: "\e655\e655"; } + .fad.fa-plus-minus::after, .fa-duotone.fa-plus-minus::after { content: "\e43c\e43c"; } diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.ttf b/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.ttf index bc7dd4f06ac4f0de42e0e2f41257a6bc8607f925..1be7447613967218f9724509ad411c67ed5f7afe 100644 GIT binary patch delta 2328 zcmZuzU2GIp6h3$MXSUm)-KD!bZ5Qn9F6;n-cJI#44u7JUP-0r5fzTLU>{41<)6#|( zMS0jp12Le{Fp(JI0}p~Rk{E@=2YhIFAQFWb(P*M3MF{alH1Q`UYS-_~%n~5X_MUsr zcg{V3_s*T3>${MvkszWd%~62#r*`(19$UA0gh;FeIy5|4ou-zBXCS`|xx8=U#nE?8 zzyB!YpRwrev61TD6<-Xz0^K=`${2vaCGi>fTNum7CT9<|+$8q*D&(aTQ^VEBl4uh0 zcaYVKxo@KS$w{OqPyvh8a%Pw9Ot!+u6C)-*DbBhbib)ChtcwzO~vtNP{13cZe z7;13hG+Gp`e=dF%AE7x@C^=_Hgsa#U8wsS6YB+C%Rf#+>QfaNyX_uk%lB{SYvuJXn zX*DmMZ<4>)0_aW?Hsm<=Z4X^Xtrg8gExd#mnNmUmk;RndR>!p!t+G{S73aV3KoON$#gwRb|+;DBdq4(D`%9!7f@DM zWh+=WEMb&HVrvN8G4Au5h zjZTPNVoV$sx5VE{3z24}ESzC!NE@Ru8)%d5BHmHLxppmhw&7jF&&E*inKi^#U4*@` z#+yOgyI1i50e?=W|*!GTQyqZHN$p2agq(0eVGC84dV*^bE+k3?n~j8$T)X_ zFAdI$^Y9whur9jkr(D0R;|PtJQI5itb8pOEF86OG`^Lcypv_4?b>0FFBNG@-w(B_& za*lPqEKH|4GblQpq0F$zIF~XvY7yF4zmDT_2KQwXwNX2D&@#L+1}+-aR!xHm2FhU4 z&O~E^0Rk3B%5L`_}Y0-A~s@_Up z`Mf}4-Y0=?d=+-y8xx>zdd=s9_t=DRy>JMsix6IUx-tjKJfX3 z8z4X;*n~jGl#BQpGcTwpR`|R^Z9?<;0Bu%!eLi@PO^Ei0T|OSBHR2PWkJ5m+$$Sk? zo2f^6-B-j(S0;Tv!2x!R>^nG7J-^WPIvKs-tnOa6s#LyjDfDBrv(qyhdV5E) zs_I4W8J?PSp6uS*MmzA2#6CJm6I7)G&K6xd>$2&@di1?aMXFEzXiA9JR2*%)?KC?X(&A|%2>b?)Sf{{waRvmyWh literal 9004 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 Date: Thu, 2 May 2024 02:02:04 +0000 Subject: [PATCH 02/69] Bump ejs from 3.1.9 to 3.1.10 Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10. - [Release notes](https://github.com/mde/ejs/releases) - [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10) --- updated-dependencies: - dependency-name: ejs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index 29d3af583e..754cd35451 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12776,17 +12776,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^3.1.6: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - -ejs@^3.1.7, ejs@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== +ejs@^3.1.6, ejs@^3.1.7, ejs@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" From e4cf4eb422ee7a635866e8b97fddb349d06b6712 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 09:15:24 +0000 Subject: [PATCH 03/69] Bump axios from 1.1.3 to 1.6.0 Bumps [axios](https://github.com/axios/axios) from 1.1.3 to 1.6.0. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.1.3...v1.6.0) --- updated-dependencies: - dependency-name: axios dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index 754cd35451..34d352ac8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8423,12 +8423,12 @@ axios-debug-log@^1.0.0: "@types/debug" "^4.0.0" debug "^4.0.0" -axios@*, axios@1.6.0, axios@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" - integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== +axios@*, axios@^1.0.0: + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -8441,6 +8441,15 @@ axios@1.1.3: form-data "^4.0.0" proxy-from-env "^1.1.0" +axios@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" + integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axios@^0.21.1: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" @@ -14624,6 +14633,11 @@ follow-redirects@^1.0.0, follow-redirects@^1.12.1, follow-redirects@^1.14.0, fol resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + font-family-papandreou@^0.2.0-patch1: version "0.2.0-patch2" resolved "https://registry.yarnpkg.com/font-family-papandreou/-/font-family-papandreou-0.2.0-patch2.tgz#c75b659e96ffbc7ab2af651cf7b4910b334e8dd2" From 354bf0bd4041ada0ba60ede0099c44330af6a83b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tetsing?= Date: Wed, 8 May 2024 12:36:53 +0200 Subject: [PATCH 04/69] enabled AI setting restore --- apps/remix-ide/src/app/tabs/settings-tab.tsx | 8 ++++++-- libs/remix-ui/settings/src/lib/remix-ui-settings.tsx | 4 ++-- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 11 ++++++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/settings-tab.tsx b/apps/remix-ide/src/app/tabs/settings-tab.tsx index b32477aa17..49571922eb 100644 --- a/apps/remix-ide/src/app/tabs/settings-tab.tsx +++ b/apps/remix-ide/src/app/tabs/settings-tab.tsx @@ -15,7 +15,7 @@ const _paq = (window._paq = window._paq || []) const profile = { name: 'settings', displayName: 'Settings', - methods: ['get', 'updateCopilotChoice'], + methods: ['get', 'updateCopilotChoice', 'getCopilotSetting'], events: [], icon: 'assets/img/settings.webp', description: 'Remix-IDE settings', @@ -52,7 +52,7 @@ module.exports = class SettingsTab extends ViewPlugin { this.element = document.createElement('div') this.element.setAttribute('id', 'settingsTab') this.useMatomoAnalytics = null - this.useCopilot = false + this.useCopilot = this.get('settings/copilot/suggest/activate') } setDispatch(dispatch: React.Dispatch) { @@ -102,6 +102,10 @@ module.exports = class SettingsTab extends ViewPlugin { }) } + getCopilotSetting(){ + return this.useCopilot + } + updateMatomoAnalyticsChoice(isChecked) { this.config.set('settings/matomo-analytics', isChecked) this.useMatomoAnalytics = isChecked diff --git a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx index a4afd0b152..0a6b663a61 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -56,7 +56,6 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { const [ipfsProtocol, setipfsProtocol] = useState('') const [ipfsProjectId, setipfsProjectId] = useState('') const [ipfsProjectSecret, setipfsProjectSecret] = useState('') - const copilotDownload = useRef(null) const intl = useIntl() const initValue = () => { @@ -143,8 +142,9 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { } const startCopilot = async () => { - copilotActivate(props.config, true, dispatch) + copilotActivate(props.config, props.useCopilot, dispatch) props.plugin.call('terminal', 'log', { type: 'typewriterlog', value: `Solidity copilot activated!` }) + //props.plugin.call('settings', 'updateCopilotChoice', props.useCopilot) } startCopilot() diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 1a7d1d32da..8381c03e4a 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -64,7 +64,6 @@ export const TabsUI = (props: TabsUIProps) => { const tabsRef = useRef({}) const tabsElement = useRef(null) const [ai_switch, setAI_switch] = useState(false) - const tabs = useRef(props.tabs) tabs.current = props.tabs // we do this to pass the tabs list to the onReady callbacks @@ -77,6 +76,16 @@ export const TabsUI = (props: TabsUIProps) => { } }, [tabsState.selectedIndex]) + const getAI = async() => { + try { + return await props.plugin.call('settings', 'getCopilotSetting') + } catch (e){ + return false + } + } + + getAI().then(value => setAI_switch(value)).catch(error => console.log(error)) + const getFileDecorationClasses = (tab: any) => { const fileDecoration = tabsState.fileDecorations.find((fileDecoration: fileDecoration) => { if (`${fileDecoration.workspace.name}/${fileDecoration.path}` === tab.name) return true From 5c2481a061e89e522bb9ac38907cae50be379a16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tetsing?= Date: Wed, 8 May 2024 13:50:01 +0200 Subject: [PATCH 05/69] fixed recusion on rendering --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 8381c03e4a..b54502b26d 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -5,6 +5,7 @@ import React, {useState, useRef, useEffect, useReducer} from 'react' // eslint-d import { FormattedMessage } from 'react-intl' import { Tab, Tabs, TabList, TabPanel } from 'react-tabs' import './remix-ui-tabs.css' +import { values } from 'lodash' const _paq = (window._paq = window._paq || []) /* eslint-disable-next-line */ @@ -84,8 +85,6 @@ export const TabsUI = (props: TabsUIProps) => { } } - getAI().then(value => setAI_switch(value)).catch(error => console.log(error)) - const getFileDecorationClasses = (tab: any) => { const fileDecoration = tabsState.fileDecorations.find((fileDecoration: fileDecoration) => { if (`${fileDecoration.workspace.name}/${fileDecoration.path}` === tab.name) return true @@ -101,7 +100,6 @@ export const TabsUI = (props: TabsUIProps) => { const classNameImg = 'my-1 mr-1 text-dark ' + tab.iconClass const classNameTab = 'nav-item nav-link d-flex justify-content-center align-items-center px-2 py-1 tab' + (index === currentIndexRef.current ? ' active' : '') const invert = props.themeQuality === 'dark' ? 'invert(1)' : 'invert(0)' - return (
{ } const setFileDecorations = (fileStates: fileDecoration[]) => { + getAI().then(value => setAI_switch(value)).catch(error => console.log(error)) dispatch({ type: 'SET_FILE_DECORATIONS', payload: fileStates }) } @@ -274,7 +273,7 @@ export const TabsUI = (props: TabsUIProps) => { data-id="remix_ai_switch" id='remix_ai_switch' className="btn ai-switch text-ai pl-2 pr-0 py-0 d-flex" - disabled={!(tabsState.currentExt === 'sol' )} + disabled={ !(tabsState.currentExt === 'sol' ) } onClick={async () => { await props.plugin.call('settings', 'updateCopilotChoice', !ai_switch) setAI_switch(!ai_switch) From c2c6f3e56436f58749fe0ac5a4659f7b4890ada9 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 8 May 2024 14:37:08 +0200 Subject: [PATCH 06/69] updated the feature freeze date --- .github/workflows/pr-reminder.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-reminder.yml b/.github/workflows/pr-reminder.yml index 6469021400..00e75b8384 100644 --- a/.github/workflows/pr-reminder.yml +++ b/.github/workflows/pr-reminder.yml @@ -14,4 +14,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }} - freeze-date: '2024-05-06T18:00:00Z' + freeze-date: '2024-05-20T18:00:00Z' From d68fb9086d0610f41076e83fb0abb63ac3542f65 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 8 May 2024 13:54:20 +0200 Subject: [PATCH 07/69] right align Udapp text boxes --- libs/remix-ui/run-tab/src/lib/components/account.tsx | 12 ++++++------ .../run-tab/src/lib/components/environment.tsx | 11 +++++------ 2 files changed, 11 insertions(+), 12 deletions(-) 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 cc3779a879..ecad9db50e 100644 --- a/libs/remix-ui/run-tab/src/lib/components/account.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/account.tsx @@ -205,6 +205,12 @@ export function AccountUI(props: AccountProps) { + }> + + + + + {props.accounts.isRequesting && }
@@ -224,12 +230,6 @@ export function AccountUI(props: AccountProps) { ))} -
- -
- }> - -
) diff --git a/libs/remix-ui/run-tab/src/lib/components/environment.tsx b/libs/remix-ui/run-tab/src/lib/components/environment.tsx index d12cef0bd1..bc5bf486fa 100644 --- a/libs/remix-ui/run-tab/src/lib/components/environment.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/environment.tsx @@ -29,6 +29,11 @@ export function EnvironmentUI(props: EnvironmentProps) {
+ }> + + + +
@@ -65,12 +70,6 @@ export function EnvironmentUI(props: EnvironmentProps) { ))} - - }> - - - -
) From 6509e4ec9447ae0aa1afa33608b9f80c6c87ae27 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 8 May 2024 14:05:24 +0200 Subject: [PATCH 08/69] improve icons and tooltip positions --- libs/remix-ui/run-tab/src/lib/components/account.tsx | 6 +++--- libs/remix-ui/run-tab/src/lib/components/environment.tsx | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) 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 ecad9db50e..ddae2c9ef9 100644 --- a/libs/remix-ui/run-tab/src/lib/components/account.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/account.tsx @@ -200,16 +200,16 @@ export function AccountUI(props: AccountProps) {
diff --git a/libs/remix-ui/run-tab/src/lib/components/environment.tsx b/libs/remix-ui/run-tab/src/lib/components/environment.tsx index bc5bf486fa..c9a45a599b 100644 --- a/libs/remix-ui/run-tab/src/lib/components/environment.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/environment.tsx @@ -26,12 +26,12 @@ export function EnvironmentUI(props: EnvironmentProps) { }> - + - }> + }> - + From 8a60071f01fa3068f3085ef2f60f0b2e1ae2af5e Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 8 May 2024 14:30:51 +0200 Subject: [PATCH 09/69] updated tooltip --- apps/remix-ide/src/app/tabs/locales/en/udapp.json | 6 +++--- libs/remix-ui/run-tab/src/lib/components/account.tsx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/udapp.json b/apps/remix-ide/src/app/tabs/locales/en/udapp.json index a7ee39b3e5..a523e2ebb9 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/udapp.json +++ b/apps/remix-ide/src/app/tabs/locales/en/udapp.json @@ -50,15 +50,15 @@ "udapp.hash": "hash", "udapp.signature": "signature", "udapp.injectedTitle": "Unfortunately it's not possible to create an account using injected provider. Please create the account directly from your provider (i.e metamask or other of the same type).", - "udapp.createNewAccount": "Create a new account", + "udapp.createNewAccount": "Create new account", "udapp.web3Title": "Creating an account is possible only in Personal mode. Please go to Settings to enable it.", "udapp.defaultTitle": "Unfortunately it's not possible to create an account using an external wallet ({selectExEnv}).", "udapp.text1": "Please provide a Passphrase for the account creation", "udapp.tooltipText1": "Account list is empty, please make sure the current provider is properly connected to remix", "udapp.modalTitle1": "Passphrase to sign a message", "udapp.modalMessage1": "Enter your passphrase for this account to sign the message", - "udapp.copyAccount": "Copy account to clipboard", - "udapp.signMsgUsingAccount": "Sign a message using this account", + "udapp.copyAccount": "Copy account", + "udapp.signMsgUsingAccount": "Sign using this account", "udapp._comment_environment.tsx": "libs/remix-ui/run-tab/src/lib/components/environment.tsx", "udapp.environment": "Environment", 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 ddae2c9ef9..d7097a1ab0 100644 --- a/libs/remix-ui/run-tab/src/lib/components/account.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/account.tsx @@ -202,7 +202,7 @@ export function AccountUI(props: AccountProps) { - + }> From b0d44fae1984e96b829bff54eb2f6c744e719422 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 8 May 2024 16:45:55 +0200 Subject: [PATCH 10/69] custom gas limit textbox --- .../run-tab/src/lib/components/gasLimit.tsx | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/libs/remix-ui/run-tab/src/lib/components/gasLimit.tsx b/libs/remix-ui/run-tab/src/lib/components/gasLimit.tsx index f5e6a3ec96..5c0403fb6b 100644 --- a/libs/remix-ui/run-tab/src/lib/components/gasLimit.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/gasLimit.tsx @@ -51,7 +51,7 @@ export function GasLimitUI(props: GasPriceProps) {
-
+
-
From 67fa07f0af4bc7cc36e0f4db77f360106efb5cd4 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 8 May 2024 13:07:50 +0200 Subject: [PATCH 11/69] merge value and its unit --- .../run-tab/src/lib/components/value.tsx | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/libs/remix-ui/run-tab/src/lib/components/value.tsx b/libs/remix-ui/run-tab/src/lib/components/value.tsx index ae9634286f..53e72eb91c 100644 --- a/libs/remix-ui/run-tab/src/lib/components/value.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/value.tsx @@ -49,7 +49,7 @@ export function ValueUI(props: ValueProps) { -
+
}> - - +
+ +
) From 5f9d787126d8084a27526c82a9c415c3090ee481 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 8 May 2024 13:12:18 +0200 Subject: [PATCH 12/69] update tooltip --- apps/remix-ide/src/app/tabs/locales/en/udapp.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/udapp.json b/apps/remix-ide/src/app/tabs/locales/en/udapp.json index a523e2ebb9..2f0ba01f02 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/udapp.json +++ b/apps/remix-ide/src/app/tabs/locales/en/udapp.json @@ -9,7 +9,7 @@ "udapp._comment_value.tsx": "libs/remix-ui/run-tab/src/lib/components/value.tsx", "udapp.value": "Value", - "udapp.tooltipText5": "Enter an amount and choose its unit", + "udapp.tooltipText5": "Enter an amount to be sent with transaction and choose its unit", "udapp._comment_contractDropdownUI.tsx": "libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx", "udapp.contract": "Contract", From 4c6838fa7e68d748ec3b4d85daed8a0fe1b07d9e Mon Sep 17 00:00:00 2001 From: STetsing <41009393+STetsing@users.noreply.github.com> Date: Tue, 14 May 2024 11:04:12 +0200 Subject: [PATCH 13/69] Update remix-ui-settings.tsx rm comment --- libs/remix-ui/settings/src/lib/remix-ui-settings.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx index 0a6b663a61..a4448ea338 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -144,7 +144,6 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { const startCopilot = async () => { copilotActivate(props.config, props.useCopilot, dispatch) props.plugin.call('terminal', 'log', { type: 'typewriterlog', value: `Solidity copilot activated!` }) - //props.plugin.call('settings', 'updateCopilotChoice', props.useCopilot) } startCopilot() From 0411fe4036aec26c81c1947366436feef67baf29 Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Tue, 14 May 2024 11:16:50 +0100 Subject: [PATCH 14/69] check to make sure icon isn't undefined --- apps/remix-ide/src/app/components/vertical-icons.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/components/vertical-icons.tsx b/apps/remix-ide/src/app/components/vertical-icons.tsx index 0d78b22fb7..a9e8f83c20 100644 --- a/apps/remix-ide/src/app/components/vertical-icons.tsx +++ b/apps/remix-ide/src/app/components/vertical-icons.tsx @@ -73,7 +73,7 @@ export class VerticalIcons extends Plugin { Object.keys(this.icons).map((o) => { this.icons[o].active = false }) - this.icons[name].active = true + this.icons[name] ? this.icons[name].active = true : null this.renderComponent() }) } From fa035bd5fc06729f224b28ca96e0c07ec9b82322 Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Tue, 14 May 2024 11:22:22 +0100 Subject: [PATCH 15/69] change check from ternary to full if block --- apps/remix-ide/src/app/components/vertical-icons.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/components/vertical-icons.tsx b/apps/remix-ide/src/app/components/vertical-icons.tsx index a9e8f83c20..4d54c5a855 100644 --- a/apps/remix-ide/src/app/components/vertical-icons.tsx +++ b/apps/remix-ide/src/app/components/vertical-icons.tsx @@ -73,7 +73,10 @@ export class VerticalIcons extends Plugin { Object.keys(this.icons).map((o) => { this.icons[o].active = false }) - this.icons[name] ? this.icons[name].active = true : null + + if (this.icons[name]) { + this.icons[name].active = true + } this.renderComponent() }) } From 1294a0bc2e9a4ca6517330f253052af3cb57876e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tetsing?= Date: Wed, 15 May 2024 10:55:45 +0200 Subject: [PATCH 16/69] simple chat in terminal --- apps/remix-ide/src/app/plugins/solcoderAI.tsx | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/plugins/solcoderAI.tsx b/apps/remix-ide/src/app/plugins/solcoderAI.tsx index 99fcbbe0c3..c963699b5c 100644 --- a/apps/remix-ide/src/app/plugins/solcoderAI.tsx +++ b/apps/remix-ide/src/app/plugins/solcoderAI.tsx @@ -19,14 +19,32 @@ const profile = { events: [], maintainedBy: 'Remix', } +type ChatEntry = [string, string]; + +enum BackendOPModel{ + DeeSeek, + CodeLLama, + Mistral +} + +const PromptBuilder = (inst, answr, modelop) => { + if (modelop === BackendOPModel.CodeLLama) return "\n### INSTRUCTION:\n" + inst + "\n### RESPONSE:\n" + answr + if (modelop === BackendOPModel.DeeSeek) return "" + if (modelop === BackendOPModel.Mistral) return "" +} export class SolCoder extends Plugin { api_url: string completion_url: string + solgpt_chat_history:ChatEntry[] + max_history = 7 + model_op = BackendOPModel.CodeLLama + constructor() { super(profile) this.api_url = "https://solcoder.remixproject.org" this.completion_url = "https://completion.remixproject.org" + this.solgpt_chat_history = [] } async code_generation(prompt): Promise { @@ -62,6 +80,8 @@ export class SolCoder extends Plugin { this.call('layout', 'maximizeTerminal') let result try { + const main_prompt = this._build_solgpt_promt(prompt) + console.log(main_prompt.length) result = await( await fetch(this.api_url, { method: 'POST', @@ -69,17 +89,21 @@ export class SolCoder extends Plugin { Accept: 'application/json', 'Content-Type': 'application/json', }, - body: JSON.stringify({ "data":[prompt, "solidity_answer", false,1000,0.9,0.8,50]}), + body: JSON.stringify({ "data":[main_prompt, "solidity_answer", false,1000,0.9,0.8,50]}), }) ).json() } catch (e) { this.call('terminal', 'log', { type: 'typewritererror', value: `Unable to get a response ${e.message}` }) + this.solgpt_chat_history = [] return } finally { this.emit("aiInferingDone") } if (result) { this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.data[0] }) + const chat:ChatEntry = [prompt, result.data[0]] + this.solgpt_chat_history.push(chat) + if (this.solgpt_chat_history.length >this.max_history){this.solgpt_chat_history.shift()} } else if (result.error) { this.call('terminal', 'log', { type: 'aitypewriterwarning', value: "Error on request" }) } @@ -195,4 +219,18 @@ export class SolCoder extends Plugin { } } + _build_solgpt_promt(user_promt:string){ + if (this.solgpt_chat_history.length === 0){ + return user_promt + } else { + let new_promt = "" + for (const [question, answer] of this.solgpt_chat_history) { + new_promt += PromptBuilder(question.split('sol-gpt')[1], answer, this.model_op) + } + // finaly + new_promt = "sol-gpt " + new_promt + PromptBuilder(user_promt.split('sol-gpt')[1], "", this.model_op) + return new_promt + } + } + } From 4aa90d1c39c786073e8e7b08ecbe26327a7655a7 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Fri, 10 May 2024 11:32:22 +0200 Subject: [PATCH 17/69] removed doc icon --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 1a7d1d32da..64f8d6bd99 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -283,26 +283,6 @@ export const TabsUI = (props: TabsUIProps) => { - }> - { - window.open("https://remix-ide.readthedocs.io/en/latest/ai.html") - _paq.push(['trackEvent', 'ai', 'solcoder', 'documentation']) - }} - > - - - AI - - - }> props.onZoomOut()}> From 5ec7fa38dea7765a6ffaba4a1d805eb11eba1107 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Fri, 10 May 2024 11:46:04 +0200 Subject: [PATCH 18/69] consistent icons --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 64f8d6bd99..8c1c1ab6d5 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -185,7 +185,7 @@ export const TabsUI = (props: TabsUIProps) => { > { }> - props.onZoomOut()}> + props.onZoomOut()}> }> - props.onZoomIn()}> + props.onZoomIn()}> Date: Fri, 10 May 2024 12:03:37 +0200 Subject: [PATCH 19/69] doc icon in settings --- .../src/app/tabs/locales/en/remixUiTabs.json | 2 +- .../settings/src/lib/remix-ui-settings.tsx | 20 +++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json b/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json index a7cc252c1a..8d73fef16b 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json +++ b/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json @@ -6,7 +6,7 @@ "remixUiTabs.tooltipText5": "Explain the contract(s) in current file [BETA]", "remixUiTabs.tooltipText6": "Enable Remix AI Copilot [BETA]", "remixUiTabs.tooltipText7": "Disable Remix AI Copilot [BETA]", - "remixUiTabs.tooltipText8": "Remix AI Tools Documentation [BETA]", + "remixUiTabs.tooltipText8": "Remix AI Tools Documentation", "remixUiTabs.zoomOut": "Zoom out", "remixUiTabs.zoomIn": "Zoom in" } diff --git a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx index a4afd0b152..6d821df31a 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -1,5 +1,7 @@ import { ViewPlugin } from '@remixproject/engine-web' import React, {useState, useRef, useReducer, useEffect, useCallback} from 'react' // eslint-disable-line +import { CustomTooltip } from '@remix-ui/helper' +const _paq = (window._paq = window._paq || []) import { AppModal, AlertModal, ModalTypes } from '@remix-ui/app' import { labels, textDark, textSecondary } from './constants' @@ -450,10 +452,24 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { const copilotSettings = () => (
-
+
- + }> + { + window.open("https://remix-ide.readthedocs.io/en/latest/ai.html") + _paq.push(['trackEvent', 'ai', 'solcoder', 'documentation']) + }} + > + + + +
From e98f231951fa5b4245331c05ac76935a2e4d3628 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Fri, 10 May 2024 12:09:56 +0200 Subject: [PATCH 20/69] icon tooltips --- apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json | 5 +++-- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json b/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json index 8d73fef16b..6541753d86 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json +++ b/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json @@ -1,12 +1,13 @@ { "remixUiTabs.tooltipText1": "Run script (CTRL + SHIFT + S)", "remixUiTabs.tooltipText2": "Compile CTRL + S", - "remixUiTabs.tooltipText3": "Select .sol or .yul file to compile or a .ts or .js file and run it", - "remixUiTabs.tooltipText4": "Select .sol file to use AI tools [BETA]", + "remixUiTabs.tooltipText3": "Select .sol or .yul file to compile OR a .ts or .js file to run", + "remixUiTabs.tooltipText4": "To explain a contract, choose a .sol file", "remixUiTabs.tooltipText5": "Explain the contract(s) in current file [BETA]", "remixUiTabs.tooltipText6": "Enable Remix AI Copilot [BETA]", "remixUiTabs.tooltipText7": "Disable Remix AI Copilot [BETA]", "remixUiTabs.tooltipText8": "Remix AI Tools Documentation", + "remixUiTabs.tooltipTextDisabledCopilot": "To use Remix AI Copilot, choose a .sol file", "remixUiTabs.zoomOut": "Zoom out", "remixUiTabs.zoomIn": "Zoom in" } diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 8c1c1ab6d5..57878c6109 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -250,7 +250,7 @@ export const TabsUI = (props: TabsUIProps) => { ) : () ) : ( - + )} } From cc420515b2a0ce8ded6a2877e952a38b78c75ea3 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Fri, 10 May 2024 12:29:40 +0200 Subject: [PATCH 21/69] separation of icons --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 57878c6109..bfae201cf7 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -205,9 +205,10 @@ export const TabsUI = (props: TabsUIProps) => { } }} > - + +
{ } }} > - + { }} > { +
+ }> props.onZoomOut()}> From ed8488ff22843c1af468654a68e23ec68670e0eb Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Fri, 10 May 2024 12:32:25 +0200 Subject: [PATCH 22/69] fix linting --- libs/remix-ui/settings/src/lib/remix-ui-settings.tsx | 2 +- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx index 6d821df31a..9bc6e94b47 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -469,7 +469,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { - +
diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index bfae201cf7..698f8da6b2 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -208,7 +208,7 @@ export const TabsUI = (props: TabsUIProps) => { -
+
{ -
+
}> props.onZoomOut()}> From 54e98035d0ece7310c96bf1634a5289128df1eb2 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Fri, 10 May 2024 12:59:11 +0200 Subject: [PATCH 23/69] removed AI label --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 698f8da6b2..16458381a0 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -270,12 +270,6 @@ export const TabsUI = (props: TabsUIProps) => { - - AI - From 29c2c40e0650d692d6a65b3e0a0c4381d0012712 Mon Sep 17 00:00:00 2001 From: Liana Husikyan Date: Fri, 10 May 2024 13:49:12 +0200 Subject: [PATCH 24/69] Update remix-ui-tabs.tsx --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 127 +++++++++---------- 1 file changed, 63 insertions(+), 64 deletions(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 16458381a0..9838bf5ca1 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -208,72 +208,71 @@ export const TabsUI = (props: TabsUIProps) => { -
- - {tabsState.currentExt === 'sol'? ( - - ) : ( - - )} - - } - > - - - - { tabsState.currentExt === 'sol'? ( - !ai_switch ? ( - - ) : () - ) : ( - - )} - - } - > - + + + { tabsState.currentExt === 'sol'? ( + !ai_switch ? ( + + ) : () + ) : ( + + )} + + } > - - - - -
+ + +
}> props.onZoomOut()}> From 28902ac18138f3aef92aa78ca93afc107ee332cd Mon Sep 17 00:00:00 2001 From: Liana Husikyan Date: Fri, 10 May 2024 13:55:57 +0200 Subject: [PATCH 25/69] Update remix-ui-tabs.tsx --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 9838bf5ca1..e081851339 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -208,7 +208,7 @@ export const TabsUI = (props: TabsUIProps) => { -
Date: Tue, 14 May 2024 18:53:52 +0530 Subject: [PATCH 26/69] border in div --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index e081851339..843dad3948 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -208,7 +208,7 @@ export const TabsUI = (props: TabsUIProps) => { -
+
{
- }> - props.onZoomOut()}> - - }> - props.onZoomIn()}> - +
+ }> + props.onZoomOut()}> + + }> + props.onZoomIn()}> + +
Date: Tue, 14 May 2024 19:01:51 +0530 Subject: [PATCH 27/69] increase size of switch --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index 843dad3948..ddf6da8e8e 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -267,9 +267,7 @@ export const TabsUI = (props: TabsUIProps) => { ai_switch ? _paq.push(['trackEvent', 'ai', 'solcoder', 'copilot_enabled']) : _paq.push(['trackEvent', 'ai', 'solcoder', 'copilot_disabled']) }} > - +
From bdca4d610ad635973c1a0ee87a2950fc33133298 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 14 May 2024 19:12:14 +0530 Subject: [PATCH 28/69] fix linting --- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx index ddf6da8e8e..561d49f2de 100644 --- a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx +++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx @@ -208,7 +208,7 @@ export const TabsUI = (props: TabsUIProps) => { -
+
{
-
+
}> props.onZoomOut()}> From 1f173ae97b89b38610dd33fde6966c8c2a4a21bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tetsing?= Date: Thu, 16 May 2024 15:01:37 +0200 Subject: [PATCH 29/69] changed backend model to deepseek --- apps/remix-ide/src/app/plugins/solcoderAI.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/solcoderAI.tsx b/apps/remix-ide/src/app/plugins/solcoderAI.tsx index c963699b5c..a4ac821b75 100644 --- a/apps/remix-ide/src/app/plugins/solcoderAI.tsx +++ b/apps/remix-ide/src/app/plugins/solcoderAI.tsx @@ -22,14 +22,14 @@ const profile = { type ChatEntry = [string, string]; enum BackendOPModel{ - DeeSeek, + DeepSeek, CodeLLama, Mistral } const PromptBuilder = (inst, answr, modelop) => { if (modelop === BackendOPModel.CodeLLama) return "\n### INSTRUCTION:\n" + inst + "\n### RESPONSE:\n" + answr - if (modelop === BackendOPModel.DeeSeek) return "" + if (modelop === BackendOPModel.DeepSeek) return "" if (modelop === BackendOPModel.Mistral) return "" } @@ -38,7 +38,7 @@ export class SolCoder extends Plugin { completion_url: string solgpt_chat_history:ChatEntry[] max_history = 7 - model_op = BackendOPModel.CodeLLama + model_op = BackendOPModel.DeepSeek constructor() { super(profile) From 677a94967cd88f2e8d83b56de4fda6d256f82df2 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 21 May 2024 12:33:17 +0530 Subject: [PATCH 30/69] bring back rocket icon --- .../run-tab/src/lib/components/environment.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/remix-ui/run-tab/src/lib/components/environment.tsx b/libs/remix-ui/run-tab/src/lib/components/environment.tsx index c9a45a599b..9da4c9ba3f 100644 --- a/libs/remix-ui/run-tab/src/lib/components/environment.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/environment.tsx @@ -15,10 +15,10 @@ export function EnvironmentUI(props: EnvironmentProps) { const currentProvider = props.providers.providerList.find((exEnv) => exEnv.name === props.selectedEnv) const bridges = { 'L2 - Optimism': 'https://app.optimism.io/bridge/deposit', - 'L2 - Arbitrum One': 'https://bridge.arbitrum.io/' + 'L2 - Arbitrum': 'https://bridge.arbitrum.io/' } - const isL2 = (providerDisplayName: string) => providerDisplayName === 'Optimism Provider' || providerDisplayName === 'Arbitrum One Provider' + const isL2 = (providerDisplayName: string) => providerDisplayName === 'L2 - Optimism' || providerDisplayName === 'L2 - Arbitrum' return (
{props.app.hiddenPanel.render()}
diff --git a/libs/remix-ui/app/src/lib/remix-app/style/remix-app.css b/libs/remix-ui/app/src/lib/remix-app/style/remix-app.css index 70686d632f..35b41abf93 100644 --- a/libs/remix-ui/app/src/lib/remix-app/style/remix-app.css +++ b/libs/remix-ui/app/src/lib/remix-app/style/remix-app.css @@ -34,6 +34,12 @@ pre { width : 320px; transition : width 0.25s; } +.pinnedpanel { + display : flex; + flex-direction : row-reverse; + width : 320px; + transition : width 0.25s; +} .highlightcode { position : absolute; z-index : 20; diff --git a/libs/remix-ui/panel/src/lib/main/main-panel.tsx b/libs/remix-ui/panel/src/lib/main/main-panel.tsx index ac7033fe15..0786a644fd 100644 --- a/libs/remix-ui/panel/src/lib/main/main-panel.tsx +++ b/libs/remix-ui/panel/src/lib/main/main-panel.tsx @@ -30,7 +30,8 @@ const RemixUIMainPanel = (props: RemixUIMainPanelProps) => { active: panel.active, view: panel.plugin.profile.name === 'tabs' ? panel.plugin.renderTabsbar() : panel.plugin.render(), class: panel.plugin.profile.name + '-wrap ' + (panel.minimized ? 'minimized ' : ' ') + ((platform === appPlatformTypes.desktop)? 'desktop' : ''), - minimized: panel.minimized + minimized: panel.minimized, + pinned: panel.pinned }) }) setPlugins(pluginPanels) diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx index 590893b3a5..ff4f327efc 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx @@ -1,11 +1,13 @@ -import React, {useEffect, useRef, useState} from 'react' // eslint-disable-line -import { FormattedMessage } from 'react-intl' -import { PluginRecord } from '../types' +import React, {useEffect, useState} from 'react' // eslint-disable-line +import {FormattedMessage} from 'react-intl' +import {PluginRecord} from '../types' import './panel.css' import { CustomTooltip } from '@remix-ui/helper' export interface RemixPanelProps { - plugins: Record + plugins: Record, + pinView?: (profile: PluginRecord['profile'], view: PluginRecord['view']) => void, + unPinView?: (profile: PluginRecord['profile']) => void } const RemixUIPanelHeader = (props: RemixPanelProps) => { const [plugin, setPlugin] = useState() @@ -25,6 +27,15 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { setToggleExpander(!toggleExpander) } + const pinPlugin = () => { + console.log('called pinPlugin') + props.pinView && props.pinView(plugin.profile, plugin.view) + } + + const unPinPlugin = () => { + props.unPinView && props.unPinView(plugin.profile) + } + const tooltipChild = return ( @@ -49,6 +60,21 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { {tooltipChild}
+ { + !plugin?.pinned ? ( +
+ }> + + +
+ ) : ( +
+ }> + + +
+ ) + }
From 9ad8909ea96bc192644a67258bbf6b88482c8cbc Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Sat, 27 Apr 2024 14:35:47 +0100 Subject: [PATCH 44/69] Default to file-explorer --- apps/remix-ide/src/app/components/panel.ts | 6 ++- .../src/app/components/pinned-panel.tsx | 34 ++++++++-------- .../src/app/components/side-panel.tsx | 21 ++++++++-- .../app/src/lib/remix-app/remix-app.tsx | 18 ++++++--- .../panel/src/lib/plugins/panel-header.tsx | 39 +++++++++++-------- 5 files changed, 75 insertions(+), 43 deletions(-) diff --git a/apps/remix-ide/src/app/components/panel.ts b/apps/remix-ide/src/app/components/panel.ts index 2fa3c9b0e9..bf80f3614d 100644 --- a/apps/remix-ide/src/app/components/panel.ts +++ b/apps/remix-ide/src/app/components/panel.ts @@ -15,9 +15,11 @@ export class AbstractPanel extends HostPlugin { } currentFocus (): string { - return Object.values(this.plugins).find(plugin => { + const activePlugin = Object.values(this.plugins).find(plugin => { return plugin.active - }).profile.name + }) + + return activePlugin ? activePlugin.profile.name : null } addView (profile, view) { diff --git a/apps/remix-ide/src/app/components/pinned-panel.tsx b/apps/remix-ide/src/app/components/pinned-panel.tsx index 9bf681191c..70b39672a0 100644 --- a/apps/remix-ide/src/app/components/pinned-panel.tsx +++ b/apps/remix-ide/src/app/components/pinned-panel.tsx @@ -1,7 +1,7 @@ // eslint-disable-next-line no-use-before-define import React from 'react' import { AbstractPanel } from './panel' -import { RemixPluginPanel } from '@remix-ui/panel' +import { PluginRecord, RemixPluginPanel } from '@remix-ui/panel' import packageJson from '../../../../../package.json' import { RemixUIPanelHeader } from '@remix-ui/panel' import { PluginViewWrapper } from '@remix-ui/helper' @@ -11,7 +11,7 @@ const pinnedPanel = { displayName: 'Pinned Panel', description: 'Remix IDE pinned panel', version: packageJson.version, - methods: ['addView', 'removeView', 'currentFocus'] + methods: ['addView', 'removeView', 'currentFocus', 'pinView', 'unPinView'] } export class PinnedPanel extends AbstractPanel { @@ -26,24 +26,26 @@ export class PinnedPanel extends AbstractPanel { this.renderComponent() } - currentFocus (): string { - return Object.values(this.plugins).find(plugin => { - return plugin.pinned - }).profile.name - } + pinView (profile, view) { + const activePlugin = this.currentFocus() - removeView(profile) { - this.remove(profile.name) - this.emit('unpinnedPlugin', profile.name) + if (activePlugin === profile.name) throw new Error(`Plugin ${profile.name} already pinned`) + if (activePlugin) this.remove(activePlugin) + this.addView(profile, view) + this.plugins[profile.name].pinned = true + this.plugins[profile.name].active = true this.renderComponent() + this.events.emit('pinnedPlugin', profile.name) } - addView(profile, view) { - super.addView(profile, view) - this.plugins[profile.name].pinned = true - super.showContent(profile.name) - this.emit('pinnedPlugin', profile.name) + unPinView (profile) { + const activePlugin = this.currentFocus() + + if (activePlugin !== profile.name) throw new Error(`Plugin ${profile.name} already pinned`) + super.remove(profile.name) + this.call('sidePanel', 'unPinView', profile) this.renderComponent() + this.events.emit('unPinnedPlugin', profile.name) } setDispatch (dispatch: React.Dispatch) { @@ -57,7 +59,7 @@ export class PinnedPanel extends AbstractPanel { } updateComponent(state: any) { - return } plugins={state.plugins} /> + return } plugins={state.plugins} /> } renderComponent() { diff --git a/apps/remix-ide/src/app/components/side-panel.tsx b/apps/remix-ide/src/app/components/side-panel.tsx index 8735c296b7..3e32827183 100644 --- a/apps/remix-ide/src/app/components/side-panel.tsx +++ b/apps/remix-ide/src/app/components/side-panel.tsx @@ -12,7 +12,7 @@ const sidePanel = { displayName: 'Side Panel', description: 'Remix IDE side panel', version: packageJson.version, - methods: ['addView', 'removeView', 'currentFocus'] + methods: ['addView', 'removeView', 'currentFocus', 'pinView', 'unPinView'] } export class SidePanel extends AbstractPanel { @@ -65,22 +65,35 @@ export class SidePanel extends AbstractPanel { } addView(profile, view) { + console.log(profile.name) super.addView(profile, view) this.call('menuicons', 'linkContent', profile) this.renderComponent() } + hideView(profile) { + this.plugins[profile.name].active = false + this.plugins['filePanel'].active = true + this.call('menuicons', 'unlinkContent', profile) + this.renderComponent() + } + + showView(profile) { + this.call('menuicons', 'linkContent', profile) + this.renderComponent() + } + pinView (profile, view) { if (this.plugins[profile.name].pinned) return this.plugins[profile.name].pinned = true - this.call('pinnedPanel', 'addView', profile, view) - // this.removeView(profile) + this.call('pinnedPanel', 'pinView', profile, view) + this.hideView(profile) } unPinView (profile) { if (!this.plugins[profile.name].pinned) return this.plugins[profile.name].pinned = false - this.call('pinnedPanel', 'removeView', profile) + this.showView(profile) } /** diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index 3c79abba69..39684fc1fa 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -27,7 +27,7 @@ const RemixApp = (props: IRemixAppUi) => { const [appReady, setAppReady] = useState(false) const [showEnterDialog, setShowEnterDialog] = useState(false) const [hideSidePanel, setHideSidePanel] = useState(false) - const [hidePinnedPanel, setHidePinnedPanel] = useState(false) + const [hidePinnedPanel, setHidePinnedPanel] = useState(true) const [maximiseLeftTrigger, setMaximiseLeftTrigger] = useState(0) const [resetLeftTrigger, setResetLeftTrigger] = useState(0) const [maximiseRightTrigger, setMaximiseRightTrigger] = useState(0) @@ -118,6 +118,14 @@ const RemixApp = (props: IRemixAppUi) => { setLocale(nextLocale) }) + props.app.pinnedPanel.events.on('pinnedPlugin', () => { + setHidePinnedPanel(false) + }) + + props.app.pinnedPanel.events.on('unPinnedPlugin', () => { + setHidePinnedPanel(true) + }) + setInterval(() => { setOnline(window.navigator.onLine) }, 1000) @@ -199,9 +207,9 @@ const RemixApp = (props: IRemixAppUi) => { >
- }> -
-
+ {/* }> +
+
*/}
{ setHideStatus={setHideSidePanel} layoutPosition='right' > -
+
{props.app.pinnedPanel.render()}
diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx index ff4f327efc..cf5c63003f 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx @@ -2,7 +2,7 @@ import React, {useEffect, useState} from 'react' // eslint-disable-line import {FormattedMessage} from 'react-intl' import {PluginRecord} from '../types' import './panel.css' -import { CustomTooltip } from '@remix-ui/helper' +import {CustomTooltip, RenderIf, RenderIfNot} from '@remix-ui/helper' export interface RemixPanelProps { plugins: Record, @@ -47,32 +47,39 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => {
{plugin?.profile?.maintainedBy?.toLowerCase() === 'remix' ? ( - }> + }> ) - : (}> + : (}> ) }
- } tooltipId="pluginInfoTooltip" tooltipClasses="text-nowrap"> + } tooltipId="pluginInfoTooltip" tooltipClasses="text-nowrap"> {tooltipChild}
{ - !plugin?.pinned ? ( -
- }> - - -
- ) : ( -
- }> - - -
+ plugin && plugin.profile.name !== 'filePanel' && ( + + <> + +
+ }> + + +
+
+ +
+ }> + + +
+
+ +
) }
From ed662197db6fd5c9cdc8ccaaf755f5ba906e0c19 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Fri, 3 May 2024 06:48:02 -0500 Subject: [PATCH 45/69] Load initialState for udapp after pinning --- apps/remix-ide/src/app.js | 8 ++++-- .../src/app/components/pinned-panel.tsx | 9 ++++--- .../src/app/components/side-panel.tsx | 19 +++++++++----- apps/remix-ide/src/app/tabs/state-logger.js | 26 +++++++++++++++++++ .../panel/src/lib/plugins/panel-header.tsx | 1 - .../panel/src/lib/plugins/panel-plugin.tsx | 18 +++++++++++-- .../panel/src/lib/plugins/remix-ui-panel.tsx | 7 ++--- libs/remix-ui/run-tab/src/lib/run-tab.tsx | 15 +++++++---- libs/remix-ui/run-tab/src/lib/types/index.ts | 3 ++- 9 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 apps/remix-ide/src/app/tabs/state-logger.js diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index ed8f148b95..98d9269342 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -7,6 +7,7 @@ import {LocaleModule} from './app/tabs/locale-module' import {NetworkModule} from './app/tabs/network-module' import {Web3ProviderModule} from './app/tabs/web3-provider' import {CompileAndRun} from './app/tabs/compile-and-run' +import {PluginStateLogger} from './app/tabs/state-logger' import {SidePanel} from './app/components/side-panel' import {HiddenPanel} from './app/components/hidden-panel' import {PinnedPanel} from './app/components/pinned-panel' @@ -301,7 +302,8 @@ class AppComponent { this.layout = new Layout() const permissionHandler = new PermissionHandlerPlugin() - + // ----------------- run script after each compilation results ----------- + const pluginStateLogger = new PluginStateLogger() this.engine.register([ permissionHandler, @@ -352,6 +354,7 @@ class AppComponent { templates, openaigpt, solcoder, + pluginStateLogger ]) //---- fs plugin @@ -468,7 +471,8 @@ class AppComponent { 'compilerArtefacts', 'network', 'web3Provider', - 'offsetToLineColumnConverter' + 'offsetToLineColumnConverter', + 'pluginStateLogger' ]) await this.appManager.activatePlugin(['mainPanel', 'menuicons', 'tabs']) await this.appManager.activatePlugin(['sidePanel']) // activating host plugin separately diff --git a/apps/remix-ide/src/app/components/pinned-panel.tsx b/apps/remix-ide/src/app/components/pinned-panel.tsx index 70b39672a0..f435e03f69 100644 --- a/apps/remix-ide/src/app/components/pinned-panel.tsx +++ b/apps/remix-ide/src/app/components/pinned-panel.tsx @@ -17,6 +17,7 @@ const pinnedPanel = { export class PinnedPanel extends AbstractPanel { sideelement: any dispatch: React.Dispatch = () => {} + loggedState: any constructor() { super(pinnedPanel) @@ -26,11 +27,12 @@ export class PinnedPanel extends AbstractPanel { this.renderComponent() } - pinView (profile, view) { + async pinView (profile, view) { const activePlugin = this.currentFocus() if (activePlugin === profile.name) throw new Error(`Plugin ${profile.name} already pinned`) if (activePlugin) this.remove(activePlugin) + this.loggedState = await this.call('pluginStateLogger', 'getPluginState', profile.name) this.addView(profile, view) this.plugins[profile.name].pinned = true this.plugins[profile.name].active = true @@ -59,12 +61,13 @@ export class PinnedPanel extends AbstractPanel { } updateComponent(state: any) { - return } plugins={state.plugins} /> + return } plugins={state.plugins} pluginState={state.pluginState} /> } renderComponent() { this.dispatch({ - plugins: this.plugins + plugins: this.plugins, + pluginState: this.loggedState }) } } diff --git a/apps/remix-ide/src/app/components/side-panel.tsx b/apps/remix-ide/src/app/components/side-panel.tsx index 3e32827183..9861b8f35c 100644 --- a/apps/remix-ide/src/app/components/side-panel.tsx +++ b/apps/remix-ide/src/app/components/side-panel.tsx @@ -18,7 +18,9 @@ const sidePanel = { export class SidePanel extends AbstractPanel { // lastPinned sideelement: any + loggedState: any dispatch: React.Dispatch = () => {} + constructor() { super(sidePanel) this.sideelement = document.createElement('section') @@ -65,7 +67,6 @@ export class SidePanel extends AbstractPanel { } addView(profile, view) { - console.log(profile.name) super.addView(profile, view) this.call('menuicons', 'linkContent', profile) this.renderComponent() @@ -79,15 +80,20 @@ export class SidePanel extends AbstractPanel { } showView(profile) { + const activePlugin = this.currentFocus() + + this.plugins[activePlugin].active = false + this.plugins[profile.name].active = true this.call('menuicons', 'linkContent', profile) this.renderComponent() } - pinView (profile, view) { + pinView (profile) { if (this.plugins[profile.name].pinned) return this.plugins[profile.name].pinned = true - this.call('pinnedPanel', 'pinView', profile, view) - this.hideView(profile) + this.call('pinnedPanel', 'pinView', profile, this.plugins[profile.name].view) + this.removeView(profile) + // this.hideView(profile) } unPinView (profile) { @@ -120,12 +126,13 @@ export class SidePanel extends AbstractPanel { } updateComponent(state: any) { - return } plugins={state.plugins} /> + return } plugins={state.plugins} pluginState={state.loggedState} /> } renderComponent() { this.dispatch({ - plugins: this.plugins + plugins: this.plugins, + pluginState: this.loggedState }) } } diff --git a/apps/remix-ide/src/app/tabs/state-logger.js b/apps/remix-ide/src/app/tabs/state-logger.js new file mode 100644 index 0000000000..fa5d371dfb --- /dev/null +++ b/apps/remix-ide/src/app/tabs/state-logger.js @@ -0,0 +1,26 @@ +import { Plugin } from "@remixproject/engine" +import { EventEmitter } from 'events' +import * as packageJson from '../../../../../package.json' + +const profile = { + name: 'pluginStateLogger', + events: [], + methods: ['logPluginState', 'getPluginState'], + version: packageJson.version, +} + +export class PluginStateLogger extends Plugin { + constructor() { + super(profile) + this.events = new EventEmitter() + this.stateLogs = {} + } + + logPluginState(name, state) { + this.stateLogs[name] = state + } + + getPluginState(name) { + return this.stateLogs[name] + } +} \ No newline at end of file diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx index cf5c63003f..687d2cfd50 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx @@ -28,7 +28,6 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { } const pinPlugin = () => { - console.log('called pinPlugin') props.pinView && props.pinView(plugin.profile, plugin.view) } diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-plugin.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-plugin.tsx index 2c9d3d71ee..fa6760dc08 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-plugin.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-plugin.tsx @@ -3,7 +3,9 @@ import React, {forwardRef, useEffect, useRef, useState} from 'react' // eslint-d import { PluginRecord } from '../types' import './panel.css' interface panelPLuginProps { - pluginRecord: PluginRecord + pluginRecord: PluginRecord, + initialState?: any, + children?: any } const RemixUIPanelPlugin = (props: panelPLuginProps, panelRef: any) => { @@ -14,7 +16,19 @@ const RemixUIPanelPlugin = (props: panelPLuginProps, panelRef: any) => { if (ref.current) { if (props.pluginRecord.view) { if (React.isValidElement(props.pluginRecord.view)) { - setView(props.pluginRecord.view) + let view = props.pluginRecord.view + + if (props.initialState) { + view = React.Children.map((props.pluginRecord.view.props as any).children, child => { + if (React.isValidElement(child) && typeof child.type === 'function') { + // Safe to clone and pass `initialState` + return React.cloneElement(child, { ...props, initialState: props.initialState } as any) + } + return child + }) + } + + setView(view) } else { ref.current.appendChild(props.pluginRecord.view) } diff --git a/libs/remix-ui/panel/src/lib/plugins/remix-ui-panel.tsx b/libs/remix-ui/panel/src/lib/plugins/remix-ui-panel.tsx index 1b3d668a35..7ff51827bd 100644 --- a/libs/remix-ui/panel/src/lib/plugins/remix-ui-panel.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/remix-ui-panel.tsx @@ -6,8 +6,9 @@ import { PluginRecord } from '../types' /* eslint-disable-next-line */ export interface RemixPanelProps { - plugins: Record - header: JSX.Element + plugins: Record, + header: JSX.Element, + pluginState?: any, } export function RemixPluginPanel(props: RemixPanelProps) { @@ -17,7 +18,7 @@ export function RemixPluginPanel(props: RemixPanelProps) {
{Object.values(props.plugins).map((pluginRecord) => { - return + return })}
diff --git a/libs/remix-ui/run-tab/src/lib/run-tab.tsx b/libs/remix-ui/run-tab/src/lib/run-tab.tsx index 3e3985a772..15c9be5bb6 100644 --- a/libs/remix-ui/run-tab/src/lib/run-tab.tsx +++ b/libs/remix-ui/run-tab/src/lib/run-tab.tsx @@ -74,18 +74,23 @@ export function RunTabUI(props: RunTabProps) { storage: null, contract: null }) - runTabInitialState.selectExEnv = plugin.blockchain.getProvider() - const [runTab, dispatch] = useReducer(runTabReducer, runTabInitialState) - const REACT_API = { runTab } + const initialState = props.initialState || runTabInitialState + + initialState.selectExEnv = plugin.blockchain.getProvider() + const [runTab, dispatch] = useReducer(runTabReducer, initialState) + const REACT_API = {runTab} const currentfile = plugin.config.get('currentFile') useEffect(() => { - initRunTab(plugin)(dispatch) - plugin.onInitDone() + if (!props.initialState) { + initRunTab(plugin)(dispatch) + plugin.onInitDone() + } }, [plugin]) useEffect(() => { plugin.onReady(runTab) + plugin.call('pluginStateLogger', 'logPluginState', 'udapp', runTab) }, [REACT_API]) useEffect(() => { diff --git a/libs/remix-ui/run-tab/src/lib/types/index.ts b/libs/remix-ui/run-tab/src/lib/types/index.ts index 6e19d45b3a..7e4ae84533 100644 --- a/libs/remix-ui/run-tab/src/lib/types/index.ts +++ b/libs/remix-ui/run-tab/src/lib/types/index.ts @@ -5,7 +5,8 @@ import { RunTab } from './run-tab' import { SolcInput, SolcOutput } from '@openzeppelin/upgrades-core' import { LayoutCompatibilityReport } from '@openzeppelin/upgrades-core/dist/storage/report' export interface RunTabProps { - plugin: RunTab + plugin: RunTab, + initialState: RunTabState } export interface Contract { From 28aaf21eb27e3eace45ef66e8a9ed0a3ec28e08d Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Fri, 3 May 2024 20:58:47 -0500 Subject: [PATCH 46/69] Load initialState for search plugin and fix run tab --- libs/remix-ui/run-tab/src/lib/actions/index.ts | 8 +++++--- libs/remix-ui/run-tab/src/lib/run-tab.tsx | 4 +++- libs/remix-ui/search/src/lib/components/Search.tsx | 2 +- libs/remix-ui/search/src/lib/context/context.tsx | 1 + 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/libs/remix-ui/run-tab/src/lib/actions/index.ts b/libs/remix-ui/run-tab/src/lib/actions/index.ts index b5c65e89f5..0df06aa448 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/index.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/index.ts @@ -22,11 +22,13 @@ declare global { const _paq = window._paq = window._paq || [] //eslint-disable-line let plugin: RunTab, dispatch: React.Dispatch = () => {} -export const initRunTab = (udapp: RunTab) => async (reducerDispatch: React.Dispatch) => { +export const initRunTab = (udapp: RunTab, resetEventsAndAccounts: boolean) => async (reducerDispatch: React.Dispatch) => { plugin = udapp dispatch = reducerDispatch - setupEvents(plugin, dispatch) - resetAndInit(plugin) + if (resetEventsAndAccounts) { + setupEvents(plugin, dispatch) + resetAndInit(plugin) + } } export const setAccountAddress = (account: string) => setAccount(dispatch, account) diff --git a/libs/remix-ui/run-tab/src/lib/run-tab.tsx b/libs/remix-ui/run-tab/src/lib/run-tab.tsx index 15c9be5bb6..ae569274ce 100644 --- a/libs/remix-ui/run-tab/src/lib/run-tab.tsx +++ b/libs/remix-ui/run-tab/src/lib/run-tab.tsx @@ -83,8 +83,10 @@ export function RunTabUI(props: RunTabProps) { useEffect(() => { if (!props.initialState) { - initRunTab(plugin)(dispatch) + initRunTab(plugin, true)(dispatch) plugin.onInitDone() + } else { + initRunTab(plugin, false)(dispatch) } }, [plugin]) diff --git a/libs/remix-ui/search/src/lib/components/Search.tsx b/libs/remix-ui/search/src/lib/components/Search.tsx index 11dcc9addd..43b2418015 100644 --- a/libs/remix-ui/search/src/lib/components/Search.tsx +++ b/libs/remix-ui/search/src/lib/components/Search.tsx @@ -15,7 +15,7 @@ export const SearchTab = (props) => { return ( <>
- + diff --git a/libs/remix-ui/search/src/lib/context/context.tsx b/libs/remix-ui/search/src/lib/context/context.tsx index 8e50f0b53e..336955c744 100644 --- a/libs/remix-ui/search/src/lib/context/context.tsx +++ b/libs/remix-ui/search/src/lib/context/context.tsx @@ -443,6 +443,7 @@ export const SearchProvider = ({ children = [], reducer = SearchReducer, initial } })() } + plugin.call('pluginStateLogger', 'logPluginState', 'search', state) }, [state.timeStamp]) return ( From 6f7aefa504289251733cd5ed7b102b127518ed59 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Fri, 3 May 2024 21:33:59 -0500 Subject: [PATCH 47/69] Highlight unpinned panel --- .../src/app/components/pinned-panel.tsx | 2 +- .../src/app/components/side-panel.tsx | 29 +++++-------------- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/apps/remix-ide/src/app/components/pinned-panel.tsx b/apps/remix-ide/src/app/components/pinned-panel.tsx index f435e03f69..0526ddf04f 100644 --- a/apps/remix-ide/src/app/components/pinned-panel.tsx +++ b/apps/remix-ide/src/app/components/pinned-panel.tsx @@ -44,8 +44,8 @@ export class PinnedPanel extends AbstractPanel { const activePlugin = this.currentFocus() if (activePlugin !== profile.name) throw new Error(`Plugin ${profile.name} already pinned`) + this.call('sidePanel', 'unPinView', profile, this.plugins[profile.name].view) super.remove(profile.name) - this.call('sidePanel', 'unPinView', profile) this.renderComponent() this.events.emit('unPinnedPlugin', profile.name) } diff --git a/apps/remix-ide/src/app/components/side-panel.tsx b/apps/remix-ide/src/app/components/side-panel.tsx index 9861b8f35c..11642fce57 100644 --- a/apps/remix-ide/src/app/components/side-panel.tsx +++ b/apps/remix-ide/src/app/components/side-panel.tsx @@ -72,34 +72,19 @@ export class SidePanel extends AbstractPanel { this.renderComponent() } - hideView(profile) { - this.plugins[profile.name].active = false - this.plugins['filePanel'].active = true - this.call('menuicons', 'unlinkContent', profile) - this.renderComponent() + pinView (profile) { + this.call('pinnedPanel', 'pinView', profile, this.plugins[profile.name].view) + this.removeView(profile) } - showView(profile) { + async unPinView (profile, view) { + this.addView(profile, view) const activePlugin = this.currentFocus() this.plugins[activePlugin].active = false this.plugins[profile.name].active = true - this.call('menuicons', 'linkContent', profile) - this.renderComponent() - } - - pinView (profile) { - if (this.plugins[profile.name].pinned) return - this.plugins[profile.name].pinned = true - this.call('pinnedPanel', 'pinView', profile, this.plugins[profile.name].view) - this.removeView(profile) - // this.hideView(profile) - } - - unPinView (profile) { - if (!this.plugins[profile.name].pinned) return - this.plugins[profile.name].pinned = false - this.showView(profile) + await this.call('menuicons', 'linkContent', profile) + this.showContent(profile.name) } /** From edc5fa26a07a4861e4a53e949991576a62d82d9c Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Sun, 5 May 2024 12:55:34 -0500 Subject: [PATCH 48/69] Load plugin state for side-panel after unpin --- apps/remix-ide/src/app/components/pinned-panel.tsx | 9 ++++++--- apps/remix-ide/src/app/components/side-panel.tsx | 10 ++++++---- libs/remix-ui/panel/src/lib/plugins/panel-header.tsx | 4 ++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/apps/remix-ide/src/app/components/pinned-panel.tsx b/apps/remix-ide/src/app/components/pinned-panel.tsx index 0526ddf04f..db8bcba590 100644 --- a/apps/remix-ide/src/app/components/pinned-panel.tsx +++ b/apps/remix-ide/src/app/components/pinned-panel.tsx @@ -31,7 +31,10 @@ export class PinnedPanel extends AbstractPanel { const activePlugin = this.currentFocus() if (activePlugin === profile.name) throw new Error(`Plugin ${profile.name} already pinned`) - if (activePlugin) this.remove(activePlugin) + if (activePlugin) { + await this.call('sidePanel', 'unPinView', this.plugins[activePlugin].profile, this.plugins[activePlugin].view) + this.remove(activePlugin) + } this.loggedState = await this.call('pluginStateLogger', 'getPluginState', profile.name) this.addView(profile, view) this.plugins[profile.name].pinned = true @@ -40,11 +43,11 @@ export class PinnedPanel extends AbstractPanel { this.events.emit('pinnedPlugin', profile.name) } - unPinView (profile) { + async unPinView (profile) { const activePlugin = this.currentFocus() if (activePlugin !== profile.name) throw new Error(`Plugin ${profile.name} already pinned`) - this.call('sidePanel', 'unPinView', profile, this.plugins[profile.name].view) + await this.call('sidePanel', 'unPinView', profile, this.plugins[profile.name].view) super.remove(profile.name) this.renderComponent() this.events.emit('unPinnedPlugin', profile.name) diff --git a/apps/remix-ide/src/app/components/side-panel.tsx b/apps/remix-ide/src/app/components/side-panel.tsx index 11642fce57..81d19791fe 100644 --- a/apps/remix-ide/src/app/components/side-panel.tsx +++ b/apps/remix-ide/src/app/components/side-panel.tsx @@ -72,15 +72,17 @@ export class SidePanel extends AbstractPanel { this.renderComponent() } - pinView (profile) { - this.call('pinnedPanel', 'pinView', profile, this.plugins[profile.name].view) + async pinView (profile, view) { + await this.call('pinnedPanel', 'pinView', profile, view) this.removeView(profile) } async unPinView (profile, view) { - this.addView(profile, view) const activePlugin = this.currentFocus() + if (activePlugin === profile.name) throw new Error(`Plugin ${profile.name} already unpinned`) + this.loggedState = await this.call('pluginStateLogger', 'getPluginState', profile.name) + super.addView(profile, view) this.plugins[activePlugin].active = false this.plugins[profile.name].active = true await this.call('menuicons', 'linkContent', profile) @@ -111,7 +113,7 @@ export class SidePanel extends AbstractPanel { } updateComponent(state: any) { - return } plugins={state.plugins} pluginState={state.loggedState} /> + return } plugins={state.plugins} pluginState={state.pluginState} /> } renderComponent() { diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx index 687d2cfd50..9d86ff6eec 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx @@ -7,7 +7,7 @@ import {CustomTooltip, RenderIf, RenderIfNot} from '@remix-ui/helper' export interface RemixPanelProps { plugins: Record, pinView?: (profile: PluginRecord['profile'], view: PluginRecord['view']) => void, - unPinView?: (profile: PluginRecord['profile']) => void + unPinView?: (profile: PluginRecord['profile'], view: PluginRecord['view']) => void } const RemixUIPanelHeader = (props: RemixPanelProps) => { const [plugin, setPlugin] = useState() @@ -32,7 +32,7 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { } const unPinPlugin = () => { - props.unPinView && props.unPinView(plugin.profile) + props.unPinView && props.unPinView(plugin.profile, plugin.view) } const tooltipChild = From e22ecedd0068aabfd38bfecc0a2e514431447b4c Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Tue, 7 May 2024 09:44:34 -0500 Subject: [PATCH 49/69] Reload pinned plugin --- apps/remix-ide/src/app.js | 14 ++++++++++++++ apps/remix-ide/src/app/components/pinned-panel.tsx | 4 +++- apps/remix-ide/src/app/components/side-panel.tsx | 4 ++-- .../panel/src/lib/plugins/panel-header.tsx | 4 ++-- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index 98d9269342..1a826b2255 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -571,6 +571,12 @@ class AppComponent { } } } + }).then(async () => { + const lastPinned = localStorage.getItem('pinnedPlugin') + + if (lastPinned) { + setTimeout(() => this.appManager.call('sidePanel', 'pinView', { name: lastPinned }), 500) + } }) .catch(console.error) } @@ -579,6 +585,14 @@ class AppComponent { document.body.appendChild(loadedElement) }) + this.appManager.on('pinnedPanel', 'pinnedPlugin', (pluginName) => { + localStorage.setItem('pinnedPlugin', pluginName) + }) + + this.appManager.on('pinnedPanel', 'unPinnedPlugin', () => { + localStorage.setItem('pinnedPlugin', '') + }) + // activate solidity plugin this.appManager.activatePlugin(['solidity', 'udapp', 'deploy-libraries', 'link-libraries', 'openzeppelin-proxy']) } diff --git a/apps/remix-ide/src/app/components/pinned-panel.tsx b/apps/remix-ide/src/app/components/pinned-panel.tsx index db8bcba590..214450ccf6 100644 --- a/apps/remix-ide/src/app/components/pinned-panel.tsx +++ b/apps/remix-ide/src/app/components/pinned-panel.tsx @@ -41,16 +41,18 @@ export class PinnedPanel extends AbstractPanel { this.plugins[profile.name].active = true this.renderComponent() this.events.emit('pinnedPlugin', profile.name) + this.emit('pinnedPlugin', profile.name) } async unPinView (profile) { const activePlugin = this.currentFocus() - if (activePlugin !== profile.name) throw new Error(`Plugin ${profile.name} already pinned`) + if (activePlugin !== profile.name) throw new Error(`Plugin ${profile.name} is not pinned`) await this.call('sidePanel', 'unPinView', profile, this.plugins[profile.name].view) super.remove(profile.name) this.renderComponent() this.events.emit('unPinnedPlugin', profile.name) + this.emit('unPinnedPlugin', profile.name) } setDispatch (dispatch: React.Dispatch) { diff --git a/apps/remix-ide/src/app/components/side-panel.tsx b/apps/remix-ide/src/app/components/side-panel.tsx index 81d19791fe..ea39a23192 100644 --- a/apps/remix-ide/src/app/components/side-panel.tsx +++ b/apps/remix-ide/src/app/components/side-panel.tsx @@ -72,8 +72,8 @@ export class SidePanel extends AbstractPanel { this.renderComponent() } - async pinView (profile, view) { - await this.call('pinnedPanel', 'pinView', profile, view) + async pinView (profile) { + await this.call('pinnedPanel', 'pinView', profile, this.plugins[profile.name].view) this.removeView(profile) } diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx index 9d86ff6eec..687d2cfd50 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx @@ -7,7 +7,7 @@ import {CustomTooltip, RenderIf, RenderIfNot} from '@remix-ui/helper' export interface RemixPanelProps { plugins: Record, pinView?: (profile: PluginRecord['profile'], view: PluginRecord['view']) => void, - unPinView?: (profile: PluginRecord['profile'], view: PluginRecord['view']) => void + unPinView?: (profile: PluginRecord['profile']) => void } const RemixUIPanelHeader = (props: RemixPanelProps) => { const [plugin, setPlugin] = useState() @@ -32,7 +32,7 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { } const unPinPlugin = () => { - props.unPinView && props.unPinView(plugin.profile, plugin.view) + props.unPinView && props.unPinView(plugin.profile) } const tooltipChild = From ad720ed7f53629e40f9c8107d8028bc7fd51adf1 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 8 May 2024 09:07:39 -0500 Subject: [PATCH 50/69] Fix reload error --- apps/remix-ide/src/app.js | 6 +++--- apps/remix-ide/src/app/components/pinned-panel.tsx | 8 ++++---- libs/remix-ui/app/src/lib/remix-app/remix-app.tsx | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index 1a826b2255..1fa9e2f8f7 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -575,7 +575,7 @@ class AppComponent { const lastPinned = localStorage.getItem('pinnedPlugin') if (lastPinned) { - setTimeout(() => this.appManager.call('sidePanel', 'pinView', { name: lastPinned }), 500) + this.appManager.call('sidePanel', 'pinView', JSON.parse(lastPinned)) } }) .catch(console.error) @@ -585,8 +585,8 @@ class AppComponent { document.body.appendChild(loadedElement) }) - this.appManager.on('pinnedPanel', 'pinnedPlugin', (pluginName) => { - localStorage.setItem('pinnedPlugin', pluginName) + this.appManager.on('pinnedPanel', 'pinnedPlugin', (pluginProfile) => { + localStorage.setItem('pinnedPlugin', JSON.stringify(pluginProfile)) }) this.appManager.on('pinnedPanel', 'unPinnedPlugin', () => { diff --git a/apps/remix-ide/src/app/components/pinned-panel.tsx b/apps/remix-ide/src/app/components/pinned-panel.tsx index 214450ccf6..b9d9d5b416 100644 --- a/apps/remix-ide/src/app/components/pinned-panel.tsx +++ b/apps/remix-ide/src/app/components/pinned-panel.tsx @@ -40,8 +40,8 @@ export class PinnedPanel extends AbstractPanel { this.plugins[profile.name].pinned = true this.plugins[profile.name].active = true this.renderComponent() - this.events.emit('pinnedPlugin', profile.name) - this.emit('pinnedPlugin', profile.name) + this.events.emit('pinnedPlugin', profile) + this.emit('pinnedPlugin', profile) } async unPinView (profile) { @@ -51,8 +51,8 @@ export class PinnedPanel extends AbstractPanel { await this.call('sidePanel', 'unPinView', profile, this.plugins[profile.name].view) super.remove(profile.name) this.renderComponent() - this.events.emit('unPinnedPlugin', profile.name) - this.emit('unPinnedPlugin', profile.name) + this.events.emit('unPinnedPlugin', profile) + this.emit('unPinnedPlugin', profile) } setDispatch (dispatch: React.Dispatch) { diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index 39684fc1fa..f184505d33 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -211,6 +211,9 @@ const RemixApp = (props: IRemixAppUi) => {
*/}
+
+ {props.app.pinnedPanel.render()} +
{ setHideStatus={setHideSidePanel} layoutPosition='right' > -
- {props.app.pinnedPanel.render()} -
{props.app.hiddenPanel.render()}
From 79a436262d32d68f456a45f634d67793b86c9cf1 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Mon, 13 May 2024 23:48:26 +0100 Subject: [PATCH 51/69] Fixed dispatch bug for udapp --- libs/remix-ui/run-tab/src/lib/actions/events.ts | 5 +++++ libs/remix-ui/run-tab/src/lib/actions/index.ts | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libs/remix-ui/run-tab/src/lib/actions/events.ts b/libs/remix-ui/run-tab/src/lib/actions/events.ts index eb2c4a8525..ee274fc55b 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/events.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/events.ts @@ -12,6 +12,11 @@ import { getNetworkProxyAddresses } from "./deploy" import { shortenAddress } from "@remix-ui/helper" const _paq = window._paq = window._paq || [] +let dispatch: React.Dispatch = () => {} + +export const setEventsDispatch = (reducerDispatch: React.Dispatch) => { + dispatch = reducerDispatch +} export const setupEvents = (plugin: RunTab, dispatch: React.Dispatch) => { // This maintains current network state and update the pinned contracts list, diff --git a/libs/remix-ui/run-tab/src/lib/actions/index.ts b/libs/remix-ui/run-tab/src/lib/actions/index.ts index 0df06aa448..ff39737ced 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/index.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/index.ts @@ -1,7 +1,7 @@ // eslint-disable-next-line no-unused-vars import React from 'react' import { RunTab } from '../types/run-tab' -import { resetAndInit, setupEvents } from './events' +import { resetAndInit, setupEvents, setEventsDispatch } from './events' import { createNewBlockchainAccount, setExecutionContext, signMessageWithAddress } from './account' import { clearInstances, clearPopUp, removeInstance, setAccount, setGasFee, setMatchPassphrasePrompt, setNetworkNameFromProvider, setPassphrasePrompt, setSelectedContract, setSendTransactionValue, setUnit, @@ -25,8 +25,9 @@ let plugin: RunTab, dispatch: React.Dispatch = () => {} export const initRunTab = (udapp: RunTab, resetEventsAndAccounts: boolean) => async (reducerDispatch: React.Dispatch) => { plugin = udapp dispatch = reducerDispatch + setEventsDispatch(reducerDispatch) if (resetEventsAndAccounts) { - setupEvents(plugin, dispatch) + setupEvents(plugin) resetAndInit(plugin) } } From fea9c81dfc09ac2907da222a16af5ad332b46aad Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 15 May 2024 13:04:02 +0100 Subject: [PATCH 52/69] Fix right dragbar --- .../remix-app/components/dragbar/dragbar.tsx | 32 +++++++++++++------ .../app/src/lib/remix-app/remix-app.tsx | 4 +-- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx b/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx index bb7bd77613..609cd6edb3 100644 --- a/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx @@ -54,7 +54,8 @@ const DragBar = (props: IRemixDragBarUi) => { const handleResize = () => { if (!props.refObject.current) return setOffSet(props.refObject.current.offsetLeft) - setDragBarPosX(props.refObject.current.offsetLeft + props.refObject.current.offsetWidth) + if (props.layoutPosition === 'left') setDragBarPosX(props.refObject.current.offsetLeft + props.refObject.current.offsetWidth) + else if (props.layoutPosition === 'right') setDragBarPosX(props.refObject.current.offsetLeft) } useEffect(() => { @@ -66,15 +67,28 @@ const DragBar = (props: IRemixDragBarUi) => { function stopDrag(data: any) { setDragState(false) - if (data.x < props.minWidth + offset) { - setDragBarPosX(offset) - props.setHideStatus(true) - } else { - props.refObject.current.style.width = data.x - offset + 'px' - setTimeout(() => { + if (props.layoutPosition === 'left') { + if (data.x < props.minWidth + offset) { + setDragBarPosX(offset) + props.setHideStatus(true) + } else { + props.refObject.current.style.width = data.x - offset + 'px' + setTimeout(() => { + props.setHideStatus(false) + setDragBarPosX(offset + props.refObject.current.offsetWidth) + }, 300) + } + } else if (props.layoutPosition === 'right') { + if (window.innerWidth - data.x < props.minWidth) { + setDragBarPosX(props.refObject.current.offsetLeft) props.setHideStatus(false) - setDragBarPosX(offset + props.refObject.current.offsetWidth) - }, 300) + } else { + props.refObject.current.style.width = (window.innerWidth - data.x) + 'px' + setTimeout(() => { + props.setHideStatus(false) + setDragBarPosX(props.refObject.current.offsetLeft) + }, 300) + } } } diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index f184505d33..d458271243 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -98,7 +98,7 @@ const RemixApp = (props: IRemixAppUi) => { props.app.layout.event.on('minimizepinnedpanel', () => { setTimeout(() => { - setHideSidePanel(true) + setHidePinnedPanel(true) }, 1000) }) @@ -220,7 +220,7 @@ const RemixApp = (props: IRemixAppUi) => { minWidth={285} refObject={pinnedPanelRef} hidden={hidePinnedPanel} - setHideStatus={setHideSidePanel} + setHideStatus={setHidePinnedPanel} layoutPosition='right' >
From 78ab826b17dd9d647074308ec7d5d3bf38328274 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 15 May 2024 13:15:12 +0100 Subject: [PATCH 53/69] Remove unused comment --- apps/remix-ide/src/app/components/side-panel.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/remix-ide/src/app/components/side-panel.tsx b/apps/remix-ide/src/app/components/side-panel.tsx index ea39a23192..5a3f79851e 100644 --- a/apps/remix-ide/src/app/components/side-panel.tsx +++ b/apps/remix-ide/src/app/components/side-panel.tsx @@ -16,7 +16,6 @@ const sidePanel = { } export class SidePanel extends AbstractPanel { - // lastPinned sideelement: any loggedState: any dispatch: React.Dispatch = () => {} From c3a74fba5b3cf01043113ed3b9854ce4021be2e9 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 15 May 2024 13:34:42 +0100 Subject: [PATCH 54/69] Fix linting issues --- apps/remix-ide/src/assets/list.json | 92 ------------------- .../panel/src/lib/plugins/panel-header.tsx | 6 +- .../run-tab/src/lib/actions/events.ts | 2 +- .../remix-ui/run-tab/src/lib/actions/index.ts | 2 +- libs/remix-ui/run-tab/src/lib/run-tab.tsx | 2 +- 5 files changed, 6 insertions(+), 98 deletions(-) diff --git a/apps/remix-ide/src/assets/list.json b/apps/remix-ide/src/assets/list.json index 04a4929e01..e1eb4bd94d 100644 --- a/apps/remix-ide/src/assets/list.json +++ b/apps/remix-ide/src/assets/list.json @@ -8,7 +8,6 @@ "keccak256": "0x4a1c2a6a4896edefd3a4178a6c3ed8f1de625bd7c00dd7cc5781a9f36236e7db", "sha256": "0xee7ba01680ed3a1c1cda236189a51c1e6ff99f6dca602a580e5b16441772b50b", "urls": [ - "bzzr://83e99aa35ae67e71bf77040e5b4686aeb3558919f172b6c28213a4dcd8d79e91", "dweb:/ipfs/Qme9brfZS3XhbiRbbNDKhBpgFknyD92omMmYa7XSf56bJP" ] }, @@ -20,7 +19,6 @@ "keccak256": "0x07994ad8c59c498bf44ca8e84914e27b79be964d98a9556226db377819d67387", "sha256": "0xb83d2025e0bbc7f7f0dc9e47f5aa22eacb548b42c55add8f5f6822c105163500", "urls": [ - "bzzr://414fc715062f91971c8e0d9fbdf470dd24a8a35f4f96df0ba79980cdb0ae7eaa", "dweb:/ipfs/QmcBZ6Q2iHmrf9omvD7Jyy8kgrqyPmZFwvKWqvVDaxo1Ta" ] }, @@ -32,7 +30,6 @@ "keccak256": "0x4c358c2e90447ad9e7c1816b5be8edde1172f67dedf16755a6c7373ede46b245", "sha256": "0x9825565e1f199dbed6de01d27e10f83a9180300acab80f8469bf427e3cf92e96", "urls": [ - "bzzr://6ecbe30c4c8530b82d55ed6bec12e63efbab1cb16868b020d65399a8793599a6", "dweb:/ipfs/QmcEK5gvWNeHUtjsF3B6j5AXb9uNoG3aHbPrCMJDx7C8TM" ] }, @@ -44,7 +41,6 @@ "keccak256": "0xb67df5c37e8255e0de7918b6d3261f0f29e277d121bf5f414b66157a5b1070cd", "sha256": "0x67f8a94b60278cfb80d505c47a1a5e67ec2caf20167ef85f2bdf2a80a692bd1b", "urls": [ - "bzzr://7ba69a10a4585d0a36e5843603476061e8b02878331fa580d5c2509ef01ddaa6", "dweb:/ipfs/QmVumPvgQVFLZvDvQddcDGcdxjbVWTTzxoQvJAECBBZ6Ju" ] }, @@ -56,7 +52,6 @@ "keccak256": "0x62a65d0a951617f022524fc844ca11d90266f64e693343a2f41107183bf364c1", "sha256": "0x66da311056ec26c9c3fb501350ee22187c30e79c41bf2713eeff7d84479948c5", "urls": [ - "bzzr://ccf4f1e05d942946bcca929e9263c541b2749bf1faf6dc6c211b4bf700344d71", "dweb:/ipfs/QmXf2cKYJ26tXAU6A6tmUk2dn4tuX3CWNaXJVnGLuoe15y" ] }, @@ -68,7 +63,6 @@ "keccak256": "0x06afcb6dc23efb1482545b63c5e3983dded0c383ecc46c3ae319f7b868201e47", "sha256": "0x9e386edb2ee759ad65792f7d62c10ae7edf65c5b874a5451f1e695e586b69eea", "urls": [ - "bzzr://e93e97b9989cd59673bb1fd64a0f940e8729c3c40b819593b8590480cba24bea", "dweb:/ipfs/QmSJFaZhpXQ2EPF2koyiTNAiiuJRykv1Q8yubhkmBhvYyu" ] }, @@ -80,7 +74,6 @@ "keccak256": "0xcdf7c4d4c6b9331b755170fa927692019c94088f87f100d2c3c920bcc3740d0b", "sha256": "0x7184dae0b761485a5dce66b50075e17857c5b55fe3fa71fe22d4d5acc0839741", "urls": [ - "bzzr://e21d2bd58112fb165fa2c253504bf49ceca661ac1009d270a31cb996560cfa34", "dweb:/ipfs/QmYJuZgMbeMiotHAFNWEXdxjTa5yi7GaV4UkgBYABomFpj" ] }, @@ -92,7 +85,6 @@ "keccak256": "0x52ca702b8ed4b1e6d43d8a006b3d27f6dba611bac118c523711bfd209fb1cc9d", "sha256": "0x8db9466df3b91c52e3412cebd13176ea9fe16d3239d000828a081c34ce899337", "urls": [ - "bzzr://24dc5536a4771b2336fa304f3cd38d5203b6ab49c78a3057ec578991f3fcf265", "dweb:/ipfs/QmZZ9hNntBxJw3G7LGW3e8nXtnGxLnaSMM44K4BbLrkELs" ] }, @@ -104,7 +96,6 @@ "keccak256": "0xcd8a6a8b2626de75ef6ff73fb724f3ad5693a8902f86e88290f048b56182e7cc", "sha256": "0xd28a58fbc3ce56ff650d4daf3a1d8092e25cadf2a5b2769fd333b321dfc6a22d", "urls": [ - "bzzr://6a5d22e366c35f184d5203f3e062131018d8a4d09cf770a0720cfaf4d7b49705", "dweb:/ipfs/QmfHjv4nYKuv3yFpWZqBYyiYEYmkQGydQmFT5b6mJkFpWp" ] }, @@ -116,7 +107,6 @@ "keccak256": "0x43c96fc79cf288cecda12b23a17f30b1cf0427a19dc7c1c094bb461eabefe0df", "sha256": "0x9af176f42b63eaec838999a07e80484f92f41a0fc497adefa65baf88d8fbecaf", "urls": [ - "bzzr://fc0e644a61e43592754b66f8d911c91312538debb89da29ffda3d3fd81ff70d9", "dweb:/ipfs/Qmf7WYJJ8y6oHr4RQ7HC4tXgFPGvsnp3Qf6TrMBdK52Y5Z" ] }, @@ -128,7 +118,6 @@ "keccak256": "0xbe94ff397be2a951cbeb6c9c1a60ddf531d0ce76f45d51755386b6fa42cc2e2c", "sha256": "0x6ff1683eb76dc58c31043fea474be6da8535ec625d1cd8331a3daead84fd5564", "urls": [ - "bzzr://6e134aa89a00a18d930924fc2fad2aa434f80b6a71085ff2ab379e3672c812e7", "dweb:/ipfs/QmeBWFbK1aAxnB6muXWStZJWndrFvMJt4xfAzEJD7AqaY3" ] }, @@ -140,7 +129,6 @@ "keccak256": "0x178e51ad0c6a350ec4ed6fd07675dfd4d2581ee07b14b4954dd0b0f6d8633ca5", "sha256": "0xd70ca2f656a88a9be7a3f7d602f03b30149b3bda0d1057cfa3a3c5e3d6e07453", "urls": [ - "bzzr://6e43013ff973198d7fcc4a43910041f2f07d0099f4252737a2a2545443b11105", "dweb:/ipfs/QmarthW41sfbrdkMmCK6jicXFZDGgvALzdgzygtUqEauae" ] }, @@ -152,7 +140,6 @@ "keccak256": "0xb8c3f5654b323cea016c0cc1a4584069714cdf796489efe2496a13f8f83a0e63", "sha256": "0xdeb3c274f8b840d657e2f9b1dba602e89f58b1bf3fd7178c48c9033310a1f006", "urls": [ - "bzzr://084452a20ae520bba965ba0b863f3d6de0516d1f92ddb512a138fb787d841c55", "dweb:/ipfs/QmNUf8dTW9xANAvJmV1ho279AyWSCCvDp6bXet1QTcS2z5" ] }, @@ -164,7 +151,6 @@ "keccak256": "0x598af6fec02a6783d6a438a6bb0f7d3012716d003f7bf6c9ac5a4d2bc911941b", "sha256": "0xd522b307a014a32ed5815b05045c4396abc047e70c8a53c1e3ef92e14daa61c6", "urls": [ - "bzzr://cef259b97217a7526819155f6dd513768be5f8718324ec3a63c315071e2f7c70", "dweb:/ipfs/QmWGK9FbQiNWNeqysvCNCBw3q7cR1dzpnD1EKtNija2zyK" ] }, @@ -176,7 +162,6 @@ "keccak256": "0x93f7046d6e0ea2492ec5229936821b3b020dbe9eb2e1193953389293d64a190b", "sha256": "0x68ace74ca809ff47b09449d4054c77907d9412f14f6003d5475b60f4fec13709", "urls": [ - "bzzr://8943b9e6d4ec52bda1b8fbd65509168ba3388651a30cb495d5280cfbf35614d7", "dweb:/ipfs/Qmco9fGHM6mdaPVYqeDQ11GB3BrCbwRcEzM5XzHpAdAVWc" ] }, @@ -188,7 +173,6 @@ "keccak256": "0x7def3c264883cbe6ffbfc54894e48f9a0d2984ddbd1145eb898758d2a41d1559", "sha256": "0x54f3dc64f2ff5a5350410f6157a537d96fb4aeec90476e90a951ddfbd1fe4bca", "urls": [ - "bzzr://3428015c422bb223c3fe8c3a85615081981c47ead375564c16701b261948f0f1", "dweb:/ipfs/QmXyyuEWhexuez2rzAeFjunpiAhncD1AfcXitGNHxpRWha" ] }, @@ -200,7 +184,6 @@ "keccak256": "0x9ffa9ee890ec483580c0b4ed72270b16e92eb0b7a8a97fb00c257f8809aa4023", "sha256": "0x3e64525797e0b2d9abaeb022688cc02d63fc5820327e382fc6574a7de650dc97", "urls": [ - "bzzr://395f2d903c162ddc9b6ebd76db450ca6cb9cf8bb276c3d705aa462ae560d23ab", "dweb:/ipfs/QmW2rPbEtiVAbWJxtizzDqTjwpRpXCxkpSR696g9GxAYKT" ] }, @@ -212,7 +195,6 @@ "keccak256": "0xf0a6c32af3eaa2f8c6d9e6c8b90f3bac5e775c7f1c90a61c1e72b593fbb1528d", "sha256": "0x0e6d842e941cd8b76280c59f28f6d020af1afdea8e4be9d9da677ac5dbe860c6", "urls": [ - "bzzr://f44b067fda20d169321fd3616f68633fd7a4277b6340f42f74203f33dad4a472", "dweb:/ipfs/QmSwumWbYwYe4xLcqpi38VNtw7xCgbNaUkRhiZro9EnqLt" ] }, @@ -224,7 +206,6 @@ "keccak256": "0xeb8c3c474b5fa792f9b1b2ac6be945c32f835ccdc059deb562da4e99a031eab9", "sha256": "0x7fe677e8214d0486fa7164f797862fae0a0fefb7b72cf6ad8e728faa54f12b60", "urls": [ - "bzzr://37026d0ee2865c52fff8f6311b67b94f96dbb52ce8af3f84c3a9aeb47b12bf47", "dweb:/ipfs/QmbgEAtdmSoxH4cfRJXj7mVpKv9rT5Cq2YmXmAnjgsyqBC" ] }, @@ -236,7 +217,6 @@ "keccak256": "0xf824e695e8e66079b4b6063622c7dd80ed056d29969c8c3babac4fb572f3dfec", "sha256": "0x5bb50839ba5116bf31669f3de8dad72eaec298ba32a643be7d0dc2d1392c54d6", "urls": [ - "bzzr://d847bc8f5d43cd348346c5bb253269de36f00810c2e189ca64a4becdb9e9312f", "dweb:/ipfs/Qmf5RrLbWeMykvWJbCyyThCLQ9YVmU8uWagMdSp9nNzZMc" ] }, @@ -248,7 +228,6 @@ "keccak256": "0xa60eadfddbfda0daebb8a1b883b89d33b800cff7ce7e12458170ea17cd5ede58", "sha256": "0x8c2a69fbab9bdf503538028c697e09e51a7e699323ae7100c375cb35c415a819", "urls": [ - "bzzr://87e29a7298d49b8b52ed01d6146b05aa41c11a85d1b805dd48181ac2ed5e9b22", "dweb:/ipfs/QmSZEQEGuVJ7hudg8FzfDMXKVtn5AVGKaxbhSSDXwpX73K" ] }, @@ -260,7 +239,6 @@ "keccak256": "0x6c6dfa967526b7060634474ef730761711e5be662abf5ee02dc05985abfadec9", "sha256": "0x9852ad94048600cc5a1458b4a7ab625996844c809b314422693bdc81d953fcc0", "urls": [ - "bzzr://3edc1542fb719d3e08138b492a5db06333fb36055a434c3b071b2dcb69e54fbc", "dweb:/ipfs/QmcsCpg6kfp7Vea4y9qPtfDXcaQJbDidb65n3t9f2MFDpR" ] }, @@ -272,7 +250,6 @@ "keccak256": "0xd0f9a689670184ad874ca6a2cb40dfe57e9cf539d9330ca3f2501951478eace8", "sha256": "0x4197bb1cb0ea7e637ed8a0e7810f1bfe32c90d0151d6f423bb3dfeef9f6777c4", "urls": [ - "bzzr://1abbc4967f3c6c5124f8876abe521d508c71b0d0d64dc066c1e7a1bfe6ba596d", "dweb:/ipfs/QmY7UN95hdfFSD1jwFANegze5eLX8PgP5BfWFH1usTB8Sw" ] }, @@ -284,7 +261,6 @@ "keccak256": "0x50972c5b966188341d133aa58fbf895c54655d7bd733fb5ad58852e85f9f9444", "sha256": "0x73458d16a3e34fc7b489d2399b3680cccfc968d01abc9f1b61e438b6fb0c24a1", "urls": [ - "bzzr://9eab5a9c94bde3d90eb76a1189febd5ae4d6c7bbc63cc1d76e8871e14e6e9b89", "dweb:/ipfs/QmPUJNa1LYaThwLQsw6fF5DMYyDfEg57gmD5wCsazkLS8c" ] }, @@ -296,7 +272,6 @@ "keccak256": "0x74f927b4f520d8d31863996a100ebc7827f919c77f777f6d4d416c6e613a03c7", "sha256": "0x98c350cc41f873af84a78d1e24cbc8449045ee54923af0a39440e4d84600dc50", "urls": [ - "bzzr://a052dbfe589a766af66d85d4d797829241e867e0ead93fbf3d5e492c71b6434f", "dweb:/ipfs/QmZbo5YkSbcenWrUDjiCvUZdQe4UrNBw9vtx9nbgcMdRAs" ] }, @@ -308,7 +283,6 @@ "keccak256": "0x4cc2bb4c8894ad4349a88f330ba74d7ea643030d3f68037d1c94c370b6a25dd7", "sha256": "0xf83e8f7014ad6b8bc801dc3684c644e372673ed678425c35aea5d4b4fe37e922", "urls": [ - "bzzr://2aae73578e361285488b6319e8e7b27e23b2736eeee3953cd65f1207cd849395", "dweb:/ipfs/QmauztXLDUdwJitA4Uc9MQYCTttUcivR5foTZYgwt4aAeC" ] }, @@ -320,7 +294,6 @@ "keccak256": "0x92b9c5de10bd908527e9cfba3f04bbe637163b4a5313c5a69179ccddd5fa6685", "sha256": "0x782a999d3e1227c86854e7e29954ee856c6ae684124b9facf09f4f1724dc4e85", "urls": [ - "bzzr://fb1e9b951ce8abe575f8514bff6baa01417a988a399fab1dd27a252e7812d1bc", "dweb:/ipfs/QmUtwmzqqCftcubfyGwAefLBQ8ffp8EFhW7HCEQfhaviFs" ] }, @@ -332,7 +305,6 @@ "keccak256": "0xc9c60203789ef778b9104ae7a39e9090b3d1256b24983d49e40e7d1e3c3ed65d", "sha256": "0x264d0d25e31cb32f4369f82ba3ad0b6a84a8a1975b10bd738123ddf947618840", "urls": [ - "bzzr://335a6b94d26623dcaa4590ccd6d7529db1e153b65af3bf7def45fffaf9ee256a", "dweb:/ipfs/QmRd1uRbHRvpybQk5TQ11zyqmG4wQqHnefgvYdJ14V5D8x" ] }, @@ -344,7 +316,6 @@ "keccak256": "0x2921f518cf5a0627d96e07e8c3d2b5482dbbf14d7dc6bbb055481c46d98903f3", "sha256": "0xaf811843add541705ff65f0c20fd864bd0387116544524fa1830cf67a14af6c4", "urls": [ - "bzzr://31231abb33dc43d0478f03a4c8b15b161b172097c884307cf6cf64aeb83a6dc9", "dweb:/ipfs/QmYLhaeGbq3tFdCUC2pvtA8QdGnCbA8kn24z3C741k5TUE" ] }, @@ -356,7 +327,6 @@ "keccak256": "0x1980cf8a81c6bd2b371bf7d9145c819a7fb2d72e9aa462aaff0c10b4eccd595c", "sha256": "0x69cb1300b5f72eb128604507991d9ada97180d31afde7c59aa3fa3ae9ad5200d", "urls": [ - "bzzr://7f35988e2c32ed2f3f1885fb81ace357b1555964d23085940980cacd29023da6", "dweb:/ipfs/QmPfxPYsYysRR8HFkWr47FMQ8ardmfmtrmdYc2ogT9Gfp9" ] }, @@ -368,7 +338,6 @@ "keccak256": "0x3efd0585a3c00a1a2c62e590e22a69aa981d1b5148af2ebdbe1610dff93cea78", "sha256": "0xaff4ca62ac0b03cb4b9c50f8250e2e7307b5c75fefc9847f269bd05c20367148", "urls": [ - "bzzr://e30e085b875fc291e5ee46ed7c88c28ec8e8c540ad8c799b106c365a52df9e97", "dweb:/ipfs/QmaZrQSg8njYzFXH2PzwxHDLKxkBhKmYmLm43DJWnurPeJ" ] }, @@ -380,7 +349,6 @@ "keccak256": "0x9b7a39606c3c27a8619b3eb493efca512cbd26c5ab7fc95489564239aab32a50", "sha256": "0x24b4cbc28d68bde8455c14a46b55e4f292c3c295271e09991b2176a487cb4487", "urls": [ - "bzzr://3bccb9b8cee48b99b39f2f1296f7353bcd39c1ae61b1e19e5add7cedd0256cb2", "dweb:/ipfs/QmQmkd5FGiKKg8eRmo3L7Cn62nuV1M6GRDUGiq5bAx4AWx" ] }, @@ -392,7 +360,6 @@ "keccak256": "0x4a6244b03de1968f0a48800e75640921d62b7602d0301093e1c5c318d1effb36", "sha256": "0x91ed0cf4390f33174a4aaf49d1ce7cd9c72e28b95d2f9422314a29b2144b2042", "urls": [ - "bzzr://a5ab50564d82e6d55b462f4f85284d3fac294c78f2699b680544bc7efde2fb16", "dweb:/ipfs/QmRPchg1b5ofkLnLTPuunfSMKnxbXcZyzSR4NkyJAYUTrR" ] }, @@ -404,7 +371,6 @@ "keccak256": "0xf46cb35b3aefb9b3d59a1fb4c151eb23a0f0a05387b379b3e7fbed1c01c861df", "sha256": "0xaf812445476c101ae5ef92941c79eaebf57b39d455bdfb54a6a86b4ab6ca498c", "urls": [ - "bzzr://2e72b599d5a700cbd03d9f7ca082464b4823dbaabfc5e1031075b9631c005d35", "dweb:/ipfs/QmPYEmgLWDjk7kPGovojurz7fzdGv8Ti3H66nEzRzdiGwh" ] }, @@ -416,7 +382,6 @@ "keccak256": "0x66669372d2d958bfeb5129a387dbc3882a96e260fc12e2910a7eb148b8ea5dd6", "sha256": "0x9ffc04d0aee2c817ae6a897b1ba5aaca2bcd860416aaddfaa4de553fc1ad6e8e", "urls": [ - "bzzr://5f5dbf4ebe3be5dbe3e917a2de3908b3a9ed24207a6406a6e434e6f041e993c4", "dweb:/ipfs/QmYWL8Z3yXfCuhrprimdLhYFkjR74TjFHULxcABbUipetv" ] }, @@ -428,7 +393,6 @@ "keccak256": "0x27e324f75dd52eb180569e7a8865048253e5fcdaacc52e7c998ecaeb78dcdabd", "sha256": "0xfd7c4e652d5891c84d93b28c90b8ac58c9253d2a3677935883a337ee96087b8f", "urls": [ - "bzzr://764a91ca290bfa564d890f3c1a5a88067b04e96398f223576cbdd17bbc1faee2", "dweb:/ipfs/QmdEr1zJrD2UYawZzeE6zPuYiYaSHdpLtKeHYixHgRp9ko" ] }, @@ -440,7 +404,6 @@ "keccak256": "0x05c00863784c63220704197d8446ac1e277fe53c42b5264093960b7bb70b9792", "sha256": "0x25cfdd733e9c780ab85373268fde7bfa2e4b22093af57422ca3b586c7af7cd60", "urls": [ - "bzzr://18fc5b15154aef1640559c31bbd91ae267def62a2b86e434564184b6d3d283ce", "dweb:/ipfs/QmSUakgiWEffZ82RrN7hgLaemdqtLSCD7pfGAKxGhDUJxB" ] }, @@ -452,7 +415,6 @@ "keccak256": "0x7c967d9dc0fdca0db88a7cee22cf5886f65e8fa8b4a145eccd910fc81a1c949d", "sha256": "0x7d40c6325c0aa4635babdb8913626b7c4bac6a4f41e1c383de5f398e1fc98e1b", "urls": [ - "bzzr://c1f03890d82592751d779ea2da8a690e15b0ccc5667314bf634c1f16ff4ed322", "dweb:/ipfs/QmZcHLPfa2Dz8M3justKYyDmDnaNo4pseTgAeQbtJNYywe" ] }, @@ -464,7 +426,6 @@ "keccak256": "0x012ae146ebdd510b31c1e44a8d60071a66cdebc77f0e743a6ebc2fe68e67d297", "sha256": "0x566601442deff058d393359df59ed72b41e1f6a65b0aa371fab7f903c189b59d", "urls": [ - "bzzr://47c24a09321abb781b5dbc05fffae84ece6844e41a295847dd68ad69633f60a4", "dweb:/ipfs/Qmej9jEnSsD2LqGnL4jgbUvHTxTwiFiHqeMpqyuPLaX1uw" ] }, @@ -476,7 +437,6 @@ "keccak256": "0x4ba5500559a9ad03e4c1d3866ba9d915cdb5d7f2e326b4cb1fa0fe7bdf90dc27", "sha256": "0x89978dcef86244b8e7af95298abe26aaf4825df819d6c556e4323dc152c988ad", "urls": [ - "bzzr://c609e5725e607a4d853f33c8d46064e0ab11b489f7a585134cfca570e29f447a", "dweb:/ipfs/QmdgDj3bPSKU1xKMY8FRHj8E6z9BQefeuaVuF27RpvZMXJ" ] }, @@ -488,7 +448,6 @@ "keccak256": "0xcda83fe69ce2a319d0caa20c98b53ff36ea1886054ab3dab23fa80ede3dcdea0", "sha256": "0x1784f89fcfffccddaa94273a58e452682f61dea05d142406775f099c6ef5d61f", "urls": [ - "bzzr://5eacd00f2f132ea8fbb308baed9753579ade721a44e94067debb602e193b7ae2", "dweb:/ipfs/QmPA1Uf4iwkr2ouguzxxFepVxaRg36XFXxiwqYUuwafQzQ" ] }, @@ -500,7 +459,6 @@ "keccak256": "0x432dd5d662d88c2316b4df503f693ae9e6e8ed4216726db2fdb3e7f628523fe5", "sha256": "0x6e095eefc48dfc21fec18d0b63f229e929f881b5d6e8a999e1622c6b707a7f54", "urls": [ - "bzzr://1b3ef14eabfe47ff614c088337dfdf163c695612c193aeab9ac5a2af69d30334", "dweb:/ipfs/QmSgJ8Ru6vraz9CyCDPMifVxpckkoooVSBj9vYcQqG4wG4" ] }, @@ -512,7 +470,6 @@ "keccak256": "0x98e1027fbf3acb279f740c3b38df69d79ad3f2e6171414508d50604dc2dfc13e", "sha256": "0x43b85bc9941814b018065da5c6c8d40e2af49264d0d1f06bdefbfbe628e65ff8", "urls": [ - "bzzr://b6283a40a65b321a0e88f61594fc8bed00fb21a53c7ac1bf5ae421706a372d01", "dweb:/ipfs/QmeXatGB9MdWA2NBLSNQbcKvuZpa4Sxem51vCrqyQGfXnU" ] }, @@ -524,7 +481,6 @@ "keccak256": "0x6f9251f86fd798a3ae25688307ffc7a9984dcf0d809a1aef54f5c68b6cf9fb6a", "sha256": "0x0d34e4ed048bbf67daacdf36cd5ce0f553a32962967b52edab6afccaa071878b", "urls": [ - "bzzr://e866e6bdb31fea0646b44a8e57acc9505932ffe813028ce1330ca49fe3edc4d0", "dweb:/ipfs/Qmdx3AHUB8bN6ZZs1XsTV3Gz9FV3gAB7x7JbYeUsn43Azu" ] }, @@ -536,7 +492,6 @@ "keccak256": "0x6abf17bdb1b934d072739e0e083ecfd579c523d200d45184b8d3987924ca0454", "sha256": "0xa09c9cc2672678d461dc71100600bb58802db87be4de9424769241712ccbec03", "urls": [ - "bzzr://9b51780766b138ee36e2796cee7bdd4cb494da5d925c36cc6101202818d37e42", "dweb:/ipfs/QmQjodGav6KhMDjuoyJ1ag8osgKLBsFC1E9LmaGP7qCRZ2" ] }, @@ -548,7 +503,6 @@ "keccak256": "0x936e6bfbf4ea9ac32997adb893b0aeecd050cfef8b475f297dca1add0a1ff934", "sha256": "0x7fd1d3f1fddc615e117f7fb7586acabd60c649c390cf110c8fdc5ce159fa5734", "urls": [ - "bzzr://949bfec63a83091f5d08d6d8df36fa34e674d75206e8a6476cc0ae18f3c57bb4", "dweb:/ipfs/QmNrRJwVHaJSZ3aAQZWZKjV9o8BqWKFP3RPYL6hKU65PAE" ] }, @@ -560,7 +514,6 @@ "keccak256": "0xea559c55bf7046cb48378fe9b43eaab6e345700aa22d701fcf946a42ec6b1008", "sha256": "0xf22c63511a85230f7640ff5a77433db643d8d32be8b7c7f1dc24c1301a5158e9", "urls": [ - "bzzr://471b0435c47963835dd0f70d67ec069fab5daadbe6c8bf760d2e50adfb839461", "dweb:/ipfs/QmTQPQb6br2VEzKTiXBEE6z69xRXEk24xi2R2gn8EsvGD9" ] }, @@ -572,7 +525,6 @@ "keccak256": "0xb2657b5ce7a9b405a65e4a88845a51216cd7371e8f84861eef9cb0cb20d78081", "sha256": "0x3628fdefd6971ea9cc16acbf91e5f6d6cfb2079181784b47e4d24f4c5d92e4e4", "urls": [ - "bzzr://7bc2dc95d81092991a4122b45aad03f9cc62bc98fa455f03fc9286445ef9de8e", "dweb:/ipfs/QmYWAkYAJo59kc5dHWaLuQqEm7xusESdu5meDzjpxnyXKt" ] }, @@ -584,7 +536,6 @@ "keccak256": "0x7dc96455c864b49abc7dd5f38ba6a47904709ad132ea36babbfce98d42e962e6", "sha256": "0x25f564cbecc5bfe95d6d358e0e7543c31ece0ab1332c555ff323ca163711bd2b", "urls": [ - "bzzr://f61230aa01565c8c24aa2ed50eec7dfd26195be35f5bbe4445c6a3efceaa4b7d", "dweb:/ipfs/QmaLUM18c7ecA911ig5u2HY6fAu4AiUbhJpnZwwCMc9cWi" ] }, @@ -596,7 +547,6 @@ "keccak256": "0x39ae8b2f3ba05ed7d4a7c16f0a9f4f5118180a209379cfc9bdd2d4fb5d015dff", "sha256": "0xf89514dedd8cfb3c4d351580ff80b8444acde702f8be0e5fad710fe6e906c687", "urls": [ - "bzzr://1d6deff5623d883b8d0b3a3a5539e4604925ce4c1677defb86e0e37838ea70c5", "dweb:/ipfs/Qmd9JfFpUXsUQrJad1u2QDuMxBMeVrcG8mrpfJVV9jiBXB" ] }, @@ -608,7 +558,6 @@ "keccak256": "0x435820544c2598d4ffbfb6f11003364c883a0766c8ac2a03215dd73022b34679", "sha256": "0xa4fd5bb021259cdde001b03dac0e66353a3b066b47eb2476acb58b2610a224ca", "urls": [ - "bzzr://62ef2a9bf7dbb8fd596b7c6ca6848d9b1a6c8562d10239659f0a56ee27c110ce", "dweb:/ipfs/QmTxzbPN4HwcK5YX7n3PNkb1BzKFiRwStsmBfgC9VwrtFt" ] }, @@ -620,7 +569,6 @@ "keccak256": "0x6262768243c1ceaf91418e52dc6f52d2ce94d19c6e1065d54499b7bc4d6e14dc", "sha256": "0xf8f83757e73f33f44389d1fa72d013fb266454a8dd9bb6897c7776f8fc3b0231", "urls": [ - "bzzr://ed91c1114615572c10a34f0ab28a3a159d2d433fabbcec9eae7253c25ecac8b4", "dweb:/ipfs/QmRUoBQeA5zpun1NK7BvBhQk6pTT4uZw7Jn2wZnWQETH9W" ] }, @@ -632,7 +580,6 @@ "keccak256": "0x3c9cfccc78bf352f4c7901d7af76757bd228f93af2634af4cd16b4916c13e44e", "sha256": "0x09f6098026622c5c334c7798c3ad2b8f7c0ebc62f87846c7d5e7e725c3d1cbc2", "urls": [ - "bzzr://ab23bd0e01952ee485f0426c9c4e47fcf6a508bc4919e83be31c0f9ea6e396ca", "dweb:/ipfs/QmRj2pxXxvmJ96i57maVjLMfs4DUtCuptM8vSVvvDweJ74" ] }, @@ -644,7 +591,6 @@ "keccak256": "0xb463b6a61fc027247655a32cbfd50bf543eafa3a6b42ceacdda7293e3ada8866", "sha256": "0xb795f1b20f065a0aee492c24071fc1efa1633c3caab77cff20278a9ae822f04e", "urls": [ - "bzzr://c82fea785ae31fb4847f5640e6305edc05d1a5b0b47552f60325c25cce280f75", "dweb:/ipfs/QmShUrNZf1dZFjziorJYE8fMGNUSMFsbaR3ipSvsCMvExM" ] }, @@ -656,7 +602,6 @@ "keccak256": "0x537cefc0579dd9631ec952cae951b3df0a50a3e557b5638107a67275f7aacc07", "sha256": "0x3e8b01cbd194e40971b41017ada7c8b2fa941b0458cb701bdfb6a82257ca971b", "urls": [ - "bzzr://130bff47eed9546c6a4d019c6281896186cf2368b766b16bc49b3d489b6cdb92", "dweb:/ipfs/Qmdq9AfwdmKfEGP8u7H9E4VYrKLVinRZPZD1EWRnXSn1oe" ] }, @@ -668,7 +613,6 @@ "keccak256": "0xa2d4d3ebe5d52bfa7ddf1a1fcd9bfed81eaa8678e6a1dd5a1c84954dd064422c", "sha256": "0xf1724fd46b7a353561b3f8d473b0dc8c855b6d84b5af559d7e3326ac79b9d758", "urls": [ - "bzzr://2c5fff6b816edb78adb2220f175591c9f4f6d38cfd27a83afb1849191cf9a524", "dweb:/ipfs/Qmad6iesaR5FQ45RRtMrt2Fa1EYDuq1oGoMJJB6beMHESn" ] }, @@ -680,7 +624,6 @@ "keccak256": "0x620163da7ee7b2622c9ee48b06110a52739f633189555148a3b5ecf767e60cfb", "sha256": "0xfa27ce9d23bddaa76a4aefbafa48e48affde9a1ee7c8a5e8784cf8d4c390f655", "urls": [ - "bzzr://823b4efe3ca2964d660348214fd1a44579e13e1e8ce69a81f447372a11d60316", "dweb:/ipfs/QmUinsRZvs2zFNG6FMWy7ngTYUnZccXq7MRtgpj1dPfxu4" ] }, @@ -692,7 +635,6 @@ "keccak256": "0xf0abd02c495a0b4c5c9a7ff20de8b932e11fc3066d0b754422035ecd96fcdbbc", "sha256": "0x9778e4a7667d5fd7632caf3ef3791d390a7cc217f94f96e919a31e3be332386a", "urls": [ - "bzzr://9f9244a3605543a67f5ff35f21e3d6d3331a6e1361f09b271c37f396b5b89bd5", "dweb:/ipfs/QmXyjgFNMyFD4fdf8wt9uvUU92MGdDVGmcPdMZhNEo1g8N" ] }, @@ -704,7 +646,6 @@ "keccak256": "0xe1412d909a0dae79b13c0066b9bf08831c522daec00b273bbc19a799af213d6a", "sha256": "0x3e1956c550ca48e289044c7c0bd892403081b4b5e17e77ce707c815ce6c4228f", "urls": [ - "bzzr://b69ab6704a1e42fddb326e91f331e35fdf071b158e8754e2c887c0e607aee7b0", "dweb:/ipfs/QmTs8PnAGr1ijXtWvMjoWraefAtVv2Y5ZnwkArz6NqJ93w" ] }, @@ -716,7 +657,6 @@ "keccak256": "0x0c7a4386781683c327fde95363535f377941e14feffad5bb1134c7aa7eba726f", "sha256": "0xe7e1be3d0a67469f6a37cd676a22314c4faa8a22ff9d5ebde11302db754453eb", "urls": [ - "bzzr://65dc33e3d9ef94defff1b24e66f093d9d15a92c59778c8eb26e76fd8b64bd3da", "dweb:/ipfs/QmQFhTptWdDzhemjGpa7Q65HKWGphs4nKKS13nzkcVE8pM" ] }, @@ -728,7 +668,6 @@ "keccak256": "0x3502cf7933fbce9f1fe1d87a83d5b9df12eee36c03997c3b9821493ce03fcf3e", "sha256": "0x7fcc983c5149840a47b946fc51fc14f1c21cda07c01d650e4a1f814319cb1423", "urls": [ - "bzzr://617dff84fd7dc06b476f93a95c015a561662d9ff1d3356ac6a3e5f5b09a636f0", "dweb:/ipfs/Qmdw9c3usmqgdV2w4JoNWJqscHzscKNVWsWtos1engJa1o" ] }, @@ -740,7 +679,6 @@ "keccak256": "0x0c80a0bf9e17700249a04a80d7729ccb012a55a82cb0f9e412fa32cc14b09c2b", "sha256": "0xdfa3f2bb4589bdc9c054292173c82ee70e65af8d1971598f6e13b9b79ba94185", "urls": [ - "bzzr://a45264806fb74fd38c19704070c83053972270b63bf7b09ddff3c3e15cd1baa0", "dweb:/ipfs/QmTNWY4vkVLgtNdfGXyH6CY8URmzr33VzMJNN37z5dsAgu" ] }, @@ -752,7 +690,6 @@ "keccak256": "0xcf099e7057d6c3d5acac1f4e349798ad5a581b6cb7ffcebdf5b37b86eac4872d", "sha256": "0xcaf4b1f3e01fcf946aad2d22bbe046b9dc4fd50049a05c3458ff239e2c93a785", "urls": [ - "bzzr://2f8ec45d2d7298ab1fa49f3568ada6c6e030c7dd7f490a1505ed9d4713d86dc8", "dweb:/ipfs/QmQMH2o7Nz3DaQ31hNYyHVAgejqTyZouvA35Zzzwe2UBPt" ] }, @@ -764,7 +701,6 @@ "keccak256": "0x300330ecd127756b824aa13e843cb1f43c473cb22eaf3750d5fb9c99279af8c3", "sha256": "0x2b55ed5fec4d9625b6c7b3ab1abd2b7fb7dd2a9c68543bf0323db2c7e2d55af2", "urls": [ - "bzzr://16c5f09109c793db99fe35f037c6092b061bd39260ee7a677c8a97f18c955ab1", "dweb:/ipfs/QmTLs5MuLEWXQkths41HiACoXDiH8zxyqBHGFDRSzVE5CS" ] }, @@ -776,7 +712,6 @@ "keccak256": "0xfe223dd264421f9b96c3dd3c835a3d0d4d9cfa4c61f75ca0761860c9ae8906ca", "sha256": "0x2ee1c6434a32a40b137ac28be12ceeba64701bfad5e80239690803d9c139908e", "urls": [ - "bzzr://d67cf500345ceca523e9bbe55dab9399e27321fd9005704a5b16bab82185260c", "dweb:/ipfs/Qmf5fpJmeHdwgmSjQPqdu25XtA9akTotakkNmrh4axgo8N" ] }, @@ -788,7 +723,6 @@ "keccak256": "0xc68517effed7163db0c7f4559931a4c5530fe6f2a8a20596361640d9d7eff655", "sha256": "0xb94e69dfb056b3e26080f805ab43b668afbc0ac70bf124bfb7391ecfc0172ad2", "urls": [ - "bzzr://523852f3e01b02ce947771e0279ffb6154d12700f809ba3606d908ba6271431c", "dweb:/ipfs/QmWjG6PLzF5M6kxkHujhEMg5znQCgf2m1cM1UptKA719Hy" ] }, @@ -800,7 +734,6 @@ "keccak256": "0x08dd57a5cf5fd59accbd5b601909ffa22d28da756b5367c29b523ff17bbc2f99", "sha256": "0xc596765f9b3dce486cf596ea35676f37124d54f3ada0fcbc02f094c392066a59", "urls": [ - "bzzr://7047ade6879aab4c825594dab0914b8ec673bb907eecc6dfbd68f63086e5a36e", "dweb:/ipfs/QmYh5C2rgDAx452f7HyHA8soLhnoL1GeeNNEWEuw9jKY8w" ] }, @@ -812,7 +745,6 @@ "keccak256": "0x84a0e9282047512eeec499d55c83dbb6981430b08692d81d6c09730bb18e6cd8", "sha256": "0xf77f141e5fed9594b28342e2c630ac6d48f2a724e4383a457881acd7fa62b1cf", "urls": [ - "bzzr://da8c5ea3f2ecd33d3f83ac2c276871f4ee41370fb55ae62c6c29835c9376bdec", "dweb:/ipfs/QmQ6W5VedQpZAwuGTtp1BhmNkvVheLnJq4xwN9Qmt9bAbH" ] }, @@ -824,7 +756,6 @@ "keccak256": "0xd0c15275c5b0d03871332719def9b0f17e8860c7db60e0e71f18b971458a7391", "sha256": "0x015e83fb0b72ccdafb0c217961b21a0321adb2d3f2ad992f5e79635c2086e6dd", "urls": [ - "bzzr://629ae5ad84c45c248144b5eec7827a9cd5b2f2779ef84ab251c8cd876347a098", "dweb:/ipfs/QmdfVfa2mhyosaJVeV7rbfnvQ95GTHPeRPzmvxcds7RYej" ] }, @@ -836,7 +767,6 @@ "keccak256": "0x51777116af58223a41aa3016d0bf733bbb0f78ad9ba4bcc36487eba175f65015", "sha256": "0xb5cedfa8de5f9421fbdaccf9fd5038652c2632344b3b68e5278de81e9aeac210", "urls": [ - "bzzr://c7d43da1bc5529d2cc311e00579c36dcff258c42b8ed240b6c4e97bd85492a64", "dweb:/ipfs/QmWbNMzJryhiZmyifLDQteGPwN4aTgXQB6barBvXYVw975" ] }, @@ -848,7 +778,6 @@ "keccak256": "0x7e0bca960d11fb095798ff65d029436f23358ac060b25a0938acfcb4652da2ec", "sha256": "0x4a14c7bcaf0d988a829db2174b8f7731898aa8633216490603ad74bff64eca3c", "urls": [ - "bzzr://7f33fe204160253c7ec23cb0ac83224bde3aca9f91a7a686cb67d99248c5fbb6", "dweb:/ipfs/QmPYDf4qYtZLNEAicW7hcvpUJ69FoHiXmUypipDpTKo9hU" ] }, @@ -860,7 +789,6 @@ "keccak256": "0x6d6d75b033717aae0a728e527005d8d2cc7dbd0a835c8873c630a2a9689a2976", "sha256": "0x4af595f976235d33a22ffe223e9e3210b4ca510f6a93f153b3daed60f2b11fbc", "urls": [ - "bzzr://d501ee8c460db75379b5716bcb5ae10e3e32625d6c9b08e319822a110f178906", "dweb:/ipfs/QmNWkyirqXy3gDHNXpPuVUbExMGWjMqPR82Xzs64RzgQzy" ] }, @@ -872,7 +800,6 @@ "keccak256": "0x070e41c7f761ff1a8383a2c0d54c22aab0f115ca8c3790ecea27d6dde11611ca", "sha256": "0x06a671efd8865a6ecc0ad648076177b35abcd06a7059888ea65111272e33a57f", "urls": [ - "bzzr://e4f8176cdb3a0f3ba0b7061079dd9d3495f6a2288bd724780337cacd96515148", "dweb:/ipfs/QmQre11ZPgWSx79Jzca1tkTYFyMbXz8H4kcrhfpWSj4qs8" ] }, @@ -884,7 +811,6 @@ "keccak256": "0x8d6be9e58c33d265b5a8b1132a27fce126067419f3f4f15d3ef6b7147593b61d", "sha256": "0x663ba99f7c7ee907f0f03227502d48a78256c3c292ace3b79a5d3eb510665306", "urls": [ - "bzzr://0bdbad1bdcc3a9775f16f20a35556be4baa0e6c9a9b9d820e8e2cdea80667c6a", "dweb:/ipfs/QmYv3Rsi9pL6PZAtc4XLHezPqti8yCRGEdDBqzEsQv57GV" ] }, @@ -896,7 +822,6 @@ "keccak256": "0x56cb2f6978bf1213982ef217ee76b39dc97b6e66c92a7be7a1b44079c0236e5c", "sha256": "0x534b7d4079d13bb4cd10b7559dc105c2adec625df4105f20ebce47e6da60bfda", "urls": [ - "bzzr://7543aa16521848b06a1359afcb9dbd7be1dd09a36f4ca53edd3ed3a512a475e9", "dweb:/ipfs/QmZaSrn3TPvPVoShtjSonQLFd3BV6RdgRMqw8GTzhnKYpm" ] }, @@ -908,7 +833,6 @@ "keccak256": "0xbc470ab3442e78bb4d3f16c01c39b2f160f4f34eb4373efed11c234e1c7f6ca0", "sha256": "0x5b25f987aae32a0275fdc6c1be36cc47cf126024a04dafd8e4be39a1d1d1422c", "urls": [ - "bzzr://83bf64f11a09845a6eb732da08283a58f877e9227190f489c9852f790c81d0c4", "dweb:/ipfs/QmfFq3MvisCSUJy8N8EVsBribgPbdpTZb7tQ2eHYw7dwag" ] }, @@ -920,7 +844,6 @@ "keccak256": "0x3820aae0de50f10f62819d65f0b5a236ccffed11ab465a3295a5408fa47e24f5", "sha256": "0x5eaee3240a06891abf5ac70c75caf9a0c33ebe9a2736abdaa22a337f86c22933", "urls": [ - "bzzr://5124a21890d6b0ae70bfd031f741d7edc74cff70a26ca74750d446b15a8efb06", "dweb:/ipfs/QmcsfYpEWbPXfVptzi1YvGokxi2FYCUzUr8rQYJCc5fEiB" ] }, @@ -932,7 +855,6 @@ "keccak256": "0x798b23086ce1339e3d47b3648a1f3ae40561e2c9f66ffcc98e71fc14a7f77584", "sha256": "0x64117d4b13bfc5bc6e5f80823519b140e753a0c09e99edd756772dc3029bc1f8", "urls": [ - "bzzr://0fd1c8db6338b2143ab0e49a33edaa133108ba77f1238408018b5b2a0ecdeb62", "dweb:/ipfs/QmNQTFQmfnjxnDmbguVSnZ5DiHGFQHCsffccW5c2DMcSsT" ] }, @@ -944,7 +866,6 @@ "keccak256": "0xdd4ae95607655404b769fab5f949ac95c6a1a506330f512aef0d92974c390431", "sha256": "0xc2c4738c96ad329cbb9baea615ed50ffb5a53d93fed8e00785e47242581d3c60", "urls": [ - "bzzr://38f396377d5a5a60d0b9d8c4dc1343485517ff31bcd281d531f98534dc79d811", "dweb:/ipfs/QmVdW2ygaT2vecoSUog3HUn8hZqXU4XXQZvuRSdpV6DJPL" ] }, @@ -956,7 +877,6 @@ "keccak256": "0x9afa714859d1c8f8ed2fded497b83a7a420474282494d25d4c9f592667729f21", "sha256": "0x387343bcf8f2b77fe4cdcddcaa84361fabf8e1c3508f874fbbcbb9c313542f56", "urls": [ - "bzzr://ade0fd040981c4e8c7adfe366296e452687c7bb6421de8546a0678be4add016a", "dweb:/ipfs/Qma9V9dJwmkim98H6DQX4f7RH395vsUuqHCDxbKetcbj18" ] }, @@ -968,7 +888,6 @@ "keccak256": "0xb0f7f19a8590e5c0aaf779019c1deaafed170d8c26bec9bfd782d212e097619e", "sha256": "0x7c3b3d0066fd381283b1d8d9a86153b2ddb5c01da14a1ae015c05cfa484e81b6", "urls": [ - "bzzr://fa438d41ed52c9e0cca556efee61486fc77e60df06081921abb0a0f19b602d35", "dweb:/ipfs/QmcM1TcDB4ta8ttNLWZ4d24M4Qs35rc91sQkdNmJMNbuvV" ] }, @@ -980,7 +899,6 @@ "keccak256": "0x4f6cdc0f25e734bcb977bb6a3e22fa41d8a82cbd5f220a2e4238c2d233526d1a", "sha256": "0x71135e459d691767ce3453bab4564ef4a640dd50182da36517cbc1f96c1d4c7c", "urls": [ - "bzzr://ac5baefba32f4779a03d1207d9f1ed69365280c702fd73002a729b7a3d52c425", "dweb:/ipfs/QmPiBrYZxxpNZPQ98GNyL7Xa1F9Dq7uHtdt9ESwhPNkHhc" ] }, @@ -992,7 +910,6 @@ "keccak256": "0x331f4bc6de3d44d87b68629e83f711105325b482da7e9ca9bdbdd01371fee438", "sha256": "0x27b2820ef93805a65c76b7945a49432582d306fd17a28985709a51e6403677c2", "urls": [ - "bzzr://af0d70945c85865298732ac2bfdacdf2774fb4daf793c94fafe135b839a60a5c", "dweb:/ipfs/QmWzBJ8gdccvRSSB5YsMKiF2qt3RFmAP2X25QEWqqQnR4y" ] }, @@ -1004,7 +921,6 @@ "keccak256": "0x3f2be218cf4545b4d2e380417c6da1e008fdc4255ab38c9ee12f64c0e3f55ea9", "sha256": "0x617828e63be485c7cc2dbcbdd5a22b582b40fafaa41016ad595637b83c90656c", "urls": [ - "bzzr://fe8da5b2531d31e4b67acdce09c81eccba1100550a7222722152ffdb16ea85ef", "dweb:/ipfs/QmTedx1wBKSUaLatuqXYngjfKQLD2cGqPKjdLYCnbMYwiz" ] }, @@ -1016,7 +932,6 @@ "keccak256": "0x9a8fa4183ef95496045189b80dfb39f745db89a903b398e40131f500953e5d57", "sha256": "0xd82bdcba2c386d60b33aca148a9cfdf097551f68c5e45d8ec01aebbafacf5075", "urls": [ - "bzzr://338117c2130fcb6bce3006330712b6e7ee99875b56ce4bb6182312f76e4a6bac", "dweb:/ipfs/QmcKzrqRBy7PeFQxzJDs1AZZzNHKaKbJces6zUDysXZofJ" ] }, @@ -1028,7 +943,6 @@ "keccak256": "0x6be35b86f5656c06ae897ef311c28da375bdcbded68c4a81e124f2cb36adf830", "sha256": "0xe0b74e0a16e783a35169f74d1a615ecb48d07c30f97346b83cd587949268681e", "urls": [ - "bzzr://434c17a0cc3bf371e5b9baa7f804b37ffd2dc141a98c59b2ba6021fc419a39c0", "dweb:/ipfs/QmPnhNtzrEBeWWQMXdAByQTDPoKXXV9NFXLk3YL4QbghMP" ] }, @@ -1040,7 +954,6 @@ "keccak256": "0x3a420fa9963772eee5b9221ebb8cf9548eea8f88b09537390960ea9b440f333c", "sha256": "0x5c509f760dc110a695c8b39bbc21e08c17dee431aa14d606f59e623d7c3cc657", "urls": [ - "bzzr://fdc05062e4c7ec85ed18ab17b6f04f3274a4b7caf0be483eb86007d708825fb0", "dweb:/ipfs/QmciAxUX2kfuoxitmMdkKSfWn2SfxQdieLRa3S5S2munot" ] }, @@ -1052,7 +965,6 @@ "keccak256": "0x370efd28e2d28b6d0ba55e20d8994f3d286c3772552ed63586b5fe157c0d3c57", "sha256": "0x45bea352b41d04039e19439962ddef1d3e10cf2bc9526feba39f2cc79e3c5a17", "urls": [ - "bzzr://5e66947c220c91a6cd39bc22965dcf861015b8613a6e09aa7fb7dc10f367b5d7", "dweb:/ipfs/QmXLgy6oexvCBWYS5pTpJWohsDNGqgdNFLRKX7JrE3NxYt" ] }, @@ -1064,7 +976,6 @@ "keccak256": "0x907eeba6e6e0d6977ac5a8f50e4dd2762539ca827ceab1afb1f5a4f0f3ce3e0c", "sha256": "0x92d283c545395b91a656fa1ec94d567a464bca55aebcdbb99debf42b43026845", "urls": [ - "bzzr://63ec828814e2b57db2a7a146061a96cc39797ba39a0063a7b664421a48f21c00", "dweb:/ipfs/Qma6o4e57YtWj8cQLQs12r2Enx9qmRA7VHtupCauXjYTAk" ] }, @@ -1076,7 +987,6 @@ "keccak256": "0x743aaafac24d9740a0b71215f55a132f89336a662487944767ca4bfd66400769", "sha256": "0x9c681b165c8647867589c0a5ecdc8692637a935928a2b1bbea2ff4a1f4976985", "urls": [ - "bzzr://6e70fe6bfe8c3fc63f8a3eba733731aab129e6e58828b78058e53bb50440709b", "dweb:/ipfs/QmZy5ho8W943FMGwppXZFS1WFrVwV3UXhUUwcD7oH5vrYe" ] }, @@ -1088,7 +998,6 @@ "keccak256": "0x1b6ceeabad21bbb2011ba13373160f7c4d46c11371a354243ee1be07159345f3", "sha256": "0x11b054b55273ec55f6ab3f445eb0eb2c83a23fed43d10079d34ac3eabe6ed8b1", "urls": [ - "bzzr://c604bdd6384bf73594cd0e5cfbe979048191549ebc88e70996346f3b744c0680", "dweb:/ipfs/QmW2SQbEhiz3n2qV5iL8WBgzapv6cXjkLStvTMpCZhvr2x" ] }, @@ -1100,7 +1009,6 @@ "keccak256": "0x4639103a26b2f669bd3ecc22b1a1665819f2a2956f917ab91380bd9565dbcd01", "sha256": "0xf8c9554471ff2db3843167dffb7a503293b5dc728c8305b044ef9fd37d626ca7", "urls": [ - "bzzr://d201e60bd46193b11382988a854132b9e7fb0e1574cc766cb7f9efe8e44a680c", "dweb:/ipfs/QmdduJxmPXungjJk2FBDw1bdDQ6ucHxYGLXRMBJqMFW7h9" ] } diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx index 687d2cfd50..0f1e9016ff 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx @@ -1,8 +1,8 @@ import React, {useEffect, useState} from 'react' // eslint-disable-line -import {FormattedMessage} from 'react-intl' -import {PluginRecord} from '../types' +import { FormattedMessage } from 'react-intl' +import { PluginRecord } from '../types' import './panel.css' -import {CustomTooltip, RenderIf, RenderIfNot} from '@remix-ui/helper' +import { CustomTooltip, RenderIf, RenderIfNot } from '@remix-ui/helper' export interface RemixPanelProps { plugins: Record, diff --git a/libs/remix-ui/run-tab/src/lib/actions/events.ts b/libs/remix-ui/run-tab/src/lib/actions/events.ts index ee274fc55b..b5b4037eb2 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/events.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/events.ts @@ -18,7 +18,7 @@ export const setEventsDispatch = (reducerDispatch: React.Dispatch) => { dispatch = reducerDispatch } -export const setupEvents = (plugin: RunTab, dispatch: React.Dispatch) => { +export const setupEvents = (plugin: RunTab) => { // This maintains current network state and update the pinned contracts list, // only when there is a change in provider or in chain id for same provider // as 'networkStatus' is triggered in each 10 seconds diff --git a/libs/remix-ui/run-tab/src/lib/actions/index.ts b/libs/remix-ui/run-tab/src/lib/actions/index.ts index ff39737ced..5387887f67 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/index.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/index.ts @@ -27,7 +27,7 @@ export const initRunTab = (udapp: RunTab, resetEventsAndAccounts: boolean) => as dispatch = reducerDispatch setEventsDispatch(reducerDispatch) if (resetEventsAndAccounts) { - setupEvents(plugin) + setupEvents(plugin) resetAndInit(plugin) } } diff --git a/libs/remix-ui/run-tab/src/lib/run-tab.tsx b/libs/remix-ui/run-tab/src/lib/run-tab.tsx index ae569274ce..26d87b7fc0 100644 --- a/libs/remix-ui/run-tab/src/lib/run-tab.tsx +++ b/libs/remix-ui/run-tab/src/lib/run-tab.tsx @@ -78,7 +78,7 @@ export function RunTabUI(props: RunTabProps) { initialState.selectExEnv = plugin.blockchain.getProvider() const [runTab, dispatch] = useReducer(runTabReducer, initialState) - const REACT_API = {runTab} + const REACT_API = { runTab } const currentfile = plugin.config.get('currentFile') useEffect(() => { From 4ccbd68fee85eeebd6003aaba91471c1740b961d Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 15 May 2024 13:36:22 +0100 Subject: [PATCH 55/69] Remove unused comments --- libs/remix-ui/app/src/lib/remix-app/remix-app.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index d458271243..d2ae9e5bb9 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -207,9 +207,6 @@ const RemixApp = (props: IRemixAppUi) => { >
- {/* }> -
-
*/}
{props.app.pinnedPanel.render()} From b41d70f3e32b0b65287bb0cab62cf419bcddba58 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 15 May 2024 14:57:38 +0100 Subject: [PATCH 56/69] Hide pinned panel if plugin is deactivated --- apps/remix-ide/src/app/components/pinned-panel.tsx | 8 +++++++- apps/remix-ide/src/app/components/side-panel.tsx | 9 +++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/remix-ide/src/app/components/pinned-panel.tsx b/apps/remix-ide/src/app/components/pinned-panel.tsx index b9d9d5b416..9bb87fabff 100644 --- a/apps/remix-ide/src/app/components/pinned-panel.tsx +++ b/apps/remix-ide/src/app/components/pinned-panel.tsx @@ -25,12 +25,18 @@ export class PinnedPanel extends AbstractPanel { onActivation() { this.renderComponent() + this.on('sidePanel', 'pluginDisabled', (name) => { + if (this.plugins[name] && this.plugins[name].active) { + this.emit('unPinnedPlugin', name) + this.events.emit('unPinnedPlugin', name) + } + }) } async pinView (profile, view) { const activePlugin = this.currentFocus() - if (activePlugin === profile.name) throw new Error(`Plugin ${profile.name} already pinned`) + if (activePlugin === profile.name) throw new Error(`Plugin ${profile.name} already pinned`) if (activePlugin) { await this.call('sidePanel', 'unPinView', this.plugins[activePlugin].profile, this.plugins[activePlugin].view) this.remove(activePlugin) diff --git a/apps/remix-ide/src/app/components/side-panel.tsx b/apps/remix-ide/src/app/components/side-panel.tsx index 5a3f79851e..3e62f8bea1 100644 --- a/apps/remix-ide/src/app/components/side-panel.tsx +++ b/apps/remix-ide/src/app/components/side-panel.tsx @@ -58,10 +58,8 @@ export class SidePanel extends AbstractPanel { } removeView(profile) { - if (this.plugins[profile.name].active) this.call('menuicons', 'select', 'filePanel') + if (this.plugins[profile.name] && this.plugins[profile.name].active) this.call('menuicons', 'select', 'filePanel') super.removeView(profile) - this.emit('pluginDisabled', profile.name) - this.call('menuicons', 'unlinkContent', profile) this.renderComponent() } @@ -73,7 +71,10 @@ export class SidePanel extends AbstractPanel { async pinView (profile) { await this.call('pinnedPanel', 'pinView', profile, this.plugins[profile.name].view) - this.removeView(profile) + if (this.plugins[profile.name].active) this.call('menuicons', 'select', 'filePanel') + super.remove(profile.name) + this.call('menuicons', 'unlinkContent', profile) + this.renderComponent() } async unPinView (profile, view) { From 05ecb1f512be5d4514421e1b15528bb3a356295e Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 15 May 2024 15:01:37 +0100 Subject: [PATCH 57/69] Fixed deactivation bug for pinned plugin --- apps/remix-ide/src/app/components/pinned-panel.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remix-ide/src/app/components/pinned-panel.tsx b/apps/remix-ide/src/app/components/pinned-panel.tsx index 9bb87fabff..10f0d9363d 100644 --- a/apps/remix-ide/src/app/components/pinned-panel.tsx +++ b/apps/remix-ide/src/app/components/pinned-panel.tsx @@ -29,6 +29,7 @@ export class PinnedPanel extends AbstractPanel { if (this.plugins[name] && this.plugins[name].active) { this.emit('unPinnedPlugin', name) this.events.emit('unPinnedPlugin', name) + super.remove(name) } }) } From 20640d3ec5e0acbccd3711ac48f05db3df76dc89 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Thu, 16 May 2024 11:45:54 +0100 Subject: [PATCH 58/69] Fix solidity compiler breaking --- libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx b/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx index 9786e11fbf..b1751ecb4c 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx +++ b/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx @@ -373,7 +373,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => { // Load solc compiler version according to pragma in contract file const _setCompilerVersionFromPragma = (filename: string) => { - if (!solJsonBinData.selectorList) return + if (solJsonBinData && !solJsonBinData.selectorList) return api.readFile(filename).then((data) => { if (!data) return const pragmaArr = data.match(/(pragma solidity (.+?);)/g) From b8b0d2e9fb612985437b167cb4208e460388dffb Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Mon, 20 May 2024 15:48:08 +0100 Subject: [PATCH 59/69] Removed wrong translations --- apps/remix-ide/src/app/tabs/locales/es/panel.json | 12 ------------ apps/remix-ide/src/app/tabs/locales/fr/panel.json | 12 ------------ apps/remix-ide/src/app/tabs/locales/it/panel.json | 12 ------------ apps/remix-ide/src/app/tabs/locales/ru/panel.json | 10 ---------- apps/remix-ide/src/app/tabs/locales/zh/panel.json | 12 ------------ 5 files changed, 58 deletions(-) delete mode 100644 apps/remix-ide/src/app/tabs/locales/es/panel.json delete mode 100644 apps/remix-ide/src/app/tabs/locales/fr/panel.json delete mode 100644 apps/remix-ide/src/app/tabs/locales/it/panel.json delete mode 100644 apps/remix-ide/src/app/tabs/locales/ru/panel.json delete mode 100644 apps/remix-ide/src/app/tabs/locales/zh/panel.json diff --git a/apps/remix-ide/src/app/tabs/locales/es/panel.json b/apps/remix-ide/src/app/tabs/locales/es/panel.json deleted file mode 100644 index 84ea48e377..0000000000 --- a/apps/remix-ide/src/app/tabs/locales/es/panel.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "panel.author": "Autor", - "panel.maintainedBy": "Mantenido por", - "panel.documentation": "Documentación", - "panel.description": "Descripción", - "panel.maintainedByRemix": "Mantenido por Remix", - "panel.pluginInfo": "Información del Complemento", - "panel.linkToDoc": "Enlace a la documentación", - "panel.makeAnissue": "Crear un asunto", - "panel.pinnedMsg": "Click to dock plugin to the right", - "panel.unPinnedMsg": "Click to return plugin to the side panel" -} diff --git a/apps/remix-ide/src/app/tabs/locales/fr/panel.json b/apps/remix-ide/src/app/tabs/locales/fr/panel.json deleted file mode 100644 index d337d61274..0000000000 --- a/apps/remix-ide/src/app/tabs/locales/fr/panel.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "panel.author": "Auteur", - "panel.maintainedBy": "Maintenu par :", - "panel.documentation": "Documentation", - "panel.description": "Description", - "panel.maintainedByRemix": "Maintenu par Remix", - "panel.pluginInfo": "Informations sur l'extension", - "panel.linkToDoc": "Lien vers la documentation", - "panel.makeAnissue": "Faire un ticket", - "panel.pinnedMsg": "Click to dock plugin to the right", - "panel.unPinnedMsg": "Click to return plugin to the side panel" -} diff --git a/apps/remix-ide/src/app/tabs/locales/it/panel.json b/apps/remix-ide/src/app/tabs/locales/it/panel.json deleted file mode 100644 index 67e7adcb94..0000000000 --- a/apps/remix-ide/src/app/tabs/locales/it/panel.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "panel.author": "Autore", - "panel.maintainedBy": "Mantenuto Da", - "panel.documentation": "Documentazione", - "panel.description": "Descrizione", - "panel.maintainedByRemix": "Mantenuto da Remix", - "panel.pluginInfo": "Informazioni sul plugin", - "panel.linkToDoc": "Link alla documentazione", - "panel.makeAnissue": "Crea una Issue", - "panel.pinnedMsg": "Click to dock plugin to the right", - "panel.unPinnedMsg": "Click to return plugin to the side panel" -} diff --git a/apps/remix-ide/src/app/tabs/locales/ru/panel.json b/apps/remix-ide/src/app/tabs/locales/ru/panel.json deleted file mode 100644 index 066069d5bd..0000000000 --- a/apps/remix-ide/src/app/tabs/locales/ru/panel.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "panel.author": "Автор", - "panel.maintainedBy": "Поддерживается", - "panel.documentation": "Документация", - "panel.description": "Описание", - "panel.maintainedByRemix": "Поддерживается Remix", - "panel.pluginInfo": "Информация о плагине", - "panel.linkToDoc": "Ссылка на документацию", - "panel.makeAnissue": "Создать задачу" -} diff --git a/apps/remix-ide/src/app/tabs/locales/zh/panel.json b/apps/remix-ide/src/app/tabs/locales/zh/panel.json deleted file mode 100644 index 42e9bdbdfe..0000000000 --- a/apps/remix-ide/src/app/tabs/locales/zh/panel.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "panel.author": "作者", - "panel.maintainedBy": "维护者", - "panel.documentation": "文档", - "panel.description": "描述", - "panel.maintainedByRemix": "由 Remix 维护", - "panel.pluginInfo": "插件信息", - "panel.linkToDoc": "文档链接", - "panel.makeAnissue": "提交 issue", - "panel.pinnedMsg": "Click to return plugin to the side panel", - "panel.unPinnedMsg": "Click to dock plugin to the right" -} From 2d3dbe43e8d5b1865d41b7df42dd941ffe7f3ec7 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Mon, 20 May 2024 15:50:54 +0100 Subject: [PATCH 60/69] Modified tooltip for pin icon --- apps/remix-ide/src/app/tabs/locales/en/panel.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/panel.json b/apps/remix-ide/src/app/tabs/locales/en/panel.json index eb8a204f1e..ca051c730f 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/panel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/panel.json @@ -4,8 +4,8 @@ "panel.documentation": "Documentation", "panel.description": "Description", "panel.maintainedByRemix": "Maintained by Remix", - "panel.pinnedMsg": "Click to dock plugin to the right", - "panel.unPinnedMsg": "Click to return plugin to the side panel", + "panel.pinnedMsg": "Click to return plugin to the right side panel", + "panel.unPinnedMsg": "Click to return plugin to the left side panel", "panel.maintainedExternally": "Not maintained by Remix", "panel.pluginInfo": "Plugin info", "panel.linkToDoc": "Link to documentation", From 4f8e33236bf6986c4872d4ce990eb86ea8c02937 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Mon, 20 May 2024 15:55:51 +0100 Subject: [PATCH 61/69] Add plugins to necessary plugins list --- apps/remix-ide/src/remixAppManager.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js index e462a94074..df13ce19c0 100644 --- a/apps/remix-ide/src/remixAppManager.js +++ b/apps/remix-ide/src/remixAppManager.js @@ -77,7 +77,9 @@ let requiredModules = [ // services + layout views + system views 'doc-viewer', 'doc-gen', 'remix-templates', - 'solhint' + 'solhint', + 'pinnedPanel', + 'pluginStateLogger' ] From 94945d1ded01a458837d6997af32cb47fa4c5320 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Mon, 20 May 2024 16:06:00 +0100 Subject: [PATCH 62/69] Replace with bootstrap classes --- libs/remix-ui/app/src/lib/remix-app/remix-app.tsx | 2 +- libs/remix-ui/app/src/lib/remix-app/style/remix-app.css | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index d2ae9e5bb9..803be1de60 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -208,7 +208,7 @@ const RemixApp = (props: IRemixAppUi) => {
-
+
{props.app.pinnedPanel.render()}
Date: Tue, 28 May 2024 15:23:52 +0100 Subject: [PATCH 63/69] Change pin icons --- .../panel/src/lib/plugins/panel-header.tsx | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx index 0f1e9016ff..438d1bf87a 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx @@ -44,6 +44,19 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { {plugin?.profile?.name && }
+ { + plugin && plugin.profile.name !== 'filePanel' && ( + + +
+ }> + + +
+
+
+ ) + }
{plugin?.profile?.maintainedBy?.toLowerCase() === 'remix' ? ( }> @@ -62,22 +75,13 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { { plugin && plugin.profile.name !== 'filePanel' && ( - <> - -
- }> - - -
-
- -
- }> - - -
-
- + +
+ }> + + +
+
) } From 56edfc9255679df4018513f8789c50b02444701d Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 29 May 2024 11:54:01 +0100 Subject: [PATCH 64/69] Add functionality for plugin calls to maximise and reset pinned panel size --- .../src/app/components/pinned-panel.tsx | 1 - apps/remix-ide/src/app/panels/layout.ts | 24 +++++++++++- .../src/app/tabs/locales/en/panel.json | 2 +- .../remix-app/components/dragbar/dragbar.tsx | 39 ++++++++++++++----- .../app/src/lib/remix-app/remix-app.tsx | 27 ++++++------- .../debugger-ui/src/lib/api/debugger-api.ts | 20 ++++++++-- 6 files changed, 81 insertions(+), 32 deletions(-) diff --git a/apps/remix-ide/src/app/components/pinned-panel.tsx b/apps/remix-ide/src/app/components/pinned-panel.tsx index 10f0d9363d..03fc6e1050 100644 --- a/apps/remix-ide/src/app/components/pinned-panel.tsx +++ b/apps/remix-ide/src/app/components/pinned-panel.tsx @@ -15,7 +15,6 @@ const pinnedPanel = { } export class PinnedPanel extends AbstractPanel { - sideelement: any dispatch: React.Dispatch = () => {} loggedState: any diff --git a/apps/remix-ide/src/app/panels/layout.ts b/apps/remix-ide/src/app/panels/layout.ts index 1db8f29dfb..fa564370f4 100644 --- a/apps/remix-ide/src/app/panels/layout.ts +++ b/apps/remix-ide/src/app/panels/layout.ts @@ -6,7 +6,7 @@ import { QueryParams } from '@remix-project/remix-lib' const profile: Profile = { name: 'layout', description: 'layout', - methods: ['minimize', 'maximiseSidePanel', 'resetSidePanel', 'maximizeTerminal'] + methods: ['minimize', 'maximiseSidePanel', 'resetSidePanel', 'maximizeTerminal', 'maximisePinnedPanel', 'resetPinnedPanel'] } interface panelState { @@ -74,6 +74,16 @@ export class Layout extends Plugin { this.event.emit('resetsidepanel') } }) + + this.on('pinnedPanel', 'pinnedPlugin', async (name) => { + const current = await this.call('pinnedPanel', 'currentFocus') + if (this.maximised[current]) { + this.event.emit('maximisepinnedpanel') + } else { + this.event.emit('resetpinnedpanel') + } + }) + document.addEventListener('keypress', e => { if (e.shiftKey && e.ctrlKey) { if (e.code === 'KeyF') { @@ -110,6 +120,12 @@ export class Layout extends Plugin { this.maximised[current] = true } + async maximisePinnedPanel () { + this.event.emit('maximisepinnedpanel') + const current = await this.call('pinnedPanel', 'currentFocus') + this.maximised[current] = true + } + async maximizeTerminal() { this.panels.terminal.minimized = false this.event.emit('change', this.panels) @@ -121,4 +137,10 @@ export class Layout extends Plugin { const current = await this.call('sidePanel', 'currentFocus') this.maximised[current] = false } + + async resetPinnedPanel () { + this.event.emit('resetpinnedpanel') + const current = await this.call('pinnedPanel', 'currentFocus') + this.maximised[current] = false + } } diff --git a/apps/remix-ide/src/app/tabs/locales/en/panel.json b/apps/remix-ide/src/app/tabs/locales/en/panel.json index ca051c730f..f9a9b2ffd1 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/panel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/panel.json @@ -4,7 +4,7 @@ "panel.documentation": "Documentation", "panel.description": "Description", "panel.maintainedByRemix": "Maintained by Remix", - "panel.pinnedMsg": "Click to return plugin to the right side panel", + "panel.pinnedMsg": "Click to move plugin to the right side panel", "panel.unPinnedMsg": "Click to return plugin to the left side panel", "panel.maintainedExternally": "Not maintained by Remix", "panel.pluginInfo": "Plugin info", diff --git a/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx b/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx index 609cd6edb3..4bbb9066e8 100644 --- a/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx @@ -32,22 +32,41 @@ const DragBar = (props: IRemixDragBarUi) => { useEffect(() => { initialWidth.current = props.refObject.current.clientWidth if (props.maximiseTrigger > 0) { - const width = 0.4 * window.innerWidth - if (width > props.refObject.current.offsetWidth) { - props.refObject.current.style.width = width + 'px' - setTimeout(() => { - setDragBarPosX(offset + width) - }, 300) + if (props.layoutPosition === 'left') { + const width = 0.4 * window.innerWidth + + if (width > props.refObject.current.offsetWidth) { + props.refObject.current.style.width = width + 'px' + setTimeout(() => { + setDragBarPosX(offset + width) + }, 300) + } + } else if (props.layoutPosition === 'right') { + const width = 0.4 * window.innerWidth + + if (width > props.refObject.current.offsetWidth) { + props.refObject.current.style.width = width + 'px' + setTimeout(() => { + setDragBarPosX(window.innerWidth - width) + }, 300) + } } } }, [props.maximiseTrigger]) useEffect(() => { if (props.maximiseTrigger > 0) { - props.refObject.current.style.width = initialWidth.current + 'px' - setTimeout(() => { - setDragBarPosX(offset + initialWidth.current) - }, 300) + if (props.layoutPosition === 'left') { + props.refObject.current.style.width = initialWidth.current + 'px' + setTimeout(() => { + setDragBarPosX(offset + initialWidth.current) + }, 300) + } else if (props.layoutPosition === 'right') { + props.refObject.current.style.width = props.minWidth + 'px' + setTimeout(() => { + setDragBarPosX(window.innerWidth - props.minWidth) + }, 300) + } } }, [props.resetTrigger]) diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index 803be1de60..29dc3de3fd 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -96,12 +96,6 @@ const RemixApp = (props: IRemixAppUi) => { }) }) - props.app.layout.event.on('minimizepinnedpanel', () => { - setTimeout(() => { - setHidePinnedPanel(true) - }, 1000) - }) - props.app.layout.event.on('maximisepinnedpanel', () => { setMaximiseRightTrigger((prev) => { return prev + 1 @@ -211,15 +205,18 @@ const RemixApp = (props: IRemixAppUi) => {
{props.app.pinnedPanel.render()}
- + { + !hidePinnedPanel && + + }
{props.app.hiddenPanel.render()}
diff --git a/libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts b/libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts index 577974a282..0f444a7464 100644 --- a/libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts +++ b/libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts @@ -183,14 +183,26 @@ export const DebuggerApiMixin = (Base) => class extends Base { showMessage (title: string, message: string) {} - onStartDebugging (debuggerBackend: any) { - this.call('layout', 'maximiseSidePanel') + async onStartDebugging (debuggerBackend: any) { + const pinnedPlugin = await this.call('pinnedPanel', 'currentFocus') + + if (pinnedPlugin === 'debugger') { + this.call('layout', 'maximisePinnedPanel') + } else { + this.call('layout', 'maximiseSidePanel') + } this.emit('startDebugging') this.debuggerBackend = debuggerBackend } - onStopDebugging () { - this.call('layout', 'resetSidePanel') + async onStopDebugging () { + const pinnedPlugin = await this.call('pinnedPanel', 'currentFocus') + + if (pinnedPlugin === 'debugger') { + this.call('layout', 'resetPinnedPanel') + } else { + this.call('layout', 'resetSidePanel') + } this.emit('stopDebugging') this.debuggerBackend = null } From d94595f0e60452b4f86cb84a3946aba9a8b69293 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 29 May 2024 13:05:52 +0100 Subject: [PATCH 65/69] Added e2e --- apps/remix-ide-e2e/src/tests/layout.test.ts | 79 +++++++++++++++++++ .../panel/src/lib/plugins/panel-header.tsx | 6 +- 2 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 apps/remix-ide-e2e/src/tests/layout.test.ts diff --git a/apps/remix-ide-e2e/src/tests/layout.test.ts b/apps/remix-ide-e2e/src/tests/layout.test.ts new file mode 100644 index 0000000000..23398171d8 --- /dev/null +++ b/apps/remix-ide-e2e/src/tests/layout.test.ts @@ -0,0 +1,79 @@ +'use strict' +import { NightwatchBrowser } from 'nightwatch' +import init from '../helpers/init' + +module.exports = { + before: function (browser: NightwatchBrowser, done: VoidFunction) { + init(browser, done) + }, + + '@sources': function () { + return sources + }, + + 'Should pin solidity compiler plugin to the right and switch focus for left side panel to the file-explorer': function (browser: NightwatchBrowser) { + browser.waitForElementVisible('[data-id="movePluginToRight"]') + .click('[data-id="movePluginToRight"]') + .waitForElementVisible('[data-id="movePluginToLeft"]') + .waitForElementVisible('.pinned-panel h6[data-id="sidePanelSwapitTitle"]') + .assert.containsText('.sidepanel h6[data-id="sidePanelSwapitTitle"]', 'FILE EXPLORER') + .assert.containsText('.pinned-panel h6[data-id="sidePanelSwapitTitle"]', 'SOLIDITY COMPILER') + }, + 'Should unpin and focus on solidity compiler in the left side panel': function (browser: NightwatchBrowser) { + browser.waitForElementVisible('[data-id="movePluginToLeft"]') + .click('[data-id="movePluginToLeft"]') + .waitForElementVisible('[data-id="movePluginToRight"]') + .assert.containsText('.sidepanel h6[data-id="sidePanelSwapitTitle"]', 'SOLIDITY COMPILER') + .waitForElementNotVisible('.pinned-panel h6[data-id="sidePanelSwapitTitle"]') + }, + 'Should pin a plugin while a another plugin is already pinned': function (browser: NightwatchBrowser) { + browser.waitForElementVisible('[data-id="movePluginToRight"]') + .click('[data-id="movePluginToRight"]') + .waitForElementVisible('[data-id="movePluginToLeft"]') + .waitForElementVisible('.pinned-panel h6[data-id="sidePanelSwapitTitle"]') + .assert.containsText('.pinned-panel h6[data-id="sidePanelSwapitTitle"]', 'SOLIDITY COMPILER') + .clickLaunchIcon('udapp') + .click('[data-id="movePluginToRight"]') + .waitForElementVisible('[data-id="movePluginToLeft"]') + .assert.containsText('.pinned-panel h6[data-id="sidePanelSwapitTitle"]', 'DEPLOY & RUN TRANSACTIONS') + .assert.containsText('.sidepanel h6[data-id="sidePanelSwapitTitle"]', 'SOLIDITY COMPILER') + }, + 'Should pin a pinned plugin to the right after reloading the page': function (browser: NightwatchBrowser) { + browser.refreshPage() + .waitForElementVisible('.pinned-panel h6[data-id="sidePanelSwapitTitle"]') + .assert.containsText('.pinned-panel h6[data-id="sidePanelSwapitTitle"]', 'DEPLOY & RUN TRANSACTIONS') + }, + 'Should maintain logged state of udapp plugin after pinning and unpinning': function (browser: NightwatchBrowser) { + browser.waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') + .click('*[data-id="treeViewLitreeViewItemcontracts"]') + .openFile('contracts/1_Storage.sol') + .pause(5000) + .waitForElementPresent('*[data-id="Deploy - transact (not payable)"]') + .click('*[data-id="Deploy - transact (not payable)"]') + .waitForElementPresent('#instance0xd9145CCE52D386f254917e481eB44e9943F39138') + .clickInstance(0) + .clickFunction('store - transact (not payable)', { types: 'uint256 num', values: '10' }) + .clickFunction('retrieve - call') + .click('[data-id="movePluginToLeft"]') + .waitForElementVisible('[data-id="movePluginToRight"]') + .clickInstance(0) + .waitForElementContainsText('[data-id="treeViewLi0"]', 'uint256: 10') + }, + 'Should maintain logged state of search plugin after pinning and unpinning': function (browser: NightwatchBrowser) { + browser.clickLaunchIcon('search') + .waitForElementVisible('*[id="search_input"]') + .waitForElementVisible('*[id="search_include"]') + .setValue('*[id="search_include"]', ', *.*').pause(2000) + .setValue('*[id="search_input"]', 'read').sendKeys('*[id="search_input"]', browser.Keys.ENTER) + .pause(1000) + .waitForElementContainsText('*[data-id="search_results"]', '3_BALLOT.SOL', 60000) + .waitForElementContainsText('*[data-id="search_results"]', 'contracts', 60000) + .waitForElementContainsText('*[data-id="search_results"]', 'README.TXT', 60000) + .click('[data-id="movePluginToRight"]') + .waitForElementContainsText('*[data-id="search_results"]', '3_BALLOT.SOL') + .waitForElementContainsText('*[data-id="search_results"]', 'contracts') + .waitForElementContainsText('*[data-id="search_results"]', 'README.TXT') + } +} + +const sources = [] diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx index 438d1bf87a..b2d87297e2 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx @@ -48,9 +48,9 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { plugin && plugin.profile.name !== 'filePanel' && ( -
+
}> - +
@@ -76,7 +76,7 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { plugin && plugin.profile.name !== 'filePanel' && ( -
+
}> From fdecbdea75683c4bb0ecd0b148cede876d684d62 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Thu, 30 May 2024 10:14:12 +0100 Subject: [PATCH 66/69] Disable blockscout api test --- apps/remix-ide-e2e/src/tests/url.test.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/url.test.ts b/apps/remix-ide-e2e/src/tests/url.test.ts index 04b0cb9642..679fb72951 100644 --- a/apps/remix-ide-e2e/src/tests/url.test.ts +++ b/apps/remix-ide-e2e/src/tests/url.test.ts @@ -70,7 +70,7 @@ module.exports = { .getEditorValue((content) => { browser.assert.ok(content && content.indexOf( 'https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol') !== -1, - 'code has not been loaded') + 'code has not been loaded') }) }, @@ -87,7 +87,7 @@ module.exports = { .getEditorValue((content) => { browser.assert.ok(content && content.indexOf( 'proposals.length = _numProposals;') !== -1, - 'url has not been loaded') + 'url has not been loaded') }) }, @@ -121,8 +121,8 @@ module.exports = { }) }, - - 'Should load Blockscout verified contracts from URL "address" and "blockscout" params (multiple sources)': function (browser: NightwatchBrowser) { + //Disabled due to failure from blockscout api + 'Should load Blockscout verified contracts from URL "address" and "blockscout" params (multiple sources)': '' + function (browser: NightwatchBrowser) { browser .url('http://127.0.0.1:8080/#address=0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9&blockscout=eth.blockscout.com') .refreshPage() @@ -162,7 +162,7 @@ module.exports = { .getEditorValue((content) => { browser.assert.ok(content && content.indexOf( 'proposals.length = _numProposals;') !== -1, - 'code has been loaded') + 'code has been loaded') }) .url('http://127.0.0.1:8080') // refresh without loading the code sample .currentWorkspaceIs('default_workspace') From e011b5ee9c67032a5c68b5930639a8a0a64a81f7 Mon Sep 17 00:00:00 2001 From: ryestew Date: Fri, 31 May 2024 11:14:18 -0400 Subject: [PATCH 67/69] update font awesome kit --- .../src/assets/fontawesome/css/all.css | 2 ++ .../fontawesome/webfonts/custom-icons.ttf | Bin 4404 -> 4756 bytes .../fontawesome/webfonts/custom-icons.woff2 | Bin 2608 -> 2780 bytes 3 files changed, 2 insertions(+) diff --git a/apps/remix-ide/src/assets/fontawesome/css/all.css b/apps/remix-ide/src/assets/fontawesome/css/all.css index 7513e4fc29..59c32c20ed 100644 --- a/apps/remix-ide/src/assets/fontawesome/css/all.css +++ b/apps/remix-ide/src/assets/fontawesome/css/all.css @@ -19391,6 +19391,8 @@ readers do not read off random characters that represent icons */ .fak.fa-cairo::before, .fa-kit.fa-cairo::before { content: "\e000"; } .fak.fa-circom::before, .fa-kit.fa-circom::before { content: "\e001"; } +.fak.fa-fa-dock-l::before, .fa-kit.fa-fa-dock-l::before { content: "\e007"; } +.fak.fa-fa-dock-r::before, .fa-kit.fa-fa-dock-r::before { content: "\e006"; } .fak.fa-lexon::before, .fa-kit.fa-lexon::before { content: "\e004"; } .fak.fa-solidity-mono::before, .fa-kit.fa-solidity-mono::before { content: "\e005"; } .fak.fa-ts-logo::before, .fa-kit.fa-ts-logo::before { content: "\e003"; } diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.ttf b/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.ttf index 1be7447613967218f9724509ad411c67ed5f7afe..cd8888a51eb4189dac74f7cc68a57afea1378189 100644 GIT binary patch delta 1127 zcmZ9LOK1~O6o&tECy%Bzk7*}~+GuBNO>NOO(`cfi1`AbC@qv$ph#K3}7Mms{5i2gD zxDgRit_yW1R#)9Af`XyqMqGZbaZeiw{_PwfHrXS>}WAx#)^fLtmjy7K0kGN{FB*}WBn6o`!G?+k0pywUvkdQ zXC^q{=@9MAUwHLQ6l*i;6%@GshOMVcqxs-m*kZlFS}W#f>Sbsm%z+jT=+pUPA$0LQ z>)<=UbF^Hl){Z=QaS3QoaDJv~7F)0?T3I*~-th}Me z^LKucW8wg?_*)!yb^;=HTk{iWh5|A~Yv_mENICM$Dcag%ci2nLQa6X*k?!$6^nQEx zl^(R#72eI6whFyS198JJGTBU4HIu!`Uc>bHeSX!9#ba?&Rn_P3HdQmtnu`oZgUi%& zbjzyIt^UpgQKGZos`VvoO7ziV5zXbI!rCh|5|*WjJ$3;N|1GUsjV8`o4H~u@Q9)%z z(-iBDqR}wl(f`a5n_D(yn9D|ObD3x$(1p0m z9=pbQdI2v?d~_2&#BjysRwQxUm8;ta2ggg( zwfv<*wNxw&jFyUWb!aVROHa3_(H-9D}y9tttRuyT(lu$Yw(mu%1%z zB1JEbLIn>V1Q81!6hzuX^rYfJM9`xc4<1w$^jyD9M(D6J^StlOeBb=+t>LFbZ4iJk zR-nQ-J(oFJ7@xEO8ew;#%&wH)oji+7FnV9hOAp+tBm>rbq8$69VTkWe%>LTngy%du~6{wxF0 z6~H&waGR}PkLPdm+z&jy(Az9>sJ?!Xyr3Qbi-^KD@TK^}+l1`5Itr-6GKBsxhv%=e z#a`dw);l&Az29*g>{&q(qrLP|j8TF7qDJFlo%S=mBjd>*x)W{#Ns9enjVZjBOxPtu zcu9gBu%AIi3fCq3w$1VLF;dbGAcwW@6J z>v>Gb(y(L&F&dDpVp7RS_HCQv$3>c#egI?iOmY}A)Ri1TTDc)vhh`{_6mc(sh-xXl zXfHLZZr#YHa}zl;n-`l}N-;;p87(OeYlp<|*zOVYlv{5ZCokJg*RhT1YOB&}HJZmV znKJuU-%giYM=WYn;=Eo+75TqeLK9WEsKY=OX}+=vt|oI{JdYPt6QiQ59}#Q%S@9;G p5P5xwOz|SV$2ZOE#CI(#^!Tb6OzhM6MMxo)eB`G91;uP4`wx7^fXV;> diff --git a/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.woff2 b/apps/remix-ide/src/assets/fontawesome/webfonts/custom-icons.woff2 index 70babe6b9770370569372f65eadb16c301b73264..d107b4d1c3d02ff22e3655759b04239afee162c8 100644 GIT binary patch delta 2753 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 H2Lk{A=GaXv delta 2584 zcmV+z3g`9Q6|fW=cTYw#00961000Uw015yA000n0000T+001$O8yzoY#<1irjiQRGEo#LLWR&FAo*xap;A_tVTyD1 zWY3r_eaw_$$uP=SYbt-$Didq(W+OJl_W@EjQJE;9GP^1r0##)7bx6XIYK4=PjY)YG zJ}B{Q`MUKGh=`c(`GoSl4@$28H=2ll09f|pd;aeE&vM(1AZ&=pCy_J|VYA&3iNu`$ zM#_4E5)lQYwS+*Don3qbFC&ixZjVP2(XGDM`WrR$0wO`4V{(5HQhFTCMhf{_~%&RxewvR;zpd{O3Pkt^WTxL~)5(8Am`Am;e7^ z8Aq6|*X#BF-*#cW{^EMQ#_iW%T(8SG0;0J5|AWgog67G+k_3g@&)^SuGv)LoBFqhQ zXGS~PTGv&nWNV~i{!FcEJ=&!mZJ0Y8^`bxNYhCMFwcLLxsidxTS=CipNlh!M#(uP; z9s5z&m9o%_@deq=bfz;nQ$`UGMP(UBQC#lbe6+J8^kyl9(4N%w!VfWx69I@k&pjak z0Tc%ZyL*X%BjRZ@ou+vZq?s1N5jP+0>R&7cp))8l)ge_N8NL+lWfJ@Gjpw(nNO;rG)s1- zGbh7xSoX{^O0m##>#D1=WoB-fd2U+nTB*Q~Yq>Mbuy?kKnVA>E37-s0(+#C%>w6ya zxW9^-rD|K|xmhxEXQYy<)^$JHQMy9KT=Gf9Ttz3CJAZ$~T52#4Jn(4s>jAWv`|db$ z<2?tH+X8-?C})t^&l|6xaf{!neIPYE^qT-2f*&``Lk1q_c{4!4uBxIu)7CnxH=O+1;lYx#WBt}E`Wog0JH#{1{pwtXuHAZu%S8KlIYlI z(+vZ6rZX+il~fs*T65j^JlcVmhKr?P?%I~;N>&w1rC3%K*ShD0wLA_PGbX2}ry-Od z_MxwkyfrPS+DSg_t8f`AA7P&eJuTBaB>MF9G)#ZK8~O^qA8x5i-kOLrO_}1Qq3`>C z_?=|ZTTt$hRQr$>3sT#U_kD}d5)uG7{qL4|N?!#^O4k#@_tV#3 zcisQD01;6@&Gw7LelQO+x$DOtByEvKcDs?bJje%D)9+({3#9M?w0 zA(ccgS{4%9evO8sH|h3BLpZ31ByZ&Lk+n9-GL3H_mOT9#*a6zc*)9~z% zamht4pOyTV=8J-KCUn76ZK5o=L25P2L`Bf_QvN}w!&s;D;C{zv%+xoEwJfnMiY~y&s(}-T2gBpl{H>5Ty@@%hHhA@AuUsN%te3Iy5qGO zYkPO@dTqwq-rY6FVa##X)@lxsQ(Lo5)6AGfd3vU1EU8!cS*9x@lgUobFPtX3Tb0R&ATn z_vLa~kWRc%&I@L7QtblcQjmYrP>?;>jI9u#=lq1s3DQXvC?}XsBA+h{COMm0$}+LY zN%6Rl3ZGJiK9kXiTa3>YMwrhXKSb~W`W?nP{{07?4x{H}SC^OVDq~f9dAVxS3#l4X zT9Z7Vn@}b+lKiH+Xt=tRmZe)%)~!lzPW5IN)yt~1T-CIsrOV@o%xiz&z1#MPy!PF@ zZI96l<~VC>j>DMad{+|_xbop28qj+POd{4+lD7izxd(p(S(@BRyd;9U>|!Mk@s5WFM0?fv+z%+b-&(Re&Qt{qiL!T6}iAez8v&j|+4W0*v4E+Wi*Qq#IG@xLe{R}E>dJI#z zMPI-)YV00;plQiCyQ7;}QvOkJxc$jAJ zp-;k562(K=s5O5tHQS9&%aiA`)Ex-fF3abz7mOeTJH*F`F+>W9WxPU&1Tl6ILLxxK zTgd~2*u*||(8UN28mN8xTWDJ-Fz`W>6W_x=5~OlcB0}$xm_VYB5eNPLv=lM65n>35 zCN9B;3lAG`(ZvQl>zxNkkzx-CE~Ab*`gslQ4pj5nY8P;;h_Q!5j1XZ{f29c|cG1Nl zBnAkvgAGWm(>M u9g@g@r%hZ!6KyomK?@!v&f6M#U`2m<#1b6ag(wQH0XY}rJ-- Date: Tue, 28 May 2024 17:48:33 +0100 Subject: [PATCH 68/69] fix vertical alignment of text in button --- libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx b/libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx index ecba6ec713..e2b2063743 100644 --- a/libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx @@ -373,7 +373,7 @@ export function ContractGUI(props: ContractGUIProps) {