From cccfa889b967a3e2119f6ba03eec581a50abe6cf Mon Sep 17 00:00:00 2001 From: James Kay Date: Fri, 10 May 2024 21:40:57 +0100 Subject: [PATCH 1/6] Scaffold a framework for the extension using Vite + Lit --- README.md | 43 -- Cargo.toml => background-worker/Cargo.toml | 0 build.sh => background-worker/build.sh | 0 .../js}/content_script.js | 0 .../js}/service_worker.js | 0 {src => background-worker/src}/lib.rs | 0 {src => background-worker/src}/util.rs | 0 flake.lock | 37 +- flake.nix | 51 +- linera-web/.gitignore | 24 + manifest.json => linera-web/manifest.json | 20 +- linera-web/options.html | 17 + linera-web/package.json | 18 + linera-web/pnpm-lock.yaml | 525 ++++++++++++++++++ linera-web/popup.html | 17 + linera-web/public/manifest.json | 28 + linera-web/sidebar.html | 17 + linera-web/src/assets/lit.svg | 1 + linera-web/src/content-script/index.ts | 1 + linera-web/src/index.css | 12 + linera-web/src/service-worker/index.ts | 0 linera-web/src/vite-env.d.ts | 1 + linera-web/tsconfig.json | 28 + linera-web/vite.config.ts | 23 + 24 files changed, 747 insertions(+), 116 deletions(-) delete mode 100644 README.md rename Cargo.toml => background-worker/Cargo.toml (100%) rename build.sh => background-worker/build.sh (100%) rename {js => background-worker/js}/content_script.js (100%) rename {js => background-worker/js}/service_worker.js (100%) rename {src => background-worker/src}/lib.rs (100%) rename {src => background-worker/src}/util.rs (100%) create mode 100644 linera-web/.gitignore rename manifest.json => linera-web/manifest.json (52%) create mode 100644 linera-web/options.html create mode 100644 linera-web/package.json create mode 100644 linera-web/pnpm-lock.yaml create mode 100644 linera-web/popup.html create mode 100644 linera-web/public/manifest.json create mode 100644 linera-web/sidebar.html create mode 100644 linera-web/src/assets/lit.svg create mode 100644 linera-web/src/content-script/index.ts create mode 100644 linera-web/src/index.css create mode 100644 linera-web/src/service-worker/index.ts create mode 100644 linera-web/src/vite-env.d.ts create mode 100644 linera-web/tsconfig.json create mode 100644 linera-web/vite.config.ts diff --git a/README.md b/README.md deleted file mode 100644 index e8ebac2..0000000 --- a/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# WASM Extension Template - -This template allows you to generate a "Hello World" web extension running a **Rust program compiled to WASM**. -The program will be executed as a **content script**, without the need of being injected into the page. - -Supports both manifest v2 and v3. - -![Demo image](https://media.discordapp.net/attachments/546761853297229825/919179215390261258/unknown.png?width=1080&height=181) - -## Install tools - -```sh -cargo install cargo-generate -cargo install wasm-pack -``` - -## Generate an extension - -You can use `cargo-generate` to generate a new crate (modify the name at the end of the command): - -```sh -cargo generate --git https://github.com/Mubelotix/wasm-extension-template --name amazing-extension -``` - -Your crate is now generated and ready to be compiled. - -## Compile your extension - -You cannot use `cargo build` to compile your crate. Use the `build.sh` script instead: - -```sh -sh build.sh -``` - -Once compiled, the target files are ready to be used in the `pkg` folder. - -## Test your program - -Web browsers allow developpers to test web extensions before publishment. -See your browser's specific instructions to do that. -After build, the `manifest.json` file is located in the `pkg` folder. -By default, your extension will run on example.com and have no other permissions. -You should want to modify the manifest (see [the doc](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json)). diff --git a/Cargo.toml b/background-worker/Cargo.toml similarity index 100% rename from Cargo.toml rename to background-worker/Cargo.toml diff --git a/build.sh b/background-worker/build.sh similarity index 100% rename from build.sh rename to background-worker/build.sh diff --git a/js/content_script.js b/background-worker/js/content_script.js similarity index 100% rename from js/content_script.js rename to background-worker/js/content_script.js diff --git a/js/service_worker.js b/background-worker/js/service_worker.js similarity index 100% rename from js/service_worker.js rename to background-worker/js/service_worker.js diff --git a/src/lib.rs b/background-worker/src/lib.rs similarity index 100% rename from src/lib.rs rename to background-worker/src/lib.rs diff --git a/src/util.rs b/background-worker/src/util.rs similarity index 100% rename from src/util.rs rename to background-worker/src/util.rs diff --git a/flake.lock b/flake.lock index 34e88a4..845c972 100644 --- a/flake.lock +++ b/flake.lock @@ -86,29 +86,12 @@ "type": "github" } }, - "nixpkgs_3": { - "locked": { - "lastModified": 1705316053, - "narHash": "sha256-J2Ey5mPFT8gdfL2XC0JTZvKaBw/b2pnyudEXFvl+dQM=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "c3e128f3c0ecc1fb04aef9f72b3dcc2f6cecf370", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "flake-parts": "flake-parts", "nixpkgs": "nixpkgs", "rust-overlay": "rust-overlay", - "systems": "systems_2", - "treefmt-nix": "treefmt-nix" + "systems": "systems_2" } }, "rust-overlay": { @@ -159,24 +142,6 @@ "repo": "default", "type": "github" } - }, - "treefmt-nix": { - "inputs": { - "nixpkgs": "nixpkgs_3" - }, - "locked": { - "lastModified": 1706111218, - "narHash": "sha256-ueC4DvzFzN9Ft3kLSv8g6uuT3Ghz+jZ7UlGQFPZxBrg=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "23f601bfdef75e21fe8854e24a043bb642201794", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index d7ccd30..3db3ebc 100644 --- a/flake.nix +++ b/flake.nix @@ -4,19 +4,29 @@ flake-parts.url = "github:hercules-ci/flake-parts"; systems.url = "github:nix-systems/default"; rust-overlay.url = "github:oxalica/rust-overlay"; - - # Dev tools - treefmt-nix.url = "github:numtide/treefmt-nix"; }; outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { systems = import inputs.systems; - imports = [ - inputs.treefmt-nix.flakeModule - ]; perSystem = { config, self', pkgs, lib, system, rust-overlay, ... }: let - rust-toolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; + rust = rec { + toolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; + nativeBuildInputs = with pkgs; [ + toolchain + rust-analyzer + ]; + buildInputs = with pkgs; [ + pkg-config + openssl + wasm-pack + ]; + }; + + web = { + nativeBuildInputs = [ pkgs.nodePackages.pnpm ]; + buildInputs = []; + }; in { _module.args.pkgs = import inputs.nixpkgs { inherit system; @@ -25,34 +35,13 @@ # Rust dev environment devShells.default = pkgs.mkShell { - inputsFrom = [ - config.treefmt.build.devShell - ]; shellHook = '' # For rust-analyzer 'hover' tooltips to work. - export RUST_SRC_PATH=${rust-toolchain.availableComponents.rust-src} + export RUST_SRC_PATH=${rust.toolchain.availableComponents.rust-src} export PATH=~/.cargo/bin:$PATH ''; - nativeBuildInputs = with pkgs; [ - rust-toolchain - rust-analyzer - ]; - - buildInputs = with pkgs; [ - pkg-config - openssl - wasm-pack - ]; - }; - - # Add your auto-formatters here. - # cf. https://numtide.github.io/treefmt/ - treefmt.config = { - projectRootFile = "flake.nix"; - programs = { - nixpkgs-fmt.enable = true; - rustfmt.enable = true; - }; + nativeBuildInputs = rust.nativeBuildInputs ++ web.nativeBuildInputs; + buildInputs = rust.buildInputs ++ web.buildInputs; }; }; }; diff --git a/linera-web/.gitignore b/linera-web/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/linera-web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/manifest.json b/linera-web/manifest.json similarity index 52% rename from manifest.json rename to linera-web/manifest.json index 4244b0b..dba7119 100644 --- a/manifest.json +++ b/linera-web/manifest.json @@ -2,19 +2,27 @@ "name" : "linera-web", "version" : "1.0", "description" : "linera-web", - "permissions": [], + "permissions": ["sidePanel"], + "content_security_policy": { + "extension_pages": "script-src 'self' 'wasm-unsafe-eval';" + }, + "options_page": "options.html", + "action": { + "default_title": "POPUP TITLE" + }, + "side_panel": { + "default_title": "SIDEBAR TITLE", + "default_path": "sidebar.html" + }, "content_scripts": [ { "matches": ["file:///*"], - "js": ["content_script.js"] + "js": ["content-script.js"] } ], "background": { - "service_worker": "service_worker.js", + "service_worker": "service-worker.js", "type": "module" }, - "content_security_policy": { - "extension_pages": "script-src 'self' 'wasm-unsafe-eval';" - }, "manifest_version": 3 } diff --git a/linera-web/options.html b/linera-web/options.html new file mode 100644 index 0000000..c52aead --- /dev/null +++ b/linera-web/options.html @@ -0,0 +1,17 @@ + + + + + + Linera + + + +
+

Linera

+
+
+

This is the Linera options page.

+
+ + diff --git a/linera-web/package.json b/linera-web/package.json new file mode 100644 index 0000000..465f3f2 --- /dev/null +++ b/linera-web/package.json @@ -0,0 +1,18 @@ +{ + "name": "linera-web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "lit": "^3.1.2" + }, + "devDependencies": { + "typescript": "^5.2.2", + "vite": "^5.2.0" + } +} diff --git a/linera-web/pnpm-lock.yaml b/linera-web/pnpm-lock.yaml new file mode 100644 index 0000000..7a3a7c6 --- /dev/null +++ b/linera-web/pnpm-lock.yaml @@ -0,0 +1,525 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + lit: + specifier: ^3.1.2 + version: 3.1.3 + +devDependencies: + typescript: + specifier: ^5.2.2 + version: 5.4.5 + vite: + specifier: ^5.2.0 + version: 5.2.11 + +packages: + + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@lit-labs/ssr-dom-shim@1.2.0: + resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} + dev: false + + /@lit/reactive-element@2.0.4: + resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + dev: false + + /@rollup/rollup-android-arm-eabi@4.17.2: + resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.17.2: + resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.17.2: + resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.17.2: + resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.17.2: + resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-musleabihf@4.17.2: + resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.17.2: + resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.17.2: + resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-powerpc64le-gnu@4.17.2: + resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.17.2: + resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.17.2: + resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.17.2: + resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.17.2: + resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.17.2: + resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.17.2: + resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.17.2: + resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: false + + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /lit-element@4.0.5: + resolution: {integrity: sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + '@lit/reactive-element': 2.0.4 + lit-html: 3.1.3 + dev: false + + /lit-html@3.1.3: + resolution: {integrity: sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==} + dependencies: + '@types/trusted-types': 2.0.7 + dev: false + + /lit@3.1.3: + resolution: {integrity: sha512-l4slfspEsnCcHVRTvaP7YnkTZEZggNFywLEIhQaGhYDczG+tu/vlgm/KaWIEjIp+ZyV20r2JnZctMb8LeLCG7Q==} + dependencies: + '@lit/reactive-element': 2.0.4 + lit-element: 4.0.5 + lit-html: 3.1.3 + dev: false + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: true + + /rollup@4.17.2: + resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.17.2 + '@rollup/rollup-android-arm64': 4.17.2 + '@rollup/rollup-darwin-arm64': 4.17.2 + '@rollup/rollup-darwin-x64': 4.17.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 + '@rollup/rollup-linux-arm-musleabihf': 4.17.2 + '@rollup/rollup-linux-arm64-gnu': 4.17.2 + '@rollup/rollup-linux-arm64-musl': 4.17.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 + '@rollup/rollup-linux-riscv64-gnu': 4.17.2 + '@rollup/rollup-linux-s390x-gnu': 4.17.2 + '@rollup/rollup-linux-x64-gnu': 4.17.2 + '@rollup/rollup-linux-x64-musl': 4.17.2 + '@rollup/rollup-win32-arm64-msvc': 4.17.2 + '@rollup/rollup-win32-ia32-msvc': 4.17.2 + '@rollup/rollup-win32-x64-msvc': 4.17.2 + fsevents: 2.3.3 + dev: true + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + dev: true + + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /vite@5.2.11: + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.17.2 + optionalDependencies: + fsevents: 2.3.3 + dev: true diff --git a/linera-web/popup.html b/linera-web/popup.html new file mode 100644 index 0000000..be9b679 --- /dev/null +++ b/linera-web/popup.html @@ -0,0 +1,17 @@ + + + + + + Linera + + + +
+

Linera

+
+
+

This is the Linera popup.

+
+ + diff --git a/linera-web/public/manifest.json b/linera-web/public/manifest.json new file mode 100644 index 0000000..3956fc6 --- /dev/null +++ b/linera-web/public/manifest.json @@ -0,0 +1,28 @@ +{ + "name" : "linera-web", + "version" : "1.0", + "description" : "linera-web", + "permissions": ["sidePanel"], + "content_security_policy": { + "extension_pages": "script-src 'self' 'wasm-unsafe-eval';" + }, + "options_page": "options.html", + "action": { + "default_title": "POPUP TITLE" + }, + "side_panel": { + "default_title": "SIDEBAR TITLE", + "default_path": "sidebar.html" + }, + "content_scripts": [ + { + "matches": [""], + "js": ["content-script.js"] + } + ], + "background": { + "service_worker": "service-worker.js", + "type": "module" + }, + "manifest_version": 3 +} diff --git a/linera-web/sidebar.html b/linera-web/sidebar.html new file mode 100644 index 0000000..d9a8625 --- /dev/null +++ b/linera-web/sidebar.html @@ -0,0 +1,17 @@ + + + + + + Linera + + + +
+

Linera

+
+
+

This is the Linera sidebar.

+
+ + diff --git a/linera-web/src/assets/lit.svg b/linera-web/src/assets/lit.svg new file mode 100644 index 0000000..4a9c1fe --- /dev/null +++ b/linera-web/src/assets/lit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/linera-web/src/content-script/index.ts b/linera-web/src/content-script/index.ts new file mode 100644 index 0000000..3d446b7 --- /dev/null +++ b/linera-web/src/content-script/index.ts @@ -0,0 +1 @@ +console.log("Content script"); diff --git a/linera-web/src/index.css b/linera-web/src/index.css new file mode 100644 index 0000000..eee093f --- /dev/null +++ b/linera-web/src/index.css @@ -0,0 +1,12 @@ +:root { + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + margin: 0; + min-width: 320px; + min-height: 100vh; +} diff --git a/linera-web/src/service-worker/index.ts b/linera-web/src/service-worker/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/linera-web/src/vite-env.d.ts b/linera-web/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/linera-web/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/linera-web/tsconfig.json b/linera-web/tsconfig.json new file mode 100644 index 0000000..7a42345 --- /dev/null +++ b/linera-web/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ES2021", + "experimentalDecorators": true, + "useDefineForClassFields": false, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "plugins": [ + { + "name": "ts-lit-plugin", + "strict": true + } + ] + }, + "include": ["src"] +} diff --git a/linera-web/vite.config.ts b/linera-web/vite.config.ts new file mode 100644 index 0000000..38ce7db --- /dev/null +++ b/linera-web/vite.config.ts @@ -0,0 +1,23 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + build: { + rollupOptions: { + input: { + popup: resolve(__dirname, 'popup.html'), + sidebar: resolve(__dirname, 'sidebar.html'), + options: resolve(__dirname, 'options.html'), + "content-script": resolve(__dirname, 'src/content-script/index.ts'), + "service-worker": resolve(__dirname, 'src/service-worker/index.ts'), + manifest: resolve(__dirname, 'public/manifest.json'), + }, + output: { + preserveModules: false, + entryFileNames: '[name].js', + } + }, + }, +}) From 2fac04517bee2bb32e72c88f57c7da37754140dd Mon Sep 17 00:00:00 2001 From: James Kay Date: Fri, 10 May 2024 22:13:07 +0100 Subject: [PATCH 2/6] Add Chrome types for TypeScript --- linera-web/package.json | 1 + linera-web/pnpm-lock.yaml | 24 ++++++++++++++++++++++ linera-web/src/{vite-env.d.ts => env.d.ts} | 0 3 files changed, 25 insertions(+) rename linera-web/src/{vite-env.d.ts => env.d.ts} (100%) diff --git a/linera-web/package.json b/linera-web/package.json index 465f3f2..c8ad5ca 100644 --- a/linera-web/package.json +++ b/linera-web/package.json @@ -12,6 +12,7 @@ "lit": "^3.1.2" }, "devDependencies": { + "@types/chrome": "^0.0.267", "typescript": "^5.2.2", "vite": "^5.2.0" } diff --git a/linera-web/pnpm-lock.yaml b/linera-web/pnpm-lock.yaml index 7a3a7c6..0099e68 100644 --- a/linera-web/pnpm-lock.yaml +++ b/linera-web/pnpm-lock.yaml @@ -10,6 +10,9 @@ dependencies: version: 3.1.3 devDependencies: + '@types/chrome': + specifier: ^0.0.267 + version: 0.0.267 typescript: specifier: ^5.2.2 version: 5.4.5 @@ -364,10 +367,31 @@ packages: dev: true optional: true + /@types/chrome@0.0.267: + resolution: {integrity: sha512-vnCWPpYjazSPRMNmybRH+0q4f738F+Pbbls4ZPFsPr9/4TTNJyK1OLZDpSnghnEWb4stfmIUtq/GegnlfD4sPA==} + dependencies: + '@types/filesystem': 0.0.36 + '@types/har-format': 1.2.15 + dev: true + /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true + /@types/filesystem@0.0.36: + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} + dependencies: + '@types/filewriter': 0.0.33 + dev: true + + /@types/filewriter@0.0.33: + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} + dev: true + + /@types/har-format@1.2.15: + resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==} + dev: true + /@types/trusted-types@2.0.7: resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} dev: false diff --git a/linera-web/src/vite-env.d.ts b/linera-web/src/env.d.ts similarity index 100% rename from linera-web/src/vite-env.d.ts rename to linera-web/src/env.d.ts From c1730f7b179237fab3f320928f534120bd3f081c Mon Sep 17 00:00:00 2001 From: James Kay Date: Fri, 10 May 2024 22:13:14 +0100 Subject: [PATCH 3/6] Open side panel on button click --- linera-web/public/manifest.json | 5 +++-- linera-web/src/service-worker/index.ts | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/linera-web/public/manifest.json b/linera-web/public/manifest.json index 3956fc6..31327fb 100644 --- a/linera-web/public/manifest.json +++ b/linera-web/public/manifest.json @@ -8,11 +8,12 @@ }, "options_page": "options.html", "action": { - "default_title": "POPUP TITLE" + "default_title": "Linera" }, "side_panel": { "default_title": "SIDEBAR TITLE", - "default_path": "sidebar.html" + "default_path": "sidebar.html", + "open_at_install": true }, "content_scripts": [ { diff --git a/linera-web/src/service-worker/index.ts b/linera-web/src/service-worker/index.ts index e69de29..33595b8 100644 --- a/linera-web/src/service-worker/index.ts +++ b/linera-web/src/service-worker/index.ts @@ -0,0 +1,3 @@ +chrome.sidePanel.setPanelBehavior({ + openPanelOnActionClick: true, +}).catch((error) => console.error(error)); From ddeea08a4722a2fe25bbb2dceccf4771004b2659 Mon Sep 17 00:00:00 2001 From: James Kay Date: Fri, 10 May 2024 22:16:52 +0100 Subject: [PATCH 4/6] Remove vestige --- linera-web/src/assets/lit.svg | 1 - linera-web/vite.config.ts | 1 - 2 files changed, 2 deletions(-) delete mode 100644 linera-web/src/assets/lit.svg diff --git a/linera-web/src/assets/lit.svg b/linera-web/src/assets/lit.svg deleted file mode 100644 index 4a9c1fe..0000000 --- a/linera-web/src/assets/lit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/linera-web/vite.config.ts b/linera-web/vite.config.ts index 38ce7db..1814de3 100644 --- a/linera-web/vite.config.ts +++ b/linera-web/vite.config.ts @@ -1,6 +1,5 @@ import { resolve } from 'path' import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' // https://vitejs.dev/config/ export default defineConfig({ From 97ad09b2043076748d1c732f709aa7cd3ab1eaca Mon Sep 17 00:00:00 2001 From: James Kay Date: Fri, 10 May 2024 23:31:36 +0100 Subject: [PATCH 5/6] Cleanup and branding --- linera-web/manifest.json | 28 ------------------ .../assets/Linera_Black_Mark@2x cropped.png | Bin 0 -> 12940 bytes .../public/assets/Linera_FullColor_H.svg | 1 + linera-web/public/assets/Linera_Red_Mark.png | Bin 0 -> 8103 bytes linera-web/public/assets/Linera_Red_Mark.svg | 1 + .../assets/Linera_Red_Mark@2x cropped.png | Bin 0 -> 28113 bytes .../public/assets/Linera_Red_Mark@2x.png | Bin 0 -> 18488 bytes linera-web/public/manifest.json | 16 ++++++---- linera-web/sidebar.html | 17 ----------- .../src/components/linera-logo/index.ts | 23 ++++++++++++++ .../src/components/linera-logo/logo.svg | 1 + linera-web/src/index.css | 28 +++++++++++++----- .../{options.html => src/options/index.html} | 0 .../{popup.html => src/popup/index.html} | 0 linera-web/src/service-worker/index.ts | 7 +++++ linera-web/src/sidebar/index.html | 20 +++++++++++++ linera-web/src/sidebar/style.css | 0 linera-web/src/welcome/index.html | 19 ++++++++++++ linera-web/vite.config.ts | 7 +++-- 19 files changed, 108 insertions(+), 60 deletions(-) delete mode 100644 linera-web/manifest.json create mode 100644 linera-web/public/assets/Linera_Black_Mark@2x cropped.png create mode 100644 linera-web/public/assets/Linera_FullColor_H.svg create mode 100644 linera-web/public/assets/Linera_Red_Mark.png create mode 100644 linera-web/public/assets/Linera_Red_Mark.svg create mode 100644 linera-web/public/assets/Linera_Red_Mark@2x cropped.png create mode 100644 linera-web/public/assets/Linera_Red_Mark@2x.png delete mode 100644 linera-web/sidebar.html create mode 100644 linera-web/src/components/linera-logo/index.ts create mode 100644 linera-web/src/components/linera-logo/logo.svg rename linera-web/{options.html => src/options/index.html} (100%) rename linera-web/{popup.html => src/popup/index.html} (100%) create mode 100644 linera-web/src/sidebar/index.html create mode 100644 linera-web/src/sidebar/style.css create mode 100644 linera-web/src/welcome/index.html diff --git a/linera-web/manifest.json b/linera-web/manifest.json deleted file mode 100644 index dba7119..0000000 --- a/linera-web/manifest.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name" : "linera-web", - "version" : "1.0", - "description" : "linera-web", - "permissions": ["sidePanel"], - "content_security_policy": { - "extension_pages": "script-src 'self' 'wasm-unsafe-eval';" - }, - "options_page": "options.html", - "action": { - "default_title": "POPUP TITLE" - }, - "side_panel": { - "default_title": "SIDEBAR TITLE", - "default_path": "sidebar.html" - }, - "content_scripts": [ - { - "matches": ["file:///*"], - "js": ["content-script.js"] - } - ], - "background": { - "service_worker": "service-worker.js", - "type": "module" - }, - "manifest_version": 3 -} diff --git a/linera-web/public/assets/Linera_Black_Mark@2x cropped.png b/linera-web/public/assets/Linera_Black_Mark@2x cropped.png new file mode 100644 index 0000000000000000000000000000000000000000..29aea0e83c94e1e8bbcc8b51bae250b76e14fbca GIT binary patch literal 12940 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 z z2Qz&@E?wX&a>0opZukg=t87<)JBKnAL${RF3+@bz?nDzEPheVv@-7~#d$pTRnF>PT zB2<8}`+P)ysz=4;efr#Hm9YgD70<-&RwlkY>O@aEz`feVqD%#}XkEW&K!BmKp>W`< za_OtCy$R|7lPB5ns$df8Bei#* z;{j2hnYp>3$>E2j^wY)~y7i|=>7NrX$^Y8AB=5KX={{k)8BQ;%%u6QUM!eV6472qb z@*e|-+{ONLu>J7_FM!ph+Iz~#Z1KYhakWe#o33PcA!59cSWt~6C0qH(p~9d%6FUdq z5cL2_;ck~DPsG)=k8rBQt7}hw&tfJ&laeC-l_`J`7@4PXS}$U0L42_V23WE&7XAXK z;(^}Xb7>)kQwAcIw(q*|hP3v-&Ug~ha=jKz9%xhet4%p=Nt5Lh!zhN#AYYs6ig($A zmyro0u-!K0KE8Kke|5;6q5*d_Xz1^Zi{neL8bBU3OyxJyO&u)z z3DfgJKVcD1uf{mZ@~2>QN2BR1so3T*S|OxGM)IMx+oDNCBt5VCE;}}fX2Nj?QFREk zk~jqlC9Z)dNsy069NS+*(*WNxAg*z#_HT=GV=NeF^Z#+H zUWS3tS@HV0{F&hf*d#?WkcZr*7o52OUu%Zxi0slKu5#g4x%})xHPh;lNiMv7&kKn3 z*}ZW@%#h4fT_c_U>>z2K4z;DH~=4-u7FJmO|r;iH{=tOQ~pj=axWU8{+=6j@~6r=qUi#9M|809=9MCQE ziDg7`z?iCkTwj^GX%lZXGSDU%zwFfy_jw0Jf5Nq5e4^&h=n>RhYo~BQ;34$-KV%#* zztv0}!VqKcqq&?yc*Fl?7Ry549jnw7(}y7gw5U`!@L-|7D`P^TQ%J zS08|*PHR5WcT}JmMwxK~*cuNGrR&5GT0tw&1|t-r zby*=F3l+Uh-6FP?*Xi^^AX3gMW@P$LqOMbP4)zen+cyLSE3y`2eExKm{fe#~Pp$JY z4Uiadnj|bsRIT{a+svY7t57uGRiHe()&pK z)zN%BqC-%Nn{Xt=-!C9S8S9WYB{OaE7kKC+-;Tk9i4bu?0?}@m)t-+sA`i-)8sz<%y_=R`L z0tVdr9hUJGf+!kG5}nLeR%((hr?!j|Eo)?M3r*4#USKaqc8~*h?w}iD!79{neB;2F zuHcaK^64Y4{wZKKu&HELS~HvLNt*BJoJg_h91o%RKICyE>1K&e39nX8hp&O-|Gro6 z(V`Sg$sr{N&;l#Ltg?zv)$9JkM$mL}Fg9^HX10hV!t(`oz7*=l+w{IwMaE$~MCG2b zrvkW_Oq;rbkK%%pXh;gj7l#QggX0t2FncAD$QF+xBy{PgK!QVJ5|!`AvK7nkJjCT2 zsXRs^F>b$g9e7q~1VL|GDKN8Q{Ii9s)k0?qSj_c6M;6qO`SqYA&ASWivY2c>*iU*= zAi2@|yF>=2R4$`;W=sdh`BTyYym}CNS51**NxFn>W2wp+WvyF+sqj|T6k{Rof%}TJ z?=^Ot-7Z7b4Ps=93=4ROR^%;xdR;8kzEzFa>)#|rb1jg|O87;9)e4}`tB061;rO)P zF|1{zmY0_1fiWty>1J9r7tsos%GImqHOkCU``&at%n*wakIUqGTrxIw{gyE*wrQcM z8H-U5xyRR#=E2q@FRdrEewT=2hxC%O0u$Bwy!);>I5wWC-w;f-c5@fW`8djA*8MM7 zqenGv&H#&HC3B9Gl@JlrS-ig&2$nWR2`A$eNWTvBf?aEEr*tJLL+g7C#f5$-kD&Wn zWq%q!52LUtVedJdu?)T=UH^0-CW#Q@N;4`p$bMf0FdEz%!dXXA+jA4)SeNK2ai<8$ zABT8;4O*U=Yw@OeWHk?Z)3Ns9i4aV}?Od@xY(4$awc-@gFBN9jGUx|u$Y*fn3!=9Yxw_#;N)U$XXEq#M-V*De@H?Q_&*dp l?3~c<9+pn7|1XZLoRs+g63Kp1VL-wGsKc~XYLuS`{SOB>Wq1Gp literal 0 HcmV?d00001 diff --git a/linera-web/public/assets/Linera_FullColor_H.svg b/linera-web/public/assets/Linera_FullColor_H.svg new file mode 100644 index 0000000..4fd7433 --- /dev/null +++ b/linera-web/public/assets/Linera_FullColor_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/linera-web/public/assets/Linera_Red_Mark.png b/linera-web/public/assets/Linera_Red_Mark.png new file mode 100644 index 0000000000000000000000000000000000000000..a988cc7df9c20adaa7f018255f30bc0bc17198e3 GIT binary patch literal 8103 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 literal 0 HcmV?d00001 diff --git a/linera-web/public/assets/Linera_Red_Mark.svg b/linera-web/public/assets/Linera_Red_Mark.svg new file mode 100644 index 0000000..4edf5ef --- /dev/null +++ b/linera-web/public/assets/Linera_Red_Mark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/linera-web/public/assets/Linera_Red_Mark@2x cropped.png b/linera-web/public/assets/Linera_Red_Mark@2x cropped.png new file mode 100644 index 0000000000000000000000000000000000000000..99ee2452237c24359dd7902f36b892757c00ce32 GIT binary patch literal 28113 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 literal 0 HcmV?d00001 diff --git a/linera-web/public/assets/Linera_Red_Mark@2x.png b/linera-web/public/assets/Linera_Red_Mark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..33ca8414c0d1fbf87f77c7d00c24bd69a6c1ed4a GIT binary patch literal 18488 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 M@_nTb3RdC&3!1Rm2><{9 literal 0 HcmV?d00001 diff --git a/linera-web/public/manifest.json b/linera-web/public/manifest.json index 31327fb..9344ab2 100644 --- a/linera-web/public/manifest.json +++ b/linera-web/public/manifest.json @@ -1,18 +1,24 @@ { - "name" : "linera-web", + "name" : "Linera", "version" : "1.0", - "description" : "linera-web", + "description" : "Linera is a user-focused blockchain protocol based on microchains", "permissions": ["sidePanel"], + "icons": { + "558": "assets/Linera_Black_Mark@2x cropped.png" + }, "content_security_policy": { "extension_pages": "script-src 'self' 'wasm-unsafe-eval';" }, - "options_page": "options.html", + "options_page": "src/options/index.html", "action": { - "default_title": "Linera" + "default_icon": "assets/Linera_Black_Mark@2x cropped.png", + "default_title": "Linera", + "default_popup": "src/popup/index.html" }, "side_panel": { + "default_icon": "assets/Linera_Black_Mark@2x cropped.png", "default_title": "SIDEBAR TITLE", - "default_path": "sidebar.html", + "default_path": "src/sidebar/index.html", "open_at_install": true }, "content_scripts": [ diff --git a/linera-web/sidebar.html b/linera-web/sidebar.html deleted file mode 100644 index d9a8625..0000000 --- a/linera-web/sidebar.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - Linera - - - -
-

Linera

-
-
-

This is the Linera sidebar.

-
- - diff --git a/linera-web/src/components/linera-logo/index.ts b/linera-web/src/components/linera-logo/index.ts new file mode 100644 index 0000000..41f8413 --- /dev/null +++ b/linera-web/src/components/linera-logo/index.ts @@ -0,0 +1,23 @@ +import { LitElement, html, css } from 'lit' +import { customElement } from 'lit/decorators.js' +import lineraLogo from './logo.svg'; + +@customElement('linera-logo') +export class LineraLogo extends LitElement { + static styles = css` + img { + padding: 2rem; + max-width: 30rem; + } + `; + + render = () => html` + Linera + `; +} + +declare global { + interface HTMLElementTagNameMap { + 'linera-logo': LineraLogo + } +} diff --git a/linera-web/src/components/linera-logo/logo.svg b/linera-web/src/components/linera-logo/logo.svg new file mode 100644 index 0000000..4fd7433 --- /dev/null +++ b/linera-web/src/components/linera-logo/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/linera-web/src/index.css b/linera-web/src/index.css index eee093f..6bd8b7a 100644 --- a/linera-web/src/index.css +++ b/linera-web/src/index.css @@ -1,12 +1,26 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); + :root { - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + --color-linera-red: #ff2a00; + --color-linera-blue: #0e2630; + --color-linera-teal: #70d4d3; + --color-linera-beige: #d6ba92; + --color-linera-white: #ffffff; + + --color-background: var(--color-linera-white); + --color-foreground: var(--color-linera-blue); } body { - margin: 0; - min-width: 320px; - min-height: 100vh; + background-color: var(--color-background); + color: var(--color-foreground); + font-family: Poppins; + + margin: 1rem; + min-width: 20rem; } diff --git a/linera-web/options.html b/linera-web/src/options/index.html similarity index 100% rename from linera-web/options.html rename to linera-web/src/options/index.html diff --git a/linera-web/popup.html b/linera-web/src/popup/index.html similarity index 100% rename from linera-web/popup.html rename to linera-web/src/popup/index.html diff --git a/linera-web/src/service-worker/index.ts b/linera-web/src/service-worker/index.ts index 33595b8..fdc1736 100644 --- a/linera-web/src/service-worker/index.ts +++ b/linera-web/src/service-worker/index.ts @@ -1,3 +1,10 @@ chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true, }).catch((error) => console.error(error)); + +chrome.runtime.onInstalled.addListener(() => (async () => { + const windowId = (await chrome.windows.getCurrent()).id; + if (windowId === undefined) return; + chrome.action.setPopup({ popup: "src/welcome/index.html" }); + await chrome.action.openPopup({ windowId }); +})()); diff --git a/linera-web/src/sidebar/index.html b/linera-web/src/sidebar/index.html new file mode 100644 index 0000000..afcbef0 --- /dev/null +++ b/linera-web/src/sidebar/index.html @@ -0,0 +1,20 @@ + + + + + + Linera + + + + + +
+

+
+
+

Wallets

+

This is a list of your wallets.

+
+ + diff --git a/linera-web/src/sidebar/style.css b/linera-web/src/sidebar/style.css new file mode 100644 index 0000000..e69de29 diff --git a/linera-web/src/welcome/index.html b/linera-web/src/welcome/index.html new file mode 100644 index 0000000..c01d217 --- /dev/null +++ b/linera-web/src/welcome/index.html @@ -0,0 +1,19 @@ + + + + + + Linera + + + + +
+

+
+
+

Welcome to Linera!

+

Click this button at any time to manage your chains.

+
+ + diff --git a/linera-web/vite.config.ts b/linera-web/vite.config.ts index 1814de3..c91cc3d 100644 --- a/linera-web/vite.config.ts +++ b/linera-web/vite.config.ts @@ -6,9 +6,10 @@ export default defineConfig({ build: { rollupOptions: { input: { - popup: resolve(__dirname, 'popup.html'), - sidebar: resolve(__dirname, 'sidebar.html'), - options: resolve(__dirname, 'options.html'), + popup: resolve(__dirname, 'src/popup/index.html'), + sidebar: resolve(__dirname, 'src/sidebar/index.html'), + options: resolve(__dirname, 'src/options/index.html'), + welcome: resolve(__dirname, 'src/welcome/index.html'), "content-script": resolve(__dirname, 'src/content-script/index.ts'), "service-worker": resolve(__dirname, 'src/service-worker/index.ts'), manifest: resolve(__dirname, 'public/manifest.json'), From b614facff313b7863858e9c6e6dbf69419087bc0 Mon Sep 17 00:00:00 2001 From: James Kay Date: Sat, 11 May 2024 05:34:35 +0100 Subject: [PATCH 6/6] Saving and loading wallet to local storage --- linera-web/package.json | 3 +- linera-web/pnpm-lock.yaml | 42 +++++++++++++ linera-web/public/manifest.json | 2 +- linera-web/src/index.css | 4 ++ linera-web/src/service-worker/index.ts | 11 +--- linera-web/src/service-worker/setup.ts | 10 ++++ linera-web/src/sidebar/index.html | 6 +- linera-web/src/sidebar/index.ts | 78 +++++++++++++++++++++++++ linera-web/src/sidebar/wallet-picker.ts | 0 9 files changed, 141 insertions(+), 15 deletions(-) create mode 100644 linera-web/src/service-worker/setup.ts create mode 100644 linera-web/src/sidebar/index.ts create mode 100644 linera-web/src/sidebar/wallet-picker.ts diff --git a/linera-web/package.json b/linera-web/package.json index c8ad5ca..1144621 100644 --- a/linera-web/package.json +++ b/linera-web/package.json @@ -9,7 +9,8 @@ "preview": "vite preview" }, "dependencies": { - "lit": "^3.1.2" + "lit": "^3.1.2", + "webext-bridge": "^6.0.1" }, "devDependencies": { "@types/chrome": "^0.0.267", diff --git a/linera-web/pnpm-lock.yaml b/linera-web/pnpm-lock.yaml index 0099e68..6b3a74a 100644 --- a/linera-web/pnpm-lock.yaml +++ b/linera-web/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: lit: specifier: ^3.1.2 version: 3.1.3 + webext-bridge: + specifier: ^6.0.1 + version: 6.0.1 devDependencies: '@types/chrome': @@ -396,6 +399,10 @@ packages: resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} dev: false + /@types/webextension-polyfill@0.8.3: + resolution: {integrity: sha512-GN+Hjzy9mXjWoXKmaicTegv3FJ0WFZ3aYz77Wk8TMp1IY3vEzvzj1vnsa0ggV7vMI1i+PUxe4qqnIJKCzf9aTg==} + dev: false + /esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} @@ -457,6 +464,11 @@ packages: lit-html: 3.1.3 dev: false + /nanoevents@6.0.2: + resolution: {integrity: sha512-FRS2otuFcPPYDPYViNWQ42+1iZqbXydinkRHTHFxrF4a1CpBfmydR9zkI44WSXAXCyPrkcGtPk5CnpW6Y3lFKQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: false + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -502,11 +514,27 @@ packages: fsevents: 2.3.3 dev: true + /serialize-error@9.1.1: + resolution: {integrity: sha512-6uZQLGyUkNA4N+Zii9fYukmNu9PEA1F5rqcwXzN/3LtBjwl2dFBbVZ1Zyn08/CGkB4H440PIemdOQBt1Wvjbrg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + type-fest: 2.19.0 + dev: false + /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} dev: true + /tiny-uid@1.1.2: + resolution: {integrity: sha512-0beRFXR+fv4C40ND2PqgNjq6iyB1dKXciKJjslLw0kPYCcR82aNd2b+Tt2yy06LimIlvtoehgvrm/fUZCutSfg==} + dev: false + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: false + /typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -547,3 +575,17 @@ packages: optionalDependencies: fsevents: 2.3.3 dev: true + + /webext-bridge@6.0.1: + resolution: {integrity: sha512-GruIrN+vNwbxVCi8UW4Dqk5YkcGA9V0ZfJ57jXP9JXHbrsDs5k2N6NNYQR5e+wSCnQpGYOGAGihwUpKlhg8QIw==} + dependencies: + '@types/webextension-polyfill': 0.8.3 + nanoevents: 6.0.2 + serialize-error: 9.1.1 + tiny-uid: 1.1.2 + webextension-polyfill: 0.9.0 + dev: false + + /webextension-polyfill@0.9.0: + resolution: {integrity: sha512-LTtHb0yR49xa9irkstDxba4GATDAcDw3ncnFH9RImoFwDlW47U95ME5sn5IiQX2ghfaECaf6xyXM8yvClIBkkw==} + dev: false diff --git a/linera-web/public/manifest.json b/linera-web/public/manifest.json index 9344ab2..d0375b3 100644 --- a/linera-web/public/manifest.json +++ b/linera-web/public/manifest.json @@ -1,7 +1,7 @@ { "name" : "Linera", "version" : "1.0", - "description" : "Linera is a user-focused blockchain protocol based on microchains", + "description" : "Linera is a user-focused blockchain protocol based on microchains.", "permissions": ["sidePanel"], "icons": { "558": "assets/Linera_Black_Mark@2x cropped.png" diff --git a/linera-web/src/index.css b/linera-web/src/index.css index 6bd8b7a..a9f6b20 100644 --- a/linera-web/src/index.css +++ b/linera-web/src/index.css @@ -24,3 +24,7 @@ body { margin: 1rem; min-width: 20rem; } + +h2 { + font-size: 150%; +} diff --git a/linera-web/src/service-worker/index.ts b/linera-web/src/service-worker/index.ts index fdc1736..525f780 100644 --- a/linera-web/src/service-worker/index.ts +++ b/linera-web/src/service-worker/index.ts @@ -1,10 +1 @@ -chrome.sidePanel.setPanelBehavior({ - openPanelOnActionClick: true, -}).catch((error) => console.error(error)); - -chrome.runtime.onInstalled.addListener(() => (async () => { - const windowId = (await chrome.windows.getCurrent()).id; - if (windowId === undefined) return; - chrome.action.setPopup({ popup: "src/welcome/index.html" }); - await chrome.action.openPopup({ windowId }); -})()); +import './setup.ts'; diff --git a/linera-web/src/service-worker/setup.ts b/linera-web/src/service-worker/setup.ts new file mode 100644 index 0000000..cb72ac4 --- /dev/null +++ b/linera-web/src/service-worker/setup.ts @@ -0,0 +1,10 @@ +chrome.sidePanel.setPanelBehavior({ + openPanelOnActionClick: true, +}).catch((error) => console.error(error)); + +chrome.runtime.onInstalled.addListener(async () => { + const windowId = (await chrome.windows.getCurrent()).id; + if (windowId === undefined) return; + chrome.action.setPopup({ popup: "src/welcome/index.html" }); + await chrome.action.openPopup({ windowId }); +}); diff --git a/linera-web/src/sidebar/index.html b/linera-web/src/sidebar/index.html index afcbef0..0a69370 100644 --- a/linera-web/src/sidebar/index.html +++ b/linera-web/src/sidebar/index.html @@ -7,14 +7,14 @@ +
-

+

-

Wallets

-

This is a list of your wallets.

+
diff --git a/linera-web/src/sidebar/index.ts b/linera-web/src/sidebar/index.ts new file mode 100644 index 0000000..66976dd --- /dev/null +++ b/linera-web/src/sidebar/index.ts @@ -0,0 +1,78 @@ +import { LitElement, html, css } from 'lit' +import { customElement, property } from 'lit/decorators.js' + +type Wallet = { + default: string; +}; + +@customElement('linera-wallet-picker') +export class WalletPicker extends LitElement { + static styles = css` + input[type="file"] { + display: none; + } + + label { + background-color: var(--color-linera-teal); + padding: 0.75em; + border-radius: 0.75em; + font-weight: bold; + display: inline-block; + } + `; + + @property() + wallet?: Wallet; + + @property() + onChange?: (event: Event) => void; + + render = () => html` +
+ + +
+ `; + + private async _onChange(event: Event & { target: HTMLInputElement }) { + const contents = await event.target.files![0].text(); + this.onChange?.(contents); + } +} + +@customElement('linera-sidebar') +export class Sidebar extends LitElement { + wallet?: Wallet; + + static styles = css` + .chain-id { + background-color: var(--color-linera-beige); + font-family: monospace; + overflow-wrap: break-word; + padding: 3px; + } + `; + + render = () => html` +

Wallet

+ ${this.wallet && html`

Your current wallet is ${this.wallet.default}.

`} + + `; + + constructor() { + super(); + let wallet = window.localStorage.getItem("wallet"); + if (wallet) this.wallet = JSON.parse(wallet); + } + + private async onWalletChange(wallet: string) { + window.localStorage.setItem("wallet", wallet); + this.wallet = JSON.parse(wallet); + } +} + +declare global { + interface HTMLElementTagNameMap { + 'linera-sidebar': Sidebar + } +} diff --git a/linera-web/src/sidebar/wallet-picker.ts b/linera-web/src/sidebar/wallet-picker.ts new file mode 100644 index 0000000..e69de29